Podcastking2 / app.py
gnosticdev's picture
Update app.py
59b69bc verified
raw
history blame
2.49 kB
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()