Arquitectura
Kisuno se ejecuta en contenedores sobre una máquina Linux. Esta página muestra la estructura a grandes rasgos. Describe qué camino toma una petición y qué decisiones hay detrás, pero no la puesta en marcha en detalle.
El flujo de datos
Sección titulada «El flujo de datos»Dos cosas son esenciales en ello. Primero, todo camino desde fuera pasa por el proxy inverso; los demás servicios no aceptan conexiones desde la red. Segundo, las cuentas, las conversaciones y los archivos permanecen en su servidor, mientras que para las respuestas del modelo se recurre al proveedor.
Las capas
Sección titulada «Las capas»Proxy inverso. El único punto de entrada desde fuera. Termina TLS, se ocupa del certificado y reparte las peticiones entre los servicios que hay detrás.
Aplicación. Es LibreChat. El servicio entrega la interfaz, se dirige a los proveedores de modelos, ejecuta los agentes y procesa los archivos subidos.
Almacenamiento de datos. Las cuentas, las conversaciones, los mensajes, los agentes y los registros están en la base de datos de la instancia; a ello se suman un índice de búsqueda sobre los chats propios y los archivos subidos en el mismo servidor. La base de datos es la fuente de la verdad, el índice de búsqueda puede reconstruirse a partir de ella en cualquier momento.
Añadidos de Kisuno. Alrededor de LibreChat se sitúan servicios propios para la administración, la gestión de permisos y la vista del consumo, además de la conexión con sistemas ajenos. Solo son accesibles dentro de la instancia y no están expuestos en la red.
Fuera de la instancia. Para las respuestas del modelo se recurre al proveedor de inferencia, para la búsqueda web a motores de búsqueda externos. Si se activa la ejecución de código, esta corre en un entorno propio y separado junto a la aplicación.
Por qué una instancia por cliente
Sección titulada «Por qué una instancia por cliente»LibreChat no conoce la multitenencia. Por eso la separación queda por debajo de la aplicación: un cliente es una instancia propia con su propia base de datos, su propio índice de búsqueda, sus propios archivos, su propia configuración y su propia clave de inferencia. Que dos instancias compartan una máquina es a partir de ahí una pura cuestión de costes y de riesgo.
Como mucho pueden compartirse recursos de operación sin relación con el cliente. Lo que debe permanecer separado en todo caso es el almacenamiento de datos, la configuración con todas sus claves y el entorno de la ejecución de código. De lo contrario no se pueden separar limpiamente ni los datos ni los costes por cliente.