from __future__ import annotations from typing import Any from app.enums.common import LogEventStatusEnum, LogSourceEnum from app.services.operation_log_service import ( build_exception_detail, log_module_generation_event, ) def log_module_event_file( *, module: str, event_type: str, project_id: str | None = None, step_id: str | None = None, task_id: str | None = None, user_id: str | None = None, trace_id: str | None = None, source: str | None = None, event_status: str | None = None, message: str | None = None, detail: dict[str, Any] | None = None, error: str | None = None, ) -> None: log_module_generation_event( module=module, event_type=event_type, project_id=project_id, step_id=step_id, task_id=task_id, user_id=user_id, trace_id=trace_id, message=message, detail=detail, error=error, event_status=event_status or (LogEventStatusEnum.FAILED.value if error else LogEventStatusEnum.SUCCESS.value), source=source or LogSourceEnum.SERVICE.value, ) def log_module_prompt_event( *, event_type: str, project_id: str, step_id: str, user_id: str, module: str, prompt_type: str, trace_id: str | None = None, request: dict[str, Any] | None = None, response: dict[str, Any] | None = None, token_usage: dict[str, Any] | None = None, error: str | None = None, ) -> None: log_module_generation_event( module=module, event_type=event_type, project_id=project_id, step_id=step_id, user_id=user_id, trace_id=trace_id, message=f"模块 AI 步骤:{prompt_type}", detail={ "prompt_type": prompt_type, "has_request": request is not None, "has_response": response is not None, "token_usage": token_usage or {}, }, error=error, event_status=LogEventStatusEnum.FAILED.value if error else LogEventStatusEnum.SUCCESS.value, source=LogSourceEnum.SERVICE.value, ) def log_module_error( *, module: str, event_type: str, project_id: str | None = None, step_id: str | None = None, task_id: str | None = None, user_id: str | None = None, trace_id: str | None = None, source: str | None = None, message: str | None = None, detail: dict[str, Any] | None = None, error: str | None = None, exc: BaseException | None = None, ) -> None: log_module_generation_event( module=module, event_type=event_type, project_id=project_id, step_id=step_id, task_id=task_id, user_id=user_id, trace_id=trace_id, message=message, detail=build_exception_detail(exc, detail), error=error if error is not None else (str(exc) if exc else None), event_status=LogEventStatusEnum.FAILED.value, source=source or LogSourceEnum.SERVICE.value, )