From fb54887c0389d2c3d99aa88e42d019aa1b31f34a Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Tue, 16 Dec 2025 00:32:36 +0100 Subject: [PATCH] fix: handle HybridRAG keywords schema change MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit library-desk now returns keywords as dict with core_keywords field. Client now handles both list and dict formats for backwards compat. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- CHANGELOG.md | 6 ++++++ pyproject.toml | 2 +- src/agents/librarian/client.py | 9 ++++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a191c0..93a366d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.8.2] - 2025-12-16 + +### Fixed + +- **HybridRAG keywords schema mismatch** - library-desk now returns `keywords` as dict with `core_keywords`, client now handles both formats + ## [1.8.1] - 2025-12-16 ### Fixed diff --git a/pyproject.toml b/pyproject.toml index 5641521..70058e9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tatlock" -version = "1.8.1" +version = "1.8.2" description = "OpenAI-compatible API with Ollama backend" requires-python = ">=3.12" dependencies = [] diff --git a/src/agents/librarian/client.py b/src/agents/librarian/client.py index 5256909..634afc0 100644 --- a/src/agents/librarian/client.py +++ b/src/agents/librarian/client.py @@ -281,9 +281,16 @@ class LibraryDeskClient: metadata=r.get("metadata", {}), )) + # Handle keywords being either a list or a dict with core_keywords + raw_keywords = data.get("keywords", []) + if isinstance(raw_keywords, dict): + keywords = raw_keywords.get("core_keywords", []) + else: + keywords = raw_keywords + return HybridRAGResponse( results=results, - keywords=data.get("keywords", []), + keywords=keywords, synonyms=data.get("synonyms", []), related_dossiers=data.get("related_dossiers", []), formatted_context=data.get("formatted_context", ""),