Spaces:
Sleeping
Sleeping
| from flask import Flask, render_template, request, jsonify | |
| from googletrans import Translator | |
| import io | |
| import asyncio | |
| from dotenv import load_dotenv | |
| import os | |
| import logging | |
| from chatbot import process_uploaded_file, index_documents, rag_chatbot | |
| # Set up logging | |
| logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') | |
| logger = logging.getLogger(__name__) | |
| # Load environment variables | |
| load_dotenv() | |
| app = Flask(__name__) | |
| LANGUAGE_MAP = { | |
| "English (US)": "en", | |
| "Hindi (India)": "hi", | |
| "Spanish (Spain)": "es", | |
| "French (France)": "fr", | |
| "German (Germany)": "de", | |
| "Arabic (Saudi Arabia)": "ar" | |
| } | |
| def index(): | |
| return render_template("index.html") | |
| def upload_document(): | |
| try: | |
| if 'file' not in request.files: | |
| return jsonify({"error": "No file uploaded"}), 400 | |
| file = request.files['file'] | |
| if file.filename == '': | |
| return jsonify({"error": "No file selected"}), 400 | |
| # Process file without saving locally | |
| file_stream = io.BytesIO(file.read()) | |
| documents = process_uploaded_file(file_stream, file.filename) | |
| # Index documents in Pinecone | |
| vector_store = index_documents(documents) | |
| return jsonify({"message": f"Successfully processed and indexed {len(documents)} chunks from {file.filename}"}) | |
| except Exception as e: | |
| logger.error(f"Error in upload_document: {str(e)}") | |
| return jsonify({"error": str(e)}), 500 | |
| def process_text(): | |
| # Get JSON payload | |
| data = request.get_json() | |
| try: | |
| original_text = data['text'] | |
| language_name = data['language'] | |
| except (KeyError, TypeError): | |
| return jsonify({"error": "Missing 'text' or 'language' in JSON payload"}), 400 | |
| # Map language name to language code | |
| if language_name not in LANGUAGE_MAP: | |
| return jsonify({"error": f"Unsupported language: {language_name}"}), 400 | |
| original_lang_code = LANGUAGE_MAP[language_name] | |
| logger.info(f"Original Text: {original_text}") | |
| logger.info(f"Original Language: {language_name} ({original_lang_code})") | |
| # Define an async function for translation | |
| def translate_async(text, dest_lang): | |
| translator = Translator() | |
| translated = translator.translate(text, dest=dest_lang) | |
| return translated.text | |
| # Translate to English | |
| if original_lang_code != "en": | |
| translated_text = asyncio.run(translate_async(original_text, dest_lang="en")) | |
| else: | |
| translated_text = original_text | |
| logger.info(f"Translated to English: {translated_text}") | |
| # Process with RAG | |
| response = rag_chatbot(translated_text) | |
| logger.info(f"English Response: {response}") | |
| # Translate response back to original language | |
| if original_lang_code != "en": | |
| final_response = asyncio.run(translate_async(response, dest_lang=original_lang_code)) | |
| else: | |
| final_response = response | |
| logger.info(f"Final Response (in original language): {final_response}") | |
| # Return the final response | |
| return jsonify({"response": final_response, "language": language_name}) | |
| if __name__ == '__main__': | |
| app.run(host='0.0.0.0', port=7860) |