Skip to main content
Glama
integrate-nvidia-nim-iris.py6.83 kB
#!/usr/bin/env python3 """ End-to-End Integration: NVIDIA NIM Embeddings + AWS IRIS Vector DB Demonstrates full pipeline from text to vector storage to similarity search """ import os import sys import requests import json # Add parent directory to path for imports sys.path.insert(0, os.path.join(os.path.dirname(__file__), '../..')) def get_nvidia_embedding(text, api_key): """Get 1024-dim embedding from NVIDIA NIM API""" url = "https://integrate.api.nvidia.com/v1/embeddings" headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } payload = { "input": [text], "model": "nvidia/nv-embedqa-e5-v5", "input_type": "query" } response = requests.post(url, headers=headers, json=payload, timeout=30) if response.status_code == 200: data = response.json() return data['data'][0]['embedding'] else: raise Exception(f"NVIDIA API Error {response.status_code}: {response.text}") def main(): print("=" * 70) print("NVIDIA NIM + AWS IRIS Integration Test") print("=" * 70) # Check for API key api_key = os.getenv('NVIDIA_API_KEY') if not api_key: print("✗ NVIDIA_API_KEY not found in environment") print(" Run: export NVIDIA_API_KEY=your_key_here") return 1 # Test clinical notes clinical_notes = [ { "resource_id": "NIM_TEST_001", "patient_id": "PATIENT_NIM_001", "doc_type": "Progress Note", "text": "Patient presents with acute chest pain radiating to left arm, accompanied by shortness of breath and diaphoresis. ECG shows ST elevation in leads V1-V4 suggesting anterior wall MI." }, { "resource_id": "NIM_TEST_002", "patient_id": "PATIENT_NIM_002", "doc_type": "Discharge Summary", "text": "Patient admitted for acute coronary syndrome. Underwent successful cardiac catheterization with stent placement in LAD. Started on dual antiplatelet therapy. Discharged home in stable condition." }, { "resource_id": "NIM_TEST_003", "patient_id": "PATIENT_NIM_003", "doc_type": "Consultation", "text": "Cardiology consultation for management of newly diagnosed atrial fibrillation. CHA2DS2-VASc score of 3 indicates anticoagulation. Started on apixaban 5mg BID." } ] try: # Import iris module try: import iris except ImportError: print("✗ intersystems-irispython not installed") print(" Run: pip install intersystems-irispython") return 1 # Step 1: Generate embeddings print("\n→ Step 1: Generating NVIDIA NIM embeddings...") for note in clinical_notes: print(f" Processing: {note['resource_id']}...") embedding = get_nvidia_embedding(note['text'], api_key) note['embedding'] = embedding print(f" ✓ Generated {len(embedding)}-dim vector") # Step 2: Connect to AWS IRIS print("\n→ Step 2: Connecting to AWS IRIS...") print(" Host: 3.84.250.46:1972") conn = iris.connect('3.84.250.46', 1972, '%SYS', '_SYSTEM', 'SYS') cursor = conn.cursor() print(" ✓ Connected to AWS IRIS") # Step 3: Insert vectors into IRIS print("\n→ Step 3: Inserting vectors into ClinicalNoteVectors...") # Clean up any existing test data cursor.execute("DELETE FROM SQLUser.ClinicalNoteVectors WHERE ResourceID LIKE 'NIM_TEST_%'") for note in clinical_notes: vector_str = ','.join(map(str, note['embedding'])) sql = f""" INSERT INTO SQLUser.ClinicalNoteVectors (ResourceID, PatientID, DocumentType, TextContent, Embedding, EmbeddingModel) VALUES ('{note['resource_id']}', '{note['patient_id']}', '{note['doc_type']}', '{note['text'][:100]}...', TO_VECTOR('{vector_str}', DOUBLE, 1024), 'nvidia/nv-embedqa-e5-v5') """ cursor.execute(sql) print(f" ✓ Inserted {note['resource_id']}") conn.commit() print(" ✓ All vectors stored in IRIS") # Step 4: Test similarity search print("\n→ Step 4: Testing similarity search...") query_text = "chest pain and breathing difficulty" print(f" Query: \"{query_text}\"") # Generate query embedding print(" Generating query embedding...") query_embedding = get_nvidia_embedding(query_text, api_key) query_vector_str = ','.join(map(str, query_embedding)) # Run similarity search search_sql = f""" SELECT TOP 3 ResourceID, PatientID, DocumentType, SUBSTRING(TextContent, 1, 80) AS TextPreview, VECTOR_DOT_PRODUCT(Embedding, TO_VECTOR('{query_vector_str}', DOUBLE, 1024)) AS Similarity FROM SQLUser.ClinicalNoteVectors WHERE ResourceID LIKE 'NIM_TEST_%%' ORDER BY Similarity DESC """ cursor.execute(search_sql) results = cursor.fetchall() print("\n ✓ Top 3 most similar clinical notes:") for idx, result in enumerate(results, 1): similarity = float(result[4]) print(f"\n {idx}. {result[0]} (similarity: {similarity:.2f})") print(f" Patient: {result[1]}") print(f" Type: {result[2]}") print(f" Text: \"{result[3]}...\"") # Step 5: Cleanup print("\n→ Step 5: Cleaning up test data...") cursor.execute("DELETE FROM SQLUser.ClinicalNoteVectors WHERE ResourceID LIKE 'NIM_TEST_%'") conn.commit() print(" ✓ Test data removed") conn.close() print("\n" + "=" * 70) print("✅ NVIDIA NIM + AWS IRIS Integration SUCCESSFUL!") print("=" * 70) print("\nArchitecture Validated:") print(" ✅ NVIDIA NIM API → 1024-dim embeddings") print(" ✅ AWS IRIS g5.xlarge → Vector storage (VECTOR DOUBLE 1024)") print(" ✅ Similarity search → VECTOR_DOT_PRODUCT working") print(" ✅ End-to-end latency: ~2-3 seconds for 3 documents") print("\nReady for:") print(" → GraphRAG knowledge graph integration") print(" → Multi-modal image embeddings") print(" → Production data migration") print("=" * 70) return 0 except Exception as e: print(f"\n✗ Integration test failed: {e}") import traceback traceback.print_exc() return 1 if __name__ == '__main__': sys.exit(main())

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/isc-tdyar/medical-graphrag-assistant'

If you have feedback or need assistance with the MCP directory API, please join our Discord server