Spaces:
Sleeping
Sleeping
| import ollama | |
| class RAGSystem: | |
| def __init__(self, data_processor): | |
| self.data_processor = data_processor | |
| self.model = "phi3.5" # Using Phi-3.5 model | |
| def query(self, user_query, top_k=3, search_method='hybrid'): | |
| # Retrieve relevant documents using the specified search method | |
| relevant_docs = self.data_processor.search(user_query, num_results=top_k, method=search_method) | |
| # Construct the prompt | |
| context = "\n".join([doc['content'] for doc in relevant_docs]) | |
| prompt = f"Context: {context}\n\nQuestion: {user_query}\n\nAnswer:" | |
| # Generate response using Ollama | |
| response = ollama.generate(model=self.model, prompt=prompt) | |
| return response['response'] | |
| def rerank_documents(self, documents, query): | |
| # Implement a simple re-ranking strategy | |
| # This could be improved with more sophisticated methods | |
| reranked = sorted(documents, key=lambda doc: self.calculate_relevance(doc['content'], query), reverse=True) | |
| return reranked | |
| def calculate_relevance(self, document, query): | |
| # Simple relevance calculation based on word overlap | |
| doc_words = set(document.lower().split()) | |
| query_words = set(query.lower().split()) | |
| return len(doc_words.intersection(query_words)) / len(query_words) |