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) |