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