| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- from __future__ import annotations
- from pydantic import ValidationError
- from quart import Blueprint, jsonify
- from app.api.v1.utils import ApiDependencies, LongArticlesMcpRequest
- from app.api.v1.utils import parse_json, validation_error_response
- from app.domains.mcp import LongArticleMCP
- def create_mcp_bp(deps: ApiDependencies) -> Blueprint:
- bp = Blueprint("mcp", __name__)
- @bp.route("/long_articles_mcp/<string:task_name>", methods=["POST"])
- async def long_articles_mcp(task_name: str):
- """
- MCP 交互接口
- - POST /api/long_articles_mcp/<task_name>
- - 通过 task_name 分发到 LongArticleMCP 内对应的方法
- - 请求体为 JSON,可选字段如 limit、offset 等,由各 task 按需使用
- """
- try:
- req, _ = await parse_json(LongArticlesMcpRequest)
- except ValidationError as e:
- payload, status = validation_error_response(e)
- return jsonify(payload), status
- # 使用校验后的模型转 dict,保证 limit/offset 等类型正确,且含 extra 透传字段
- params = req.model_dump(exclude_none=True)
- mcp = LongArticleMCP(pool=deps.db, log_service=deps.log)
- handler_map = {
- "get_decode_response": mcp.get_decode_response,
- }
- handler = handler_map.get(task_name)
- if handler is None:
- return (
- jsonify(
- {
- "code": 404,
- "message": f"unknown task_name: {task_name}",
- "data": None,
- }
- ),
- 404,
- )
- result = await handler(params=params)
- return jsonify({"code": 0, "message": "success", "data": result})
- return bp
|