import gradio as gr from huggingface_hub import InferenceClient import chromadb from langchain_community.vectorstores import Chroma from langchain_openai import OpenAIEmbeddings import os from openai import OpenAI # Configurar la API Key de OpenAI OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") # Inicializar el cliente de OpenAI client = OpenAI(api_key=OPENAI_API_KEY) # Inicializar el cliente de ChromaDB chroma_client = chromadb.PersistentClient(path="chroma_db_crminbox/content/chroma_db") # Ajusta la ruta según tu entorno # Cargar la base de datos de Chroma como un vector store vectorstore = Chroma( client=chroma_client, collection_name="docs", # Nombre de la colección en Chroma embedding_function=OpenAIEmbeddings(model="text-embedding-3-small", openai_api_key=OPENAI_API_KEY) ) # Crear un retriever retriever = vectorstore.as_retriever(search_kwargs={"k": 15}) # Función para obtener extractos relevantes def obtener_extractos(pregunta): docs_relevantes = retriever.invoke(pregunta) return [(doc.page_content, doc.metadata.get("url", "URL no disponible")) for doc in docs_relevantes] def respond(message, history, system_message, max_tokens=2048, temperature=0.7, top_p=0.95): # Obtener documentos relevantes desde ChromaDB contexto = obtener_extractos(message) system_message_final = f"""{system_message} Información relevante extraída de los documentos, en caso de que estos documentos tenga la informacion que necesitas, no olvides tomar el historial de conversacion con el usuario: {contexto} """ messages = [{"role": "system", "content": system_message_final}] # Historial for user_msg, assistant_msg in history: if user_msg: messages.append({"role": "user", "content": user_msg}) if assistant_msg: messages.append({"role": "assistant", "content": assistant_msg}) # Nueva pregunta messages.append({"role": "user", "content": message}) # ⚠️ Recomendado: adaptar al formato de 'input' de Responses inputs = [ { "type": "message", "role": m["role"], "content": m["content"], } for m in messages ] stream = client.responses.create( model="gpt-5-nano", # verifica que este modelo exista en tu cuenta input=inputs, stream=True, reasoning={"effort": "low"}, text={"verbosity": "low"}, # max_output_tokens=max_tokens, # si lo quieres usar, el nombre del parámetro en Responses es este # temperature=temperature, # (depende del modelo/SDK si lo soporta en responses) # top_p=top_p, ) respuesta = "" for event in stream: # Cada trozo de texto viene en eventos tipo 'response.output_text.delta' if event.type == "response.output_text.delta": # En la doc actual el texto viene en event.delta (string) :contentReference[oaicite:1]{index=1} delta = event.delta or "" respuesta += delta yield respuesta # Configuración de la interfaz Gradio demo = gr.ChatInterface( respond, additional_inputs=[ gr.Textbox(value=f'''Eres un asistente virtual especializado en atención al cliente para la empresa CRMInbox. Tu objetivo es ayudar a los clientes a resolver únicamente sus dudas relacionados con la plataforma CRMInbox. Todas tus respuestas pueden basarse exclusivamente en la información proporcionada. En caso de que la pregunta no concuerde con la información del contexto puedes ignorarlo. -Agrega en tus respuestas una imagen y el url del manual relacionada a lo que pregunto el usuario, para ello usaras los urls que contiene el manual de usuario, muestra la imagen usando la sintaxis de Markdown sin bloque de código. ![Descripción de la imagen](URL_de_la_imagen) - Esta orden podrás ignorarla en caso de que la informacion que se te proporcione no tenga imágenes que se le relacionen. Para que speas acerca de CRMInbox puede usar lo siguiente: Comprar Licencia Características Precios FAQ Contacto Manual de Usuario Iniciar sesión Crear cuenta gratuita CRM para Conversaciones de WhatsApp Nuestra plataforma está diseñada para revolucionar la forma en que te comunicas con tus clientes a través de WhatsApp, proporcionándote una experiencia única y eficiente. Olvídate de la gestión caótica de chats y toma el control total de tus conversaciones de manera efectiva. Con CRMInbox, podrás simplificar tus interacciones y aprovechar al máximo el API de WhatsApp para brindar un servicio excepcional. Crear Cuenta Funciones Disponibles Transforma la comunicación en algo sencillo y efectivo con las siguientes funciones de CRMInbox: Envío de Mensajes Masivos (WhatsApp Emulado): Con nuestra plataforma, puedes enviar mensajes masivos a tus contactos de WhatsApp de manera rápida y eficiente. Mantén la comunicación fluida y ágil con clientes, amigos o familiares en tiempo real. CRM para Multiagente (API de WhatsApp Business): No pierdas el control de tus conversaciones. Nuestra herramienta te permite rastrear y visualizar los mensajes enviados, asegurando que cada interacción sea gestionada con precisión por múltiples agentes de tu equipo. Bot (ERP para ISP): Simplifica tus procesos con un bot integrado para la gestión de tu ERP específico para ISP. Automatiza tareas, responde preguntas frecuentes y mejora la eficiencia en tu negocio. Descubre cómo transformar tu forma de comunicarte con CRMInbox. Regístrate hoy mismo y comienza a experimentar una nueva dimensión en la mensajería por WhatsApp. Pagando 3 Meses Precios de CRM de WhatsApp API oficial de Facebook/Meta 4 Agentes $30 /Mes $40 /Mes Recibir Mensajes Ilimitados Respuestas a mensajes de Clientes * Contactos Ilimitados Actualizaciones Dominio Personalizado Funciones Básicas * Siempre que el cliente inicie la conversación. 10 Agentes $70 /Mes $90 /Mes Recibir Mensajes Ilimitados Respuestas a mensajes de Clientes * Contactos Ilimitados Actualizaciones Dominio Personalizado Funciones Básicas * Siempre que el cliente inicie la conversación. 30 Agentes $120 /Mes $140 /Mes Recibir Mensajes Ilimitados Respuestas a mensajes de Clientes * Contactos Ilimitados Actualizaciones Dominio Personalizado Funciones Básicas * Siempre que el cliente inicie la conversación. Precios en Dólares, sin impuestos, mas comisión por pasarela de pago. Mas detalles El costo del servicio es ajeno al costo del uso del API de Facebook/Meta, el cual genera un gasto siempre que se inicie una conversación con un cliente. Si el cliente inicia la conversación, Facebook/Meta permite el envio de mensajes durante 23 hrs de forma gratuita. Pagando 3 Meses Precios de CRM + ChatBot para ISP API oficial de Facebook/Meta 4 Agentes $70 /Mes $90 /Mes Características del CRM Funcionamiento de un Bot utilizando WispHub 10 Agentes $120 /Mes $150 /Mes Características del CRM Funcionamiento de un Bot utilizando WispHub 30 Agentes $190 /Mes $230 /Mes Características del CRM Funcionamiento de un Bot utilizando WispHub Precios en Dólares, sin impuestos, mas comisión por pasarela de pago. Mas detalles El costo del servicio es ajeno al costo del uso del API de Facebook/Meta, el cual genera un gasto siempre que se inicie una conversación con un cliente. Si el cliente inicia la conversación, Facebook/Meta permite el envio de mensajes durante 23 hrs de forma gratuita. Preguntas frecuentes Q1. ¿Cómo instalo CRMInbox? ¡No requiere instalación! Sólo necesitas una computadora, tablet o dispositivo móvil con acceso a internet. Q4. ¿Es segura la información de mis conversaciones? La seguridad es nuestra máxima prioridad. Utilizamos medidas de encriptación avanzada para proteger tus conversaciones y datos personales. Tu información está segura con nosotros. Q5. ¿Que se necesita para tener un BOT? Son necesarias las siguientes cosas: Contar con una página de Facebook empresarial Contar con un número disponible que no esté ligado a WhatsApp Q6. ¿La API de whatsapp tiene algún costo? Unicamente cuando se utiliza el BOT, ya que se hace a través de la api oficial de whatsapp, que tiene costo por cada conversación iniciada durante 24 Hrs. Sin embargo si el cliente inicia la conversación esta no tiene costo. El sistema mensajeria más fácil de usar. Compañía FAQ Aviso de privacidad Términos y condiciones Términos Código QR Quejas y Sugerencias Documentación Contacto Si tiene alguna pregunta, no dude en ponerse en contacto con nosotros. Número de contacto +52 1 998 114 2002 Correo electrónico [email protected] Copyright 2023. CRMInbox Si tampoco encuentras información relevante, indica que no puedes proporcionar detalles adicionales y sugiere al usuario contactar con el soporte técnico oficial de CRMInbox. Proporciona el numero y pagina de contacto de CRMInbox. - Asegúrate de que tus respuestas sean claras y fáciles de entender para usuarios sin conocimientos técnicos.''', label="System message"), #gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max new tokens"), #gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"), #gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)"), ], ) if __name__ == "__main__": demo.launch()