Introduction¶
DeepSeek Harness (DSH) supports flexible extensibility through a plugin architecture. When integrating Volcano Engine / Volcano Ark, developers need to handle API keys, model routing, and adapting to OpenAI-compatible interfaces. The dsh-volcengine package is a ready-made plugin bundle. Through DSH’s cordis.patch.yml configuration file, it injects Ark model routing into DSH’s model selector and provides tool plugins for calling text-to-image and vision models.
Core Features¶
This plugin contains two main parts:
- Model routing: Configure two provider routes through
cordis.patch.ymlto connect Volcano Ark models to the DSH model selector.volcengine: a pay-as-you-go route that calls the/api/v3endpoint and supports brands such as DeepSeek, GLM, and Doubao.volcengine-coding: an Ark Coding Plan route that calls the/api/coding/v3endpoint and supports Kimi, MiniMax, GLM, and others.
- Tool plugins: Mount the bundled tool plugins that use raw
fetchto call Ark’s OpenAI-compatible endpoints.volcengine_chat: calls any Ark model for one-shot completion (supports text, reasoning, and multimodal vision).volcengine_image_generate: calls a text-to-image model (Seedream / Jimeng).
Installation¶
The installation method depends on the DSH Profile being used (Web or Desktop App).
Web Profile¶
Install using a GitHub repository:
dsh plugin --profile web add github:you/dsh-volcengine
Desktop Profile¶
The Desktop App only supports installation from the npm registry; file:, paths, and URLs are not supported. For local development, manually build and configure it:
- Build and pack:
npm run build && npm pack
- Place the file: Put the generated tarball file in the
~/.dsh/profiles/desktop/vendor/directory. - Modify the configuration: In
package.json, changedependenciesto an exact version (such as"dsh-volcengine": "0.2.3"), and append"dsh-volcengine"indsh.profile.bundles. - Configure the dependency: In
pnpm-workspace.yaml, add anoverridesentry pointing to the local tarball. - Install: Run
pnpm install --ignore-scriptsin the App’s Node/Pnpm environment. - Restart: Restart the App to apply the changes.
Note: After making changes, bump the version number and repack, because the lockfile pins tarball integrity with
sha512.
Configuration¶
API key and model ID configuration is done in cordis.patch.yml. You can modify it by overriding the default configuration provided by this package.
Basic Configuration Example¶
- id: volcengine
config:
apiKeyEnv: ARK_API_KEY # 存放 API Key 的环境变量名
baseURL: https://ark.cn-beijing.volces.com/api/v3
chatModel: deepseek-v4-pro-ga-260813
imageModel: doubao-seedream-4-0-250828
Coding Plan Configuration¶
If you need to use models such as Kimi or MiniMax, configure the Coding Plan route separately and use a separate ARK_CODING_API_KEY.
Get the Key and Model ID¶
- Log in to the Volcano Ark Console, enable the model, and create an API Key (for the pay-as-you-go route).
- If you are using Coding Plan, subscribe and obtain the Coding Plan key.
- Important: Model IDs in
cordis.patch.yml(such asdeepseek-v4-pro-ga-260813) are only examples. Replace them with the actual model ID or endpoint ID (ep-xxx) available in your account’s console.
Typical Usage¶
Calling a Vision Model¶
Use the volcengine_chat tool and pass an image URL in the images parameter to call a vision model.
- id: volcengine_chat
config:
model: deepseek-v4-1-flash-260910 # 支持多模态的模型 ID
apiKeyEnv: ARK_API_KEY
When calling it, pass:
{
messages: [...],
images: [{ url: "https://example.com/image.jpg" }]
}
Text-to-Image¶
Use the volcengine_image_generate tool to generate images.
- id: volcengine_image_generate
config:
model: doubao-seedream-4-0-250828
apiKeyEnv: ARK_API_KEY
Technical Implementation and Limitations¶
Architecture Design¶
- Lightweight: The plugin uses native
fetchto call Ark’s OpenAI-compatible endpoints instead of the official SDK. This avoids the overhead of signature authentication and reduces package size. - Dependency handling:
@deepseek-ai/*dependencies are marked asexternaland provided by the host, avoiding runtime Symbol conflicts. - Build: Uses
tsdownfor packaging. Thepreparescript automatically runs the build during Git installation. For local checkouts, manually runnpm run buildfirst.
Limitations¶
- Desktop App limitation: The Desktop App only supports npm registry package names, and
peerDependenciescannot be"*"(it must specify a concrete version range). Otherwise, a version mismatch can prevent the Profile from starting. - Model routing: Ark’s chat interface does not support sending system prompts via the
developerrole (used for reasoning models). Therefore, this plugin treats configured models as non-reasoning models (system prompts are sent via thesystemrole), but the model itself can still returnreasoning_content. - Uncovered services: Currently, the plugin only supports Chat and text-to-image. Services that require the official SDK, such as speech synthesis (TTS), speech recognition (ASR), video on demand, Embeddings, and Rerank, have not been integrated yet.
Roadmap¶
Future plans include expanding the following capabilities based on requirements:
* Video generation: Seedance series.
* Embeddings: Text and vision Embedding models.
* Rerank: Reranking service.
* Speech services: Doubao Voice WebSocket V3 (requires the official SDK).
License¶
MIT