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:

  1. Model routing: Configure two provider routes through cordis.patch.yml to connect Volcano Ark models to the DSH model selector.
    • volcengine: a pay-as-you-go route that calls the /api/v3 endpoint and supports brands such as DeepSeek, GLM, and Doubao.
    • volcengine-coding: an Ark Coding Plan route that calls the /api/coding/v3 endpoint and supports Kimi, MiniMax, GLM, and others.
  2. Tool plugins: Mount the bundled tool plugins that use raw fetch to 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:

  1. Build and pack:
    npm run build && npm pack
  1. Place the file: Put the generated tarball file in the ~/.dsh/profiles/desktop/vendor/ directory.
  2. Modify the configuration: In package.json, change dependencies to an exact version (such as "dsh-volcengine": "0.2.3"), and append "dsh-volcengine" in dsh.profile.bundles.
  3. Configure the dependency: In pnpm-workspace.yaml, add an overrides entry pointing to the local tarball.
  4. Install: Run pnpm install --ignore-scripts in the App’s Node/Pnpm environment.
  5. 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

  1. Log in to the Volcano Ark Console, enable the model, and create an API Key (for the pay-as-you-go route).
  2. If you are using Coding Plan, subscribe and obtain the Coding Plan key.
  3. Important: Model IDs in cordis.patch.yml (such as deepseek-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 fetch to 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 as external and provided by the host, avoiding runtime Symbol conflicts.
  • Build: Uses tsdown for packaging. The prepare script automatically runs the build during Git installation. For local checkouts, manually run npm run build first.

Limitations

  1. Desktop App limitation: The Desktop App only supports npm registry package names, and peerDependencies cannot be "*" (it must specify a concrete version range). Otherwise, a version mismatch can prevent the Profile from starting.
  2. Model routing: Ark’s chat interface does not support sending system prompts via the developer role (used for reasoning models). Therefore, this plugin treats configured models as non-reasoning models (system prompts are sent via the system role), but the model itself can still return reasoning_content.
  3. 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