dsh-plugin-llmtr
DeepSeek Harness 的 LLMTR 网关供应商接入:一个 OpenAI 兼容 Key 即可访问 170+ 聊天模型与土耳其本地托管 LLM。
knowhycodata
@knowhycodata
⬇ 2
★ 0
main
安装
dsh plugin --profile web add github:knowhycodata/dsh-plugin-llmtr
需要可复现安装时,可在仓库后追加 #commit 固定提交。
DeepSeek Harness 的 LLMTR 网关供应商接入:一个 OpenAI 兼容 Key 即可访问 170+ 聊天模型与土耳其本地托管 LLM。
该插件未提供要点说明,请参考仓库 README。
ai-gatewaydeepseek-harnessdsh-pluginllmllmtr
- 安装并启动 DeepSeek Harness:
npx @deepseek-ai/dsh web - 在终端执行上面的安装命令(CLI 会解析插件并核验来源)
- 用 dsh plugins list 确认已安装,必要时重启 Harness 生效
插件以当前 dsh 进程的权限运行,安装时可能执行代码。请先通读仓库源码与许可证,确认无破坏性命令与越权访问;本站只做索引,不对第三方插件安全性作担保。
| 代码仓库 | github.com/knowhycodata/dsh-plugin-llmtr |
| 许可证 | MIT |
| 主要语言 | main |
| 下载量 | 2 |
| GitHub 星标 | 0 |
| 最近推送 | 2026-08-15 |
| 收录日期 | 2026-09-19 |
| 分类 | 模型与提供方 |
事实信息来自公开插件目录快照(2026-10-01),介绍文案由本站再加工。
以下为插件仓库 README 全文(原始内容,由公开目录抓取整理)。
# dsh-plugin-llmtr
English | [Türkçe](README.tr.md)
An [LLMTR](https://llmtr.com) provider route for [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (`dsh`).
LLMTR is an OpenAI-compatible AI gateway. One API key reaches 170+ chat models from OpenAI, Anthropic, Google, Qwen, Mistral, xAI and others — plus the models LLMTR runs on its own infrastructure in Türkiye, for deployments that need their prompts to stay in-country.
This plugin registers those models as the `llmtr` provider route on `ctx.llm`, so they appear in the harness model picker and can be selected per session, per agent, and per subagent like any other route.
## Install
```sh
dsh plugin add dsh-plugin-llmtr
```
The package ships a bundle patch, so `plugin add` inserts the row for you. Then open **Settings → Models**, find the **LLMTR** card, paste a key from [llmtr.com](https://llmtr.com), and save. The key is stored in `$DSH_HOME/.credentials.yaml`; settings retain only its reference.
The model picker fills itself from the gateway's live listing — nothing to type, and models LLMTR adds later appear without an upgrade.
### Without the plugin CLI
Add the row to your own `cordis.yml` or `--patch` overlay:
```yaml
- insert:
- id: llm-llmtr
name: dsh-plugin-llmtr
```
and export the key instead of storing it:
```sh
export LLMTR_API_KEY=llmtr-...
```
## Model ids
Model ids are the gateway's own, `owner/model`, and are sent verbatim:
```
openai/gpt-5.4 anthropic/claude-... google/gemini-3.7-flash
qwen/qwen3-8-... mistral/... deepseek/deepseek-v4-...
llmtr/muse-glimmer-30b-tr llmtr/trendyol-asure-12b llmtr/gemma-4
```
Ids starting with `llmtr/` are the ones LLMTR hosts in Türkiye; the picker labels them "Hosted in Türkiye on LLMTR infrastructure". Everything else is routed to its upstream provider and processed under that provider's own terms — the plugin does not claim otherwise for them.
## Data residency
To offer only the in-country models, narrow the catalog scope:
```yaml
llm-llmtr:
catalogScope: turkey-hosted
```
The picker then lists nothing else, so a session cannot be started on a model whose prompts leave the country.
## Configuration
Every field is optional and lives in the `llm-llmtr` section of `$DSH_HOME/settings.yaml` (or in the plugin row's `config`). Changes reach the next request without a restart; an in-flight stream keeps the values it started with.
| Field | Default | What it decides |
| --- | --- | --- |
| `apiKeyEnv` | `LLMTR_API_KEY` | Credential reference resolved per request |
| `baseURL` | `https://llmtr.com/v1` | Endpoint; `$LLMTR_BASE_URL` from a trusted launch layer overrides the default |
| `headers` | `{}` | Extra request headers; authentication and attribution names always win |
| `catalogScope` | `chat` | `chat`, `turkey-hosted`, or `all` |
| `catalogTtlMs` | `900000` | How long a fetched listing is reused |
| `models` | `[]` | A pinned list; non-empty replaces the live listing entirely |
| `modelOverrides` | `{}` | Per-model corrections applied over the live listing |
| `reasoningEfforts` | `[]` | Effort ids the gateway accepts for your models |
| `maxTokens` | `32768` | Default per-request output cap |
| `defaultContextWindow` | `131072` | Capacity assumed for a model you have not sized |
| `streamIdleTimeoutMs` | `300000` | Idle ceiling while a stream read is outstanding |
| `retryPolicy` | harness default | Provider-owned retry policy |
### Context windows
The LLMTR listing publishes ids and operations, not capacities, so every model is sized at `defaultContextWindow` until you say otherwise. Correct the ones you actually use:
```yaml
llm-llmtr:
modelOverrides:
openai/gpt-5.4:
contextWindow: 400000
llmtr/muse-glimmer-30b-tr:
contextWindow: 32768
maxTokens: 8192
```
### Reasoning effort
Reasoning **output** works out of the box: the adapter reads both `reasoning_content` and `reasoning` deltas, so a reasoning model's thinking shows up in the transcript with no configuration.
Selecting an effort **level** is opt-in, because the gateway fans requests out to upstreams that reject `reasoning_effort` on non-reasoning models. Declare what your models accept and the harness offers exactly those:
```yaml
llm-llmtr:
reasoningEfforts: [low, medium, high]
```
With the list empty, no selector is shown and nothing reaches the wire. A request carrying an undeclared effort is refused by name rather than silently dropped.
### Pinning a model list
A deployment that must fix exactly which models its users can reach replaces the listing instead of filtering it:
```yaml
llm-llmtr:
models:
- id: llmtr/muse-glimmer-30b-tr
name: Muse Glimmer 30B
contextWindow: 32768
- id: llmtr/trendyol-asure-12b
```
With `models` non-empty the gateway listing is never fetched.
## Scope
- **Chat completions only.** Requests go to `/v1/chat/completions` with streaming and usage reporting on. LLMTR's embeddings, image, video, rerank, and realtime models are listed by `catalogScope: all` but cannot be routed by this adapter, which is why `chat` is the default.
- **Text in, text out.** Image content is refused before it is sent, naming the model, rather than being flattened away.
- **One attempt per call.** Retries belong to the harness retry policy, so a failure is visible once rather than hidden inside the adapter.
## Privacy
The plugin sends the harness's standard `User-Agent`, an `x-llmtr-client` header naming this package and version, and your API key. No session id, prompt text, file path, or user identifier is added to any header.
## Development
```sh
npm install
npm test # 80 unit tests, no network and no key required
npm run typecheck
npm run build
```
`tests/mock-server.ts` stands in for the gateway, so the suite runs offline.
## License
[MIT](LICENSE). Portions derive from DeepSeek Harness — see [NOTICE](NOTICE).
数据来源:公开的 DeepSeek Harness 插件目录与各插件 GitHub 仓库。本站为独立第三方目录,与 DeepSeek、幻方(High-Flyer)及插件作者均无隶属或背书关系。