trace_entity.py 3.6 KB

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