Spaces:
Sleeping
Sleeping
| from flask import Flask, render_template, request, jsonify | |
| import os | |
| from werkzeug.utils import secure_filename | |
| from pydub import AudioSegment | |
| import speech_recognition as sr | |
| import google.generativeai as genai | |
| from google.generativeai.types import HarmCategory, HarmBlockThreshold | |
| # Configure Gemini | |
| genai.configure(api_key=os.environ.get('GEMINI_KEY')) | |
| generation_config = { | |
| "temperature": 1, | |
| "top_p": 0.95, | |
| "top_k": 64, | |
| "max_output_tokens": 8192, | |
| "response_mime_type": "text/plain", | |
| } | |
| model = genai.GenerativeModel( | |
| model_name="gemini-2.5-flash", | |
| generation_config=generation_config, | |
| safety_settings={ | |
| HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_NONE, | |
| HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_NONE, | |
| HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_NONE, | |
| HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_NONE, | |
| }, | |
| system_instruction="Respond like Paris Hilton" | |
| ) | |
| chat_session = model.start_chat(history=[]) | |
| def gemini_response(user_input): | |
| try: | |
| response = chat_session.send_message(user_input) | |
| return response.text.split('-***-')[0].strip() if '-***-' in response.text else response.text.strip() | |
| except Exception as e: | |
| print("Gemini error:", e) | |
| return "Oops! Paris is having a moment. Try again later π " | |
| app = Flask(__name__) | |
| UPLOAD_FOLDER = 'uploads' | |
| app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER | |
| if not os.path.exists(UPLOAD_FOLDER): | |
| os.makedirs(UPLOAD_FOLDER) | |
| def index(): | |
| return render_template('index.html') | |
| def send_message(): | |
| user_input = request.form['user_input'] | |
| response = gemini_response(user_input) | |
| return jsonify({'response': response, 'user_input': user_input}) | |
| def echo_response(user_input): | |
| return user_input | |
| def respond(audio_path): | |
| recognizer = sr.Recognizer() | |
| audio = AudioSegment.from_file(audio_path) | |
| audio.export("temp.wav", format="wav") | |
| with sr.AudioFile("temp.wav") as source: | |
| audio_data = recognizer.record(source) | |
| text = recognizer.recognize_google(audio_data) | |
| os.remove("temp.wav") | |
| print(text) | |
| return text | |
| def upload_file(): | |
| if 'file' not in request.files: | |
| return jsonify({'error': 'No file part'}) | |
| file = request.files['file'] | |
| if file.filename == '': | |
| return jsonify({'error': 'No selected file'}) | |
| filename = secure_filename(file.filename) | |
| file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) | |
| file.save(file_path) | |
| # Process the audio file and get the response text | |
| response_text = respond(file_path) | |
| # Remove the audio file after processing | |
| os.remove(file_path) | |
| return jsonify({'text': response_text}) | |
| if __name__ == '__main__': | |
| app.run(host="0.0.0.0", port=7860) |