voice / app.py
AiDeveloper1's picture
Update app.py
3cf6da2 verified
from flask import Flask,render_template,request,jsonify
import google.generativeai as genai
from googletrans import Translator
import asyncio
from dotenv import load_dotenv
import os
app = Flask(__name__)
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
genai.configure(api_key=GEMINI_API_KEY)
def get_response(prompt):
# Use Gemini model (e.g., gemini-1.5-flash)
model = genai.GenerativeModel('gemini-1.5-flash')
response = model.generate_content(prompt)
return response.text
app = Flask(__name__)
LANGUAGE_MAP = {
"English (US)": "en",
"Hindi (India)": "hi",
"Spanish (Spain)": "es",
"French (France)": "fr",
"German (Germany)": "de",
"Arabic (Saudi Arabia)": "ar"
}
@app.route('/')
def index():
return render_template("index.html")
@app.route('/api/process_text', methods=['POST'])
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]
print("Original Text:", original_text)
print("Original Language:", language_name, f"({original_lang_code})")
# Define an async function for translation
async def translate_async(text, dest_lang):
translator = Translator()
translated = await 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 # No translation needed if already English
print("Translated to English:", translated_text)
# Process the text (convert to lowercase)
processed_text = translated_text.lower()
# Get response (assumed to be in English)
response = get_response(processed_text)
print("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 # No translation needed if English
print("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)