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()