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)