@namzu/deepseek 1.0.0 → 1.1.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,5 +1,11 @@
1
1
  # @namzu/deepseek
2
2
 
3
+ ## 1.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 77242a0: Expose optional per-model input modalities through `ModelInfo`, add inline image input for DeepSeek's vision preview while refusing images on text models and documents on every DeepSeek model, and label models whose listing explicitly advertises image input in the CLI picker.
8
+
3
9
  ## 1.0.0
4
10
 
5
11
  ### Major Changes
package/README.md CHANGED
@@ -3,8 +3,8 @@ type: Reference
3
3
  title: "@namzu/deepseek"
4
4
  description: >-
5
5
  The DeepSeek model driver for the Namzu agent kernel. Chat Completions with
6
- streaming and tool use, and thinking mode mapped onto the kernel's reasoning
7
- blocks in both directions.
6
+ streaming, tool use and inline image input, with thinking mode mapped onto
7
+ the kernel's reasoning blocks in both directions.
8
8
  tags: [readme, package, provider, deepseek]
9
9
  timestamp: 2026-08-20T00:00:00Z
10
10
  status: active
@@ -21,7 +21,7 @@ diataxis: reference
21
21
  [![build](https://github.com/cogitave/namzu/actions/workflows/ci.yml/badge.svg)](https://github.com/cogitave/namzu/actions/workflows/ci.yml)
22
22
  [![license](https://img.shields.io/badge/license-FSL--1.1--MIT-blue.svg)](https://github.com/cogitave/namzu/blob/main/LICENSE.md)
23
23
 
24
- [Install](#install) · [Usage](#usage) · [Thinking mode](#thinking-mode) · [Documentation](#documentation)
24
+ [Install](#install) · [Usage](#usage) · [Image input](#image-input) · [Thinking mode](#thinking-mode) · [Documentation](#documentation)
25
25
 
26
26
  </div>
27
27
 
@@ -63,8 +63,23 @@ for await (const chunk of provider.chatStream({
63
63
  }
64
64
  ```
65
65
 
66
- Models are `deepseek-v4-flash` and `deepseek-v4-pro`. `deepseek-chat` and
67
- `deepseek-reasoner` were discontinued on 2026-07-24 and are not aliases.
66
+ The built-in catalogue offers `deepseek-v4-flash`, `deepseek-v4-pro`, and
67
+ `deepseek-v4-flash-vision-exp`. `deepseek-chat` and `deepseek-reasoner` were
68
+ discontinued on 2026-07-24 and are not aliases.
69
+
70
+ ## Image input
71
+
72
+ Only `deepseek-v4-flash-vision-exp` accepts images. User attachments are sent
73
+ as ordered `image_url` data-URL parts. Images returned by tools keep their
74
+ `role: "tool"` result and follow it in a separate user image message, so the
75
+ tool-call/result sequence remains valid. PNG, JPEG, WebP and GIF are accepted.
76
+
77
+ The SDK's accumulated request-rich-content budget still applies before this
78
+ projection and leaves durable `Run.messages` unchanged. This driver currently
79
+ uses inline base64 only; it does not upload through the Files API or claim to
80
+ normalize or decode caller-supplied image bytes. Documents, unresolved stored
81
+ refs, unsupported image types, and images sent to either text model are refused
82
+ before transport.
68
83
 
69
84
  ## Thinking mode
70
85
 
@@ -83,7 +98,7 @@ is on. Both refusals, and how to opt out, are in the documentation below.
83
98
 
84
99
  ## Documentation
85
100
 
86
- - [The DeepSeek driver](https://github.com/cogitave/namzu/blob/main/docs/providers/deepseek.md) — thinking mode, reasoning replay, what this wire refuses, and why it carries no price rows
101
+ - [The DeepSeek driver](https://github.com/cogitave/namzu/blob/main/docs/providers/deepseek.md) — image input, thinking mode, reasoning replay, what this wire refuses, and why it carries no price rows
87
102
  - [Namzu docs](https://github.com/cogitave/namzu/tree/main/docs)
88
103
 
89
104
  ## License
package/dist/client.d.ts CHANGED
@@ -1,15 +1,7 @@
1
1
  import type { ChatCompletionParams, LLMProvider, ModelInfo, ProviderCapabilities, ProviderRoute, ReasoningEffort, StreamChunk, ThinkingConfig } from '@namzu/sdk';
2
2
  import type { ChatCompletionMessageParam, ChatCompletionTool } from 'openai/resources/chat/completions';
3
3
  import type { DeepSeekConfig } from './types.js';
4
- /**
5
- * No vision, no documents.
6
- *
7
- * The wire is OpenAI's Chat Completions, which has `image_url` content parts —
8
- * but the models behind this endpoint are text-only, and a capability set is a
9
- * claim about what a call will actually do, not about what the request format
10
- * can express. Claiming vision here would route an image-bearing run to a
11
- * driver that sends the image and gets prose about nothing.
12
- */
4
+ /** Driver-level mapping capabilities; model input support is listed separately. */
13
5
  export declare const DEEPSEEK_CAPABILITIES: ProviderCapabilities;
14
6
  /**
15
7
  * Is thinking on for this call?
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,oBAAoB,EAEpB,WAAW,EACX,SAAS,EACT,oBAAoB,EACpB,aAAa,EAEb,eAAe,EACf,WAAW,EACX,cAAc,EAGd,MAAM,YAAY,CAAA;AAUnB,OAAO,KAAK,EACX,0BAA0B,EAC1B,kBAAkB,EAElB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,EAAE,oBAMnC,CAAA;AAuFD;;;;;;;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,CA0C9B;AAED,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;IAmBlC,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;IActD,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;AAEhD,mFAAmF;AACnF,eAAO,MAAM,qBAAqB,EAAE,oBAMnC,CAAA;AAoGD;;;;;;;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;IAmBlC,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;IAyBtD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAQrC"}
package/dist/client.js CHANGED
@@ -1,22 +1,27 @@
1
- import { ProviderRequestError, attributionHeaders, isCallerAbortError, isProviderRequestError, providerVendorError, toolResultToText, } from '@namzu/sdk';
1
+ import { ProviderRequestError, attributionHeaders, isCallerAbortError, isProviderRequestError, providerVendorError, toToolResultBlocks, } from '@namzu/sdk';
2
2
  import OpenAI from 'openai';
3
- /**
4
- * No vision, no documents.
5
- *
6
- * The wire is OpenAI's Chat Completions, which has `image_url` content parts —
7
- * but the models behind this endpoint are text-only, and a capability set is a
8
- * claim about what a call will actually do, not about what the request format
9
- * can express. Claiming vision here would route an image-bearing run to a
10
- * driver that sends the image and gets prose about nothing.
11
- */
3
+ /** Driver-level mapping capabilities; model input support is listed separately. */
12
4
  export const DEEPSEEK_CAPABILITIES = {
13
5
  supportsTools: true,
14
6
  supportsStreaming: true,
15
7
  supportsFunctionCalling: true,
16
- supportsVision: false,
8
+ supportsVision: true,
17
9
  supportsDocuments: false,
18
10
  };
19
11
  const DEFAULT_BASE_URL = 'https://api.deepseek.com';
12
+ const VISION_MODEL = 'deepseek-v4-flash-vision-exp';
13
+ const TEXT_MODALITIES = Object.freeze(['text']);
14
+ const VISION_MODALITIES = Object.freeze(['text', 'image']);
15
+ const IMAGE_MEDIA_TYPES = new Set(['image/png', 'image/jpeg', 'image/webp', 'image/gif']);
16
+ const KNOWN_MODELS = Object.freeze([
17
+ { id: 'deepseek-v4-flash', name: 'DeepSeek-V4-Flash', inputModalities: TEXT_MODALITIES },
18
+ { id: 'deepseek-v4-pro', name: 'DeepSeek-V4-Pro', inputModalities: TEXT_MODALITIES },
19
+ {
20
+ id: VISION_MODEL,
21
+ name: 'DeepSeek-V4-Flash-Vision-Exp',
22
+ inputModalities: VISION_MODALITIES,
23
+ },
24
+ ]);
20
25
  function mapFinishReason(reason) {
21
26
  switch (reason) {
22
27
  case 'length':
@@ -189,25 +194,59 @@ function replayReasoning(message, targetRoute) {
189
194
  return durable !== undefined && durable === state.reasoningContent ? durable : undefined;
190
195
  }
191
196
  export function toDeepSeekMessages(messages, targetRoute) {
192
- return messages.map((msg) => {
193
- if (msg.role === 'system')
194
- return { role: 'system', content: msg.content };
197
+ assertDeepSeekRichContent(messages, targetRoute.model);
198
+ const imagePart = (image) => ({
199
+ type: 'image_url',
200
+ image_url: { url: `data:${image.mediaType};base64,${image.data}` },
201
+ });
202
+ const wire = [];
203
+ let pendingToolImages = [];
204
+ const flushToolImages = () => {
205
+ if (pendingToolImages.length === 0)
206
+ return;
207
+ wire.push({
208
+ role: 'user',
209
+ content: [
210
+ { type: 'text', text: 'Attached image(s) from tool result:' },
211
+ ...pendingToolImages,
212
+ ],
213
+ });
214
+ pendingToolImages = [];
215
+ };
216
+ for (const msg of messages) {
217
+ if (msg.role !== 'tool')
218
+ flushToolImages();
219
+ if (msg.role === 'system') {
220
+ wire.push({ role: 'system', content: msg.content });
221
+ continue;
222
+ }
195
223
  if (msg.role === 'user') {
196
- // No attachment branch, deliberately. `DEEPSEEK_CAPABILITIES` says
197
- // this driver has neither vision nor documents, and a driver that
198
- // quietly encoded an image the model cannot read would answer about
199
- // a picture it never saw.
200
- if (msg.attachments && msg.attachments.length > 0) {
201
- throw new Error('DeepSeekProvider: this driver has no vision or document support, and a message carried attachments. Route multimodal turns to a provider whose capabilities include them.');
224
+ if (!msg.attachments || msg.attachments.length === 0) {
225
+ wire.push({ role: 'user', content: msg.content });
226
+ continue;
202
227
  }
203
- return { role: 'user', content: msg.content };
228
+ const content = [];
229
+ if (msg.content.length > 0)
230
+ content.push({ type: 'text', text: msg.content });
231
+ for (const attachment of msg.attachments) {
232
+ // The preflight above proves these are inline images. This local check
233
+ // keeps the narrowing explicit instead of casting a public union.
234
+ if (attachment.type === 'stored' || attachment.type === 'document')
235
+ continue;
236
+ content.push(imagePart(attachment));
237
+ }
238
+ wire.push({ role: 'user', content });
239
+ continue;
204
240
  }
205
241
  if (msg.role === 'tool') {
206
- return {
242
+ const { text, images } = splitToolResult(msg.content);
243
+ wire.push({
207
244
  role: 'tool',
208
- content: toolResultToText(msg.content),
245
+ content: text || '(no output)',
209
246
  tool_call_id: msg.toolCallId,
210
- };
247
+ });
248
+ pendingToolImages.push(...images.map(imagePart));
249
+ continue;
211
250
  }
212
251
  const assistant = {
213
252
  role: 'assistant',
@@ -229,8 +268,67 @@ export function toDeepSeekMessages(messages, targetRoute) {
229
268
  ;
230
269
  assistant.reasoning_content = replayed;
231
270
  }
232
- return assistant;
233
- });
271
+ wire.push(assistant);
272
+ }
273
+ flushToolImages();
274
+ return wire;
275
+ }
276
+ function splitToolResult(content) {
277
+ const text = [];
278
+ const images = [];
279
+ for (const block of toToolResultBlocks(content)) {
280
+ if (block.type === 'text')
281
+ text.push(block.text);
282
+ else if (block.type === 'image')
283
+ images.push(block);
284
+ }
285
+ return { text: text.join('\n'), images };
286
+ }
287
+ /**
288
+ * Refuse every rich-content shape this exact model/wire cannot represent.
289
+ *
290
+ * This runs before the request object is built, so a text model never sees an
291
+ * image data URL and a document never reaches a wire that would silently drop
292
+ * it. Stored user refs should have been resolved by the SDK attachment store;
293
+ * accepting one here would serialize a reference rather than its bytes.
294
+ */
295
+ function assertDeepSeekRichContent(messages, model) {
296
+ let hasImage = false;
297
+ const acceptImage = (mediaType) => {
298
+ if (!IMAGE_MEDIA_TYPES.has(mediaType)) {
299
+ throw new Error(`DeepSeekProvider: image type '${mediaType}' is not supported. Use image/png, image/jpeg, image/webp, or image/gif.`);
300
+ }
301
+ hasImage = true;
302
+ };
303
+ for (const message of messages) {
304
+ if (message.role === 'user') {
305
+ for (const attachment of message.attachments ?? []) {
306
+ if (attachment.type === 'stored') {
307
+ throw new Error('DeepSeekProvider: an unresolved stored attachment reached the driver. Configure an AttachmentStore so Namzu can resolve its bytes before the model request.');
308
+ }
309
+ if (attachment.type === 'document') {
310
+ throw new Error('DeepSeekProvider: this Chat Completions driver does not support document input. Route the turn to a document-capable provider.');
311
+ }
312
+ acceptImage(attachment.mediaType);
313
+ }
314
+ continue;
315
+ }
316
+ if (message.role !== 'tool')
317
+ continue;
318
+ for (const block of toToolResultBlocks(message.content)) {
319
+ if (block.type === 'document') {
320
+ throw new Error('DeepSeekProvider: this Chat Completions driver does not support document tool results. Route the turn to a document-capable provider.');
321
+ }
322
+ if (block.type === 'image')
323
+ acceptImage(block.mediaType);
324
+ }
325
+ }
326
+ if (hasImage && model !== VISION_MODEL) {
327
+ throw new Error(`DeepSeekProvider: model '${model}' does not accept image input. Select '${VISION_MODEL}' or remove the images.`);
328
+ }
329
+ }
330
+ function inputModalitiesFor(model) {
331
+ return KNOWN_MODELS.find((candidate) => candidate.id === model)?.inputModalities;
234
332
  }
235
333
  export function toDeepSeekTools(params) {
236
334
  if (!params.tools || params.tools.length === 0)
@@ -443,14 +541,26 @@ export class DeepSeekProvider {
443
541
  signal?.throwIfAborted();
444
542
  const page = await this.client.models.list(signal ? { signal } : undefined);
445
543
  signal?.throwIfAborted();
446
- return page.data.map((m) => ({
447
- id: m.id,
448
- name: m.id,
449
- inputPrice: 0,
450
- outputPrice: 0,
451
- supportsToolUse: true,
452
- supportsStreaming: true,
453
- }));
544
+ const models = new Map();
545
+ for (const model of page.data)
546
+ models.set(model.id, { id: model.id, name: model.id });
547
+ // The preview model is part of the source adapter's verified default
548
+ // catalogue but may lag the account listing endpoint. A successful list
549
+ // therefore augments rather than erases the known selectable catalogue.
550
+ for (const model of KNOWN_MODELS) {
551
+ models.set(model.id, { id: model.id, name: model.name });
552
+ }
553
+ return [...models.values()].map((model) => {
554
+ const inputModalities = inputModalitiesFor(model.id);
555
+ return {
556
+ ...model,
557
+ ...(inputModalities !== undefined ? { inputModalities } : {}),
558
+ inputPrice: 0,
559
+ outputPrice: 0,
560
+ supportsToolUse: true,
561
+ supportsStreaming: true,
562
+ };
563
+ });
454
564
  }
455
565
  async healthCheck() {
456
566
  try {
@@ -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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@namzu/deepseek",
3
- "version": "1.0.0",
3
+ "version": "1.1.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": "^3.2.6",
60
- "@namzu/sdk": "^31.0.0"
60
+ "@namzu/sdk": "^31.1.0"
61
61
  },
62
62
  "scripts": {
63
63
  "build": "tsc --build",
package/src/client.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  import type {
2
2
  ChatCompletionParams,
3
3
  ChatCompletionResponse,
4
+ ImageAttachment,
4
5
  LLMProvider,
5
6
  ModelInfo,
7
+ ModelInputModality,
6
8
  ProviderCapabilities,
7
9
  ProviderRoute,
8
10
  ReasoningBlock,
@@ -11,6 +13,7 @@ import type {
11
13
  ThinkingConfig,
12
14
  TokenUsage,
13
15
  ToolChoice,
16
+ ToolResultContent,
14
17
  } from '@namzu/sdk'
15
18
  import {
16
19
  ProviderRequestError,
@@ -18,7 +21,7 @@ import {
18
21
  isCallerAbortError,
19
22
  isProviderRequestError,
20
23
  providerVendorError,
21
- toolResultToText,
24
+ toToolResultBlocks,
22
25
  } from '@namzu/sdk'
23
26
  import OpenAI from 'openai'
24
27
  import type {
@@ -28,24 +31,29 @@ import type {
28
31
  } from 'openai/resources/chat/completions'
29
32
  import type { DeepSeekConfig } from './types.js'
30
33
 
31
- /**
32
- * No vision, no documents.
33
- *
34
- * The wire is OpenAI's Chat Completions, which has `image_url` content parts —
35
- * but the models behind this endpoint are text-only, and a capability set is a
36
- * claim about what a call will actually do, not about what the request format
37
- * can express. Claiming vision here would route an image-bearing run to a
38
- * driver that sends the image and gets prose about nothing.
39
- */
34
+ /** Driver-level mapping capabilities; model input support is listed separately. */
40
35
  export const DEEPSEEK_CAPABILITIES: ProviderCapabilities = {
41
36
  supportsTools: true,
42
37
  supportsStreaming: true,
43
38
  supportsFunctionCalling: true,
44
- supportsVision: false,
39
+ supportsVision: true,
45
40
  supportsDocuments: false,
46
41
  }
47
42
 
48
43
  const DEFAULT_BASE_URL = 'https://api.deepseek.com'
44
+ const VISION_MODEL = 'deepseek-v4-flash-vision-exp'
45
+ const TEXT_MODALITIES = Object.freeze(['text'] as const)
46
+ const VISION_MODALITIES = Object.freeze(['text', 'image'] as const)
47
+ const IMAGE_MEDIA_TYPES = new Set(['image/png', 'image/jpeg', 'image/webp', 'image/gif'])
48
+ const KNOWN_MODELS = Object.freeze([
49
+ { id: 'deepseek-v4-flash', name: 'DeepSeek-V4-Flash', inputModalities: TEXT_MODALITIES },
50
+ { id: 'deepseek-v4-pro', name: 'DeepSeek-V4-Pro', inputModalities: TEXT_MODALITIES },
51
+ {
52
+ id: VISION_MODEL,
53
+ name: 'DeepSeek-V4-Flash-Vision-Exp',
54
+ inputModalities: VISION_MODALITIES,
55
+ },
56
+ ] as const)
49
57
 
50
58
  type DeepSeekFinishReason =
51
59
  | 'stop'
@@ -294,26 +302,59 @@ export function toDeepSeekMessages(
294
302
  messages: ChatCompletionParams['messages'],
295
303
  targetRoute: ProviderRoute,
296
304
  ): ChatCompletionMessageParam[] {
297
- return messages.map((msg): ChatCompletionMessageParam => {
298
- if (msg.role === 'system') return { role: 'system', content: msg.content }
305
+ assertDeepSeekRichContent(messages, targetRoute.model)
306
+
307
+ type ImagePart = { type: 'image_url'; image_url: { url: string } }
308
+ type UserPart = { type: 'text'; text: string } | ImagePart
309
+ const imagePart = (image: ImageAttachment): ImagePart => ({
310
+ type: 'image_url',
311
+ image_url: { url: `data:${image.mediaType};base64,${image.data}` },
312
+ })
313
+ const wire: ChatCompletionMessageParam[] = []
314
+ let pendingToolImages: ImagePart[] = []
315
+ const flushToolImages = (): void => {
316
+ if (pendingToolImages.length === 0) return
317
+ wire.push({
318
+ role: 'user',
319
+ content: [
320
+ { type: 'text', text: 'Attached image(s) from tool result:' },
321
+ ...pendingToolImages,
322
+ ],
323
+ })
324
+ pendingToolImages = []
325
+ }
326
+
327
+ for (const msg of messages) {
328
+ if (msg.role !== 'tool') flushToolImages()
329
+ if (msg.role === 'system') {
330
+ wire.push({ role: 'system', content: msg.content })
331
+ continue
332
+ }
299
333
  if (msg.role === 'user') {
300
- // No attachment branch, deliberately. `DEEPSEEK_CAPABILITIES` says
301
- // this driver has neither vision nor documents, and a driver that
302
- // quietly encoded an image the model cannot read would answer about
303
- // a picture it never saw.
304
- if (msg.attachments && msg.attachments.length > 0) {
305
- throw new Error(
306
- 'DeepSeekProvider: this driver has no vision or document support, and a message carried attachments. Route multimodal turns to a provider whose capabilities include them.',
307
- )
334
+ if (!msg.attachments || msg.attachments.length === 0) {
335
+ wire.push({ role: 'user', content: msg.content })
336
+ continue
337
+ }
338
+ const content: UserPart[] = []
339
+ if (msg.content.length > 0) content.push({ type: 'text', text: msg.content })
340
+ for (const attachment of msg.attachments) {
341
+ // The preflight above proves these are inline images. This local check
342
+ // keeps the narrowing explicit instead of casting a public union.
343
+ if (attachment.type === 'stored' || attachment.type === 'document') continue
344
+ content.push(imagePart(attachment))
308
345
  }
309
- return { role: 'user', content: msg.content }
346
+ wire.push({ role: 'user', content })
347
+ continue
310
348
  }
311
349
  if (msg.role === 'tool') {
312
- return {
350
+ const { text, images } = splitToolResult(msg.content)
351
+ wire.push({
313
352
  role: 'tool',
314
- content: toolResultToText(msg.content),
353
+ content: text || '(no output)',
315
354
  tool_call_id: msg.toolCallId,
316
- }
355
+ })
356
+ pendingToolImages.push(...images.map(imagePart))
357
+ continue
317
358
  }
318
359
  const assistant: ChatCompletionMessageParam = {
319
360
  role: 'assistant',
@@ -333,8 +374,82 @@ export function toDeepSeekMessages(
333
374
  if (replayed !== undefined) {
334
375
  ;(assistant as { reasoning_content?: string }).reasoning_content = replayed
335
376
  }
336
- return assistant
337
- })
377
+ wire.push(assistant)
378
+ }
379
+ flushToolImages()
380
+ return wire
381
+ }
382
+
383
+ function splitToolResult(content: ToolResultContent): {
384
+ readonly text: string
385
+ readonly images: readonly ImageAttachment[]
386
+ } {
387
+ const text: string[] = []
388
+ const images: ImageAttachment[] = []
389
+ for (const block of toToolResultBlocks(content)) {
390
+ if (block.type === 'text') text.push(block.text)
391
+ else if (block.type === 'image') images.push(block)
392
+ }
393
+ return { text: text.join('\n'), images }
394
+ }
395
+
396
+ /**
397
+ * Refuse every rich-content shape this exact model/wire cannot represent.
398
+ *
399
+ * This runs before the request object is built, so a text model never sees an
400
+ * image data URL and a document never reaches a wire that would silently drop
401
+ * it. Stored user refs should have been resolved by the SDK attachment store;
402
+ * accepting one here would serialize a reference rather than its bytes.
403
+ */
404
+ function assertDeepSeekRichContent(
405
+ messages: ChatCompletionParams['messages'],
406
+ model: string,
407
+ ): void {
408
+ let hasImage = false
409
+ const acceptImage = (mediaType: string): void => {
410
+ if (!IMAGE_MEDIA_TYPES.has(mediaType)) {
411
+ throw new Error(
412
+ `DeepSeekProvider: image type '${mediaType}' is not supported. Use image/png, image/jpeg, image/webp, or image/gif.`,
413
+ )
414
+ }
415
+ hasImage = true
416
+ }
417
+ for (const message of messages) {
418
+ if (message.role === 'user') {
419
+ for (const attachment of message.attachments ?? []) {
420
+ if (attachment.type === 'stored') {
421
+ throw new Error(
422
+ 'DeepSeekProvider: an unresolved stored attachment reached the driver. Configure an AttachmentStore so Namzu can resolve its bytes before the model request.',
423
+ )
424
+ }
425
+ if (attachment.type === 'document') {
426
+ throw new Error(
427
+ 'DeepSeekProvider: this Chat Completions driver does not support document input. Route the turn to a document-capable provider.',
428
+ )
429
+ }
430
+ acceptImage(attachment.mediaType)
431
+ }
432
+ continue
433
+ }
434
+ if (message.role !== 'tool') continue
435
+ for (const block of toToolResultBlocks(message.content)) {
436
+ if (block.type === 'document') {
437
+ throw new Error(
438
+ 'DeepSeekProvider: this Chat Completions driver does not support document tool results. Route the turn to a document-capable provider.',
439
+ )
440
+ }
441
+ if (block.type === 'image') acceptImage(block.mediaType)
442
+ }
443
+ }
444
+ if (hasImage && model !== VISION_MODEL) {
445
+ throw new Error(
446
+ `DeepSeekProvider: model '${model}' does not accept image input. Select '${VISION_MODEL}' or remove the images.`,
447
+ )
448
+ }
449
+ }
450
+
451
+ function inputModalitiesFor(model: string): readonly ModelInputModality[] | undefined {
452
+ return KNOWN_MODELS.find((candidate) => candidate.id === model)?.inputModalities
338
453
  }
339
454
 
340
455
  export function toDeepSeekTools(params: ChatCompletionParams): ChatCompletionTool[] | undefined {
@@ -580,14 +695,25 @@ export class DeepSeekProvider implements LLMProvider {
580
695
  signal?.throwIfAborted()
581
696
  const page = await this.client.models.list(signal ? { signal } : undefined)
582
697
  signal?.throwIfAborted()
583
- return page.data.map((m) => ({
584
- id: m.id,
585
- name: m.id,
586
- inputPrice: 0,
587
- outputPrice: 0,
588
- supportsToolUse: true,
589
- supportsStreaming: true,
590
- }))
698
+ const models = new Map<string, { id: string; name: string }>()
699
+ for (const model of page.data) models.set(model.id, { id: model.id, name: model.id })
700
+ // The preview model is part of the source adapter's verified default
701
+ // catalogue but may lag the account listing endpoint. A successful list
702
+ // therefore augments rather than erases the known selectable catalogue.
703
+ for (const model of KNOWN_MODELS) {
704
+ models.set(model.id, { id: model.id, name: model.name })
705
+ }
706
+ return [...models.values()].map((model) => {
707
+ const inputModalities = inputModalitiesFor(model.id)
708
+ return {
709
+ ...model,
710
+ ...(inputModalities !== undefined ? { inputModalities } : {}),
711
+ inputPrice: 0,
712
+ outputPrice: 0,
713
+ supportsToolUse: true,
714
+ supportsStreaming: true,
715
+ }
716
+ })
591
717
  }
592
718
 
593
719
  async healthCheck(): Promise<boolean> {