Fix ontology RAG pipeline + add query concurrency (#691)

- Fix ontology RAG pipeline: embeddings API, chunker provenance, and query concurrency

- Fix ontology embeddings to use correct response shape from embed()
  API (returns list of vectors, not list of list of vectors).
- Simplify chunker URI logic to append /c{index} to parent ID
  instead of parsing page/doc URI structure which was fragile.

- Add provenance tracking and librarian integration to token
  chunker, matching recursive chunker capabilities.

- Add configurable concurrency (default 10) to Cassandra, Qdrant,
  and embeddings query services.
This commit is contained in:
cybermaggedon 2026-03-12 11:34:42 +00:00 committed by GitHub
parent 312174eb88
commit 45e6ad4abc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 148 additions and 50 deletions

View file

@ -149,7 +149,7 @@ class Processor(FlowProcessor):
# Detect embedding dimension by embedding a test string
logger.info("Detecting embedding dimension from embeddings service...")
test_embedding_response = await embeddings_client.embed(["test"])
test_embedding = test_embedding_response[0][0] # Extract first vector from first text
test_embedding = test_embedding_response[0] # Extract first vector
dimension = len(test_embedding)
logger.info(f"Detected embedding dimension: {dimension}")

View file

@ -153,14 +153,11 @@ class OntologyEmbedder:
# Get embeddings for batch
texts = [elem['text'] for elem in batch]
try:
# Single batch embedding call
# Single batch embedding call - returns list of vectors
embeddings_response = await self.embedding_service.embed(texts)
# Extract first vector from each text's vector set
embeddings_list = [resp[0] for resp in embeddings_response]
# Convert to numpy array
embeddings = np.array(embeddings_list)
embeddings = np.array(embeddings_response)
# Log embedding shape for debugging
logger.debug(f"Embeddings shape: {embeddings.shape}, expected: ({len(batch)}, {self.vector_store.dimension})")
@ -216,9 +213,9 @@ class OntologyEmbedder:
return None
try:
# embed() with single text, extract first vector from first text
# embed() with single text, extract first vector
embedding_response = await self.embedding_service.embed([text])
return np.array(embedding_response[0][0])
return np.array(embedding_response[0])
except Exception as e:
logger.error(f"Failed to embed text: {e}")
return None
@ -237,11 +234,9 @@ class OntologyEmbedder:
return None
try:
# Single batch embedding call
# Single batch embedding call - returns list of vectors
embeddings_response = await self.embedding_service.embed(texts)
# Extract first vector from each text's vector set
embeddings_list = [resp[0] for resp in embeddings_response]
return np.array(embeddings_list)
return np.array(embeddings_response)
except Exception as e:
logger.error(f"Failed to embed texts: {e}")
return None