from typing import Literal from pydantic import BaseModel, Field class Axis(BaseModel): label: str | None = None scale: Literal["linear", "categorical"] = "categorical" values: list[str] | None = None minimum: float | None = None maximum: float | None = None class ChartSeries(BaseModel): name: str color: str | None = None points: list[tuple[str, float]] class ChartIR(BaseModel): chart_type: Literal["bar", "line", "scatter", "pie", "unknown"] = "unknown" title: str | None = None plot_bbox: tuple[float, float, float, float] | None = None x_axis: Axis = Field(default_factory=Axis) y_axis: Axis = Field(default_factory=lambda: Axis(scale="linear")) series: list[ChartSeries] = Field(default_factory=list) confidence: float = 0.0