Julien Simon
Refactor codebase for improved maintainability and readability
c319b15
Raw
History Blame Contribute Delete
2.9 kB
"""CLI entry point for testing RAG functionality."""
from models import create_embeddings, create_llm
from qa_chain import create_qa_chain
from vectorstore import load_or_create_vectorstore
def main():
"""Main execution function for CLI testing."""
embeddings = create_embeddings()
vectorstore = load_or_create_vectorstore(embeddings)
qa_chain = create_qa_chain(vectorstore)
query = "Tell me about Arcee Fusion."
chat_history = []
# Test vanilla response
print("\n=== Vanilla Response (No RAG) ===")
streaming_llm = create_llm(streaming=True)
print("Answer: ", end="", flush=True)
try:
for chunk in streaming_llm.stream(query):
print(chunk.content, end="", flush=True)
print()
except Exception as e:
print(f"\nError: {e}")
# Test RAG response with MMR (diverse results)
print("\n=== RAG Response (MMR for diversity) ===")
print("Answer: ", end="", flush=True)
chunk_data = None
try:
for chunk_data in qa_chain.stream(
{"question": query, "chat_history": chat_history}
):
print(chunk_data["chunk"], end="", flush=True)
print()
# Print sources
if chunk_data and chunk_data.get("source_documents"):
print("\nSources:")
seen_sources = set()
for doc in chunk_data["source_documents"]:
source = doc.metadata.get("source", "Unknown")
page = doc.metadata.get("page", "unknown")
source_key = f"{source}:{page}"
if source_key not in seen_sources:
print(f"- {source}, page {page}")
seen_sources.add(source_key)
except Exception as e:
print(f"\nError: {e}")
# Example: RAG with metadata filter (filter by page number)
print("\n=== RAG Response with Metadata Filter (page >= 5) ===")
print("Answer: ", end="", flush=True)
chunk_data = None
try:
for chunk_data in qa_chain.stream(
{
"question": query,
"chat_history": chat_history,
"filter": {"page": {"$gte": 5}}, # Only pages 5+
}
):
print(chunk_data["chunk"], end="", flush=True)
print()
if chunk_data and chunk_data.get("source_documents"):
print("\nSources (filtered):")
seen_sources = set()
for doc in chunk_data["source_documents"]:
source = doc.metadata.get("source", "Unknown")
page = doc.metadata.get("page", "unknown")
source_key = f"{source}:{page}"
if source_key not in seen_sources:
print(f"- {source}, page {page}")
seen_sources.add(source_key)
except Exception as e:
print(f"\nError: {e}")
if __name__ == "__main__":
main()