Cognitive-rag / 04_vectoredb / test_multi_retrieval.py
test_multi_retrieval.py
Raw

import sys
import json
from pathlib import Path

# Add parent to path for imports
sys.path.insert(0, str(Path(__file__).parent))
sys.path.insert(0, str(Path(__file__).parent.parent / "03_embedding"))

from retriever_multi import get_unified_context_for_llm, export_retrieval_to_json
from embed_query import load_client
import config


def test_retrieval():
    """Test retrieval and output JSON for LLM integration."""
    print("=" * 60)
    print("Multi-Namespace Retrieval Test")
    print("=" * 60)
    
    # Load NVIDIA NIM embedding client
    print("\n Loading NVIDIA NIM embedding model...")
    client = load_client(config.EMBEDDING_MODEL, config.NVIDIA_API_KEY, "NONE")
    print("    Model loaded")
    
    while True:
        # Get query from user
        query = input("\n Enter query (or 'quit' to exit): ").strip()
        
        if query.lower() in ['quit', 'exit', 'q']:
            print("\n Goodbye!")
            break
        
        if not query:
            continue
        
        # Embed query
        print("\n Embedding query...")
        query_embedding = client.embed_query(query)
        
        # Retrieve from all namespaces
        print(" Retrieving from Pinecone...")
        context = get_unified_context_for_llm(
            query_embedding=query_embedding,
            query_text=query,
            doc_top_k=5,
            memory_top_k=3,
            include_related=True,
        )
        
        # Print summary
        print(f"\n Results:")
        print(f"    Document chunks: {context['doc_count']}")
        print(f"    Memory chunks: {context['memory_count']}")
        print(f"    Related chunks: {context['related_count']}")
        
        # Export to JSON
        output_path = Path(__file__).parent / "output" / "retrieval_output.json"
        output = export_retrieval_to_json(query, context, str(output_path))
        
        print(f"\n Saved to: {output_path}")
        
        # Also print the JSON
        print("\n" + "=" * 60)
        print("JSON Output:")
        print("=" * 60)
        print(json.dumps(output, indent=2, ensure_ascii=False))


if __name__ == "__main__":
    test_retrieval()