Legacy ontology payloads could be saved with attributes as free-form maps of attribute names to descriptions. The graph build path dereferenced attr_def["name"] directly, which raised a KeyError before the Zep ontology request. This adds a shared ontology normalizer, applies it when validating generated ontologies and when setting graph ontology, and adds regression tests for both normalization and graph-builder compatibility. Constraint: The configured OpenAI-compatible provider guarantees valid JSON but not strict schema adherence for ontology attributes Rejected: Guard only graph_builder.set_ontology against missing keys | would leave malformed ontologies persisted and unvalidated upstream Confidence: high Scope-risk: narrow Reversibility: clean Directive: Keep ontology payloads normalized at service boundaries so new generations and saved legacy projects share one schema contract Tested: Targeted backend pytest for ontology normalization in the docker compose runtime Tested: Python compileall for backend app and tests in the docker compose runtime Tested: Reproduced the original saved project payload through graph_builder.set_ontology with a stubbed client Not-tested: Live Zep API round-trip against the upstream service |
||
|---|---|---|
| .. | ||
| app | ||
| scripts | ||
| tests | ||
| pyproject.toml | ||
| requirements.txt | ||
| run.py | ||
| uv.lock | ||