Spaces:
Running
Running
import gradio as gr | |
import os | |
import asyncio | |
from conver import ConversationConfig, URLToAudioConverter | |
from dotenv import load_dotenv | |
load_dotenv() | |
async def synthesize(article_url, text_input, language="en"): | |
if not article_url and not text_input: | |
return "Error: Ingresa una URL o texto", None | |
try: | |
config = ConversationConfig() | |
converter = URLToAudioConverter(config, llm_api_key=os.environ.get("TOGETHER_API_KEY")) | |
# Voces humanizadas | |
voices = { | |
"en": ("en-US-AvaMultilingualNeural", "en-US-AndrewMultilingualNeural"), | |
"es": ("es-ES-AlvaroNeural", "es-ES-ElviraNeural") | |
} | |
voice1, voice2 = voices.get(language, voices["en"]) | |
if text_input: | |
output_file, conversation = await converter.text_to_audio(text_input, voice1, voice2) | |
else: | |
output_file, conversation = await converter.url_to_audio(article_url, voice1, voice2) | |
return conversation, output_file | |
except Exception as e: | |
return f"Error: {str(e)}", None | |
async def synthesize(article_url, text_input, language="en", skip_llm=False): | |
if not article_url and not text_input: | |
return "Error: Ingresa una URL o texto", None | |
try: | |
config = ConversationConfig() | |
converter = URLToAudioConverter(config, llm_api_key=os.environ.get("TOGETHER_API_KEY")) | |
voices = { | |
"en": ("en-US-AvaMultilingualNeural", "en-US-AndrewMultilingualNeural"), | |
"es": ("es-ES-AlvaroNeural", "es-ES-ElviraNeural") | |
} | |
voice1, voice2 = voices.get(language, voices["en"]) | |
# Modo sin LLM (texto exacto) | |
if skip_llm and text_input: | |
return await converter.raw_text_to_audio(text_input, voice1, voice2) | |
# Procesamiento normal (con LLM) | |
if text_input: | |
output_file, conversation = await converter.text_to_audio(text_input, voice1, voice2) | |
else: | |
output_file, conversation = await converter.url_to_audio(article_url, voice1, voice2) | |
return conversation, output_file | |
except Exception as e: | |
return f"Error: {str(e)}", None | |
# Añade esto en tu interfaz (dentro de with gr.Blocks()): | |
skip_llm = gr.Checkbox(label="🔴 Modo libre (sin filtros LLM)", value=False) | |
btn.click( | |
synthesize_sync, | |
inputs=[text_url, text_input, language, skip_llm], | |
outputs=[conv_display, aud] | |
) | |
demo.launch() |