diff --git a/llmops/app_factory.py b/llmops/app_factory.py index b035671c5682a2ae1c94497ae49fdff2df0cc35f..9c207c3885220ade673ac3406fa85dfe8e907189 100644 --- a/llmops/app_factory.py +++ b/llmops/app_factory.py @@ -1,6 +1,7 @@ from flask import Flask from config.config import init_config from utils.logger import setup_logger +from router.task import task_blueprint def create_app() -> Flask: @@ -16,6 +17,8 @@ def create_app() -> Flask: logger = setup_logger() app.logger = logger + # 注册蓝图 + app.register_blueprint(task_blueprint, url_prefix="/task") return app diff --git a/llmops/controller/task.py b/llmops/controller/task.py new file mode 100644 index 0000000000000000000000000000000000000000..06b008eaf2a9a55d11605deb218158fc28429c41 --- /dev/null +++ b/llmops/controller/task.py @@ -0,0 +1,25 @@ +from flask import request +from utils.response import success, fail, not_found +from service.task import create_new_task, get_task_status, confirm_task_option + + +# 创建新任务 +def create_task(): + data = request.json + user_id = data.get("user_id") + input = data.get("input") + + if not user_id or not input: + return not_found(None, "用户id和输入内容不能为空") + + task_id = create_new_task(user_id, input) + return success({"task_id": task_id, "status": "等待中"}, "创建异步任务成功") + + +# 查询任务状态 +def task_status(task_id): + task_info = get_task_status(task_id) + if not task_info: + return not_found(None, "未找到该任务") + + return success(task_info, "获取到任务状态") diff --git a/llmops/router/task.py b/llmops/router/task.py new file mode 100644 index 0000000000000000000000000000000000000000..7fe0efb8171a7a29fab05a542f5ab6e1193c3e64 --- /dev/null +++ b/llmops/router/task.py @@ -0,0 +1,8 @@ +from flask import Blueprint +from controller.task import create_task, task_status, confirm_option + +task_blueprint = Blueprint("tasks", __name__) + +# 路由 +task_blueprint.route("/create", methods=["POST"])(create_task) +task_blueprint.route("/status/", methods=["GET"])(task_status) diff --git a/llmops/service/task.py b/llmops/service/task.py new file mode 100644 index 0000000000000000000000000000000000000000..cb66d4c29922fd0984be1904fb1afb3f3a71d4ae --- /dev/null +++ b/llmops/service/task.py @@ -0,0 +1,70 @@ +import uuid +import time +from threading import Thread + +# 内存中任务存储结构 +tasks = {} + + +# 定义任务类 +class Task: + def __init__(self, user_id, input): + self.task_id = str(uuid.uuid4()) + self.user_id = user_id + self.current_step = 1 + self.step_results = {} + self.input = input + self.status = "等待中" # 等待中, 正在处理, 等待确认, 完成 + self.options = [] # LLM 生成的方案 + + def update_step_result(self, step, result): + self.step_results[step] = result + + def update_status(self, status): + self.status = status + + def set_options(self, options): + self.options = options + + +# 创建新任务 +def create_new_task(user_id, input): + task = Task(user_id, input) + tasks[task.task_id] = task + + # 启动一个线程来异步处理 LLM 任务 + thread = Thread(target=llm_process, args=(task.task_id,)) + thread.start() + + return task.task_id + + +# 获取任务状态 +def get_task_status(task_id): + task = tasks.get(task_id) + if not task: + return None + + return { + "task_id": task.task_id, + "status": task.status, + "current_step": task.current_step, + "step_results": task.step_results, + "options": task.options, + } + + +# 模拟 LLM 处理 +def llm_process(task_id): + task = tasks.get(task_id) + if not task: + return + + task.update_status("正在处理") + time.sleep(2) # 模拟 LLM 生成方案的延迟 + + # 假设 LLM 生成了 3 个方案 + options = [f"方案 {i}" for i in range(1, 4)] + task.set_options(options) + task.update_step_result(task.current_step, options) + task.update_status("等待确认")