diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 691a288..0f49767 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -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. diff --git a/.github/brand/capture-hero-run.mts b/.github/brand/capture-hero-run.mts index 0682d8d..9c15c8f 100644 --- a/.github/brand/capture-hero-run.mts +++ b/.github/brand/capture-hero-run.mts @@ -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> = { - '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, diff --git a/.github/workflows/release-bot.yml b/.github/workflows/release-bot.yml index 0bfd40c..3ed1527 100644 --- a/.github/workflows/release-bot.yml +++ b/.github/workflows/release-bot.yml @@ -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. diff --git a/CHANGELOG.md b/CHANGELOG.md index b63d0f6..62ff954 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/docs/providers.md b/docs/providers.md index 145fbb1..2346538 100644 --- a/docs/providers.md +++ b/docs/providers.md @@ -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`. | diff --git a/packages/core/examples/basics/single-agent.ts b/packages/core/examples/basics/single-agent.ts index 642a16b..24ec7d2 100644 --- a/packages/core/examples/basics/single-agent.ts +++ b/packages/core/examples/basics/single-agent.ts @@ -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. */ diff --git a/packages/core/examples/basics/structured-input.ts b/packages/core/examples/basics/structured-input.ts index c729c04..1144703 100644 --- a/packages/core/examples/basics/structured-input.ts +++ b/packages/core/examples/basics/structured-input.ts @@ -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. diff --git a/packages/core/examples/basics/task-pipeline.ts b/packages/core/examples/basics/task-pipeline.ts index f9e07ed..01fd65d 100644 --- a/packages/core/examples/basics/task-pipeline.ts +++ b/packages/core/examples/basics/task-pipeline.ts @@ -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. */ diff --git a/packages/core/examples/integrations/express-customer-support/README.md b/packages/core/examples/integrations/express-customer-support/README.md index daa365f..6ce025b 100644 --- a/packages/core/examples/integrations/express-customer-support/README.md +++ b/packages/core/examples/integrations/express-customer-support/README.md @@ -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: diff --git a/packages/core/examples/integrations/express-customer-support/index.ts b/packages/core/examples/integrations/express-customer-support/index.ts index fed5688..941d52a 100644 --- a/packages/core/examples/integrations/express-customer-support/index.ts +++ b/packages/core/examples/integrations/express-customer-support/index.ts @@ -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') diff --git a/packages/core/examples/integrations/mcp-open-design.ts b/packages/core/examples/integrations/mcp-open-design.ts index 46d0f1e..7d6c2f0 100644 --- a/packages/core/examples/integrations/mcp-open-design.ts +++ b/packages/core/examples/integrations/mcp-open-design.ts @@ -124,7 +124,7 @@ const DEFAULT_WORKER_MODEL: Record = { 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' diff --git a/packages/core/examples/integrations/with-engram/research-team.ts b/packages/core/examples/integrations/with-engram/research-team.ts index 2950f42..eb893b5 100644 --- a/packages/core/examples/integrations/with-engram/research-team.ts +++ b/packages/core/examples/integrations/with-engram/research-team.ts @@ -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 diff --git a/packages/core/examples/integrations/with-tencentdb-memory/README.md b/packages/core/examples/integrations/with-tencentdb-memory/README.md index 6e9afe4..4ecb424 100644 --- a/packages/core/examples/integrations/with-tencentdb-memory/README.md +++ b/packages/core/examples/integrations/with-tencentdb-memory/README.md @@ -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: diff --git a/packages/core/examples/integrations/with-vercel-ai-sdk/app/api/chat/route.ts b/packages/core/examples/integrations/with-vercel-ai-sdk/app/api/chat/route.ts index 08ddde3..8fd6f6f 100644 --- a/packages/core/examples/integrations/with-vercel-ai-sdk/app/api/chat/route.ts +++ b/packages/core/examples/integrations/with-vercel-ai-sdk/app/api/chat/route.ts @@ -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', diff --git a/packages/core/examples/providers/deepseek.ts b/packages/core/examples/providers/deepseek.ts index 5b0536a..705e217 100644 --- a/packages/core/examples/providers/deepseek.ts +++ b/packages/core/examples/providers/deepseek.ts @@ -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, diff --git a/packages/core/src/cli/oma.ts b/packages/core/src/cli/oma.ts index c813a1b..2891c15 100644 --- a/packages/core/src/cli/oma.ts +++ b/packages/core/src/cli/oma.ts @@ -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 = { 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', diff --git a/packages/core/src/llm/deepseek.ts b/packages/core/src/llm/deepseek.ts index b729107..280947b 100644 --- a/packages/core/src/llm/deepseek.ts +++ b/packages/core/src/llm/deepseek.ts @@ -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. diff --git a/packages/core/tests/e2e/deepseek-e2e.test.ts b/packages/core/tests/e2e/deepseek-e2e.test.ts index 9afcfe7..c4b4fc0 100644 --- a/packages/core/tests/e2e/deepseek-e2e.test.ts +++ b/packages/core/tests/e2e/deepseek-e2e.test.ts @@ -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() diff --git a/packages/core/tests/semantic-routing.test.ts b/packages/core/tests/semantic-routing.test.ts index 9ff74df..92ace8e 100644 --- a/packages/core/tests/semantic-routing.test.ts +++ b/packages/core/tests/semantic-routing.test.ts @@ -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({ diff --git a/packages/create-oma-app/template/_env.example b/packages/create-oma-app/template/_env.example index 6ee9f09..92f57ec 100644 --- a/packages/create-oma-app/template/_env.example +++ b/packages/create-oma-app/template/_env.example @@ -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_... diff --git a/packages/release-bot/src/orchestrator.ts b/packages/release-bot/src/orchestrator.ts index 57aa28c..08f0c9d 100644 --- a/packages/release-bot/src/orchestrator.ts +++ b/packages/release-bot/src/orchestrator.ts @@ -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