Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -7,10 +7,10 @@
|
|
7 |
import os
|
8 |
import gradio as gr
|
9 |
import openai
|
10 |
-
from elevenlabs import generate, set_api_key
|
11 |
import tempfile
|
12 |
import logging
|
13 |
from dotenv import load_dotenv
|
|
|
14 |
|
15 |
# Load environment variables from .env file
|
16 |
load_dotenv()
|
@@ -33,9 +33,36 @@ if not eleven_labs_api_key:
|
|
33 |
else:
|
34 |
logger.info("Eleven Labs API key is set.")
|
35 |
|
36 |
-
# Set the API
|
37 |
openai.api_key = openai_api_key
|
38 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
|
40 |
def process_audio(audio_file, target_language):
|
41 |
try:
|
@@ -51,8 +78,14 @@ def process_audio(audio_file, target_language):
|
|
51 |
try:
|
52 |
# Translate text using OpenAI's ChatGPT API
|
53 |
messages = [
|
54 |
-
{
|
55 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
56 |
]
|
57 |
|
58 |
response = openai.ChatCompletion.create(
|
@@ -67,24 +100,33 @@ def process_audio(audio_file, target_language):
|
|
67 |
return "Error in generating translation.", None
|
68 |
|
69 |
try:
|
70 |
-
# Convert translated text to speech using Eleven Labs
|
71 |
-
|
72 |
-
text=response_text,
|
73 |
-
voice="Rachel", # You can choose different voices available in Eleven Labs
|
74 |
-
model='eleven_multilingual_v1' # Use the multilingual model
|
75 |
-
)
|
76 |
-
|
77 |
-
# Save the audio to a temporary file
|
78 |
-
temp_audio_file = tempfile.NamedTemporaryFile(delete=False, suffix='.mp3')
|
79 |
-
with open(temp_audio_file.name, 'wb') as f:
|
80 |
-
f.write(audio)
|
81 |
-
|
82 |
logger.info("Text-to-speech conversion successful.")
|
83 |
except Exception as e:
|
84 |
logger.error(f"Error in text-to-speech conversion: {e}")
|
85 |
return "Error in text-to-speech conversion.", None
|
86 |
|
87 |
-
return response_text,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
|
89 |
# Create Gradio interface
|
90 |
iface = gr.Interface(
|
@@ -112,4 +154,3 @@ try:
|
|
112 |
except Exception as e:
|
113 |
logger.error(f"Failed to launch Gradio interface: {e}")
|
114 |
raise
|
115 |
-
|
|
|
7 |
import os
|
8 |
import gradio as gr
|
9 |
import openai
|
|
|
10 |
import tempfile
|
11 |
import logging
|
12 |
from dotenv import load_dotenv
|
13 |
+
import requests
|
14 |
|
15 |
# Load environment variables from .env file
|
16 |
load_dotenv()
|
|
|
33 |
else:
|
34 |
logger.info("Eleven Labs API key is set.")
|
35 |
|
36 |
+
# Set the API key for OpenAI
|
37 |
openai.api_key = openai_api_key
|
38 |
+
|
39 |
+
def text_to_speech_elevenlabs(text, voice="Rachel"):
|
40 |
+
url = f"https://api.elevenlabs.io/v1/text-to-speech/{voice}"
|
41 |
+
|
42 |
+
headers = {
|
43 |
+
"Accept": "audio/mpeg",
|
44 |
+
"Content-Type": "application/json",
|
45 |
+
"xi-api-key": eleven_labs_api_key
|
46 |
+
}
|
47 |
+
|
48 |
+
data = {
|
49 |
+
"text": text,
|
50 |
+
"model_id": "eleven_multilingual_v1",
|
51 |
+
"voice_settings": {
|
52 |
+
"stability": 0.5,
|
53 |
+
"similarity_boost": 0.75
|
54 |
+
}
|
55 |
+
}
|
56 |
+
|
57 |
+
response = requests.post(url, json=data, headers=headers)
|
58 |
+
response.raise_for_status()
|
59 |
+
|
60 |
+
# Save the audio content
|
61 |
+
temp_audio_file = tempfile.NamedTemporaryFile(delete=False, suffix='.mp3')
|
62 |
+
with open(temp_audio_file.name, 'wb') as f:
|
63 |
+
f.write(response.content)
|
64 |
+
|
65 |
+
return temp_audio_file.name
|
66 |
|
67 |
def process_audio(audio_file, target_language):
|
68 |
try:
|
|
|
78 |
try:
|
79 |
# Translate text using OpenAI's ChatGPT API
|
80 |
messages = [
|
81 |
+
{
|
82 |
+
"role": "system",
|
83 |
+
"content": f"You are a helpful assistant that translates English to {target_language}."
|
84 |
+
},
|
85 |
+
{
|
86 |
+
"role": "user",
|
87 |
+
"content": f"Please translate the following text to {target_language}: {user_text}"
|
88 |
+
}
|
89 |
]
|
90 |
|
91 |
response = openai.ChatCompletion.create(
|
|
|
100 |
return "Error in generating translation.", None
|
101 |
|
102 |
try:
|
103 |
+
# Convert translated text to speech using Eleven Labs API directly
|
104 |
+
temp_audio_file_name = text_to_speech_elevenlabs(response_text)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
logger.info("Text-to-speech conversion successful.")
|
106 |
except Exception as e:
|
107 |
logger.error(f"Error in text-to-speech conversion: {e}")
|
108 |
return "Error in text-to-speech conversion.", None
|
109 |
|
110 |
+
return response_text, temp_audio_file_name
|
111 |
+
|
112 |
+
# Optional: Function to list available voices
|
113 |
+
def list_available_voices():
|
114 |
+
url = "https://api.elevenlabs.io/v1/voices"
|
115 |
+
|
116 |
+
headers = {
|
117 |
+
"Accept": "application/json",
|
118 |
+
"xi-api-key": eleven_labs_api_key
|
119 |
+
}
|
120 |
+
|
121 |
+
response = requests.get(url, headers=headers)
|
122 |
+
response.raise_for_status()
|
123 |
+
voices = response.json()
|
124 |
+
print("Available voices:")
|
125 |
+
for voice in voices['voices']:
|
126 |
+
print(f"Name: {voice['name']}, Voice ID: {voice['voice_id']}")
|
127 |
+
|
128 |
+
# Uncomment the following line to list available voices
|
129 |
+
# list_available_voices()
|
130 |
|
131 |
# Create Gradio interface
|
132 |
iface = gr.Interface(
|
|
|
154 |
except Exception as e:
|
155 |
logger.error(f"Failed to launch Gradio interface: {e}")
|
156 |
raise
|
|