2026-02-07 15:20:36 +05:30
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
from typing import Literal
|
|
|
|
|
from uuid import UUID
|
|
|
|
|
|
|
|
|
|
from sqlmodel import Field, SQLModel
|
|
|
|
|
|
|
|
|
|
from app.schemas.common import NonEmptyStr
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GatewayLeadMessageRequest(SQLModel):
|
|
|
|
|
kind: Literal["question", "handoff"] = "question"
|
|
|
|
|
correlation_id: str | None = None
|
|
|
|
|
content: NonEmptyStr
|
|
|
|
|
|
|
|
|
|
# How the lead should reply (defaults are interpreted by templates).
|
|
|
|
|
reply_tags: list[str] = Field(default_factory=lambda: ["gateway_main", "lead_reply"])
|
|
|
|
|
reply_source: str | None = "lead_to_gateway_main"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GatewayLeadMessageResponse(SQLModel):
|
|
|
|
|
ok: bool = True
|
|
|
|
|
board_id: UUID
|
|
|
|
|
lead_agent_id: UUID | None = None
|
|
|
|
|
lead_agent_name: str | None = None
|
|
|
|
|
lead_created: bool = False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GatewayLeadBroadcastRequest(SQLModel):
|
|
|
|
|
kind: Literal["question", "handoff"] = "question"
|
|
|
|
|
correlation_id: str | None = None
|
|
|
|
|
content: NonEmptyStr
|
|
|
|
|
board_ids: list[UUID] | None = None
|
|
|
|
|
reply_tags: list[str] = Field(default_factory=lambda: ["gateway_main", "lead_reply"])
|
|
|
|
|
reply_source: str | None = "lead_to_gateway_main"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GatewayLeadBroadcastBoardResult(SQLModel):
|
|
|
|
|
board_id: UUID
|
|
|
|
|
lead_agent_id: UUID | None = None
|
|
|
|
|
lead_agent_name: str | None = None
|
|
|
|
|
ok: bool = False
|
|
|
|
|
error: str | None = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GatewayLeadBroadcastResponse(SQLModel):
|
|
|
|
|
ok: bool = True
|
|
|
|
|
sent: int = 0
|
|
|
|
|
failed: int = 0
|
|
|
|
|
results: list[GatewayLeadBroadcastBoardResult] = Field(default_factory=list)
|
|
|
|
|
|
2026-02-07 16:21:31 +05:30
|
|
|
|
|
|
|
|
class GatewayMainAskUserRequest(SQLModel):
|
|
|
|
|
correlation_id: str | None = None
|
|
|
|
|
content: NonEmptyStr
|
|
|
|
|
preferred_channel: str | None = None
|
|
|
|
|
|
|
|
|
|
# How the main agent should reply back into Mission Control (defaults interpreted by templates).
|
|
|
|
|
reply_tags: list[str] = Field(default_factory=lambda: ["gateway_main", "user_reply"])
|
|
|
|
|
reply_source: str | None = "user_via_gateway_main"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GatewayMainAskUserResponse(SQLModel):
|
|
|
|
|
ok: bool = True
|
|
|
|
|
board_id: UUID
|
|
|
|
|
main_agent_id: UUID | None = None
|
|
|
|
|
main_agent_name: str | None = None
|