Spaces:
Running
Running
File size: 2,816 Bytes
b9724da 4beb4cc 48499fe b9724da cd7a57c b920265 e371810 b9724da 48499fe b9724da cd7a57c b9724da 4beb4cc cd7a57c b9724da cd7a57c b9724da cd7a57c b9724da cd7a57c b9724da cd7a57c b9724da cd7a57c b9724da cd7a57c b9724da cd7a57c b9724da 0ffceca b920265 b9724da 0ffceca |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
import requests
import os
import time
import urllib.parse
import random
from polLLM import pre_process
def generate_voice_reply(prompt, model="openai-audio", voice="coral", audio_dir="."):
"""
Generate an audio file (MP3) using the Pollinations text-to-speech API.
The prompt is appended with a system message explaining that this is Eve,
a WhatsApp bot that can generate images from Flux and help users generate images.
To generate an image, the user should send a message like: /imagine {prompt}
Parameters:
prompt (str): The text prompt for audio generation.
model (str): Model identifier (default: openai-audio).
voice (str): Voice parameter (default: coral).
audio_dir (str): Directory where the audio file will be saved.
Returns:
tuple: (audio_file_path (str), audio_data (bytes)) or None if failed.
"""
print("DEBUG: Starting generate_voice_reply")
print(f"DEBUG: Received prompt: {prompt}")
os.makedirs(audio_dir, exist_ok=True)
randomSeed = random.randint(0, 9999999)
# Append system prompt to the user's prompt
system_prompt = pre_process()
full_prompt = f"{prompt}\n\n{system_prompt}"
print(f"DEBUG: Full prompt: {full_prompt}")
encoded_prompt = urllib.parse.quote(full_prompt)
url = f"http://text.pollinations.ai/{encoded_prompt}?model={model}&voice={voice}&seed={randomSeed}"
print(f"DEBUG: Fetching audio with URL: {url}")
try:
response = requests.get(url, timeout=30)
print("DEBUG: Received response")
except Exception as e:
print(f"DEBUG: Error fetching audio: {e}")
return None
print(f"DEBUG: Response status code: {response.status_code}")
if response.status_code != 200:
print(f"DEBUG: Failed to fetch audio. Status code: {response.status_code} | Response text: {response.text}")
return None
audio_data = response.content
timestamp = int(time.time())
file_name = f"voice_reply_{timestamp}.mp3"
audio_file_path = os.path.join(audio_dir, file_name)
print(f"DEBUG: Saving audio to {audio_file_path}")
try:
with open(audio_file_path, "wb") as f:
f.write(audio_data)
print(f"DEBUG: Audio saved to {audio_file_path}")
except Exception as e:
print(f"DEBUG: Error saving audio file: {e}")
return None
return audio_file_path, audio_data
# if __name__ == "__main__":
# # Example usage
# prompt = "Hi. how are you."
# audio_dir = "./audio_replies"
# result = generate_voice_reply(prompt, audio_dir=audio_dir)
# if result:
# audio_file_path, audio_data = result
# print(f"DEBUG: Generated audio file: {audio_file_path}")
# else:
# print("DEBUG: Failed to generate audio file.") |