Introduction¶
DeepSeek Harness (DSH) adopts a plugin-based architecture. When using the ctx.web binding for Web search, developers often encounter protocol incompatibility or API key misconfiguration issues. The dsh-web-search-litellm plugin provides a standard Web search solution through a LiteLLM proxy and the OpenAI Responses protocol.
Plugin Overview¶
This is the Web search provider for DeepSeek Harness ctx.web. It invokes the web_search capability of DeepSeek’s native server through a LiteLLM proxy and returns answers with real source URLs.
Installation¶
Install the plugin using the official DSH command:
dsh plugin --profile <name> add dsh-web-search-litellm
Configuration and Enablement¶
After installation, enable this provider in the profile configuration file cordis.patch.yml.
- Configure the
searchProviderfor thewebbinding incordis.patch.yml:
- id: web
config:
searchProvider: litellm-responses
- Optional: disable the default Anthropic protocol provider:
- id: web-search-deepseek
disabled: true
- Restart the profile after installation to make the configuration take effect.
Core Features¶
- Protocol support: Uses the OpenAI Responses protocol (
POST {baseURL}/responses); the Anthropic protocol is not supported. - Credential reuse: Reuses the existing
LITELLM_API_KEYcredential; no new API key configuration is required. - Server-side search: Search tasks are executed on DeepSeek’s official server and do not depend on any third-party search service.
- Visual configuration: All settings can be fully configured in the Harness settings UI.
Configuration Options¶
This provider supports the following configuration options. Unset options are automatically derived from the currently active model configuration.
| Option | Default/Source | Description |
|---|---|---|
baseURL |
Derived ($LITELLM_SEARCH_BASE_URL) |
LiteLLM proxy root address; the request path appends /responses |
apiKeyEnv |
Derived (LITELLM_API_KEY) |
Environment variable name for the API key, resolved on each search |
model |
Derived (current active model ID) | Preferred search model ID |
candidateModels |
Derived (model list of active provider) | Candidate model pool used for racing search |
maxTokens |
4096 |
Maximum output tokens for a single search request |
timeoutMs |
60000 |
Connection and idle timeout for the response stream |
How It Works¶
- The model invokes the
web_searchtool. - The plugin sends a POST request to
{baseURL}/responseswithtools: [{"type": "web_search"}]andstream: true. - The LiteLLM proxy forwards the request to DeepSeek; the server executes the search and streams back the results.
- The plugin parses the SSE stream, extracts
output_textas content, and aggregates URLs withaction: open_pageinweb_search_callintosources.
Notes¶
- Billing: Each search consumes one DeepSeek model call.
- Session compatibility: The plugin does not append custom session events, ensuring compatibility with older Harness versions.
- Result format: DeepSeek documentation does not explicitly support a structured
includefield; therefore, results contain only URLs, not titles or summaries. - Permissions: The plugin runs as the current DSH process; it is recommended to review the source code and license before installation.
Ecosystem Information¶
- Maintainer: yunxiyang
- License: MIT
- Repository: https://github.com/yunxiyang/dsh-web-search-litellm
- Directory: https://www.skillhub.cn/plugins/yunxiyang/dsh-web-search-litellm