diff --git a/trustgraph-base/trustgraph/api/async_flow.py b/trustgraph-base/trustgraph/api/async_flow.py index 68899341..8c0189e4 100644 --- a/trustgraph-base/trustgraph/api/async_flow.py +++ b/trustgraph-base/trustgraph/api/async_flow.py @@ -584,7 +584,7 @@ class AsyncFlowInstance: result = await self.request("document-rag", request_data) return result.get("response", "") - async def graph_embeddings_query(self, text: str, user: str, collection: str, limit: int = 10, **kwargs: Any): + async def graph_embeddings_query(self, text: str, collection: str, limit: int = 10, user: str = "", **kwargs: Any): """ Query graph embeddings for semantic entity search. diff --git a/trustgraph-base/trustgraph/api/async_socket_client.py b/trustgraph-base/trustgraph/api/async_socket_client.py index da581f73..8ef3a0ec 100644 --- a/trustgraph-base/trustgraph/api/async_socket_client.py +++ b/trustgraph-base/trustgraph/api/async_socket_client.py @@ -381,7 +381,7 @@ class AsyncSocketFlowInstance: if hasattr(chunk, 'content'): yield chunk.content - async def graph_embeddings_query(self, text: str, user: str, collection: str, limit: int = 10, **kwargs): + async def graph_embeddings_query(self, text: str, collection: str, limit: int = 10, user: str = "", **kwargs): """Query graph embeddings for semantic search""" emb_result = await self.embeddings(texts=[text]) vector = emb_result.get("vectors", [[]])[0] diff --git a/trustgraph-base/trustgraph/api/socket_client.py b/trustgraph-base/trustgraph/api/socket_client.py index aee9d450..5584827a 100644 --- a/trustgraph-base/trustgraph/api/socket_client.py +++ b/trustgraph-base/trustgraph/api/socket_client.py @@ -755,9 +755,9 @@ class SocketFlowInstance: def graph_embeddings_query( self, text: str, - user: str, collection: str, limit: int = 10, + user: str = "", **kwargs: Any ) -> Dict[str, Any]: """Query knowledge graph entities using semantic similarity.""" @@ -777,9 +777,9 @@ class SocketFlowInstance: def document_embeddings_query( self, text: str, - user: str, collection: str, limit: int = 10, + user: str = "", **kwargs: Any ) -> Dict[str, Any]: """Query document chunks using semantic similarity.""" diff --git a/trustgraph-flow/trustgraph/librarian/collection_manager.py b/trustgraph-flow/trustgraph/librarian/collection_manager.py index a450aded..09932adf 100644 --- a/trustgraph-flow/trustgraph/librarian/collection_manager.py +++ b/trustgraph-flow/trustgraph/librarian/collection_manager.py @@ -3,6 +3,7 @@ Collection management for the librarian - uses config service for storage """ import asyncio +import dataclasses import logging import json import uuid @@ -173,10 +174,17 @@ class CollectionManager: if response.error: raise RuntimeError(f"Config query failed: {response.error.message}") - # Every value in this workspace is a collection for this user + # Every value in this workspace is a collection. + # Filter to fields the current schema knows about — older + # persisted values may carry fields that have since been + # dropped (e.g. `user` from the pre-workspace-refactor era). + known_fields = {f.name for f in dataclasses.fields(CollectionMetadata)} collections = [] for config_value in response.values: metadata_dict = json.loads(config_value.value) + metadata_dict = { + k: v for k, v in metadata_dict.items() if k in known_fields + } metadata = CollectionMetadata(**metadata_dict) collections.append(metadata)