MCPcopy Create free account
hub / github.com/ScienciaLAB/document-qa / analyse_query

Method analyse_query

document_qa/document_qa_engine.py:393–436  ·  view source on GitHub ↗

Compute a relevance coefficient for *query* against *doc_id*. The coefficient is ``min_similarity - mean_similarity`` over the top-k retrieved chunks. A value close to zero suggests the question matches multiple passages equally well. Args: query: The n

(self, query, doc_id, context_size=4)

Source from the content-addressed store, hash-verified

391 return relevant_documents
392
393 def analyse_query(self, query, doc_id, context_size=4):
394 """Compute a relevance coefficient for *query* against *doc_id*.
395
396 The coefficient is ``min_similarity - mean_similarity`` over the
397 top-k retrieved chunks. A value close to zero suggests the
398 question matches multiple passages equally well.
399
400 Args:
401 query: The natural-language question.
402 doc_id: Document identifier.
403 context_size: Number of chunks to consider (default 4).
404
405 Returns:
406 tuple: ``(summary_string, coordinates)``
407 """
408 db = self.data_storage.embeddings_dict[doc_id]
409 # retriever = db.as_retriever(
410 # search_kwargs={"k": context_size, 'score_threshold': 0.0},
411 # search_type="similarity_score_threshold"
412 # )
413 retriever = db.as_retriever(search_kwargs={"k": context_size}, search_type="similarity_with_embeddings")
414 relevant_documents = retriever.invoke(query)
415 relevant_document_coordinates = [
416 doc.metadata["coordinates"].split(";") if "coordinates" in doc.metadata else [] for doc in relevant_documents
417 ]
418 all_documents = db.get(include=["documents", "metadatas", "embeddings"])
419 # all_documents_embeddings = all_documents["embeddings"]
420 # query_embedding = db._embedding_function.embed_query(query)
421
422 # distance_evaluator = load_evaluator("pairwise_embedding_distance",
423 # embeddings=db._embedding_function,
424 # distance_metric=EmbeddingDistance.EUCLIDEAN)
425
426 # distance_evaluator.evaluate_string_pairs(query=query_embedding, documents="")
427
428 similarities = [doc.metadata["__similarity"] for doc in relevant_documents]
429 min_similarity = min(similarities)
430 mean_similarity = sum(similarities) / len(similarities)
431 coefficient = min_similarity - mean_similarity
432
433 return (
434 f"Coefficient: {coefficient}, (Min similarity {min_similarity}, Mean similarity: {mean_similarity})",
435 relevant_document_coordinates,
436 )
437
438 def _parse_json(self, response, output_parser):
439 system_message = (

Callers 1

streamlit_app.pyFile · 0.80

Calls 2

as_retrieverMethod · 0.80
getMethod · 0.80

Tested by

no test coverage detected