You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

trace_entity.py 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. from collections.abc import Mapping
  2. from datetime import datetime
  3. from enum import StrEnum
  4. from typing import Any, Optional, Union
  5. from pydantic import BaseModel, ConfigDict, field_serializer, field_validator
  6. class BaseTraceInfo(BaseModel):
  7. message_id: Optional[str] = None
  8. message_data: Optional[Any] = None
  9. inputs: Optional[Union[str, dict[str, Any], list]] = None
  10. outputs: Optional[Union[str, dict[str, Any], list]] = None
  11. start_time: Optional[datetime] = None
  12. end_time: Optional[datetime] = None
  13. metadata: dict[str, Any]
  14. trace_id: Optional[str] = None
  15. @field_validator("inputs", "outputs")
  16. @classmethod
  17. def ensure_type(cls, v):
  18. if v is None:
  19. return None
  20. if isinstance(v, str | dict | list):
  21. return v
  22. return ""
  23. model_config = ConfigDict(protected_namespaces=())
  24. @field_serializer("start_time", "end_time")
  25. def serialize_datetime(self, dt: datetime | None) -> str | None:
  26. if dt is None:
  27. return None
  28. return dt.isoformat()
  29. class WorkflowTraceInfo(BaseTraceInfo):
  30. workflow_data: Any
  31. conversation_id: Optional[str] = None
  32. workflow_app_log_id: Optional[str] = None
  33. workflow_id: str
  34. tenant_id: str
  35. workflow_run_id: str
  36. workflow_run_elapsed_time: Union[int, float]
  37. workflow_run_status: str
  38. workflow_run_inputs: Mapping[str, Any]
  39. workflow_run_outputs: Mapping[str, Any]
  40. workflow_run_version: str
  41. error: Optional[str] = None
  42. total_tokens: int
  43. file_list: list[str]
  44. query: str
  45. metadata: dict[str, Any]
  46. class MessageTraceInfo(BaseTraceInfo):
  47. conversation_model: str
  48. message_tokens: int
  49. answer_tokens: int
  50. total_tokens: int
  51. error: Optional[str] = None
  52. file_list: Optional[Union[str, dict[str, Any], list]] = None
  53. message_file_data: Optional[Any] = None
  54. conversation_mode: str
  55. class ModerationTraceInfo(BaseTraceInfo):
  56. flagged: bool
  57. action: str
  58. preset_response: str
  59. query: str
  60. class SuggestedQuestionTraceInfo(BaseTraceInfo):
  61. total_tokens: int
  62. status: Optional[str] = None
  63. error: Optional[str] = None
  64. from_account_id: Optional[str] = None
  65. agent_based: Optional[bool] = None
  66. from_source: Optional[str] = None
  67. model_provider: Optional[str] = None
  68. model_id: Optional[str] = None
  69. suggested_question: list[str]
  70. level: str
  71. status_message: Optional[str] = None
  72. workflow_run_id: Optional[str] = None
  73. model_config = ConfigDict(protected_namespaces=())
  74. class DatasetRetrievalTraceInfo(BaseTraceInfo):
  75. documents: Any
  76. class ToolTraceInfo(BaseTraceInfo):
  77. tool_name: str
  78. tool_inputs: dict[str, Any]
  79. tool_outputs: str
  80. metadata: dict[str, Any]
  81. message_file_data: Any
  82. error: Optional[str] = None
  83. tool_config: dict[str, Any]
  84. time_cost: Union[int, float]
  85. tool_parameters: dict[str, Any]
  86. file_url: Union[str, None, list]
  87. class GenerateNameTraceInfo(BaseTraceInfo):
  88. conversation_id: Optional[str] = None
  89. tenant_id: str
  90. class TaskData(BaseModel):
  91. app_id: str
  92. trace_info_type: str
  93. trace_info: Any
  94. trace_info_info_map = {
  95. "WorkflowTraceInfo": WorkflowTraceInfo,
  96. "MessageTraceInfo": MessageTraceInfo,
  97. "ModerationTraceInfo": ModerationTraceInfo,
  98. "SuggestedQuestionTraceInfo": SuggestedQuestionTraceInfo,
  99. "DatasetRetrievalTraceInfo": DatasetRetrievalTraceInfo,
  100. "ToolTraceInfo": ToolTraceInfo,
  101. "GenerateNameTraceInfo": GenerateNameTraceInfo,
  102. }
  103. class TraceTaskName(StrEnum):
  104. CONVERSATION_TRACE = "conversation"
  105. WORKFLOW_TRACE = "workflow"
  106. MESSAGE_TRACE = "message"
  107. MODERATION_TRACE = "moderation"
  108. SUGGESTED_QUESTION_TRACE = "suggested_question"
  109. DATASET_RETRIEVAL_TRACE = "dataset_retrieval"
  110. TOOL_TRACE = "tool"
  111. GENERATE_NAME_TRACE = "generate_conversation_name"