41 lines
1.2 KiB
Python
41 lines
1.2 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 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 AIProviderStatusResponse(BaseModel):
|
|
provider: str
|
|
api: str | None = None
|
|
enabled: bool
|
|
configured: bool
|
|
model: str | None = None
|
|
base_url: str | None = None
|