fix(genai): sanitise Pydantic Optional anyOf before Ollama #37
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/ollama-schema-sanitise"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ollama 0.11.8 segfaults on anyOf+null. Strip the null branch in OllamaClient; Pydantic still accepts None post-parse.
Ollama 0.11.8's llama.cpp structured-output implementation segfaults on Pydantic v2's standard Optional pattern: {"anyOf": [{"type": "string"}, {"type": "null"}]} Confirmed on the deploy host: /api/chat request with the MVP's ProvenanceWrappedResponse schema crashed Ollama with SIGSEGV; the client saw httpx RemoteProtocolError → IX_002_000. New _sanitise_schema_for_ollama walks the schema recursively and drops "type: null" branches from every anyOf. Single-branch unions are inlined so sibling keys (default, title) survive. This only narrows what the LLM is *told* it may emit; Pydantic still validates the real response body against the original schema and accepts None for Optional fields if they were absent or explicitly null. Existing unit tests updated: the "happy path" test no longer pins the format to `_Schema.model_json_schema()` verbatim — instead it asserts the sanitisation effect on a known-Optional field. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>