Troubleshooting Guide
This guide covers common problems you might encounter when using ContextRouter, along with their solutions and debugging techniques.
Configuration Issues
”Configuration file not found”
Symptoms:
FileNotFoundError: settings.toml not found- Application fails to start
Solutions:
-
Check file location:
Terminal window ls -la settings.toml -
Specify custom path:
Terminal window contextrouter --config ./my-settings.toml rag validate -
Create default configuration:
Terminal window contextrouter config sample > settings.toml -
Check permissions:
Terminal window chmod 644 settings.toml
Invalid Configuration
Symptoms:
ValidationErrorduring startup- “Required field missing” errors
Solutions:
-
Validate configuration:
Terminal window contextrouter rag validate --verbose -
Check required fields:
[models]default_llm = "vertex/gemini-2.0-flash" # Requireddefault_embeddings = "vertex/text-embedding-004" # Required -
Fix environment variables:
Terminal window export VERTEX_PROJECT_ID=your-project-idexport VERTEX_LOCATION=us-central1
Provider Connection Issues
Symptoms:
- “Connection failed” errors
- Timeout errors when accessing providers
Solutions:
-
Test provider connectivity:
Terminal window contextrouter rag validate --check-providers -
Check credentials:
Terminal window # Vertex AIexport VERTEX_PROJECT_ID=your-projectexport VERTEX_LOCATION=us-central1# OpenAIexport OPENAI_API_KEY=sk-your-key# PostgreSQLexport POSTGRES_PASSWORD=your-password -
Verify network access:
Terminal window # Test Vertex AIcurl -H "Authorization: Bearer $(gcloud auth print-access-token)" \"https://us-central1-aiplatform.googleapis.com/v1/projects/your-project/locations/us-central1/publishers/google/models"# Test OpenAIcurl -H "Authorization: Bearer $OPENAI_API_KEY" \"https://api.openai.com/v1/models"
Ingestion Problems
Preprocessing Failures
Symptoms:
- “Failed to extract text from PDF”
- Empty or garbled text chunks
Solutions:
-
Check file format:
Terminal window file document.pdf # Should show "PDF document" -
Install OCR for scanned PDFs:
Terminal window pip install pdfplumber pytesseractsudo apt-get install tesseract-ocr # Linux -
Adjust chunking parameters:
[ingestion.rag.preprocess]chunk_size = 800 # Smaller chunkschunk_overlap = 100 # More overlap -
Handle encoding issues:
Terminal window # Detect file encodingfile -bi document.pdf# Convert encoding if needediconv -f latin1 -t utf8 document.pdf > converted.pdf
Structure Stage Issues
Symptoms:
- “LLM failed to generate taxonomy”
- Empty or irrelevant categories
Solutions:
-
Check LLM configuration:
[ingestion.rag.structure.taxonomy]scan_model = "vertex/gemini-2.0-flash" # Ensure valid modelmax_samples = 50 # Reduce if timing out -
Provide custom categories:
[ingestion.rag.structure.taxonomy]categories = ["AI", "Machine Learning", "Data Science"] -
Adjust sampling:
[ingestion.rag.structure.taxonomy]max_samples = 25 # Fewer samples for faster processinghard_cap_samples = 100 # Maximum samples to analyze
Index Stage Problems
Symptoms:
- “Entity extraction failed”
- Knowledge graph is empty or incomplete
Solutions:
-
Check NER model:
[ingestion.rag.index.ner]enabled = truemodel = "vertex/gemini-2.0-flash"confidence_threshold = 0.6 # Lower for more entities -
Enable graph building:
[ingestion.rag.index.graph]enabled = truebuilder_mode = "llm" # or "local" for faster processingcognee_enabled = true -
Adjust entity limits:
[ingestion.rag.index.graph]max_entities_per_chunk = 15 # More entities for richer graphs
Deploy Stage Issues
Symptoms:
- “Upload to provider failed”
- Data not appearing in search results
Solutions:
-
Check provider configuration:
Terminal window contextrouter rag validate --check-providers -
Verify provider permissions:
-- PostgreSQL: Check user permissionsSELECT * FROM information_schema.role_table_grantsWHERE grantee = 'contextrouter_user'; -
Check data format:
Terminal window # Validate JSONL formathead -5 shadow/book.jsonl | jq . -
Monitor deployment progress:
Terminal window contextrouter ingest deploy --verbose --workers 2
RAG Query Issues
No Results Returned
Symptoms:
- Queries return empty results
- “No documents found” messages
Solutions:
-
Check data deployment:
Terminal window # Test basic searchcontextrouter rag query "test" --json -
Verify provider connectivity:
Terminal window contextrouter rag validate --check-providers -
Check index population:
-- PostgreSQL: Check document countSELECT count(*) FROM documents; -
Test with simple queries:
Terminal window # Try different query typescontextrouter rag query "machine learning"contextrouter rag query "artificial intelligence"
Poor Result Quality
Symptoms:
- Irrelevant results
- Missing expected documents
- Low-quality citations
Solutions:
-
Adjust retrieval settings:
[rag]general_retrieval_final_count = 15 # More resultsreranking_enabled = true # Enable rerankinghybrid_fusion = "rrf" # Better fusion -
Check embeddings:
Terminal window # Test embedding generationcontextrouter rag query "test embeddings" --debug -
Review ingestion quality:
Terminal window contextrouter ingest report --type book -
Fine-tune search parameters:
[rag]enable_fts = true # Full-text searchrrff_k = 50 # RRF parameterhybrid_vector_weight = 0.8 # Favor semantic search
Performance Issues
Symptoms:
- Slow query responses
- High latency
Solutions:
-
Optimize retrieval:
[rag]general_retrieval_final_count = 8 # Fewer resultsmax_retrieval_queries = 2 # Fewer query variations -
Use faster models:
[models]default_llm = "groq/llama-3.3-70b" # Faster inference -
Enable caching:
[rag]cache_enabled = truecache_ttl_seconds = 3600 -
Database optimization:
-- PostgreSQL: Add indexesCREATE INDEX CONCURRENTLY idx_documents_embeddingON documents USING ivfflat (embedding vector_cosine_ops)WITH (lists = 100);
Model & API Issues
Model Authentication Errors
Symptoms:
- “Authentication failed” errors
- “Invalid API key” messages
Solutions:
-
Verify API keys:
Terminal window # OpenAIexport OPENAI_API_KEY=sk-your-key-here# Test key validitycurl -H "Authorization: Bearer $OPENAI_API_KEY" \"https://api.openai.com/v1/models" | jq .data[0] -
Check Vertex AI setup:
Terminal window # Authenticate with gcloudgcloud auth logingcloud config set project your-project-id# Test Vertex AI accessgcloud ai models list --region=us-central1 -
Verify permissions:
Terminal window # Check GCP permissionsgcloud projects get-iam-policy your-project-id \--flatten="bindings[].members" \--format="table(bindings.members)"
Model Timeout Errors
Symptoms:
- “Request timeout” errors
- Long response times
Solutions:
-
Increase timeouts:
[models]timeout_sec = 120 # Increase timeout -
Use faster models:
[models]default_llm = "groq/llama-3.3-70b" # Fast inference -
Reduce token limits:
[models]max_output_tokens = 512 # Shorter responses
Rate Limiting
Symptoms:
- “Rate limit exceeded” errors
- Intermittent failures
Solutions:
-
Implement backoff:
from tenacity import retry, stop_after_attempt, wait_exponential@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))async def call_model():return await model.generate(request) -
Use multiple providers:
# Fallback configuration[models.fallback]primary = "vertex/gemini-2.0-flash"secondary = ["openai/gpt-4o-mini", "groq/llama-3.3-70b"] -
Implement caching:
[models]cache_enabled = truecache_ttl_seconds = 3600
Registry & Plugin Issues
Component Not Found
Symptoms:
- “Component not registered” errors
- Import errors for custom components
Solutions:
-
Check registry:
Terminal window contextrouter registry list --type transformers -
Verify imports:
# Ensure module is importedimport my_custom_transformers# Check registrationfrom contextrouter.core.registry import transformer_registryprint(list(transformer_registry.keys())) -
Fix import order:
# Import before using ContextRouterimport my_pluginsfrom contextrouter.core import get_core_config
Plugin Loading Problems
Symptoms:
- Plugins not appearing in registry
- Import errors during startup
Solutions:
-
Check plugin directory:
Terminal window ls -la plugins/# Should contain __init__.py -
Verify plugin structure:
plugins/my_plugin.py from contextrouter.core.registry import register_transformer@register_transformer("my_transformer")class MyTransformer(BaseTransformer):def transform(self, envelope):return envelope -
Check plugin configuration:
[plugins]paths = ["./plugins", "~/my-plugins"]auto_discover = true
Memory & Performance Issues
Memory Leaks
Symptoms:
- Increasing memory usage over time
- Out of memory errors
Solutions:
-
Monitor memory usage:
import psutilimport osprocess = psutil.Process(os.getpid())memory_mb = process.memory_info().rss / 1024 / 1024print(f"Memory usage: {memory_mb:.1f} MB") -
Process in batches:
def process_batch(items, batch_size=100):for i in range(0, len(items), batch_size):batch = items[i:i + batch_size]process_batch_items(batch)# Force garbage collectionimport gcgc.collect() -
Use streaming for large datasets:
async def stream_processing(data_source):async for batch in data_source.batches(batch_size=50):await process_batch(batch)yield batch # Allow async processing
High CPU Usage
Symptoms:
- High CPU utilization
- Slow processing
Solutions:
-
Adjust parallelism:
[ingestion.rag]workers = 2 # Reduce worker count -
Use CPU-efficient settings:
[ingestion.rag.index.graph]builder_mode = "local" # Avoid LLM calls for graph building -
Profile performance:
import cProfileimport pstatsprofiler = cProfile.Profile()profiler.enable()# Run your codeprofiler.disable()stats = pstats.Stats(profiler).sort_stats('cumulative')stats.print_stats(20) # Top 20 functions
Network & Connectivity Issues
DNS Resolution Problems
Symptoms:
- “Name resolution failure” errors
- Intermittent connection issues
Solutions:
-
Check DNS configuration:
Terminal window nslookup api.openai.comnslookup us-central1-aiplatform.googleapis.com -
Use different DNS servers:
Terminal window echo "nameserver 8.8.8.8" > /etc/resolv.confecho "nameserver 1.1.1.1" >> /etc/resolv.conf -
Configure proxy if needed:
Terminal window export HTTP_PROXY=http://proxy.company.com:8080export HTTPS_PROXY=http://proxy.company.com:8080
SSL/TLS Issues
Symptoms:
- “SSL certificate verify failed” errors
- Connection refused errors
Solutions:
-
Update certificates:
Terminal window # Ubuntu/Debiansudo apt-get update && sudo apt-get install ca-certificates# macOSbrew install curl -
Disable SSL verification (temporary):
import sslssl._create_default_https_context = ssl._create_unverified_context -
Check firewall settings:
Terminal window # Test connectivitytelnet api.openai.com 443
Debugging Techniques
Enable Debug Logging
# Maximum verbositycontextrouter --verbose rag chat
# Structured loggingcontextrouter --log-format json --log-file debug.log ingest run --type book
# Filter specific componentscontextrouter --log-level DEBUG --log-filter "contextrouter.modules.models" rag query "test"Inspect Internal State
# Debug configuration loadingfrom contextrouter.core import get_core_configconfig = get_core_config()print(config.model_dump()) # Show full configuration
# Debug registry statefrom contextrouter.core.registry import transformer_registryprint("Registered transformers:", list(transformer_registry.keys()))
# Debug provider connectionsfrom contextrouter.core.registry import select_providertry: provider = select_provider("postgres") print("Provider initialized successfully")except Exception as e: print(f"Provider initialization failed: {e}")Performance Profiling
import timefrom contextlib import contextmanager
@contextmanagerdef time_operation(name): start = time.time() try: yield finally: elapsed = time.time() - start print(f"{name} took {elapsed:.2f} seconds")
# Usagewith time_operation("Ingestion preprocessing"): await preprocess_documents()
with time_operation("Graph building"): await build_knowledge_graph()Interactive Debugging
# Drop into debugger on errorimport pdb
try: result = await process_documents()except Exception as e: print(f"Error: {e}") pdb.post_mortem() # Start debugger at error point
# Or set breakpointdef debug_function(): import pdb; pdb.set_trace() # Breakpoint here result = do_something() return resultGetting Help
Community Support
- GitHub Issues: Report bugs and request features
- GitHub Discussions: Ask questions and share solutions
- Discord: Real-time community support
Diagnostic Information
When reporting issues, include:
# System informationcontextrouter --versionpython --versionpip list | grep contextrouter
# Configuration validationcontextrouter rag validate --verbose
# Registry statuscontextrouter registry list
# Recent logstail -50 ~/.contextrouter/logs/app.logCommon Diagnostic Commands
# Full system health checkcontextrouter rag validate --check-providers --check-models --verbose
# Test ingestion pipelinecontextrouter ingest run --type book --input test.pdf --dry-run
# Test RAG query pipelinecontextrouter rag query "test query" --debug --json
# Check database connectivitycontextrouter registry show postgres --configThis troubleshooting guide should help you resolve most common issues. If you encounter problems not covered here, please check the GitHub repository for the latest information and community solutions.