agent.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. from datetime import datetime
  2. from typing import TYPE_CHECKING
  3. from core_domain import (
  4. AgentDefinitionContract,
  5. AgentMemoryPolicyContract,
  6. AgentModelConfigContract,
  7. AgentRunContract,
  8. AgentRunStatus,
  9. AgentSkillRefContract,
  10. AgentStatus,
  11. AgentToolInvocationContract,
  12. AgentToolRefContract,
  13. )
  14. from core_shared import JSONValue
  15. from pydantic import BaseModel, ConfigDict, Field
  16. if TYPE_CHECKING:
  17. from app.db.models import AgentDefinition, AgentRun, AgentToolInvocation, AgentConfig
  18. class AgentCreateRequest(BaseModel):
  19. code: str | None = None
  20. name: str
  21. description: str | None = None
  22. agent_type: str = "assistant"
  23. owner_user_id: str | None = None
  24. metadata_json: dict[str, JSONValue] = Field(default_factory=dict)
  25. class AgentUpdateRequest(BaseModel):
  26. agent_id: str
  27. name: str | None = None
  28. description: str | None = None
  29. metadata_json: dict[str, JSONValue] | None = None
  30. class AgentListRequest(BaseModel):
  31. pass
  32. class AgentDetailRequest(BaseModel):
  33. agent_id: str
  34. class AgentDeleteRequest(BaseModel):
  35. agent_id: str
  36. class DeleteData(BaseModel):
  37. deleted: bool
  38. agent_id: str | None = None
  39. agent_run_id: str | None = None
  40. class AgentStatusUpdateRequest(BaseModel):
  41. status: AgentStatus
  42. class AgentStatusPostRequest(AgentStatusUpdateRequest):
  43. agent_id: str
  44. class AgentResponse(AgentDefinitionContract):
  45. @classmethod
  46. def from_entity(cls, entity: "AgentDefinition") -> "AgentResponse":
  47. return cls.model_validate(entity, from_attributes=True)
  48. class AgentConfigListRequest(BaseModel):
  49. agent_id: str
  50. class AgentConfigCreateRequest(BaseModel):
  51. model_config = ConfigDict(populate_by_name=True)
  52. agent_id: str
  53. role: str = "assistant"
  54. goal: str | None = None
  55. system_prompt: str
  56. model_config_data: AgentModelConfigContract = Field(
  57. default_factory=AgentModelConfigContract,
  58. alias="model_config")
  59. memory_policy: AgentMemoryPolicyContract = Field(default_factory=AgentMemoryPolicyContract)
  60. tool_refs: list[AgentToolRefContract] = Field(default_factory=list)
  61. skill_refs: list[AgentSkillRefContract] = Field(default_factory=list)
  62. class AgentConfigResponse(BaseModel):
  63. id: str
  64. agent_id: str
  65. role: str
  66. goal: str | None = None
  67. system_prompt: str
  68. model_config_json: dict[str, JSONValue]
  69. memory_policy_json: dict[str, JSONValue]
  70. tool_refs_json: list[dict[str, JSONValue]]
  71. skill_refs_json: list[dict[str, JSONValue]]
  72. created_time: datetime
  73. @classmethod
  74. def from_entity(cls, entity: "AgentConfig") -> "AgentConfigResponse":
  75. return cls(
  76. id=entity.id,
  77. agent_id=entity.agent_id,
  78. role=entity.role,
  79. goal=entity.goal,
  80. system_prompt=entity.system_prompt,
  81. model_config_json=entity.model_config_json,
  82. memory_policy_json=entity.memory_policy_json,
  83. tool_refs_json=entity.tool_refs_json,
  84. skill_refs_json=entity.skill_refs_json,
  85. created_time=entity.created_time)
  86. class AgentRunCreateRequest(BaseModel):
  87. agent_id: str
  88. agent_config_id: str | None = None
  89. session_id: str | None = None
  90. input_text: str | None = None
  91. input_json: dict[str, JSONValue] | None = None
  92. class AgentRunDetailRequest(BaseModel):
  93. agent_run_id: str
  94. class AgentRunListRequest(BaseModel):
  95. agent_id: str | None = None
  96. session_id: str | None = None
  97. class AgentToolInvocationListRequest(BaseModel):
  98. agent_run_id: str
  99. class AgentRunStatusUpdateRequest(BaseModel):
  100. status: AgentRunStatus
  101. worker_key: str | None = None
  102. output_text: str | None = None
  103. output_json: dict[str, JSONValue] | None = None
  104. error_code: str | None = None
  105. error_message: str | None = None
  106. class AgentRunStatusPostRequest(AgentRunStatusUpdateRequest):
  107. agent_run_id: str
  108. class AgentRunExecuteRequest(BaseModel):
  109. worker_key: str | None = None
  110. dry_run: bool = False
  111. class AgentRunExecutePostRequest(AgentRunExecuteRequest):
  112. agent_run_id: str
  113. class AgentWorkerExecuteNextRequest(BaseModel):
  114. worker_key: str
  115. lease_seconds: int | None = Field(default=None, gt=0)
  116. dry_run: bool | None = None
  117. class AgentRunResponse(AgentRunContract):
  118. @classmethod
  119. def from_entity(cls, entity: "AgentRun") -> "AgentRunResponse":
  120. return cls.model_validate(entity, from_attributes=True)
  121. class AgentToolInvocationResponse(AgentToolInvocationContract):
  122. @classmethod
  123. def from_entity(cls, entity: "AgentToolInvocation") -> "AgentToolInvocationResponse":
  124. return cls.model_validate(entity, from_attributes=True)
  125. class AgentRunExecuteResponse(BaseModel):
  126. run: AgentRunResponse
  127. model: str | None = None
  128. dry_run: bool = False
  129. class AgentWorkerExecuteNextResponse(BaseModel):
  130. run: AgentRunResponse
  131. model: str | None = None
  132. dry_run: bool = False
  133. released_lease_count: int = 0
  134. class AgentHealthResponse(BaseModel):
  135. service: str
  136. status: str
  137. database: str
  138. checked_time: datetime