biter-zephyr / app.py
askbyte's picture
Update app.py
898a4cb verified
import gradio as gr
import requests
import json
import os
# Función para generar respuestas usando DeepInfra
def generate_response(user_message, chat_history):
try:
if not user_message.strip():
return "Por favor, escribe una pregunta para que pueda ayudarte."
# Respuestas predefinidas para preguntas simples (solo si no hay historial)
if len(chat_history) == 0:
user_message_lower = user_message.lower().strip()
# Mapa de respuestas cortas y naturales para preguntas comunes
respuestas_cortas = {
"hola": "¡Hola! Soy BITER. ¿En qué puedo ayudarte hoy?",
"buenos días": "¡Buenos días! Soy BITER. ¿Qué planes tienes para tu negocio hoy?",
"buenas": "¡Buenas! Soy BITER. ¿En qué estás trabajando?",
"saludos": "¡Hola! Soy BITER. ¿Qué te trae por aquí?",
"hey": "¡Hey! Soy BITER. ¿Qué necesitas?",
"qué tal": "Bien, gracias. Soy BITER. ¿En qué puedo ayudarte?",
"como estas": "Bien, gracias. Soy BITER. ¿Qué necesitas?",
"cómo estás": "Bien, gracias. Soy BITER. ¿Qué necesitas?",
"estas bien": "Perfectamente. Soy BITER. ¿En qué puedo ayudarte hoy?",
"estás bien": "Perfectamente. Soy BITER. ¿En qué puedo ayudarte hoy?",
"que es byte": "Byte es un proyecto para emprendedores con herramientas de IA, desarrollo web y servicios de contenido. ¿En qué puedo ayudarte?",
"qué es byte": "Byte es un proyecto para emprendedores con herramientas de IA, desarrollo web y servicios de contenido. ¿En qué puedo ayudarte?",
"quien eres": "Soy BITER, tu mentor de negocios. Estoy aquí para ayudarte con decisiones estratégicas para tu emprendimiento.",
"quién eres": "Soy BITER, tu mentor de negocios. Estoy aquí para ayudarte con decisiones estratégicas para tu emprendimiento.",
"cómo te llamas": "Me llamo BITER. Soy tu mentor de negocios para ayudarte con tu emprendimiento.",
"como te llamas": "Me llamo BITER. Soy tu mentor de negocios para ayudarte con tu emprendimiento."
}
# 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
# Cargar el prompt del sistema
with open("prompt.txt", "r", encoding="utf-8") as f:
system_prompt = f.read().strip()
# Instrucciones actualizadas permitiendo que se presente como BITER
system_prompt += """
INSTRUCCIONES CRÍTICAS:
1. Puedes presentarte como BITER, pero hazlo de forma natural y breve.
2. NUNCA expliques que eres una IA ni detalles sobre tu funcionamiento.
3. Responde como un CEO humano ocupado: directo, práctico y sin rodeos.
4. Sé EXTREMADAMENTE conciso. Máximo 1-2 párrafos cortos.
5. Para preguntas simples, responde en una sola línea.
6. NUNCA uses listas largas ni explicaciones extensas.
7. NUNCA menciones a Byte a menos que te pregunten específicamente por ello.
8. Habla como un humano experto, no como una IA.
9. MANTÉN EL CONTEXTO de la conversación y haz referencias a mensajes anteriores cuando sea relevante.
10. Si te preguntan quién eres, puedes decir: "Soy BITER, tu mentor de negocios para ayudarte con decisiones estratégicas."
"""
# 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"
}
# Preparar los mensajes para la API incluyendo el historial
messages = [{"role": "system", "content": system_prompt}]
# Convertir el historial de chat de Gradio al formato que espera la API
for human, assistant in chat_history:
messages.append({"role": "user", "content": human})
messages.append({"role": "assistant", "content": assistant})
# Añadir el mensaje actual del usuario
messages.append({"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": 150,
"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 con historial de chat
demo = gr.ChatInterface(
fn=generate_response,
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?"]
],
theme=gr.themes.Soft(primary_hue="blue")
)
# Lanzar la aplicación
if __name__ == "__main__":
demo.queue(max_size=1).launch(share=False, debug=False)