@sogni-ai/sogni-client 4.2.0-alpha.21 → 4.2.0-alpha.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/CLAUDE.md +7 -0
- package/README.md +45 -25
- package/dist/Chat/ChatTools.js +30 -16
- package/dist/Chat/ChatTools.js.map +1 -1
- package/dist/Chat/hostedToolValidation.generated.d.ts +46 -0
- package/dist/Chat/hostedToolValidation.generated.js +306 -0
- package/dist/Chat/hostedToolValidation.generated.js.map +1 -0
- package/dist/Chat/index.d.ts +41 -1
- package/dist/Chat/index.js +166 -2
- package/dist/Chat/index.js.map +1 -1
- package/dist/Chat/modelRouting.d.ts +8 -26
- package/dist/Chat/modelRouting.js +11 -106
- package/dist/Chat/modelRouting.js.map +1 -1
- package/dist/Chat/sogniHostedTools.generated.json +1285 -283
- package/dist/Chat/tools.d.ts +52 -3
- package/dist/Chat/tools.js +80 -27
- package/dist/Chat/tools.js.map +1 -1
- package/dist/Chat/types.d.ts +119 -3
- package/dist/CreativeWorkflows/index.d.ts +1 -7
- package/dist/CreativeWorkflows/index.js +23 -21
- package/dist/CreativeWorkflows/index.js.map +1 -1
- package/dist/CreativeWorkflows/types.d.ts +27 -33
- package/dist/index.d.ts +19 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/Cache.js +6 -1
- package/dist/lib/Cache.js.map +1 -1
- package/dist-esm/Account/CurrentAccount.js +59 -0
- package/dist-esm/Account/CurrentAccount.js.map +1 -0
- package/dist-esm/Account/index.js +543 -0
- package/dist-esm/Account/index.js.map +1 -0
- package/dist-esm/Account/types.js +2 -0
- package/dist-esm/Account/types.js.map +1 -0
- package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.js +327 -0
- package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.js.map +1 -0
- package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js +222 -0
- package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js.map +1 -0
- package/dist-esm/ApiClient/WebSocketClient/ErrorCode.js +15 -0
- package/dist-esm/ApiClient/WebSocketClient/ErrorCode.js.map +1 -0
- package/dist-esm/ApiClient/WebSocketClient/eventSubscriptions.js +35 -0
- package/dist-esm/ApiClient/WebSocketClient/eventSubscriptions.js.map +1 -0
- package/dist-esm/ApiClient/WebSocketClient/events.js +2 -0
- package/dist-esm/ApiClient/WebSocketClient/events.js.map +1 -0
- package/dist-esm/ApiClient/WebSocketClient/index.js +221 -0
- package/dist-esm/ApiClient/WebSocketClient/index.js.map +1 -0
- package/dist-esm/ApiClient/WebSocketClient/messages.js +2 -0
- package/dist-esm/ApiClient/WebSocketClient/messages.js.map +1 -0
- package/dist-esm/ApiClient/WebSocketClient/types.js +2 -0
- package/dist-esm/ApiClient/WebSocketClient/types.js.map +1 -0
- package/dist-esm/ApiClient/events.js +2 -0
- package/dist-esm/ApiClient/events.js.map +1 -0
- package/dist-esm/ApiClient/index.js +120 -0
- package/dist-esm/ApiClient/index.js.map +1 -0
- package/dist-esm/ApiGroup.js +10 -0
- package/dist-esm/ApiGroup.js.map +1 -0
- package/dist-esm/Chat/ChatStream.js +181 -0
- package/dist-esm/Chat/ChatStream.js.map +1 -0
- package/dist-esm/Chat/ChatTools.js +562 -0
- package/dist-esm/Chat/ChatTools.js.map +1 -0
- package/dist-esm/Chat/hostedToolValidation.generated.js +301 -0
- package/dist-esm/Chat/hostedToolValidation.generated.js.map +1 -0
- package/dist-esm/Chat/index.js +598 -0
- package/dist-esm/Chat/index.js.map +1 -0
- package/dist-esm/Chat/modelRouting.js +326 -0
- package/dist-esm/Chat/modelRouting.js.map +1 -0
- package/dist-esm/Chat/sogniHostedTools.generated.json +1531 -0
- package/dist-esm/Chat/tools.js +149 -0
- package/dist-esm/Chat/tools.js.map +1 -0
- package/dist-esm/Chat/types.js +2 -0
- package/dist-esm/Chat/types.js.map +1 -0
- package/dist-esm/CreativeWorkflows/index.js +256 -0
- package/dist-esm/CreativeWorkflows/index.js.map +1 -0
- package/dist-esm/CreativeWorkflows/types.js +2 -0
- package/dist-esm/CreativeWorkflows/types.js.map +1 -0
- package/dist-esm/Projects/Job.js +391 -0
- package/dist-esm/Projects/Job.js.map +1 -0
- package/dist-esm/Projects/Project.js +295 -0
- package/dist-esm/Projects/Project.js.map +1 -0
- package/dist-esm/Projects/createJobRequestMessage.js +528 -0
- package/dist-esm/Projects/createJobRequestMessage.js.map +1 -0
- package/dist-esm/Projects/index.js +1309 -0
- package/dist-esm/Projects/index.js.map +1 -0
- package/dist-esm/Projects/types/ComfySamplerParams.js +2 -0
- package/dist-esm/Projects/types/ComfySamplerParams.js.map +1 -0
- package/dist-esm/Projects/types/ControlNetParams.js +2 -0
- package/dist-esm/Projects/types/ControlNetParams.js.map +1 -0
- package/dist-esm/Projects/types/EstimationResponse.js +2 -0
- package/dist-esm/Projects/types/EstimationResponse.js.map +1 -0
- package/dist-esm/Projects/types/ModelOptions.js +89 -0
- package/dist-esm/Projects/types/ModelOptions.js.map +1 -0
- package/dist-esm/Projects/types/ModelTiersRaw.js +13 -0
- package/dist-esm/Projects/types/ModelTiersRaw.js.map +1 -0
- package/dist-esm/Projects/types/RawProject.js +2 -0
- package/dist-esm/Projects/types/RawProject.js.map +1 -0
- package/dist-esm/Projects/types/events.js +2 -0
- package/dist-esm/Projects/types/events.js.map +1 -0
- package/dist-esm/Projects/types/index.js +10 -0
- package/dist-esm/Projects/types/index.js.map +1 -0
- package/dist-esm/Projects/utils/index.js +229 -0
- package/dist-esm/Projects/utils/index.js.map +1 -0
- package/dist-esm/Projects/utils/samplers.js +36 -0
- package/dist-esm/Projects/utils/samplers.js.map +1 -0
- package/dist-esm/Projects/utils/scheduler.js +27 -0
- package/dist-esm/Projects/utils/scheduler.js.map +1 -0
- package/dist-esm/Stats/index.js +20 -0
- package/dist-esm/Stats/index.js.map +1 -0
- package/dist-esm/Stats/types.js +2 -0
- package/dist-esm/Stats/types.js.map +1 -0
- package/dist-esm/events.js +2 -0
- package/dist-esm/events.js.map +1 -0
- package/dist-esm/index.js +144 -0
- package/dist-esm/index.js.map +1 -0
- package/dist-esm/lib/AuthManager/ApiKeyAuthManager.js +58 -0
- package/dist-esm/lib/AuthManager/ApiKeyAuthManager.js.map +1 -0
- package/dist-esm/lib/AuthManager/AuthManagerBase.js +9 -0
- package/dist-esm/lib/AuthManager/AuthManagerBase.js.map +1 -0
- package/dist-esm/lib/AuthManager/CookieAuthManager.js +48 -0
- package/dist-esm/lib/AuthManager/CookieAuthManager.js.map +1 -0
- package/dist-esm/lib/AuthManager/TokenAuthManager.js +186 -0
- package/dist-esm/lib/AuthManager/TokenAuthManager.js.map +1 -0
- package/dist-esm/lib/AuthManager/index.js +5 -0
- package/dist-esm/lib/AuthManager/index.js.map +1 -0
- package/dist-esm/lib/Cache.js +32 -0
- package/dist-esm/lib/Cache.js.map +1 -0
- package/dist-esm/lib/DataEntity.js +30 -0
- package/dist-esm/lib/DataEntity.js.map +1 -0
- package/dist-esm/lib/DefaultLogger.js +32 -0
- package/dist-esm/lib/DefaultLogger.js.map +1 -0
- package/dist-esm/lib/EIP712Helper.js +37 -0
- package/dist-esm/lib/EIP712Helper.js.map +1 -0
- package/dist-esm/lib/RestClient.js +90 -0
- package/dist-esm/lib/RestClient.js.map +1 -0
- package/dist-esm/lib/TypedEventEmitter.js +68 -0
- package/dist-esm/lib/TypedEventEmitter.js.map +1 -0
- package/dist-esm/lib/base64.js +18 -0
- package/dist-esm/lib/base64.js.map +1 -0
- package/dist-esm/lib/getUUID.js +7 -0
- package/dist-esm/lib/getUUID.js.map +1 -0
- package/dist-esm/lib/isNodejs.js +3 -0
- package/dist-esm/lib/isNodejs.js.map +1 -0
- package/dist-esm/lib/mediaValidation.js +277 -0
- package/dist-esm/lib/mediaValidation.js.map +1 -0
- package/dist-esm/lib/utils/index.js +30 -0
- package/dist-esm/lib/utils/index.js.map +1 -0
- package/dist-esm/lib/validation.js +138 -0
- package/dist-esm/lib/validation.js.map +1 -0
- package/dist-esm/package.json +3 -0
- package/dist-esm/types/ErrorData.js +2 -0
- package/dist-esm/types/ErrorData.js.map +1 -0
- package/dist-esm/types/json.js +2 -0
- package/dist-esm/types/json.js.map +1 -0
- package/dist-esm/types/token.js +2 -0
- package/dist-esm/types/token.js.map +1 -0
- package/dist-esm/version.js +3 -0
- package/dist-esm/version.js.map +1 -0
- package/llms-full.txt +11 -20
- package/llms.txt +9 -18
- package/package.json +21 -5
- package/src/Chat/ChatTools.ts +36 -16
- package/src/Chat/hostedToolValidation.generated.ts +453 -0
- package/src/Chat/index.ts +198 -3
- package/src/Chat/modelRouting.ts +26 -150
- package/src/Chat/sogniHostedTools.generated.json +1285 -283
- package/src/Chat/tools.ts +106 -41
- package/src/Chat/types.ts +131 -3
- package/src/CreativeWorkflows/index.ts +22 -41
- package/src/CreativeWorkflows/types.ts +69 -42
- package/src/index.ts +33 -12
- package/src/lib/Cache.ts +8 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { ApiError } from '../ApiClient';
|
|
2
|
+
const EXTENDED_IMAGE_SIZE_MODEL_IDS = new Set([
|
|
3
|
+
'z_image_bf16',
|
|
4
|
+
'z_image_turbo_bf16',
|
|
5
|
+
'qwen_image_edit_2511_fp8',
|
|
6
|
+
'qwen_image_edit_2511_fp8_lightning',
|
|
7
|
+
'qwen_image_2512_fp8',
|
|
8
|
+
'qwen_image_2512_fp8_lightning',
|
|
9
|
+
'flux2_dev_fp8'
|
|
10
|
+
]);
|
|
11
|
+
function getMaxCustomImageSize(modelId) {
|
|
12
|
+
if (modelId === 'gpt-image-2') {
|
|
13
|
+
return 3840;
|
|
14
|
+
}
|
|
15
|
+
if (modelId && EXTENDED_IMAGE_SIZE_MODEL_IDS.has(modelId)) {
|
|
16
|
+
return 2560;
|
|
17
|
+
}
|
|
18
|
+
return 2048;
|
|
19
|
+
}
|
|
20
|
+
export function validateCustomImageSize(value, { modelId, propertyName = 'Width and height' } = {}) {
|
|
21
|
+
return validateNumber(value, {
|
|
22
|
+
min: 256,
|
|
23
|
+
max: getMaxCustomImageSize(modelId),
|
|
24
|
+
propertyName
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Validate video dimensions for Wan 2.2 models.
|
|
29
|
+
* Minimum dimension is 480px for both width and height.
|
|
30
|
+
*/
|
|
31
|
+
export function validateVideoSize(value, propertyName) {
|
|
32
|
+
return validateNumber(value, { min: 480, propertyName: `Video ${propertyName}` });
|
|
33
|
+
}
|
|
34
|
+
export function validateVideoDuration(value, min = 1, max = 10) {
|
|
35
|
+
return validateNumber(value, { min, max, propertyName: 'Video duration' });
|
|
36
|
+
}
|
|
37
|
+
export function validateNumber(value, { min, max, propertyName, defaultValue } = {}) {
|
|
38
|
+
const number = Number(value);
|
|
39
|
+
const hasDefaultValue = defaultValue !== undefined;
|
|
40
|
+
if (!propertyName) {
|
|
41
|
+
propertyName = 'Value';
|
|
42
|
+
}
|
|
43
|
+
if (isNaN(number)) {
|
|
44
|
+
if (hasDefaultValue) {
|
|
45
|
+
return defaultValue;
|
|
46
|
+
}
|
|
47
|
+
throw new Error(`${propertyName} must be a number, got ${value}`);
|
|
48
|
+
}
|
|
49
|
+
if (min !== undefined && number < min) {
|
|
50
|
+
if (hasDefaultValue) {
|
|
51
|
+
return defaultValue;
|
|
52
|
+
}
|
|
53
|
+
throw new Error(`${propertyName} must greater or equal ${min}, got ${number}`);
|
|
54
|
+
}
|
|
55
|
+
if (max !== undefined && number > max) {
|
|
56
|
+
if (hasDefaultValue) {
|
|
57
|
+
return defaultValue;
|
|
58
|
+
}
|
|
59
|
+
throw new Error(`${propertyName} must be less or equal ${max}, got ${number}`);
|
|
60
|
+
}
|
|
61
|
+
return number;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Validate teacacheThreshold for T2V and I2V models.
|
|
65
|
+
* Range: 0.0-1.0. 0.0 = disabled.
|
|
66
|
+
*/
|
|
67
|
+
export function validateTeacacheThreshold(value) {
|
|
68
|
+
if (value === undefined || value === null) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
const num = Number(value);
|
|
72
|
+
if (isNaN(num)) {
|
|
73
|
+
throw new Error(`teacacheThreshold must be a number, got ${value}`);
|
|
74
|
+
}
|
|
75
|
+
if (num < 0.0 || num > 1.0) {
|
|
76
|
+
throw new Error(`teacacheThreshold must be between 0.0 and 1.0 (got ${num})`);
|
|
77
|
+
}
|
|
78
|
+
return num;
|
|
79
|
+
}
|
|
80
|
+
export function isComfyModel(modelId) {
|
|
81
|
+
const COMFY_PREFIXES = ['z_image_', 'qwen_image_', 'flux2_', 'wan_', 'ace_step'];
|
|
82
|
+
return COMFY_PREFIXES.some((prefix) => modelId.startsWith(prefix));
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get the maximum number of context images supported by a model.
|
|
86
|
+
* - GPT Image 2: 16 images
|
|
87
|
+
* - Flux.2 Dev: 6 images
|
|
88
|
+
* - Qwen Image Edit: 3 images
|
|
89
|
+
* - Flux Kontext: 2 images
|
|
90
|
+
* - Default: 3 images
|
|
91
|
+
*/
|
|
92
|
+
export function getMaxContextImages(modelId) {
|
|
93
|
+
if (modelId === 'gpt-image-2') {
|
|
94
|
+
return 16;
|
|
95
|
+
}
|
|
96
|
+
if (modelId.startsWith('flux2_')) {
|
|
97
|
+
return 6;
|
|
98
|
+
}
|
|
99
|
+
if (modelId.startsWith('qwen_image_')) {
|
|
100
|
+
return 3;
|
|
101
|
+
}
|
|
102
|
+
if (modelId.includes('kontext')) {
|
|
103
|
+
return 2;
|
|
104
|
+
}
|
|
105
|
+
// Default fallback for other models that might support context images
|
|
106
|
+
return 3;
|
|
107
|
+
}
|
|
108
|
+
function validateOption(value, options, errorMessage) {
|
|
109
|
+
if (!options.includes(value)) {
|
|
110
|
+
throw new ApiError(400, {
|
|
111
|
+
status: 'error',
|
|
112
|
+
errorCode: 0,
|
|
113
|
+
message: errorMessage
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
return value;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Validate sampler value against allowed options.
|
|
120
|
+
* Returns the validated value unchanged - sogni-socket handles normalization.
|
|
121
|
+
*/
|
|
122
|
+
export function validateSampler(value, options) {
|
|
123
|
+
if (!options.sampler.allowed.length || !value) {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
return validateOption(value, options.sampler.allowed, `Invalid sampler ${value}. Must be one of "${options.sampler.allowed.join('", "')}".`);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Validate scheduler value against allowed options.
|
|
130
|
+
* Returns the validated value unchanged - sogni-socket handles normalization.
|
|
131
|
+
*/
|
|
132
|
+
export function validateScheduler(value, options) {
|
|
133
|
+
if (!options.scheduler.allowed.length || !value) {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
return validateOption(value, options.scheduler.allowed, `Invalid scheduler ${value}. Must be one of "${options.scheduler.allowed.join('", "')}".`);
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGxC,MAAM,6BAA6B,GAAG,IAAI,GAAG,CAAC;IAC5C,cAAc;IACd,oBAAoB;IACpB,0BAA0B;IAC1B,oCAAoC;IACpC,qBAAqB;IACrB,+BAA+B;IAC/B,eAAe;CAChB,CAAC,CAAC;AAOH,SAAS,qBAAqB,CAAC,OAAgB;IAC7C,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,IAAI,6BAA6B,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,KAAU,EACV,EAAE,OAAO,EAAE,YAAY,GAAG,kBAAkB,KAAiC,EAAE;IAE/E,OAAO,cAAc,CAAC,KAAK,EAAE;QAC3B,GAAG,EAAE,GAAG;QACR,GAAG,EAAE,qBAAqB,CAAC,OAAO,CAAC;QACnC,YAAY;KACb,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAU,EAAE,YAAgC;IAC5E,OAAO,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,SAAS,YAAY,EAAE,EAAE,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAU,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE;IACjE,OAAO,cAAc,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAC7E,CAAC;AASD,MAAM,UAAU,cAAc,CAC5B,KAAU,EACV,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,YAAY,KAA8B,EAAE;IAEtE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,eAAe,GAAG,YAAY,KAAK,SAAS,CAAC;IACnD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,YAAY,GAAG,OAAO,CAAC;IACzB,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAClB,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,YAAY,0BAA0B,KAAK,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACtC,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,YAAY,0BAA0B,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QACtC,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,YAAY,0BAA0B,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,2CAA2C,KAAK,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,sDAAsD,GAAG,GAAG,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACjF,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,sEAAsE;IACtE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,cAAc,CAAc,KAAQ,EAAE,OAAY,EAAE,YAAoB;IAC/E,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE;YACtB,MAAM,EAAE,OAAO;YACf,SAAS,EAAE,CAAC;YACZ,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAyB,EAAE,OAAqB;IAC9E,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,cAAc,CACnB,KAAK,EACL,OAAO,CAAC,OAAO,CAAC,OAAO,EACvB,mBAAmB,KAAK,qBAAqB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CACtF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAyB,EAAE,OAAqB;IAChF,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,cAAc,CACnB,KAAK,EACL,OAAO,CAAC,SAAS,CAAC,OAAO,EACzB,qBAAqB,KAAK,qBAAqB,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAC1F,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorData.js","sourceRoot":"","sources":["../../src/types/ErrorData.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/types/json.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/types/token.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC"}
|
package/llms-full.txt
CHANGED
|
@@ -934,17 +934,8 @@ Sogni's generation APIs automatically:
|
|
|
934
934
|
- Video-to-Video: "Restyle this video as anime"
|
|
935
935
|
- Music Generation: "Compose a jazz song about the rain"
|
|
936
936
|
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
- `sogni_generate_image`
|
|
940
|
-
- `sogni_edit_image`
|
|
941
|
-
- `sogni_generate_video`
|
|
942
|
-
- `sogni_sound_to_video`
|
|
943
|
-
- `sogni_video_to_video`
|
|
944
|
-
- `sogni_generate_music`
|
|
945
|
-
|
|
946
|
-
HOSTED CREATIVE TOOL FAMILIES:
|
|
947
|
-
The Sogni API can also inject hosted Sogni tool families into the same chat completions endpoint. The default `creative-tools` surface provides media, post-production, analysis, metadata, and synchronous composition tools; `sogni_tools: "creative-agent"` adds workflow control and asset-manifest tools:
|
|
937
|
+
CANONICAL HOSTED CREATIVE-TOOL SURFACE (`SogniTools.all`, 22 tools):
|
|
938
|
+
All tool calls execute server-side via `sogni.chat.hosted.create()` / `sogni.chat.runs.create()`. The default `creative-tools` value of `sogni_tools` injects this surface server-side; `sogni_tools: "creative-agent"` adds workflow control and asset-manifest tools on top.
|
|
948
939
|
|
|
949
940
|
- `generate_image`, `edit_image`, `generate_video`, `generate_music`, `sound_to_video`, `video_to_video` — core media-generation tools with creative-agent naming.
|
|
950
941
|
- `restore_photo`, `apply_style`, `refine_result`, `change_angle` — image-edit adapters backed by the shared image-edit workflow.
|
|
@@ -974,15 +965,15 @@ MEDIA-CONDITIONED TOOL INPUTS:
|
|
|
974
965
|
- `reference_video_url`
|
|
975
966
|
All media-conditioned tool inputs must be inline base64-encoded `data:` URIs. Remote `http(s)` URLs are not allowed. Tool image inputs accept PNG/JPEG only, tool audio inputs accept MP3/M4A/WAV only, and tool video inputs accept MP4 or MOV/QuickTime only.
|
|
976
967
|
|
|
977
|
-
DEFAULT GENERATION MODELS (used by
|
|
968
|
+
DEFAULT GENERATION MODELS (used by the canonical generation tools):
|
|
978
969
|
| Tool | Model ID | Description |
|
|
979
970
|
|------|----------|-------------|
|
|
980
|
-
| `
|
|
981
|
-
| `
|
|
982
|
-
| `
|
|
983
|
-
| `
|
|
984
|
-
| `
|
|
985
|
-
| `
|
|
971
|
+
| `generate_image` | z_image_turbo_bf16 | Z-Image Turbo, ultra-fast 8-step generation |
|
|
972
|
+
| `edit_image` | workflow/model-dependent | Reference-guided image editing with edit-capable Qwen/Flux models |
|
|
973
|
+
| `generate_video` | ltx23-22b-fp8_t2v_distilled / ltx23-22b-fp8_i2v_distilled / Seedance selectors | Text-to-video or image-to-video |
|
|
974
|
+
| `sound_to_video` | ltx23-22b-fp8_a2v_distilled / ltx23-22b-fp8_ia2v_distilled | Audio-driven video generation |
|
|
975
|
+
| `video_to_video` | ltx23-22b-fp8_v2v_distilled / seedance-2-0 / WAN animate models | Video transformation / motion transfer |
|
|
976
|
+
| `generate_music` | ace_step_1.5_turbo | ACE-Step 1.5 Turbo, fast music generation |
|
|
986
977
|
|
|
987
978
|
PLATFORM TOOL WORKFLOW:
|
|
988
979
|
|
|
@@ -996,8 +987,8 @@ PLATFORM TOOL WORKFLOW:
|
|
|
996
987
|
See `workflow_text_chat_sogni_tools.mjs` for a composition-pipeline example
|
|
997
988
|
covering the core image/video/music flows. See `workflow_creative_agent_tools.mjs`
|
|
998
989
|
for server-side hosted Sogni tool injection with `sogni_tools`.
|
|
999
|
-
|
|
1000
|
-
`sogni.chat.
|
|
990
|
+
Pass `SogniTools.all` (or individual tool defs) to the LLM via `tools` and
|
|
991
|
+
execute calls through `sogni.chat.hosted.create()` / `sogni.chat.runs.create()`.
|
|
1001
992
|
|
|
1002
993
|
DURABLE CREATIVE WORKFLOWS:
|
|
1003
994
|
Use `sogni.creativeWorkflows` for `/v1/creative-agent/workflows` coverage:
|
package/llms.txt
CHANGED
|
@@ -456,18 +456,9 @@ Combine LLM tool calling with Sogni's generation APIs to create media from natur
|
|
|
456
456
|
- **Video-to-Video** — "Restyle this video as anime"
|
|
457
457
|
- **Music Generation** — "Compose a jazz song about the rain"
|
|
458
458
|
|
|
459
|
-
|
|
459
|
+
Canonical hosted creative-tool surface (`SogniTools.all`, 22 tools, executed server-side via `chat.hosted.create()` / `chat.runs.create()`):
|
|
460
460
|
|
|
461
|
-
- `
|
|
462
|
-
- `sogni_edit_image`
|
|
463
|
-
- `sogni_generate_video`
|
|
464
|
-
- `sogni_sound_to_video`
|
|
465
|
-
- `sogni_video_to_video`
|
|
466
|
-
- `sogni_generate_music`
|
|
467
|
-
|
|
468
|
-
Hosted creative tool families:
|
|
469
|
-
|
|
470
|
-
- `generate_image`, `edit_image`, `generate_video`, `generate_music`, `sound_to_video`, `video_to_video`
|
|
461
|
+
- `generate_image`, `edit_image`, `generate_video`, `generate_music`, `sound_to_video`, `video_to_video` (generation)
|
|
471
462
|
- `restore_photo`, `apply_style`, `refine_result`, `change_angle` (image-edit adapters)
|
|
472
463
|
- `animate_photo` (image-to-video with multi-source fan-out via `sourceImageIndices`; composed into one MP4 by default — opt out with `stitched: false`)
|
|
473
464
|
- `stitch_video`, `orbit_video`, `dance_montage` (server-side composition into a single MP4)
|
|
@@ -481,19 +472,19 @@ The default `creative-tools` surface includes the tools above. `sogni_tools: "cr
|
|
|
481
472
|
|
|
482
473
|
Media-conditioned tools accept explicit inline base64 `data:` URIs such as `source_image_url`, `reference_image_url`, `reference_audio_url`, and `reference_video_url`. Remote `http(s)` URLs are not allowed for these tool inputs. Tool image inputs accept PNG/JPEG only, tool audio inputs accept MP3/M4A/WAV only, and tool video inputs accept MP4 or MOV/QuickTime only.
|
|
483
474
|
|
|
484
|
-
The `workflow_text_chat_sogni_tools.mjs` example demonstrates the core image/video/music composition flows. `workflow_creative_agent_tools.mjs` demonstrates server-side hosted Sogni tool injection through `/v1/chat/completions`.
|
|
475
|
+
The `workflow_text_chat_sogni_tools.mjs` example demonstrates the core image/video/music composition flows. `workflow_creative_agent_tools.mjs` demonstrates server-side hosted Sogni tool injection through `/v1/chat/completions`. Pass `SogniTools.all` (or individual tool defs) to the LLM and execute calls through `sogni.chat.hosted.create()` / `sogni.chat.runs.create()`.
|
|
485
476
|
|
|
486
477
|
Durable creative workflows: the SDK exposes persistent multi-step workflows through `sogni.creativeWorkflows` (`startImageToVideo`, `list`, `get`, `events`, `streamEvents`, `cancel`) backed by `/v1/creative-agent/workflows`. They require API-key auth. See `workflow_creative_agent_workflows.mjs` for start/list/get/events/stream/cancel coverage.
|
|
487
478
|
|
|
488
479
|
Default generation models used by platform tools:
|
|
489
480
|
| Tool | Model | Description |
|
|
490
481
|
|------|-------|-------------|
|
|
491
|
-
| `
|
|
492
|
-
| `
|
|
493
|
-
| `
|
|
494
|
-
| `
|
|
495
|
-
| `
|
|
496
|
-
| `
|
|
482
|
+
| `generate_image` | z_image_turbo_bf16 | Z-Image Turbo, ultra-fast 8-step |
|
|
483
|
+
| `edit_image` | workflow/model-dependent | Reference-guided image editing with edit-capable Qwen/Flux models |
|
|
484
|
+
| `generate_video` | ltx23-22b-fp8_t2v_distilled / ltx23-22b-fp8_i2v_distilled / Seedance selectors | Text-to-video or image-to-video |
|
|
485
|
+
| `sound_to_video` | ltx23-22b-fp8_a2v_distilled / ltx23-22b-fp8_ia2v_distilled | Audio-driven video generation |
|
|
486
|
+
| `video_to_video` | ltx23-22b-fp8_v2v_distilled / seedance-2-0 / WAN animate models | Video transformation / motion transfer |
|
|
487
|
+
| `generate_music` | ace_step_1.5_turbo | ACE-Step 1.5 Turbo, fast music |
|
|
497
488
|
|
|
498
489
|
---
|
|
499
490
|
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "4.2.0-alpha.
|
|
6
|
+
"version": "4.2.0-alpha.22",
|
|
7
7
|
"engines": {
|
|
8
8
|
"node": ">=22"
|
|
9
9
|
},
|
|
@@ -31,7 +31,18 @@
|
|
|
31
31
|
"llm-friendly"
|
|
32
32
|
],
|
|
33
33
|
"main": "dist/index.js",
|
|
34
|
+
"module": "dist-esm/index.js",
|
|
34
35
|
"types": "dist/index.d.ts",
|
|
36
|
+
"exports": {
|
|
37
|
+
".": {
|
|
38
|
+
"types": "./dist/index.d.ts",
|
|
39
|
+
"import": "./dist-esm/index.js",
|
|
40
|
+
"require": "./dist/index.js",
|
|
41
|
+
"default": "./dist/index.js"
|
|
42
|
+
},
|
|
43
|
+
"./package.json": "./package.json"
|
|
44
|
+
},
|
|
45
|
+
"sideEffects": false,
|
|
35
46
|
"files": [
|
|
36
47
|
"CHANGELOG.md",
|
|
37
48
|
"README.md",
|
|
@@ -39,15 +50,20 @@
|
|
|
39
50
|
"llms.txt",
|
|
40
51
|
"llms-full.txt",
|
|
41
52
|
"dist/",
|
|
53
|
+
"dist-esm/",
|
|
42
54
|
"src/"
|
|
43
55
|
],
|
|
44
56
|
"scripts": {
|
|
45
|
-
"clean": "rimraf ./dist",
|
|
57
|
+
"clean": "rimraf ./dist ./dist-esm",
|
|
46
58
|
"prepublishOnly": "npm run build",
|
|
47
|
-
"build": "npm run clean && tsc --project tsconfig.json",
|
|
48
|
-
"test:chat-routing": "npm run build && node scripts/check-chat-model-routing.cjs",
|
|
59
|
+
"build": "npm run clean && tsc --project tsconfig.json && tsc --project tsconfig.esm.json && node scripts/write-dist-esm-package-json.mjs",
|
|
60
|
+
"test:chat-routing": "npm run check:hosted-tool-validation && npm run build && node scripts/check-chat-model-routing.cjs",
|
|
61
|
+
"sync:hosted-tool-validation": "node scripts/sync-hosted-tool-validation.mjs",
|
|
62
|
+
"check:hosted-tool-validation": "node scripts/sync-hosted-tool-validation.mjs --check",
|
|
63
|
+
"sync:hosted-tools-manifest": "node scripts/sync-hosted-tools-manifest.mjs",
|
|
64
|
+
"check:hosted-tools-manifest": "node scripts/sync-hosted-tools-manifest.mjs --check",
|
|
49
65
|
"watch": "npm run clean && tsc --watch --project tsconfig.json",
|
|
50
|
-
"watch:esm": "
|
|
66
|
+
"watch:esm": "tsc --watch --project tsconfig.esm.json",
|
|
51
67
|
"prettier": "prettier --check ./src",
|
|
52
68
|
"prettier:fix": "prettier --write ./src",
|
|
53
69
|
"release": "semantic-release",
|
package/src/Chat/ChatTools.ts
CHANGED
|
@@ -31,6 +31,19 @@ import {
|
|
|
31
31
|
const DEFAULT_TIMEOUT = 30 * 60 * 1000;
|
|
32
32
|
const MAX_SOGNI_TOOL_CALLS_PER_ROUND = 8;
|
|
33
33
|
|
|
34
|
+
const DIRECT_PROJECT_DISPATCH_TOOL_NAMES: ReadonlySet<string> = new Set([
|
|
35
|
+
'generate_image',
|
|
36
|
+
'edit_image',
|
|
37
|
+
'generate_video',
|
|
38
|
+
'sound_to_video',
|
|
39
|
+
'video_to_video',
|
|
40
|
+
'generate_music'
|
|
41
|
+
]);
|
|
42
|
+
|
|
43
|
+
function hasDirectProjectDispatch(toolCall: ToolCall): boolean {
|
|
44
|
+
return DIRECT_PROJECT_DISPATCH_TOOL_NAMES.has(toolCall.function.name);
|
|
45
|
+
}
|
|
46
|
+
|
|
34
47
|
const MAX_INPUT_MEDIA_BYTES: Record<MediaType, number> = {
|
|
35
48
|
image: 20 * 1024 * 1024,
|
|
36
49
|
audio: 50 * 1024 * 1024,
|
|
@@ -87,21 +100,28 @@ class ChatToolsApi {
|
|
|
87
100
|
const args = parseToolCallArguments(toolCall);
|
|
88
101
|
const name = toolCall.function.name;
|
|
89
102
|
|
|
103
|
+
if (!hasDirectProjectDispatch(toolCall)) {
|
|
104
|
+
return this.makeErrorResult(
|
|
105
|
+
toolCall,
|
|
106
|
+
`Tool '${name}' must be executed via chat.hosted.create() or chat.runs.create().`
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
|
|
90
110
|
try {
|
|
91
111
|
assertHostedToolArguments(SogniTools.all, name, args);
|
|
92
112
|
|
|
93
113
|
switch (name) {
|
|
94
|
-
case '
|
|
114
|
+
case 'generate_image':
|
|
95
115
|
return await this.executeImageGeneration(toolCall, args, options);
|
|
96
|
-
case '
|
|
116
|
+
case 'edit_image':
|
|
97
117
|
return await this.executeImageEdit(toolCall, args, options);
|
|
98
|
-
case '
|
|
118
|
+
case 'generate_video':
|
|
99
119
|
return await this.executeVideoGeneration(toolCall, args, options);
|
|
100
|
-
case '
|
|
120
|
+
case 'sound_to_video':
|
|
101
121
|
return await this.executeSoundToVideo(toolCall, args, options);
|
|
102
|
-
case '
|
|
122
|
+
case 'video_to_video':
|
|
103
123
|
return await this.executeVideoToVideo(toolCall, args, options);
|
|
104
|
-
case '
|
|
124
|
+
case 'generate_music':
|
|
105
125
|
return await this.executeMusicGeneration(toolCall, args, options);
|
|
106
126
|
default:
|
|
107
127
|
return this.makeErrorResult(toolCall, `Unknown Sogni tool: ${name}`);
|
|
@@ -119,7 +139,7 @@ class ChatToolsApi {
|
|
|
119
139
|
onToolProgress?: (toolCall: ToolCall, progress: ToolExecutionProgress) => void;
|
|
120
140
|
}
|
|
121
141
|
): Promise<ToolExecutionResult[]> {
|
|
122
|
-
const sogniToolCallCount = toolCalls.filter(
|
|
142
|
+
const sogniToolCallCount = toolCalls.filter(hasDirectProjectDispatch).length;
|
|
123
143
|
if (sogniToolCallCount > MAX_SOGNI_TOOL_CALLS_PER_ROUND) {
|
|
124
144
|
throw new Error(
|
|
125
145
|
`Too many Sogni tool calls in a single round (${sogniToolCallCount}); maximum is ${MAX_SOGNI_TOOL_CALLS_PER_ROUND}`
|
|
@@ -276,7 +296,7 @@ class ChatToolsApi {
|
|
|
276
296
|
): Promise<ToolExecutionResult> {
|
|
277
297
|
const modelId = await this.selectModel({
|
|
278
298
|
mediaType: 'image',
|
|
279
|
-
requestedModel: resolveHostedToolModelSelector('
|
|
299
|
+
requestedModel: resolveHostedToolModelSelector('generate_image', args)
|
|
280
300
|
});
|
|
281
301
|
|
|
282
302
|
const projectParams: Record<string, unknown> = {
|
|
@@ -318,12 +338,12 @@ class ChatToolsApi {
|
|
|
318
338
|
const inputUrls = [...(sourceImageUrl ? [sourceImageUrl] : []), ...referenceImageUrls];
|
|
319
339
|
|
|
320
340
|
if (inputUrls.length === 0) {
|
|
321
|
-
throw new Error('
|
|
341
|
+
throw new Error('edit_image requires source_image_url or reference_image_urls');
|
|
322
342
|
}
|
|
323
343
|
|
|
324
344
|
const modelId = await this.selectModel({
|
|
325
345
|
mediaType: 'image',
|
|
326
|
-
requestedModel: resolveHostedToolModelSelector('
|
|
346
|
+
requestedModel: resolveHostedToolModelSelector('edit_image', args),
|
|
327
347
|
filter: isEditImageModel
|
|
328
348
|
});
|
|
329
349
|
const maxContextImages = getMaxContextImages(modelId);
|
|
@@ -379,7 +399,7 @@ class ChatToolsApi {
|
|
|
379
399
|
|
|
380
400
|
const modelId = await this.selectModel({
|
|
381
401
|
mediaType: 'video',
|
|
382
|
-
requestedModel: resolveHostedToolModelSelector('
|
|
402
|
+
requestedModel: resolveHostedToolModelSelector('generate_video', args),
|
|
383
403
|
workflows: workflowPreference,
|
|
384
404
|
preferredModelIds
|
|
385
405
|
});
|
|
@@ -455,7 +475,7 @@ class ChatToolsApi {
|
|
|
455
475
|
options?: ToolExecutionOptions
|
|
456
476
|
): Promise<ToolExecutionResult> {
|
|
457
477
|
if (!isNonEmptyString(args.reference_audio_url)) {
|
|
458
|
-
throw new Error('
|
|
478
|
+
throw new Error('sound_to_video requires reference_audio_url');
|
|
459
479
|
}
|
|
460
480
|
|
|
461
481
|
const hasReferenceImage = isNonEmptyString(args.reference_image_url);
|
|
@@ -465,7 +485,7 @@ class ChatToolsApi {
|
|
|
465
485
|
: [PREFERRED_MODEL_IDS.video.a2v];
|
|
466
486
|
const modelId = await this.selectModel({
|
|
467
487
|
mediaType: 'video',
|
|
468
|
-
requestedModel: resolveHostedToolModelSelector('
|
|
488
|
+
requestedModel: resolveHostedToolModelSelector('sound_to_video', args),
|
|
469
489
|
workflows,
|
|
470
490
|
preferredModelIds
|
|
471
491
|
});
|
|
@@ -516,7 +536,7 @@ class ChatToolsApi {
|
|
|
516
536
|
options?: ToolExecutionOptions
|
|
517
537
|
): Promise<ToolExecutionResult> {
|
|
518
538
|
if (!isNonEmptyString(args.reference_video_url)) {
|
|
519
|
-
throw new Error('
|
|
539
|
+
throw new Error('video_to_video requires reference_video_url');
|
|
520
540
|
}
|
|
521
541
|
|
|
522
542
|
const controlMode = normalizeVideoControlMode(args.control_mode);
|
|
@@ -534,7 +554,7 @@ class ChatToolsApi {
|
|
|
534
554
|
: [PREFERRED_MODEL_IDS.video.v2v];
|
|
535
555
|
const modelId = await this.selectModel({
|
|
536
556
|
mediaType: 'video',
|
|
537
|
-
requestedModel: resolveHostedToolModelSelector('
|
|
557
|
+
requestedModel: resolveHostedToolModelSelector('video_to_video', args),
|
|
538
558
|
workflows,
|
|
539
559
|
preferredModelIds
|
|
540
560
|
});
|
|
@@ -615,7 +635,7 @@ class ChatToolsApi {
|
|
|
615
635
|
): Promise<ToolExecutionResult> {
|
|
616
636
|
const modelId = await this.selectModel({
|
|
617
637
|
mediaType: 'audio',
|
|
618
|
-
requestedModel: resolveHostedToolModelSelector('
|
|
638
|
+
requestedModel: resolveHostedToolModelSelector('generate_music', args),
|
|
619
639
|
preferredModelIds: [
|
|
620
640
|
PREFERRED_MODEL_IDS.audio.aceStepTurbo,
|
|
621
641
|
PREFERRED_MODEL_IDS.audio.aceStepSft
|