Spaces:
Running
Running
File size: 5,608 Bytes
4ad23c1 55e6cbd d8257da 1d5b573 26e838b 9182c17 9ac84ea 9182c17 9ac84ea 9182c17 721590a 9182c17 4ad23c1 1d5b573 dc63621 721590a 9182c17 |
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 |
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! ¿En qué puedo ayudarte hoy?",
"buenos días": "¡Buenos días! ¿Qué planes tienes para tu negocio hoy?",
"buenas": "¡Buenas! ¿En qué estás trabajando?",
"saludos": "¡Hola! ¿Qué te trae por aquí?",
"hey": "¡Hey! ¿Qué necesitas?",
"qué tal": "Bien, ¿y tú? ¿En qué puedo ayudarte?",
"como estas": "Bien, gracias. ¿Qué necesitas?",
"cómo estás": "Bien, gracias. ¿Qué necesitas?",
"estas bien": "Perfectamente. ¿En qué puedo ayudarte hoy?",
"estás bien": "Perfectamente. ¿En qué puedo ayudarte hoy?",
"que es byte": "Un proyecto con herramientas para emprendedores. ¿En qué puedo ayudarte?",
"qué es byte": "Un proyecto con herramientas para emprendedores. ¿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
# Cargar el prompt del sistema
with open("prompt.txt", "r", encoding="utf-8") as f:
system_prompt = f.read().strip()
# Instrucciones muy estrictas sobre brevedad y naturalidad
system_prompt += """
INSTRUCCIONES CRÍTICAS:
1. NUNCA te presentes como BITER ni menciones que eres un asistente de IA.
2. NUNCA expliques tu funcionamiento ni tus capacidades.
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.
"""
# 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) |