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)