Spaces:
Running
Running
File size: 6,500 Bytes
4ad23c1 55e6cbd d8257da 1d5b573 26e838b 9182c17 c592ad7 9182c17 c592ad7 9182c17 9ac84ea 9182c17 c592ad7 9182c17 c592ad7 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 131 132 133 134 135 |
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) |