| from __future__ import annotations |
|
|
| from dataclasses import dataclass, field |
| from typing import Any, Literal |
|
|
|
|
| Objective = Literal["time", "distance"] |
|
|
|
|
| @dataclass |
| class RouteTask: |
| raw_request: str |
| start_place: str |
| destination_places: list[str] |
| objective: Objective = "time" |
| return_to_start: bool = True |
| fixed_end_place: str | None = None |
| constraints: list[str] = field(default_factory=list) |
|
|
|
|
| @dataclass |
| class GeoPoint: |
| name: str |
| query: str |
| lat: float |
| lon: float |
| display_name: str |
| source: str |
|
|
|
|
| @dataclass |
| class RouteMatrix: |
| points: list[GeoPoint] |
| durations: list[list[float]] |
| distances: list[list[float]] |
| source: str |
|
|
|
|
| @dataclass |
| class RouteSolution: |
| route_indices: list[int] |
| route_names: list[str] |
| total_duration_seconds: float |
| total_distance_meters: float |
| objective: Objective |
| algorithm: str |
| leg_rows: list[list[Any]] |
|
|
|
|
| @dataclass |
| class ToolEvent: |
| step: int |
| tool: str |
| arguments: dict[str, Any] |
| status: str |
| result: str |
|
|
|
|
| @dataclass |
| class AgentResult: |
| task: RouteTask |
| points: list[GeoPoint] |
| matrix: RouteMatrix |
| solution: RouteSolution |
| summary_markdown: str |
| trace: list[ToolEvent] |
| pdf_path: str |
| route_svg: str |
| warnings: list[str] = field(default_factory=list) |
|
|