diff --git a/api/app/controllers/memory_reflection_controller.py b/api/app/controllers/memory_reflection_controller.py index 759c25c5..bd9e0e09 100644 --- a/api/app/controllers/memory_reflection_controller.py +++ b/api/app/controllers/memory_reflection_controller.py @@ -16,7 +16,7 @@ from app.repositories.neo4j.neo4j_connector import Neo4jConnector from app.services.memory_reflection_service import WorkspaceAppService, MemoryReflectionService from app.schemas.memory_reflection_schemas import Memory_Reflection - +from app.services.model_service import ModelConfigService load_dotenv() api_logger = get_api_logger() @@ -47,7 +47,7 @@ async def save_reflection_config( api_logger.info(f"用户 {current_user.username} 保存反思配置,config_id: {config_id}") update_params = { - "enable_self_reflexion": request.reflectionenabled, + "enable_self_reflexion": request.reflection_enabled, "iteration_period": request.reflection_period_in_hours, "reflexion_range": request.reflexion_range, "baseline": request.baseline, @@ -115,7 +115,7 @@ async def save_reflection_config( @router.post("/reflection") async def start_workspace_reflection( - request: dict, + config_id: int, current_user: User = Depends(get_current_user), db: Session = Depends(get_db), ) -> dict: @@ -171,30 +171,109 @@ async def start_workspace_reflection( detail=f"启动workspace反思失败: {str(e)}" ) -@router.post("/reflection/run") + +@router.get("/reflection/configs") +async def start_reflection_configs( + config_id: int, + current_user: User = Depends(get_current_user), + db: Session = Depends(get_db), +) -> dict: + """通过config_id查询data_config表中的反思配置信息""" + + try: + api_logger.info(f"用户 {current_user.username} 查询反思配置,config_id: {config_id}") + + # 使用DataConfigRepository查询反思配置 + select_query, select_params = DataConfigRepository.build_select_reflection(config_id) + result = db.execute(text(select_query), select_params).fetchone() + + if not result: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail=f"未找到config_id为 {config_id} 的配置" + ) + + # 构建返回数据 + reflection_config = { + "config_id": result.config_id, + "enable_self_reflexion": result.enable_self_reflexion, + "iteration_period": result.iteration_period, + "reflexion_range": result.reflexion_range, + "baseline": result.baseline, + "reflection_model_id": result.reflection_model_id, + "memory_verify": result.memory_verify, + "quality_assessment": result.quality_assessment, + "user_id": result.user_id + } + + api_logger.info(f"成功查询反思配置,config_id: {config_id}") + + return { + "status": "成功", + "message": "反思配置查询成功", + "data": reflection_config + } + + except HTTPException: + # 重新抛出HTTP异常 + raise + except Exception as e: + api_logger.error(f"查询反思配置失败: {str(e)}") + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"查询反思配置失败: {str(e)}" + ) + +@router.get("/reflection/run") async def reflection_run( - reflection: Memory_Reflection, + config_id: int, current_user: User = Depends(get_current_user), db: Session = Depends(get_db), ) -> dict: """Activate the reflection function for all matching applications in the workspace""" + + api_logger.info(f"用户 {current_user.username} 查询反思配置,config_id: {config_id}") + + # 使用DataConfigRepository查询反思配置 + select_query, select_params = DataConfigRepository.build_select_reflection(config_id) + result = db.execute(text(select_query), select_params).fetchone() + + if not result: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail=f"未找到config_id为 {config_id} 的配置" + ) + + api_logger.info(f"成功查询反思配置,config_id: {config_id}") + + # 验证模型ID是否存在 + model_id = result.reflection_model_id + if model_id: + try: + ModelConfigService.get_model_by_id(db=db, model_id=model_id) + api_logger.info(f"模型ID验证成功: {model_id}") + except Exception as e: + api_logger.warning(f"模型ID '{model_id}' 不存在,将使用默认模型: {str(e)}") + # 可以设置为None,让反思引擎使用默认模型 + model_id = None + config = ReflectionConfig( - enabled=reflection.reflectionenabled, - iteration_period=reflection.reflection_period_in_hours, - reflexion_range=reflection.reflexion_range, - baseline=reflection.baseline, + enabled=result.enable_self_reflexion, + iteration_period=result.iteration_period, + reflexion_range=result.reflexion_range, + baseline=result.baseline, output_example='', - memory_verify=reflection.memory_verify, - quality_assessment=reflection.quality_assessment, + memory_verify=result.memory_verify, + quality_assessment=result.quality_assessment, violation_handling_strategy="block", - model_id=reflection.reflection_model_id + model_id=model_id ) connector = Neo4jConnector() engine = ReflectionEngine( config=config, neo4j_connector=connector, - llm_client=reflection.reflection_model_id # 传入 model_id + llm_client=model_id # 传入验证后的 model_id ) result=await (engine.reflection_run()) - return result + return result \ No newline at end of file diff --git a/api/app/schemas/memory_reflection_schemas.py b/api/app/schemas/memory_reflection_schemas.py index 9eb11c6c..ada92cf2 100644 --- a/api/app/schemas/memory_reflection_schemas.py +++ b/api/app/schemas/memory_reflection_schemas.py @@ -8,11 +8,9 @@ class OptimizationStrategy(str, Enum): SPEED_FIRST = "speed_first" ACCURACY_FIRST = "accuracy_first" BALANCED = "balanced" - - class Memory_Reflection(BaseModel): config_id: Optional[int] = None - reflectionenabled: bool + reflection_enabled: bool reflection_period_in_hours: str reflexion_range: str baseline: str