skill.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from typing import TYPE_CHECKING
  2. from core_domain import (
  3. SkillDefinitionContract,
  4. SkillInstallationContract,
  5. SkillInstallStatus,
  6. SkillRunContract,
  7. SkillStatus,
  8. SkillVersionContract,
  9. SkillVersionStatus,
  10. )
  11. from core_shared import JSONValue
  12. from pydantic import BaseModel, Field
  13. if TYPE_CHECKING:
  14. from app.db.models import SkillDefinition, SkillInstallation, SkillRun, SkillVersion
  15. class SkillCreateRequest(BaseModel):
  16. code: str
  17. name: str
  18. skill_type: str = "template"
  19. description: str | None = None
  20. owner_user_id: str | None = None
  21. metadata_json: dict[str, JSONValue] = Field(default_factory=dict)
  22. class SkillStatusUpdateRequest(BaseModel):
  23. status: SkillStatus
  24. class SkillResponse(SkillDefinitionContract):
  25. @classmethod
  26. def from_entity(cls, entity: "SkillDefinition") -> "SkillResponse":
  27. return cls.model_validate(entity, from_attributes=True)
  28. class SkillVersionCreateRequest(BaseModel):
  29. skill_id: str
  30. status: SkillVersionStatus = "draft"
  31. runtime_type: str = "template"
  32. entrypoint: str | None = None
  33. parameter_schema_json: dict[str, JSONValue] = Field(default_factory=dict)
  34. output_schema_json: dict[str, JSONValue] = Field(default_factory=dict)
  35. implementation_json: dict[str, JSONValue] = Field(default_factory=dict)
  36. class SkillVersionResponse(SkillVersionContract):
  37. @classmethod
  38. def from_entity(cls, entity: "SkillVersion") -> "SkillVersionResponse":
  39. return cls.model_validate(entity, from_attributes=True)
  40. class SkillInstallRequest(BaseModel):
  41. skill_id: str
  42. skill_version_id: str | None = None
  43. install_scope: str = "global"
  44. scope_id: str
  45. config_json: dict[str, JSONValue] = Field(default_factory=dict)
  46. installed_by: str | None = None
  47. class SkillInstallationStatusUpdateRequest(BaseModel):
  48. status: SkillInstallStatus
  49. class SkillInstallationResponse(SkillInstallationContract):
  50. @classmethod
  51. def from_entity(cls, entity: "SkillInstallation") -> "SkillInstallationResponse":
  52. return cls.model_validate(entity, from_attributes=True)
  53. class SkillRunCreateRequest(BaseModel):
  54. skill_id: str
  55. skill_version_id: str | None = None
  56. installation_id: str | None = None
  57. input_json: dict[str, JSONValue] = Field(default_factory=dict)
  58. class SkillRunExecuteRequest(BaseModel):
  59. worker_key: str | None = None
  60. class SkillRunResponse(SkillRunContract):
  61. @classmethod
  62. def from_entity(cls, entity: "SkillRun") -> "SkillRunResponse":
  63. return cls.model_validate(entity, from_attributes=True)