dsh-tool-council
开发工具 活跃维护

dsh-tool-council

vinoth4v/dsh-tool-council

多模型协同评议插件,可向不同服务商的多个大模型发送相同问题,自动汇总各模型回答内容,清晰标注共识点与分歧点,无需手动比对多份输出即可快速获取多角度参考结论。

0
Stars 标星
0
Forks 分支
0
Watchers 关注
0
Open Issues
JavaScript
主要语言
MIT
开源协议
9 KB
仓库大小
1 个月前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:vinoth4v/dsh-tool-council
git clone https://github.com/vinoth4v/dsh-tool-council.git
git clone git@github.com:vinoth4v/dsh-tool-council.git
README.md main

dsh-tool-council

A DeepSeek Harness plugin that gives the model a
council tool: put one question to several models at once, each on a different provider, get every
answer back side by side, then have a separate chair model report where they agreed and — more usefully —
exactly where they split.

One model's confident answer is one sample. A council turns a contested judgement call into visible
disagreement you can act on.

Council: 5/5 members answered.

## google/gemini-3.6-flash (2841ms)
...
## groq/openai/gpt-oss-120b (1204ms)
...

## Synthesis — nvidia/minimaxai/minimax-m3
Members 1-4 recommend REST; member 5 dissents for GraphQL. The split is a
weighting judgement, not a factual dispute: ...

Design

Three decisions make the output worth reading:

  • Members sit on different providers and different model families. Two checkpoints of the same base
    model fail the same way, so their agreement tells you nothing. Diversity is the entire signal.
  • The chair is not one of the members. It never grades its own answer.
  • A failing member is reported, not thrown. One dead provider must not collapse the panel — that is
    the reason for polling several in the first place. Members run concurrently, so wall-clock is the
    slowest member, not the sum.

Install

Requires a working DeepSeek Harness installation (npm install -g @deepseek-ai/dsh) with at least two
provider routes configured in $DSH_HOME/settings.yaml.

Clone it inside the profile you are installing into, then register it:

mkdir -p "$HOME/.dsh/profiles/web/plugins"
git clone https://github.com/vinoth4v/dsh-tool-council \
  "$HOME/.dsh/profiles/web/plugins/dsh-tool-council"
cd "$HOME/.dsh/profiles/web" && dsh plugin --profile web add ./plugins/dsh-tool-council

The location matters. dsh plugin add links the package, and Node resolves a symlink to its real
path before looking for dependencies — so a clone living outside $DSH_HOME/profiles cannot see
@deepseek-ai/dsh-llm or @deepseek-ai/dsh-tools and fails to load with ERR_MODULE_NOT_FOUND.
Cloning under profiles/ lets the ordinary parent-directory walk reach the harness's own
profiles/node_modules, which carries both.

To keep the checkout somewhere else (a normal projects directory), link the two peer packages into it
by hand — pointing at your harness installation — and the same walk succeeds:

DSHMOD="$(dirname "$(readlink -f "$(command -v dsh)")")/../lib/node_modules/@deepseek-ai/dsh/node_modules/@deepseek-ai"
mkdir -p node_modules/@deepseek-ai
ln -sfn "$DSHMOD/dsh-llm"   node_modules/@deepseek-ai/dsh-llm
ln -sfn "$DSHMOD/dsh-tools" node_modules/@deepseek-ai/dsh-tools

Then add an entry to $DSH_HOME/profiles/web/cordis.patch.yml:

- insert:
    - id: council
      name: dsh-tool-council
      config:
        members:
          - provider: google
            model: gemini-3.6-flash
          - provider: groq
            model: openai/gpt-oss-120b
          - provider: nvidia
            model: z-ai/glm-5.2
          - provider: openrouter
            model: nvidia/nemotron-3-super-120b-a12b:free
          - provider: mistral
            model: devstral-medium-latest
        synthesis:
          provider: nvidia
          model: minimaxai/minimax-m3
        maxTokens: 2048
        timeoutMs: 120000

Restart the harness. Repeat for any other profile (headless, tui) that should have the tool.

Every provider must be a route you have configured, and every model an id that route serves — the
plugin does not validate membership, so an unknown pair fails at request time with the provider's own
error, reported against that member.

Configuration

Field Default Meaning
members 3 built-in routes The panel. Each entry is { provider, model, role? }. Capped at 8.
synthesis google / gemini-3.6-flash The chair route, or false to never synthesize.
maxTokens 2048 Generation cap per member and for the chair.
timeoutMs 120000 Deadline per call, fused with the caller's own cancellation.

The built-in defaults exist only so the plugin loads without configuration. Set members to routes you
actually have — the defaults name specific providers that may not exist in your deployment.

Tool arguments

The model calls council with:

  • question (required) — Members see only this text, not the surrounding conversation, so it must be
    self-contained. The tool description tells the model as much; if answers look context-starved, this is why.
  • members (optional) — Override the panel for one call. Each entry takes an optional role
    ("security reviewer", "performance skeptic"), which is shown to the chair.
  • synthesize (optional, default true) — Set false to read the raw answers without a chair pass.

It returns { question, answers[], synthesis? }, where each answer carries provider, model, ok,
elapsedMs, and either text or error. Synthesis is skipped when fewer than two members succeed —
there is nothing to reconcile a lone answer against.

Cost

One provider request per member, plus one for the chair. A five-member panel is six requests. The tool
description tells the model to reserve it for consequential or contested questions rather than routine
lookups, but on metered providers it is worth watching.

Relationship to the upstream project

This is a community plugin, not part of the harness. DeepSeek Harness
does not accept external pull requests
at this stage and instead points contributors at building plugins and tagging them dsh-plugin — which is
what this is. The upstream project's own words: "We do not believe that packages in the official
repository are inherently more important than packages created by the community."

License

MIT