Spaces:
Running on Zero
Running on Zero
| # 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: | |
| - .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 | |