Kirtan001's picture
Fresh Start: Clean Repo without binaries
ad06665
import sys
from loguru import logger
from langchain_qdrant import QdrantVectorStore
from langchain_huggingface import HuggingFaceEmbeddings
from qdrant_client import QdrantClient
# Configuration
DB_PATH = "data/qdrant_db"
COLLECTION_NAME = "satellites"
MODEL_NAME = "BAAI/bge-small-en-v1.5"
# Setup logging
logger.remove()
logger.add(sys.stderr, format="<green>{time:HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{message}</cyan>", level="INFO")
def get_vector_store():
logger.info(f"Loading embedding model: {MODEL_NAME}...")
embeddings = HuggingFaceEmbeddings(
model_name=MODEL_NAME,
model_kwargs={'device': 'cpu'},
encode_kwargs={'normalize_embeddings': True}
)
logger.info(f"Connecting to Qdrant at {DB_PATH}...")
client = QdrantClient(path=DB_PATH)
vector_store = QdrantVectorStore(
client=client,
collection_name=COLLECTION_NAME,
embedding=embeddings,
)
return vector_store
def chat_loop():
args = sys.argv[1:]
if args:
query = " ".join(args)
logger.info(f"Retrieving context for: '{query}'")
try:
vector_store = get_vector_store()
results = vector_store.similarity_search_with_score(query, k=3)
print(f"\n--- Context Retrieved ({len(results)} chunks) ---")
for i, (doc, score) in enumerate(results, 1):
meta = doc.metadata
print(f"[{i}] {meta.get('name')} (Score: {score:.4f})")
print(f" Source: {meta.get('url')}")
print(f" Content Snippet: {doc.page_content[:150]}...")
except Exception as e:
logger.error(f"Error during retrieval: {e}")
return
logger.info("Initializing RAG Retrieval System...")
try:
vector_store = get_vector_store()
logger.info("System Ready. Type 'exit' to quit.")
except Exception as e:
logger.error(f"Failed to initialize: {e}")
return
while True:
try:
query = input("\nUse Query: ")
if query.lower() in ['exit', 'quit']:
break
logger.info(f"Retrieving context for: '{query}'")
# Simple similarity search
results = vector_store.similarity_search_with_score(query, k=3)
context_text = "\n\n".join([doc.page_content for doc, _score in results])
print(f"\n--- Context Retrieved ({len(results)} chunks) ---")
for i, (doc, score) in enumerate(results, 1):
meta = doc.metadata
print(f"[{i}] {meta.get('name')} (Score: {score:.4f})")
# Placeholder for Generation
print("\n--- Answer Generation (Requires Ollama) ---")
print("Note: Install Ollama (https://ollama.com/) and run `ollama pull llama3`")
# In a real app, we'd call:
# from langchain_community.llms import Ollama
# llm = Ollama(model="llama3")
# response = llm.invoke(f"Context: {context_text}\n\nQuestion: {query}")
# print(response)
except KeyboardInterrupt:
break
except Exception as e:
logger.error(f"Error during retrieval: {e}")
if __name__ == "__main__":
chat_loop()