| from typing import Any, Literal | |
| from pydantic import BaseModel, Field | |
| BBox = tuple[float, float, float, float] | |
| class Provenance(BaseModel): | |
| asset_id: str | |
| bbox: BBox | None = None | |
| extraction_method: str | |
| confidence: float | |
| lens_version: str | |
| class VisualAssetRecord(BaseModel): | |
| id: str | |
| conversation_id: str | |
| source_file_id: str | None = None | |
| upload_order: int | |
| sha256: str | |
| original_uri: str | |
| mime_type: str | |
| width: int | |
| height: int | |
| aliases: list[str] = Field(default_factory=list) | |
| class VisualViewRecord(BaseModel): | |
| id: str | |
| asset_id: str | |
| view_type: str | |
| lens_name: str | |
| lens_version: str | |
| parameters_hash: str | |
| status: Literal["pending", "ready", "failed"] = "ready" | |
| payload_json: dict[str, Any] | |
| confidence: float | |
| provenance_json: list[Provenance] = Field(default_factory=list) | |