deepseek_voice / main.py
Gopikanth123's picture
Update main.py
59b3ced verified
import os
from flask import Flask, render_template, request, jsonify, send_file
from transformers import AutoModelForCausalLM, AutoTokenizer
from deep_translator import GoogleTranslator
from gtts import gTTS
import uuid
# Initialize Flask app
app = Flask(__name__)
# Load the DeepSeek-V3 model and tokenizer
model_name = "deepseek-ai/DeepSeek-V3"
revision = "main" # Pin to a specific revision if needed
try:
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True, revision=revision)
model = AutoModelForCausalLM.from_pretrained(
model_name,
trust_remote_code=True,
revision=revision,
quantization_config=None # Disable quantization
)
except Exception as e:
print(f"Error loading model: {e}")
raise
# Supported languages for translation
SUPPORTED_LANGUAGES = {
"english": "en", "hindi": "hi", "bengali": "bn", "telugu": "te", "marathi": "mr",
"tamil": "ta", "gujarati": "gu", "kannada": "kn", "malayalam": "ml", "punjabi": "pa",
"odia": "or", "urdu": "ur", "assamese": "as", "sanskrit": "sa", "arabic": "ar",
"chinese": "zh-CN", "dutch": "nl", "french": "fr", "filipino": "tl", "greek": "el",
"indonesian": "id", "italian": "it", "japanese": "ja", "korean": "ko", "latin": "la",
"nepali": "ne", "portuguese": "pt", "romanian": "ro", "russian": "ru", "spanish": "es",
"swedish": "sv", "thai": "th", "ukrainian": "uk", "turkish": "tr"
}
# Temporary directory for audio files
AUDIO_DIR = "audio"
os.makedirs(AUDIO_DIR, exist_ok=True)
# Handle user queries using DeepSeek-V3
def handle_query(query):
inputs = tokenizer(query, return_tensors="pt")
outputs = model.generate(
inputs.input_ids,
max_length=50,
num_return_sequences=1,
temperature=0.7,
pad_token_id=tokenizer.eos_token_id
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
return response.strip()
# Generate response and translate if needed
def generate_response(query, language):
try:
bot_response = handle_query(query)
target_lang = SUPPORTED_LANGUAGES.get(language.lower(), "en")
if target_lang != "en":
bot_response = GoogleTranslator(source='en', target=target_lang).translate(bot_response)
return bot_response
except Exception as e:
return f"Error fetching the response: {str(e)}"
# Convert text to speech using gTTS
def text_to_speech(text, lang="en"):
try:
audio_filename = f"{uuid.uuid4()}.mp3"
audio_path = os.path.join(AUDIO_DIR, audio_filename)
tts = gTTS(text=text, lang=lang)
tts.save(audio_path)
return audio_path
except Exception as e:
print(f"Error generating speech: {e}")
return None
# Flask routes
@app.route('/')
def index():
return render_template('index.html')
@app.route('/chat', methods=['POST'])
def chat():
try:
data = request.json
user_message = data.get("message")
language = data.get("language", "english").lower()
if not user_message:
return jsonify({"response": "Please say something!", "audio_url": None})
bot_response = generate_response(user_message, language)
target_lang = SUPPORTED_LANGUAGES.get(language, "en")
audio_path = text_to_speech(bot_response, lang=target_lang)
if audio_path:
audio_url = f"/audio/{os.path.basename(audio_path)}"
else:
audio_url = None
return jsonify({"response": bot_response, "audio_url": audio_url})
except Exception as e:
return jsonify({"response": f"An error occurred: {str(e)}", "audio_url": None})
@app.route('/audio/<filename>')
def serve_audio(filename):
return send_file(os.path.join(AUDIO_DIR, filename), mimetype="audio/mp3")
if __name__ == '__main__':
app.run(debug=True)