Selaa lähdekoodia

Merge branch 'iapt-platform:development' into development

visuddhinanda 10 kuukautta sitten
vanhempi
sitoutus
30d925a64e

+ 5 - 0
ai-translate/.gitignore

@@ -0,0 +1,5 @@
+/tmp/
+/config.toml
+
+__pycache__/
+ai_translate.egg-info/

+ 13 - 0
ai-translate/README.md

@@ -0,0 +1,13 @@
+# Usage
+
+```bash
+# initial python3 virtual env
+$ python3 -m venv $HOME/tmp/python3
+# load python3 virtual env
+$ source $HOME/tmp/python3/bin/activate
+# install dependencies
+> python3 -m pip install -e .
+
+> python3 -m ai_translate -h
+> python3 -m ai_translate -d -c config.toml -n worker-us-1 -q ai.translate.us
+```

+ 36 - 0
ai-translate/ai_translate/__init__.py

@@ -0,0 +1,36 @@
+import logging
+import tomllib
+
+import pika
+
+from .worker import handle_message
+
+logger = logging.getLogger(__name__)
+
+
+def start_consumer(name, queue, config):
+    connection = pika.BlockingConnection(
+        pika.ConnectionParameters(
+            host=config['host'], port=config['port'],
+            credentials=pika.PlainCredentials(
+                config['user'], config['password']),
+            virtual_host=config['virtual-host']))
+    channel = connection.channel()
+
+    def callback(ch, method, properties, body):
+        logger.info("received message(%s,%s)",
+                    properties.message_id, properties.content_type)
+        handle_message(properties.message_id, properties.content_type, body)
+
+    channel.basic_consume(
+        queue=queue, on_message_callback=callback, auto_ack=True)
+
+    logger.info('start a consumer(%s) for queue(%s)', name, queue)
+    channel.start_consuming()
+
+
+def launch(name, queue, config_file):
+    logger.debug('load configuration from %s', config_file)
+    with open(config_file, "rb") as config_fd:
+        config = tomllib.load(config_fd)
+        start_consumer(name, queue, config['rabbitmq'])

+ 46 - 0
ai-translate/ai_translate/__main__.py

@@ -0,0 +1,46 @@
+import logging
+import argparse
+import sys
+import os
+
+from . import launch
+
+logger = logging.getLogger(__name__)
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        prog='ai-translate',
+        description='An OpenAI consumer process',
+        epilog='https://github.com/iapt-platform/mint/tree/master')
+    parser.add_argument('-c', '--config', type=str,
+                        default='config.toml', help='configuration file')
+    parser.add_argument('-q', '--queue', type=str, required=True,
+                        help='queue name')
+    parser.add_argument('-n', '--name', type=str, required=True,
+                        help='consumer name')
+    parser.add_argument('-d', '--debug',
+                        action='store_true', help='run on debug mode')
+    parser.add_argument('-v', '--version',
+                        action='version', version='%(prog)s v2025.6.11')
+    args = parser.parse_args()
+
+    if args.debug:
+        logging.basicConfig(
+            level=logging.DEBUG if args.debug else logging.INFO, format='%(levelname)-5s %(asctime)s(%(pathname)s %(lineno)d): %(message)s')
+    else:
+        logging.basicConfig(
+            level=logging.DEBUG if args.debug else logging.INFO, format='%(levelname)-5s %(asctime)s(%(module)s): %(message)s')
+
+    try:
+        launch(args.name, args.queue, args.config)
+    except KeyboardInterrupt:
+        logger.warning('receive interrupted signal, exit...')
+        try:
+            sys.exit(0)
+        except SystemExit:
+            os._exit(0)
+
+
+if __name__ == '__main__':
+    main()

+ 7 - 0
ai-translate/ai_translate/worker.py

@@ -0,0 +1,7 @@
+import logging
+
+logger = logging.getLogger(__name__)
+
+
+def handle_message(id, content_type, body):
+    logger.info("TODO")

+ 6 - 0
ai-translate/config.orig.toml

@@ -0,0 +1,6 @@
+[rabbitmq]
+host = '127.0.0.1'
+port = 5672
+user = 'www'
+password = 'change-me'
+virtual-host = 'testing'

+ 16 - 0
ai-translate/pyproject.toml

@@ -0,0 +1,16 @@
+[build-system]
+requires = ["setuptools"]
+build-backend = "setuptools.build_meta"
+
+[project]
+name = "ai_translate"
+version = "2025.6.11"
+requires-python = ">= 3.11"
+description = "An OpenAI consumer process"
+readme = "README.md"
+license = "MIT"
+
+dependencies = ["pika", "openai"]
+
+[project.scripts]
+mint-ai-translate-consumer = "ai_translate.__main__:main"

+ 0 - 1
deploy/.gitignore

@@ -2,6 +2,5 @@
 /python/
 /python/
 /shared/
 /shared/
 /tmp/
 /tmp/
-/roles/mint/files/dashboard/
 *.log
 *.log
 *.xz
 *.xz

+ 1 - 0
deploy/README.md

@@ -23,6 +23,7 @@ peony -i clients/CLUSTER ping.yml
 peony -i clients/CLUSTER ec2.yml
 peony -i clients/CLUSTER ec2.yml
 # setup redis cluster nodes
 # setup redis cluster nodes
 peony -i clients/CLUSTER redis.yml -l redis
 peony -i clients/CLUSTER redis.yml -l redis
+# check the version by: git log --abbrev-commit
 peony -i clients/CLUSTER mint.yml --extra-vars "mint_version=xxx"
 peony -i clients/CLUSTER mint.yml --extra-vars "mint_version=xxx"
 ```
 ```
 
 

+ 1 - 0
deploy/mint.yml

@@ -9,6 +9,7 @@
     - fpm
     - fpm
     - task
     - task
     - fort
     - fort
+    - ai_translate
   roles:
   roles:
     - mint-v2.1
     - mint-v2.1
 
 

+ 18 - 6
deploy/roles/mint-v2.1/tasks/main.yml

@@ -6,12 +6,24 @@
     owner: "{{ ansible_user }}"
     owner: "{{ ansible_user }}"
     mode: "0755"
     mode: "0755"
 
 
-- name: Download source code
-  ansible.builtin.unarchive:
-    src: https://github.com/iapt-platform/mint/archive/{{ mint_version }}.zip
-    dest: "{{ app_deploy_target | dirname }}"
-    remote_src: true
-    creates: "{{ app_deploy_target }}"
+# - name: Download source code
+#   ansible.builtin.unarchive:
+#     src: https://github.com/iapt-platform/mint/archive/{{ mint_version }}.zip
+#     dest: "{{ app_deploy_target | dirname }}"
+#     remote_src: true
+#     creates: "{{ app_deploy_target }}"
+
+- name: Download source codes
+  ansible.builtin.git:
+    repo: "https://github.com/iapt-platform/mint.git"
+    dest: "{{ app_deploy_target | dirname }}/repo"
+
+- name: Clone to spec version
+  ansible.builtin.git:
+    repo: "{{ app_deploy_target | dirname }}/repo"
+    dest: "{{ app_deploy_target }}"
+    depth: 1
+    single_branch: true
 
 
 - name: Upload dashboard-v4 dist
 - name: Upload dashboard-v4 dist
   ansible.posix.synchronize:
   ansible.posix.synchronize: