Architecture
Kisuno runs in containers on a Linux machine. This page shows the setup in broad strokes. It describes the path a request takes and the decisions behind it, not the setup in detail.
The data flow
Section titled “The data flow”Two things matter here. First, every path from the outside goes through the reverse proxy; the other services accept no connections from the network. Second, accounts, conversations and files stay on your server, while for the model responses themselves the provider is called.
The layers
Section titled “The layers”Reverse proxy. The only entry point from the outside. It terminates TLS, takes care of the certificate and routes the requests to the services behind it.
Application. This is LibreChat. The service serves the interface, talks to the model providers, runs the agents and processes uploaded files.
Data storage. Accounts, conversations, messages, agents and logs live in the database of the instance, alongside a search index across your own chats and the uploaded files on the same server. The database is the source of truth, the search index can be rebuilt from it at any time.
What Kisuno adds. Around LibreChat sit our own services for administration, permissions and usage overview, plus the connection to third party systems. They are reachable only inside the instance and are not exposed to the network.
Outside the instance. For the model responses the inference provider is called, for web search external search engines. If code execution is switched on, it runs in a separate, isolated environment next to the application.
Why one instance per customer
Section titled “Why one instance per customer”LibreChat does not know about tenants. The separation therefore sits below the application: one customer is one instance with its own database, its own search index, its own files, its own configuration and its own inference key. Whether two instances share a machine is after that a pure question of cost and risk.
At most, operating resources without any customer reference may be shared. What has to stay separate in every case is the data storage, the configuration including all keys, and the environment for code execution. Otherwise neither the data nor the cost can be attributed cleanly per customer.