import gradio as gr from langchain_openai import ChatOpenAI from os import getenv from dotenv import load_dotenv load_dotenv() def generate_response(apikey, model, complexity, tool, user_input): llm = ChatOpenAI( openai_api_key=apikey, openai_api_base=getenv("OPENROUTER_BASE_URL"), model_name=model, ) # Aquí se define el prompt que se le pasará al modelo if tool == "Magic ToDo": tool_prompt = """ crear listas de tareas detalladas y estructuradas. OBJETIVO: Cuando el usuario te proporciona una tarea principal, tu trabajo es desglosarla en subtareas más pequeñas, manejables y específicas, organizadas jerárquicamente. INSTRUCCIONES DE FORMATO: - Devuelve siempre los resultados entre las etiquetas y - Cada tarea debe ser un objeto JSON con la siguiente estructura: { "id": número_entero, // Identificador único para cada tarea "parent_id": número_entero, // ID de la tarea padre (0 para tareas principales) "text": "descripción" // Descripción clara y accionable de la tarea } REGLAS IMPORTANTES: - La tarea principal siempre tendrá id=1 y parent_id=0 - Las subtareas tendrán ids consecutivos (2, 3, 4...) y su parent_id será el id de su tarea padre - Cada tarea debe ser concreta, específica y accionable - Utiliza un lenguaje claro y directo en las descripciones - Incluye entre 5-15 subtareas en total, dependiendo de la complejidad EJEMPLO DE RESPUESTA: [ {"id": 1, "parent_id": 0, "text": "Hacer la compra semanal"}, {"id": 2, "parent_id": 1, "text": "Preparar lista de alimentos necesarios"}, {"id": 3, "parent_id": 1, "text": "Revisar ofertas en supermercados"}, {"id": 4, "parent_id": 1, "text": "Comprar productos frescos"}, {"id": 5, "parent_id": 1, "text": "Comprar productos no perecederos"}, {"id": 6, "parent_id": 1, "text": "Organizar alimentos en casa"} ] """ else: tool_prompt = """ ser un profesor experto en el tema que el usuario te proporcione. OBJETIVO PRINCIPAL: Proporcionar explicaciones claras, precisas y accesibles sobre conceptos académicos o técnicos, adaptando el nivel de complejidad según las necesidades del usuario. CARACTERÍSTICAS CLAVE DE TUS EXPLICACIONES: - Simplicidad: Convierte conceptos complejos en explicaciones fáciles de entender - Precisión: Mantén el rigor académico sin sacrificar la claridad - Profundidad adaptable: Ajusta el nivel de detalle según el contexto - Relevancia: Relaciona los conceptos con situaciones reales o conocimientos previos - Estructura lógica: Organiza la información con una progresión coherente METODOLOGÍA PEDAGÓGICA: - Comienza con definiciones claras de los conceptos fundamentales - Descompón ideas complejas en componentes más simples - Utiliza analogías relevantes para conectar con conocimientos familiares - Ilustra los conceptos con ejemplos concretos y significativos - Anticipa y aborda posibles puntos de confusión - Concluye con un resumen que refuerce los puntos clave FORMATO DE RESPUESTA: 1. Proporciona tu explicación principal entre las etiquetas y 2. Incluye al menos un ejemplo práctico o caso de estudio entre las etiquetas y 3. Si es apropiado, puedes incluir diagramas o representaciones visuales descritas textualmente EJEMPLO DE ESTRUCTURA: Aquí va una explicación clara y estructurada del tema solicitado, comenzando con conceptos básicos y progresando hacia aspectos más complejos. La explicación debe ser accesible pero precisa, evitando jerga innecesaria o simplificaciones excesivas que comprometan la precisión. Aquí va un ejemplo concreto, caso de estudio o ejercicio resuelto que ilustre la aplicación práctica del concepto explicado. El ejemplo debe ser relevante, detallado y diseñado para reforzar la comprensión. SOLO RESPONDE CON LA ESTRUCTURA """ complexity_prompt = f""" IMPORTANTE, DEBES DE TENER EN CUENTA LA COMPLEJIDAD: La complejidad marca el nivel de detalle y sofisticación de la respuesta que se espera. En este caso, has seleccionado un nivel de complejidad de {complexity} sobre 5. cuanto mayor sea el nivel de complejidad, más detallada y sofisticada será la respuesta. """ # Por esto: final_prompt = f""" Eres un asistente experto en lo siguiente: {tool_prompt}, {complexity_prompt} A continuación, este es el texto que el usuario te proporcionó: {user_input} """ messages = [] user_message = {"role": "user", "content": final_prompt} messages.append(user_message) response = llm.invoke(messages).content print(response) return response interface = gr.Interface( fn=generate_response, title="Simple tools", inputs=[ gr.Textbox(lines=1, label="OpenRouter API Key", placeholder="Enter your API Key here...", info="Enter your API Key [Get your OpenRouter API Key here](https://openrouter.ai/)", type="password"), gr.Dropdown( ["google/gemma-3-27b-it:free", "google/gemini-2.0-flash-001", "anthropic/claude-3.5-sonnet", "anthropic/claude-3.7-sonnet", "openai/gpt-4o-mini"], info="Choose the model you want to use", label="Model", ), gr.Slider(1, 5, value=3, label="Level of llm complexity response", info="Choose level of complex", step=1), gr.Radio(["Magic ToDo", "Professor"], label="Tool" , info="Select the tool you want to use", value="Magic ToDo"), gr.Textbox(lines=5, label="Input", placeholder="Enter your text here...", info="Enter the text you want to process"), ], outputs="text", ) if __name__ == "__main__": interface.launch()