trace_entity.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. from datetime import datetime
  2. from typing import Any, Optional, Union
  3. from pydantic import BaseModel, ConfigDict, field_validator
  4. class BaseTraceInfo(BaseModel):
  5. message_id: Optional[str] = None
  6. message_data: Optional[Any] = None
  7. inputs: Optional[Union[str, dict[str, Any], list]] = None
  8. outputs: Optional[Union[str, dict[str, Any], list]] = None
  9. start_time: Optional[datetime] = None
  10. end_time: Optional[datetime] = None
  11. metadata: dict[str, Any]
  12. @field_validator("inputs", "outputs")
  13. def ensure_type(cls, v):
  14. if v is None:
  15. return None
  16. if isinstance(v, str | dict | list):
  17. return v
  18. else:
  19. return ""
  20. class WorkflowTraceInfo(BaseTraceInfo):
  21. workflow_data: Any
  22. conversation_id: Optional[str] = None
  23. workflow_app_log_id: Optional[str] = None
  24. workflow_id: str
  25. tenant_id: str
  26. workflow_run_id: str
  27. workflow_run_elapsed_time: Union[int, float]
  28. workflow_run_status: str
  29. workflow_run_inputs: dict[str, Any]
  30. workflow_run_outputs: dict[str, Any]
  31. workflow_run_version: str
  32. error: Optional[str] = None
  33. total_tokens: int
  34. file_list: list[str]
  35. query: str
  36. metadata: dict[str, Any]
  37. class MessageTraceInfo(BaseTraceInfo):
  38. conversation_model: str
  39. message_tokens: int
  40. answer_tokens: int
  41. total_tokens: int
  42. error: Optional[str] = None
  43. file_list: Optional[Union[str, dict[str, Any], list]] = None
  44. message_file_data: Optional[Any] = None
  45. conversation_mode: str
  46. class ModerationTraceInfo(BaseTraceInfo):
  47. flagged: bool
  48. action: str
  49. preset_response: str
  50. query: str
  51. class SuggestedQuestionTraceInfo(BaseTraceInfo):
  52. total_tokens: int
  53. status: Optional[str] = None
  54. error: Optional[str] = None
  55. from_account_id: Optional[str] = None
  56. agent_based: Optional[bool] = None
  57. from_source: Optional[str] = None
  58. model_provider: Optional[str] = None
  59. model_id: Optional[str] = None
  60. suggested_question: list[str]
  61. level: str
  62. status_message: Optional[str] = None
  63. workflow_run_id: Optional[str] = None
  64. model_config = ConfigDict(protected_namespaces=())
  65. class DatasetRetrievalTraceInfo(BaseTraceInfo):
  66. documents: Any
  67. class ToolTraceInfo(BaseTraceInfo):
  68. tool_name: str
  69. tool_inputs: dict[str, Any]
  70. tool_outputs: str
  71. metadata: dict[str, Any]
  72. message_file_data: Any
  73. error: Optional[str] = None
  74. tool_config: dict[str, Any]
  75. time_cost: Union[int, float]
  76. tool_parameters: dict[str, Any]
  77. file_url: Union[str, None, list]
  78. class GenerateNameTraceInfo(BaseTraceInfo):
  79. conversation_id: Optional[str] = None
  80. tenant_id: str
  81. trace_info_info_map = {
  82. 'WorkflowTraceInfo': WorkflowTraceInfo,
  83. 'MessageTraceInfo': MessageTraceInfo,
  84. 'ModerationTraceInfo': ModerationTraceInfo,
  85. 'SuggestedQuestionTraceInfo': SuggestedQuestionTraceInfo,
  86. 'DatasetRetrievalTraceInfo': DatasetRetrievalTraceInfo,
  87. 'ToolTraceInfo': ToolTraceInfo,
  88. 'GenerateNameTraceInfo': GenerateNameTraceInfo,
  89. }