| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- from core_domain import InitialNodeContract, RunCreateContract
- from app.db.models import Message, RunRequest
- from app.db.models import 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(
- app_id=payload.app_id,
- user_id=payload.user_id,
- channel_type=payload.channel_type,
- title=payload.title)
- def list_sessions(self, app_id: str | None = None) -> list[SessionModel]:
- return self.session_repository.list_by_scope(app_id=app_id)
- def create_message(self, payload: MessageCreateRequest) -> Message:
- return self.message_repository.create(
- 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, session_id: str) -> list[Message]:
- return self.message_repository.list_by_session(session_id=session_id)
- def create_run_request(self, payload: RunRequestCreateRequest) -> RunRequest:
- return self.run_request_repository.create(
- 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, session_id: str) -> list[RunRequest]:
- return self.run_request_repository.list_by_session(session_id=session_id)
- def dispatch_run_request(self, payload: DispatchRunRequest) -> DispatchRunResponse:
- run_request = self.create_run_request(
- RunRequestCreateRequest(
- 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(
- 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)
|