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.7KB

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