Spaces:
Running
Running
from qdrant_client.conversions import common_types as types | |
from app.db_local_storage.in_memory_db import query_response_storage | |
from app.infrastructure.models.my_models import HybridSearchResponse, ModelResponse | |
from app.modules.hybridSearcher.hybridSearcher import HybridSearcher | |
from app.modules.questionAnswer.questionAnswer import QuestionAnswering | |
from transformers import pipeline | |
class QuerySearchFeature: | |
def __init__( | |
self, | |
qa_pipeline: pipeline, | |
hybrid_searcher: HybridSearcher, | |
question_answering: QuestionAnswering, | |
): | |
self.qa_pipeline = qa_pipeline | |
self.hybrid_searcher = hybrid_searcher | |
self.question_answering = question_answering | |
async def query_search(self, query: str) -> ModelResponse: | |
query_response_storage.append( | |
{ | |
"text": query, | |
"isSender": True, | |
} | |
) | |
result = self.hybrid_searcher.hybrid_search(query) | |
context = self.get_and_join_context(result) | |
model_response = self.question_answering.answer_question(query, context) | |
# TODO: Manage memory for display messages | |
query_response_storage.append( | |
{ | |
"text": model_response, | |
"isSender": False, | |
} | |
) | |
return ModelResponse( | |
text=model_response, | |
isSender=False, | |
message="success", | |
) | |
def get_and_join_context(self, search_result: HybridSearchResponse) -> str: | |
contexts = [point["chunk-text"] for point in search_result.data] | |
return ", ".join(contexts) | |