biter-zephyr / app.py
askbyte's picture
Update app.py
9ac84ea verified
raw
history blame
5.39 kB
import gradio as gr
import requests
import json
import os
# Función para generar respuestas usando DeepInfra
def generate_response(user_message):
try:
if not user_message.strip():
return "Por favor, escribe una pregunta para que pueda ayudarte."
# Respuestas predefinidas para preguntas simples
user_message_lower = user_message.lower().strip()
# Mapa de respuestas cortas para preguntas comunes
respuestas_cortas = {
"hola": "¡Hola! ¿En qué puedo ayudarte hoy?",
"buenos días": "¡Buenos días! ¿En qué puedo ayudarte?",
"buenas": "¡Buenas! ¿En qué puedo ayudarte?",
"saludos": "¡Saludos! ¿En qué puedo ayudarte?",
"hey": "¡Hey! ¿En qué puedo ayudarte?",
"qué tal": "Muy bien, ¿y tú? ¿En qué puedo ayudarte hoy?",
"como estas": "Estoy listo para ayudarte con tu negocio. ¿Qué necesitas?",
"cómo estás": "Estoy listo para ayudarte con tu negocio. ¿Qué necesitas?",
"que es byte": "Byte es un proyecto para emprendedores que ofrece herramientas de IA, desarrollo web y servicios de contenido. ¿En qué puedo ayudarte?",
"qué es byte": "Byte es un proyecto para emprendedores que ofrece herramientas de IA, desarrollo web y servicios de contenido. ¿En qué puedo ayudarte?"
}
# Verificar si es una pregunta simple
for pregunta, respuesta in respuestas_cortas.items():
if pregunta in user_message_lower or user_message_lower in pregunta:
return respuesta
# Contexto sobre Byte (versión corta)
byte_context = "Byte es un proyecto para emprendedores con herramientas de IA, desarrollo web y servicios de contenido. BITER es el asistente de IA de Byte."
# Cargar el prompt del sistema
with open("prompt.txt", "r", encoding="utf-8") as f:
system_prompt = f.read().strip()
# Combinar el contexto de Byte con el prompt original
system_prompt = byte_context + "\n\n" + system_prompt
# Instrucciones muy estrictas sobre brevedad
system_prompt += """
INSTRUCCIONES DE FORMATO CRÍTICAS:
1. Sé EXTREMADAMENTE conciso. Máximo 1-2 párrafos cortos.
2. Para preguntas simples o saludos, responde en una sola línea.
3. Solo para preguntas técnicas complejas puedes usar hasta 3 párrafos.
4. NUNCA uses listas largas ni explicaciones extensas.
5. Habla como un CEO ocupado: directo, práctico y sin rodeos.
6. Adapta la longitud de tu respuesta a la complejidad de la pregunta.
"""
# Configurar la solicitud a DeepInfra
api_key = os.environ.get("DEEPINFRA_API_KEY", "")
if not api_key:
return "Error: No se ha configurado la clave API."
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
# Formato de prompt para modelos de chat
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_message}
]
# Usar un modelo que sí está disponible en DeepInfra
data = {
"model": "meta-llama/Llama-2-7b-chat-hf",
"messages": messages,
"max_tokens": 200, # Reducido aún más para forzar respuestas cortas
"temperature": 0.7,
"top_p": 0.9
}
# Enviar solicitud a la API
response = requests.post(
"https://api.deepinfra.com/v1/openai/chat/completions",
headers=headers,
json=data
)
# Procesar la respuesta
if response.status_code == 200:
result = response.json()
return result["choices"][0]["message"]["content"]
else:
# Intentar con otro modelo si el primero falla
data["model"] = "mistralai/Mistral-7B-Instruct-v0.2"
response = requests.post(
"https://api.deepinfra.com/v1/openai/chat/completions",
headers=headers,
json=data
)
if response.status_code == 200:
result = response.json()
return result["choices"][0]["message"]["content"]
else:
return f"Error en la API: {response.status_code} - {response.text}"
except Exception as e:
return f"Lo siento, ha ocurrido un error: {str(e)}"
# Crear la interfaz de Gradio
demo = gr.Interface(
fn=generate_response,
inputs=gr.Textbox(
placeholder="Escribe tu pregunta sobre emprendimiento aquí...",
label="Tu pregunta"
),
outputs=gr.Textbox(label="Respuesta de BITER"),
title="BITER - Tu Mentor en Tiempo Real para Decisiones de Negocio",
description="BITER es un asistente de IA que responde dudas de emprendedores como si fuera un CEO experimentado.",
examples=[
["¿Cómo puedo validar mi idea de negocio con poco presupuesto?"],
["¿Cuál es la mejor estrategia para conseguir mis primeros clientes?"],
["¿Debería invertir en publicidad en redes sociales o en SEO?"]
],
allow_flagging="never",
theme=gr.themes.Soft(primary_hue="blue")
)
# Lanzar la aplicación
if __name__ == "__main__":
demo.queue(max_size=1).launch(share=False, debug=False)