Spaces:
Running on Zero
Running on Zero
| # Main Document Feature Guide | |
| ## Overview | |
| The Main Document feature provides guaranteed context availability for your RAG chatbot by ensuring critical profile information is always included in the LLM prompt, positioned before VectorDB retrieval results. | |
| ## How It Works | |
| ### 1. Architecture | |
| ``` | |
| Query → [Main Document] → [VectorDB Retrieval] → [Combined Context] → LLM → Response | |
| ↑ PRIORITY ↑ SUPPLEMENTARY | |
| ``` | |
| ### 2. Loading Process | |
| 1. **File Detection**: Auto-detects format from extension | |
| 2. **Content Loading**: Uses appropriate loader (PDF, DOCX, HTML, MD, TXT) | |
| 3. **Token Counting**: Calculates tokens using tiktoken | |
| 4. **Size Management**: | |
| - If ≤ 10k tokens → Use as-is | |
| - If > 10k tokens → LLM summarization to ~8k tokens | |
| 5. **Caching**: Stores in memory, reloads only on file change | |
| ### 3. Prompt Structure | |
| ``` | |
| [System Prompt] | |
| === ESSENTIAL PROFILE INFORMATION === | |
| (This information is always available and takes priority) | |
| [Main Document Content - 10k tokens max] | |
| === ADDITIONAL CONTEXT FROM DOCUMENTS === | |
| [VectorDB Retrieved Chunks] | |
| Question: [User Question] | |
| Answer: | |
| ``` | |
| ## Configuration | |
| ### Basic Setup | |
| ```yaml | |
| main_document: | |
| enabled: true | |
| path: "data/documents/main_profile.md" | |
| max_tokens: 10000 | |
| ``` | |
| ### Advanced Options | |
| ```yaml | |
| main_document: | |
| enabled: true | |
| path: "data/documents/main_profile.md" | |
| max_tokens: 10000 | |
| position: "before" # before/after VectorDB context | |
| # Summarization | |
| summarize_if_exceeds: true | |
| summarization_target_tokens: 8000 | |
| summarization_prompt: | | |
| Custom summarization instructions... | |
| # Caching | |
| cache_enabled: true | |
| cache_check_interval: 60 # seconds | |
| # Error handling | |
| fail_silently: true | |
| fallback_to_vectordb_only: true | |
| ``` | |
| ## Best Practices | |
| ### Content Structure | |
| **DO Include:** | |
| - ✅ Full name and professional title | |
| - ✅ Contact information (email, LinkedIn, etc.) | |
| - ✅ Current role and responsibilities | |
| - ✅ Core technical skills (with proficiency levels) | |
| - ✅ Major projects with metrics/achievements | |
| - ✅ Education and certifications | |
| - ✅ Career summary/objective | |
| **DON'T Include:** | |
| - ❌ Sensitive personal information | |
| - ❌ Redundant lengthy descriptions | |
| - ❌ Information better suited for retrieval (blog posts, detailed docs) | |
| - ❌ Frequently changing information | |
| ### Format Recommendations | |
| | Format | Best For | Notes | | |
| |--------|----------|-------| | |
| | **Markdown** (.md) | Structured profiles | Readable, easy to edit, recommended | | |
| | **Text** (.txt) | Simple profiles | Plain text, fastest to load | | |
| | **PDF** (.pdf) | Existing resumes | Auto-parsed, may need cleanup | | |
| | **Word** (.docx) | Existing documents | Good formatting preservation | | |
| | **HTML** (.html) | LinkedIn exports | Auto-parsed, clean content | | |
| ### Token Management | |
| **Token Budget Example** (llama3.2:3b with 8192 context window): | |
| | Component | Tokens | Percentage | | |
| |-----------|--------|------------| | |
| | Main Document | 7,000 | 85% | | |
| | VectorDB Context | 500 | 6% | | |
| | Output Generation | 512 | 6% | | |
| | Safety Buffer | 180 | 3% | | |
| | **Total** | **8,192** | **100%** | | |
| **Optimization Tips:** | |
| 1. Keep main doc under 7,000 tokens for optimal retrieval space | |
| 2. Use bullet points instead of verbose paragraphs | |
| 3. Remove redundant information | |
| 4. Let LLM summarize if necessary | |
| ## Troubleshooting | |
| ### Issue: Main document not loading | |
| **Check:** | |
| ```bash | |
| # Verify file exists | |
| ls -lh data/documents/main_profile.md | |
| # Check logs | |
| tail -f app.log | grep "main_document" | |
| ``` | |
| **Solution:** | |
| - Verify `path` in config.yaml is correct | |
| - Check file permissions | |
| - Ensure format is supported | |
| ### Issue: Content truncated/summarized unexpectedly | |
| **Diagnosis:** | |
| - Check token count in logs: "Main document loaded: X tokens" | |
| - If X > 10,000, content will be summarized | |
| **Solution:** | |
| - Reduce content length | |
| - Increase `max_tokens` in config | |
| - Disable summarization: `summarize_if_exceeds: false` | |
| ### Issue: Responses don't seem to use main document | |
| **Check:** | |
| ```python | |
| # In Python console: | |
| from src.rag_pipeline import get_rag_pipeline | |
| pipeline = get_rag_pipeline() | |
| info = pipeline.get_main_document_info() | |
| print(info) | |
| ``` | |
| **Verify:** | |
| - `enabled: true` in info | |
| - `loaded: true` in info | |
| - `tokens > 0` in info | |
| ## API Reference | |
| ### MainDocumentLoader Class | |
| ```python | |
| from src.main_document_loader import get_main_document_loader | |
| loader = get_main_document_loader() | |
| # Load document | |
| content = loader.load_main_document() | |
| # Count tokens | |
| tokens = loader.count_tokens("your text here") | |
| # Truncate to token limit | |
| truncated = loader.truncate_to_tokens(content, max_tokens=5000) | |
| # Invalidate cache (force reload) | |
| loader.invalidate_cache() | |
| ``` | |
| ### RAGPipeline Methods | |
| ```python | |
| from src.rag_pipeline import get_rag_pipeline | |
| pipeline = get_rag_pipeline() | |
| # Get main document info | |
| info = pipeline.get_main_document_info() | |
| # Returns: {'enabled': bool, 'loaded': bool, 'tokens': int, 'path': str, ...} | |
| # Reload main document at runtime | |
| success = pipeline.reload_main_document() | |
| # Get token budget breakdown | |
| budget = pipeline._calculate_context_budget() | |
| ``` | |
| ## Examples | |
| ### Example 1: Markdown Main Profile | |
| ```markdown | |
| # Jane Doe | |
| **Title**: Senior Data Scientist | ML Engineer | |
| **Email**: jane.doe@example.com | |
| **LinkedIn**: linkedin.com/in/janedoe | |
| **Location**: San Francisco, CA | |
| ## Professional Summary | |
| Data Scientist with 8+ years building production ML systems. Specialized in NLP, recommendation systems, and MLOps. | |
| ## Core Skills | |
| - **Languages**: Python, SQL, R | |
| - **ML/DL**: PyTorch, TensorFlow, scikit-learn, Hugging Face | |
| - **MLOps**: Docker, Kubernetes, MLflow, AWS SageMaker | |
| - **Data**: Spark, Airflow, PostgreSQL, Redis | |
| ## Experience | |
| ### Tech Corp - Senior Data Scientist (2020-Present) | |
| - Built recommendation engine serving 5M+ users, improving CTR by 23% | |
| - Deployed 12 ML models to production using CI/CD pipelines | |
| - Led team of 4 data scientists on personalization initiatives | |
| ### StartupXYZ - Data Scientist (2017-2020) | |
| - Developed NLP pipeline for customer support automation (85% accuracy) | |
| - Reduced model training costs by 40% through infrastructure optimization | |
| ## Education | |
| - **M.S. Computer Science**, Stanford University (2017) | |
| - **B.S. Mathematics**, UC Berkeley (2015) | |
| ## Certifications | |
| - AWS Certified Machine Learning - Specialty | |
| - Google Professional Data Engineer | |
| ``` | |
| ### Example 2: Minimal Text Profile | |
| ```text | |
| John Smith - AI Research Engineer | |
| Email: john.smith@email.com | |
| GitHub: github.com/johnsmith | |
| 5+ years in deep learning and computer vision. | |
| Key Skills: PyTorch, TensorFlow, OpenCV, CUDA, Python, C++ | |
| Notable Projects: | |
| - Real-time object detection system (45 FPS, 92% mAP) | |
| - Federated learning framework for healthcare ML | |
| - Open-source contributor: torchvision, detectron2 | |
| Education: Ph.D. Computer Science, MIT (2019) | |
| ``` | |
| ## Migration Guide | |
| ### From VectorDB-Only to Main Document | |
| **Before:** | |
| - All content in `data/documents/` processed equally | |
| - Retrieval quality determines context | |
| **After:** | |
| 1. **Identify critical information** that must always be available | |
| 2. **Create main document** with this essential content | |
| 3. **Enable feature** in config.yaml | |
| 4. **Keep other documents** in `data/documents/` for supplementary info | |
| 5. **Test queries** to verify main document is used | |
| **You don't need to remove existing documents** - main document supplements, not replaces, VectorDB retrieval! | |
| ## Advanced: Token Budget Calculation | |
| The system automatically calculates and manages token budgets: | |
| ```python | |
| budget = { | |
| "model_context_window": 8192, # Total available | |
| "main_doc_tokens": 7000, # Main document | |
| "max_output_tokens": 512, # LLM generation | |
| "buffer_tokens": 500, # Safety buffer | |
| "available_for_retrieval": 180, # Remaining for VectorDB | |
| "total_input_budget": 7680, # Total input space | |
| } | |
| ``` | |
| **Warnings:** | |
| - If main doc > 50% of context window, system logs warning | |
| - Adjust `max_tokens` or enable summarization to optimize | |
| ## Performance Considerations | |
| ### Memory Usage | |
| - **Cached content**: ~1-5 MB per main document | |
| - **Token counting**: Negligible (< 10ms) | |
| - **Summarization**: 2-10 seconds (only if needed) | |
| ### Loading Times | |
| - **First load**: 50-200ms (depends on format) | |
| - **Cached loads**: < 1ms | |
| - **Cache validation**: < 5ms (file hash check) | |
| ### Recommendations | |
| - Enable caching for production (default: true) | |
| - Set `cache_check_interval` to 300+ for rarely changing docs | |
| - Use markdown or text for fastest loading | |
| --- | |
| **For more help, see [ARCHITECTURE.md](../ARCHITECTURE.md) or [README.md](../README.md).** | |