43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Literal
|
|
from uuid import UUID
|
|
|
|
from pydantic import Field
|
|
|
|
from .common import ApiEnvelope, JsonObject, JsonList, RouteContract, SchemaModel
|
|
|
|
HTTP_METHOD = 'POST'
|
|
ROUTE_PATH = '/api/soile/anomaly-detection/'
|
|
|
|
|
|
class SoileAnomalyDetectionRequest(SchemaModel):
|
|
farm_uuid: UUID
|
|
|
|
|
|
class SoileAnomalyDetectionResponseData(SchemaModel):
|
|
farm_uuid: str
|
|
summary: str
|
|
explanation: str | None = None
|
|
likely_cause: str | None = None
|
|
recommended_action: str | None = None
|
|
monitoring_priority: Literal['low', 'medium', 'high', 'urgent'] | str
|
|
confidence: float | None = None
|
|
generated_at: str | None = None
|
|
anomalies: JsonList = Field(default_factory=list)
|
|
interpretation: JsonObject = Field(default_factory=dict)
|
|
knowledge_base: str | None = None
|
|
raw_response: str | None = None
|
|
|
|
|
|
class SoileAnomalyDetectionResponse(ApiEnvelope[SoileAnomalyDetectionResponseData]):
|
|
pass
|
|
|
|
|
|
CONTRACT = RouteContract(
|
|
method=HTTP_METHOD,
|
|
path=ROUTE_PATH,
|
|
request_model=SoileAnomalyDetectionRequest.__name__,
|
|
response_model=SoileAnomalyDetectionResponse.__name__,
|
|
)
|