@xopcai/xopc 0.0.120 → 0.0.121
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/browser-ext/manifest.json +1 -1
- package/dist/extensions/dashscope/src/image-generation-provider.d.ts +6 -5
- package/dist/extensions/dashscope/src/image-generation-provider.js +40 -64
- package/dist/extensions/dashscope/src/image-generation-provider.js.map +1 -1
- package/dist/extensions/dashscope/src/index.d.ts +1 -1
- package/dist/extensions/dashscope/src/index.js +2 -2
- package/dist/extensions/dashscope/xopc.extension.json +3 -2
- package/dist/extensions/minimax/src/image-generation-provider.d.ts +7 -5
- package/dist/extensions/minimax/src/image-generation-provider.js +43 -37
- package/dist/extensions/minimax/src/image-generation-provider.js.map +1 -1
- package/dist/extensions/minimax/src/index.d.ts +1 -1
- package/dist/extensions/minimax/src/index.js +2 -2
- package/dist/extensions/minimax/xopc.extension.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/Combination-HAlzriaz.js +41 -0
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-APTlX9Sq.js → agent-avatar-dicebear-4AW4JgSU.js} +1 -1
- package/dist/gateway/static/root/assets/agents-2SVUUPlp.js +2 -0
- package/dist/gateway/static/root/assets/{app-management-settings-panel-DTKc5HHT.js → app-management-settings-panel-CE6GkGU2.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-BTciFrE9.js → appearance-settings-BmaUjghw.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-DT52OrbM.js → apps-page-BWeQ1I49.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-CiHaUMII.js → archive-plugin-CX4_KWut.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-t4gSrNjL.js → attachment-load-jf-PIIUU.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-suggestion-card-CtysjSoQ.js → automation-suggestion-card-BHk5rtJz.js} +1 -1
- package/dist/gateway/static/root/assets/automations-page-QHotl53D.js +1 -0
- package/dist/gateway/static/root/assets/{binary-plugins-BAbSldW5.js → binary-plugins-DG9XQikd.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-BNr_82xl.js → block-editor-Up_VIxLJ.js} +6 -6
- package/dist/gateway/static/root/assets/browser-settings-page-Cmwi6IIQ.js +8 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-tzD702Gg.js → capability-presets-api-CGM4OyMw.js} +1 -1
- package/dist/gateway/static/root/assets/{capability-presets-settings-panel-AGhTueAc.js → capability-presets-settings-panel-CzWt0LBb.js} +1 -1
- package/dist/gateway/static/root/assets/{channel-recipient-api-DL_KzwGE.js → channel-recipient-api-BEByL4_o.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-BOMCUe2J.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-C-Dexk_F.js +2 -0
- package/dist/gateway/static/root/assets/dist-Mys7eFJ5.js +1 -0
- package/dist/gateway/static/root/assets/dist-wO9a2_ID.js +1 -0
- package/dist/gateway/static/root/assets/{dreaming-settings-BEwWA1yf.js → dreaming-settings-WPEj8pir.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-Dl2kO0Sf.js → extension-debug-page-DZxa_j7-.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DmbLPsx_.js → extension-page-CseziW53.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-B_9J-xyo.js +1 -0
- package/dist/gateway/static/root/assets/{fetch-B3ME5Eri.js → fetch-Cs4ck8zA.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-DI9_BBTo.js → gateway-config-api-Dl223a7r.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-settings-DdzbtW9R.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-startup-retry-CSZQTz6K.js → gateway-startup-retry-IvePwjFE.js} +1 -1
- package/dist/gateway/static/root/assets/goal-detail-page-Dxldogms.js +1 -0
- package/dist/gateway/static/root/assets/{goals-config-api-Bhzqrp2w.js → goals-config-api-CUCP6yCl.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-DU5Nd6Xp.js +2 -0
- package/dist/gateway/static/root/assets/goals-settings-Dj87qPxv.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-settings-Cgm5JmwH.js +1 -0
- package/dist/gateway/static/root/assets/index-BU1pvxmS.js +191 -0
- package/dist/gateway/static/root/assets/index-l54WfSqe.css +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-kMp08SlX.js → keyboard-shortcuts-settings-DJgYw0nB.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-C10aS4XO.js +2 -0
- package/dist/gateway/static/root/assets/{markdown-split-Bc0w40vz.js → markdown-split-gnQ_EiGo.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-DJ_HvgIy.js → media-plugins-CQV-mgJn.js} +1 -1
- package/dist/gateway/static/root/assets/messages-C6Kc4Jhf.js +3 -0
- package/dist/gateway/static/root/assets/models-hub-panel-B35CAfg6.js +2 -0
- package/dist/gateway/static/root/assets/note-detail-page-Brlwse8x.js +2 -0
- package/dist/gateway/static/root/assets/{note-image-lightbox-4zntqpZq.js → note-image-lightbox-BthwKjLA.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-VocWOjoK.js → notes-page-CoAwRc7L.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-BbA7sRd_.js → preview-open-alternatives-BPMXC-2u.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-B36RQ05h.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-Dividh61.js → save-bar-controls-BEHqwZjz.js} +1 -1
- package/dist/gateway/static/root/assets/schedule-field-CMY25m97.js +1 -0
- package/dist/gateway/static/root/assets/schema-form-CxjxsFfg.js +1 -0
- package/dist/gateway/static/root/assets/sessions-page-73THChnj.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-CR9VsY-R.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-BMCOfuE_.js → settings-collapsible-section-s-kiLAxP.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-DBkGwpIN.js → settings-form-section-CIxIEYxU.js} +1 -1
- package/dist/gateway/static/root/assets/settings-page-BJ1AhfKI.js +1 -0
- package/dist/gateway/static/root/assets/{settings-page-layout-NxoW5Y57.js → settings-page-layout--6qT7ZJa.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-C1TtS1vJ.js +1 -0
- package/dist/gateway/static/root/assets/{share-preview-page-B0suFCfj.js → share-preview-page-BZADSbS1.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-gqC8Rmhy.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-C9P-WYvS.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-CEpSvOhF.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-CrmEnyX4.js → system-settings-panel-Czjf0kLJ.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-BAsGn25g.js → typed-models-lib-Cmt8SYdI.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-C7vcAoGb.js → use-channel-catalog-DyM-ckEQ.js} +1 -1
- package/dist/gateway/static/root/assets/user-profile-settings-panel-BygLv8vm.js +1 -0
- package/dist/gateway/static/root/assets/{utils-Dl9efgnV.js → utils-CloW8coB.js} +1 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-BsoqJba6.js +1 -0
- package/dist/gateway/static/root/assets/{voice-player-store-CMC5NOJp.js → voice-player-store-DduWlJYV.js} +1 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-CcQeX6l5.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-CeA8A9Ef.js +18 -0
- package/dist/gateway/static/root/index.html +7 -8
- package/dist/package.js +1 -1
- package/dist/src/agent/embedded/xopc-auth-storage.d.ts +1 -5
- package/dist/src/agent/embedded/xopc-auth-storage.js +2 -8
- package/dist/src/agent/embedded/xopc-auth-storage.js.map +1 -1
- package/dist/src/agent/embedded/xopc-tools-bridge.js +23 -0
- package/dist/src/agent/embedded/xopc-tools-bridge.js.map +1 -1
- package/dist/src/agent/goals/checklist-judge.js +1 -1
- package/dist/src/agent/goals/checklist-judge.js.map +1 -1
- package/dist/src/agent/goals/judge.js +1 -1
- package/dist/src/agent/goals/judge.js.map +1 -1
- package/dist/src/agent/image/tool-model-config.d.ts +2 -0
- package/dist/src/agent/image/tool-model-config.js +2 -2
- package/dist/src/agent/image/tool-model-config.js.map +1 -1
- package/dist/src/agent/image/understanding/pi-ai-provider.js +1 -1
- package/dist/src/agent/image/understanding/pi-ai-provider.js.map +1 -1
- package/dist/src/agent/memory/compaction.d.ts +1 -1
- package/dist/src/agent/memory/compaction.js +1 -1
- package/dist/src/agent/memory/compaction.js.map +1 -1
- package/dist/src/agent/middleware/self-verify.d.ts +3 -0
- package/dist/src/agent/middleware/self-verify.js +18 -0
- package/dist/src/agent/middleware/self-verify.js.map +1 -1
- package/dist/src/agent/orchestration/agent-event-handler.js +28 -3
- package/dist/src/agent/orchestration/agent-event-handler.js.map +1 -1
- package/dist/src/agent/prompt/sections/tooling.js +21 -5
- package/dist/src/agent/prompt/sections/tooling.js.map +1 -1
- package/dist/src/agent/prompt/service-prompt-builder.js +1 -0
- package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
- package/dist/src/agent/prompt/system-prompt.d.ts +1 -0
- package/dist/src/agent/prompt/system-prompt.js +13 -1
- package/dist/src/agent/prompt/system-prompt.js.map +1 -1
- package/dist/src/agent/sandbox/path-policy.js +30 -6
- package/dist/src/agent/sandbox/path-policy.js.map +1 -1
- package/dist/src/agent/service/btw-query.js +1 -1
- package/dist/src/agent/service/btw-query.js.map +1 -1
- package/dist/src/agent/starter-agents.js +16 -16
- package/dist/src/agent/starter-agents.js.map +1 -1
- package/dist/src/agent/tools/image-generate-tool.js +12 -1
- package/dist/src/agent/tools/image-generate-tool.js.map +1 -1
- package/dist/src/agent/tools/session-search-tool.js +1 -1
- package/dist/src/agent/tools/session-search-tool.js.map +1 -1
- package/dist/src/agent/tools/web-extract.js +1 -1
- package/dist/src/agent/tools/web-extract.js.map +1 -1
- package/dist/src/agent-manifest/index.js +2 -2
- package/dist/src/agent-manifest/schema.d.ts +66 -0
- package/dist/src/agent-manifest/schema.js +28 -2
- package/dist/src/agent-manifest/schema.js.map +1 -1
- package/dist/src/automations/draft/automation-draft-service.js +1 -1
- package/dist/src/automations/draft/automation-draft-service.js.map +1 -1
- package/dist/src/cli/commands/agent.js +2 -2
- package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
- package/dist/src/cli/commands/models.js +1 -1
- package/dist/src/cli/commands/onboard/model.js +161 -11
- package/dist/src/cli/commands/onboard/model.js.map +1 -1
- package/dist/src/cli/commands/onboard.js +1 -1
- package/dist/src/cli/commands/profile.js +1 -1
- package/dist/src/cli/commands/tunnel.js +1 -1
- package/dist/src/cli/commands/update.js +1 -1
- package/dist/src/cli/extension-cli-register.js +1 -1
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/config/default-model.d.ts +11 -0
- package/dist/src/config/default-model.js +19 -0
- package/dist/src/config/default-model.js.map +1 -0
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/schema.d.ts +71 -11
- package/dist/src/config/schema.js +57 -22
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/connectors/registries/smithery.js +10 -9
- package/dist/src/connectors/registries/smithery.js.map +1 -1
- package/dist/src/daemon/install-plan.js +2 -1
- package/dist/src/daemon/install-plan.js.map +1 -1
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/global-defaults-admin.js +6 -16
- package/dist/src/gateway/global-defaults-admin.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +24 -0
- package/dist/src/gateway/hono/routes/agents.js +1 -79
- package/dist/src/gateway/hono/routes/agents.js.map +1 -1
- package/dist/src/gateway/hono/routes/models.js +132 -14
- package/dist/src/gateway/hono/routes/models.js.map +1 -1
- package/dist/src/gateway/hono/routes/voice.js +1 -1
- package/dist/src/gateway/hono/routes/voice.js.map +1 -1
- package/dist/src/gateway/image-capabilities.d.ts +11 -1
- package/dist/src/gateway/image-capabilities.js +32 -43
- package/dist/src/gateway/image-capabilities.js.map +1 -1
- package/dist/src/gateway/run-loop.js +1 -1
- package/dist/src/gateway/workspace-editor-path.js +9 -1
- package/dist/src/gateway/workspace-editor-path.js.map +1 -1
- package/dist/src/generated/bundled-image-generation-providers.d.ts +4 -2
- package/dist/src/generated/bundled-image-generation-providers.js +6 -4
- package/dist/src/generated/bundled-image-generation-providers.js.map +1 -1
- package/dist/src/mcp/channel-bridge.js +1 -1
- package/dist/src/media/paths.js +3 -4
- package/dist/src/media/paths.js.map +1 -1
- package/dist/src/notes/service.js +1 -1
- package/dist/src/notes/service.js.map +1 -1
- package/dist/src/providers/domestic-presets.d.ts +615 -0
- package/dist/src/providers/domestic-presets.js +834 -0
- package/dist/src/providers/domestic-presets.js.map +1 -0
- package/dist/src/providers/env-keys.js +29 -5
- package/dist/src/providers/env-keys.js.map +1 -1
- package/dist/src/providers/extension-stream-bridge.js +1 -1
- package/dist/src/providers/extension-stream-bridge.js.map +1 -1
- package/dist/src/providers/index.d.ts +5 -5
- package/dist/src/providers/index.js +101 -21
- package/dist/src/providers/index.js.map +1 -1
- package/dist/src/providers/model-discovery.d.ts +17 -0
- package/dist/src/providers/model-discovery.js +61 -0
- package/dist/src/providers/model-discovery.js.map +1 -0
- package/dist/src/providers/model-registry.d.ts +1 -1
- package/dist/src/providers/model-registry.js +1 -1
- package/dist/src/providers/model-registry.js.map +1 -1
- package/dist/src/providers/presentation.js +185 -14
- package/dist/src/providers/presentation.js.map +1 -1
- package/dist/src/session/session-title.js +1 -1
- package/dist/src/session/session-title.js.map +1 -1
- package/dist/src/tui/xopc-tui-keybindings.d.ts +1 -1
- package/dist/src/voice/tts/summarize.js +1 -1
- package/dist/src/voice/tts/summarize.js.map +1 -1
- package/dist/src/workflows/draft/workflow-draft-service.js +1 -1
- package/dist/src/workflows/draft/workflow-draft-service.js.map +1 -1
- package/package.json +6 -6
- package/dist/gateway/static/root/assets/Combination-BzaXOLd9.js +0 -41
- package/dist/gateway/static/root/assets/agents-CFW_FS_V.js +0 -2
- package/dist/gateway/static/root/assets/automations-page-B2YvT3ES.js +0 -1
- package/dist/gateway/static/root/assets/browser-settings-page-BQEXPhDU.js +0 -8
- package/dist/gateway/static/root/assets/channels-settings-DRTutLlN.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DneJVuge.js +0 -2
- package/dist/gateway/static/root/assets/dist-By6Rh2ee.js +0 -1
- package/dist/gateway/static/root/assets/dist-CkobR7mk.js +0 -1
- package/dist/gateway/static/root/assets/dist-DokQNVMQ.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-BS2rx40e.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-DAFI_T0W.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-DLuz4jC9.js +0 -1
- package/dist/gateway/static/root/assets/goals-page-DTAfv9Ft.js +0 -2
- package/dist/gateway/static/root/assets/goals-settings-CWN2iirQ.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-CkkkHvOi.js +0 -1
- package/dist/gateway/static/root/assets/index-CnjzMw5i.js +0 -191
- package/dist/gateway/static/root/assets/index-E1QinYKp.css +0 -1
- package/dist/gateway/static/root/assets/logs-page-CDXDlS_W.js +0 -2
- package/dist/gateway/static/root/assets/messages-CISb1HLv.js +0 -3
- package/dist/gateway/static/root/assets/models-hub-panel-BTwxMIgZ.js +0 -2
- package/dist/gateway/static/root/assets/note-detail-page-BBfOeB0m.js +0 -2
- package/dist/gateway/static/root/assets/remote-access-hub-CXwjuD_Q.js +0 -1
- package/dist/gateway/static/root/assets/schedule-field-pRheF2CO.js +0 -1
- package/dist/gateway/static/root/assets/schema-form-D6PiPxfr.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-CpcVySQK.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BVy_TawT.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-CZpNyCWn.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-MVHLLu_a.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-C6DBbQGo.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-6hJmhwSn.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-Im1MA0Iw.js +0 -2
- package/dist/gateway/static/root/assets/user-profile-settings-panel-QAQWGelF.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-D-6XueTv.js +0 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-DVPllR4k.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-B94WISTW.js +0 -18
|
@@ -2,7 +2,7 @@ import type { ImageGenerationProvider, ImageGenerationRequest, ImageGenerationRe
|
|
|
2
2
|
/**
|
|
3
3
|
* Wan image model ids for **HTTP synchronous** `multimodal-generation/generation`.
|
|
4
4
|
* - **2.7** (`wan2.7-image-pro` / `wan2.7-image`): see Wan 2.7 image API (size presets 1K/2K/4K, `thinking_mode`, …).
|
|
5
|
-
* - **2.6** (`wan2.6-t2i`):
|
|
5
|
+
* - **2.6** (`wan2.6-t2i`): Wan 2.6 T2I (`prompt_extend`, pixel `宽*高`, …).
|
|
6
6
|
* Wan 2.5 and earlier async-only models are not listed here.
|
|
7
7
|
* @see https://www.alibabacloud.com/help/en/model-studio/wan-image-generation-and-editing-api-reference
|
|
8
8
|
* @see https://www.alibabacloud.com/help/en/model-studio/text-to-image-v2-api-reference
|
|
@@ -17,11 +17,9 @@ export declare const DASHSCOPE_DEFAULT_IMAGE_MODEL: string;
|
|
|
17
17
|
export declare const DASHSCOPE_IMAGE_ENDPOINTS: {
|
|
18
18
|
readonly beijing: "https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation";
|
|
19
19
|
readonly singapore: "https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation";
|
|
20
|
-
readonly us: "https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation";
|
|
21
20
|
};
|
|
22
21
|
export type DashScopeImageRegion = keyof typeof DASHSCOPE_IMAGE_ENDPOINTS;
|
|
23
|
-
export declare function
|
|
24
|
-
export declare function resolveDashScopeImageGenerationUrl(req?: ImageGenerationRequest): string;
|
|
22
|
+
export declare function resolveDashScopeImageGenerationUrl(req?: ImageGenerationRequest, defaultRegion?: DashScopeImageRegion): string;
|
|
25
23
|
/** Map tool size (e.g. `1024x1024`) to DashScope `宽*高` format. */
|
|
26
24
|
export declare function mapSizeToDashScopeFormat(size?: string): string;
|
|
27
25
|
export declare function isWan27ImageModel(model: string): boolean;
|
|
@@ -33,5 +31,8 @@ export declare function mapSizeToWan27Format(size: string | undefined, modelId:
|
|
|
33
31
|
export declare function generateDashScopeImages(params: {
|
|
34
32
|
req: ImageGenerationRequest;
|
|
35
33
|
apiKey: string;
|
|
34
|
+
providerId?: string;
|
|
35
|
+
defaultRegion?: DashScopeImageRegion;
|
|
36
36
|
}): Promise<ImageGenerationResult>;
|
|
37
|
-
export declare function
|
|
37
|
+
export declare function buildDashScopeCnImageGenerationProvider(): ImageGenerationProvider;
|
|
38
|
+
export declare function buildDashScopeIntlImageGenerationProvider(): ImageGenerationProvider;
|
|
@@ -22,7 +22,7 @@ const log = createLogger("ImageGen:DashScope");
|
|
|
22
22
|
/**
|
|
23
23
|
* Wan image model ids for **HTTP synchronous** `multimodal-generation/generation`.
|
|
24
24
|
* - **2.7** (`wan2.7-image-pro` / `wan2.7-image`): see Wan 2.7 image API (size presets 1K/2K/4K, `thinking_mode`, …).
|
|
25
|
-
* - **2.6** (`wan2.6-t2i`):
|
|
25
|
+
* - **2.6** (`wan2.6-t2i`): Wan 2.6 T2I (`prompt_extend`, pixel `宽*高`, …).
|
|
26
26
|
* Wan 2.5 and earlier async-only models are not listed here.
|
|
27
27
|
* @see https://www.alibabacloud.com/help/en/model-studio/wan-image-generation-and-editing-api-reference
|
|
28
28
|
* @see https://www.alibabacloud.com/help/en/model-studio/text-to-image-v2-api-reference
|
|
@@ -64,66 +64,26 @@ const DASHSCOPE_CAPABILITIES = {
|
|
|
64
64
|
*/
|
|
65
65
|
const DASHSCOPE_IMAGE_ENDPOINTS = {
|
|
66
66
|
beijing: "https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation",
|
|
67
|
-
singapore: "https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation"
|
|
68
|
-
us: "https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation"
|
|
67
|
+
singapore: "https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation"
|
|
69
68
|
};
|
|
70
|
-
/** Gateway console region presets (must match {@link DASHSCOPE_IMAGE_ENDPOINTS}). */
|
|
71
|
-
const DASHSCOPE_IMAGE_UI = { regions: [
|
|
72
|
-
{
|
|
73
|
-
value: "beijing",
|
|
74
|
-
label: "China (Beijing)",
|
|
75
|
-
imageBaseUrl: DASHSCOPE_IMAGE_ENDPOINTS.beijing
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
value: "singapore",
|
|
79
|
-
label: "International (Singapore)",
|
|
80
|
-
imageBaseUrl: DASHSCOPE_IMAGE_ENDPOINTS.singapore
|
|
81
|
-
},
|
|
82
|
-
{
|
|
83
|
-
value: "us",
|
|
84
|
-
label: "United States (Virginia)",
|
|
85
|
-
imageBaseUrl: DASHSCOPE_IMAGE_ENDPOINTS.us
|
|
86
|
-
}
|
|
87
|
-
] };
|
|
88
69
|
const DEFAULT_OUTPUT_MIME = "image/png";
|
|
89
|
-
function
|
|
90
|
-
|
|
91
|
-
if (!raw) return "beijing";
|
|
92
|
-
if ([
|
|
93
|
-
"beijing",
|
|
94
|
-
"cn",
|
|
95
|
-
"china",
|
|
96
|
-
"bj"
|
|
97
|
-
].includes(raw)) return "beijing";
|
|
98
|
-
if ([
|
|
99
|
-
"singapore",
|
|
100
|
-
"sg",
|
|
101
|
-
"intl",
|
|
102
|
-
"international",
|
|
103
|
-
"sea",
|
|
104
|
-
"ap-southeast-1"
|
|
105
|
-
].includes(raw)) return "singapore";
|
|
106
|
-
if ([
|
|
107
|
-
"us",
|
|
108
|
-
"virginia",
|
|
109
|
-
"va",
|
|
110
|
-
"us-east-1"
|
|
111
|
-
].includes(raw)) return "us";
|
|
112
|
-
return "beijing";
|
|
70
|
+
function providerConfigId(req, fallback = "dashscope-cn") {
|
|
71
|
+
return req?.provider?.trim() || fallback;
|
|
113
72
|
}
|
|
114
|
-
function resolveDashScopeImageGenerationUrl(req) {
|
|
115
|
-
const
|
|
73
|
+
function resolveDashScopeImageGenerationUrl(req, defaultRegion = "beijing") {
|
|
74
|
+
const id = providerConfigId(req);
|
|
75
|
+
const cfgImageBase = readDashScopeCfgString(req?.cfg, id, "imageBaseUrl");
|
|
116
76
|
if (cfgImageBase) return cfgImageBase.replace(/\/+$/, "");
|
|
117
|
-
const cfgBase = readDashScopeCfgString(req?.cfg, "baseUrl");
|
|
77
|
+
const cfgBase = readDashScopeCfgString(req?.cfg, id, "baseUrl");
|
|
118
78
|
if (cfgBase) return cfgBase.replace(/\/+$/, "");
|
|
119
79
|
const trimmed = process.env.DASHSCOPE_IMAGE_BASE_URL?.trim();
|
|
120
80
|
if (trimmed) return trimmed.replace(/\/+$/, "");
|
|
121
|
-
return DASHSCOPE_IMAGE_ENDPOINTS[
|
|
81
|
+
return DASHSCOPE_IMAGE_ENDPOINTS[defaultRegion];
|
|
122
82
|
}
|
|
123
|
-
function readDashScopeCfgString(cfg, key) {
|
|
83
|
+
function readDashScopeCfgString(cfg, providerId, key) {
|
|
124
84
|
const providers = cfg?.providers;
|
|
125
85
|
if (!providers || typeof providers !== "object") return void 0;
|
|
126
|
-
const entry = providers[
|
|
86
|
+
const entry = providers[providerId];
|
|
127
87
|
if (!entry || typeof entry !== "object") return void 0;
|
|
128
88
|
const v = entry[key];
|
|
129
89
|
return typeof v === "string" && v.trim() ? v.trim() : void 0;
|
|
@@ -190,6 +150,7 @@ async function fetchImageBuffers(urls, signal) {
|
|
|
190
150
|
}
|
|
191
151
|
async function generateDashScopeImages(params) {
|
|
192
152
|
const { req, apiKey } = params;
|
|
153
|
+
const providerId = params.providerId ?? req.provider ?? "dashscope-cn";
|
|
193
154
|
if (req.inputImages && req.inputImages.length > 0) throw new Error("Image-to-image is not supported for Qwen/DashScope in this build");
|
|
194
155
|
const n = Math.min(4, Math.max(1, req.count ?? 1));
|
|
195
156
|
const model = req.model?.trim() || DASHSCOPE_DEFAULT_IMAGE_MODEL;
|
|
@@ -213,21 +174,21 @@ async function generateDashScopeImages(params) {
|
|
|
213
174
|
}] },
|
|
214
175
|
parameters
|
|
215
176
|
};
|
|
216
|
-
const url = resolveDashScopeImageGenerationUrl(req);
|
|
177
|
+
const url = resolveDashScopeImageGenerationUrl(req, params.defaultRegion);
|
|
217
178
|
const httpDefaults = resolveProviderHttpRequestConfig({
|
|
218
|
-
providerId
|
|
179
|
+
providerId,
|
|
219
180
|
cfg: req.cfg,
|
|
220
181
|
fallbackTimeoutMs: DEFAULT_TIMEOUT_MS
|
|
221
182
|
});
|
|
222
183
|
log.debug({
|
|
223
|
-
providerId
|
|
184
|
+
providerId,
|
|
224
185
|
model,
|
|
225
186
|
url,
|
|
226
187
|
count: n,
|
|
227
188
|
phase: "request"
|
|
228
189
|
}, "DashScope image generation request");
|
|
229
190
|
const response = await postJsonRequest(url, {
|
|
230
|
-
label:
|
|
191
|
+
label: providerId,
|
|
231
192
|
timeoutMs: pickTimeoutMsOrFallback(req.timeoutMs, httpDefaults.timeoutMs, DEFAULT_TIMEOUT_MS),
|
|
232
193
|
signal: req.signal,
|
|
233
194
|
body,
|
|
@@ -255,32 +216,47 @@ async function generateDashScopeImages(params) {
|
|
|
255
216
|
model
|
|
256
217
|
};
|
|
257
218
|
}
|
|
258
|
-
function
|
|
219
|
+
function createDashScopeImageGenerationProvider(options) {
|
|
259
220
|
return {
|
|
260
|
-
id:
|
|
261
|
-
label:
|
|
221
|
+
id: options.id,
|
|
222
|
+
label: options.label,
|
|
262
223
|
defaultModel: DASHSCOPE_DEFAULT_IMAGE_MODEL,
|
|
263
224
|
models: [...DASHSCOPE_IMAGE_MODELS],
|
|
264
225
|
capabilities: DASHSCOPE_CAPABILITIES,
|
|
265
|
-
ui: DASHSCOPE_IMAGE_UI,
|
|
266
226
|
isConfigured: (ctx) => isProviderApiKeyConfigured({
|
|
267
|
-
providerId:
|
|
227
|
+
providerId: options.id,
|
|
268
228
|
cfg: ctx.cfg
|
|
269
229
|
}),
|
|
270
230
|
async generateImage(req) {
|
|
271
231
|
const apiKey = resolveApiKeyForProvider({
|
|
272
|
-
providerId:
|
|
232
|
+
providerId: options.id,
|
|
273
233
|
cfg: req.cfg
|
|
274
234
|
});
|
|
275
|
-
if (!apiKey) throw new Error(
|
|
235
|
+
if (!apiKey) throw new Error(`DashScope API key missing (set DASHSCOPE_API_KEY or providers.${options.id}.apiKey)`);
|
|
276
236
|
return generateDashScopeImages({
|
|
277
237
|
req,
|
|
278
|
-
apiKey
|
|
238
|
+
apiKey,
|
|
239
|
+
providerId: options.id,
|
|
240
|
+
defaultRegion: options.defaultRegion
|
|
279
241
|
});
|
|
280
242
|
}
|
|
281
243
|
};
|
|
282
244
|
}
|
|
245
|
+
function buildDashScopeCnImageGenerationProvider() {
|
|
246
|
+
return createDashScopeImageGenerationProvider({
|
|
247
|
+
id: "dashscope-cn",
|
|
248
|
+
label: "DashScope (Alibaba · China)",
|
|
249
|
+
defaultRegion: "beijing"
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
function buildDashScopeIntlImageGenerationProvider() {
|
|
253
|
+
return createDashScopeImageGenerationProvider({
|
|
254
|
+
id: "dashscope-intl",
|
|
255
|
+
label: "DashScope (Alibaba · International)",
|
|
256
|
+
defaultRegion: "singapore"
|
|
257
|
+
});
|
|
258
|
+
}
|
|
283
259
|
//#endregion
|
|
284
|
-
export { DASHSCOPE_DEFAULT_IMAGE_MODEL, DASHSCOPE_IMAGE_ENDPOINTS, DASHSCOPE_IMAGE_MODELS,
|
|
260
|
+
export { DASHSCOPE_DEFAULT_IMAGE_MODEL, DASHSCOPE_IMAGE_ENDPOINTS, DASHSCOPE_IMAGE_MODELS, buildDashScopeCnImageGenerationProvider, buildDashScopeIntlImageGenerationProvider, generateDashScopeImages, isWan27ImageModel, mapSizeToDashScopeFormat, mapSizeToWan27Format, resolveDashScopeImageGenerationUrl };
|
|
285
261
|
|
|
286
262
|
//# sourceMappingURL=image-generation-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-generation-provider.js","names":[],"sources":["../../../../extensions/dashscope/src/image-generation-provider.ts"],"sourcesContent":["/**\n * Bundled DashScope (Alibaba) image-generation provider.\n *\n * Migrated from src/agent/image/generation/dashscope-generate.ts. Logic stays\n * identical; the only change is registration is now driven by the bundled\n * provider generator.\n */\nimport {\n isProviderApiKeyConfigured,\n resolveApiKeyForProvider,\n} from '@xopcai/xopc/providers/auth-runtime/index.js';\nimport {\n pickTimeoutMsOrFallback,\n postJsonRequest,\n privateNetworkPolicyToSsrfGuardOptions,\n resolveProviderHttpRequestConfig,\n} from '@xopcai/xopc/media-shared/http/index.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\nimport { imageFileExtensionForMimeType } from '@xopcai/xopc/agent/image/generation/image-assets.js';\nimport type {\n ImageGenerationProvider,\n ImageGenerationProviderCapabilities,\n ImageGenerationRequest,\n ImageGenerationResult,\n ImageProviderUiMetadata,\n} from '@xopcai/xopc/agent/image/generation/types.js';\n\nconst log = createLogger('ImageGen:DashScope');\n\n/**\n * Wan image model ids for **HTTP synchronous** `multimodal-generation/generation`.\n * - **2.7** (`wan2.7-image-pro` / `wan2.7-image`): see Wan 2.7 image API (size presets 1K/2K/4K, `thinking_mode`, …).\n * - **2.6** (`wan2.6-t2i`): legacy Wan 2.6 T2I (`prompt_extend`, pixel `宽*高`, …).\n * Wan 2.5 and earlier async-only models are not listed here.\n * @see https://www.alibabacloud.com/help/en/model-studio/wan-image-generation-and-editing-api-reference\n * @see https://www.alibabacloud.com/help/en/model-studio/text-to-image-v2-api-reference\n * @see https://www.alibabacloud.com/help/en/model-studio/model-pricing\n */\nexport const DASHSCOPE_IMAGE_MODELS: readonly string[] = [\n 'wan2.7-image-pro',\n 'wan2.7-image',\n 'wan2.6-t2i',\n];\nexport const DASHSCOPE_DEFAULT_IMAGE_MODEL = DASHSCOPE_IMAGE_MODELS[0]!;\n\nconst DEFAULT_TIMEOUT_MS = 180_000;\n\nconst DASHSCOPE_CAPABILITIES: ImageGenerationProviderCapabilities = {\n generate: { maxCount: 4, supportsSize: true },\n edit: { enabled: false },\n geometry: {\n sizes: ['2K', '1K', '4K', '1280x1280', '1024x1024', '1280x720', '720x1280', '1024x1536', '1536x1024'],\n },\n output: {\n formats: ['png', 'jpeg', 'webp'],\n },\n};\n\n/**\n * Official synchronous wan2.6 text-to-image endpoints. Each region uses its own API key.\n * @see https://www.alibabacloud.com/help/zh/model-studio/text-to-image-v2-api-reference\n */\nexport const DASHSCOPE_IMAGE_ENDPOINTS = {\n beijing: 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation',\n singapore: 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation',\n us: 'https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation',\n} as const;\n\n/** Gateway console region presets (must match {@link DASHSCOPE_IMAGE_ENDPOINTS}). */\nconst DASHSCOPE_IMAGE_UI: ImageProviderUiMetadata = {\n regions: [\n { value: 'beijing', label: 'China (Beijing)', imageBaseUrl: DASHSCOPE_IMAGE_ENDPOINTS.beijing },\n {\n value: 'singapore',\n label: 'International (Singapore)',\n imageBaseUrl: DASHSCOPE_IMAGE_ENDPOINTS.singapore,\n },\n { value: 'us', label: 'United States (Virginia)', imageBaseUrl: DASHSCOPE_IMAGE_ENDPOINTS.us },\n ],\n};\n\nexport type DashScopeImageRegion = keyof typeof DASHSCOPE_IMAGE_ENDPOINTS;\n\nconst DEFAULT_OUTPUT_MIME = 'image/png';\n\nexport function resolveDashScopeImageRegion(req?: ImageGenerationRequest): DashScopeImageRegion {\n const cfgRegion = readDashScopeCfgString(req?.cfg, 'region');\n const raw = (cfgRegion ?? process.env.DASHSCOPE_REGION ?? process.env.DASHSCOPE_IMAGE_REGION ?? '')\n .trim()\n .toLowerCase();\n if (!raw) {\n return 'beijing';\n }\n if (['beijing', 'cn', 'china', 'bj'].includes(raw)) {\n return 'beijing';\n }\n if (['singapore', 'sg', 'intl', 'international', 'sea', 'ap-southeast-1'].includes(raw)) {\n return 'singapore';\n }\n if (['us', 'virginia', 'va', 'us-east-1'].includes(raw)) {\n return 'us';\n }\n return 'beijing';\n}\n\nexport function resolveDashScopeImageGenerationUrl(req?: ImageGenerationRequest): string {\n const cfgImageBase = readDashScopeCfgString(req?.cfg, 'imageBaseUrl');\n if (cfgImageBase) return cfgImageBase.replace(/\\/+$/, '');\n const cfgBase = readDashScopeCfgString(req?.cfg, 'baseUrl');\n if (cfgBase) return cfgBase.replace(/\\/+$/, '');\n const trimmed = process.env.DASHSCOPE_IMAGE_BASE_URL?.trim();\n if (trimmed) {\n return trimmed.replace(/\\/+$/, '');\n }\n const region = resolveDashScopeImageRegion(req);\n return DASHSCOPE_IMAGE_ENDPOINTS[region];\n}\n\nfunction readDashScopeCfgString(\n cfg: ImageGenerationRequest['cfg'],\n key: string,\n): string | undefined {\n const providers = (cfg as unknown as { providers?: Record<string, unknown> } | undefined)?.providers;\n if (!providers || typeof providers !== 'object') return undefined;\n const entry = (providers as Record<string, unknown>)['dashscope'];\n if (!entry || typeof entry !== 'object') return undefined;\n const v = (entry as Record<string, unknown>)[key];\n return typeof v === 'string' && v.trim() ? v.trim() : undefined;\n}\n\n/** Map tool size (e.g. `1024x1024`) to DashScope `宽*高` format. */\nexport function mapSizeToDashScopeFormat(size?: string): string {\n if (!size?.trim()) {\n return '1280*1280';\n }\n const s = size.trim();\n if (s.includes('*')) {\n return s.replace(/\\s/g, '');\n }\n const m = /^(\\d+)\\s*[xX]\\s*(\\d+)$/.exec(s);\n if (m) {\n return `${m[1]}*${m[2]}`;\n }\n return '1280*1280';\n}\n\nexport function isWan27ImageModel(model: string): boolean {\n const m = model.trim().toLowerCase();\n return m === 'wan2.7-image-pro' || m === 'wan2.7-image';\n}\n\n/**\n * Map tool `size` to Wan 2.7 `parameters.size` (1K / 2K / 4K presets or `宽*高` pixels).\n * `wan2.7-image` does not support 4K — falls back to 2K.\n */\nexport function mapSizeToWan27Format(size: string | undefined, modelId: string): string {\n const id = modelId.trim().toLowerCase();\n if (!size?.trim()) return '2K';\n const s = size.trim();\n const preset = s.toUpperCase();\n if (preset === '1K' || preset === '2K' || preset === '4K') {\n if (preset === '4K' && id === 'wan2.7-image') return '2K';\n return preset;\n }\n if (s.includes('*')) return s.replace(/\\s/g, '');\n const dim = /^(\\d+)\\s*[xX]\\s*(\\d+)$/.exec(s);\n if (dim) return `${dim[1]}*${dim[2]}`;\n return '2K';\n}\n\ntype DashScopeT2IResponse = {\n code?: string;\n message?: string;\n output?: {\n choices?: Array<{\n message?: {\n content?: Array<{ type?: string; image?: string; text?: string }>;\n };\n }>;\n };\n};\n\nfunction collectImageUrls(data: DashScopeT2IResponse): string[] {\n const urls: string[] = [];\n for (const choice of data.output?.choices ?? []) {\n for (const item of choice.message?.content ?? []) {\n if (item.type === 'image' && typeof item.image === 'string' && item.image.length > 0) {\n urls.push(item.image);\n }\n }\n }\n return urls;\n}\n\nasync function fetchImageBuffers(\n urls: string[],\n signal: AbortSignal | undefined,\n): Promise<Array<{ buffer: Buffer; mimeType: string; fileName: string }>> {\n const out: Array<{ buffer: Buffer; mimeType: string; fileName: string }> = [];\n let index = 0;\n for (const url of urls) {\n index += 1;\n const res = await fetch(url, { redirect: 'follow', signal });\n if (!res.ok) {\n const t = await res.text().catch(() => '');\n throw new Error(`Failed to download generated image (${res.status}): ${t || res.statusText}`);\n }\n const buf = Buffer.from(await res.arrayBuffer());\n const ct = res.headers.get('content-type') || '';\n const mimeType = ct.split(';')[0]?.trim() || DEFAULT_OUTPUT_MIME;\n const ext = imageFileExtensionForMimeType(mimeType);\n out.push({\n buffer: buf,\n mimeType,\n fileName: `image-${index}.${ext}`,\n });\n }\n return out;\n}\n\nexport async function generateDashScopeImages(params: {\n req: ImageGenerationRequest;\n apiKey: string;\n}): Promise<ImageGenerationResult> {\n const { req, apiKey } = params;\n if (req.inputImages && req.inputImages.length > 0) {\n throw new Error('Image-to-image is not supported for Qwen/DashScope in this build');\n }\n\n const n = Math.min(4, Math.max(1, req.count ?? 1));\n const model = req.model?.trim() || DASHSCOPE_DEFAULT_IMAGE_MODEL;\n const parameters = isWan27ImageModel(model)\n ? {\n size: mapSizeToWan27Format(req.size, model),\n n,\n watermark: false,\n thinking_mode: true,\n }\n : {\n prompt_extend: true,\n watermark: false,\n n,\n negative_prompt: '',\n size: mapSizeToDashScopeFormat(req.size),\n };\n\n const body = {\n model,\n input: {\n messages: [\n {\n role: 'user' as const,\n content: [{ text: req.prompt }],\n },\n ],\n },\n parameters,\n };\n\n const url = resolveDashScopeImageGenerationUrl(req);\n const httpDefaults = resolveProviderHttpRequestConfig({\n providerId: 'dashscope',\n cfg: req.cfg,\n fallbackTimeoutMs: DEFAULT_TIMEOUT_MS,\n });\n\n log.debug(\n { providerId: 'dashscope', model, url, count: n, phase: 'request' },\n 'DashScope image generation request',\n );\n\n const timeoutMs = pickTimeoutMsOrFallback(req.timeoutMs, httpDefaults.timeoutMs, DEFAULT_TIMEOUT_MS);\n const response = await postJsonRequest(url, {\n label: 'dashscope',\n timeoutMs,\n signal: req.signal,\n body,\n headers: {\n ...httpDefaults.headers,\n authorization: `Bearer ${apiKey}`,\n },\n ...privateNetworkPolicyToSsrfGuardOptions(),\n });\n\n let data: DashScopeT2IResponse;\n const rawText = await response.text();\n try {\n data = JSON.parse(rawText) as DashScopeT2IResponse;\n } catch {\n throw new Error(`DashScope returned non-JSON: ${rawText.slice(0, 240)}`);\n }\n\n if (!data.output?.choices?.length) {\n if (data.message || data.code) {\n throw new Error(\n data.code\n ? `DashScope: ${data.code}: ${data.message ?? ''}`\n : `DashScope: ${data.message ?? 'unknown error'}`,\n );\n }\n throw new Error('DashScope returned no output');\n }\n\n const urls = collectImageUrls(data);\n if (urls.length === 0) {\n throw new Error('DashScope returned no image URLs in response');\n }\n\n const assets = await fetchImageBuffers(urls, req.signal);\n return {\n images: assets,\n model,\n };\n}\n\nexport function buildDashScopeImageGenerationProvider(): ImageGenerationProvider {\n return {\n id: 'dashscope',\n label: 'DashScope (Alibaba)',\n defaultModel: DASHSCOPE_DEFAULT_IMAGE_MODEL,\n models: [...DASHSCOPE_IMAGE_MODELS],\n capabilities: DASHSCOPE_CAPABILITIES,\n ui: DASHSCOPE_IMAGE_UI,\n isConfigured: (ctx) =>\n isProviderApiKeyConfigured({ providerId: 'dashscope', cfg: ctx.cfg }),\n async generateImage(req) {\n const apiKey = resolveApiKeyForProvider({ providerId: 'dashscope', cfg: req.cfg });\n if (!apiKey) {\n throw new Error(\n 'DashScope API key missing (set DASHSCOPE_API_KEY or providers.dashscope.apiKey)',\n );\n }\n return generateDashScopeImages({ req, apiKey });\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"image-generation-provider.js","names":[],"sources":["../../../../extensions/dashscope/src/image-generation-provider.ts"],"sourcesContent":["/**\n * Bundled DashScope (Alibaba) image-generation provider.\n *\n * Migrated from src/agent/image/generation/dashscope-generate.ts. Logic stays\n * identical; the only change is registration is now driven by the bundled\n * provider generator.\n */\nimport {\n isProviderApiKeyConfigured,\n resolveApiKeyForProvider,\n} from '@xopcai/xopc/providers/auth-runtime/index.js';\nimport {\n pickTimeoutMsOrFallback,\n postJsonRequest,\n privateNetworkPolicyToSsrfGuardOptions,\n resolveProviderHttpRequestConfig,\n} from '@xopcai/xopc/media-shared/http/index.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\nimport { imageFileExtensionForMimeType } from '@xopcai/xopc/agent/image/generation/image-assets.js';\nimport type {\n ImageGenerationProvider,\n ImageGenerationProviderCapabilities,\n ImageGenerationRequest,\n ImageGenerationResult,\n} from '@xopcai/xopc/agent/image/generation/types.js';\n\nconst log = createLogger('ImageGen:DashScope');\n\n/**\n * Wan image model ids for **HTTP synchronous** `multimodal-generation/generation`.\n * - **2.7** (`wan2.7-image-pro` / `wan2.7-image`): see Wan 2.7 image API (size presets 1K/2K/4K, `thinking_mode`, …).\n * - **2.6** (`wan2.6-t2i`): Wan 2.6 T2I (`prompt_extend`, pixel `宽*高`, …).\n * Wan 2.5 and earlier async-only models are not listed here.\n * @see https://www.alibabacloud.com/help/en/model-studio/wan-image-generation-and-editing-api-reference\n * @see https://www.alibabacloud.com/help/en/model-studio/text-to-image-v2-api-reference\n * @see https://www.alibabacloud.com/help/en/model-studio/model-pricing\n */\nexport const DASHSCOPE_IMAGE_MODELS: readonly string[] = [\n 'wan2.7-image-pro',\n 'wan2.7-image',\n 'wan2.6-t2i',\n];\nexport const DASHSCOPE_DEFAULT_IMAGE_MODEL = DASHSCOPE_IMAGE_MODELS[0]!;\n\nconst DEFAULT_TIMEOUT_MS = 180_000;\n\nconst DASHSCOPE_CAPABILITIES: ImageGenerationProviderCapabilities = {\n generate: { maxCount: 4, supportsSize: true },\n edit: { enabled: false },\n geometry: {\n sizes: ['2K', '1K', '4K', '1280x1280', '1024x1024', '1280x720', '720x1280', '1024x1536', '1536x1024'],\n },\n output: {\n formats: ['png', 'jpeg', 'webp'],\n },\n};\n\n/**\n * Official synchronous wan2.6 text-to-image endpoints. Each region uses its own API key.\n * @see https://www.alibabacloud.com/help/zh/model-studio/text-to-image-v2-api-reference\n */\nexport const DASHSCOPE_IMAGE_ENDPOINTS = {\n beijing: 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation',\n singapore: 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation',\n} as const;\n\nexport type DashScopeImageRegion = keyof typeof DASHSCOPE_IMAGE_ENDPOINTS;\n\nconst DEFAULT_OUTPUT_MIME = 'image/png';\n\nfunction providerConfigId(req?: ImageGenerationRequest, fallback = 'dashscope-cn'): string {\n return req?.provider?.trim() || fallback;\n}\n\nexport function resolveDashScopeImageGenerationUrl(\n req?: ImageGenerationRequest,\n defaultRegion: DashScopeImageRegion = 'beijing',\n): string {\n const id = providerConfigId(req);\n const cfgImageBase = readDashScopeCfgString(req?.cfg, id, 'imageBaseUrl');\n if (cfgImageBase) return cfgImageBase.replace(/\\/+$/, '');\n const cfgBase = readDashScopeCfgString(req?.cfg, id, 'baseUrl');\n if (cfgBase) return cfgBase.replace(/\\/+$/, '');\n const trimmed = process.env.DASHSCOPE_IMAGE_BASE_URL?.trim();\n if (trimmed) {\n return trimmed.replace(/\\/+$/, '');\n }\n return DASHSCOPE_IMAGE_ENDPOINTS[defaultRegion];\n}\n\nfunction readDashScopeCfgString(\n cfg: ImageGenerationRequest['cfg'],\n providerId: string,\n key: string,\n): string | undefined {\n const providers = (cfg as unknown as { providers?: Record<string, unknown> } | undefined)?.providers;\n if (!providers || typeof providers !== 'object') return undefined;\n const entry = (providers as Record<string, unknown>)[providerId];\n if (!entry || typeof entry !== 'object') return undefined;\n const v = (entry as Record<string, unknown>)[key];\n return typeof v === 'string' && v.trim() ? v.trim() : undefined;\n}\n\n/** Map tool size (e.g. `1024x1024`) to DashScope `宽*高` format. */\nexport function mapSizeToDashScopeFormat(size?: string): string {\n if (!size?.trim()) {\n return '1280*1280';\n }\n const s = size.trim();\n if (s.includes('*')) {\n return s.replace(/\\s/g, '');\n }\n const m = /^(\\d+)\\s*[xX]\\s*(\\d+)$/.exec(s);\n if (m) {\n return `${m[1]}*${m[2]}`;\n }\n return '1280*1280';\n}\n\nexport function isWan27ImageModel(model: string): boolean {\n const m = model.trim().toLowerCase();\n return m === 'wan2.7-image-pro' || m === 'wan2.7-image';\n}\n\n/**\n * Map tool `size` to Wan 2.7 `parameters.size` (1K / 2K / 4K presets or `宽*高` pixels).\n * `wan2.7-image` does not support 4K — falls back to 2K.\n */\nexport function mapSizeToWan27Format(size: string | undefined, modelId: string): string {\n const id = modelId.trim().toLowerCase();\n if (!size?.trim()) return '2K';\n const s = size.trim();\n const preset = s.toUpperCase();\n if (preset === '1K' || preset === '2K' || preset === '4K') {\n if (preset === '4K' && id === 'wan2.7-image') return '2K';\n return preset;\n }\n if (s.includes('*')) return s.replace(/\\s/g, '');\n const dim = /^(\\d+)\\s*[xX]\\s*(\\d+)$/.exec(s);\n if (dim) return `${dim[1]}*${dim[2]}`;\n return '2K';\n}\n\ntype DashScopeT2IResponse = {\n code?: string;\n message?: string;\n output?: {\n choices?: Array<{\n message?: {\n content?: Array<{ type?: string; image?: string; text?: string }>;\n };\n }>;\n };\n};\n\nfunction collectImageUrls(data: DashScopeT2IResponse): string[] {\n const urls: string[] = [];\n for (const choice of data.output?.choices ?? []) {\n for (const item of choice.message?.content ?? []) {\n if (item.type === 'image' && typeof item.image === 'string' && item.image.length > 0) {\n urls.push(item.image);\n }\n }\n }\n return urls;\n}\n\nasync function fetchImageBuffers(\n urls: string[],\n signal: AbortSignal | undefined,\n): Promise<Array<{ buffer: Buffer; mimeType: string; fileName: string }>> {\n const out: Array<{ buffer: Buffer; mimeType: string; fileName: string }> = [];\n let index = 0;\n for (const url of urls) {\n index += 1;\n const res = await fetch(url, { redirect: 'follow', signal });\n if (!res.ok) {\n const t = await res.text().catch(() => '');\n throw new Error(`Failed to download generated image (${res.status}): ${t || res.statusText}`);\n }\n const buf = Buffer.from(await res.arrayBuffer());\n const ct = res.headers.get('content-type') || '';\n const mimeType = ct.split(';')[0]?.trim() || DEFAULT_OUTPUT_MIME;\n const ext = imageFileExtensionForMimeType(mimeType);\n out.push({\n buffer: buf,\n mimeType,\n fileName: `image-${index}.${ext}`,\n });\n }\n return out;\n}\n\nexport async function generateDashScopeImages(params: {\n req: ImageGenerationRequest;\n apiKey: string;\n providerId?: string;\n defaultRegion?: DashScopeImageRegion;\n}): Promise<ImageGenerationResult> {\n const { req, apiKey } = params;\n const providerId = params.providerId ?? req.provider ?? 'dashscope-cn';\n if (req.inputImages && req.inputImages.length > 0) {\n throw new Error('Image-to-image is not supported for Qwen/DashScope in this build');\n }\n\n const n = Math.min(4, Math.max(1, req.count ?? 1));\n const model = req.model?.trim() || DASHSCOPE_DEFAULT_IMAGE_MODEL;\n const parameters = isWan27ImageModel(model)\n ? {\n size: mapSizeToWan27Format(req.size, model),\n n,\n watermark: false,\n thinking_mode: true,\n }\n : {\n prompt_extend: true,\n watermark: false,\n n,\n negative_prompt: '',\n size: mapSizeToDashScopeFormat(req.size),\n };\n\n const body = {\n model,\n input: {\n messages: [\n {\n role: 'user' as const,\n content: [{ text: req.prompt }],\n },\n ],\n },\n parameters,\n };\n\n const url = resolveDashScopeImageGenerationUrl(req, params.defaultRegion);\n const httpDefaults = resolveProviderHttpRequestConfig({\n providerId,\n cfg: req.cfg,\n fallbackTimeoutMs: DEFAULT_TIMEOUT_MS,\n });\n\n log.debug(\n { providerId, model, url, count: n, phase: 'request' },\n 'DashScope image generation request',\n );\n\n const timeoutMs = pickTimeoutMsOrFallback(req.timeoutMs, httpDefaults.timeoutMs, DEFAULT_TIMEOUT_MS);\n const response = await postJsonRequest(url, {\n label: providerId,\n timeoutMs,\n signal: req.signal,\n body,\n headers: {\n ...httpDefaults.headers,\n authorization: `Bearer ${apiKey}`,\n },\n ...privateNetworkPolicyToSsrfGuardOptions(),\n });\n\n let data: DashScopeT2IResponse;\n const rawText = await response.text();\n try {\n data = JSON.parse(rawText) as DashScopeT2IResponse;\n } catch {\n throw new Error(`DashScope returned non-JSON: ${rawText.slice(0, 240)}`);\n }\n\n if (!data.output?.choices?.length) {\n if (data.message || data.code) {\n throw new Error(\n data.code\n ? `DashScope: ${data.code}: ${data.message ?? ''}`\n : `DashScope: ${data.message ?? 'unknown error'}`,\n );\n }\n throw new Error('DashScope returned no output');\n }\n\n const urls = collectImageUrls(data);\n if (urls.length === 0) {\n throw new Error('DashScope returned no image URLs in response');\n }\n\n const assets = await fetchImageBuffers(urls, req.signal);\n return {\n images: assets,\n model,\n };\n}\n\nfunction createDashScopeImageGenerationProvider(options: {\n id: string;\n label: string;\n defaultRegion: DashScopeImageRegion;\n}): ImageGenerationProvider {\n return {\n id: options.id,\n label: options.label,\n defaultModel: DASHSCOPE_DEFAULT_IMAGE_MODEL,\n models: [...DASHSCOPE_IMAGE_MODELS],\n capabilities: DASHSCOPE_CAPABILITIES,\n isConfigured: (ctx) =>\n isProviderApiKeyConfigured({ providerId: options.id, cfg: ctx.cfg }),\n async generateImage(req) {\n const apiKey = resolveApiKeyForProvider({ providerId: options.id, cfg: req.cfg });\n if (!apiKey) {\n throw new Error(\n `DashScope API key missing (set DASHSCOPE_API_KEY or providers.${options.id}.apiKey)`,\n );\n }\n return generateDashScopeImages({\n req,\n apiKey,\n providerId: options.id,\n defaultRegion: options.defaultRegion,\n });\n },\n };\n}\n\nexport function buildDashScopeCnImageGenerationProvider(): ImageGenerationProvider {\n return createDashScopeImageGenerationProvider({\n id: 'dashscope-cn',\n label: 'DashScope (Alibaba · China)',\n defaultRegion: 'beijing',\n });\n}\n\nexport function buildDashScopeIntlImageGenerationProvider(): ImageGenerationProvider {\n return createDashScopeImageGenerationProvider({\n id: 'dashscope-intl',\n label: 'DashScope (Alibaba · International)',\n defaultRegion: 'singapore',\n });\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bundled DashScope (Alibaba) image-generation extension entry.
|
|
3
3
|
*/
|
|
4
|
-
export {
|
|
4
|
+
export { buildDashScopeCnImageGenerationProvider, buildDashScopeIntlImageGenerationProvider, generateDashScopeImages, resolveDashScopeImageGenerationUrl, mapSizeToDashScopeFormat, mapSizeToWan27Format, isWan27ImageModel, DASHSCOPE_IMAGE_ENDPOINTS, DASHSCOPE_DEFAULT_IMAGE_MODEL, DASHSCOPE_IMAGE_MODELS, type DashScopeImageRegion, } from './image-generation-provider.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { DASHSCOPE_DEFAULT_IMAGE_MODEL, DASHSCOPE_IMAGE_ENDPOINTS, DASHSCOPE_IMAGE_MODELS,
|
|
2
|
-
export { DASHSCOPE_DEFAULT_IMAGE_MODEL, DASHSCOPE_IMAGE_ENDPOINTS, DASHSCOPE_IMAGE_MODELS,
|
|
1
|
+
import { DASHSCOPE_DEFAULT_IMAGE_MODEL, DASHSCOPE_IMAGE_ENDPOINTS, DASHSCOPE_IMAGE_MODELS, buildDashScopeCnImageGenerationProvider, buildDashScopeIntlImageGenerationProvider, generateDashScopeImages, isWan27ImageModel, mapSizeToDashScopeFormat, mapSizeToWan27Format, resolveDashScopeImageGenerationUrl } from "./image-generation-provider.js";
|
|
2
|
+
export { DASHSCOPE_DEFAULT_IMAGE_MODEL, DASHSCOPE_IMAGE_ENDPOINTS, DASHSCOPE_IMAGE_MODELS, buildDashScopeCnImageGenerationProvider, buildDashScopeIntlImageGenerationProvider, generateDashScopeImages, isWan27ImageModel, mapSizeToDashScopeFormat, mapSizeToWan27Format, resolveDashScopeImageGenerationUrl };
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "dashscope",
|
|
3
3
|
"name": "DashScope (Alibaba)",
|
|
4
|
-
"description": "Image generation via Alibaba Model Studio (DashScope). Configure
|
|
4
|
+
"description": "Image generation via Alibaba Model Studio (DashScope). Configure the China or international provider under Settings → Images.",
|
|
5
5
|
"version": "1.0.0",
|
|
6
6
|
"kind": "image-generation",
|
|
7
7
|
"main": "src/index.js",
|
|
8
8
|
"autoEnableWhenConfiguredProviders": [
|
|
9
|
-
"dashscope"
|
|
9
|
+
"dashscope-cn",
|
|
10
|
+
"dashscope-intl"
|
|
10
11
|
],
|
|
11
12
|
"engines": {
|
|
12
13
|
"xopc": ">=0.0.106 <1.0.0"
|
|
@@ -7,18 +7,20 @@ import type { ImageGenerationProvider, ImageGenerationRequest, ImageGenerationRe
|
|
|
7
7
|
export declare const MINIMAX_IMAGE_MODELS: readonly string[];
|
|
8
8
|
export declare const MINIMAX_DEFAULT_IMAGE_MODEL: string;
|
|
9
9
|
/**
|
|
10
|
-
* Resolve MiniMax base URL
|
|
11
|
-
* 1. cfg.providers.
|
|
10
|
+
* Resolve MiniMax base URL:
|
|
11
|
+
* 1. cfg.providers[providerId].baseUrl
|
|
12
12
|
* 2. MINIMAX_BASE_URL env
|
|
13
|
-
* 3.
|
|
14
|
-
* otherwise CN.
|
|
13
|
+
* 3. Provider default base URL
|
|
15
14
|
*/
|
|
16
|
-
export declare function resolveMinimaxBaseUrl(req: ImageGenerationRequest): string;
|
|
15
|
+
export declare function resolveMinimaxBaseUrl(req: ImageGenerationRequest, defaultBaseUrl?: string): string;
|
|
17
16
|
export type MinimaxAspectRatio = '1:1' | '16:9' | '9:16' | '4:3' | '3:4';
|
|
18
17
|
/** Map tool size (e.g. `1024x1024`) to the closest MiniMax-supported aspect ratio. */
|
|
19
18
|
export declare function mapSizeToMinimaxAspectRatio(size?: string): MinimaxAspectRatio;
|
|
20
19
|
export declare function generateMinimaxImages(params: {
|
|
21
20
|
req: ImageGenerationRequest;
|
|
22
21
|
apiKey: string;
|
|
22
|
+
providerId?: string;
|
|
23
|
+
defaultBaseUrl?: string;
|
|
23
24
|
}): Promise<ImageGenerationResult>;
|
|
25
|
+
export declare function buildMinimaxCnImageGenerationProvider(): ImageGenerationProvider;
|
|
24
26
|
export declare function buildMinimaxImageGenerationProvider(): ImageGenerationProvider;
|
|
@@ -24,20 +24,10 @@ const log = createLogger("ImageGen:MiniMax");
|
|
|
24
24
|
*/
|
|
25
25
|
const MINIMAX_IMAGE_MODELS = ["image-01", "image-01-live"];
|
|
26
26
|
const MINIMAX_DEFAULT_IMAGE_MODEL = MINIMAX_IMAGE_MODELS[0];
|
|
27
|
-
/** CN region
|
|
27
|
+
/** CN region. */
|
|
28
28
|
const MINIMAX_CN_BASE_URL = "https://api.minimaxi.com";
|
|
29
|
-
/** International region
|
|
29
|
+
/** International region. */
|
|
30
30
|
const MINIMAX_INTL_BASE_URL = "https://api.minimax.io";
|
|
31
|
-
const MINIMAX_IMAGE_UI = {
|
|
32
|
-
baseUrlPresets: [{
|
|
33
|
-
value: MINIMAX_CN_BASE_URL,
|
|
34
|
-
label: "China (api.minimaxi.com)"
|
|
35
|
-
}, {
|
|
36
|
-
value: MINIMAX_INTL_BASE_URL,
|
|
37
|
-
label: "International (api.minimax.io)"
|
|
38
|
-
}],
|
|
39
|
-
baseUrlPresetKind: "minimax"
|
|
40
|
-
};
|
|
41
31
|
const DEFAULT_TIMEOUT_MS = 12e4;
|
|
42
32
|
const MINIMAX_CAPABILITIES = {
|
|
43
33
|
generate: {
|
|
@@ -55,31 +45,31 @@ const MINIMAX_CAPABILITIES = {
|
|
|
55
45
|
] },
|
|
56
46
|
output: { formats: ["jpeg"] }
|
|
57
47
|
};
|
|
58
|
-
function readMinimaxCfgString(cfg, key) {
|
|
48
|
+
function readMinimaxCfgString(cfg, providerId, key) {
|
|
59
49
|
const providers = cfg?.providers;
|
|
60
50
|
if (!providers || typeof providers !== "object") return void 0;
|
|
61
|
-
const entry = providers[
|
|
51
|
+
const entry = providers[providerId];
|
|
62
52
|
if (!entry || typeof entry !== "object") return void 0;
|
|
63
53
|
const v = entry[key];
|
|
64
54
|
return typeof v === "string" && v.trim() ? v.trim() : void 0;
|
|
65
55
|
}
|
|
66
56
|
/**
|
|
67
|
-
* Resolve MiniMax base URL
|
|
68
|
-
* 1. cfg.providers.
|
|
57
|
+
* Resolve MiniMax base URL:
|
|
58
|
+
* 1. cfg.providers[providerId].baseUrl
|
|
69
59
|
* 2. MINIMAX_BASE_URL env
|
|
70
|
-
* 3.
|
|
71
|
-
* otherwise CN.
|
|
60
|
+
* 3. Provider default base URL
|
|
72
61
|
*/
|
|
73
|
-
function resolveMinimaxBaseUrl(req) {
|
|
74
|
-
const
|
|
62
|
+
function resolveMinimaxBaseUrl(req, defaultBaseUrl) {
|
|
63
|
+
const providerId = req.provider?.trim() || "minimax";
|
|
64
|
+
const fromCfg = readMinimaxCfgString(req.cfg, providerId, "baseUrl");
|
|
75
65
|
if (fromCfg) return fromCfg.replace(/\/+$/, "");
|
|
76
66
|
const fromEnv = process.env.MINIMAX_BASE_URL?.trim();
|
|
77
67
|
if (fromEnv) return fromEnv.replace(/\/+$/, "");
|
|
78
|
-
if (
|
|
79
|
-
return MINIMAX_CN_BASE_URL;
|
|
68
|
+
if (defaultBaseUrl) return defaultBaseUrl;
|
|
69
|
+
return providerId === "minimax" ? MINIMAX_INTL_BASE_URL : MINIMAX_CN_BASE_URL;
|
|
80
70
|
}
|
|
81
|
-
function resolveMinimaxImageUrl(req) {
|
|
82
|
-
return `${resolveMinimaxBaseUrl(req)}/v1/image_generation`;
|
|
71
|
+
function resolveMinimaxImageUrl(req, defaultBaseUrl) {
|
|
72
|
+
return `${resolveMinimaxBaseUrl(req, defaultBaseUrl)}/v1/image_generation`;
|
|
83
73
|
}
|
|
84
74
|
/** Map tool size (e.g. `1024x1024`) to the closest MiniMax-supported aspect ratio. */
|
|
85
75
|
function mapSizeToMinimaxAspectRatio(size) {
|
|
@@ -125,24 +115,25 @@ function mapSizeToMinimaxAspectRatio(size) {
|
|
|
125
115
|
}
|
|
126
116
|
async function generateMinimaxImages(params) {
|
|
127
117
|
const { req, apiKey } = params;
|
|
118
|
+
const providerId = params.providerId ?? req.provider ?? "minimax-cn";
|
|
128
119
|
if (req.inputImages && req.inputImages.length > 0) throw new Error("Image-to-image is not supported for MiniMax in this build");
|
|
129
120
|
const model = req.model?.trim() || MINIMAX_DEFAULT_IMAGE_MODEL;
|
|
130
121
|
const aspectRatio = req.aspectRatio?.trim() || mapSizeToMinimaxAspectRatio(req.size);
|
|
131
|
-
const url = resolveMinimaxImageUrl(req);
|
|
122
|
+
const url = resolveMinimaxImageUrl(req, params.defaultBaseUrl);
|
|
132
123
|
const httpDefaults = resolveProviderHttpRequestConfig({
|
|
133
|
-
providerId
|
|
124
|
+
providerId,
|
|
134
125
|
cfg: req.cfg,
|
|
135
126
|
fallbackTimeoutMs: DEFAULT_TIMEOUT_MS
|
|
136
127
|
});
|
|
137
128
|
log.debug({
|
|
138
|
-
providerId
|
|
129
|
+
providerId,
|
|
139
130
|
model,
|
|
140
131
|
url,
|
|
141
132
|
aspectRatio,
|
|
142
133
|
phase: "request"
|
|
143
134
|
}, "MiniMax image generation request");
|
|
144
135
|
const rawText = await (await postJsonRequest(url, {
|
|
145
|
-
label:
|
|
136
|
+
label: providerId,
|
|
146
137
|
timeoutMs: pickTimeoutMsOrFallback(req.timeoutMs, httpDefaults.timeoutMs, DEFAULT_TIMEOUT_MS),
|
|
147
138
|
signal: req.signal,
|
|
148
139
|
body: {
|
|
@@ -176,32 +167,47 @@ async function generateMinimaxImages(params) {
|
|
|
176
167
|
model
|
|
177
168
|
};
|
|
178
169
|
}
|
|
179
|
-
function
|
|
170
|
+
function createMinimaxImageGenerationProvider(options) {
|
|
180
171
|
return {
|
|
181
|
-
id:
|
|
182
|
-
label:
|
|
172
|
+
id: options.id,
|
|
173
|
+
label: options.label,
|
|
183
174
|
defaultModel: MINIMAX_DEFAULT_IMAGE_MODEL,
|
|
184
175
|
models: [...MINIMAX_IMAGE_MODELS],
|
|
185
176
|
capabilities: MINIMAX_CAPABILITIES,
|
|
186
|
-
ui: MINIMAX_IMAGE_UI,
|
|
187
177
|
isConfigured: (ctx) => isProviderApiKeyConfigured({
|
|
188
|
-
providerId:
|
|
178
|
+
providerId: options.id,
|
|
189
179
|
cfg: ctx.cfg
|
|
190
180
|
}),
|
|
191
181
|
async generateImage(req) {
|
|
192
182
|
const apiKey = resolveApiKeyForProvider({
|
|
193
|
-
providerId:
|
|
183
|
+
providerId: options.id,
|
|
194
184
|
cfg: req.cfg
|
|
195
185
|
});
|
|
196
|
-
if (!apiKey) throw new Error(
|
|
186
|
+
if (!apiKey) throw new Error(`MiniMax API key missing (MINIMAX_API_KEY or providers.${options.id}.apiKey)`);
|
|
197
187
|
return generateMinimaxImages({
|
|
198
188
|
req,
|
|
199
|
-
apiKey
|
|
189
|
+
apiKey,
|
|
190
|
+
providerId: options.id,
|
|
191
|
+
defaultBaseUrl: options.defaultBaseUrl
|
|
200
192
|
});
|
|
201
193
|
}
|
|
202
194
|
};
|
|
203
195
|
}
|
|
196
|
+
function buildMinimaxCnImageGenerationProvider() {
|
|
197
|
+
return createMinimaxImageGenerationProvider({
|
|
198
|
+
id: "minimax-cn",
|
|
199
|
+
label: "MiniMax CN",
|
|
200
|
+
defaultBaseUrl: MINIMAX_CN_BASE_URL
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
function buildMinimaxImageGenerationProvider() {
|
|
204
|
+
return createMinimaxImageGenerationProvider({
|
|
205
|
+
id: "minimax",
|
|
206
|
+
label: "MiniMax International",
|
|
207
|
+
defaultBaseUrl: MINIMAX_INTL_BASE_URL
|
|
208
|
+
});
|
|
209
|
+
}
|
|
204
210
|
//#endregion
|
|
205
|
-
export { MINIMAX_DEFAULT_IMAGE_MODEL, MINIMAX_IMAGE_MODELS, buildMinimaxImageGenerationProvider, generateMinimaxImages, mapSizeToMinimaxAspectRatio, resolveMinimaxBaseUrl };
|
|
211
|
+
export { MINIMAX_DEFAULT_IMAGE_MODEL, MINIMAX_IMAGE_MODELS, buildMinimaxCnImageGenerationProvider, buildMinimaxImageGenerationProvider, generateMinimaxImages, mapSizeToMinimaxAspectRatio, resolveMinimaxBaseUrl };
|
|
206
212
|
|
|
207
213
|
//# sourceMappingURL=image-generation-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-generation-provider.js","names":[],"sources":["../../../../extensions/minimax/src/image-generation-provider.ts"],"sourcesContent":["/**\n * Bundled MiniMax image-generation provider.\n *\n * Migrated from src/agent/image/generation/minimax-generate.ts. Logic stays\n * identical; only the registration pathway moves to the bundled generator.\n */\nimport {\n isProviderApiKeyConfigured,\n resolveApiKeyForProvider,\n} from '@xopcai/xopc/providers/auth-runtime/index.js';\nimport {\n pickTimeoutMsOrFallback,\n postJsonRequest,\n privateNetworkPolicyToSsrfGuardOptions,\n resolveProviderHttpRequestConfig,\n} from '@xopcai/xopc/media-shared/http/index.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\nimport type {\n ImageGenerationProvider,\n ImageGenerationProviderCapabilities,\n ImageGenerationRequest,\n ImageGenerationResult,\n ImageProviderUiMetadata,\n} from '@xopcai/xopc/agent/image/generation/types.js';\n\nconst log = createLogger('ImageGen:MiniMax');\n\n/**\n * MiniMax `POST /v1/image_generation` model names (vendor OpenAPI enum).\n * Default: `image-01`. `image-01-live` is the alternate enum value on the same API.\n * @see https://platform.minimax.io/docs/api-reference/image-generation-i2i\n */\nexport const MINIMAX_IMAGE_MODELS: readonly string[] = ['image-01', 'image-01-live'];\nexport const MINIMAX_DEFAULT_IMAGE_MODEL = MINIMAX_IMAGE_MODELS[0]!;\n\n/** CN region (default for `minimax` ids registered in mainland China). */\nconst MINIMAX_CN_BASE_URL = 'https://api.minimaxi.com';\n/** International region (used when the configured key matches `*_INTL_*`). */\nconst MINIMAX_INTL_BASE_URL = 'https://api.minimax.io';\n\nconst MINIMAX_IMAGE_UI: ImageProviderUiMetadata = {\n baseUrlPresets: [\n { value: MINIMAX_CN_BASE_URL, label: 'China (api.minimaxi.com)' },\n { value: MINIMAX_INTL_BASE_URL, label: 'International (api.minimax.io)' },\n ],\n baseUrlPresetKind: 'minimax',\n};\n\nconst DEFAULT_TIMEOUT_MS = 120_000;\n\nconst MINIMAX_CAPABILITIES: ImageGenerationProviderCapabilities = {\n generate: { maxCount: 1, supportsAspectRatio: true, supportsSize: false },\n edit: { enabled: false },\n geometry: { aspectRatios: ['1:1', '16:9', '9:16', '4:3', '3:4'] },\n output: { formats: ['jpeg'] },\n};\n\nfunction readMinimaxCfgString(\n cfg: ImageGenerationRequest['cfg'],\n key: string,\n): string | undefined {\n const providers = (cfg as unknown as { providers?: Record<string, unknown> } | undefined)?.providers;\n if (!providers || typeof providers !== 'object') return undefined;\n const entry = (providers as Record<string, unknown>)['minimax'];\n if (!entry || typeof entry !== 'object') return undefined;\n const v = (entry as Record<string, unknown>)[key];\n return typeof v === 'string' && v.trim() ? v.trim() : undefined;\n}\n\n/**\n * Resolve MiniMax base URL with CN/Intl auto-detection:\n * 1. cfg.providers.minimax.baseUrl\n * 2. MINIMAX_BASE_URL env\n * 3. Auto: when MINIMAX_INTL_API_KEY env is the only key present, default to Intl;\n * otherwise CN.\n */\nexport function resolveMinimaxBaseUrl(req: ImageGenerationRequest): string {\n const fromCfg = readMinimaxCfgString(req.cfg, 'baseUrl');\n if (fromCfg) return fromCfg.replace(/\\/+$/, '');\n const fromEnv = process.env.MINIMAX_BASE_URL?.trim();\n if (fromEnv) return fromEnv.replace(/\\/+$/, '');\n if (process.env.MINIMAX_INTL_API_KEY && !process.env.MINIMAX_API_KEY) {\n return MINIMAX_INTL_BASE_URL;\n }\n return MINIMAX_CN_BASE_URL;\n}\n\nfunction resolveMinimaxImageUrl(req: ImageGenerationRequest): string {\n return `${resolveMinimaxBaseUrl(req)}/v1/image_generation`;\n}\n\nexport type MinimaxAspectRatio = '1:1' | '16:9' | '9:16' | '4:3' | '3:4';\n\n/** Map tool size (e.g. `1024x1024`) to the closest MiniMax-supported aspect ratio. */\nexport function mapSizeToMinimaxAspectRatio(size?: string): MinimaxAspectRatio {\n if (!size?.trim()) {\n return '1:1';\n }\n const m = /^(\\d+)\\s*[xX]\\s*(\\d+)$/.exec(size.trim());\n if (!m) {\n return '1:1';\n }\n const w = Number(m[1]);\n const h = Number(m[2]);\n if (!Number.isFinite(w) || !Number.isFinite(h) || h === 0) {\n return '1:1';\n }\n const ratio = w / h;\n const candidates: Array<{ ar: MinimaxAspectRatio; r: number }> = [\n { ar: '1:1', r: 1 },\n { ar: '16:9', r: 16 / 9 },\n { ar: '9:16', r: 9 / 16 },\n { ar: '4:3', r: 4 / 3 },\n { ar: '3:4', r: 3 / 4 },\n ];\n let best = candidates[0]!;\n let bestDiff = Math.abs(ratio - best.r);\n for (const c of candidates.slice(1)) {\n const d = Math.abs(ratio - c.r);\n if (d < bestDiff) {\n best = c;\n bestDiff = d;\n }\n }\n return best.ar;\n}\n\ntype MiniMaxImageResponse = {\n data?: { image_base64?: string[] };\n base_resp?: { status_code?: number; status_msg?: string };\n};\n\nexport async function generateMinimaxImages(params: {\n req: ImageGenerationRequest;\n apiKey: string;\n}): Promise<ImageGenerationResult> {\n const { req, apiKey } = params;\n if (req.inputImages && req.inputImages.length > 0) {\n throw new Error('Image-to-image is not supported for MiniMax in this build');\n }\n\n const model = req.model?.trim() || MINIMAX_DEFAULT_IMAGE_MODEL;\n // Honour explicit aspectRatio first; fall back to size-derived mapping.\n const aspectRatio = req.aspectRatio?.trim() || mapSizeToMinimaxAspectRatio(req.size);\n\n const url = resolveMinimaxImageUrl(req);\n const httpDefaults = resolveProviderHttpRequestConfig({\n providerId: 'minimax',\n cfg: req.cfg,\n fallbackTimeoutMs: DEFAULT_TIMEOUT_MS,\n });\n\n log.debug(\n { providerId: 'minimax', model, url, aspectRatio, phase: 'request' },\n 'MiniMax image generation request',\n );\n\n const timeoutMs = pickTimeoutMsOrFallback(req.timeoutMs, httpDefaults.timeoutMs, DEFAULT_TIMEOUT_MS);\n const res = await postJsonRequest(url, {\n label: 'minimax',\n timeoutMs,\n signal: req.signal,\n body: {\n model,\n prompt: req.prompt,\n aspect_ratio: aspectRatio,\n response_format: 'base64',\n },\n headers: {\n ...httpDefaults.headers,\n authorization: `Bearer ${apiKey}`,\n },\n ...privateNetworkPolicyToSsrfGuardOptions(),\n });\n\n const rawText = await res.text();\n let data: MiniMaxImageResponse;\n try {\n data = JSON.parse(rawText) as MiniMaxImageResponse;\n } catch {\n throw new Error(`MiniMax returned non-JSON: ${rawText.slice(0, 240)}`);\n }\n\n const code = data.base_resp?.status_code;\n if (code !== undefined && code !== 0) {\n throw new Error(\n `MiniMax: ${code}: ${data.base_resp?.status_msg ?? 'request failed'}`.trim(),\n );\n }\n\n const imageBase64List = data.data?.image_base64 ?? [];\n if (imageBase64List.length === 0) {\n throw new Error('MiniMax returned no images');\n }\n\n const images = imageBase64List.map((b64, index) => ({\n buffer: Buffer.from(b64, 'base64'),\n mimeType: 'image/jpeg',\n fileName: `image-${index + 1}.jpg`,\n }));\n\n return { images, model };\n}\n\nexport function buildMinimaxImageGenerationProvider(): ImageGenerationProvider {\n return {\n id: 'minimax',\n label: 'MiniMax',\n defaultModel: MINIMAX_DEFAULT_IMAGE_MODEL,\n models: [...MINIMAX_IMAGE_MODELS],\n capabilities: MINIMAX_CAPABILITIES,\n ui: MINIMAX_IMAGE_UI,\n isConfigured: (ctx) => isProviderApiKeyConfigured({ providerId: 'minimax', cfg: ctx.cfg }),\n async generateImage(req) {\n const apiKey = resolveApiKeyForProvider({ providerId: 'minimax', cfg: req.cfg });\n if (!apiKey) {\n throw new Error('MiniMax API key missing (MINIMAX_API_KEY or providers.minimax.apiKey)');\n }\n return generateMinimaxImages({ req, apiKey });\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"image-generation-provider.js","names":[],"sources":["../../../../extensions/minimax/src/image-generation-provider.ts"],"sourcesContent":["/**\n * Bundled MiniMax image-generation provider.\n *\n * Migrated from src/agent/image/generation/minimax-generate.ts. Logic stays\n * identical; only the registration pathway moves to the bundled generator.\n */\nimport {\n isProviderApiKeyConfigured,\n resolveApiKeyForProvider,\n} from '@xopcai/xopc/providers/auth-runtime/index.js';\nimport {\n pickTimeoutMsOrFallback,\n postJsonRequest,\n privateNetworkPolicyToSsrfGuardOptions,\n resolveProviderHttpRequestConfig,\n} from '@xopcai/xopc/media-shared/http/index.js';\nimport { createLogger } from '@xopcai/xopc/utils/logger.js';\nimport type {\n ImageGenerationProvider,\n ImageGenerationProviderCapabilities,\n ImageGenerationRequest,\n ImageGenerationResult,\n} from '@xopcai/xopc/agent/image/generation/types.js';\n\nconst log = createLogger('ImageGen:MiniMax');\n\n/**\n * MiniMax `POST /v1/image_generation` model names (vendor OpenAPI enum).\n * Default: `image-01`. `image-01-live` is the alternate enum value on the same API.\n * @see https://platform.minimax.io/docs/api-reference/image-generation-i2i\n */\nexport const MINIMAX_IMAGE_MODELS: readonly string[] = ['image-01', 'image-01-live'];\nexport const MINIMAX_DEFAULT_IMAGE_MODEL = MINIMAX_IMAGE_MODELS[0]!;\n\n/** CN region. */\nconst MINIMAX_CN_BASE_URL = 'https://api.minimaxi.com';\n/** International region. */\nconst MINIMAX_INTL_BASE_URL = 'https://api.minimax.io';\n\nconst DEFAULT_TIMEOUT_MS = 120_000;\n\nconst MINIMAX_CAPABILITIES: ImageGenerationProviderCapabilities = {\n generate: { maxCount: 1, supportsAspectRatio: true, supportsSize: false },\n edit: { enabled: false },\n geometry: { aspectRatios: ['1:1', '16:9', '9:16', '4:3', '3:4'] },\n output: { formats: ['jpeg'] },\n};\n\nfunction readMinimaxCfgString(\n cfg: ImageGenerationRequest['cfg'],\n providerId: string,\n key: string,\n): string | undefined {\n const providers = (cfg as unknown as { providers?: Record<string, unknown> } | undefined)?.providers;\n if (!providers || typeof providers !== 'object') return undefined;\n const entry = (providers as Record<string, unknown>)[providerId];\n if (!entry || typeof entry !== 'object') return undefined;\n const v = (entry as Record<string, unknown>)[key];\n return typeof v === 'string' && v.trim() ? v.trim() : undefined;\n}\n\n/**\n * Resolve MiniMax base URL:\n * 1. cfg.providers[providerId].baseUrl\n * 2. MINIMAX_BASE_URL env\n * 3. Provider default base URL\n */\nexport function resolveMinimaxBaseUrl(\n req: ImageGenerationRequest,\n defaultBaseUrl?: string,\n): string {\n const providerId = req.provider?.trim() || 'minimax';\n const fromCfg = readMinimaxCfgString(req.cfg, providerId, 'baseUrl');\n if (fromCfg) return fromCfg.replace(/\\/+$/, '');\n const fromEnv = process.env.MINIMAX_BASE_URL?.trim();\n if (fromEnv) return fromEnv.replace(/\\/+$/, '');\n if (defaultBaseUrl) return defaultBaseUrl;\n return providerId === 'minimax' ? MINIMAX_INTL_BASE_URL : MINIMAX_CN_BASE_URL;\n}\n\nfunction resolveMinimaxImageUrl(req: ImageGenerationRequest, defaultBaseUrl?: string): string {\n return `${resolveMinimaxBaseUrl(req, defaultBaseUrl)}/v1/image_generation`;\n}\n\nexport type MinimaxAspectRatio = '1:1' | '16:9' | '9:16' | '4:3' | '3:4';\n\n/** Map tool size (e.g. `1024x1024`) to the closest MiniMax-supported aspect ratio. */\nexport function mapSizeToMinimaxAspectRatio(size?: string): MinimaxAspectRatio {\n if (!size?.trim()) {\n return '1:1';\n }\n const m = /^(\\d+)\\s*[xX]\\s*(\\d+)$/.exec(size.trim());\n if (!m) {\n return '1:1';\n }\n const w = Number(m[1]);\n const h = Number(m[2]);\n if (!Number.isFinite(w) || !Number.isFinite(h) || h === 0) {\n return '1:1';\n }\n const ratio = w / h;\n const candidates: Array<{ ar: MinimaxAspectRatio; r: number }> = [\n { ar: '1:1', r: 1 },\n { ar: '16:9', r: 16 / 9 },\n { ar: '9:16', r: 9 / 16 },\n { ar: '4:3', r: 4 / 3 },\n { ar: '3:4', r: 3 / 4 },\n ];\n let best = candidates[0]!;\n let bestDiff = Math.abs(ratio - best.r);\n for (const c of candidates.slice(1)) {\n const d = Math.abs(ratio - c.r);\n if (d < bestDiff) {\n best = c;\n bestDiff = d;\n }\n }\n return best.ar;\n}\n\ntype MiniMaxImageResponse = {\n data?: { image_base64?: string[] };\n base_resp?: { status_code?: number; status_msg?: string };\n};\n\nexport async function generateMinimaxImages(params: {\n req: ImageGenerationRequest;\n apiKey: string;\n providerId?: string;\n defaultBaseUrl?: string;\n}): Promise<ImageGenerationResult> {\n const { req, apiKey } = params;\n const providerId = params.providerId ?? req.provider ?? 'minimax-cn';\n if (req.inputImages && req.inputImages.length > 0) {\n throw new Error('Image-to-image is not supported for MiniMax in this build');\n }\n\n const model = req.model?.trim() || MINIMAX_DEFAULT_IMAGE_MODEL;\n // Honour explicit aspectRatio first; fall back to size-derived mapping.\n const aspectRatio = req.aspectRatio?.trim() || mapSizeToMinimaxAspectRatio(req.size);\n\n const url = resolveMinimaxImageUrl(req, params.defaultBaseUrl);\n const httpDefaults = resolveProviderHttpRequestConfig({\n providerId,\n cfg: req.cfg,\n fallbackTimeoutMs: DEFAULT_TIMEOUT_MS,\n });\n\n log.debug(\n { providerId, model, url, aspectRatio, phase: 'request' },\n 'MiniMax image generation request',\n );\n\n const timeoutMs = pickTimeoutMsOrFallback(req.timeoutMs, httpDefaults.timeoutMs, DEFAULT_TIMEOUT_MS);\n const res = await postJsonRequest(url, {\n label: providerId,\n timeoutMs,\n signal: req.signal,\n body: {\n model,\n prompt: req.prompt,\n aspect_ratio: aspectRatio,\n response_format: 'base64',\n },\n headers: {\n ...httpDefaults.headers,\n authorization: `Bearer ${apiKey}`,\n },\n ...privateNetworkPolicyToSsrfGuardOptions(),\n });\n\n const rawText = await res.text();\n let data: MiniMaxImageResponse;\n try {\n data = JSON.parse(rawText) as MiniMaxImageResponse;\n } catch {\n throw new Error(`MiniMax returned non-JSON: ${rawText.slice(0, 240)}`);\n }\n\n const code = data.base_resp?.status_code;\n if (code !== undefined && code !== 0) {\n throw new Error(\n `MiniMax: ${code}: ${data.base_resp?.status_msg ?? 'request failed'}`.trim(),\n );\n }\n\n const imageBase64List = data.data?.image_base64 ?? [];\n if (imageBase64List.length === 0) {\n throw new Error('MiniMax returned no images');\n }\n\n const images = imageBase64List.map((b64, index) => ({\n buffer: Buffer.from(b64, 'base64'),\n mimeType: 'image/jpeg',\n fileName: `image-${index + 1}.jpg`,\n }));\n\n return { images, model };\n}\n\nfunction createMinimaxImageGenerationProvider(options: {\n id: string;\n label: string;\n defaultBaseUrl?: string;\n}): ImageGenerationProvider {\n return {\n id: options.id,\n label: options.label,\n defaultModel: MINIMAX_DEFAULT_IMAGE_MODEL,\n models: [...MINIMAX_IMAGE_MODELS],\n capabilities: MINIMAX_CAPABILITIES,\n isConfigured: (ctx) => isProviderApiKeyConfigured({ providerId: options.id, cfg: ctx.cfg }),\n async generateImage(req) {\n const apiKey = resolveApiKeyForProvider({ providerId: options.id, cfg: req.cfg });\n if (!apiKey) {\n throw new Error(\n `MiniMax API key missing (MINIMAX_API_KEY or providers.${options.id}.apiKey)`,\n );\n }\n return generateMinimaxImages({\n req,\n apiKey,\n providerId: options.id,\n defaultBaseUrl: options.defaultBaseUrl,\n });\n },\n };\n}\n\nexport function buildMinimaxCnImageGenerationProvider(): ImageGenerationProvider {\n return createMinimaxImageGenerationProvider({\n id: 'minimax-cn',\n label: 'MiniMax CN',\n defaultBaseUrl: MINIMAX_CN_BASE_URL,\n });\n}\n\nexport function buildMinimaxImageGenerationProvider(): ImageGenerationProvider {\n return createMinimaxImageGenerationProvider({\n id: 'minimax',\n label: 'MiniMax International',\n defaultBaseUrl: MINIMAX_INTL_BASE_URL,\n });\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bundled MiniMax image-generation extension entry.
|
|
3
3
|
*/
|
|
4
|
-
export { buildMinimaxImageGenerationProvider, generateMinimaxImages, resolveMinimaxBaseUrl, mapSizeToMinimaxAspectRatio, MINIMAX_DEFAULT_IMAGE_MODEL, MINIMAX_IMAGE_MODELS, type MinimaxAspectRatio, } from './image-generation-provider.js';
|
|
4
|
+
export { buildMinimaxCnImageGenerationProvider, buildMinimaxImageGenerationProvider, generateMinimaxImages, resolveMinimaxBaseUrl, mapSizeToMinimaxAspectRatio, MINIMAX_DEFAULT_IMAGE_MODEL, MINIMAX_IMAGE_MODELS, type MinimaxAspectRatio, } from './image-generation-provider.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { MINIMAX_DEFAULT_IMAGE_MODEL, MINIMAX_IMAGE_MODELS, buildMinimaxImageGenerationProvider, generateMinimaxImages, mapSizeToMinimaxAspectRatio, resolveMinimaxBaseUrl } from "./image-generation-provider.js";
|
|
2
|
-
export { MINIMAX_DEFAULT_IMAGE_MODEL, MINIMAX_IMAGE_MODELS, buildMinimaxImageGenerationProvider, generateMinimaxImages, mapSizeToMinimaxAspectRatio, resolveMinimaxBaseUrl };
|
|
1
|
+
import { MINIMAX_DEFAULT_IMAGE_MODEL, MINIMAX_IMAGE_MODELS, buildMinimaxCnImageGenerationProvider, buildMinimaxImageGenerationProvider, generateMinimaxImages, mapSizeToMinimaxAspectRatio, resolveMinimaxBaseUrl } from "./image-generation-provider.js";
|
|
2
|
+
export { MINIMAX_DEFAULT_IMAGE_MODEL, MINIMAX_IMAGE_MODELS, buildMinimaxCnImageGenerationProvider, buildMinimaxImageGenerationProvider, generateMinimaxImages, mapSizeToMinimaxAspectRatio, resolveMinimaxBaseUrl };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "minimax",
|
|
3
3
|
"name": "MiniMax (images)",
|
|
4
|
-
"description": "MiniMax image generation. Configure
|
|
4
|
+
"description": "MiniMax image generation. Configure the China or international provider under Settings → Images.",
|
|
5
5
|
"version": "1.0.0",
|
|
6
6
|
"kind": "image-generation",
|
|
7
7
|
"main": "src/index.js",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "telegram",
|
|
3
3
|
"name": "Telegram Channel",
|
|
4
4
|
"description": "Bundled Telegram Bot channel (private workspace sources; ships inside @xopcai/xopc dist/)",
|
|
5
|
-
"version": "0.0.
|
|
5
|
+
"version": "0.0.121",
|
|
6
6
|
"kind": "channel",
|
|
7
7
|
"main": "src/index.js",
|
|
8
8
|
"channels": [
|