62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
from typing import Any
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class AIContentBlock(BaseModel):
|
|
type: str
|
|
text: str | None = None
|
|
thinking: str | None = None
|
|
signature: str | None = None
|
|
metadata: dict[str, Any] = Field(default_factory=dict)
|
|
|
|
|
|
class SituationalAnalysisRequest(BaseModel):
|
|
title: str = Field(..., min_length=1, max_length=200)
|
|
objective: str = Field(..., min_length=1, max_length=1000)
|
|
context: dict[str, Any] = Field(default_factory=dict)
|
|
observations: list[str] = Field(default_factory=list)
|
|
constraints: list[str] = Field(default_factory=list)
|
|
preferred_model: str | None = Field(default=None, max_length=200)
|
|
thinking: dict[str, Any] | None = None
|
|
|
|
|
|
class BGPBriefRequest(BaseModel):
|
|
incident_limit: int = Field(default=5, ge=1, le=10)
|
|
anomaly_limit: int = Field(default=6, ge=1, le=12)
|
|
collector_limit: int = Field(default=5, ge=1, le=10)
|
|
preferred_model: str | None = Field(default=None, max_length=200)
|
|
thinking: dict[str, Any] | None = None
|
|
|
|
|
|
class SituationalAnalysisResponse(BaseModel):
|
|
provider: str
|
|
model: str
|
|
content: str
|
|
content_blocks: list[AIContentBlock] = Field(default_factory=list)
|
|
text_blocks: list[str] = Field(default_factory=list)
|
|
thinking_blocks: list[str] = Field(default_factory=list)
|
|
raw_response: dict[str, Any] = Field(default_factory=dict)
|
|
|
|
|
|
class BGPBriefRecordSummary(BaseModel):
|
|
id: str
|
|
title: str
|
|
provider: str
|
|
model: str
|
|
request_id: str | None = None
|
|
generated_at: str
|
|
|
|
|
|
class BGPBriefRecordResponse(BGPBriefRecordSummary):
|
|
content_markdown: str
|
|
|
|
|
|
class AIProviderStatusResponse(BaseModel):
|
|
provider: str
|
|
api: str | None = None
|
|
enabled: bool
|
|
configured: bool
|
|
model: str | None = None
|
|
base_url: str | None = None
|