Spaces:
Sleeping
Sleeping
from openai import OpenAI | |
import tempfile | |
import os | |
def generate_audio_and_text(api_key, input_text, model_name, voice_type, voice_speed, language, output_option, summary_length, additional_prompt): | |
if not input_text: | |
return None, "No input text provided" | |
try: | |
client = OpenAI(api_key=api_key) | |
# Generate summary if requested | |
summary_text = None | |
if output_option in ["summary_text", "both"]: | |
summary_prompt = f"Summarize the following text in approximately {summary_length} words. {additional_prompt or ''}\n\nText: {input_text}" | |
summary_response = client.chat.completions.create( | |
model=model_name, | |
messages=[{"role": "user", "content": summary_prompt}] | |
) | |
summary_text = summary_response.choices[0].message.content | |
# Generate audio if requested | |
audio_file = None | |
if output_option in ["audio", "both"]: | |
speech_response = client.audio.speech.create( | |
model="tts-1", # or "tts-1-hd" for higher quality | |
voice=voice_type, | |
input=input_text, | |
speed=float(voice_speed) | |
) | |
# Create temp directory if it doesn't exist | |
temp_dir = os.path.join(os.getcwd(), 'temp') | |
if not os.path.exists(temp_dir): | |
os.makedirs(temp_dir) | |
# Save the audio to a temporary file | |
audio_path = os.path.join(temp_dir, f"output_{hash(input_text)}.mp3") | |
with open(audio_path, "wb") as f: | |
for chunk in speech_response.iter_bytes(): | |
f.write(chunk) | |
audio_file = audio_path | |
# Return based on output option | |
if output_option == "summary_text": | |
return None, summary_text | |
elif output_option == "audio": | |
return audio_file, None | |
elif output_option == "both": | |
return audio_file, summary_text | |
except Exception as e: | |
return None, f"Error: {str(e)}" | |
return None, None |