--- title: Kimi K3 Console emoji: 🌙 colorFrom: indigo colorTo: blue sdk: static app_file: index.html pinned: false short_description: Chat with Kimi K3 — 2.8T MoE, vision, 1M context --- # 🌙 Kimi K3 Console A browser-only chat client for [moonshotai/Kimi-K3](https://huggingface.co/moonshotai/Kimi-K3). K3 is a 2.8T-parameter MoE (104B active per token) with native vision and a 1M-token context window. Serving those weights takes a multi-node cluster, so this Space doesn't try — it calls a hosted API straight from your browser. No backend, no GPU, and your API key never leaves your machine. ## Getting a key Pick either provider in the settings panel. Both are OpenAI-compatible and both send CORS headers, which is what makes the browser-direct approach work. | Provider | Endpoint | Model id | Cost | |---|---|---|---| | Moonshot (official) | `https://api.moonshot.ai/v1` | `kimi-k3` | $1 minimum top-up | | OpenRouter | `https://openrouter.ai/api/v1` | `moonshotai/kimi-k3` | ~$3 / M in, $15 / M out | Neither has a free tier. Keys are held in memory unless you tick **Remember on this device**, which stores it in `localStorage` — your browser only, never transmitted anywhere except to the provider you chose. ## Two K3-specific details this client handles **Preserved thinking history.** K3 always reasons, and it was trained expecting the complete assistant message — `reasoning_content` included — to be passed back verbatim on the next turn. A wrapper that keeps only `content` quietly degrades multi-turn quality. This client keeps the wire history separate from what it renders, so the trace survives the round trip. To watch it work, send *"Tell me three random numbers"*, then ask which ones it held back. The follow-up only resolves if the model can still see its own scratchpad. **Base64 vision input.** K3 rejects public image URLs, so attachments are inlined as `data:` URLs. Paste or drop images straight into the composer. Thinking effort is exposed as `low` / `high` / `max`. There is no "off". ## The ribbon The band under the header is 896 ticks with exactly 16 lit — K3's real routing sparsity — reshuffling while tokens stream. It's the generating indicator. ## Running locally It's one file with no build step and no dependencies: ```bash python3 -m http.server 8000 ``` Then open .