farjadmalik's picture
refactoring and testing
8be9912
"""Main RAG system implementation."""
from rag.vector_store import initialize_vector_store, build_vector_store_from_json
from rag.retriever import configure_retriever
from rag.llm import initialize_llm, get_rag_prompt
# from utils.feedback_logger import FeedbackLogger
from utils.error_handling import handle_rag_error
from interface.config import SCORE_THRESHOLD, JSON_FILE_PATH
class IqbalRAGSystem:
"""Manages the RAG system for Iqbal's poetry."""
def __init__(self):
"""Initialize the RAG system components."""
# Build or load vector store
self.vector_store = build_vector_store_from_json(JSON_FILE_PATH)
self.retriever = configure_retriever(self.vector_store)
self.llm = initialize_llm()
self.prompt = get_rag_prompt()
self.chain = self.prompt | self.llm
# self.feedback_logger = FeedbackLogger()
@handle_rag_error
def query_rag(self, question):
"""Process a query through the RAG system."""
print(f"**********************************************************************")
print(f"query_rag: {question}")
docs = self.retriever.invoke(question, config={'score_threshold': SCORE_THRESHOLD})
if not docs:
return "No relevant poems found", []
print(f"docs: {docs}")
context = "\n\n".join(doc.page_content for doc in docs)
print(f"context: {context}")
context_ids = [doc.metadata.get("poem_id", "") for doc in docs]
print(f"context_ids: {context_ids}")
response = self.chain.invoke({
'context': context,
'question': question
})
print(f"response: {response}")
print(f"**********************************************************************")
return response, context_ids
# def log_feedback(self, query, response, feedback, comment, context_ids):
# """Log user feedback."""
# self.feedback_logger.log_feedback(query, response, feedback, comment, context_ids)