# Government Schemes RAG API Documentation (Multilingual) ## Overview FastAPI-based REST API for querying Indian Government Schemes using Retrieval-Augmented Generation (RAG) with **support for 13+ Indian languages**. ## Base URL ``` http://127.0.0.1:8000 ``` ## Key Features - ✅ Multilingual support (13+ Indian languages) - ✅ Automatic translation (Input & Output) - ✅ Text-to-Speech capability (optional) - ✅ RAG-powered intelligent search - ✅ 3400+ government schemes database ## API Endpoints ### 1. Root Endpoint **GET /** Returns API information, version, and supported languages. **Response:** ```json { "message": "Government Schemes RAG API with Multilingual Support", "version": "2.0.0", "supported_languages": { "en": "English", "hi": "Hindi", "te": "Telugu", "ta": "Tamil", "ml": "Malayalam", "kn": "Kannada", "bn": "Bengali", "mr": "Marathi", "gu": "Gujarati", "pa": "Punjabi", "ur": "Urdu", "or": "Odia", "as": "Assamese" }, "endpoints": { "POST /query": "Query government schemes with translation support", "GET /states": "Get list of Indian states", "GET /languages": "Get list of supported languages", "GET /health": "Health check" } } ``` --- ### 2. Health Check **GET /health** Check if the API and RAG system are running properly. **Response:** ```json { "status": "healthy", "rag_system": "initialized" } ``` --- ### 3. Get Supported Languages **GET /languages** Get list of all supported languages for translation. **Response:** ```json { "languages": { "en": "English", "hi": "Hindi", "te": "Telugu", "ta": "Tamil", "ml": "Malayalam", "kn": "Kannada", "bn": "Bengali", "mr": "Marathi", "gu": "Gujarati", "pa": "Punjabi", "ur": "Urdu", "or": "Odia", "as": "Assamese" } } ``` --- ### 4. Get States **GET /states** Get list of all Indian states and union territories. **Response:** ```json { "states": [ "All States", "Andhra Pradesh", "Arunachal Pradesh", ... ] } ``` --- ### 5. Query Schemes (with Multilingual Support) **POST /query** Query government schemes in any supported language. The API automatically translates the input to English, processes it through the RAG system, and returns the answer in the requested language. **Request Body:** ```json { "question": "స్కాలర్షిప్ల గురించి చెప్పండి", // Question in any language "state": "Telangana", // Optional "language": "te" // Language code (default: "en") } ``` **Response:** ```json { "answer": "తెలంగాణలో అందుబాటులో ఉన్న స్కాలర్షిప్ల గురించి...", "sources": [ "Scheme Name: Pre-Matric Scholarship for Backward Class Students...", "Scheme Name: Post-Matric Scholarship Scheme...", "Scheme Name: Merit-cum-Means Scholarship..." ] } ``` **Note:** Audio is NOT automatically generated. Use the `/generate-audio` endpoint when the user clicks the speaker button. **Translation Flow:** ``` User Question (Telugu) → Translate to English → RAG Processing → English Answer → Translate to Telugu → Return to User ``` --- ### 6. Generate Audio (On-Demand) **POST /generate-audio** Generate audio from text. This endpoint should be called ONLY when the user clicks the "Play Audio" or speaker button on the UI. **Request Body:** ```json { "text": "తెలంగాణలో అందుబాటులో ఉన్న స్కాలర్షిప్ల గురించి...", "language": "te" // Language code (default: "en") } ``` **Response:** ```json { "audio": "base64_encoded_mp3_audio_data" } ``` **Usage Flow:** ``` 1. User submits question → Receive answer (fast, no audio) 2. User clicks speaker button → Call /generate-audio → Play audio ``` **Error Response (400 - Empty Text):** ```json { "detail": "Text cannot be empty" } ``` **Error Response (400 - Unsupported Language):** ```json { "detail": "Unsupported language. Supported: ['en', 'hi', 'te', 'ta', ...]" } ``` **Error Response (400 - Empty Question):** ```json { "detail": "Question cannot be empty" } ``` **Error Response (400 - Unsupported Language):** ```json { "detail": "Unsupported language. Supported: ['en', 'hi', 'te', 'ta', ...]" } ``` **Error Response (500):** ```json { "detail": "Error processing query: [error message]" } ``` --- ## Interactive API Documentation FastAPI automatically generates interactive API documentation: - **Swagger UI**: http://127.0.0.1:8000/docs - **ReDoc**: http://127.0.0.1:8000/redoc These interfaces allow you to: - View all endpoints - See request/response schemas - Test API calls directly from the browser - Download OpenAPI specification --- ## Usage Examples ### Using cURL ```bash # Health check curl http://127.0.0.1:8000/health # Get supported languages curl http://127.0.0.1:8000/languages # Get states curl http://127.0.0.1:8000/states # Query in English curl -X POST http://127.0.0.1:8000/query \ -H "Content-Type: application/json" \ -d '{ "question": "What scholarships are available for SC students?", "state": "Karnataka", "language": "en" }' # Query in Hindi curl -X POST http://127.0.0.1:8000/query \ -H "Content-Type: application/json" \ -d '{ "question": "छात्रवृत्ति के बारे में बताएं", "language": "hi" }' # Query in Telugu curl -X POST http://127.0.0.1:8000/query \ -H "Content-Type: application/json" \ -d '{ "question": "స్కాలర్షిప్ల గురించి చెప్పండి", "state": "Telangana", "language": "te" }' # Generate audio (when user clicks speaker button) curl -X POST http://127.0.0.1:8000/generate-audio \ -H "Content-Type: application/json" \ -d '{ "text": "తెలంగాణలో అందుబాటులో ఉన్న స్కాలర్షిప్లు...", "language": "te" }' ``` ### Using Python requests ```python import requests # Query in English response = requests.post( "http://127.0.0.1:8000/query", json={ "question": "My daughter is studying in 9th standard. What schemes are applicable?", "state": "Maharashtra", "language": "en" } ) data = response.json() print(data["answer"]) # Query in Hindi response_hindi = requests.post( "http://127.0.0.1:8000/query", json={ "question": "मुझे छात्रवृत्ति चाहिए", "language": "hi" } ) hindi_data = response_hindi.json() print(hindi_data["answer"]) # Answer will be in Hindi # Generate audio on-demand (when user clicks speaker button) audio_response = requests.post( "http://127.0.0.1:8000/generate-audio", json={ "text": hindi_data["answer"], "language": "hi" } ) audio_data = audio_response.json() # audio_data["audio"] contains base64 encoded MP3 ``` ### Using JavaScript fetch ```javascript // Query in English const response = await fetch('http://127.0.0.1:8000/query', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ question: 'What schemes are available for girl child education?', state: 'All States', language: 'en' }) }); const data = await response.json(); console.log(data.answer); // Query in Telugu const responseTelugu = await fetch('http://127.0.0.1:8000/query', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ question: 'బాలికల విద్య కోసం ఏ పథకాలు ఉన్నాయి?', language: 'te' }) }); const teluguData = await responseTelugu.json(); console.log(teluguData.answer); // Answer in Telugu // Generate audio when user clicks speaker button const playAudio = async (text, language) => { const audioResponse = await fetch('http://127.0.0.1:8000/generate-audio', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ text: text, language: language }) }); const audioData = await audioResponse.json(); const audio = new Audio(`data:audio/mp3;base64,${audioData.audio}`); audio.play(); }; // Usage: Call when user clicks speaker button // playAudio(teluguData.answer, 'te'); ``` ### Using React (Frontend Integration) ```jsx import React, { useState } from 'react'; function SchemeQuery() { const [language, setLanguage] = useState('en'); const [question, setQuestion] = useState(''); const [answer, setAnswer] = useState(''); const [audioLoading, setAudioLoading] = useState(false); const handleSubmit = async (e) => { e.preventDefault(); const response = await fetch('http://127.0.0.1:8000/query', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ question: question, language: language }) }); const data = await response.json(); setAnswer(data.answer); }; // Called only when user clicks speaker button const playAudio = async () => { if (!answer) return; setAudioLoading(true); try { const response = await fetch('http://127.0.0.1:8000/generate-audio', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ text: answer, language: language }) }); const data = await response.json(); const audio = new Audio(`data:audio/mp3;base64,${data.audio}`); audio.play(); } catch (error) { console.error('Audio generation failed:', error); } finally { setAudioLoading(false); } }; return (
{answer}