This commit is contained in:
2026-05-05 21:02:12 +03:30
parent 5301071df5
commit 1679825ae2
47 changed files with 1347 additions and 1403 deletions
+37 -28
View File
@@ -3,6 +3,7 @@
"""
from .config import load_rag_config, RAGConfig, get_service_config
from .embedding import embed_single, embed_texts
from .observability import observe_operation, record_metric
from .vector_store import QdrantVectorStore
@@ -63,15 +64,19 @@ def search_with_query(
use_user_embeddings=use_user_embeddings,
)
query_vector = embed_single(query, config=cfg)
store = QdrantVectorStore(config=cfg)
return store.search(
query_vector=query_vector,
limit=limit,
score_threshold=score_threshold,
sensor_uuids=sensor_filters,
kb_names=kb_filters,
)
with observe_operation(source="rag.retrieve", provider=cfg.embedding.provider, operation="search_with_query"):
query_vector = embed_single(query, config=cfg)
store = QdrantVectorStore(config=cfg)
results = store.search(
query_vector=query_vector,
limit=limit,
score_threshold=score_threshold,
sensor_uuids=sensor_filters,
kb_names=kb_filters,
)
if not results:
record_metric("rag.retrieve.empty_result", operation="search_with_query", service_id=service_id)
return results
def search_with_texts(
@@ -102,24 +107,28 @@ def search_with_texts(
)
store = QdrantVectorStore(config=cfg)
vectors = embed_texts(normalized_texts, config=cfg)
merged_results: dict[str, dict] = {}
with observe_operation(source="rag.retrieve", provider=cfg.embedding.provider, operation="search_with_texts"):
vectors = embed_texts(normalized_texts, config=cfg)
merged_results: dict[str, dict] = {}
for vector in vectors:
results = store.search(
query_vector=vector,
limit=per_text_limit,
score_threshold=score_threshold,
sensor_uuids=sensor_filters,
kb_names=kb_filters,
)
for item in results:
current = merged_results.get(item["id"])
if current is None or item["score"] > current["score"]:
merged_results[item["id"]] = item
for vector in vectors:
results = store.search(
query_vector=vector,
limit=per_text_limit,
score_threshold=score_threshold,
sensor_uuids=sensor_filters,
kb_names=kb_filters,
)
for item in results:
current = merged_results.get(item["id"])
if current is None or item["score"] > current["score"]:
merged_results[item["id"]] = item
return sorted(
merged_results.values(),
key=lambda item: item["score"],
reverse=True,
)[:limit]
final_results = sorted(
merged_results.values(),
key=lambda item: item["score"],
reverse=True,
)[:limit]
if not final_results:
record_metric("rag.retrieve.empty_result", operation="search_with_texts", service_id=service_id)
return final_results