UPDATE
This commit is contained in:
+37
-28
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user