# RAG Chatbot Configuration # Profile Information profile: name: "Nguyen Hoang Minh" # Change to your name title: "Middle AI Engineer" greeting: "Hi! I'm ProfillyBot, trained on {name}'s professional background. Ask me anything about their experience, skills, and projects!" # LLM Configuration llm: # Options: ollama, groq, transformers # HF Spaces (ZeroGPU) uses transformers; local defaults to ollama unless GROQ_API_KEY is set provider: "transformers" model: "llama3.2:3b" # For Ollama. Other options: phi3:mini, gemma2:2b groq_model: "openai/gpt-oss-120b" # For Groq. Options: llama-3.3-70b-versatile, llama-3.1-8b-instant, mixtral-8x7b-32768, gemma2-9b-it hf_model: "Qwen/Qwen3.5-4B" # For transformers / ZeroGPU temperature: 0.7 max_tokens: 800 # Increased for better-formatted, complete responses top_p: 0.9 # Disable Qwen3 "thinking" mode for faster profile Q&A responses enable_thinking: false # System prompt template system_prompt: | You are a knowledgeable AI assistant that helps answer questions about {name}, a {title}. You have been trained on their resume, project reports, LinkedIn profile, and professional documents. Your role is to provide accurate information about {name}'s: - Professional experience and work history - Technical skills and expertise - Projects and accomplishments - Education and certifications - Professional background and interests Communication Guidelines: - Be professional, helpful, and balanced in tone - Speak in third person about {name} (e.g., "{name} has experience in...", "His focus is on...") - Present information factually without over-selling - Stay grounded in the available context - Be honest about the limits of your knowledge When Information is Limited: - Be direct but not negative: "Based on the available profile, {name} has..." - Focus on what IS documented rather than what ISN'T - Suggest connecting directly for details: "For more specific details, it would be best to connect with {name} directly" - Avoid repeatedly saying "I don't have information" - instead briefly acknowledge and move forward - Keep responses concise and to the point Important Reminders: - You are an AI assistant, not the person himself - maintain this distinction - Only share information from the provided context - no fabrication - If uncertain, acknowledge it briefly: "The available information suggests..." or "Based on the profile..." - Keep responses realistic and professional (2-3 paragraphs max) - Avoid over-enthusiastic or salesy language CRITICAL FORMATTING REQUIREMENTS: You MUST follow these formatting rules strictly: 1. LISTS - Each item MUST be on its own line: CORRECT: 1. First item here 2. Second item here 3. Third item here WRONG (DO NOT DO THIS): Some text: 1. First item 2. Second item 3. Third item 2. PARAGRAPHS - Always add a blank line between paragraphs 3. EMPHASIS - Use **bold text** for names, roles, and key terms 4. STRUCTURE - Break information into clear sections: - Start with a brief overview paragraph - Use numbered or bulleted lists for multiple items - End with a summary or suggestion if needed 5. LINE BREAKS - Never put multiple sentences or list items on the same line without proper formatting # Embedding Model Configuration embeddings: model_name: "sentence-transformers/all-MiniLM-L6-v2" # Alternative: "sentence-transformers/all-mpnet-base-v2" (better quality, slower) device: "cpu" # Options: cpu, cuda, mps # Vector Database Configuration vectorstore: type: "chroma" collection_name: "profile_documents" persist_directory: "./chroma_db" # Retrieval Strategy Configuration # Extensible system supporting multiple retrieval approaches retrieval: # Primary strategy selection # Options: vector, bm25, bm25_vector # Future: page_index, graph_vector strategy: "bm25_vector" # Final number of documents to return after retrieval/fusion final_k: 4 # Vector search settings (used by: vector, bm25_vector, graph_vector) vector: enabled: true search_type: "similarity" # similarity, mmr k: 10 # Docs to retrieve before fusion (when using hybrid) search_kwargs: fetch_k: 20 # For MMR lambda_mult: 0.5 # For MMR diversity # BM25 lexical search settings (used by: bm25, bm25_vector) bm25: enabled: true k: 10 # Docs to retrieve before fusion persist_path: "./bm25_index" tokenizer: "simple" # Options: simple, nltk (requires nltk package) # Fusion settings (used by: bm25_vector, graph_vector, any multi-source strategy) fusion: algorithm: "rrf" # Options: rrf (reciprocal rank fusion), weighted rrf_k: 60 # RRF constant (higher = less aggressive re-ranking) weights: vector: 0.7 # Weight for vector search results bm25: 0.3 # Weight for BM25 results graph: 0.0 # Reserved for future graph_vector strategy # Page Index settings (future: page_index strategy) # page_index: # enabled: false # model: "vidore/colpali-v1.2" # persist_path: "./page_index" # Graph settings (future: graph_vector strategy) # graph: # enabled: false # store_type: "networkx" # networkx, neo4j # persist_path: "./graph_store" # Document Processing Configuration document_processing: # Chunking strategy # Recommended: 800-1000 chars for professional profiles (structured sections, bullet points) # Smaller chunks (800) = better granularity, more precise retrieval # Larger chunks (1200) = preserve more context per chunk, fewer chunks chunk_size: 1500 # Characters per chunk (optimized for structured profile content) chunk_overlap: 300 # Overlap between chunks (~20% - preserves context at boundaries) # Supported file types supported_extensions: - .pdf - .docx - .doc - .html - .htm - .txt - .md # PDF processing pdf: extract_images: false # HTML processing html: parse_tables: true strip_tags: true # Main Document Configuration main_document: enabled: true # Master switch for the feature path: "data/documents/MY_CV_2_0.pdf" # Path to main document # When false, the main document is also chunked into BM25/Chroma (needed for single-CV setups) exclude_from_index: false max_tokens: 10000 # Maximum tokens allowed (generous limit) position: "before" # Always before VectorDB context (high priority) # Auto-detect format from file extension # Supported: .md, .txt, .pdf, .docx, .html # Summarization settings summarize_if_exceeds: true # Use LLM to summarize if > max_tokens summarization_target_tokens: 8000 # Target size after summarization summarization_prompt: | You are summarizing a professional profile document. Extract and preserve ALL critical information including: - Full name, title, and contact information - Current role and key responsibilities - Core technical skills and expertise areas - Major projects and accomplishments with metrics - Education and certifications - Professional background summary Maintain factual accuracy. Keep all numbers, dates, and specific achievements. Output a concise but comprehensive summary that captures the person's professional identity. # Caching cache_enabled: true # Cache loaded content (reload only on file change) cache_check_interval: 60 # Check file modification time every N seconds # Error handling fail_silently: true # Continue without main doc if loading fails fallback_to_vectordb_only: true # Use only VectorDB if main doc unavailable # RAG Pipeline Configuration rag: # Reranking (optional, set to false if not using) use_reranking: false # Context window max_context_length: 3000 # Characters of context to include # Response settings include_sources: true # Show source documents in response source_max_length: 280 # Max length of source preview show_retrieval_panel: true # Show retrieved chunks / query debug panel in UI enhance_responses: true # Apply post-processing to improve tone and remove negative language # Chat History Configuration chat: # Enable conversation history enable_history: true # Maximum number of previous Q&A pairs to include in context max_history_turns: 10 # Maximum tokens to allocate for chat history (0 = no limit, uses max_history_turns instead) max_history_tokens: 2000 # UI Configuration ui: page_title: "💬 ProfillyBot" page_icon: "🤖" layout: "centered" # Options: centered, wide # Styling theme: primary_color: "#FF4B4B" background_color: "#FFFFFF" secondary_background_color: "#F0F2F6" text_color: "#262730" # Chat settings max_chat_history: 50 show_timestamps: true # Example questions example_questions: - "What is {name}'s background?" - "What are {name}'s key technical skills?" - "Tell me about {name}'s recent projects" - "What is {name}'s educational background?" - "What kind of roles is {name} looking for?" # Logging Configuration logging: level: "INFO" # Options: DEBUG, INFO, WARNING, ERROR format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s" file: "app.log" max_bytes: 10485760 # 10MB backup_count: 3