mirror of
https://github.com/JackChen-me/open-multi-agent.git
synced 2026-10-19 01:29:57 -05:00
fix: name the current DeepSeek Flash model instead of a retired alias (#598)
DeepSeek retired the V4-Flash model and named the current generation `deepseek-flash`, with no version in the name. `deepseek-v4-flash` is still accepted, but DeepSeek documents it as a temporary compatibility name and already serves those requests from V4.1-Flash. The repository handed that name to users in the places most likely to be copied: the `oma` CLI default for `provider: 'deepseek'`, the adapter JSDoc that ships in the type declarations, the provider table in docs, the scaffolder env template, and every DeepSeek example. A copied name that the vendor calls temporary has an expiry date the reader cannot see. The provider table and the adapter JSDoc also stated that `deepseek-v4-flash` resolves to DeepSeek-V4-Flash-0731. That model is retired, so the sentence described a routing that no longer happens. Two corrections of the same kind travel with it. The thinking-mode note claimed the V4 models run at `high` effort, but the adapter forwards whatever effort the caller passes and sets none itself, so the claim is dropped rather than restated. Three `examples/basics` headers offered `deepseek-chat`, which DeepSeek retired outright on 2026-07-24 and which no longer resolves at all. The release bot moves to the same name. Callers that pass an explicit model are unaffected, and the old name keeps working for as long as DeepSeek accepts it. Left unchanged on purpose: `bench/config.json`, whose values are frozen controls for an already-run benchmark; the AtlasCloud pages, whose IDs come from that vendor's own model library; and the changelog history.
This commit is contained in:
1 parent
a04c7bfb0f
commit
cc2a83395a
21 files changed
+65
-43
No files matched your search
@@ -45,7 +45,7 @@ Core E2E tests are separate because they require `RUN_E2E=1` and real provider c
|
||||
npm run test:e2e
|
||||
```
|
||||
|
||||
Set `DEEPSEEK_E2E_MODEL` to override the DeepSeek canary model; it defaults to `deepseek-v4-flash`.
|
||||
Set `DEEPSEEK_E2E_MODEL` to override the DeepSeek canary model; it defaults to `deepseek-flash`.
|
||||
|
||||
The `Provider Canary` workflow runs the DeepSeek suite daily and can also be started manually. Maintainers must configure `DEEPSEEK_API_KEY` as a GitHub Actions repository secret; never add a provider credential to source files or workflow YAML.
|
||||
|
||||
|
||||
@@ -36,13 +36,13 @@ import type { AgentConfig, OrchestratorEvent } from '../../packages/core/src/typ
|
||||
const MAX_TITLE_CHARS = 28
|
||||
|
||||
// DeepSeek published list prices in USD per token (api-docs.deepseek.com/quick_start/pricing),
|
||||
// using the standard cache-miss input rate. OMA ships no price table by design — callers own
|
||||
// provider pricing — so this hero capture (the caller) prices its own usage and injects it onto
|
||||
// each LLM span below, lighting up the viewer's Cost metric, per-span cost, and per-task cost
|
||||
// roll-up with honest numbers instead of "Not recorded".
|
||||
// using the off-peak cache-miss input rate, verified 2026-09-12. OMA ships no price table by
|
||||
// design — callers own provider pricing — so this hero capture (the caller) prices its own usage
|
||||
// and injects it onto each LLM span below, lighting up the viewer's Cost metric, per-span cost,
|
||||
// and per-task cost roll-up with honest numbers instead of "Not recorded".
|
||||
const DEEPSEEK_PRICE_PER_TOKEN: Readonly<Record<string, { input: number; output: number }>> = {
|
||||
'deepseek-v4-flash': { input: 0.14 / 1e6, output: 0.28 / 1e6 },
|
||||
'deepseek-v4-pro': { input: 0.435 / 1e6, output: 0.87 / 1e6 },
|
||||
'deepseek-flash': { input: 0.15 / 1e6, output: 0.6 / 1e6 },
|
||||
'deepseek-v4-pro': { input: 0.66 / 1e6, output: 1.98 / 1e6 },
|
||||
}
|
||||
const MODEL_ATTR_KEYS = ['oma.llm.model', 'oma.model', 'gen_ai.request.model', 'gen_ai.response.model']
|
||||
const INPUT_TOKEN_ATTR_KEYS = ['oma.usage.input_tokens', 'gen_ai.usage.input_tokens']
|
||||
@@ -126,7 +126,7 @@ ${PATH_RULE}`,
|
||||
|
||||
const backendDev: AgentConfig = {
|
||||
name: 'backend-dev',
|
||||
model: 'deepseek-v4-flash',
|
||||
model: 'deepseek-flash',
|
||||
provider: 'deepseek',
|
||||
systemPrompt: `You are a Node.js developer. Read the contract at ${OUTPUT_DIR}/CONTRACT.md, then
|
||||
implement the JWT sign/verify module using only Node's built-in \`crypto\` (no external packages).
|
||||
@@ -140,7 +140,7 @@ ${PATH_RULE}`,
|
||||
|
||||
const qaEngineer: AgentConfig = {
|
||||
name: 'qa-engineer',
|
||||
model: 'deepseek-v4-flash',
|
||||
model: 'deepseek-flash',
|
||||
provider: 'deepseek',
|
||||
systemPrompt: `You are a QA engineer. Read ONLY the contract at ${OUTPUT_DIR}/CONTRACT.md (the
|
||||
implementation runs in parallel and is not available to you). Write a plain-Node test script
|
||||
@@ -170,7 +170,7 @@ ${PATH_RULE}`,
|
||||
|
||||
const reviewer: AgentConfig = {
|
||||
name: 'reviewer',
|
||||
model: 'deepseek-v4-flash',
|
||||
model: 'deepseek-flash',
|
||||
provider: 'deepseek',
|
||||
systemPrompt: `You are a senior reviewer. Read exactly these three files with file_read:
|
||||
${OUTPUT_DIR}/auth.js, ${OUTPUT_DIR}/auth.test.js, and ${OUTPUT_DIR}/THREAT-MODEL.md. Then RETURN
|
||||
@@ -214,7 +214,7 @@ function handleProgress(event: OrchestratorEvent): void {
|
||||
// ---------------------------------------------------------------------------
|
||||
const capture = new DashboardTraceCaptureSink()
|
||||
const orchestrator = new OpenMultiAgent({
|
||||
defaultModel: 'deepseek-v4-flash',
|
||||
defaultModel: 'deepseek-flash',
|
||||
defaultProvider: 'deepseek',
|
||||
maxConcurrency: 3, // let the three parallel specialists genuinely overlap in the waterfall
|
||||
onProgress: handleProgress,
|
||||
|
||||
@@ -73,7 +73,7 @@ jobs:
|
||||
env:
|
||||
DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}
|
||||
RELEASE_BOT_GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}
|
||||
RELEASE_BOT_MODEL: deepseek-v4-flash
|
||||
RELEASE_BOT_MODEL: deepseek-flash
|
||||
run: node packages/release-bot/dist/cli.js prepare-pr
|
||||
|
||||
# A weekly job that fails only into the Actions tab is a job nobody reads.
|
||||
|
||||
@@ -36,6 +36,20 @@
|
||||
lost lease stops the run at the dispatch gate, and a worker that lost its
|
||||
lease reports the fence failure rather than success. Runs with no run store
|
||||
configured are unchanged.
|
||||
- The `oma` CLI default model for `provider: 'deepseek'` is now `deepseek-flash`
|
||||
(DeepSeek-V4.1-Flash), replacing `deepseek-v4-flash`. DeepSeek retired the
|
||||
V4-Flash model and now serves `deepseek-v4-flash` requests from V4.1-Flash, so
|
||||
a CLI run without `--model` is already answered by V4.1; the new default names
|
||||
the model it actually gets rather than a compatibility alias DeepSeek
|
||||
describes as temporary. The old name still resolves, and library users that
|
||||
pass an explicit `model` are unaffected. Provider docs, the adapter JSDoc, the
|
||||
scaffolder env template, and the DeepSeek examples moved to the same name;
|
||||
three `examples/basics` headers that still named the long-retired
|
||||
`deepseek-chat` moved with them.
|
||||
- The DeepSeek adapter's JSDoc no longer states that thinking runs at `high`
|
||||
effort. The adapter forwards whatever effort the caller passes and sets none
|
||||
itself, and DeepSeek documents only that thinking is on by default. The
|
||||
correction ships in the published `.d.ts`; runtime behavior is unchanged.
|
||||
|
||||
## 1.18.0 - 2026-09-04
|
||||
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ The framework ships a wired-in provider name for each of these. Set `provider` a
|
||||
| Azure OpenAI | `provider: 'azure-openai'` | `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_ENDPOINT` | `gpt-4` | Optional `AZURE_OPENAI_API_VERSION`, `AZURE_OPENAI_DEPLOYMENT`. |
|
||||
| GitHub Copilot | `provider: 'copilot'` | `GITHUB_COPILOT_TOKEN` (falls back to `GITHUB_TOKEN`) | `gpt-4o` | Custom token-exchange flow on top of OpenAI protocol. |
|
||||
| Grok (xAI) | `provider: 'grok'` | `XAI_API_KEY` | `grok-4` | OpenAI-compatible; endpoint is `api.x.ai/v1`. |
|
||||
| DeepSeek | `provider: 'deepseek'` | `DEEPSEEK_API_KEY` | `deepseek-v4-flash` | OpenAI-compatible Chat Completions. `deepseek-v4-flash` resolves to DeepSeek-V4-Flash-0731 and `deepseek-v4-pro` to DeepSeek-V4-Pro-0813. Both support 1M context, 384K max output, and enable thinking by default at `high` effort (opt out with `thinking: { enabled: false }`). Both endpoints also offer DeepSeek's native Responses API, while OMA's built-in adapter uses Chat Completions. Legacy `deepseek-chat` / `deepseek-reasoner` were retired on 2026-07-24. |
|
||||
| DeepSeek | `provider: 'deepseek'` | `DEEPSEEK_API_KEY` | `deepseek-flash` | OpenAI-compatible Chat Completions. `deepseek-flash` is DeepSeek-V4.1-Flash and `deepseek-v4-pro` is DeepSeek-V4-Pro-0813. `deepseek-flash` carries no version because DeepSeek moves the name to the current Flash generation; the older `deepseek-v4-flash` is still accepted but that model is retired and those requests are served by V4.1-Flash. Both support 1M context, 384K max output, and enable thinking by default (opt out with `thinking: { enabled: false }`). Both endpoints also offer DeepSeek's native Responses API, while OMA's built-in adapter uses Chat Completions. Legacy `deepseek-chat` / `deepseek-reasoner` were retired on 2026-07-24. |
|
||||
| Doubao (Volcengine) | `provider: 'doubao'` | `ARK_API_KEY` | `doubao-seed-1-8-251228` | OpenAI-compatible. ByteDance Volcengine Ark endpoint `https://ark.cn-beijing.volces.com/api/v3`. See [`providers/doubao`](../packages/core/examples/providers/doubao.ts). |
|
||||
| Hunyuan (Tencent MaaS / TokenHub) | `provider: 'hunyuan'` | `HUNYUAN_API_KEY` | `hy3-preview` | OpenAI-compatible. Default endpoint `https://tokenhub.tencentmaas.com/v1` (Tencent's current platform; `sk-...` keys, Hunyuan 3 models). Tool calling verified on `hy3-preview`. See [`providers/hunyuan`](../packages/core/examples/providers/hunyuan.ts). |
|
||||
| Hunyuan (legacy Tencent Cloud) | `provider: 'hunyuan'` + `HUNYUAN_BASE_URL` | `HUNYUAN_API_KEY` | `hunyuan-turbos-latest` | Legacy endpoint `https://api.hunyuan.cloud.tencent.com/v1` (console.cloud.tencent.com/hunyuan key; separate key namespace). Tencent has announced this platform is being retired (sales stop 2026-06-30, full shutdown 2026-09-30). Set `HUNYUAN_BASE_URL=https://api.hunyuan.cloud.tencent.com/v1` to target it until then. Tool calling verified on `hunyuan-turbos` and `hunyuan-functioncall`. |
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
* ANTHROPIC_API_KEY env var must be set (default provider). To use any
|
||||
* other built-in provider, set OMA_PROVIDER and OMA_MODEL plus that
|
||||
* provider's key, for example:
|
||||
* OMA_PROVIDER=deepseek OMA_MODEL=deepseek-chat DEEPSEEK_API_KEY=...
|
||||
* OMA_PROVIDER=deepseek OMA_MODEL=deepseek-flash DEEPSEEK_API_KEY=...
|
||||
* OMA_PROVIDER=openai OMA_MODEL=gpt-5.4 OPENAI_API_KEY=...
|
||||
* See docs/providers.md for the full provider and env var list.
|
||||
*/
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
* ANTHROPIC_API_KEY env var must be set (default provider). To use any
|
||||
* other built-in provider, set OMA_PROVIDER and OMA_MODEL plus that
|
||||
* provider's key, for example:
|
||||
* OMA_PROVIDER=deepseek OMA_MODEL=deepseek-chat DEEPSEEK_API_KEY=...
|
||||
* OMA_PROVIDER=deepseek OMA_MODEL=deepseek-flash DEEPSEEK_API_KEY=...
|
||||
* OMA_PROVIDER=openai OMA_MODEL=gpt-5.4 OPENAI_API_KEY=...
|
||||
* The model must accept image input. See docs/providers.md for the full
|
||||
* provider and env var list.
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* ANTHROPIC_API_KEY env var must be set (default provider). To use any
|
||||
* other built-in provider, set OMA_PROVIDER and OMA_MODEL plus that
|
||||
* provider's key, for example:
|
||||
* OMA_PROVIDER=deepseek OMA_MODEL=deepseek-chat DEEPSEEK_API_KEY=...
|
||||
* OMA_PROVIDER=deepseek OMA_MODEL=deepseek-flash DEEPSEEK_API_KEY=...
|
||||
* OMA_PROVIDER=openai OMA_MODEL=gpt-5.4 OPENAI_API_KEY=...
|
||||
* See docs/providers.md for the full provider and env var list.
|
||||
*/
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
An Express REST API that wraps OMA's `runTasks()` explicit-DAG pipeline behind a single `POST /tickets` endpoint. A three-agent pipeline runs on every request:
|
||||
|
||||
1. **classifier** (`deepseek-v4-flash`) — categorises the ticket and assigns urgency
|
||||
1. **classifier** (`deepseek-flash`) — categorises the ticket and assigns urgency
|
||||
2. **drafter** (`deepseek-v4-pro`) — writes a polished customer-facing reply (depends on classifier)
|
||||
3. **qa-reviewer** (`deepseek-v4-pro`) — reviews the draft for tone and accuracy (depends on classifier + drafter)
|
||||
|
||||
@@ -76,7 +76,7 @@ Exits 0 and prints the structured response on success, exits 1 on failure.
|
||||
| `MINIMAX_API_KEY` | — | Required if `minimax` is selected for any agent |
|
||||
| `AZURE_OPENAI_API_KEY` | — | Required if `azure-openai` is selected for any agent |
|
||||
| `CLASSIFIER_PROVIDER` | `deepseek` | Provider for the classifier agent |
|
||||
| `CLASSIFIER_MODEL` | `deepseek-v4-flash` | Model for the classifier agent |
|
||||
| `CLASSIFIER_MODEL` | `deepseek-flash` | Model for the classifier agent |
|
||||
| `DRAFTER_PROVIDER` | `deepseek` | Provider for the drafter agent |
|
||||
| `DRAFTER_MODEL` | `deepseek-v4-pro` | Model for the drafter agent |
|
||||
| `QA_PROVIDER` | `deepseek` | Provider for the QA reviewer agent |
|
||||
@@ -87,7 +87,7 @@ Supported `*_PROVIDER` values with startup key validation: `anthropic`, `openai`
|
||||
|
||||
## Swapping providers
|
||||
|
||||
The defaults run the whole pipeline on DeepSeek — `deepseek-v4-flash` for the cheap classifier, `deepseek-v4-pro` for the drafter and QA reviewer — so one `DEEPSEEK_API_KEY` runs everything. Each agent's provider and model are independently overridable via env vars, so you can move any tier to another provider.
|
||||
The defaults run the whole pipeline on DeepSeek — `deepseek-flash` for the cheap classifier, `deepseek-v4-pro` for the drafter and QA reviewer — so one `DEEPSEEK_API_KEY` runs everything. Each agent's provider and model are independently overridable via env vars, so you can move any tier to another provider.
|
||||
|
||||
Keep the cheap classifier on DeepSeek but run the drafter and QA reviewer on Anthropic:
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ function pickAgent(envPrefix: string, defaultProvider: SupportedProvider, defaul
|
||||
return { provider, model }
|
||||
}
|
||||
|
||||
const classifierCfg = pickAgent('CLASSIFIER', 'deepseek', 'deepseek-v4-flash')
|
||||
const classifierCfg = pickAgent('CLASSIFIER', 'deepseek', 'deepseek-flash')
|
||||
const drafterCfg = pickAgent('DRAFTER', 'deepseek', 'deepseek-v4-pro')
|
||||
const qaCfg = pickAgent('QA', 'deepseek', 'deepseek-v4-pro')
|
||||
|
||||
|
||||
@@ -124,7 +124,7 @@ const DEFAULT_WORKER_MODEL: Record<string, string> = {
|
||||
anthropic: 'claude-haiku-4-5',
|
||||
gemini: 'gemini-2.5-flash',
|
||||
openai: 'gpt-5',
|
||||
deepseek: 'deepseek-v4-flash',
|
||||
deepseek: 'deepseek-flash',
|
||||
}
|
||||
const workerModel = process.env.AGENT_MODEL?.trim() || DEFAULT_WORKER_MODEL[workerProvider] || 'claude-haiku-4-5'
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
* AGENT_PROVIDER=grok AGENT_MODEL=grok-3 XAI_API_KEY=... ENGRAM_INVITE_KEY=ek_live_... npx tsx packages/core/examples/integrations/with-engram/research-team.ts
|
||||
*
|
||||
* # DeepSeek
|
||||
* AGENT_PROVIDER=deepseek AGENT_MODEL=deepseek-v4-flash DEEPSEEK_API_KEY=... ENGRAM_INVITE_KEY=ek_live_... npx tsx packages/core/examples/integrations/with-engram/research-team.ts
|
||||
* AGENT_PROVIDER=deepseek AGENT_MODEL=deepseek-flash DEEPSEEK_API_KEY=... ENGRAM_INVITE_KEY=ek_live_... npx tsx packages/core/examples/integrations/with-engram/research-team.ts
|
||||
*
|
||||
* Prerequisites:
|
||||
* - API key env var for your chosen provider
|
||||
|
||||
@@ -80,7 +80,7 @@ EOF
|
||||
# LLM used by TDAM's extraction pipeline (any OpenAI-compatible endpoint).
|
||||
export TDAI_LLM_BASE_URL="https://api.deepseek.com/v1"
|
||||
export TDAI_LLM_API_KEY="sk-..."
|
||||
export TDAI_LLM_MODEL="deepseek-v4-flash"
|
||||
export TDAI_LLM_MODEL="deepseek-flash"
|
||||
export TDAI_DATA_DIR="$PWD/tdai-data" # where SQLite memories live
|
||||
|
||||
npx tsx node_modules/@tencentdb-agent-memory/memory-tencentdb/src/gateway/server.ts
|
||||
@@ -184,7 +184,7 @@ distilled facts and injects them into the agents' prompts.
|
||||
|
||||
Real output from the verification setup: TDAM v0.3.6 Gateway (npm package,
|
||||
`everyNConversations: 1`, Bearer auth enabled end-to-end), agents and
|
||||
extraction both on `deepseek-v4-flash`.
|
||||
extraction both on `deepseek-flash`.
|
||||
|
||||
First run — no memories yet; captures distill into one episodic memory:
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ export const maxDuration = 360
|
||||
|
||||
// --- DeepSeek via OpenAI-compatible API ---
|
||||
const DEEPSEEK_BASE_URL = 'https://api.deepseek.com'
|
||||
const DEEPSEEK_MODEL = 'deepseek-v4-flash'
|
||||
const DEEPSEEK_MODEL = 'deepseek-flash'
|
||||
|
||||
const deepseek = createOpenAICompatible({
|
||||
name: 'deepseek',
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Multi-Agent Team Collaboration with DeepSeek
|
||||
*
|
||||
* Three specialized agents (architect, developer, reviewer) collaborate via `runTeam()`
|
||||
* to build a minimal Express.js REST API. Every agent uses a DeepSeek V4 model.
|
||||
* to build a minimal Express.js REST API. Every agent uses a DeepSeek model.
|
||||
*
|
||||
* Run:
|
||||
* npx tsx packages/core/examples/providers/deepseek.ts
|
||||
@@ -11,8 +11,8 @@
|
||||
* DEEPSEEK_API_KEY environment variable must be set.
|
||||
*
|
||||
* Available models:
|
||||
* deepseek-v4-flash — DeepSeek-V4-Flash-0731 (1M context)
|
||||
* deepseek-v4-pro — DeepSeek-V4-Pro-0813 (1M context)
|
||||
* deepseek-flash — DeepSeek-V4.1-Flash (1M context)
|
||||
* deepseek-v4-pro — DeepSeek-V4-Pro-0813 (1M context)
|
||||
*/
|
||||
|
||||
import { join } from 'node:path'
|
||||
@@ -41,7 +41,7 @@ Output concise plans in markdown — no unnecessary prose.`,
|
||||
|
||||
const developer: AgentConfig = {
|
||||
name: 'developer',
|
||||
model: 'deepseek-v4-flash',
|
||||
model: 'deepseek-flash',
|
||||
provider: 'deepseek',
|
||||
systemPrompt: `You are a TypeScript/Node.js developer. You implement what the architect specifies.
|
||||
Write clean, runnable code with proper error handling. Use the tools to write files and run tests.`,
|
||||
@@ -52,7 +52,7 @@ Write clean, runnable code with proper error handling. Use the tools to write fi
|
||||
|
||||
const reviewer: AgentConfig = {
|
||||
name: 'reviewer',
|
||||
model: 'deepseek-v4-flash',
|
||||
model: 'deepseek-flash',
|
||||
provider: 'deepseek',
|
||||
systemPrompt: `You are a senior code reviewer. Review code for correctness, security, and clarity.
|
||||
Provide a structured review with: LGTM items, suggestions, and any blocking issues.
|
||||
@@ -99,7 +99,7 @@ function handleProgress(event: OrchestratorEvent): void {
|
||||
// Orchestrate
|
||||
// ---------------------------------------------------------------------------
|
||||
const orchestrator = new OpenMultiAgent({
|
||||
defaultModel: 'deepseek-v4-flash',
|
||||
defaultModel: 'deepseek-flash',
|
||||
defaultProvider: 'deepseek',
|
||||
maxConcurrency: 1, // sequential for readable output
|
||||
onProgress: handleProgress,
|
||||
|
||||
@@ -186,7 +186,7 @@ export const PROVIDER_REFERENCE: ReadonlyArray<{
|
||||
{ id: 'grok', apiKeyEnv: ['XAI_API_KEY'], baseUrlSupported: true },
|
||||
{ id: 'minimax', apiKeyEnv: ['MINIMAX_API_KEY'], baseUrlSupported: true, notes: 'Global endpoint: https://api.minimax.io/v1 (default). China endpoint: https://api.minimaxi.com/v1. Set MINIMAX_BASE_URL to choose, or pass baseURL in agent config.' },
|
||||
{ id: 'mimo', apiKeyEnv: ['MIMO_API_KEY', 'MIMO_BASE_URL'], baseUrlSupported: true, notes: 'OpenAI-compatible endpoint at https://api.xiaomimimo.com/v1 by default. Token Plan keys (tp-...) require the cluster base URL from your subscription page; set MIMO_BASE_URL or pass baseURL in agent config.' },
|
||||
{ id: 'deepseek', apiKeyEnv: ['DEEPSEEK_API_KEY'], baseUrlSupported: true, notes: 'OpenAI-compatible endpoint at https://api.deepseek.com/v1. Models: deepseek-v4-flash (DeepSeek-V4-Flash-0731, default), deepseek-v4-pro (DeepSeek-V4-Pro-0813); both support 1M context and enable thinking by default. Legacy deepseek-chat/deepseek-reasoner were retired on 2026-07-24.' },
|
||||
{ id: 'deepseek', apiKeyEnv: ['DEEPSEEK_API_KEY'], baseUrlSupported: true, notes: 'OpenAI-compatible endpoint at https://api.deepseek.com/v1. Models: deepseek-flash (DeepSeek-V4.1-Flash, default), deepseek-v4-pro (DeepSeek-V4-Pro-0813); both support 1M context and enable thinking by default. The retired deepseek-v4-flash name is still accepted and served by V4.1-Flash. Legacy deepseek-chat/deepseek-reasoner were retired on 2026-07-24.' },
|
||||
{ id: 'doubao', apiKeyEnv: ['ARK_API_KEY'], baseUrlSupported: true, notes: 'OpenAI-compatible Volcengine Ark endpoint at https://ark.cn-beijing.volces.com/api/v3. Set provider to doubao and choose a model available to your Ark key.' },
|
||||
{ id: 'hunyuan', apiKeyEnv: ['HUNYUAN_API_KEY', 'HUNYUAN_BASE_URL'], baseUrlSupported: true, notes: 'OpenAI-compatible. Defaults to the current Tencent MaaS / TokenHub endpoint https://tokenhub.tencentmaas.com/v1 (sk-... keys, models like hy3-preview). The legacy Tencent Cloud endpoint https://api.hunyuan.cloud.tencent.com/v1 (models like hunyuan-turbos-latest) is being retired by Tencent (shutdown 2026-09-30); target it via HUNYUAN_BASE_URL until then. Tool calling verified on hy3-preview / hunyuan-turbos / hunyuan-functioncall.' },
|
||||
{ id: 'qiniu', apiKeyEnv: ['QINIU_API_KEY'], baseUrlSupported: true, notes: 'OpenAI-compatible endpoint at https://api.qnaigc.com/v1. Set provider to qiniu and choose a model available to your key.' },
|
||||
@@ -743,7 +743,7 @@ const DEFAULT_MODEL_HINT: Record<SupportedProvider, string> = {
|
||||
copilot: 'gpt-4o',
|
||||
minimax: 'MiniMax-M3',
|
||||
mimo: 'mimo-v2.5-pro',
|
||||
deepseek: 'deepseek-v4-flash',
|
||||
deepseek: 'deepseek-flash',
|
||||
doubao: 'doubao-seed-1-8-251228',
|
||||
hunyuan: 'hy3-preview',
|
||||
qiniu: 'deepseek-v3',
|
||||
|
||||
@@ -9,17 +9,21 @@ import type { EgressPolicy, LLMChatOptions, ThinkingConfig } from '../types.js'
|
||||
import { OpenAIAdapter } from './openai.js'
|
||||
|
||||
/**
|
||||
* LLM adapter for DeepSeek V4 models. Both models support a 1M context window.
|
||||
* LLM adapter for DeepSeek models. Both support a 1M context window.
|
||||
*
|
||||
* Thread-safe. Can be shared across agents.
|
||||
*
|
||||
* Usage:
|
||||
* provider: 'deepseek'
|
||||
* model: 'deepseek-v4-flash' (DeepSeek-V4-Flash-0731)
|
||||
* model: 'deepseek-flash' (DeepSeek-V4.1-Flash)
|
||||
* or 'deepseek-v4-pro' (DeepSeek-V4-Pro-0813)
|
||||
*
|
||||
* V4 models enable thinking by default at `high` effort. Pass
|
||||
* `thinking: { enabled: false }` to opt out.
|
||||
* `deepseek-flash` carries no version because DeepSeek moves the name to the
|
||||
* current Flash generation. `deepseek-v4-flash` is still accepted, but that
|
||||
* model is retired and those requests are served by V4.1-Flash.
|
||||
*
|
||||
* Both models enable thinking by default. Pass `thinking: { enabled: false }`
|
||||
* to opt out.
|
||||
*
|
||||
* Legacy `deepseek-chat` and `deepseek-reasoner` were retired by DeepSeek on
|
||||
* 2026-07-24.
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*
|
||||
* Skipped by default. Run with: npm run test:e2e
|
||||
* Requires: DEEPSEEK_API_KEY environment variable
|
||||
* Optional: DEEPSEEK_E2E_MODEL (defaults to deepseek-v4-flash)
|
||||
* Optional: DEEPSEEK_E2E_MODEL (defaults to deepseek-flash)
|
||||
*/
|
||||
import { beforeAll, describe, it, expect } from 'vitest'
|
||||
import { z } from 'zod'
|
||||
@@ -18,7 +18,7 @@ const describeE2E = process.env['RUN_E2E'] && process.env['DEEPSEEK_API_KEY']
|
||||
|
||||
describeE2E('DeepSeekAdapter E2E', () => {
|
||||
let adapter: DeepSeekAdapter
|
||||
const model = process.env['DEEPSEEK_E2E_MODEL'] ?? 'deepseek-v4-flash'
|
||||
const model = process.env['DEEPSEEK_E2E_MODEL'] ?? 'deepseek-flash'
|
||||
|
||||
beforeAll(() => {
|
||||
adapter = new DeepSeekAdapter()
|
||||
|
||||
@@ -256,12 +256,12 @@ describe('LLMTaskProfiler', () => {
|
||||
}
|
||||
const taskProfiler = new LLMTaskProfiler({
|
||||
adapter: mockAdapter,
|
||||
model: 'deepseek-v4-flash',
|
||||
model: 'deepseek-flash',
|
||||
})
|
||||
|
||||
await taskProfiler.profile({
|
||||
goal: 'Summarize this note.',
|
||||
roster: [{ name: 'alpha', model: 'deepseek-v4-flash' }],
|
||||
roster: [{ name: 'alpha', model: 'deepseek-flash' }],
|
||||
})
|
||||
|
||||
expect(mockAdapter.chat.mock.calls[0]?.[1]).toMatchObject({
|
||||
|
||||
@@ -9,7 +9,7 @@ OPENAI_API_KEY=sk-...
|
||||
# DeepSeek:
|
||||
# OPENAI_API_KEY=sk-...
|
||||
# OPENAI_BASE_URL=https://api.deepseek.com
|
||||
# OMA_MODEL=deepseek-v4-flash
|
||||
# OMA_MODEL=deepseek-flash
|
||||
#
|
||||
# Groq:
|
||||
# OPENAI_API_KEY=gsk_...
|
||||
|
||||
@@ -23,7 +23,11 @@ import {
|
||||
} from './schema.js'
|
||||
import { createReleaseEvidenceTools } from './tools.js'
|
||||
|
||||
const DEFAULT_MODEL = 'deepseek-v4-flash'
|
||||
// DeepSeek-V4.1-Flash. The name carries no version because DeepSeek moves it
|
||||
// to the current Flash generation; the previous `deepseek-v4-flash` is a
|
||||
// retired alias that the API still accepts and already serves from V4.1, so
|
||||
// pinning the alias bought no stability and only hid which model ran.
|
||||
const DEFAULT_MODEL = 'deepseek-flash'
|
||||
const DEFAULT_RUN_TIMEOUT_MS = 30 * 60_000
|
||||
const DEFAULT_MAX_TOKEN_BUDGET = 500_000
|
||||
|
||||
|
||||
Reference in new issue
Block a user