| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- """
- 业务处理器注册表:意图 -> 处理器、参数校验、执行器
- 新增二级Agent仅需在此注册,路由零改动
- """
- from typing import Callable, Awaitable, Optional
- from fastapi import UploadFile, HTTPException
- from service.stream_service import stream_calculation_sync, stream_review_sync, stream_comparison_sync
- # 定义处理器结构体
- class IntentHandler:
- def __init__(
- self,
- need_file: bool, # 是否需要上传PDF文件
- stream_func: Callable, # 流式生成函数
- validate: Callable[[Optional[UploadFile]], None] # 自定义参数校验
- ):
- self.need_file = need_file
- self.stream_func = stream_func
- self.validate = validate
- # -------------------------- 校验规则 --------------------------
- def validate_no_file(file: Optional[UploadFile]) -> None:
- """计算需风量:禁止上传文件"""
- if file:
- raise HTTPException(status_code=400, detail="需风量计算无需上传文件")
- def validate_pdf_file(file: Optional[UploadFile]) -> None:
- """配风审查:必须上传PDF文件"""
- if not file or not file.filename.endswith(".pdf"):
- raise HTTPException(status_code=400, detail="配风审查仅支持上传PDF文件")
- # -------------------------- 全局注册表 --------------------------
- HANDLER_REGISTRY = {
- # 意图标识 : 对应处理器
- "calc_ventilation": IntentHandler(
- need_file=False,
- stream_func=stream_calculation_sync,
- validate=validate_no_file
- ),
- "review_plan": IntentHandler(
- need_file=True,
- stream_func=stream_review_sync,
- validate=validate_pdf_file
- ),
- "check_vent_comparison": IntentHandler(
- need_file=True,
- stream_func=stream_comparison_sync,
- validate=validate_pdf_file
- )
- }
|