dominds 1.17.7 → 1.18.2
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/dist/dialog-fork.js +11 -5
- package/dist/dialog-instance-registry.js +1 -18
- package/dist/dialog.d.ts +21 -31
- package/dist/dialog.js +207 -56
- package/dist/docs/dialog-system.md +3 -2
- package/dist/docs/dialog-system.zh.md +3 -2
- package/dist/docs/tellask-collab.md +2 -1
- package/dist/docs/tellask-collab.zh.md +2 -1
- package/dist/llm/defaults.yaml +43 -0
- package/dist/llm/gen/anthropic.js +153 -12
- package/dist/llm/gen/codex.js +160 -10
- package/dist/llm/gen/openai-compatible.js +141 -81
- package/dist/llm/gen/openai.js +178 -12
- package/dist/llm/gen/tool-result-image-ingest.d.ts +17 -8
- package/dist/llm/gen/tool-result-image-ingest.js +127 -27
- package/dist/llm/gen.d.ts +13 -0
- package/dist/llm/kernel-driver/drive.js +79 -15
- package/dist/llm/kernel-driver/flow.js +158 -41
- package/dist/llm/kernel-driver/reply-guidance.d.ts +6 -6
- package/dist/llm/kernel-driver/reply-guidance.js +169 -2
- package/dist/llm/kernel-driver/runtime.d.ts +2 -2
- package/dist/llm/kernel-driver/subdialog.js +4 -0
- package/dist/llm/kernel-driver/tellask-special.d.ts +2 -0
- package/dist/llm/kernel-driver/tellask-special.js +11 -6
- package/dist/llm/kernel-driver/types.d.ts +14 -24
- package/dist/minds/system-prompt.js +8 -8
- package/dist/persistence.d.ts +6 -5
- package/dist/persistence.js +198 -39
- package/dist/priming.js +98 -3
- package/dist/runtime/driver-messages.d.ts +1 -0
- package/dist/runtime/driver-messages.js +32 -10
- package/dist/runtime/reply-prompt-copy.js +4 -4
- package/dist/server/api-routes.js +11 -43
- package/dist/server/websocket-handler.js +155 -10
- package/dist/tools/builtins.js +10 -4
- package/dist/tools/cmd-runner.js +110 -49
- package/dist/tools/picture.d.ts +3 -0
- package/dist/tools/picture.js +344 -0
- package/dist/tools/prompts/control/en/principles.md +4 -2
- package/dist/tools/prompts/control/en/scenarios.md +2 -1
- package/dist/tools/prompts/control/en/tools.md +6 -6
- package/dist/tools/prompts/control/zh/principles.md +4 -2
- package/dist/tools/prompts/control/zh/scenarios.md +2 -1
- package/dist/tools/prompts/control/zh/tools.md +1 -1
- package/dist/tools/prompts/ws_mod.en.md +1 -0
- package/dist/tools/prompts/ws_mod.zh.md +1 -0
- package/dist/tools/prompts/ws_read/en/tools.md +25 -5
- package/dist/tools/prompts/ws_read/zh/tools.md +25 -5
- package/package.json +4 -4
- package/webapp/dist/assets/{_basePickBy-u7tNFRWr.js → _basePickBy-BPJaiZdW.js} +3 -3
- package/webapp/dist/assets/{_basePickBy-u7tNFRWr.js.map → _basePickBy-BPJaiZdW.js.map} +1 -1
- package/webapp/dist/assets/{_baseUniq-CH9LRkiH.js → _baseUniq-BEetT15i.js} +2 -2
- package/webapp/dist/assets/{_baseUniq-CH9LRkiH.js.map → _baseUniq-BEetT15i.js.map} +1 -1
- package/webapp/dist/assets/{arc-Bo0Lw3ZP.js → arc-Dm7Zf36f.js} +2 -2
- package/webapp/dist/assets/{arc-Bo0Lw3ZP.js.map → arc-Dm7Zf36f.js.map} +1 -1
- package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-Ckyr89Iw.js → architectureDiagram-VXUJARFQ-BpTPtkuo.js} +7 -7
- package/webapp/dist/assets/{architectureDiagram-VXUJARFQ-Ckyr89Iw.js.map → architectureDiagram-VXUJARFQ-BpTPtkuo.js.map} +1 -1
- package/webapp/dist/assets/{blockDiagram-VD42YOAC-BSXoLLq_.js → blockDiagram-VD42YOAC-C8fLN0iu.js} +7 -7
- package/webapp/dist/assets/{blockDiagram-VD42YOAC-BSXoLLq_.js.map → blockDiagram-VD42YOAC-C8fLN0iu.js.map} +1 -1
- package/webapp/dist/assets/{c4Diagram-YG6GDRKO-CgCG1cP0.js → c4Diagram-YG6GDRKO-BpPr62CH.js} +3 -3
- package/webapp/dist/assets/{c4Diagram-YG6GDRKO-CgCG1cP0.js.map → c4Diagram-YG6GDRKO-BpPr62CH.js.map} +1 -1
- package/webapp/dist/assets/{channel-Crbz0zgt.js → channel-EMYoPjW3.js} +2 -2
- package/webapp/dist/assets/{channel-Crbz0zgt.js.map → channel-EMYoPjW3.js.map} +1 -1
- package/webapp/dist/assets/{chunk-4BX2VUAB-BIIEb_5S.js → chunk-4BX2VUAB-CefNtjWG.js} +2 -2
- package/webapp/dist/assets/{chunk-4BX2VUAB-BIIEb_5S.js.map → chunk-4BX2VUAB-CefNtjWG.js.map} +1 -1
- package/webapp/dist/assets/{chunk-55IACEB6-CaJzGgc9.js → chunk-55IACEB6-C_X7T43V.js} +2 -2
- package/webapp/dist/assets/{chunk-55IACEB6-CaJzGgc9.js.map → chunk-55IACEB6-C_X7T43V.js.map} +1 -1
- package/webapp/dist/assets/{chunk-B4BG7PRW-DHQwhO9F.js → chunk-B4BG7PRW-BRe3_2oA.js} +5 -5
- package/webapp/dist/assets/{chunk-B4BG7PRW-DHQwhO9F.js.map → chunk-B4BG7PRW-BRe3_2oA.js.map} +1 -1
- package/webapp/dist/assets/{chunk-DI55MBZ5-CG1lO0R8.js → chunk-DI55MBZ5-CbvrsI_w.js} +4 -4
- package/webapp/dist/assets/{chunk-DI55MBZ5-CG1lO0R8.js.map → chunk-DI55MBZ5-CbvrsI_w.js.map} +1 -1
- package/webapp/dist/assets/{chunk-FMBD7UC4-DAUsTLPS.js → chunk-FMBD7UC4-ORmtkrtS.js} +2 -2
- package/webapp/dist/assets/{chunk-FMBD7UC4-DAUsTLPS.js.map → chunk-FMBD7UC4-ORmtkrtS.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QN33PNHL-BfQs-QHE.js → chunk-QN33PNHL-LTAOVhWu.js} +2 -2
- package/webapp/dist/assets/{chunk-QN33PNHL-BfQs-QHE.js.map → chunk-QN33PNHL-LTAOVhWu.js.map} +1 -1
- package/webapp/dist/assets/{chunk-QZHKN3VN-C5iKQ6mQ.js → chunk-QZHKN3VN-ZoUM_4u5.js} +2 -2
- package/webapp/dist/assets/{chunk-QZHKN3VN-C5iKQ6mQ.js.map → chunk-QZHKN3VN-ZoUM_4u5.js.map} +1 -1
- package/webapp/dist/assets/{chunk-TZMSLE5B-CBShDwy2.js → chunk-TZMSLE5B-Gao4qrq7.js} +2 -2
- package/webapp/dist/assets/{chunk-TZMSLE5B-CBShDwy2.js.map → chunk-TZMSLE5B-Gao4qrq7.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-2ON5EDUG-DrfJDzYO.js → classDiagram-2ON5EDUG-uha1vIGN.js} +6 -6
- package/webapp/dist/assets/{classDiagram-2ON5EDUG-DrfJDzYO.js.map → classDiagram-2ON5EDUG-uha1vIGN.js.map} +1 -1
- package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-DrfJDzYO.js → classDiagram-v2-WZHVMYZB-uha1vIGN.js} +6 -6
- package/webapp/dist/assets/{classDiagram-v2-WZHVMYZB-DrfJDzYO.js.map → classDiagram-v2-WZHVMYZB-uha1vIGN.js.map} +1 -1
- package/webapp/dist/assets/{clone-Cd-48URG.js → clone-_9Ayb1Gp.js} +2 -2
- package/webapp/dist/assets/{clone-Cd-48URG.js.map → clone-_9Ayb1Gp.js.map} +1 -1
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-CCji0YN3.js → cose-bilkent-S5V4N54A-C8wDw3NY.js} +2 -2
- package/webapp/dist/assets/{cose-bilkent-S5V4N54A-CCji0YN3.js.map → cose-bilkent-S5V4N54A-C8wDw3NY.js.map} +1 -1
- package/webapp/dist/assets/{dagre-6UL2VRFP-B94p-Dpl.js → dagre-6UL2VRFP-BUSeNot0.js} +7 -7
- package/webapp/dist/assets/{dagre-6UL2VRFP-B94p-Dpl.js.map → dagre-6UL2VRFP-BUSeNot0.js.map} +1 -1
- package/webapp/dist/assets/{diagram-PSM6KHXK-DP-zGmAS.js → diagram-PSM6KHXK-CMZAksVC.js} +8 -8
- package/webapp/dist/assets/{diagram-PSM6KHXK-DP-zGmAS.js.map → diagram-PSM6KHXK-CMZAksVC.js.map} +1 -1
- package/webapp/dist/assets/{diagram-QEK2KX5R-DquJirs4.js → diagram-QEK2KX5R-BQKoRtwy.js} +7 -7
- package/webapp/dist/assets/{diagram-QEK2KX5R-DquJirs4.js.map → diagram-QEK2KX5R-BQKoRtwy.js.map} +1 -1
- package/webapp/dist/assets/{diagram-S2PKOQOG-Dt5W2t6V.js → diagram-S2PKOQOG-DjMG97kd.js} +7 -7
- package/webapp/dist/assets/{diagram-S2PKOQOG-Dt5W2t6V.js.map → diagram-S2PKOQOG-DjMG97kd.js.map} +1 -1
- package/webapp/dist/assets/{erDiagram-Q2GNP2WA-Bs0-2Rfj.js → erDiagram-Q2GNP2WA-BujwA137.js} +5 -5
- package/webapp/dist/assets/{erDiagram-Q2GNP2WA-Bs0-2Rfj.js.map → erDiagram-Q2GNP2WA-BujwA137.js.map} +1 -1
- package/webapp/dist/assets/{flowDiagram-NV44I4VS-cJjXWAlK.js → flowDiagram-NV44I4VS-DgwPjg4y.js} +6 -6
- package/webapp/dist/assets/{flowDiagram-NV44I4VS-cJjXWAlK.js.map → flowDiagram-NV44I4VS-DgwPjg4y.js.map} +1 -1
- package/webapp/dist/assets/{ganttDiagram-JELNMOA3-Du1AUaKm.js → ganttDiagram-JELNMOA3-Db2ykf3E.js} +3 -3
- package/webapp/dist/assets/{ganttDiagram-JELNMOA3-Du1AUaKm.js.map → ganttDiagram-JELNMOA3-Db2ykf3E.js.map} +1 -1
- package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-D_jVOYOK.js → gitGraphDiagram-V2S2FVAM-D_gSifkv.js} +8 -8
- package/webapp/dist/assets/{gitGraphDiagram-V2S2FVAM-D_jVOYOK.js.map → gitGraphDiagram-V2S2FVAM-D_gSifkv.js.map} +1 -1
- package/webapp/dist/assets/{graph-CuF_sq4r.js → graph-BHjCU5xP.js} +3 -3
- package/webapp/dist/assets/{graph-CuF_sq4r.js.map → graph-BHjCU5xP.js.map} +1 -1
- package/webapp/dist/assets/{index-DAShQcjb.js → index-DLajsIDJ.js} +1363 -248
- package/webapp/dist/assets/{index-DAShQcjb.js.map → index-DLajsIDJ.js.map} +1 -1
- package/webapp/dist/assets/{infoDiagram-HS3SLOUP-CEFlo_Hl.js → infoDiagram-HS3SLOUP-BDba5pKs.js} +6 -6
- package/webapp/dist/assets/{infoDiagram-HS3SLOUP-CEFlo_Hl.js.map → infoDiagram-HS3SLOUP-BDba5pKs.js.map} +1 -1
- package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-zc2Q4Se9.js → journeyDiagram-XKPGCS4Q-CmJAbmlm.js} +5 -5
- package/webapp/dist/assets/{journeyDiagram-XKPGCS4Q-zc2Q4Se9.js.map → journeyDiagram-XKPGCS4Q-CmJAbmlm.js.map} +1 -1
- package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-oT42RM2a.js → kanban-definition-3W4ZIXB7-DxQeBTDk.js} +3 -3
- package/webapp/dist/assets/{kanban-definition-3W4ZIXB7-oT42RM2a.js.map → kanban-definition-3W4ZIXB7-DxQeBTDk.js.map} +1 -1
- package/webapp/dist/assets/{layout-BvaOu3k2.js → layout-DteV_yE8.js} +5 -5
- package/webapp/dist/assets/{layout-BvaOu3k2.js.map → layout-DteV_yE8.js.map} +1 -1
- package/webapp/dist/assets/{linear-Cg-CjocS.js → linear-zItbPrND.js} +2 -2
- package/webapp/dist/assets/{linear-Cg-CjocS.js.map → linear-zItbPrND.js.map} +1 -1
- package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-CVFVrU22.js → mindmap-definition-VGOIOE7T-BJXI7UqO.js} +4 -4
- package/webapp/dist/assets/{mindmap-definition-VGOIOE7T-CVFVrU22.js.map → mindmap-definition-VGOIOE7T-BJXI7UqO.js.map} +1 -1
- package/webapp/dist/assets/{pieDiagram-ADFJNKIX-Bai5CMos.js → pieDiagram-ADFJNKIX-BpM-aH2p.js} +8 -8
- package/webapp/dist/assets/{pieDiagram-ADFJNKIX-Bai5CMos.js.map → pieDiagram-ADFJNKIX-BpM-aH2p.js.map} +1 -1
- package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-BPXDO_2E.js → quadrantDiagram-AYHSOK5B-NXdIpA15.js} +3 -3
- package/webapp/dist/assets/{quadrantDiagram-AYHSOK5B-BPXDO_2E.js.map → quadrantDiagram-AYHSOK5B-NXdIpA15.js.map} +1 -1
- package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-Dgj9X9cE.js → requirementDiagram-UZGBJVZJ-D1AICAA0.js} +4 -4
- package/webapp/dist/assets/{requirementDiagram-UZGBJVZJ-Dgj9X9cE.js.map → requirementDiagram-UZGBJVZJ-D1AICAA0.js.map} +1 -1
- package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-Dc0mO4OD.js → sankeyDiagram-TZEHDZUN-WiReDPfo.js} +2 -2
- package/webapp/dist/assets/{sankeyDiagram-TZEHDZUN-Dc0mO4OD.js.map → sankeyDiagram-TZEHDZUN-WiReDPfo.js.map} +1 -1
- package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-DZJTga0d.js → sequenceDiagram-WL72ISMW-Cw76oP8t.js} +4 -4
- package/webapp/dist/assets/{sequenceDiagram-WL72ISMW-DZJTga0d.js.map → sequenceDiagram-WL72ISMW-Cw76oP8t.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-RNxYatKM.js → stateDiagram-FKZM4ZOC-QjCeRczs.js} +9 -9
- package/webapp/dist/assets/{stateDiagram-FKZM4ZOC-RNxYatKM.js.map → stateDiagram-FKZM4ZOC-QjCeRczs.js.map} +1 -1
- package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-ADxYqWzo.js → stateDiagram-v2-4FDKWEC3-IClqxQ4s.js} +5 -5
- package/webapp/dist/assets/{stateDiagram-v2-4FDKWEC3-ADxYqWzo.js.map → stateDiagram-v2-4FDKWEC3-IClqxQ4s.js.map} +1 -1
- package/webapp/dist/assets/{timeline-definition-IT6M3QCI-Qx_h1e-i.js → timeline-definition-IT6M3QCI-BfyfTY7m.js} +3 -3
- package/webapp/dist/assets/{timeline-definition-IT6M3QCI-Qx_h1e-i.js.map → timeline-definition-IT6M3QCI-BfyfTY7m.js.map} +1 -1
- package/webapp/dist/assets/{treemap-GDKQZRPO-BHzYvXGn.js → treemap-GDKQZRPO-C5MiL6--.js} +5 -5
- package/webapp/dist/assets/{treemap-GDKQZRPO-BHzYvXGn.js.map → treemap-GDKQZRPO-C5MiL6--.js.map} +1 -1
- package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-DGdjkYQQ.js → xychartDiagram-PRI3JC2R-ybaJrSry.js} +3 -3
- package/webapp/dist/assets/{xychartDiagram-PRI3JC2R-DGdjkYQQ.js.map → xychartDiagram-PRI3JC2R-ybaJrSry.js.map} +1 -1
- package/webapp/dist/index.html +1 -1
|
@@ -241,7 +241,8 @@ flowchart TD
|
|
|
241
241
|
**支线交付规则(规范)**:
|
|
242
242
|
|
|
243
243
|
- 只有当所有目标完成时,支线对话才可直接正常回复诉请者对话。
|
|
244
|
-
-
|
|
244
|
+
- 若目标尚未完成,不要默认直接 `tellaskBack`;应先按团队规程 / SOP / 职责卡判断能否明确负责人,若能明确且属于执行性处理,直接 `tellask` / `tellaskSessionless` 对应负责人。
|
|
245
|
+
- 只有当必须由上游诉请者补充需求、澄清目标、做业务裁决、确认验收口径、提供缺失输入,或现有规程无法明确判责时,才使用 `tellaskBack({ tellaskContent: "..." })` 回问诉请者对话再继续。
|
|
245
246
|
- **FBR 例外**:FBR 支线对话禁止一切 tellask(包括 `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman`),只能列出缺口与阻塞原因并直接回复。
|
|
246
247
|
|
|
247
248
|
**跨对话传递与标记(强制)**:
|
|
@@ -262,7 +263,7 @@ flowchart TD
|
|
|
262
263
|
|
|
263
264
|
**协议澄清**:
|
|
264
265
|
|
|
265
|
-
-
|
|
266
|
+
- 需要回问上游时必须真实调用 `tellaskBack({ tellaskContent: "..." })`;但在此之前应先判断是否已有团队规程可直接判责到其他负责人。不得发送普通文本中间汇报。
|
|
266
267
|
|
|
267
268
|
**示例**:
|
|
268
269
|
|
|
@@ -120,7 +120,8 @@ That is a workflow break. The model should send the Tellask directly.
|
|
|
120
120
|
|
|
121
121
|
- If a sideline dialog has completed all goals and can deliver the final result, it MUST reply directly with the response body; do not use `tellaskBack` to send final delivery.
|
|
122
122
|
- Runtime treats that direct reply as the completion delivery to the tellasker dialog and injects the work-language marker automatically (`【Completed】` in English work language, `【最终完成】` in Chinese work language).
|
|
123
|
-
- If
|
|
123
|
+
- If the work is unfinished, do not default to `tellaskBack`: first use team SOP / role ownership to judge whether a responsible owner is already clear; if yes and the issue is execution work, directly use `tellask` / `tellaskSessionless` for that owner.
|
|
124
|
+
- Use `tellaskBack({ tellaskContent: "..." })` only when the upstream requester must clarify the request, decide a tradeoff, confirm acceptance criteria, provide missing input, or current SOP cannot determine ownership; do not post plain-text intermediate status updates while unfinished.
|
|
124
125
|
- **FBR exception**: FBR forbids all tellask calls (including `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman`); list missing context + reasoning and return.
|
|
125
126
|
- If a human user inserts a message or asks a follow-up in the sideline: just reply normally; no need to report back to the upstream requester.
|
|
126
127
|
|
|
@@ -116,7 +116,8 @@
|
|
|
116
116
|
**支线交付规则**:
|
|
117
117
|
|
|
118
118
|
- 只有当所有目标完成时,支线对话才可直接正常回复诉请者对话(直接发正文即可,不需要调用 tellaskBack;运行时自动注入完成标记)。
|
|
119
|
-
-
|
|
119
|
+
- 若目标尚未完成,不要默认直接 `tellaskBack`:应先按团队规程 / SOP / 职责卡判断能否明确负责人;若能明确且属于执行性处理,直接 `tellask` / `tellaskSessionless` 对应负责人。
|
|
120
|
+
- 只有当必须由上游诉请者补充需求、澄清目标、做业务裁决、确认验收口径、提供缺失输入,或现有规程无法明确判责时,才使用 `tellaskBack({ tellaskContent: "..." })` 回问诉请者对话;不得发送普通文本中间汇报。
|
|
120
121
|
- **FBR 例外**:FBR 禁止一切 tellask(包括 `tellaskBack` / `tellask` / `tellaskSessionless` / `askHuman`);只列缺口 + 推理与摘要并直接回复。
|
|
121
122
|
- 若人类用户在支线对话中插入消息或补问:直接正常回复,不需要向诉请者汇报。
|
|
122
123
|
|
package/dist/llm/defaults.yaml
CHANGED
|
@@ -199,24 +199,28 @@ providers:
|
|
|
199
199
|
models:
|
|
200
200
|
MiniMax-M2.7:
|
|
201
201
|
name: MiniMax M2.7
|
|
202
|
+
supports_image_input: false
|
|
202
203
|
context_length: 204800
|
|
203
204
|
input_length: 204800
|
|
204
205
|
output_length: 8192
|
|
205
206
|
context_window: '204K'
|
|
206
207
|
MiniMax-M2.5:
|
|
207
208
|
name: MiniMax M2.5
|
|
209
|
+
supports_image_input: false
|
|
208
210
|
context_length: 204800
|
|
209
211
|
input_length: 204800
|
|
210
212
|
output_length: 8192
|
|
211
213
|
context_window: '204K'
|
|
212
214
|
MiniMax-M2.1:
|
|
213
215
|
name: MiniMax M2.1
|
|
216
|
+
supports_image_input: false
|
|
214
217
|
context_length: 204800
|
|
215
218
|
input_length: 204800
|
|
216
219
|
output_length: 8192
|
|
217
220
|
context_window: '204K'
|
|
218
221
|
MiniMax-M2:
|
|
219
222
|
name: MiniMax M2
|
|
223
|
+
supports_image_input: false
|
|
220
224
|
context_length: 204800
|
|
221
225
|
input_length: 204800
|
|
222
226
|
output_length: 8192
|
|
@@ -252,24 +256,28 @@ providers:
|
|
|
252
256
|
models:
|
|
253
257
|
MiniMax-M2.7:
|
|
254
258
|
name: MiniMax M2.7
|
|
259
|
+
supports_image_input: false
|
|
255
260
|
context_length: 204800
|
|
256
261
|
input_length: 204800
|
|
257
262
|
output_length: 8192
|
|
258
263
|
context_window: '204K'
|
|
259
264
|
MiniMax-M2.5:
|
|
260
265
|
name: MiniMax M2.5
|
|
266
|
+
supports_image_input: false
|
|
261
267
|
context_length: 204800
|
|
262
268
|
input_length: 204800
|
|
263
269
|
output_length: 8192
|
|
264
270
|
context_window: '204K'
|
|
265
271
|
MiniMax-M2.1:
|
|
266
272
|
name: MiniMax M2.1
|
|
273
|
+
supports_image_input: false
|
|
267
274
|
context_length: 204800
|
|
268
275
|
input_length: 204800
|
|
269
276
|
output_length: 8192
|
|
270
277
|
context_window: '204K'
|
|
271
278
|
MiniMax-M2:
|
|
272
279
|
name: MiniMax M2 Stable
|
|
280
|
+
supports_image_input: false
|
|
273
281
|
context_length: 204800
|
|
274
282
|
input_length: 204800
|
|
275
283
|
output_length: 8192
|
|
@@ -305,24 +313,28 @@ providers:
|
|
|
305
313
|
models:
|
|
306
314
|
MiniMax-M2.7:
|
|
307
315
|
name: MiniMax M2.7
|
|
316
|
+
supports_image_input: false
|
|
308
317
|
context_length: 204800
|
|
309
318
|
input_length: 204800
|
|
310
319
|
output_length: 8192
|
|
311
320
|
context_window: '204K'
|
|
312
321
|
MiniMax-M2.5:
|
|
313
322
|
name: MiniMax M2.5
|
|
323
|
+
supports_image_input: false
|
|
314
324
|
context_length: 204800
|
|
315
325
|
input_length: 204800
|
|
316
326
|
output_length: 8192
|
|
317
327
|
context_window: '204K'
|
|
318
328
|
MiniMax-M2.1:
|
|
319
329
|
name: MiniMax M2.1
|
|
330
|
+
supports_image_input: false
|
|
320
331
|
context_length: 204800
|
|
321
332
|
input_length: 204800
|
|
322
333
|
output_length: 8192
|
|
323
334
|
context_window: '204K'
|
|
324
335
|
MiniMax-M2:
|
|
325
336
|
name: MiniMax M2
|
|
337
|
+
supports_image_input: false
|
|
326
338
|
context_length: 204800
|
|
327
339
|
input_length: 204800
|
|
328
340
|
output_length: 8192
|
|
@@ -358,24 +370,28 @@ providers:
|
|
|
358
370
|
models:
|
|
359
371
|
MiniMax-M2.7:
|
|
360
372
|
name: MiniMax M2.7
|
|
373
|
+
supports_image_input: false
|
|
361
374
|
context_length: 204800
|
|
362
375
|
input_length: 204800
|
|
363
376
|
output_length: 8192
|
|
364
377
|
context_window: '204K'
|
|
365
378
|
MiniMax-M2.5:
|
|
366
379
|
name: MiniMax M2.5
|
|
380
|
+
supports_image_input: false
|
|
367
381
|
context_length: 204800
|
|
368
382
|
input_length: 204800
|
|
369
383
|
output_length: 8192
|
|
370
384
|
context_window: '204K'
|
|
371
385
|
MiniMax-M2.1:
|
|
372
386
|
name: MiniMax M2.1
|
|
387
|
+
supports_image_input: false
|
|
373
388
|
context_length: 204800
|
|
374
389
|
input_length: 204800
|
|
375
390
|
output_length: 8192
|
|
376
391
|
context_window: '204K'
|
|
377
392
|
MiniMax-M2:
|
|
378
393
|
name: MiniMax M2 Stable
|
|
394
|
+
supports_image_input: false
|
|
379
395
|
context_length: 204800
|
|
380
396
|
input_length: 204800
|
|
381
397
|
output_length: 8192
|
|
@@ -390,24 +406,28 @@ providers:
|
|
|
390
406
|
models:
|
|
391
407
|
glm-4.7:
|
|
392
408
|
name: GLM-4.7
|
|
409
|
+
supports_image_input: false
|
|
393
410
|
context_length: 200000
|
|
394
411
|
input_length: 200000
|
|
395
412
|
output_length: 8192
|
|
396
413
|
context_window: '200K'
|
|
397
414
|
glm-4.6:
|
|
398
415
|
name: GLM-4.6
|
|
416
|
+
supports_image_input: false
|
|
399
417
|
context_length: 200000
|
|
400
418
|
input_length: 200000
|
|
401
419
|
output_length: 8192
|
|
402
420
|
context_window: '200K'
|
|
403
421
|
glm-4.5:
|
|
404
422
|
name: GLM-4.5
|
|
423
|
+
supports_image_input: false
|
|
405
424
|
context_length: 128000
|
|
406
425
|
input_length: 128000
|
|
407
426
|
output_length: 8192
|
|
408
427
|
context_window: '128K'
|
|
409
428
|
glm-4.5-air:
|
|
410
429
|
name: GLM-4.5-Air
|
|
430
|
+
supports_image_input: false
|
|
411
431
|
context_length: 128000
|
|
412
432
|
input_length: 128000
|
|
413
433
|
output_length: 8192
|
|
@@ -422,24 +442,28 @@ providers:
|
|
|
422
442
|
models:
|
|
423
443
|
glm-4.7:
|
|
424
444
|
name: GLM-4.7
|
|
445
|
+
supports_image_input: false
|
|
425
446
|
context_length: 200000
|
|
426
447
|
input_length: 200000
|
|
427
448
|
output_length: 8192
|
|
428
449
|
context_window: '200K'
|
|
429
450
|
glm-4.6:
|
|
430
451
|
name: GLM-4.6
|
|
452
|
+
supports_image_input: false
|
|
431
453
|
context_length: 200000
|
|
432
454
|
input_length: 200000
|
|
433
455
|
output_length: 8192
|
|
434
456
|
context_window: '200K'
|
|
435
457
|
glm-4.5:
|
|
436
458
|
name: GLM-4.5
|
|
459
|
+
supports_image_input: false
|
|
437
460
|
context_length: 128000
|
|
438
461
|
input_length: 128000
|
|
439
462
|
output_length: 8192
|
|
440
463
|
context_window: '128K'
|
|
441
464
|
glm-4.5-air:
|
|
442
465
|
name: GLM-4.5-Air
|
|
466
|
+
supports_image_input: false
|
|
443
467
|
context_length: 128000
|
|
444
468
|
input_length: 128000
|
|
445
469
|
output_length: 8192
|
|
@@ -454,6 +478,7 @@ providers:
|
|
|
454
478
|
models:
|
|
455
479
|
doubao-seed-code:
|
|
456
480
|
name: Doubao Seed Code Preview
|
|
481
|
+
supports_image_input: true
|
|
457
482
|
context_length: 256000
|
|
458
483
|
input_length: 256000
|
|
459
484
|
output_length: 8192
|
|
@@ -461,12 +486,14 @@ providers:
|
|
|
461
486
|
optimization: 专为Agentic Coding任务优化
|
|
462
487
|
deepseek-v3.2:
|
|
463
488
|
name: DeepSeek-V3.2
|
|
489
|
+
supports_image_input: false
|
|
464
490
|
context_length: 128000
|
|
465
491
|
input_length: 96000
|
|
466
492
|
output_length: 32000
|
|
467
493
|
context_window: '128K'
|
|
468
494
|
glm-4.7:
|
|
469
495
|
name: GLM 4.7
|
|
496
|
+
supports_image_input: false
|
|
470
497
|
context_length: 256000
|
|
471
498
|
input_length: 256000
|
|
472
499
|
output_length: 8192
|
|
@@ -487,42 +514,49 @@ providers:
|
|
|
487
514
|
models:
|
|
488
515
|
deepseek-v3-2-251201:
|
|
489
516
|
name: DeepSeek-V3.2
|
|
517
|
+
supports_image_input: false
|
|
490
518
|
context_length: 128000
|
|
491
519
|
input_length: 96000
|
|
492
520
|
output_length: 32000
|
|
493
521
|
context_window: '128K'
|
|
494
522
|
doubao-seed-code-preview-251028:
|
|
495
523
|
name: Doubao Seed Code Preview 251028
|
|
524
|
+
supports_image_input: true
|
|
496
525
|
context_length: 256000
|
|
497
526
|
input_length: 256000
|
|
498
527
|
output_length: 8192
|
|
499
528
|
context_window: '256K'
|
|
500
529
|
doubao-seed-1-6-251015:
|
|
501
530
|
name: Doubao Seed 1.6
|
|
531
|
+
supports_image_input: false
|
|
502
532
|
context_length: 256000
|
|
503
533
|
input_length: 256000
|
|
504
534
|
output_length: 8192
|
|
505
535
|
context_window: '256K'
|
|
506
536
|
doubao-seed-1-6-thinking-250715:
|
|
507
537
|
name: Doubao Seed 1.6 Thinking
|
|
538
|
+
supports_image_input: false
|
|
508
539
|
context_length: 256000
|
|
509
540
|
input_length: 256000
|
|
510
541
|
output_length: 8192
|
|
511
542
|
context_window: '256K'
|
|
512
543
|
doubao-seed-1-6-lite-251015:
|
|
513
544
|
name: Doubao Seed 1.6 Lite
|
|
545
|
+
supports_image_input: false
|
|
514
546
|
context_length: 32000
|
|
515
547
|
input_length: 32000
|
|
516
548
|
output_length: 8192
|
|
517
549
|
context_window: '32K'
|
|
518
550
|
kimi-k2-250905:
|
|
519
551
|
name: Kimi K2
|
|
552
|
+
supports_image_input: false
|
|
520
553
|
context_length: 200000
|
|
521
554
|
input_length: 200000
|
|
522
555
|
output_length: 8192
|
|
523
556
|
context_window: '200K (约20万汉字)'
|
|
524
557
|
deepseek-v3-1-terminus:
|
|
525
558
|
name: DeepSeek V3.1 Terminus
|
|
559
|
+
supports_image_input: false
|
|
526
560
|
context_length: 131072
|
|
527
561
|
input_length: 131072
|
|
528
562
|
output_length: 8192
|
|
@@ -621,12 +655,14 @@ providers:
|
|
|
621
655
|
models:
|
|
622
656
|
deepseek-chat:
|
|
623
657
|
name: DeepSeek-V3.2
|
|
658
|
+
supports_image_input: false
|
|
624
659
|
context_length: 128000
|
|
625
660
|
input_length: 128000
|
|
626
661
|
output_length: 8192
|
|
627
662
|
context_window: '128K'
|
|
628
663
|
deepseek-reasoner:
|
|
629
664
|
name: DeepSeek-R1 (reasoner, V3.2 thinking mode)
|
|
665
|
+
supports_image_input: false
|
|
630
666
|
context_length: 128000
|
|
631
667
|
input_length: 128000
|
|
632
668
|
output_length: 65536
|
|
@@ -665,42 +701,49 @@ providers:
|
|
|
665
701
|
models:
|
|
666
702
|
qwen3.5-plus:
|
|
667
703
|
name: Qwen3.5 Plus
|
|
704
|
+
supports_image_input: true
|
|
668
705
|
context_length: 1000000
|
|
669
706
|
input_length: 983616
|
|
670
707
|
output_length: 65536
|
|
671
708
|
context_window: '1M'
|
|
672
709
|
kimi-k2.5:
|
|
673
710
|
name: Kimi K2.5
|
|
711
|
+
supports_image_input: true
|
|
674
712
|
context_length: 262144
|
|
675
713
|
input_length: 258048
|
|
676
714
|
output_length: 32768
|
|
677
715
|
context_window: '262K'
|
|
678
716
|
glm-5:
|
|
679
717
|
name: GLM-5
|
|
718
|
+
supports_image_input: false
|
|
680
719
|
context_length: 202752
|
|
681
720
|
input_length: 202752
|
|
682
721
|
output_length: 16384
|
|
683
722
|
context_window: '202K'
|
|
684
723
|
MiniMax-M2.5:
|
|
685
724
|
name: MiniMax M2.5
|
|
725
|
+
supports_image_input: false
|
|
686
726
|
context_length: 204800
|
|
687
727
|
input_length: 196608
|
|
688
728
|
output_length: 131072
|
|
689
729
|
context_window: '204K'
|
|
690
730
|
qwen3-coder-next:
|
|
691
731
|
name: Qwen3 Coder Next
|
|
732
|
+
supports_image_input: false
|
|
692
733
|
context_length: 262144
|
|
693
734
|
input_length: 204800
|
|
694
735
|
output_length: 65536
|
|
695
736
|
context_window: '262K'
|
|
696
737
|
qwen3-coder-plus:
|
|
697
738
|
name: Qwen3 Coder Plus
|
|
739
|
+
supports_image_input: false
|
|
698
740
|
context_length: 1000000
|
|
699
741
|
input_length: 997952
|
|
700
742
|
output_length: 65536
|
|
701
743
|
context_window: '1M'
|
|
702
744
|
glm-4.7:
|
|
703
745
|
name: GLM-4.7
|
|
746
|
+
supports_image_input: false
|
|
704
747
|
context_length: 202752
|
|
705
748
|
input_length: 169984
|
|
706
749
|
output_length: 16384
|
|
@@ -185,7 +185,7 @@ function parseForcedJsonToolInput(rawJson, fallbackInput, at) {
|
|
|
185
185
|
}
|
|
186
186
|
throw new Error(`Invalid ${at}: ${errorText}; raw=${JSON.stringify(preview)}`);
|
|
187
187
|
}
|
|
188
|
-
async function funcResultToAnthropicToolResultBlock(chatMsg, limitChars, requestContext, allowedImageKeys, onToolResultImageIngest) {
|
|
188
|
+
async function funcResultToAnthropicToolResultBlock(chatMsg, limitChars, requestContext, allowedImageKeys, supportsImageInput, onToolResultImageIngest) {
|
|
189
189
|
const items = chatMsg.contentItems;
|
|
190
190
|
if (!Array.isArray(items) || items.length === 0) {
|
|
191
191
|
return {
|
|
@@ -195,12 +195,29 @@ async function funcResultToAnthropicToolResultBlock(chatMsg, limitChars, request
|
|
|
195
195
|
};
|
|
196
196
|
}
|
|
197
197
|
const content = [];
|
|
198
|
-
for (const item of items) {
|
|
198
|
+
for (const [itemIndex, item] of items.entries()) {
|
|
199
199
|
if (item.type === 'input_text') {
|
|
200
200
|
content.push({ type: 'text', text: item.text });
|
|
201
201
|
continue;
|
|
202
202
|
}
|
|
203
203
|
if (item.type === 'input_image') {
|
|
204
|
+
if (!supportsImageInput) {
|
|
205
|
+
if (onToolResultImageIngest) {
|
|
206
|
+
await onToolResultImageIngest((0, tool_result_image_ingest_1.buildToolResultImageIngest)({
|
|
207
|
+
requestContext,
|
|
208
|
+
toolCallId: chatMsg.id,
|
|
209
|
+
toolName: chatMsg.name,
|
|
210
|
+
artifact: item.artifact,
|
|
211
|
+
disposition: 'filtered_model_unsupported',
|
|
212
|
+
providerPathLabel: 'Anthropic Messages path',
|
|
213
|
+
}));
|
|
214
|
+
}
|
|
215
|
+
content.push({
|
|
216
|
+
type: 'text',
|
|
217
|
+
text: `[image not sent: current model does not support image input]`,
|
|
218
|
+
});
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
204
221
|
if (!(0, artifacts_1.isVisionImageMimeType)(item.mimeType)) {
|
|
205
222
|
if (onToolResultImageIngest) {
|
|
206
223
|
await onToolResultImageIngest((0, tool_result_image_ingest_1.buildToolResultImageIngest)({
|
|
@@ -219,7 +236,7 @@ async function funcResultToAnthropicToolResultBlock(chatMsg, limitChars, request
|
|
|
219
236
|
});
|
|
220
237
|
continue;
|
|
221
238
|
}
|
|
222
|
-
if (!allowedImageKeys.has((0, tool_result_image_ingest_1.
|
|
239
|
+
if (!allowedImageKeys.has((0, tool_result_image_ingest_1.buildImageBudgetKeyForContentItem)({ msg: chatMsg, itemIndex, artifact: item.artifact }))) {
|
|
223
240
|
if (onToolResultImageIngest) {
|
|
224
241
|
await onToolResultImageIngest((0, tool_result_image_ingest_1.buildToolResultImageIngest)({
|
|
225
242
|
requestContext,
|
|
@@ -227,7 +244,7 @@ async function funcResultToAnthropicToolResultBlock(chatMsg, limitChars, request
|
|
|
227
244
|
toolName: chatMsg.name,
|
|
228
245
|
artifact: item.artifact,
|
|
229
246
|
disposition: 'filtered_size_limit',
|
|
230
|
-
detail: (0, tool_result_image_ingest_1.
|
|
247
|
+
detail: (0, tool_result_image_ingest_1.buildImageBudgetLimitDetail)({
|
|
231
248
|
byteLength: item.byteLength,
|
|
232
249
|
budgetBytes: tool_result_image_ingest_1.ANTHROPIC_TOOL_RESULT_IMAGE_BUDGET_BYTES,
|
|
233
250
|
}),
|
|
@@ -308,16 +325,135 @@ async function funcResultToAnthropicToolResultBlock(chatMsg, limitChars, request
|
|
|
308
325
|
content: limitAnthropicToolOutputBlocks(content, chatMsg, limitChars),
|
|
309
326
|
};
|
|
310
327
|
}
|
|
311
|
-
async function chatMessageToContentBlocksAsync(chatMsg, limitChars, requestContext, allowedImageKeys, onToolResultImageIngest) {
|
|
328
|
+
async function chatMessageToContentBlocksAsync(chatMsg, limitChars, requestContext, allowedImageKeys, supportsImageInput, onToolResultImageIngest, onUserImageIngest) {
|
|
329
|
+
if ((chatMsg.type === 'prompting_msg' ||
|
|
330
|
+
chatMsg.type === 'tellask_result_msg' ||
|
|
331
|
+
chatMsg.type === 'tellask_carryover_msg') &&
|
|
332
|
+
Array.isArray(chatMsg.contentItems) &&
|
|
333
|
+
chatMsg.contentItems.length > 0) {
|
|
334
|
+
const content = [
|
|
335
|
+
{ type: 'text', text: chatMsg.content },
|
|
336
|
+
];
|
|
337
|
+
for (const [itemIndex, item] of chatMsg.contentItems.entries()) {
|
|
338
|
+
if (item.type === 'input_text') {
|
|
339
|
+
content.push({ type: 'text', text: item.text });
|
|
340
|
+
continue;
|
|
341
|
+
}
|
|
342
|
+
if (item.type === 'input_image') {
|
|
343
|
+
if (!supportsImageInput) {
|
|
344
|
+
if (onUserImageIngest) {
|
|
345
|
+
await onUserImageIngest((0, tool_result_image_ingest_1.buildUserImageIngest)({
|
|
346
|
+
requestContext,
|
|
347
|
+
...(chatMsg.type === 'prompting_msg' ? { msgId: chatMsg.msgId } : {}),
|
|
348
|
+
artifact: item.artifact,
|
|
349
|
+
disposition: 'filtered_model_unsupported',
|
|
350
|
+
providerPathLabel: 'Anthropic Messages path',
|
|
351
|
+
}));
|
|
352
|
+
}
|
|
353
|
+
content.push({
|
|
354
|
+
type: 'text',
|
|
355
|
+
text: `[image not sent: current model does not support image input]`,
|
|
356
|
+
});
|
|
357
|
+
continue;
|
|
358
|
+
}
|
|
359
|
+
if (!(0, artifacts_1.isVisionImageMimeType)(item.mimeType)) {
|
|
360
|
+
if (onUserImageIngest) {
|
|
361
|
+
await onUserImageIngest((0, tool_result_image_ingest_1.buildUserImageIngest)({
|
|
362
|
+
requestContext,
|
|
363
|
+
...(chatMsg.type === 'prompting_msg' ? { msgId: chatMsg.msgId } : {}),
|
|
364
|
+
artifact: item.artifact,
|
|
365
|
+
disposition: 'filtered_mime_unsupported',
|
|
366
|
+
mimeType: item.mimeType,
|
|
367
|
+
providerPathLabel: 'Anthropic Messages path',
|
|
368
|
+
}));
|
|
369
|
+
}
|
|
370
|
+
content.push({
|
|
371
|
+
type: 'text',
|
|
372
|
+
text: `[image not sent: unsupported mimeType=${item.mimeType}]`,
|
|
373
|
+
});
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
if (!allowedImageKeys.has((0, tool_result_image_ingest_1.buildImageBudgetKeyForContentItem)({ msg: chatMsg, itemIndex, artifact: item.artifact }))) {
|
|
377
|
+
if (onUserImageIngest) {
|
|
378
|
+
await onUserImageIngest((0, tool_result_image_ingest_1.buildUserImageIngest)({
|
|
379
|
+
requestContext,
|
|
380
|
+
...(chatMsg.type === 'prompting_msg' ? { msgId: chatMsg.msgId } : {}),
|
|
381
|
+
artifact: item.artifact,
|
|
382
|
+
disposition: 'filtered_size_limit',
|
|
383
|
+
detail: (0, tool_result_image_ingest_1.buildImageBudgetLimitDetail)({
|
|
384
|
+
byteLength: item.byteLength,
|
|
385
|
+
budgetBytes: tool_result_image_ingest_1.ANTHROPIC_TOOL_RESULT_IMAGE_BUDGET_BYTES,
|
|
386
|
+
}),
|
|
387
|
+
providerPathLabel: 'Anthropic Messages path',
|
|
388
|
+
}));
|
|
389
|
+
}
|
|
390
|
+
content.push({
|
|
391
|
+
type: 'text',
|
|
392
|
+
text: `[image not sent: request image budget exceeded bytes=${String(item.byteLength)} budget=${String(tool_result_image_ingest_1.ANTHROPIC_TOOL_RESULT_IMAGE_BUDGET_BYTES)}]`,
|
|
393
|
+
});
|
|
394
|
+
continue;
|
|
395
|
+
}
|
|
396
|
+
const bytesResult = await (0, tool_result_image_ingest_1.readToolResultImageBytesSafe)(item.artifact);
|
|
397
|
+
if (bytesResult.kind === 'missing') {
|
|
398
|
+
if (onUserImageIngest) {
|
|
399
|
+
await onUserImageIngest((0, tool_result_image_ingest_1.buildUserImageIngest)({
|
|
400
|
+
requestContext,
|
|
401
|
+
...(chatMsg.type === 'prompting_msg' ? { msgId: chatMsg.msgId } : {}),
|
|
402
|
+
artifact: item.artifact,
|
|
403
|
+
disposition: 'filtered_missing',
|
|
404
|
+
providerPathLabel: 'Anthropic Messages path',
|
|
405
|
+
}));
|
|
406
|
+
}
|
|
407
|
+
content.push({ type: 'text', text: `[image missing: ${item.artifact.relPath}]` });
|
|
408
|
+
continue;
|
|
409
|
+
}
|
|
410
|
+
if (bytesResult.kind === 'read_failed') {
|
|
411
|
+
if (onUserImageIngest) {
|
|
412
|
+
await onUserImageIngest((0, tool_result_image_ingest_1.buildUserImageIngest)({
|
|
413
|
+
requestContext,
|
|
414
|
+
...(chatMsg.type === 'prompting_msg' ? { msgId: chatMsg.msgId } : {}),
|
|
415
|
+
artifact: item.artifact,
|
|
416
|
+
disposition: 'filtered_read_failed',
|
|
417
|
+
detail: bytesResult.detail,
|
|
418
|
+
providerPathLabel: 'Anthropic Messages path',
|
|
419
|
+
}));
|
|
420
|
+
}
|
|
421
|
+
content.push({ type: 'text', text: `[image unreadable: ${item.artifact.relPath}]` });
|
|
422
|
+
continue;
|
|
423
|
+
}
|
|
424
|
+
if (onUserImageIngest) {
|
|
425
|
+
await onUserImageIngest((0, tool_result_image_ingest_1.buildUserImageIngest)({
|
|
426
|
+
requestContext,
|
|
427
|
+
...(chatMsg.type === 'prompting_msg' ? { msgId: chatMsg.msgId } : {}),
|
|
428
|
+
artifact: item.artifact,
|
|
429
|
+
disposition: 'fed_native',
|
|
430
|
+
providerPathLabel: 'Anthropic Messages path',
|
|
431
|
+
}));
|
|
432
|
+
}
|
|
433
|
+
content.push({
|
|
434
|
+
type: 'image',
|
|
435
|
+
source: {
|
|
436
|
+
type: 'base64',
|
|
437
|
+
media_type: item.mimeType,
|
|
438
|
+
data: bytesResult.bytes.toString('base64'),
|
|
439
|
+
},
|
|
440
|
+
});
|
|
441
|
+
continue;
|
|
442
|
+
}
|
|
443
|
+
const _exhaustive = item;
|
|
444
|
+
throw new Error(`Unsupported user content item: ${String(_exhaustive)}`);
|
|
445
|
+
}
|
|
446
|
+
return content;
|
|
447
|
+
}
|
|
312
448
|
if (chatMsg.type !== 'func_result_msg') {
|
|
313
449
|
return chatMessageToContentBlocks(chatMsg);
|
|
314
450
|
}
|
|
315
451
|
return [
|
|
316
|
-
await funcResultToAnthropicToolResultBlock(chatMsg, limitChars, requestContext, allowedImageKeys, onToolResultImageIngest),
|
|
452
|
+
await funcResultToAnthropicToolResultBlock(chatMsg, limitChars, requestContext, allowedImageKeys, supportsImageInput, onToolResultImageIngest),
|
|
317
453
|
];
|
|
318
454
|
}
|
|
319
|
-
async function chatMessageToAnthropicAsync(chatMsg, limitChars, requestContext, allowedImageKeys, onToolResultImageIngest) {
|
|
320
|
-
const contentBlocks = await chatMessageToContentBlocksAsync(chatMsg, limitChars, requestContext, allowedImageKeys, onToolResultImageIngest);
|
|
455
|
+
async function chatMessageToAnthropicAsync(chatMsg, limitChars, requestContext, allowedImageKeys, supportsImageInput, onToolResultImageIngest, onUserImageIngest) {
|
|
456
|
+
const contentBlocks = await chatMessageToContentBlocksAsync(chatMsg, limitChars, requestContext, allowedImageKeys, supportsImageInput, onToolResultImageIngest, onUserImageIngest);
|
|
321
457
|
if (contentBlocks.length === 0) {
|
|
322
458
|
throw new Error(`No content blocks generated for message: ${JSON.stringify(chatMsg)}`);
|
|
323
459
|
}
|
|
@@ -330,7 +466,7 @@ async function chatMessageToAnthropicAsync(chatMsg, limitChars, requestContext,
|
|
|
330
466
|
content: contentBlocks.length === 1 ? contentBlocks : contentBlocks,
|
|
331
467
|
};
|
|
332
468
|
}
|
|
333
|
-
async function buildAnthropicRequestMessages(context, requestContext, providerConfig, onToolResultImageIngest) {
|
|
469
|
+
async function buildAnthropicRequestMessages(context, requestContext, providerConfig, onToolResultImageIngest, onUserImageIngest) {
|
|
334
470
|
// We keep the async path for func_result_msg because it may contain image artifacts.
|
|
335
471
|
const normalized = (0, tool_call_context_1.normalizeToolCallPairs)(context);
|
|
336
472
|
const violation = (0, tool_call_context_1.findFirstToolCallAdjacencyViolation)(normalized);
|
|
@@ -346,9 +482,12 @@ async function buildAnthropicRequestMessages(context, requestContext, providerCo
|
|
|
346
482
|
}
|
|
347
483
|
const messages = [];
|
|
348
484
|
const toolResultMaxChars = (0, tool_output_limit_1.resolveProviderToolResultMaxChars)(providerConfig);
|
|
349
|
-
const allowedImageKeys = (0, tool_result_image_ingest_1.
|
|
485
|
+
const allowedImageKeys = (0, tool_result_image_ingest_1.selectLatestImagesWithinBudget)(normalized, tool_result_image_ingest_1.ANTHROPIC_TOOL_RESULT_IMAGE_BUDGET_BYTES);
|
|
486
|
+
const supportsImageInput = (0, tool_result_image_ingest_1.resolveModelImageInputSupport)(requestContext.modelKey === undefined
|
|
487
|
+
? undefined
|
|
488
|
+
: providerConfig?.models[requestContext.modelKey], true);
|
|
350
489
|
for (const msg of normalized) {
|
|
351
|
-
messages.push(await chatMessageToAnthropicAsync(msg, toolResultMaxChars, requestContext, allowedImageKeys, onToolResultImageIngest));
|
|
490
|
+
messages.push(await chatMessageToAnthropicAsync(msg, toolResultMaxChars, requestContext, allowedImageKeys, supportsImageInput, onToolResultImageIngest, onUserImageIngest));
|
|
352
491
|
}
|
|
353
492
|
return assembleAnthropicTurns(messages);
|
|
354
493
|
}
|
|
@@ -919,7 +1058,7 @@ class AnthropicGen {
|
|
|
919
1058
|
if (!apiKey)
|
|
920
1059
|
throw new Error(`Missing API key env var ${providerConfig.apiKeyEnvVar}`);
|
|
921
1060
|
const client = new sdk_1.Anthropic({ apiKey, baseURL: providerConfig.baseUrl });
|
|
922
|
-
const requestMessages = await buildAnthropicRequestMessages(context, requestContext, providerConfig, receiver.toolResultImageIngest);
|
|
1061
|
+
const requestMessages = await buildAnthropicRequestMessages(context, requestContext, providerConfig, receiver.toolResultImageIngest, receiver.userImageIngest);
|
|
923
1062
|
const anthropicParams = agent.model_params?.anthropic || {};
|
|
924
1063
|
const forceJsonResponse = resolveAnthropicJsonResponseEnabled(agent);
|
|
925
1064
|
const maxTokens = agent.model_params?.max_tokens;
|
|
@@ -972,6 +1111,8 @@ class AnthropicGen {
|
|
|
972
1111
|
const outputs = [];
|
|
973
1112
|
const requestMessages = await buildAnthropicRequestMessages(context, requestContext, providerConfig, async (ingest) => {
|
|
974
1113
|
outputs.push({ kind: 'tool_result_image_ingest', ingest });
|
|
1114
|
+
}, async (ingest) => {
|
|
1115
|
+
outputs.push({ kind: 'user_image_ingest', ingest });
|
|
975
1116
|
});
|
|
976
1117
|
const anthropicParams = agent.model_params?.anthropic || {};
|
|
977
1118
|
const forceJsonResponse = resolveAnthropicJsonResponseEnabled(agent);
|