from __future__ import annotations from typing import Literal from uuid import UUID from pydantic import Field from .common import ApiEnvelope, JsonObject, JsonValue, RouteContract, SchemaModel class FarmAlertsRequest(SchemaModel): farm_uuid: UUID sensor_uuid: UUID | None = None query: str | None = None class FarmAlertNotificationSchema(SchemaModel): id: int | None = None farm_uuid: str | None = None endpoint: str | None = None level: Literal['danger', 'warning', 'info'] | str title: str message: str suggested_action: str | None = None source_alert_id: str | None = None source_metric_type: str | None = None payload: JsonObject = Field(default_factory=dict) created_at: str | None = None updated_at: str | None = None class FarmAlertsTimelineItem(SchemaModel): timestamp: str | None = None level: Literal['danger', 'warning', 'info'] | str title: str description: str | None = None source_alert_id: str | None = None source_metric_type: str | None = None class FarmAlertsTrackerResponseData(SchemaModel): farm_uuid: str service_id: str | None = None knowledge_base: str | None = None tone_file: str | None = None tracker: JsonObject = Field(default_factory=dict) headline: str overview: str | None = None status_level: Literal['danger', 'warning', 'info'] | str notifications: list[FarmAlertNotificationSchema] = Field(default_factory=list) raw_llm_response: str | None = None structured_context: JsonObject = Field(default_factory=dict) class FarmAlertsTimelineResponseData(SchemaModel): farm_uuid: str service_id: str | None = None knowledge_base: str | None = None tone_file: str | None = None tracker: JsonObject = Field(default_factory=dict) headline: str overview: str | None = None timeline: list[FarmAlertsTimelineItem] = Field(default_factory=list) notifications: list[FarmAlertNotificationSchema] = Field(default_factory=list) raw_llm_response: str | None = None structured_context: JsonObject = Field(default_factory=dict) class FarmAlertsTrackerResponse(ApiEnvelope[FarmAlertsTrackerResponseData]): pass class FarmAlertsTimelineResponse(ApiEnvelope[FarmAlertsTimelineResponseData]): pass CONTRACTS = [ RouteContract( method='POST', path='/api/farm-alerts/tracker/', request_model=FarmAlertsRequest.__name__, response_model=FarmAlertsTrackerResponse.__name__, ), RouteContract( method='POST', path='/api/farm-alerts/timeline/', request_model=FarmAlertsRequest.__name__, response_model=FarmAlertsTimelineResponse.__name__, ), ]