Introduction

In DeepSeek Harness (DSH), model capabilities are typically composed via routing through plugins. If the DeepSeek text-only model you are using cannot directly accept images, a common approach is to attach an additional vision model to convert the image into text first, and then pass it to the text model for inference.

dsh-llm-deepseek-vision encapsulates this process into a DSH plugin: it registers a DeepSeek (Vision) route, allowing the text-only model to continue inference based on the image description provided by the vision model, rather than processing image bytes directly.

Positioning

It is maintained by NagasakiSoyo-ui with an MIT license.

The plugin is installed via the npm package name @deepseek-ai/dsh-llm-deepseek-vision and declares a dsh.bundle manifest; it also supports integration into Harness for deployment after building from source.

How It Works

Below are its three core behaviors:

  1. Registers an additional provider route: deepseek-vision.

  2. Advertises deepseek-v4-flash and deepseek-v4-pro externally, and declares:

input: [text, image]
  1. Routes based on request content:
  • Without images: Zero-overhead pass-through to the text inference route, defaulting to opencode-go.
  • With images: The configured vision model describes each image into text, then hands it to the text-only model for inference based on the description.

By default, both text inference and image description run on OpenCode Zen Go (opencode-go).

Installation

First, install the plugin via npm package and mount it to the web profile:

dsh plugin --profile web add @deepseek-ai/dsh-llm-deepseek-vision

If you need to build from source, you can follow the steps below:

git clone https://github.com/NagasakiSoyo-ui/dsh-llm-deepseek-vision.git
cd dsh-llm-deepseek-vision
npm install
npm run build

After building, integrate the plugin artifact into your Harness deployment.

Mounting to Composite Configuration

Add the plugin entry in the profile’s cordis.patch.yml and configure the vision route, delegate route, and model directory:

- id: llm-deepseek-vision
  name: '@deepseek-ai/dsh-llm-deepseek-vision'
  config:
    visionProvider: opencode-go
    visionModel: <support [text, image] vision model id>
    visionPrompt: <description instructions for the vision model>
    visionMaxTokens: 1024
    delegateProvider: opencode-go
    models:
      - id: deepseek-v4-flash
      - id: deepseek-v4-pro

visionProvider points to the provider route that provides the vision model; delegateProvider points to the route that actually performs text inference. models determines the model directory exposed by this deepseek-vision route.

Prerequisites

Before enabling, confirm the following points:

  1. The vision provider route must exist, and its model must be declared to support image input:
input: [text, image]
  1. The vision model must be resolvable by its provider route.

  2. The vision model’s provider must be able to complete authentication and configure the corresponding apiKeyEnv in the credential store.

  3. Harness must mount the persistent attachment service; dsh-base already includes this service.

  4. If a pi-ai route entry is manually declared but without inference capability declared, it will be treated as “toggleable thinking,” i.e., sending off.

Usage

After the above configuration, select DeepSeek (Vision) in the model selector, then select deepseek-v4-flash or deepseek-v4-pro, and then attach an image in the message.

If you wish it to be the default model for the session, you can set:

agent-default-model:
  provider: deepseek-vision
  model: deepseek-v4-flash

Configuration Items

Field Description
visionProvider Provides the provider route for the vision model
visionModel Vision model id, must support [text, image] input
visionPrompt Description instructions given to the vision model
visionMaxTokens Output limit for a single visual description
delegateProvider Route that receives text requests and performs inference
models Model directory advertised by this route

Applicable Scenarios and Notes

Suitable for scenarios where you already have a DSH text-only model but need the model to answer based on images. The plugin does not alter the inference model itself but converts images into text descriptions within the request chain, then passes them to the text model for inference.

Notes before use:

  1. Visual descriptions are regenerated every round; if the session log contains images, descriptions are regenerated every round.

  2. Replaying a vision round will re-run the vision model.

  3. The plugin runs with the permissions of the current dsh process; check the source code and license before installing.

  4. The DSH plugin ecosystem emphasizes “everything is a plugin”; the plugin directory is an independent site with no official affiliation to DeepSeek / Huanfang and should not be understood as an official app store.

Conclusion

The value of dsh-llm-deepseek-vision lies in decoupling “seeing” and “reasoning”: the vision model is responsible for describing images into text, while the text-only model is responsible for completing inference based on these descriptions.

Directory page link (from plugin link, please confirm yourself before use):

https://www.skillhub.cn/plugins/NagasakiSoyo-ui/dsh-llm-deepseek-vision

GitHub repository:

https://github.com/NagasakiSoyo-ui/dsh-llm-deepseek-vision