@namzu/deepseek 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,10 +1,25 @@
1
1
  # @namzu/deepseek
2
2
 
3
+ ## 2.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - dd0f7eb: Reasoning effort now works on the native driver: it is sent as `reasoning_effort` (the vendor's documented field), so `NAMZU_EFFORT_LEVEL=max` no longer errors. `minimal` goes to `low`, `medium` and `xhigh` to `high`, `ultra` to `max` (the vendor's own mapping), and a level the model's `effort.supported_levels` lacks falls to the nearest offered one. `none` turns thinking off; `reasoningEffortLevelsFor` and `reasoningEffortDefaultFor` publish the menu and default. New export `resolveDeepSeekEffort`; `assertEffortUnsupported` is deprecated and no longer called. A call that sets `temperature` and friends with an effort other than `none` is still refused.
8
+ - dd0f7eb: `deepseek-flash`, the vendor's current Flash id, is now in the catalogue and accepts images; `deepseek-v4-pro` stays text only, and `deepseek-v4-flash` and `deepseek-v4-flash-vision-exp` stay as the legacy names the vendor still serves. The driver reads `context_window` and `max_output_tokens` from the models endpoint when the vendor returns them and falls back to the documented 1,000,000 / 384,000, so compaction is measured against the real window instead of a 64,000-token guess. An image sent to a model that does not take one now names `deepseek-flash` in the error. The documented numbers are offered only on the vendor's own host (a custom `baseURL` gets what the listing reports), and `DEEPSEEK_CAPABILITIES` no longer declares `maxOutputTokens` driver-wide; the summary trigger is unchanged at 967,000 because the reserve is capped at 20,000 anyway.
9
+
10
+ ## 2.2.0
11
+
12
+ ### Minor Changes
13
+
14
+ - d8059dc: A response stream that closes without the provider's own end-of-response marker (a final finish reason, `message_stop`, a completed event, `done`) is now reported as a retryable network failure. Before, it ended quietly: a text answer that was cut short was accepted as complete, and a cut tool call reached the model as a cut-off call. A stream that ends with its marker is unchanged.
15
+
16
+ This also reaches servers that speak the OpenAI wire (`@namzu/openai` is the driver behind several hosted and local endpoints): one that closes a finished answer with only `[DONE]` and never sends a finish reason used to read as a finished answer and is now retried, and after the retries are spent the turn pauses. If your server behaves that way, make it send a finish reason on the last chunk. If you test a driver with a fake stream, end it with the marker.
17
+
3
18
  ## 2.1.0
4
19
 
5
20
  ### Minor Changes
6
21
 
7
- - 9e63191: The terminal now retries a model call that fails for a reason that may pass (a dropped connection, a 5xx, an overloaded server, a rate limit with a short wait) the way the reference terminal does, instead of stopping after three tries. It tries ten times, waits from half a second doubling to thirty-two seconds with a little added on top, treats a `Retry-After` as a minimum, gives up on a wait longer than a minute (the reply then pauses and Enter tries again), and believes a provider that says `x-should-retry: false`. A reply cut off by a dropped connection starts over and the half-drawn text is taken back. While it waits, the Working row reads `Retrying in 5s · attempt 2/10` and counts down; Esc interrupts it. Nothing needs changing in your setup.
22
+ - 9e63191: The terminal now retries a model call that fails for a reason that may pass (a dropped connection, a 5xx, an overloaded server, a rate limit with a short wait) instead of stopping after three tries. It tries ten times, waits from half a second doubling to thirty-two seconds with a little added on top, treats a `Retry-After` as a minimum, gives up on a wait longer than a minute (the reply then pauses and Enter tries again), and believes a provider that says `x-should-retry: false`. A reply cut off by a dropped connection starts over and the half-drawn text is taken back. While it waits, the Working row reads `Retrying in 5s · attempt 2/10` and counts down; Esc interrupts it. Nothing needs changing in your setup.
8
23
 
9
24
  SDK: `ProviderRetryConfig` gains optional `jitter` (`'full'` or `'proportional'`), `retryAfter` (`'exact'` or `'floor'`) and `retryMidStream`, `ProviderRetryNotice` and the `provider_retry` event gain an optional `restart`, `ProviderRequestError` gains `shouldRetry` (only `false` is acted on), `providerHttpError` takes `shouldRetry`, and `providerVendorError` reads `x-should-retry`. No default changed: `maxRetries` is still 3, jitter still full, `Retry-After` still exact, a stream that failed after output is still not retried unless a host sets `retryMidStream` (a host that does must drop what the failed attempt showed when it sees `restart`; the turn drops its own copy). Hosts that want the terminal's numbers pass them in `query({ retry })`.
10
25
 
package/README.md CHANGED
@@ -50,11 +50,11 @@ registerDeepSeek() // once, at startup
50
50
  const { provider } = ProviderRegistry.create({
51
51
  type: 'deepseek',
52
52
  apiKey: process.env.DEEPSEEK_API_KEY ?? '',
53
- model: 'deepseek-v4-flash',
53
+ model: 'deepseek-flash',
54
54
  })
55
55
 
56
56
  for await (const chunk of provider.chatStream({
57
- model: 'deepseek-v4-flash',
57
+ model: 'deepseek-flash',
58
58
  messages: [{ role: 'user', content: 'Is 91 prime?' }],
59
59
  })) {
60
60
  if (chunk.delta.reasoning?.text) process.stderr.write(chunk.delta.reasoning.text)
@@ -62,13 +62,29 @@ for await (const chunk of provider.chatStream({
62
62
  }
63
63
  ```
64
64
 
65
- The built-in catalogue offers `deepseek-v4-flash`, `deepseek-v4-pro`, and
66
- `deepseek-v4-flash-vision-exp`. `deepseek-chat` and `deepseek-reasoner` were
65
+ The built-in catalogue offers `deepseek-flash` (the current Flash model, which
66
+ takes images), `deepseek-v4-pro` (text only), and the legacy names
67
+ `deepseek-v4-flash` and `deepseek-v4-flash-vision-exp`, which the vendor still
68
+ serves from the Flash model. `deepseek-chat` and `deepseek-reasoner` were
67
69
  discontinued on 2026-07-24 and are not aliases.
68
70
 
71
+ ## Context window
72
+
73
+ The vendor documents a 1M-token context and a 384K-token output cap for every
74
+ current model (one row for `deepseek-flash` and `deepseek-v4-pro` on
75
+ https://api-docs.deepseek.com/quick_start/pricing). The driver asks the models
76
+ endpoint first and uses its `context_window` and `max_output_tokens` when the
77
+ vendor returns them; those two fields are optional there, so the documented
78
+ limits are only the fallback for the ids the driver lists, and only on the vendor's own host: behind a custom `baseURL` the driver
79
+ offers just what the listing reports. The runtime measures
80
+ compaction against that window, so the first summary is due at 967,000 tokens,
81
+ not at the 32,000 that a 64,000-token guess produced. An id the driver neither
82
+ lists nor was told about is left to the SDK's table, which keeps a conservative
83
+ 64,000 for it.
84
+
69
85
  ## Image input
70
86
 
71
- Only `deepseek-v4-flash-vision-exp` accepts images. User attachments are sent
87
+ `deepseek-flash` and the legacy `deepseek-v4-flash-vision-exp` accept images. User attachments are sent
72
88
  as ordered `image_url` data-URL parts. Images returned by tools keep their
73
89
  `role: "tool"` result and follow it in a separate user image message, so the
74
90
  tool-call/result sequence remains valid. PNG, JPEG, WebP and GIF are accepted.
@@ -91,9 +107,24 @@ portable assistant/tool history and omits the foreign native reasoning field.
91
107
 
92
108
  Turn it off per call with `thinking: { type: 'disabled' }`.
93
109
 
94
- Two parameters are **refused** rather than sent, because the vendor accepts
95
- them and applies neither: `effort`, and the sampling parameters while thinking
96
- is on. Both refusals can be opted out of in the driver configuration.
110
+ ### Effort
111
+
112
+ Effort rides on `reasoning_effort`, the field the vendor documents, beside
113
+ `thinking`. The vendor offers `low`, `high` and `max` (default `high`); the
114
+ models endpoint's `effort.supported_levels` and `default_level` are read once
115
+ per session and published through `reasoningEffortLevelsFor` and
116
+ `reasoningEffortDefaultFor` (plus `none`, which turns thinking off). Namzu's
117
+ wider vocabulary goes through the vendor's own mapping: `minimal` to `low`,
118
+ `medium` and `xhigh` to `high`, `ultra` to `max`. If the model's menu lacks the
119
+ mapped level, the nearest offered one is sent, the lower one on a tie
120
+ (`resolveDeepSeekEffort` says which). `none` is sent as
121
+ `thinking: { type: 'disabled' }`, and an explicit `thinking: disabled` wins over
122
+ a level, as it does at the vendor. Without `maxTokens` the vendor's default
123
+ output is 64K in thinking mode and 128K at `max`.
124
+
125
+ The sampling parameters (`temperature`, `topP` and the two penalties) are
126
+ **refused** while thinking is on, because the vendor accepts them and applies
127
+ none; `samplingInThinkingMode: 'ignore'` sends them anyway.
97
128
 
98
129
  ## Documentation
99
130
 
package/dist/client.d.ts CHANGED
@@ -11,7 +11,7 @@ export declare const DEEPSEEK_CAPABILITIES: ProviderCapabilities;
11
11
  * below that turns on "thinking is enabled" has to read it this way, or it
12
12
  * applies to explicit callers only and misses the common case entirely.
13
13
  */
14
- export declare function thinkingEnabled(thinking: ThinkingConfig | undefined): boolean;
14
+ export declare function thinkingEnabled(thinking: ThinkingConfig | undefined, effort?: ReasoningEffort): boolean;
15
15
  /**
16
16
  * Refuse a sampling parameter that thinking mode will discard.
17
17
  *
@@ -39,8 +39,33 @@ export declare function assertSamplingUsable(params: ChatCompletionParams, mode:
39
39
  * The vendor's Anthropic-format endpoint does take `reasoning.effort`. A
40
40
  * driver built on that wire could honour this; this one is built on Chat
41
41
  * Completions and says so.
42
+ *
43
+ * @deprecated The driver now carries effort on `reasoning_effort`, the field
44
+ * the vendor's Chat Completions reference documents (the field measured here
45
+ * earlier was `thinking.effort`, which the vendor never defined). Nothing in
46
+ * this package calls it any more; use {@link resolveDeepSeekEffort}.
42
47
  */
43
48
  export declare function assertEffortUnsupported(params: ChatCompletionParams): void;
49
+ /** The effort levels the vendor's pages list, in the order they rank. */
50
+ declare const VENDOR_EFFORT_ORDER: readonly ["low", "high", "max"];
51
+ type VendorEffort = (typeof VENDOR_EFFORT_ORDER)[number];
52
+ export interface DeepSeekEffortResolution {
53
+ /** `none` turns thinking off; otherwise the level sent as `reasoning_effort`. */
54
+ readonly level: VendorEffort | 'none';
55
+ /** True when the level asked for is not the level sent. */
56
+ readonly mapped: boolean;
57
+ }
58
+ /**
59
+ * Turn a requested effort into the one this model offers.
60
+ *
61
+ * `none` is thinking off. A level the model offers is sent as is. Any other
62
+ * level goes through the vendor's documented mapping (`medium` and `xhigh`
63
+ * to `high`, `minimal` to `low`, `ultra` to `max`); if the model's menu lacks
64
+ * that target, the nearest offered level is used, the lower one on a tie, and
65
+ * `mapped` says so. It never throws: a level this model does not offer must
66
+ * degrade to its neighbour rather than fail a run that asked for more thought.
67
+ */
68
+ export declare function resolveDeepSeekEffort(requested: ReasoningEffort, offered?: readonly string[]): DeepSeekEffortResolution;
44
69
  export declare function toDeepSeekMessages(messages: ChatCompletionParams['messages'], targetRoute: ProviderRoute): ChatCompletionMessageParam[];
45
70
  export declare function toDeepSeekTools(params: ChatCompletionParams): ChatCompletionTool[] | undefined;
46
71
  export declare class DeepSeekProvider implements LLMProvider {
@@ -50,13 +75,38 @@ export declare class DeepSeekProvider implements LLMProvider {
50
75
  private client;
51
76
  private defaultModel?;
52
77
  private samplingMode;
78
+ private vendorLimits;
79
+ private readonly documentedLimits;
53
80
  constructor(config: DeepSeekConfig);
54
81
  private resolveModel;
55
- /** This Chat Completions endpoint explicitly carries no effort control. */
56
- reasoningEffortLevelsFor(_model: string): readonly ReasoningEffort[];
82
+ /** Last models-endpoint answer, once a turn has fetched it; the sync menus read this. */
83
+ private vendorSnapshot;
84
+ /**
85
+ * `none` (thinking off) plus the levels the models endpoint lists for the
86
+ * model, or the vendor's documented low, high and max until it has been read.
87
+ */
88
+ reasoningEffortLevelsFor(model: string): readonly ReasoningEffort[];
89
+ /** The level a request without one runs at: the endpoint's `default_level`, else `high`. */
90
+ reasoningEffortDefaultFor(model: string): ReasoningEffort;
57
91
  chatStream(params: ChatCompletionParams): AsyncIterable<StreamChunk>;
92
+ /**
93
+ * What the vendor's models endpoint says about each model it lists. The
94
+ * endpoint may leave `context_window` and `max_output_tokens` out (both are
95
+ * optional there), so an absent field is simply not an answer. A failed
96
+ * request is not cached: the next turn asks again.
97
+ */
98
+ private fetchVendorLimits;
99
+ /**
100
+ * The window the runtime measures compaction against: what the vendor's
101
+ * models endpoint reports for the id when it reports one, else the
102
+ * documented limit of a model this driver lists, else `undefined` rather
103
+ * than a guess, which leaves the SDK's table to answer for it. The vendor
104
+ * answers first and the built-in table is only the fallback.
105
+ */
106
+ resolveContextWindow(model: string, signal?: AbortSignal): Promise<number | undefined>;
58
107
  probeCredential(signal?: AbortSignal): Promise<void>;
59
108
  listModels(signal?: AbortSignal): Promise<ModelInfo[]>;
60
109
  healthCheck(): Promise<boolean>;
61
110
  }
111
+ export {};
62
112
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,oBAAoB,EAGpB,WAAW,EACX,SAAS,EAET,oBAAoB,EACpB,aAAa,EAEb,eAAe,EACf,WAAW,EACX,cAAc,EAId,MAAM,YAAY,CAAA;AAUnB,OAAO,KAAK,EACX,0BAA0B,EAC1B,kBAAkB,EAElB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,EAAE,oBASnC,CAAA;AA6GD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO,CAE7E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,oBAAoB,EAC5B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GACvB,IAAI,CAQN;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAK1E;AAuGD,wBAAgB,kBAAkB,CACjC,QAAQ,EAAE,oBAAoB,CAAC,UAAU,CAAC,EAC1C,WAAW,EAAE,aAAa,GACxB,0BAA0B,EAAE,CA6E9B;AA0ED,wBAAgB,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,kBAAkB,EAAE,GAAG,SAAS,CAe9F;AAED,qBAAa,gBAAiB,YAAW,WAAW;IACnD,QAAQ,CAAC,EAAE,cAAa;IACxB,QAAQ,CAAC,IAAI,cAAa;IAC1B,QAAQ,CAAC,YAAY,uBAAwB;IAE7C,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,OAAO,CAAC,YAAY,CAAqB;gBAE7B,MAAM,EAAE,cAAc;IAoBlC,OAAO,CAAC,YAAY;IAUpB,2EAA2E;IAC3E,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,eAAe,EAAE;IAI7D,UAAU,CAAC,MAAM,EAAE,oBAAoB,GAAG,aAAa,CAAC,WAAW,CAAC;IA6KrE,eAAe,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD,UAAU,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAuBtD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAQrC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,oBAAoB,EAGpB,WAAW,EACX,SAAS,EAET,oBAAoB,EACpB,aAAa,EAEb,eAAe,EACf,WAAW,EACX,cAAc,EAId,MAAM,YAAY,CAAA;AAUnB,OAAO,KAAK,EACX,0BAA0B,EAC1B,kBAAkB,EAElB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAYhD,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,EAAE,oBASnC,CAAA;AAiID;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC9B,QAAQ,EAAE,cAAc,GAAG,SAAS,EACpC,MAAM,CAAC,EAAE,eAAe,GACtB,OAAO,CAGT;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,oBAAoB,EAC5B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GACvB,IAAI,CAQN;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAK1E;AAED,yEAAyE;AACzE,QAAA,MAAM,mBAAmB,iCAAkC,CAAA;AAC3D,KAAK,YAAY,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AAoBxD,MAAM,WAAW,wBAAwB;IACxC,iFAAiF;IACjF,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAAA;IACrC,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACxB;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACpC,SAAS,EAAE,eAAe,EAC1B,OAAO,GAAE,SAAS,MAAM,EAA0B,GAChD,wBAAwB,CAmB1B;AAuGD,wBAAgB,kBAAkB,CACjC,QAAQ,EAAE,oBAAoB,CAAC,UAAU,CAAC,EAC1C,WAAW,EAAE,aAAa,GACxB,0BAA0B,EAAE,CA6E9B;AA6HD,wBAAgB,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,kBAAkB,EAAE,GAAG,SAAS,CAe9F;AAED,qBAAa,gBAAiB,YAAW,WAAW;IACnD,QAAQ,CAAC,EAAE,cAAa;IACxB,QAAQ,CAAC,IAAI,cAAa;IAC1B,QAAQ,CAAC,YAAY,uBAAwB;IAE7C,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,YAAY,CAAC,CAAQ;IAC7B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAgD;IACpE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;gBAE9B,MAAM,EAAE,cAAc;IAqBlC,OAAO,CAAC,YAAY;IAUpB,yFAAyF;IACzF,OAAO,CAAC,cAAc,CAAuC;IAE7D;;;OAGG;IACH,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,eAAe,EAAE;IAQnE,4FAA4F;IAC5F,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe;IAOlD,UAAU,CAAC,MAAM,EAAE,oBAAoB,GAAG,aAAa,CAAC,WAAW,CAAC;IA6M3E;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAczB;;;;;;OAMG;IACG,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IActF,eAAe,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD,UAAU,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA8BtD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAQrC"}
package/dist/client.js CHANGED
@@ -1,5 +1,14 @@
1
1
  import { ProviderRequestError, attributionHeaders, isCallerAbortError, isProviderRequestError, providerVendorError, toToolResultBlocks, } from '@namzu/sdk';
2
2
  import OpenAI from 'openai';
3
+ /**
4
+ * What the vendor documents for every current model: a 1M-token context and a
5
+ * 384K-token output cap (https://api-docs.deepseek.com/quick_start/pricing,
6
+ * one row for `deepseek-flash` and `deepseek-v4-pro`; the retired
7
+ * `deepseek-v4-flash` and `deepseek-v4-flash-vision-exp` names are served by
8
+ * the Flash model at the same limits).
9
+ */
10
+ const CONTEXT_WINDOW_TOKENS = 1_000_000;
11
+ const MAX_OUTPUT_TOKENS = 384_000;
3
12
  /** Driver-level mapping capabilities; model input support is listed separately. */
4
13
  export const DEEPSEEK_CAPABILITIES = {
5
14
  supportsTools: true,
@@ -12,11 +21,32 @@ export const DEEPSEEK_CAPABILITIES = {
12
21
  supportsToolResultDocuments: false,
13
22
  };
14
23
  const DEFAULT_BASE_URL = 'https://api.deepseek.com';
24
+ /**
25
+ * The documented 1M / 384K only describe the vendor's own service. A gateway
26
+ * behind a custom `baseURL` may serve the same id at a smaller window, so
27
+ * there the documented numbers are not offered and only what the listing
28
+ * reports counts.
29
+ */
30
+ function isVendorBaseUrl(baseURL) {
31
+ if (!baseURL)
32
+ return true;
33
+ try {
34
+ return new URL(baseURL).hostname === new URL(DEFAULT_BASE_URL).hostname;
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ }
40
+ /** The current Flash id; it accepts images (https://api-docs.deepseek.com/quick_start/pricing). */
41
+ const CURRENT_FLASH_MODEL = 'deepseek-flash';
42
+ /** A retired name the vendor still serves; it routes to the Flash model, images included. */
15
43
  const VISION_MODEL = 'deepseek-v4-flash-vision-exp';
44
+ const IMAGE_MODELS = new Set([CURRENT_FLASH_MODEL, VISION_MODEL]);
16
45
  const TEXT_MODALITIES = Object.freeze(['text']);
17
46
  const VISION_MODALITIES = Object.freeze(['text', 'image']);
18
47
  const IMAGE_MEDIA_TYPES = new Set(['image/png', 'image/jpeg', 'image/webp', 'image/gif']);
19
48
  const KNOWN_MODELS = Object.freeze([
49
+ { id: CURRENT_FLASH_MODEL, name: 'DeepSeek-V4.1-Flash', inputModalities: VISION_MODALITIES },
20
50
  { id: 'deepseek-v4-flash', name: 'DeepSeek-V4-Flash', inputModalities: TEXT_MODALITIES },
21
51
  { id: 'deepseek-v4-pro', name: 'DeepSeek-V4-Pro', inputModalities: TEXT_MODALITIES },
22
52
  {
@@ -91,8 +121,9 @@ const SAMPLING_FIELDS = ['temperature', 'topP', 'frequencyPenalty', 'presencePen
91
121
  * below that turns on "thinking is enabled" has to read it this way, or it
92
122
  * applies to explicit callers only and misses the common case entirely.
93
123
  */
94
- export function thinkingEnabled(thinking) {
95
- return thinking?.type !== 'disabled';
124
+ export function thinkingEnabled(thinking, effort) {
125
+ // `none` is thinking off, and the driver sends it as `thinking: disabled`.
126
+ return thinking?.type !== 'disabled' && effort !== 'none';
96
127
  }
97
128
  /**
98
129
  * Refuse a sampling parameter that thinking mode will discard.
@@ -110,7 +141,7 @@ export function thinkingEnabled(thinking) {
110
141
  export function assertSamplingUsable(params, mode) {
111
142
  if (mode === 'ignore')
112
143
  return;
113
- if (!thinkingEnabled(params.thinking))
144
+ if (!thinkingEnabled(params.thinking, params.effort))
114
145
  return;
115
146
  const set = SAMPLING_FIELDS.filter((f) => params[f] !== undefined);
116
147
  if (set.length === 0)
@@ -130,12 +161,67 @@ export function assertSamplingUsable(params, mode) {
130
161
  * The vendor's Anthropic-format endpoint does take `reasoning.effort`. A
131
162
  * driver built on that wire could honour this; this one is built on Chat
132
163
  * Completions and says so.
164
+ *
165
+ * @deprecated The driver now carries effort on `reasoning_effort`, the field
166
+ * the vendor's Chat Completions reference documents (the field measured here
167
+ * earlier was `thinking.effort`, which the vendor never defined). Nothing in
168
+ * this package calls it any more; use {@link resolveDeepSeekEffort}.
133
169
  */
134
170
  export function assertEffortUnsupported(params) {
135
171
  if (params.effort === undefined)
136
172
  return;
137
173
  throw new Error(`DeepSeekProvider: \`effort\` is not carried by this endpoint. The vendor's Chat Completions wire validates \`thinking.type\` and ignores any effort sent beside it, so passing one through would change nothing and report success. Use \`thinking: { type: 'adaptive' | 'enabled' | 'disabled' }\` to steer this driver.`);
138
174
  }
175
+ /** The effort levels the vendor's pages list, in the order they rank. */
176
+ const VENDOR_EFFORT_ORDER = ['low', 'high', 'max'];
177
+ /** The menu used until the models endpoint says otherwise (levels low, high, max; default high). */
178
+ const DEFAULT_EFFORT_LEVELS = VENDOR_EFFORT_ORDER;
179
+ const DEFAULT_EFFORT = 'high';
180
+ /**
181
+ * The vendor's own mapping of Namzu's wider vocabulary onto what it accepts
182
+ * (https://api-docs.deepseek.com/guides/thinking_mode, "effort mapping").
183
+ */
184
+ const VENDOR_EFFORT_ALIASES = {
185
+ minimal: 'low',
186
+ low: 'low',
187
+ medium: 'high',
188
+ high: 'high',
189
+ xhigh: 'high',
190
+ max: 'max',
191
+ ultra: 'max',
192
+ };
193
+ /**
194
+ * Turn a requested effort into the one this model offers.
195
+ *
196
+ * `none` is thinking off. A level the model offers is sent as is. Any other
197
+ * level goes through the vendor's documented mapping (`medium` and `xhigh`
198
+ * to `high`, `minimal` to `low`, `ultra` to `max`); if the model's menu lacks
199
+ * that target, the nearest offered level is used, the lower one on a tie, and
200
+ * `mapped` says so. It never throws: a level this model does not offer must
201
+ * degrade to its neighbour rather than fail a run that asked for more thought.
202
+ */
203
+ export function resolveDeepSeekEffort(requested, offered = DEFAULT_EFFORT_LEVELS) {
204
+ if (requested === 'none')
205
+ return { level: 'none', mapped: false };
206
+ const menu = VENDOR_EFFORT_ORDER.filter((level) => offered.includes(level));
207
+ if (menu.length === 0)
208
+ return { level: VENDOR_EFFORT_ALIASES[requested], mapped: true };
209
+ if (menu.includes(requested)) {
210
+ return { level: requested, mapped: false };
211
+ }
212
+ const target = VENDOR_EFFORT_ALIASES[requested];
213
+ const wanted = VENDOR_EFFORT_ORDER.indexOf(target);
214
+ let best = menu[0];
215
+ let bestDistance = Number.POSITIVE_INFINITY;
216
+ for (const level of menu) {
217
+ const distance = Math.abs(VENDOR_EFFORT_ORDER.indexOf(level) - wanted);
218
+ if (distance < bestDistance) {
219
+ best = level;
220
+ bestDistance = distance;
221
+ }
222
+ }
223
+ return { level: best, mapped: true };
224
+ }
139
225
  function sameRoute(left, right) {
140
226
  return (left.providerId === right.providerId &&
141
227
  left.model === right.model &&
@@ -335,10 +421,45 @@ function assertDeepSeekRichContent(messages, model) {
335
421
  acceptImage(block.mediaType);
336
422
  }
337
423
  }
338
- if (hasImage && model !== VISION_MODEL) {
339
- throw new Error(`DeepSeekProvider: model '${model}' does not accept image input. Select '${VISION_MODEL}' or remove the images.`);
424
+ if (hasImage && !IMAGE_MODELS.has(model)) {
425
+ throw new Error(`DeepSeekProvider: model '${model}' does not accept image input. Select '${CURRENT_FLASH_MODEL}' or remove the images.`);
340
426
  }
341
427
  }
428
+ const positiveInteger = (value) => typeof value === 'number' && Number.isSafeInteger(value) && value > 0 ? value : undefined;
429
+ /** `context_window` and `max_output_tokens` on a models-endpoint entry, when present and sane. */
430
+ function readVendorLimits(entries) {
431
+ const out = new Map();
432
+ for (const entry of entries) {
433
+ if (typeof entry !== 'object' || entry === null)
434
+ continue;
435
+ const record = entry;
436
+ if (typeof record.id !== 'string')
437
+ continue;
438
+ const contextWindow = positiveInteger(record.context_window);
439
+ const maxOutputTokens = positiveInteger(record.max_output_tokens);
440
+ const effort = typeof record.effort === 'object' && record.effort !== null
441
+ ? record.effort
442
+ : undefined;
443
+ const effortLevels = Array.isArray(effort?.supported_levels)
444
+ ? effort.supported_levels.filter((level) => typeof level === 'string')
445
+ : undefined;
446
+ const effortDefault = typeof effort?.default_level === 'string' ? effort.default_level : undefined;
447
+ if (contextWindow === undefined &&
448
+ maxOutputTokens === undefined &&
449
+ (effortLevels === undefined || effortLevels.length === 0))
450
+ continue;
451
+ out.set(record.id, {
452
+ ...(contextWindow !== undefined ? { contextWindow } : {}),
453
+ ...(maxOutputTokens !== undefined ? { maxOutputTokens } : {}),
454
+ ...(effortLevels !== undefined && effortLevels.length > 0 ? { effortLevels } : {}),
455
+ ...(effortDefault !== undefined ? { effortDefault } : {}),
456
+ });
457
+ }
458
+ return out;
459
+ }
460
+ function isKnownModel(model) {
461
+ return KNOWN_MODELS.some((candidate) => candidate.id === model);
462
+ }
342
463
  function inputModalitiesFor(model) {
343
464
  return KNOWN_MODELS.find((candidate) => candidate.id === model)?.inputModalities;
344
465
  }
@@ -366,6 +487,8 @@ export class DeepSeekProvider {
366
487
  client;
367
488
  defaultModel;
368
489
  samplingMode;
490
+ vendorLimits;
491
+ documentedLimits;
369
492
  constructor(config) {
370
493
  if (!config.apiKey) {
371
494
  throw new Error('DeepSeek API key is required. Set DEEPSEEK_API_KEY env variable.');
@@ -384,6 +507,7 @@ export class DeepSeekProvider {
384
507
  };
385
508
  this.client = new OpenAI(clientOptions);
386
509
  this.defaultModel = config.model;
510
+ this.documentedLimits = isVendorBaseUrl(config.baseURL);
387
511
  this.samplingMode = config.samplingInThinkingMode ?? 'refuse';
388
512
  }
389
513
  resolveModel(params) {
@@ -393,16 +517,30 @@ export class DeepSeekProvider {
393
517
  }
394
518
  return model;
395
519
  }
396
- /** This Chat Completions endpoint explicitly carries no effort control. */
397
- reasoningEffortLevelsFor(_model) {
398
- return [];
520
+ /** Last models-endpoint answer, once a turn has fetched it; the sync menus read this. */
521
+ vendorSnapshot;
522
+ /**
523
+ * `none` (thinking off) plus the levels the models endpoint lists for the
524
+ * model, or the vendor's documented low, high and max until it has been read.
525
+ */
526
+ reasoningEffortLevelsFor(model) {
527
+ const listed = this.vendorSnapshot?.get(model)?.effortLevels;
528
+ const levels = VENDOR_EFFORT_ORDER.filter((level) => (listed ?? DEFAULT_EFFORT_LEVELS).includes(level));
529
+ return ['none', ...(levels.length > 0 ? levels : DEFAULT_EFFORT_LEVELS)];
530
+ }
531
+ /** The level a request without one runs at: the endpoint's `default_level`, else `high`. */
532
+ reasoningEffortDefaultFor(model) {
533
+ const stated = this.vendorSnapshot?.get(model)?.effortDefault;
534
+ return stated !== undefined && VENDOR_EFFORT_ORDER.includes(stated)
535
+ ? stated
536
+ : DEFAULT_EFFORT;
399
537
  }
400
538
  async *chatStream(params) {
401
539
  const model = this.resolveModel(params);
402
540
  const providerRoute = resolveDeepSeekRoute(model, params.providerRoute);
403
- assertEffortUnsupported(params);
404
541
  assertSamplingUsable(params, this.samplingMode);
405
- const sampling = thinkingEnabled(params.thinking)
542
+ const thinkingOn = thinkingEnabled(params.thinking, params.effort);
543
+ const sampling = thinkingOn
406
544
  ? {}
407
545
  : {
408
546
  temperature: params.temperature,
@@ -435,7 +573,27 @@ export class DeepSeekProvider {
435
573
  // Cast back to `typeof body` rather than to the SDK's parameter type: the
436
574
  // extra key rides along at runtime, and the literal `stream: true`
437
575
  // survives, which is what keeps the streaming overload selected.
438
- const withThinking = (params.thinking ? { ...body, thinking: { type: params.thinking.type } } : body);
576
+ //
577
+ // Effort rides on `reasoning_effort`, a sibling of `thinking`. An explicit
578
+ // `thinking.type` wins at the vendor, so `disabled` sends no level, and
579
+ // `none` is sent as `thinking: disabled` so the switch does not depend on
580
+ // that precedence. A level the model does not offer is mapped before it
581
+ // is sent (see `resolveDeepSeekEffort`).
582
+ const offered = this.vendorSnapshot?.get(model)?.effortLevels;
583
+ const resolved = params.effort !== undefined ? resolveDeepSeekEffort(params.effort, offered) : undefined;
584
+ const thinkingField = params.thinking?.type === 'disabled' || resolved?.level === 'none'
585
+ ? { type: 'disabled' }
586
+ : params.thinking
587
+ ? { type: params.thinking.type }
588
+ : undefined;
589
+ const effortField = resolved !== undefined && resolved.level !== 'none' && thinkingField?.type !== 'disabled'
590
+ ? { reasoning_effort: resolved.level }
591
+ : {};
592
+ const withThinking = {
593
+ ...body,
594
+ ...(thinkingField ? { thinking: thinkingField } : {}),
595
+ ...effortField,
596
+ };
439
597
  let stream;
440
598
  try {
441
599
  stream = await this.client.chat.completions.create(withThinking, {
@@ -455,6 +613,9 @@ export class DeepSeekProvider {
455
613
  let reasoningOpen = false;
456
614
  let reasoningContent = '';
457
615
  let replayStateEmitted = false;
616
+ // A choice reported why it stopped; a stream that closes without one was
617
+ // cut by the connection.
618
+ let finished = false;
458
619
  try {
459
620
  for await (const chunk of stream) {
460
621
  params.signal?.throwIfAborted();
@@ -474,6 +635,8 @@ export class DeepSeekProvider {
474
635
  ? mapFinishReason(choice.finish_reason)
475
636
  : undefined;
476
637
  const usage = chunk.usage ? parseUsage(chunk.usage) : undefined;
638
+ if (finishReason)
639
+ finished = true;
477
640
  if (reasoningText) {
478
641
  reasoningOpen = true;
479
642
  reasoningContent += reasoningText;
@@ -529,6 +692,13 @@ export class DeepSeekProvider {
529
692
  });
530
693
  }
531
694
  }
695
+ if (!finished) {
696
+ throw new ProviderRequestError({
697
+ kind: 'network',
698
+ providerId: 'deepseek',
699
+ detail: 'the connection closed before the response finished',
700
+ });
701
+ }
532
702
  // A turn that was all reasoning and no content — the model thought
533
703
  // and then stopped — still has to close its block.
534
704
  if (reasoningOpen) {
@@ -546,6 +716,46 @@ export class DeepSeekProvider {
546
716
  throw providerVendorError({ providerId: 'deepseek', error: err });
547
717
  }
548
718
  }
719
+ /**
720
+ * What the vendor's models endpoint says about each model it lists. The
721
+ * endpoint may leave `context_window` and `max_output_tokens` out (both are
722
+ * optional there), so an absent field is simply not an answer. A failed
723
+ * request is not cached: the next turn asks again.
724
+ */
725
+ fetchVendorLimits(signal) {
726
+ if (this.vendorLimits)
727
+ return this.vendorLimits;
728
+ const request = this.client.models.list(signal ? { signal } : undefined).then((page) => {
729
+ const limits = readVendorLimits(page.data);
730
+ this.vendorSnapshot = limits;
731
+ return limits;
732
+ });
733
+ this.vendorLimits = request;
734
+ request.catch(() => {
735
+ if (this.vendorLimits === request)
736
+ this.vendorLimits = undefined;
737
+ });
738
+ return request;
739
+ }
740
+ /**
741
+ * The window the runtime measures compaction against: what the vendor's
742
+ * models endpoint reports for the id when it reports one, else the
743
+ * documented limit of a model this driver lists, else `undefined` rather
744
+ * than a guess, which leaves the SDK's table to answer for it. The vendor
745
+ * answers first and the built-in table is only the fallback.
746
+ */
747
+ async resolveContextWindow(model, signal) {
748
+ signal?.throwIfAborted();
749
+ let reported;
750
+ try {
751
+ reported = (await this.fetchVendorLimits(signal)).get(model)?.contextWindow;
752
+ }
753
+ catch {
754
+ // The listing is a refinement; a turn must not fail because it is down.
755
+ signal?.throwIfAborted();
756
+ }
757
+ return (reported ?? (this.documentedLimits && isKnownModel(model) ? CONTEXT_WINDOW_TOKENS : undefined));
758
+ }
549
759
  async probeCredential(signal) {
550
760
  signal?.throwIfAborted();
551
761
  await this.client.models.list(signal ? { signal } : undefined);
@@ -558,6 +768,7 @@ export class DeepSeekProvider {
558
768
  const models = new Map();
559
769
  for (const model of page.data)
560
770
  models.set(model.id, { id: model.id, name: model.id });
771
+ const vendor = readVendorLimits(page.data);
561
772
  // The preview model is part of the source adapter's verified default
562
773
  // catalogue but may lag the account listing endpoint. A successful list
563
774
  // therefore augments rather than erases the known selectable catalogue.
@@ -566,8 +777,14 @@ export class DeepSeekProvider {
566
777
  }
567
778
  return [...models.values()].map((model) => {
568
779
  const inputModalities = inputModalitiesFor(model.id);
780
+ const known = this.documentedLimits && isKnownModel(model.id);
781
+ const reported = vendor.get(model.id);
782
+ const contextWindow = reported?.contextWindow ?? (known ? CONTEXT_WINDOW_TOKENS : undefined);
783
+ const maxOutputTokens = reported?.maxOutputTokens ?? (known ? MAX_OUTPUT_TOKENS : undefined);
569
784
  return {
570
785
  ...model,
786
+ ...(contextWindow !== undefined ? { contextWindow } : {}),
787
+ ...(maxOutputTokens !== undefined ? { maxOutputTokens } : {}),
571
788
  ...(inputModalities !== undefined ? { inputModalities } : {}),
572
789
  supportsToolUse: true,
573
790
  supportsStreaming: true,
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -14,6 +14,7 @@ declare module '@namzu/sdk' {
14
14
  * Pass `{ replace: true }` to override.
15
15
  */
16
16
  export declare function registerDeepSeek(options?: RegisterOptions): void;
17
- export { DEEPSEEK_CAPABILITIES, DeepSeekProvider, assertEffortUnsupported, assertSamplingUsable, thinkingEnabled, toDeepSeekMessages, toDeepSeekTools, } from './client.js';
17
+ export { DEEPSEEK_CAPABILITIES, DeepSeekProvider, assertEffortUnsupported, assertSamplingUsable, resolveDeepSeekEffort, thinkingEnabled, toDeepSeekMessages, toDeepSeekTools, } from './client.js';
18
+ export type { DeepSeekEffortResolution } from './client.js';
18
19
  export type { DeepSeekConfig, DeepSeekProviderConfig } from './types.js';
19
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAA;AAEnE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAKxD,OAAO,QAAQ,YAAY,CAAC;IAC3B,UAAU,sBAAsB;QAC/B,QAAQ,EAAE,sBAAsB,CAAA;KAChC;CACD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAEhE;AAED,OAAO,EACN,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,eAAe,GACf,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAA;AAEnE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAKxD,OAAO,QAAQ,YAAY,CAAC;IAC3B,UAAU,sBAAsB;QAC/B,QAAQ,EAAE,sBAAsB,CAAA;KAChC;CACD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAEhE;AAED,OAAO,EACN,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,eAAe,GACf,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAC3D,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -11,5 +11,5 @@ import { DEEPSEEK_CAPABILITIES, DeepSeekProvider } from './client.js';
11
11
  export function registerDeepSeek(options) {
12
12
  ProviderRegistry.register('deepseek', DeepSeekProvider, DEEPSEEK_CAPABILITIES, options);
13
13
  }
14
- export { DEEPSEEK_CAPABILITIES, DeepSeekProvider, assertEffortUnsupported, assertSamplingUsable, thinkingEnabled, toDeepSeekMessages, toDeepSeekTools, } from './client.js';
14
+ export { DEEPSEEK_CAPABILITIES, DeepSeekProvider, assertEffortUnsupported, assertSamplingUsable, resolveDeepSeekEffort, thinkingEnabled, toDeepSeekMessages, toDeepSeekTools, } from './client.js';
15
15
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAwB,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAYrE;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAyB;IACzD,gBAAgB,CAAC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAA;AACxF,CAAC;AAED,OAAO,EACN,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,eAAe,GACf,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAwB,MAAM,YAAY,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAYrE;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAyB;IACzD,gBAAgB,CAAC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAA;AACxF,CAAC;AAED,OAAO,EACN,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,eAAe,GACf,MAAM,aAAa,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@namzu/deepseek",
3
- "version": "2.1.0",
3
+ "version": "2.3.0",
4
4
  "description": "DeepSeek LLM provider for @namzu/sdk. Chat Completions with streaming, tool use, and thinking mode mapped onto the kernel's reasoning blocks.",
5
5
  "license": "FSL-1.1-MIT",
6
6
  "engines": {
@@ -57,7 +57,7 @@
57
57
  "@types/node": "^22.19.17",
58
58
  "typescript": "^5.5.0",
59
59
  "vitest": "^4.1.11",
60
- "@namzu/sdk": "^51.1.0"
60
+ "@namzu/sdk": "^60.0.0"
61
61
  },
62
62
  "scripts": {
63
63
  "build": "tsc --build",
package/src/client.ts CHANGED
@@ -31,6 +31,16 @@ import type {
31
31
  } from 'openai/resources/chat/completions'
32
32
  import type { DeepSeekConfig } from './types.js'
33
33
 
34
+ /**
35
+ * What the vendor documents for every current model: a 1M-token context and a
36
+ * 384K-token output cap (https://api-docs.deepseek.com/quick_start/pricing,
37
+ * one row for `deepseek-flash` and `deepseek-v4-pro`; the retired
38
+ * `deepseek-v4-flash` and `deepseek-v4-flash-vision-exp` names are served by
39
+ * the Flash model at the same limits).
40
+ */
41
+ const CONTEXT_WINDOW_TOKENS = 1_000_000
42
+ const MAX_OUTPUT_TOKENS = 384_000
43
+
34
44
  /** Driver-level mapping capabilities; model input support is listed separately. */
35
45
  export const DEEPSEEK_CAPABILITIES: ProviderCapabilities = {
36
46
  supportsTools: true,
@@ -44,11 +54,31 @@ export const DEEPSEEK_CAPABILITIES: ProviderCapabilities = {
44
54
  }
45
55
 
46
56
  const DEFAULT_BASE_URL = 'https://api.deepseek.com'
57
+
58
+ /**
59
+ * The documented 1M / 384K only describe the vendor's own service. A gateway
60
+ * behind a custom `baseURL` may serve the same id at a smaller window, so
61
+ * there the documented numbers are not offered and only what the listing
62
+ * reports counts.
63
+ */
64
+ function isVendorBaseUrl(baseURL: string | undefined): boolean {
65
+ if (!baseURL) return true
66
+ try {
67
+ return new URL(baseURL).hostname === new URL(DEFAULT_BASE_URL).hostname
68
+ } catch {
69
+ return false
70
+ }
71
+ }
72
+ /** The current Flash id; it accepts images (https://api-docs.deepseek.com/quick_start/pricing). */
73
+ const CURRENT_FLASH_MODEL = 'deepseek-flash'
74
+ /** A retired name the vendor still serves; it routes to the Flash model, images included. */
47
75
  const VISION_MODEL = 'deepseek-v4-flash-vision-exp'
76
+ const IMAGE_MODELS: ReadonlySet<string> = new Set([CURRENT_FLASH_MODEL, VISION_MODEL])
48
77
  const TEXT_MODALITIES = Object.freeze(['text'] as const)
49
78
  const VISION_MODALITIES = Object.freeze(['text', 'image'] as const)
50
79
  const IMAGE_MEDIA_TYPES = new Set(['image/png', 'image/jpeg', 'image/webp', 'image/gif'])
51
80
  const KNOWN_MODELS = Object.freeze([
81
+ { id: CURRENT_FLASH_MODEL, name: 'DeepSeek-V4.1-Flash', inputModalities: VISION_MODALITIES },
52
82
  { id: 'deepseek-v4-flash', name: 'DeepSeek-V4-Flash', inputModalities: TEXT_MODALITIES },
53
83
  { id: 'deepseek-v4-pro', name: 'DeepSeek-V4-Pro', inputModalities: TEXT_MODALITIES },
54
84
  {
@@ -158,8 +188,12 @@ const SAMPLING_FIELDS = ['temperature', 'topP', 'frequencyPenalty', 'presencePen
158
188
  * below that turns on "thinking is enabled" has to read it this way, or it
159
189
  * applies to explicit callers only and misses the common case entirely.
160
190
  */
161
- export function thinkingEnabled(thinking: ThinkingConfig | undefined): boolean {
162
- return thinking?.type !== 'disabled'
191
+ export function thinkingEnabled(
192
+ thinking: ThinkingConfig | undefined,
193
+ effort?: ReasoningEffort,
194
+ ): boolean {
195
+ // `none` is thinking off, and the driver sends it as `thinking: disabled`.
196
+ return thinking?.type !== 'disabled' && effort !== 'none'
163
197
  }
164
198
 
165
199
  /**
@@ -180,7 +214,7 @@ export function assertSamplingUsable(
180
214
  mode: 'refuse' | 'ignore',
181
215
  ): void {
182
216
  if (mode === 'ignore') return
183
- if (!thinkingEnabled(params.thinking)) return
217
+ if (!thinkingEnabled(params.thinking, params.effort)) return
184
218
  const set = SAMPLING_FIELDS.filter((f) => params[f] !== undefined)
185
219
  if (set.length === 0) return
186
220
  throw new Error(
@@ -201,6 +235,11 @@ export function assertSamplingUsable(
201
235
  * The vendor's Anthropic-format endpoint does take `reasoning.effort`. A
202
236
  * driver built on that wire could honour this; this one is built on Chat
203
237
  * Completions and says so.
238
+ *
239
+ * @deprecated The driver now carries effort on `reasoning_effort`, the field
240
+ * the vendor's Chat Completions reference documents (the field measured here
241
+ * earlier was `thinking.effort`, which the vendor never defined). Nothing in
242
+ * this package calls it any more; use {@link resolveDeepSeekEffort}.
204
243
  */
205
244
  export function assertEffortUnsupported(params: ChatCompletionParams): void {
206
245
  if (params.effort === undefined) return
@@ -209,6 +248,69 @@ export function assertEffortUnsupported(params: ChatCompletionParams): void {
209
248
  )
210
249
  }
211
250
 
251
+ /** The effort levels the vendor's pages list, in the order they rank. */
252
+ const VENDOR_EFFORT_ORDER = ['low', 'high', 'max'] as const
253
+ type VendorEffort = (typeof VENDOR_EFFORT_ORDER)[number]
254
+
255
+ /** The menu used until the models endpoint says otherwise (levels low, high, max; default high). */
256
+ const DEFAULT_EFFORT_LEVELS: readonly VendorEffort[] = VENDOR_EFFORT_ORDER
257
+ const DEFAULT_EFFORT: VendorEffort = 'high'
258
+
259
+ /**
260
+ * The vendor's own mapping of Namzu's wider vocabulary onto what it accepts
261
+ * (https://api-docs.deepseek.com/guides/thinking_mode, "effort mapping").
262
+ */
263
+ const VENDOR_EFFORT_ALIASES: Readonly<Record<Exclude<ReasoningEffort, 'none'>, VendorEffort>> = {
264
+ minimal: 'low',
265
+ low: 'low',
266
+ medium: 'high',
267
+ high: 'high',
268
+ xhigh: 'high',
269
+ max: 'max',
270
+ ultra: 'max',
271
+ }
272
+
273
+ export interface DeepSeekEffortResolution {
274
+ /** `none` turns thinking off; otherwise the level sent as `reasoning_effort`. */
275
+ readonly level: VendorEffort | 'none'
276
+ /** True when the level asked for is not the level sent. */
277
+ readonly mapped: boolean
278
+ }
279
+
280
+ /**
281
+ * Turn a requested effort into the one this model offers.
282
+ *
283
+ * `none` is thinking off. A level the model offers is sent as is. Any other
284
+ * level goes through the vendor's documented mapping (`medium` and `xhigh`
285
+ * to `high`, `minimal` to `low`, `ultra` to `max`); if the model's menu lacks
286
+ * that target, the nearest offered level is used, the lower one on a tie, and
287
+ * `mapped` says so. It never throws: a level this model does not offer must
288
+ * degrade to its neighbour rather than fail a run that asked for more thought.
289
+ */
290
+ export function resolveDeepSeekEffort(
291
+ requested: ReasoningEffort,
292
+ offered: readonly string[] = DEFAULT_EFFORT_LEVELS,
293
+ ): DeepSeekEffortResolution {
294
+ if (requested === 'none') return { level: 'none', mapped: false }
295
+ const menu = VENDOR_EFFORT_ORDER.filter((level) => offered.includes(level))
296
+ if (menu.length === 0) return { level: VENDOR_EFFORT_ALIASES[requested], mapped: true }
297
+ if ((menu as readonly string[]).includes(requested)) {
298
+ return { level: requested as VendorEffort, mapped: false }
299
+ }
300
+ const target = VENDOR_EFFORT_ALIASES[requested]
301
+ const wanted = VENDOR_EFFORT_ORDER.indexOf(target)
302
+ let best: VendorEffort = menu[0] as VendorEffort
303
+ let bestDistance = Number.POSITIVE_INFINITY
304
+ for (const level of menu) {
305
+ const distance = Math.abs(VENDOR_EFFORT_ORDER.indexOf(level) - wanted)
306
+ if (distance < bestDistance) {
307
+ best = level
308
+ bestDistance = distance
309
+ }
310
+ }
311
+ return { level: best, mapped: true }
312
+ }
313
+
212
314
  /**
213
315
  * Adapter-private state for one completed reasoning response.
214
316
  *
@@ -453,11 +555,62 @@ function assertDeepSeekRichContent(
453
555
  if (block.type === 'image') acceptImage(block.mediaType)
454
556
  }
455
557
  }
456
- if (hasImage && model !== VISION_MODEL) {
558
+ if (hasImage && !IMAGE_MODELS.has(model)) {
457
559
  throw new Error(
458
- `DeepSeekProvider: model '${model}' does not accept image input. Select '${VISION_MODEL}' or remove the images.`,
560
+ `DeepSeekProvider: model '${model}' does not accept image input. Select '${CURRENT_FLASH_MODEL}' or remove the images.`,
561
+ )
562
+ }
563
+ }
564
+
565
+ interface VendorLimits {
566
+ readonly contextWindow?: number
567
+ readonly maxOutputTokens?: number
568
+ /** `effort.supported_levels` and `effort.default_level` from the models endpoint. */
569
+ readonly effortLevels?: readonly string[]
570
+ readonly effortDefault?: string
571
+ }
572
+
573
+ const positiveInteger = (value: unknown): number | undefined =>
574
+ typeof value === 'number' && Number.isSafeInteger(value) && value > 0 ? value : undefined
575
+
576
+ /** `context_window` and `max_output_tokens` on a models-endpoint entry, when present and sane. */
577
+ function readVendorLimits(entries: readonly unknown[]): Map<string, VendorLimits> {
578
+ const out = new Map<string, VendorLimits>()
579
+ for (const entry of entries) {
580
+ if (typeof entry !== 'object' || entry === null) continue
581
+ const record = entry as Record<string, unknown>
582
+ if (typeof record.id !== 'string') continue
583
+ const contextWindow = positiveInteger(record.context_window)
584
+ const maxOutputTokens = positiveInteger(record.max_output_tokens)
585
+ const effort =
586
+ typeof record.effort === 'object' && record.effort !== null
587
+ ? (record.effort as Record<string, unknown>)
588
+ : undefined
589
+ const effortLevels = Array.isArray(effort?.supported_levels)
590
+ ? (effort.supported_levels as unknown[]).filter(
591
+ (level): level is string => typeof level === 'string',
592
+ )
593
+ : undefined
594
+ const effortDefault =
595
+ typeof effort?.default_level === 'string' ? effort.default_level : undefined
596
+ if (
597
+ contextWindow === undefined &&
598
+ maxOutputTokens === undefined &&
599
+ (effortLevels === undefined || effortLevels.length === 0)
459
600
  )
601
+ continue
602
+ out.set(record.id, {
603
+ ...(contextWindow !== undefined ? { contextWindow } : {}),
604
+ ...(maxOutputTokens !== undefined ? { maxOutputTokens } : {}),
605
+ ...(effortLevels !== undefined && effortLevels.length > 0 ? { effortLevels } : {}),
606
+ ...(effortDefault !== undefined ? { effortDefault } : {}),
607
+ })
460
608
  }
609
+ return out
610
+ }
611
+
612
+ function isKnownModel(model: string): boolean {
613
+ return KNOWN_MODELS.some((candidate) => candidate.id === model)
461
614
  }
462
615
 
463
616
  function inputModalitiesFor(model: string): readonly ModelInputModality[] | undefined {
@@ -489,6 +642,8 @@ export class DeepSeekProvider implements LLMProvider {
489
642
  private client: OpenAI
490
643
  private defaultModel?: string
491
644
  private samplingMode: 'refuse' | 'ignore'
645
+ private vendorLimits: Promise<Map<string, VendorLimits>> | undefined
646
+ private readonly documentedLimits: boolean
492
647
 
493
648
  constructor(config: DeepSeekConfig) {
494
649
  if (!config.apiKey) {
@@ -507,6 +662,7 @@ export class DeepSeekProvider implements LLMProvider {
507
662
 
508
663
  this.client = new OpenAI(clientOptions)
509
664
  this.defaultModel = config.model
665
+ this.documentedLimits = isVendorBaseUrl(config.baseURL)
510
666
  this.samplingMode = config.samplingInThinkingMode ?? 'refuse'
511
667
  }
512
668
 
@@ -520,18 +676,36 @@ export class DeepSeekProvider implements LLMProvider {
520
676
  return model
521
677
  }
522
678
 
523
- /** This Chat Completions endpoint explicitly carries no effort control. */
524
- reasoningEffortLevelsFor(_model: string): readonly ReasoningEffort[] {
525
- return []
679
+ /** Last models-endpoint answer, once a turn has fetched it; the sync menus read this. */
680
+ private vendorSnapshot: Map<string, VendorLimits> | undefined
681
+
682
+ /**
683
+ * `none` (thinking off) plus the levels the models endpoint lists for the
684
+ * model, or the vendor's documented low, high and max until it has been read.
685
+ */
686
+ reasoningEffortLevelsFor(model: string): readonly ReasoningEffort[] {
687
+ const listed = this.vendorSnapshot?.get(model)?.effortLevels
688
+ const levels = VENDOR_EFFORT_ORDER.filter((level) =>
689
+ (listed ?? DEFAULT_EFFORT_LEVELS).includes(level),
690
+ )
691
+ return ['none', ...(levels.length > 0 ? levels : DEFAULT_EFFORT_LEVELS)]
692
+ }
693
+
694
+ /** The level a request without one runs at: the endpoint's `default_level`, else `high`. */
695
+ reasoningEffortDefaultFor(model: string): ReasoningEffort {
696
+ const stated = this.vendorSnapshot?.get(model)?.effortDefault
697
+ return stated !== undefined && (VENDOR_EFFORT_ORDER as readonly string[]).includes(stated)
698
+ ? (stated as ReasoningEffort)
699
+ : DEFAULT_EFFORT
526
700
  }
527
701
 
528
702
  async *chatStream(params: ChatCompletionParams): AsyncIterable<StreamChunk> {
529
703
  const model = this.resolveModel(params)
530
704
  const providerRoute = resolveDeepSeekRoute(model, params.providerRoute)
531
- assertEffortUnsupported(params)
532
705
  assertSamplingUsable(params, this.samplingMode)
706
+ const thinkingOn = thinkingEnabled(params.thinking, params.effort)
533
707
 
534
- const sampling = thinkingEnabled(params.thinking)
708
+ const sampling = thinkingOn
535
709
  ? {}
536
710
  : {
537
711
  temperature: params.temperature,
@@ -566,9 +740,30 @@ export class DeepSeekProvider implements LLMProvider {
566
740
  // Cast back to `typeof body` rather than to the SDK's parameter type: the
567
741
  // extra key rides along at runtime, and the literal `stream: true`
568
742
  // survives, which is what keeps the streaming overload selected.
569
- const withThinking = (
570
- params.thinking ? { ...body, thinking: { type: params.thinking.type } } : body
571
- ) as typeof body
743
+ //
744
+ // Effort rides on `reasoning_effort`, a sibling of `thinking`. An explicit
745
+ // `thinking.type` wins at the vendor, so `disabled` sends no level, and
746
+ // `none` is sent as `thinking: disabled` so the switch does not depend on
747
+ // that precedence. A level the model does not offer is mapped before it
748
+ // is sent (see `resolveDeepSeekEffort`).
749
+ const offered = this.vendorSnapshot?.get(model)?.effortLevels
750
+ const resolved =
751
+ params.effort !== undefined ? resolveDeepSeekEffort(params.effort, offered) : undefined
752
+ const thinkingField =
753
+ params.thinking?.type === 'disabled' || resolved?.level === 'none'
754
+ ? { type: 'disabled' as const }
755
+ : params.thinking
756
+ ? { type: params.thinking.type }
757
+ : undefined
758
+ const effortField =
759
+ resolved !== undefined && resolved.level !== 'none' && thinkingField?.type !== 'disabled'
760
+ ? { reasoning_effort: resolved.level }
761
+ : {}
762
+ const withThinking = {
763
+ ...body,
764
+ ...(thinkingField ? { thinking: thinkingField } : {}),
765
+ ...effortField,
766
+ } as typeof body
572
767
 
573
768
  let stream: Awaited<ReturnType<typeof this.client.chat.completions.create>>
574
769
  try {
@@ -587,6 +782,9 @@ export class DeepSeekProvider implements LLMProvider {
587
782
  let reasoningOpen = false
588
783
  let reasoningContent = ''
589
784
  let replayStateEmitted = false
785
+ // A choice reported why it stopped; a stream that closes without one was
786
+ // cut by the connection.
787
+ let finished = false
590
788
 
591
789
  try {
592
790
  for await (const chunk of stream) {
@@ -624,6 +822,7 @@ export class DeepSeekProvider implements LLMProvider {
624
822
  ? mapFinishReason(choice.finish_reason)
625
823
  : undefined
626
824
  const usage = chunk.usage ? parseUsage(chunk.usage as RawDeepSeekUsage) : undefined
825
+ if (finishReason) finished = true
627
826
 
628
827
  if (reasoningText) {
629
828
  reasoningOpen = true
@@ -683,6 +882,13 @@ export class DeepSeekProvider implements LLMProvider {
683
882
  })
684
883
  }
685
884
  }
885
+ if (!finished) {
886
+ throw new ProviderRequestError({
887
+ kind: 'network',
888
+ providerId: 'deepseek',
889
+ detail: 'the connection closed before the response finished',
890
+ })
891
+ }
686
892
  // A turn that was all reasoning and no content — the model thought
687
893
  // and then stopped — still has to close its block.
688
894
  if (reasoningOpen) {
@@ -698,6 +904,47 @@ export class DeepSeekProvider implements LLMProvider {
698
904
  }
699
905
  }
700
906
 
907
+ /**
908
+ * What the vendor's models endpoint says about each model it lists. The
909
+ * endpoint may leave `context_window` and `max_output_tokens` out (both are
910
+ * optional there), so an absent field is simply not an answer. A failed
911
+ * request is not cached: the next turn asks again.
912
+ */
913
+ private fetchVendorLimits(signal?: AbortSignal): Promise<Map<string, VendorLimits>> {
914
+ if (this.vendorLimits) return this.vendorLimits
915
+ const request = this.client.models.list(signal ? { signal } : undefined).then((page) => {
916
+ const limits = readVendorLimits(page.data)
917
+ this.vendorSnapshot = limits
918
+ return limits
919
+ })
920
+ this.vendorLimits = request
921
+ request.catch(() => {
922
+ if (this.vendorLimits === request) this.vendorLimits = undefined
923
+ })
924
+ return request
925
+ }
926
+
927
+ /**
928
+ * The window the runtime measures compaction against: what the vendor's
929
+ * models endpoint reports for the id when it reports one, else the
930
+ * documented limit of a model this driver lists, else `undefined` rather
931
+ * than a guess, which leaves the SDK's table to answer for it. The vendor
932
+ * answers first and the built-in table is only the fallback.
933
+ */
934
+ async resolveContextWindow(model: string, signal?: AbortSignal): Promise<number | undefined> {
935
+ signal?.throwIfAborted()
936
+ let reported: number | undefined
937
+ try {
938
+ reported = (await this.fetchVendorLimits(signal)).get(model)?.contextWindow
939
+ } catch {
940
+ // The listing is a refinement; a turn must not fail because it is down.
941
+ signal?.throwIfAborted()
942
+ }
943
+ return (
944
+ reported ?? (this.documentedLimits && isKnownModel(model) ? CONTEXT_WINDOW_TOKENS : undefined)
945
+ )
946
+ }
947
+
701
948
  async probeCredential(signal?: AbortSignal): Promise<void> {
702
949
  signal?.throwIfAborted()
703
950
  await this.client.models.list(signal ? { signal } : undefined)
@@ -710,6 +957,7 @@ export class DeepSeekProvider implements LLMProvider {
710
957
  signal?.throwIfAborted()
711
958
  const models = new Map<string, { id: string; name: string }>()
712
959
  for (const model of page.data) models.set(model.id, { id: model.id, name: model.id })
960
+ const vendor = readVendorLimits(page.data)
713
961
  // The preview model is part of the source adapter's verified default
714
962
  // catalogue but may lag the account listing endpoint. A successful list
715
963
  // therefore augments rather than erases the known selectable catalogue.
@@ -718,8 +966,14 @@ export class DeepSeekProvider implements LLMProvider {
718
966
  }
719
967
  return [...models.values()].map((model) => {
720
968
  const inputModalities = inputModalitiesFor(model.id)
969
+ const known = this.documentedLimits && isKnownModel(model.id)
970
+ const reported = vendor.get(model.id)
971
+ const contextWindow = reported?.contextWindow ?? (known ? CONTEXT_WINDOW_TOKENS : undefined)
972
+ const maxOutputTokens = reported?.maxOutputTokens ?? (known ? MAX_OUTPUT_TOKENS : undefined)
721
973
  return {
722
974
  ...model,
975
+ ...(contextWindow !== undefined ? { contextWindow } : {}),
976
+ ...(maxOutputTokens !== undefined ? { maxOutputTokens } : {}),
723
977
  ...(inputModalities !== undefined ? { inputModalities } : {}),
724
978
  supportsToolUse: true,
725
979
  supportsStreaming: true,
package/src/index.ts CHANGED
@@ -28,8 +28,10 @@ export {
28
28
  DeepSeekProvider,
29
29
  assertEffortUnsupported,
30
30
  assertSamplingUsable,
31
+ resolveDeepSeekEffort,
31
32
  thinkingEnabled,
32
33
  toDeepSeekMessages,
33
34
  toDeepSeekTools,
34
35
  } from './client.js'
36
+ export type { DeepSeekEffortResolution } from './client.js'
35
37
  export type { DeepSeekConfig, DeepSeekProviderConfig } from './types.js'