whFalsa / app /models /domain.py
codeBOKER's picture
support unregistered drivers from group messages and warm new user onboarding
1cd53ba
Raw
History Blame Contribute Delete
1.7 kB
from dataclasses import dataclass, field
from typing import Any, Literal
SenderType = Literal["customer", "assistant", "driver", "system"]
UserMode = Literal["new_user", "driver", "passenger"]
@dataclass(slots=True)
class WhatsAppInboundMessage:
message_id: str
remoteJid: str
text: str
timestamp: str | None = None
profile_name: str | None = None
phone_number_id: str | None = None
message_type: str = "text"
interactive_reply_id: str | None = None
context_message_id: str | None = None
phone_number: str | None = None
is_group: bool = False
raw: dict[str, Any] = field(default_factory=dict)
@dataclass(slots=True)
class ExtractedTrip:
is_trip_ad: bool
departure: str | None = None
destination: str | None = None
departure_date: str | None = None
departure_time: str | None = None
available_seats: int | None = None
total_seats: int | None = None
price: float | None = None
car_type: str | None = None
driver_name: str | None = None
driver_phone: str | None = None
@dataclass(slots=True)
class ToolCall:
id: str
name: str
arguments: str
@dataclass(slots=True)
class AIProviderResponse:
content: str | None = None
tool_calls: list[ToolCall] = field(default_factory=list)
raw_message: dict[str, Any] = field(default_factory=dict)
@dataclass(slots=True)
class ToolResult:
ok: bool
data: dict[str, Any]
error: str | None = None
suppress_llm_reply: bool = False
def to_payload(self) -> dict[str, Any]:
payload: dict[str, Any] = {"ok": self.ok, "data": self.data}
if self.error:
payload["error"] = self.error
return payload