# Architecture This document provides a high-level overview of the Chat UI codebase. If you're looking to contribute or understand how the codebase works, this is the place for you! ## Overview Chat UI provides a simple interface connecting LLMs to external tools via MCP. The project uses [MongoDB](https://www.mongodb.com/) and [SvelteKit](https://kit.svelte.dev/) with [Tailwind](https://tailwindcss.com/). Key architectural decisions: - **OpenAI-compatible only**: All model interactions use the OpenAI API format - **MCP for tools**: Tool calling is handled via Model Context Protocol servers - **Auto-discovery**: Models are discovered from the `/models` endpoint ## Code Map ### `routes` All routes rendered with SSR via SvelteKit. The majority of backend and frontend logic lives here, with shared modules in `lib` (client) and `lib/server` (server). ### `textGeneration` Provides a standard interface for chat features including model output, tool calls, and streaming. Outputs `MessageUpdate`s for fine-grained status updates (new tokens, tool results, etc.). ### `endpoints` Provides the streaming interface for OpenAI-compatible endpoints. Models are fetched and cached from `${OPENAI_BASE_URL}/models`. ### `mcp` Implements MCP client functionality for tool discovery and execution. See [MCP Tools](../configuration/mcp-tools) for configuration. ### `llmRouter` Intelligent routing logic that selects the best model for each request. Uses the Arch router model for classification. See [LLM Router](../configuration/llm-router) for details. ### `migrations` MongoDB migrations for maintaining backwards compatibility across schema changes. Any schema changes must include a migration. ## Development ```bash npm install npm run dev ``` The dev server runs at `http://localhost:5173` with hot reloading.