Spaces:
Sleeping
Sleeping
| 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) | |