@namzu/deepseek 1.0.0 → 1.1.1

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,31 @@
1
1
  # @namzu/deepseek
2
2
 
3
+ ## 1.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 36248f3: Add separate provider capability declarations for image and document tool
8
+ results, and warn immediately before a request would degrade newly produced
9
+ rich tool output. Tool presenters can now mark a generic label as a complete
10
+ activity and mark a redundant successful acknowledgement as hidden; older
11
+ hosts continue to render the same generic label.
12
+
13
+ The account-routed Responses transport now sends supported user images and
14
+ image tool results as ordered image input parts. Documents, unresolved stored
15
+ references, unsupported image media types and unprojected omission markers are
16
+ refused before transport.
17
+
18
+ The interactive transcript now follows the visible conversation tail without
19
+ a synthetic viewport-height gap, responds to terminal resize, narrates desktop
20
+ actions with human labels, hides only successful empty acknowledgements, and
21
+ keeps screenshot dimensions and failures visible.
22
+
23
+ ## 1.1.0
24
+
25
+ ### Minor Changes
26
+
27
+ - 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.
28
+
3
29
  ## 1.0.0
4
30
 
5
31
  ### 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,oBAQnC,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,29 @@
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,
10
+ supportsToolResultImages: true,
11
+ supportsToolResultDocuments: false,
18
12
  };
19
13
  const DEFAULT_BASE_URL = 'https://api.deepseek.com';
14
+ const VISION_MODEL = 'deepseek-v4-flash-vision-exp';
15
+ const TEXT_MODALITIES = Object.freeze(['text']);
16
+ const VISION_MODALITIES = Object.freeze(['text', 'image']);
17
+ const IMAGE_MEDIA_TYPES = new Set(['image/png', 'image/jpeg', 'image/webp', 'image/gif']);
18
+ const KNOWN_MODELS = Object.freeze([
19
+ { id: 'deepseek-v4-flash', name: 'DeepSeek-V4-Flash', inputModalities: TEXT_MODALITIES },
20
+ { id: 'deepseek-v4-pro', name: 'DeepSeek-V4-Pro', inputModalities: TEXT_MODALITIES },
21
+ {
22
+ id: VISION_MODEL,
23
+ name: 'DeepSeek-V4-Flash-Vision-Exp',
24
+ inputModalities: VISION_MODALITIES,
25
+ },
26
+ ]);
20
27
  function mapFinishReason(reason) {
21
28
  switch (reason) {
22
29
  case 'length':
@@ -189,25 +196,59 @@ function replayReasoning(message, targetRoute) {
189
196
  return durable !== undefined && durable === state.reasoningContent ? durable : undefined;
190
197
  }
191
198
  export function toDeepSeekMessages(messages, targetRoute) {
192
- return messages.map((msg) => {
193
- if (msg.role === 'system')
194
- return { role: 'system', content: msg.content };
199
+ assertDeepSeekRichContent(messages, targetRoute.model);
200
+ const imagePart = (image) => ({
201
+ type: 'image_url',
202
+ image_url: { url: `data:${image.mediaType};base64,${image.data}` },
203
+ });
204
+ const wire = [];
205
+ let pendingToolImages = [];
206
+ const flushToolImages = () => {
207
+ if (pendingToolImages.length === 0)
208
+ return;
209
+ wire.push({
210
+ role: 'user',
211
+ content: [
212
+ { type: 'text', text: 'Attached image(s) from tool result:' },
213
+ ...pendingToolImages,
214
+ ],
215
+ });
216
+ pendingToolImages = [];
217
+ };
218
+ for (const msg of messages) {
219
+ if (msg.role !== 'tool')
220
+ flushToolImages();
221
+ if (msg.role === 'system') {
222
+ wire.push({ role: 'system', content: msg.content });
223
+ continue;
224
+ }
195
225
  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.');
226
+ if (!msg.attachments || msg.attachments.length === 0) {
227
+ wire.push({ role: 'user', content: msg.content });
228
+ continue;
202
229
  }
203
- return { role: 'user', content: msg.content };
230
+ const content = [];
231
+ if (msg.content.length > 0)
232
+ content.push({ type: 'text', text: msg.content });
233
+ for (const attachment of msg.attachments) {
234
+ // The preflight above proves these are inline images. This local check
235
+ // keeps the narrowing explicit instead of casting a public union.
236
+ if (attachment.type === 'stored' || attachment.type === 'document')
237
+ continue;
238
+ content.push(imagePart(attachment));
239
+ }
240
+ wire.push({ role: 'user', content });
241
+ continue;
204
242
  }
205
243
  if (msg.role === 'tool') {
206
- return {
244
+ const { text, images } = splitToolResult(msg.content);
245
+ wire.push({
207
246
  role: 'tool',
208
- content: toolResultToText(msg.content),
247
+ content: text || '(no output)',
209
248
  tool_call_id: msg.toolCallId,
210
- };
249
+ });
250
+ pendingToolImages.push(...images.map(imagePart));
251
+ continue;
211
252
  }
212
253
  const assistant = {
213
254
  role: 'assistant',
@@ -229,8 +270,67 @@ export function toDeepSeekMessages(messages, targetRoute) {
229
270
  ;
230
271
  assistant.reasoning_content = replayed;
231
272
  }
232
- return assistant;
233
- });
273
+ wire.push(assistant);
274
+ }
275
+ flushToolImages();
276
+ return wire;
277
+ }
278
+ function splitToolResult(content) {
279
+ const text = [];
280
+ const images = [];
281
+ for (const block of toToolResultBlocks(content)) {
282
+ if (block.type === 'text')
283
+ text.push(block.text);
284
+ else if (block.type === 'image')
285
+ images.push(block);
286
+ }
287
+ return { text: text.join('\n'), images };
288
+ }
289
+ /**
290
+ * Refuse every rich-content shape this exact model/wire cannot represent.
291
+ *
292
+ * This runs before the request object is built, so a text model never sees an
293
+ * image data URL and a document never reaches a wire that would silently drop
294
+ * it. Stored user refs should have been resolved by the SDK attachment store;
295
+ * accepting one here would serialize a reference rather than its bytes.
296
+ */
297
+ function assertDeepSeekRichContent(messages, model) {
298
+ let hasImage = false;
299
+ const acceptImage = (mediaType) => {
300
+ if (!IMAGE_MEDIA_TYPES.has(mediaType)) {
301
+ throw new Error(`DeepSeekProvider: image type '${mediaType}' is not supported. Use image/png, image/jpeg, image/webp, or image/gif.`);
302
+ }
303
+ hasImage = true;
304
+ };
305
+ for (const message of messages) {
306
+ if (message.role === 'user') {
307
+ for (const attachment of message.attachments ?? []) {
308
+ if (attachment.type === 'stored') {
309
+ throw new Error('DeepSeekProvider: an unresolved stored attachment reached the driver. Configure an AttachmentStore so Namzu can resolve its bytes before the model request.');
310
+ }
311
+ if (attachment.type === 'document') {
312
+ throw new Error('DeepSeekProvider: this Chat Completions driver does not support document input. Route the turn to a document-capable provider.');
313
+ }
314
+ acceptImage(attachment.mediaType);
315
+ }
316
+ continue;
317
+ }
318
+ if (message.role !== 'tool')
319
+ continue;
320
+ for (const block of toToolResultBlocks(message.content)) {
321
+ if (block.type === 'document') {
322
+ throw new Error('DeepSeekProvider: this Chat Completions driver does not support document tool results. Route the turn to a document-capable provider.');
323
+ }
324
+ if (block.type === 'image')
325
+ acceptImage(block.mediaType);
326
+ }
327
+ }
328
+ if (hasImage && model !== VISION_MODEL) {
329
+ throw new Error(`DeepSeekProvider: model '${model}' does not accept image input. Select '${VISION_MODEL}' or remove the images.`);
330
+ }
331
+ }
332
+ function inputModalitiesFor(model) {
333
+ return KNOWN_MODELS.find((candidate) => candidate.id === model)?.inputModalities;
234
334
  }
235
335
  export function toDeepSeekTools(params) {
236
336
  if (!params.tools || params.tools.length === 0)
@@ -443,14 +543,26 @@ export class DeepSeekProvider {
443
543
  signal?.throwIfAborted();
444
544
  const page = await this.client.models.list(signal ? { signal } : undefined);
445
545
  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
- }));
546
+ const models = new Map();
547
+ for (const model of page.data)
548
+ models.set(model.id, { id: model.id, name: model.id });
549
+ // The preview model is part of the source adapter's verified default
550
+ // catalogue but may lag the account listing endpoint. A successful list
551
+ // therefore augments rather than erases the known selectable catalogue.
552
+ for (const model of KNOWN_MODELS) {
553
+ models.set(model.id, { id: model.id, name: model.name });
554
+ }
555
+ return [...models.values()].map((model) => {
556
+ const inputModalities = inputModalitiesFor(model.id);
557
+ return {
558
+ ...model,
559
+ ...(inputModalities !== undefined ? { inputModalities } : {}),
560
+ inputPrice: 0,
561
+ outputPrice: 0,
562
+ supportsToolUse: true,
563
+ supportsStreaming: true,
564
+ };
565
+ });
454
566
  }
455
567
  async healthCheck() {
456
568
  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.1",
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": "^33.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,31 @@ 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,
41
+ supportsToolResultImages: true,
42
+ supportsToolResultDocuments: false,
46
43
  }
47
44
 
48
45
  const DEFAULT_BASE_URL = 'https://api.deepseek.com'
46
+ const VISION_MODEL = 'deepseek-v4-flash-vision-exp'
47
+ const TEXT_MODALITIES = Object.freeze(['text'] as const)
48
+ const VISION_MODALITIES = Object.freeze(['text', 'image'] as const)
49
+ const IMAGE_MEDIA_TYPES = new Set(['image/png', 'image/jpeg', 'image/webp', 'image/gif'])
50
+ const KNOWN_MODELS = Object.freeze([
51
+ { id: 'deepseek-v4-flash', name: 'DeepSeek-V4-Flash', inputModalities: TEXT_MODALITIES },
52
+ { id: 'deepseek-v4-pro', name: 'DeepSeek-V4-Pro', inputModalities: TEXT_MODALITIES },
53
+ {
54
+ id: VISION_MODEL,
55
+ name: 'DeepSeek-V4-Flash-Vision-Exp',
56
+ inputModalities: VISION_MODALITIES,
57
+ },
58
+ ] as const)
49
59
 
50
60
  type DeepSeekFinishReason =
51
61
  | 'stop'
@@ -294,26 +304,59 @@ export function toDeepSeekMessages(
294
304
  messages: ChatCompletionParams['messages'],
295
305
  targetRoute: ProviderRoute,
296
306
  ): ChatCompletionMessageParam[] {
297
- return messages.map((msg): ChatCompletionMessageParam => {
298
- if (msg.role === 'system') return { role: 'system', content: msg.content }
307
+ assertDeepSeekRichContent(messages, targetRoute.model)
308
+
309
+ type ImagePart = { type: 'image_url'; image_url: { url: string } }
310
+ type UserPart = { type: 'text'; text: string } | ImagePart
311
+ const imagePart = (image: ImageAttachment): ImagePart => ({
312
+ type: 'image_url',
313
+ image_url: { url: `data:${image.mediaType};base64,${image.data}` },
314
+ })
315
+ const wire: ChatCompletionMessageParam[] = []
316
+ let pendingToolImages: ImagePart[] = []
317
+ const flushToolImages = (): void => {
318
+ if (pendingToolImages.length === 0) return
319
+ wire.push({
320
+ role: 'user',
321
+ content: [
322
+ { type: 'text', text: 'Attached image(s) from tool result:' },
323
+ ...pendingToolImages,
324
+ ],
325
+ })
326
+ pendingToolImages = []
327
+ }
328
+
329
+ for (const msg of messages) {
330
+ if (msg.role !== 'tool') flushToolImages()
331
+ if (msg.role === 'system') {
332
+ wire.push({ role: 'system', content: msg.content })
333
+ continue
334
+ }
299
335
  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
- )
336
+ if (!msg.attachments || msg.attachments.length === 0) {
337
+ wire.push({ role: 'user', content: msg.content })
338
+ continue
339
+ }
340
+ const content: UserPart[] = []
341
+ if (msg.content.length > 0) content.push({ type: 'text', text: msg.content })
342
+ for (const attachment of msg.attachments) {
343
+ // The preflight above proves these are inline images. This local check
344
+ // keeps the narrowing explicit instead of casting a public union.
345
+ if (attachment.type === 'stored' || attachment.type === 'document') continue
346
+ content.push(imagePart(attachment))
308
347
  }
309
- return { role: 'user', content: msg.content }
348
+ wire.push({ role: 'user', content })
349
+ continue
310
350
  }
311
351
  if (msg.role === 'tool') {
312
- return {
352
+ const { text, images } = splitToolResult(msg.content)
353
+ wire.push({
313
354
  role: 'tool',
314
- content: toolResultToText(msg.content),
355
+ content: text || '(no output)',
315
356
  tool_call_id: msg.toolCallId,
316
- }
357
+ })
358
+ pendingToolImages.push(...images.map(imagePart))
359
+ continue
317
360
  }
318
361
  const assistant: ChatCompletionMessageParam = {
319
362
  role: 'assistant',
@@ -333,8 +376,82 @@ export function toDeepSeekMessages(
333
376
  if (replayed !== undefined) {
334
377
  ;(assistant as { reasoning_content?: string }).reasoning_content = replayed
335
378
  }
336
- return assistant
337
- })
379
+ wire.push(assistant)
380
+ }
381
+ flushToolImages()
382
+ return wire
383
+ }
384
+
385
+ function splitToolResult(content: ToolResultContent): {
386
+ readonly text: string
387
+ readonly images: readonly ImageAttachment[]
388
+ } {
389
+ const text: string[] = []
390
+ const images: ImageAttachment[] = []
391
+ for (const block of toToolResultBlocks(content)) {
392
+ if (block.type === 'text') text.push(block.text)
393
+ else if (block.type === 'image') images.push(block)
394
+ }
395
+ return { text: text.join('\n'), images }
396
+ }
397
+
398
+ /**
399
+ * Refuse every rich-content shape this exact model/wire cannot represent.
400
+ *
401
+ * This runs before the request object is built, so a text model never sees an
402
+ * image data URL and a document never reaches a wire that would silently drop
403
+ * it. Stored user refs should have been resolved by the SDK attachment store;
404
+ * accepting one here would serialize a reference rather than its bytes.
405
+ */
406
+ function assertDeepSeekRichContent(
407
+ messages: ChatCompletionParams['messages'],
408
+ model: string,
409
+ ): void {
410
+ let hasImage = false
411
+ const acceptImage = (mediaType: string): void => {
412
+ if (!IMAGE_MEDIA_TYPES.has(mediaType)) {
413
+ throw new Error(
414
+ `DeepSeekProvider: image type '${mediaType}' is not supported. Use image/png, image/jpeg, image/webp, or image/gif.`,
415
+ )
416
+ }
417
+ hasImage = true
418
+ }
419
+ for (const message of messages) {
420
+ if (message.role === 'user') {
421
+ for (const attachment of message.attachments ?? []) {
422
+ if (attachment.type === 'stored') {
423
+ throw new Error(
424
+ 'DeepSeekProvider: an unresolved stored attachment reached the driver. Configure an AttachmentStore so Namzu can resolve its bytes before the model request.',
425
+ )
426
+ }
427
+ if (attachment.type === 'document') {
428
+ throw new Error(
429
+ 'DeepSeekProvider: this Chat Completions driver does not support document input. Route the turn to a document-capable provider.',
430
+ )
431
+ }
432
+ acceptImage(attachment.mediaType)
433
+ }
434
+ continue
435
+ }
436
+ if (message.role !== 'tool') continue
437
+ for (const block of toToolResultBlocks(message.content)) {
438
+ if (block.type === 'document') {
439
+ throw new Error(
440
+ 'DeepSeekProvider: this Chat Completions driver does not support document tool results. Route the turn to a document-capable provider.',
441
+ )
442
+ }
443
+ if (block.type === 'image') acceptImage(block.mediaType)
444
+ }
445
+ }
446
+ if (hasImage && model !== VISION_MODEL) {
447
+ throw new Error(
448
+ `DeepSeekProvider: model '${model}' does not accept image input. Select '${VISION_MODEL}' or remove the images.`,
449
+ )
450
+ }
451
+ }
452
+
453
+ function inputModalitiesFor(model: string): readonly ModelInputModality[] | undefined {
454
+ return KNOWN_MODELS.find((candidate) => candidate.id === model)?.inputModalities
338
455
  }
339
456
 
340
457
  export function toDeepSeekTools(params: ChatCompletionParams): ChatCompletionTool[] | undefined {
@@ -580,14 +697,25 @@ export class DeepSeekProvider implements LLMProvider {
580
697
  signal?.throwIfAborted()
581
698
  const page = await this.client.models.list(signal ? { signal } : undefined)
582
699
  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
- }))
700
+ const models = new Map<string, { id: string; name: string }>()
701
+ for (const model of page.data) models.set(model.id, { id: model.id, name: model.id })
702
+ // The preview model is part of the source adapter's verified default
703
+ // catalogue but may lag the account listing endpoint. A successful list
704
+ // therefore augments rather than erases the known selectable catalogue.
705
+ for (const model of KNOWN_MODELS) {
706
+ models.set(model.id, { id: model.id, name: model.name })
707
+ }
708
+ return [...models.values()].map((model) => {
709
+ const inputModalities = inputModalitiesFor(model.id)
710
+ return {
711
+ ...model,
712
+ ...(inputModalities !== undefined ? { inputModalities } : {}),
713
+ inputPrice: 0,
714
+ outputPrice: 0,
715
+ supportsToolUse: true,
716
+ supportsStreaming: true,
717
+ }
718
+ })
591
719
  }
592
720
 
593
721
  async healthCheck(): Promise<boolean> {