File size: 1,703 Bytes
102dd4f d4f6fe7 102dd4f dc8cb49 0467de1 1cd53ba 102dd4f 1cd53ba 102dd4f 1b62af7 102dd4f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | 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
|