Skip to main content
Glama
IRIS_VECTOR_RAG_GRAPHRAG_BUG_RESOLUTION.md5.67 kB
# iris-vector-rag v0.5.4 GraphRAG Bug Resolution **Date**: December 13, 2025 **Status**: ✅ **RESOLVED** **Fixed In**: Local development version (`/Users/tdyar/ws/iris-vector-rag-private`) **Related**: IRIS_VECTOR_RAG_GRAPHRAG_BUG_REPORT.md --- ## Summary Successfully identified and fixed the `UnboundLocalError: cannot access local variable 'time'` bug in iris-vector-rag's GraphRAG pipeline. --- ## Root Cause Analysis ### Problem The file `iris_vector_rag/pipelines/graphrag.py` had **two** `import time` statements: - **Line 8**: `import time` (module-level, correct) - **Line 144**: `import time` (inside a method, problematic) ### Why This Caused the Error Python's compiler performs scope analysis before execution. When it sees `import time` anywhere inside a function (line 144), it treats `time` as a **local variable for the entire function scope**, even for code that appears before the import statement. This caused line 93's `time.time()` to fail with: ```python UnboundLocalError: cannot access local variable 'time' where it is not associated with a value ``` ### Technical Explanation This is a classic Python scoping issue documented in PEP 227 (Statically Nested Scopes): ```python # Before fix (WRONG): def load_documents(self, documents_path: str, **kwargs) -> None: start_time = time.time() # ❌ Line 93: Fails - 'time' is local but not yet defined # ... 50 lines of code ... import time # Line 144: Makes 'time' local for ENTIRE function extraction_start_time = time.time() # This would work ``` ```python # After fix (CORRECT): def load_documents(self, documents_path: str, **kwargs) -> None: start_time = time.time() # ✅ Line 93: Works - uses module-level import # ... 50 lines of code ... # Line 144: Removed duplicate import extraction_start_time = time.time() # ✅ Works - uses module-level import ``` --- ## Fix Applied ### Changed File `/Users/tdyar/ws/iris-vector-rag-private/iris_vector_rag/pipelines/graphrag.py` ### Change Made **Removed duplicate import on line 144:** ```diff logger.info(f" Batch size: {batch_size}") logger.info(f" Total batches: {total_batches}") logger.info("=" * 70) - import time extraction_start_time = time.time() ``` --- ## Verification ### Test 1: Import Verification ```bash python3 -c "import iris_vector_rag.pipelines.graphrag; print('Module loaded successfully')" ``` **Result**: ✅ Module loads without errors ### Test 2: Pipeline Initialization ```bash python3 scripts/aws/build-knowledge-graph-aws.py ``` **Before Fix**: ``` ❌ UnboundLocalError: cannot access local variable 'time' where it is not associated with a value ``` **After Fix**: ``` ✅ iris-vector-rag imports successful ✅ Configuration loaded ✅ Vector store initialized ✅ Loaded 51 FHIR documents ✅ GraphRAG pipeline initialized → Ingesting 51 documents into knowledge graph... ``` **Result**: ✅ No more `UnboundLocalError` - pipeline progresses to document ingestion --- ## Installation Instructions ### For Development/Testing ```bash cd /Users/tdyar/ws/iris-vector-rag-private pip install -e . ``` ### For Production (Once Released) ```bash pip install iris-vector-rag>=0.5.5 # Assuming fix will be in v0.5.5 ``` --- ## Impact ### Before Fix - ❌ GraphRAG pipeline completely non-functional - ❌ All `GraphRAGPipeline.ingest()` calls failed immediately - ❌ Blocked AWS deployment of knowledge graph - ❌ Blocked multi-modal FHIR search ### After Fix - ✅ GraphRAG pipeline initializes successfully - ✅ Pipeline progresses to document processing - ✅ AWS deployment can proceed - ✅ Knowledge graph extraction enabled --- ## Remaining Work ### Next Steps (Not Related to This Bug) 1. Configure iris-vector-rag to use existing AWS vector tables 2. Set up NVIDIA NIM API key for embeddings 3. Adjust table schema expectations for BYOT mode These are **configuration issues**, not bugs in iris-vector-rag. --- ## Recommendation for iris-vector-rag Team ### Submit Fix to Upstream This fix should be contributed back to the iris-vector-rag project: 1. **File**: `iris_vector_rag/pipelines/graphrag.py` 2. **Change**: Remove line 144 (`import time`) 3. **Reason**: Duplicate import causes scoping issue 4. **Priority**: Critical (P0) - blocks all GraphRAG usage ### Additional Recommendations 1. Add unit test to prevent regression: ```python def test_graphrag_no_unbound_local_error(): """Ensure GraphRAG pipeline doesn't have local variable scoping issues.""" pipeline = GraphRAGPipeline(config_manager=mock_config, vector_store=mock_store) docs = [Document(page_content="test", id="1", metadata={})] # Should not raise UnboundLocalError pipeline.ingest(docs) ``` 2. Add linting rule to detect duplicate imports in functions 3. Code review checklist item: "No local imports that shadow module-level imports" --- ## Acknowledgments - **Discovered**: AWS GraphRAG deployment testing - **Root Cause**: Python scope analysis behavior (PEP 227) - **Fixed**: Removed duplicate import statement - **Verified**: Local development environment The iris-vector-rag framework is excellent overall - this was a simple oversight that slipped through. The fix is trivial and the architecture remains sound. --- ## Related Documents - **Bug Report**: `IRIS_VECTOR_RAG_GRAPHRAG_BUG_REPORT.md` - **AWS Deployment**: `AWS_GRAPHRAG_MIGRATION_SESSION.md` - **Test Results**: See "Verification" section above --- **Status**: ✅ Bug fixed and verified in local development version **Action Required**: Submit fix to upstream iris-vector-rag repository

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