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