Files

91 lines
2.7 KiB
Python
Raw Permalink Normal View History

2026-05-11 03:27:21 +03:30
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__,
),
]