main
py 30 lines 935 Bytes
Raw
1 from typing import Any, Protocol
2
3 from pydantic import BaseModel, ValidationError
4
5
6 class LlmProvider(Protocol):
7 def structured_extract(self, prompt: str, schema: type[BaseModel]) -> BaseModel | None:
8 """Return schema-validated extraction output or None without fabricating missing data."""
9
10
11 class OllamaProvider:
12 def structured_extract(self, prompt: str, schema: type[BaseModel]) -> BaseModel | None:
13 return None
14
15
16 class FutureOpenAIProvider:
17 def structured_extract(self, prompt: str, schema: type[BaseModel]) -> BaseModel | None:
18 return None
19
20
21 class FutureAzureOpenAIProvider:
22 def structured_extract(self, prompt: str, schema: type[BaseModel]) -> BaseModel | None:
23 return None
24
25
26 def validate_structured_output(payload: dict[str, Any], schema: type[BaseModel]) -> BaseModel | None:
27 try:
28 return schema.model_validate(payload)
29 except ValidationError:
30 return None