Spaces:
Sleeping
Sleeping
| 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) | |