run_request.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from datetime import datetime
  2. from typing import TYPE_CHECKING
  3. from core_domain import InitialNodeContract, RunBootstrapContract
  4. from core_shared import JSONValue
  5. from pydantic import BaseModel, Field
  6. if TYPE_CHECKING:
  7. from app.db.models import RunRequest
  8. class InitialNodeRequest(InitialNodeContract):
  9. pass
  10. class RunRequestCreateRequest(BaseModel):
  11. session_id: str
  12. app_version_id: str
  13. workflow_version_id: str
  14. trigger_type: str = "chat"
  15. request_payload_json: dict[str, JSONValue] = Field(default_factory=dict)
  16. request_status: str = "accepted"
  17. class RunRequestResponse(BaseModel):
  18. id: str
  19. session_id: str
  20. app_version_id: str
  21. workflow_version_id: str
  22. trigger_type: str
  23. request_payload_json: dict[str, JSONValue] | None = None
  24. request_status: str
  25. created_time: datetime
  26. @classmethod
  27. def from_entity(cls, entity: "RunRequest") -> "RunRequestResponse":
  28. return cls.model_validate(entity, from_attributes=True)
  29. class DispatchRunRequest(BaseModel):
  30. session_id: str
  31. app_id: str
  32. app_version_id: str
  33. workflow_id: str
  34. workflow_version_id: str
  35. trigger_type: str = "chat"
  36. priority: int = 0
  37. request_payload_json: dict[str, JSONValue] = Field(default_factory=dict)
  38. initial_node: InitialNodeRequest | None = None
  39. class DispatchRunResponse(BaseModel):
  40. run_request: RunRequestResponse
  41. runtime_response: RunBootstrapContract
  42. @classmethod
  43. def from_parts(
  44. cls,
  45. *,
  46. run_request: "RunRequest",
  47. runtime_response: RunBootstrapContract) -> "DispatchRunResponse":
  48. return cls(
  49. run_request=RunRequestResponse.from_entity(run_request),
  50. runtime_response=runtime_response)