DocChat_n_Talk / openai_tts_tool.py
capradeepgujaran's picture
Update openai_tts_tool.py
3be3378 verified
raw
history blame
2.19 kB
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 the audio file path and the summary text
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