| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- from core_domain import InitialNodeContract, RunCreateContract
- from app.db.models import Message, RunRequest, Session as SessionModel
- from app.domain.repositories import MessageRepository, RunRequestRepository, SessionRepository
- from app.infrastructure.runtime_client import RuntimeServiceClient
- from app.schemas.message import MessageCreateRequest
- from app.schemas.run_request import DispatchRunRequest, DispatchRunResponse, RunRequestCreateRequest
- from app.schemas.session import SessionCreateRequest
- class SessionApplicationService:
- def __init__(
- self,
- session_repository: SessionRepository,
- message_repository: MessageRepository,
- run_request_repository: RunRequestRepository,
- runtime_client: RuntimeServiceClient | None = None,
- ) -> None:
- self.session_repository = session_repository
- self.message_repository = message_repository
- self.run_request_repository = run_request_repository
- self.runtime_client = runtime_client
- def create_session(self, payload: SessionCreateRequest) -> SessionModel:
- return self.session_repository.create(
- tenant_id=payload.tenant_id,
- app_id=payload.app_id,
- user_id=payload.user_id,
- channel_type=payload.channel_type,
- title=payload.title,
- )
- def list_sessions(self, tenant_id: str, app_id: str | None = None) -> list[SessionModel]:
- return self.session_repository.list_by_scope(tenant_id=tenant_id, app_id=app_id)
- def create_message(self, payload: MessageCreateRequest) -> Message:
- return self.message_repository.create(
- tenant_id=payload.tenant_id,
- session_id=payload.session_id,
- turn_id=payload.turn_id,
- role=payload.role,
- content_type=payload.content_type,
- content_text=payload.content_text,
- content_json=payload.content_json,
- )
- def list_messages(self, tenant_id: str, session_id: str) -> list[Message]:
- return self.message_repository.list_by_session(tenant_id=tenant_id, session_id=session_id)
- def create_run_request(self, payload: RunRequestCreateRequest) -> RunRequest:
- return self.run_request_repository.create(
- tenant_id=payload.tenant_id,
- session_id=payload.session_id,
- app_version_id=payload.app_version_id,
- workflow_version_id=payload.workflow_version_id,
- trigger_type=payload.trigger_type,
- request_payload_json=payload.request_payload_json,
- request_status=payload.request_status,
- )
- def list_run_requests(self, tenant_id: str, session_id: str) -> list[RunRequest]:
- return self.run_request_repository.list_by_session(tenant_id=tenant_id, session_id=session_id)
- def dispatch_run_request(self, payload: DispatchRunRequest) -> DispatchRunResponse:
- run_request = self.create_run_request(
- RunRequestCreateRequest(
- tenant_id=payload.tenant_id,
- session_id=payload.session_id,
- app_version_id=payload.app_version_id,
- workflow_version_id=payload.workflow_version_id,
- trigger_type=payload.trigger_type,
- request_payload_json=payload.request_payload_json,
- request_status="accepted",
- )
- )
- if self.runtime_client is None:
- raise RuntimeError("runtime client is not configured")
- runtime_response = self.runtime_client.create_run(
- RunCreateContract(
- tenant_id=payload.tenant_id,
- app_id=payload.app_id,
- app_version_id=payload.app_version_id,
- workflow_id=payload.workflow_id,
- workflow_version_id=payload.workflow_version_id,
- session_id=payload.session_id,
- trigger_type=payload.trigger_type,
- priority=payload.priority,
- initial_node=(
- InitialNodeContract(
- node_id=payload.initial_node.node_id,
- node_type=payload.initial_node.node_type,
- status=payload.initial_node.status,
- )
- if payload.initial_node is not None
- else None
- ),
- )
- )
- return DispatchRunResponse.from_parts(run_request=run_request, runtime_response=runtime_response)
|