# Module C: RAG-Based Letter Generation This module generates professional, bias-free Nepali government letters by combining **Retrieval-Augmented Generation (RAG)** with **LLM-based adaptation**. Instead of manually selecting templates, users simply describe their need (e.g., "I need a citizenship certificate for my child"), and the system: 1. **Retrieves** the most relevant official template from the vector database. 2. **Generates** a final letter by intelligently filling the template with user details. ## Features - **Intent-Based Retrieval**: Finds the right template even if the user doesn't know the official name. - **Smart Filling**: Extracts details (Name, Date, District) from natural language. - **Modular Design**: Separate Indexer, Retriever, and Generator components. ## Setup 1. **Install Dependencies**: ```bash pip install chromadb sentence-transformers mistralai python-dotenv ``` 2. **Environment Variables**: Create a `.env` file in the project root: ```env MISTRAL_API_KEY=your_api_key_here ``` ## Usage ### 1. Python API ```python from module_c.interface import LetterGenerationAPI api = LetterGenerationAPI() # Describe your need in English or Nepali description = "I need to apply for citizenship for my daughter Sita. I am Ram Sharma from Kathmandu." result = api.generate_smart_letter(description) if result['success']: print(f"Used Template: {result['template_used']}") print(result['letter']) else: print(f"Error: {result['error']}") ``` ### 2. Interactive Flow (Handling Missing Info) ```python # 1. Analyze Requirements analysis = api.analyze_requirements("I need a citizenship certificate") if analysis['success'] and analysis['missing_fields']: print(f"Selected Template: {analysis['template_name']}") print(f"Missing Fields: {analysis['missing_fields']}") # 2. Provide Missing Info additional_data = { "Date": "2081-01-01", "District": "Kathmandu", "Applicant Name": "Ram Sharma" } result = api.generate_smart_letter( "I need a citizenship certificate", additional_data=additional_data ) print(result['letter']) ``` ### 3. Adding New Templates 1. Add your template text file (`.txt`) to `data/module-C/`. 2. Run the indexer to update the vector database: ```bash python module_c/indexer.py ``` ## Project Structure - `interface.py`: Main entry point. - `retriever.py`: Finds relevant templates using Vector DB. - `generator.py`: Uses LLM to fill retrieved templates. - `indexer.py`: Ingests templates into ChromaDB. - `vector_db.py`: Manages ChromaDB connection. - `config.py`: Configuration settings.