team.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. from typing import TYPE_CHECKING
  2. from core_domain import (
  3. TeamDefinitionContract,
  4. TeamMemberContract,
  5. TeamRunContract,
  6. TeamRunStatus,
  7. TeamStatus,
  8. TeamVersionContract,
  9. TeamVersionStatus,
  10. )
  11. from core_shared import JSONValue
  12. from pydantic import BaseModel, Field
  13. if TYPE_CHECKING:
  14. from app.db.models import TeamDefinition, TeamRun, TeamVersion
  15. class TeamCreateRequest(BaseModel):
  16. code: str
  17. name: str
  18. description: str | None = None
  19. team_type: str = "collaborative"
  20. owner_user_id: str | None = None
  21. metadata_json: dict[str, JSONValue] = Field(default_factory=dict)
  22. class TeamStatusUpdateRequest(BaseModel):
  23. status: TeamStatus
  24. class TeamResponse(TeamDefinitionContract):
  25. @classmethod
  26. def from_entity(cls, entity: "TeamDefinition") -> "TeamResponse":
  27. return cls.model_validate(entity, from_attributes=True)
  28. class TeamVersionCreateRequest(BaseModel):
  29. team_id: str
  30. status: TeamVersionStatus = "draft"
  31. coordination_mode: str = "supervisor"
  32. objective: str | None = None
  33. member_refs: list[TeamMemberContract] = Field(default_factory=list)
  34. policy_json: dict[str, JSONValue] = Field(default_factory=dict)
  35. class TeamVersionResponse(TeamVersionContract):
  36. @classmethod
  37. def from_entity(cls, entity: "TeamVersion") -> "TeamVersionResponse":
  38. return cls.model_validate(entity, from_attributes=True)
  39. class TeamRunCreateRequest(BaseModel):
  40. team_id: str
  41. team_version_id: str | None = None
  42. session_id: str | None = None
  43. input_text: str | None = None
  44. input_json: dict[str, JSONValue] | None = None
  45. class TeamRunStatusUpdateRequest(BaseModel):
  46. status: TeamRunStatus
  47. worker_key: str | None = None
  48. output_text: str | None = None
  49. output_json: dict[str, JSONValue] | None = None
  50. error_code: str | None = None
  51. error_message: str | None = None
  52. class TeamRunExecuteRequest(BaseModel):
  53. worker_key: str | None = None
  54. dry_run: bool = True
  55. class TeamRunResponse(TeamRunContract):
  56. @classmethod
  57. def from_entity(cls, entity: "TeamRun") -> "TeamRunResponse":
  58. return cls.model_validate(entity, from_attributes=True)
  59. class TeamRunExecuteResponse(BaseModel):
  60. run: TeamRunResponse
  61. member_run_count: int = 0
  62. dry_run: bool = True
  63. class TeamWorkerExecuteNextRequest(BaseModel):
  64. worker_key: str
  65. lease_seconds: int | None = Field(default=None, gt=0)
  66. dry_run: bool | None = None
  67. class TeamWorkerExecuteNextResponse(BaseModel):
  68. run: TeamRunResponse
  69. member_run_count: int = 0
  70. dry_run: bool = True
  71. released_lease_count: int = 0