Spaces:
Running
Running
File size: 5,928 Bytes
a6f165d ae2b075 a6f165d ae2b075 5f51437 ae2b075 a6f165d ae2b075 a6f165d |
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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
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 <todo> y </todo>
- 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:
<todo>
[
{"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"}
]
</todo>
"""
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 <answer> y </answer>
2. Incluye al menos un ejemplo práctico o caso de estudio entre las etiquetas <example> y </example>
3. Si es apropiado, puedes incluir diagramas o representaciones visuales descritas textualmente
EJEMPLO DE ESTRUCTURA:
<answer>
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.
</answer>
<example>
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.
</example>
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() |