This commit is contained in:
		
						commit
						81511072c6
					
				
							
								
								
									
										26
									
								
								.gitea/workflows/build.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								.gitea/workflows/build.yaml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | |||||||
|  | name: Build package | ||||||
|  | run-name: Build package | ||||||
|  | on: [push] | ||||||
|  | 
 | ||||||
|  | jobs: | ||||||
|  |   Build: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |       - name: Check out repository code | ||||||
|  |         uses: actions/checkout@v4 | ||||||
|  |       - name: Update repo | ||||||
|  |         run: git pull | ||||||
|  |       - name: List files in the repository | ||||||
|  |         run: | | ||||||
|  |           ls ${{ gitea.workspace }} | ||||||
|  |       - name: Update apt | ||||||
|  |         run: apt update | ||||||
|  |       - name: Installing system dependencies | ||||||
|  |         run: apt install python3 python3-pip python3-venv make -y | ||||||
|  |       - name: Run Make | ||||||
|  |         run: make | ||||||
|  |       - run: git add . | ||||||
|  |       - run: git config --global user.email "bot@molodetz.com" | ||||||
|  |       - run: git config --global user.name "bot" | ||||||
|  |       - run: git commit -a -m "Automated update of new package." | ||||||
|  |       - run: git push | ||||||
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | .vscode | ||||||
|  | .venv | ||||||
|  | .history | ||||||
|  | __pycache__ | ||||||
|  | 
 | ||||||
							
								
								
									
										24
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | |||||||
|  | BIN = ./.venv/bin/ | ||||||
|  | PYTHON = ./.venv/bin/python | ||||||
|  | PIP = ./.venv/bin/pip | ||||||
|  | 
 | ||||||
|  | all: build | ||||||
|  | 
 | ||||||
|  | ensure_env: | ||||||
|  | 	-@python3 -m venv .venv  | ||||||
|  | 
 | ||||||
|  | format: ensure_env | ||||||
|  | 	$(PIP) install shed | ||||||
|  | 	. $(BIN)/activate && shed | ||||||
|  | 
 | ||||||
|  | build: format | ||||||
|  | 	$(PIP) install -e .  | ||||||
|  | 	$(PIP) install build | ||||||
|  | 	$(PYTHON) -m build  | ||||||
|  | 
 | ||||||
|  | serve: ensure_env | ||||||
|  | 	$(BIN)rbabel.serve --host=0.0.0.0 --port=3011 --url=wss://flock.molodetz.nl | ||||||
|  | 
 | ||||||
|  | bench: ensure_env | ||||||
|  | 	$(BIN)rbabel.bench --url=http://localhost:3011/ | ||||||
|  | 
 | ||||||
							
								
								
									
										
											BIN
										
									
								
								dist/Rbabel-1.3.37-py3-none-any.whl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								dist/Rbabel-1.3.37-py3-none-any.whl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								dist/rbabel-1.0.0-py3-none-any.whl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								dist/rbabel-1.0.0-py3-none-any.whl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								dist/rbabel-1.0.0.tar.gz
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								dist/rbabel-1.0.0.tar.gz
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								dist/rbabel-1.3.37-py3-none-any.whl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								dist/rbabel-1.3.37-py3-none-any.whl
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								dist/rbabel-1.3.37.tar.gz
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								dist/rbabel-1.3.37.tar.gz
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										3
									
								
								pyproject.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								pyproject.toml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | [build-system] | ||||||
|  | requires = ["setuptools", "wheel"] | ||||||
|  | build-backend = "setuptools.build_meta" | ||||||
							
								
								
									
										28
									
								
								setup.cfg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								setup.cfg
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | |||||||
|  | [metadata] | ||||||
|  | name = rbabel | ||||||
|  | version = 1.0.0 | ||||||
|  | description = English sentence corrector | ||||||
|  | author = Retoor | ||||||
|  | author_email = retoor@molodetz.nl | ||||||
|  | license = MIT | ||||||
|  | long_description = file: README.md | ||||||
|  | long_description_content_type = text/markdown | ||||||
|  | 
 | ||||||
|  | [options] | ||||||
|  | packages = find: | ||||||
|  | package_dir = | ||||||
|  |     = src | ||||||
|  | python_requires = >=3.7 | ||||||
|  | install_requires = | ||||||
|  |    aiohttp | ||||||
|  |    dataset  | ||||||
|  |    yura @ git+https://retoor.molodetz.nl/retoor/yura.git@main | ||||||
|  | 
 | ||||||
|  | [options.packages.find] | ||||||
|  | where = src | ||||||
|  | 
 | ||||||
|  | [options.entry_points] | ||||||
|  | console_scripts = | ||||||
|  |     rbabel.serve = rbabel.__main__:main | ||||||
|  |     rbabel.bench = rbabel.cli:cli_bench | ||||||
|  |     rbabel = rbabel.cli:main | ||||||
							
								
								
									
										12
									
								
								src/Rbabel.egg-info/PKG-INFO
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/Rbabel.egg-info/PKG-INFO
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | Metadata-Version: 2.1 | ||||||
|  | Name: Rbabel | ||||||
|  | Version: 1.3.37 | ||||||
|  | Summary: English sentence corrector | ||||||
|  | Author: Retoor | ||||||
|  | Author-email: retoor@molodetz.nl | ||||||
|  | License: MIT | ||||||
|  | Requires-Python: >=3.7 | ||||||
|  | Description-Content-Type: text/markdown | ||||||
|  | Requires-Dist: aiohttp | ||||||
|  | Requires-Dist: dataset | ||||||
|  | Requires-Dist: yura@ git+https://retoor.molodetz.nl/retoor/yura.git@main | ||||||
							
								
								
									
										13
									
								
								src/Rbabel.egg-info/SOURCES.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/Rbabel.egg-info/SOURCES.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | pyproject.toml | ||||||
|  | setup.cfg | ||||||
|  | src/Rbabel.egg-info/PKG-INFO | ||||||
|  | src/Rbabel.egg-info/SOURCES.txt | ||||||
|  | src/Rbabel.egg-info/dependency_links.txt | ||||||
|  | src/Rbabel.egg-info/entry_points.txt | ||||||
|  | src/Rbabel.egg-info/requires.txt | ||||||
|  | src/Rbabel.egg-info/top_level.txt | ||||||
|  | src/rbabel/__init__.py | ||||||
|  | src/rbabel/__main__.py | ||||||
|  | src/rbabel/app.py | ||||||
|  | src/rbabel/args.py | ||||||
|  | src/rbabel/cli.py | ||||||
							
								
								
									
										1
									
								
								src/Rbabel.egg-info/dependency_links.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/Rbabel.egg-info/dependency_links.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | 
 | ||||||
							
								
								
									
										3
									
								
								src/Rbabel.egg-info/entry_points.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/Rbabel.egg-info/entry_points.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | [console_scripts] | ||||||
|  | rbabel = rbabel.cli:main | ||||||
|  | rbabel.serve = rbabel.__main__:main | ||||||
							
								
								
									
										3
									
								
								src/Rbabel.egg-info/requires.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/Rbabel.egg-info/requires.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | aiohttp | ||||||
|  | dataset | ||||||
|  | yura@ git+https://retoor.molodetz.nl/retoor/yura.git@main | ||||||
							
								
								
									
										1
									
								
								src/Rbabel.egg-info/top_level.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/Rbabel.egg-info/top_level.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | rbabel | ||||||
							
								
								
									
										12
									
								
								src/rbabel.egg-info/PKG-INFO
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/rbabel.egg-info/PKG-INFO
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | Metadata-Version: 2.1 | ||||||
|  | Name: rbabel | ||||||
|  | Version: 1.0.0 | ||||||
|  | Summary: English sentence corrector | ||||||
|  | Author: Retoor | ||||||
|  | Author-email: retoor@molodetz.nl | ||||||
|  | License: MIT | ||||||
|  | Requires-Python: >=3.7 | ||||||
|  | Description-Content-Type: text/markdown | ||||||
|  | Requires-Dist: aiohttp | ||||||
|  | Requires-Dist: dataset | ||||||
|  | Requires-Dist: yura@ git+https://retoor.molodetz.nl/retoor/yura.git@main | ||||||
							
								
								
									
										13
									
								
								src/rbabel.egg-info/SOURCES.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/rbabel.egg-info/SOURCES.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | pyproject.toml | ||||||
|  | setup.cfg | ||||||
|  | src/rbabel/__init__.py | ||||||
|  | src/rbabel/__main__.py | ||||||
|  | src/rbabel/app.py | ||||||
|  | src/rbabel/args.py | ||||||
|  | src/rbabel/cli.py | ||||||
|  | src/rbabel.egg-info/PKG-INFO | ||||||
|  | src/rbabel.egg-info/SOURCES.txt | ||||||
|  | src/rbabel.egg-info/dependency_links.txt | ||||||
|  | src/rbabel.egg-info/entry_points.txt | ||||||
|  | src/rbabel.egg-info/requires.txt | ||||||
|  | src/rbabel.egg-info/top_level.txt | ||||||
							
								
								
									
										1
									
								
								src/rbabel.egg-info/dependency_links.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/rbabel.egg-info/dependency_links.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | 
 | ||||||
							
								
								
									
										4
									
								
								src/rbabel.egg-info/entry_points.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								src/rbabel.egg-info/entry_points.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | |||||||
|  | [console_scripts] | ||||||
|  | rbabel = rbabel.cli:main | ||||||
|  | rbabel.bench = rbabel.cli:cli_bench | ||||||
|  | rbabel.serve = rbabel.__main__:main | ||||||
							
								
								
									
										3
									
								
								src/rbabel.egg-info/requires.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/rbabel.egg-info/requires.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | aiohttp | ||||||
|  | dataset | ||||||
|  | yura@ git+https://retoor.molodetz.nl/retoor/yura.git@main | ||||||
							
								
								
									
										1
									
								
								src/rbabel.egg-info/top_level.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/rbabel.egg-info/top_level.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | rbabel | ||||||
							
								
								
									
										9
									
								
								src/rbabel/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/rbabel/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | import logging  | ||||||
|  | 
 | ||||||
|  | logging.basicConfig( | ||||||
|  |     level=logging.DEBUG, | ||||||
|  |     format='%(asctime)s - %(levelname)s - %(message)s',  | ||||||
|  |     datefmt='%Y-%m-%d %H:%M:%S' | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | log = logging.getLogger(__name__) | ||||||
							
								
								
									
										13
									
								
								src/rbabel/__main__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/rbabel/__main__.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | from aiohttp import web  | ||||||
|  | from rbabel.app import create_app | ||||||
|  | from rbabel.args import parse_args | ||||||
|  | 
 | ||||||
|  | def main(): | ||||||
|  |     args = parse_args() | ||||||
|  |     app = create_app(args.url) | ||||||
|  |     web.run_app(app,host=args.host,port=args.port) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | if __name__ == '__main__': | ||||||
|  |     nain() | ||||||
|  | 
 | ||||||
							
								
								
									
										50
									
								
								src/rbabel/app.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								src/rbabel/app.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | |||||||
|  | from aiohttp import web | ||||||
|  | from yura.client import AsyncClient as LLMClient  | ||||||
|  | 
 | ||||||
|  | from rbabel import log  | ||||||
|  | 
 | ||||||
|  | LLM_NAME = "rbabel" | ||||||
|  | LLM_CONTEXT = "You are an English grammar corrector. You repsond with only the corrected English of by user given prompt and nothing more. Also replace numbers with the word variant." | ||||||
|  | LLM_MODEL = "gemma2:latest" | ||||||
|  | 
 | ||||||
|  | class Application(web.Application): | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     def __init__(self, llm_url=None, llm_name=LLM_NAME, llm_model=LLM_MODEL,llm_context=LLM_CONTEXT,  *args, **kwargs): | ||||||
|  |         self.llm_url = llm_url | ||||||
|  |         self.llm_name = llm_name | ||||||
|  |         self.llm_model = LLM_MODEL | ||||||
|  |         self.llm_context = llm_context | ||||||
|  |         super().__init__(*args, **kwargs) | ||||||
|  |         self.on_startup.append(self.create_llm) | ||||||
|  |         self.router.add_post("/", self.optimize_grammar_handler) | ||||||
|  | 
 | ||||||
|  |     async def create_llm(self, app): | ||||||
|  |         llm_client = LLMClient(self.llm_url) | ||||||
|  |         log.info("Creating LLM named {}.".format(self.llm_name)) | ||||||
|  |         success = await llm_client.create(self.llm_name, self.llm_model, self.llm_context) | ||||||
|  |         assert(success) | ||||||
|  |         log.info("LLM {} created.".format(self.llm_name)) | ||||||
|  |         await llm_client.close() | ||||||
|  | 
 | ||||||
|  |     async def fix_grammar(self, content): | ||||||
|  |         corrected_content = [] | ||||||
|  |         llm_client = LLMClient(self.llm_url) | ||||||
|  |         token = await llm_client.connect(self.llm_name) | ||||||
|  |         async for chunk in llm_client.chat(token, content): | ||||||
|  |             corrected_content.append(chunk['content']) | ||||||
|  |         await llm_client.close() | ||||||
|  |         return "".join(corrected_content) | ||||||
|  | 
 | ||||||
|  |     async def optimize_grammar_handler(self,request): | ||||||
|  |         text = await request.json() | ||||||
|  |         assert(type(text) ==str) | ||||||
|  |         corrected = await self.fix_grammar(text) | ||||||
|  |         print("was:",text) | ||||||
|  |         print("became:",corrected) | ||||||
|  |         return web.json_response(corrected,content_type="application/json") | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def create_app(llm_url): | ||||||
|  |     return Application(llm_url, LLM_NAME, LLM_MODEL, LLM_CONTEXT) | ||||||
|  | 
 | ||||||
							
								
								
									
										35
									
								
								src/rbabel/args.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								src/rbabel/args.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | |||||||
|  | import argparse  | ||||||
|  | 
 | ||||||
|  | def parse_args(): | ||||||
|  |     parser = argparse.ArgumentParser( | ||||||
|  |         description="AI enabled English corrector. Only minor improvements." | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     parser.add_argument( | ||||||
|  |         '--url', | ||||||
|  |         type=str, | ||||||
|  |         required=False, | ||||||
|  |         default="http://127.0.0.1:3011/", | ||||||
|  |         help='URL of Katya LLM Server.' | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     parser.add_argument( | ||||||
|  |         '--host', | ||||||
|  |         type=str, | ||||||
|  |         default="127.0.0.1", | ||||||
|  |         required=False, | ||||||
|  |         help='Host to bind to.' | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     parser.add_argument( | ||||||
|  |         '--port', | ||||||
|  |         type=int, | ||||||
|  |         default=3011, | ||||||
|  |         required=False, | ||||||
|  |         help='Port to bind to.' | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     return parser.parse_args() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
							
								
								
									
										50
									
								
								src/rbabel/cli.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								src/rbabel/cli.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | |||||||
|  | import asyncio | ||||||
|  | from aiohttp import ClientSession | ||||||
|  | from rbabel.args import parse_args | ||||||
|  | import time  | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | async def cli_client(url): | ||||||
|  |      | ||||||
|  |     while True: | ||||||
|  |         sentence = input("> ") | ||||||
|  |         async with ClientSession() as session: | ||||||
|  |             async with session.post("http://localhost:8080",json=sentence) as response: | ||||||
|  |                 try: | ||||||
|  |                     print(await response.json()) | ||||||
|  |                 except Exception as ex: | ||||||
|  |                     print(ex) | ||||||
|  |                     print(await response.text()) | ||||||
|  | 
 | ||||||
|  | async def bench(url): | ||||||
|  |     index = 0 | ||||||
|  |     while True: | ||||||
|  |         index += 1 | ||||||
|  |         sentence = "I bougt {} woden shoe".format(index) | ||||||
|  |         time_start = time.time() | ||||||
|  |         async with ClientSession() as session: | ||||||
|  |             async with session.post(url,json=sentence) as response: | ||||||
|  |                 try: | ||||||
|  |                     print(await response.json()) | ||||||
|  |                 except Exception as ex: | ||||||
|  |                     print(ex) | ||||||
|  |                     print(await response.text()) | ||||||
|  |         time_end = time.time() | ||||||
|  |         print("Duration: {}".format(time_end-time_start)) | ||||||
|  |          | ||||||
|  | 
 | ||||||
|  | def cli_bench(): | ||||||
|  |     args = parse_args() | ||||||
|  |     asyncio.run(bench(args.url)) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def main(): | ||||||
|  |     args = parse_args() | ||||||
|  |     asyncio.run(cli_client(args.url)) | ||||||
|  | 
 | ||||||
|  | if __name__ == '__main__': | ||||||
|  |     main() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user