team.py 2.7 KB

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