dsh-owui-chat2api
Open WebUI models as an OpenAI-compatible API for DeepSeek Harness, with a control panel and usage dashboard.
- Stars
- 0
- Language
- JavaScript
- Created
- Sep 3, 2026
- Updated
- Sep 27, 2026
Introduction
English | 简体中文
dsh-owui-chat2api
An adapter that exposes the models in your Open WebUI as a standard
OpenAI-compatible /v1 API for DSH
(DSH Desktop or the stock web UI), plus a usage dashboard that lives inside DSH.
It bundles chat2api, runs it as a local reverse proxy, and adds a control panel to the DSH web shell:
DeepSeek Harness (or any OpenAI-compatible client)
│ standard /v1 API → http://127.0.0.1:8000
▼
dsh-owui-chat2api (local reverse proxy, keeps its own login)
▼
your Open WebUI (browser sign-in once, session reused afterwards)
Features ✨
- ▶️ Start / stop the proxy from the panel
- 🩺 Environment check: is Python available, are the dependencies installed?
- ⚙️ Configure your Open WebUI URL, host and port
- 📊 Usage dashboard: today / yesterday / month / total, ranked per model with colorful share bars — plus a manual price table (per 1M tokens, cached tokens priced separately) that turns the stats into a cost estimate
- ⚡ Honest cache tracking: a cache-hit-rate card when the backend reports cached tokens, a clear note when it doesn't; estimated and failed calls are surfaced too
- 🪟 Two mounts, one engine: the floating pill overlay and a right-sidebar dock tab (DSH Desktop 2.0.10+) — the tab docks beside your conversation instead of covering it; on older DSH versions you simply get the pill
- 🧠 One-click model and reasoning-level sync (see Reasoning effort) — it also drops models you deleted in Open WebUI, so the list tracks the backend instead of only ever growing
- 📜 Process log with error highlighting, follow mode and copy
- 🎨 Color-coded sections with inline Tabler icons that follow the DSH theme (dark / light), zero external requests
Install 📦
Pick one of three ways: A is a single command, B needs no git, C
lets your DSH assistant do the whole thing.
⚡ Option A — one command (recommended)
The dsh CLI ships a plugin manager. One command installs the plugin and
registers it in your profile (dependencies + bundles). Pick the profile that
matches your setup — desktop for DSH Desktop, web for the stock web UI:
dsh plugin --profile desktop add github:Wecury/dsh-owui-chat2api#v0.10.0
dsh plugin --profile web add github:Wecury/dsh-owui-chat2api#v0.10.0
-
#v0.10.0pins the release tag — use the version you want (omit it to followmain). -
Requires
giton PATH (pnpm clones the repo). Behind a proxy? Exporthttp_proxy/https_proxyfirst. -
Hit
[ERR_PNPM_EPERM] ... rename ..._tmp_...on Windows? A junction left by an earlier manual install (Option B) is in the way — remove only the link, then run the command again:cmd /c rmdir "%USERPROFILE%\.dsh\profiles\<desktop|web>\node_modules\dsh-owui-chat2api"(
rmdiron a junction removes the link only, never the target folder.) -
Restart DSH when it finishes. Later updates (same
--profileas install):dsh plugin --profile <desktop|web> update dsh-owui-chat2api.
📦 Option B — from the release tarball (no git needed)
-
From Releases → Assets, download
dsh-owui-chat2api-<version>.tgz. (The Source code (zip) button is the development tree — for contributing, not for installing.) -
Unpack it into the plugins folder. The tarball extracts to a
package/directory — move and rename it (tarships with Windows 10+):tar -xzf dsh-owui-chat2api-0.10.0.tgz Move-Item package "$env:USERPROFILE\.dsh\plugins\dsh-owui-chat2api-0.10.0"Upgrading over a previous manual install? If
%USERPROFILE%\.dsh\profiles\<desktop|web>\node_modules\dsh-owui-chat2apialready exists (an old junction), remove the link first —cmd /c rmdir "<that path>"— so the newlink:dependency resolves to the new folder instead of a stale target. -
Register it in
%USERPROFILE%\.dsh\profiles\<desktop|web>\package.json(desktopfor DSH Desktop,webfor the stock web UI):"dependencies": { "dsh-owui-chat2api": "link:%USERPROFILE%\\.dsh\\plugins\\dsh-owui-chat2api-0.10.0" }, "dsh": { "profile": { "bundles": [ /* ... */ "dsh-owui-chat2api" ] } }Match the folder name to the version you downloaded.
🤖 Option C — let your DSH install it
Paste this to your DSH assistant and it will do the rest:
请帮我安装 DSH 插件 dsh-owui-chat2api(GitHub 仓库 Wecury/dsh-owui-chat2api)。
步骤:
1. 执行:dsh plugin --profile desktop add github:Wecury/dsh-owui-chat2api#v0.10.0
(用原版 web 界面就把 --profile desktop 换成 --profile web。需要本机有 git。
如果 dsh plugin 不可用,改用手动方式:从仓库 Releases 的 Assets 下载
dsh-owui-chat2api-<版本>.tgz,解压得到 package/ 文件夹,移动并改名为
%USERPROFILE%\.dsh\plugins\dsh-owui-chat2api-<版本>;然后在
%USERPROFILE%\.dsh\profiles\<desktop|web>\package.json 的 dependencies 里加
"dsh-owui-chat2api": "link:<该目录的绝对路径>",并把 "dsh-owui-chat2api"
加进 dsh.profile.bundles 数组)
2. 重启 DSH。
3. 验证:DSH 页面右上角出现 OWUI 圆标;点开面板,Status 区能显示状态即成功。
Quick start 🚀
- Restart DSH (after any install option above). The OWUI pill appears in the top-right corner.
- Open the panel and set your Open WebUI URL (the default is a placeholder).
- Click Start. The first run opens a browser window for a one-time sign-in; the session is reused afterwards.
Troubleshooting 🔧
| Symptom | What to do |
|---|---|
| Diagnostics shows Attention | Install the dependencies: pip install requests playwright, then playwright install |
| Login fails / asks to sign in again | Click Login in the panel and sign in once in the window |
| Models missing from the DSH picker | Click Sync models & reasoning levels, then restart DSH |
The URL is your-open-webui.example.com | That's the placeholder — set your real address, then Start |
[ERR_PNPM_EPERM] ... rename ..._tmp_... when installing | An old junction from a previous manual install is in the way — `cmd /c rmdir "%USERPROFILE%.dsh\profiles<desktop |
Reasoning effort 🧠
Reasoning models (e.g. served behind a vLLM gateway) honour reasoning_effort,
so DSH's model picker can show Off / Low / Medium / High.
The easiest way is the Sync models & reasoning levels button in the
Configuration section: it probes your models, declares the supported level for
each, and writes a backup first. When your backend gains a model, click it
again — already-probed models hit the cache. Models you deleted in Open WebUI are
dropped from settings.yaml on the next sync, so the list tracks the backend
instead of only ever growing.
For manual declaration or using chat2api.py standalone, see
DEVELOPMENT.md.
Data & security 🔒
- Your Open WebUI session (
.chrome-profile,token.json, the usage database) stays on this machine and is excluded from git and from the package. - The usage database and the proxy config live under
~/.dsh, outside the plugin directory, so they survive plugin updates. - The proxy listens on
127.0.0.1only.
Development 🛠️
See DEVELOPMENT.md for the code layout, conventions and how to test a change locally.
License ⚖️
- Plugin code (outside
chat2api/): MIT — see LICENSE. - The bundled
chat2api/proxy: MIT © openwebui-chat2api contributors — see THIRD_PARTY_NOTICES.md and Sozbo-Tang/openwebui-chat2api.