from __future__ import annotations from typing import Any from app.services.operation_log_service import build_exception_detail, log_operation_error, log_operation_event def log_module_event_file( *, module: str, event_type: str, project_id: str | None = None, step_id: str | None = None, user_id: str | None = None, message: str | None = None, detail: dict[str, Any] | None = None, error: str | None = None, ) -> None: log_operation_event( domain="module_generation", module=module, event_type=event_type, project_id=project_id, step_id=step_id, user_id=user_id, message=message, detail=detail, error=error, event_status="failed" if error else "success", source="service", ) def log_module_prompt_event( *, event_type: str, project_id: str, step_id: str, user_id: str, module: str, prompt_type: str, 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_operation_event( domain="module_generation", module=module, event_type=event_type, project_id=project_id, step_id=step_id, user_id=user_id, message=f"模块 AI 请求:{prompt_type}", detail={"prompt_type": prompt_type, "request": request or {}, "response": response or {}, "token_usage": token_usage or {}}, error=error, event_status="failed" if error else "success", source="service", ) def log_module_error( *, module: str, event_type: str, project_id: str | None = None, step_id: str | None = None, user_id: str | None = None, message: str | None = None, detail: dict[str, Any] | None = None, error: str | None = None, exc: BaseException | None = None, ) -> None: log_operation_error( domain="module_generation", module=module, event_type=event_type, project_id=project_id, step_id=step_id, user_id=user_id, message=message, detail=detail, error=error if error is not None else (str(exc) if exc else None), exc=exc, source="service", )