← Back to home@Wecury

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
GitHub repo

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)

The dsh-owui-chat2api control panel inside DSH: status, config, usage dashboard and process log

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.0 pins the release tag — use the version you want (omit it to follow main).

  • Requires git on PATH (pnpm clones the repo). Behind a proxy? Export http_proxy / https_proxy first.

  • 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"
    

    (rmdir on a junction removes the link only, never the target folder.)

  • Restart DSH when it finishes. Later updates (same --profile as install): dsh plugin --profile <desktop|web> update dsh-owui-chat2api.

📦 Option B — from the release tarball (no git needed)

  1. From Releases → Assets, download dsh-owui-chat2api-<version>.tgz. (The Source code (zip) button is the development tree — for contributing, not for installing.)

  2. Unpack it into the plugins folder. The tarball extracts to a package/ directory — move and rename it (tar ships 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-chat2api already exists (an old junction), remove the link first — cmd /c rmdir "<that path>" — so the new link: dependency resolves to the new folder instead of a stale target.

  3. Register it in %USERPROFILE%\.dsh\profiles\<desktop|web>\package.json (desktop for DSH Desktop, web for 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 🚀

  1. Restart DSH (after any install option above). The OWUI pill appears in the top-right corner.
  2. Open the panel and set your Open WebUI URL (the default is a placeholder).
  3. Click Start. The first run opens a browser window for a one-time sign-in; the session is reused afterwards.

Troubleshooting 🔧

SymptomWhat to do
Diagnostics shows AttentionInstall the dependencies: pip install requests playwright, then playwright install
Login fails / asks to sign in againClick Login in the panel and sign in once in the window
Models missing from the DSH pickerClick Sync models & reasoning levels, then restart DSH
The URL is your-open-webui.example.comThat's the placeholder — set your real address, then Start
[ERR_PNPM_EPERM] ... rename ..._tmp_... when installingAn 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.1 only.

Development 🛠️

See DEVELOPMENT.md for the code layout, conventions and how to test a change locally.

License ⚖️