@sogni-ai/sogni-client 4.2.0-alpha.2 → 4.2.0-alpha.21
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 +148 -0
- package/CLAUDE.md +25 -3
- package/README.md +411 -136
- package/dist/Account/index.d.ts +4 -2
- package/dist/Account/index.js +27 -23
- package/dist/Account/index.js.map +1 -1
- package/dist/Account/types.d.ts +7 -0
- package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/index.d.ts +3 -1
- package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js +26 -2
- package/dist/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js.map +1 -1
- package/dist/ApiClient/WebSocketClient/eventSubscriptions.d.ts +33 -0
- package/dist/ApiClient/WebSocketClient/eventSubscriptions.js +39 -0
- package/dist/ApiClient/WebSocketClient/eventSubscriptions.js.map +1 -0
- package/dist/ApiClient/WebSocketClient/events.d.ts +24 -7
- package/dist/ApiClient/WebSocketClient/index.d.ts +5 -1
- package/dist/ApiClient/WebSocketClient/index.js +24 -1
- package/dist/ApiClient/WebSocketClient/index.js.map +1 -1
- package/dist/ApiClient/WebSocketClient/messages.d.ts +2 -0
- package/dist/ApiClient/WebSocketClient/types.d.ts +2 -0
- package/dist/ApiClient/index.d.ts +6 -1
- package/dist/ApiClient/index.js +7 -3
- package/dist/ApiClient/index.js.map +1 -1
- package/dist/Chat/ChatTools.d.ts +5 -49
- package/dist/Chat/ChatTools.js +311 -88
- package/dist/Chat/ChatTools.js.map +1 -1
- package/dist/Chat/index.d.ts +11 -2
- package/dist/Chat/index.js +78 -4
- package/dist/Chat/index.js.map +1 -1
- package/dist/Chat/modelRouting.d.ts +100 -0
- package/dist/Chat/modelRouting.js +441 -0
- package/dist/Chat/modelRouting.js.map +1 -0
- package/dist/Chat/sogniHostedTools.generated.json +529 -0
- package/dist/Chat/tools.d.ts +9 -55
- package/dist/Chat/tools.js +72 -228
- package/dist/Chat/tools.js.map +1 -1
- package/dist/Chat/types.d.ts +91 -2
- package/dist/CreativeWorkflows/index.d.ts +23 -0
- package/dist/CreativeWorkflows/index.js +274 -0
- package/dist/CreativeWorkflows/index.js.map +1 -0
- package/dist/CreativeWorkflows/types.d.ts +106 -0
- package/dist/CreativeWorkflows/types.js +3 -0
- package/dist/CreativeWorkflows/types.js.map +1 -0
- package/dist/Projects/Job.d.ts +6 -0
- package/dist/Projects/Job.js +60 -5
- package/dist/Projects/Job.js.map +1 -1
- package/dist/Projects/Project.js +15 -3
- package/dist/Projects/Project.js.map +1 -1
- package/dist/Projects/createJobRequestMessage.js +140 -6
- package/dist/Projects/createJobRequestMessage.js.map +1 -1
- package/dist/Projects/index.d.ts +10 -1
- package/dist/Projects/index.js +197 -58
- package/dist/Projects/index.js.map +1 -1
- package/dist/Projects/types/ModelOptions.d.ts +3 -3
- package/dist/Projects/types/ModelOptions.js +12 -5
- package/dist/Projects/types/ModelOptions.js.map +1 -1
- package/dist/Projects/types/ModelTiersRaw.d.ts +7 -7
- package/dist/Projects/types/RawProject.d.ts +2 -0
- package/dist/Projects/types/events.d.ts +5 -4
- package/dist/Projects/types/index.d.ts +77 -7
- package/dist/Projects/types/index.js.map +1 -1
- package/dist/Projects/utils/index.d.ts +8 -1
- package/dist/Projects/utils/index.js +22 -8
- package/dist/Projects/utils/index.js.map +1 -1
- package/dist/index.d.ts +28 -3
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/RestClient.d.ts +4 -1
- package/dist/lib/RestClient.js +17 -9
- package/dist/lib/RestClient.js.map +1 -1
- package/dist/lib/mediaValidation.d.ts +16 -0
- package/dist/lib/mediaValidation.js +280 -0
- package/dist/lib/mediaValidation.js.map +1 -0
- package/dist/lib/validation.d.ts +6 -1
- package/dist/lib/validation.js +28 -2
- package/dist/lib/validation.js.map +1 -1
- package/llms-full.txt +372 -133
- package/llms.txt +197 -86
- package/package.json +13 -4
- package/src/Account/index.ts +22 -2
- package/src/Account/types.ts +7 -0
- package/src/ApiClient/WebSocketClient/BrowserWebSocketClient/index.ts +47 -3
- package/src/ApiClient/WebSocketClient/eventSubscriptions.ts +92 -0
- package/src/ApiClient/WebSocketClient/events.ts +25 -7
- package/src/ApiClient/WebSocketClient/index.ts +33 -1
- package/src/ApiClient/WebSocketClient/messages.ts +2 -0
- package/src/ApiClient/WebSocketClient/types.ts +2 -0
- package/src/ApiClient/index.ts +32 -2
- package/src/Chat/ChatTools.ts +395 -95
- package/src/Chat/index.ts +149 -5
- package/src/Chat/modelRouting.ts +602 -0
- package/src/Chat/sogniHostedTools.generated.json +529 -0
- package/src/Chat/tools.ts +98 -245
- package/src/Chat/types.ts +100 -2
- package/src/CreativeWorkflows/index.ts +290 -0
- package/src/CreativeWorkflows/types.ts +134 -0
- package/src/Projects/Job.ts +76 -5
- package/src/Projects/Project.ts +13 -3
- package/src/Projects/createJobRequestMessage.ts +152 -13
- package/src/Projects/index.ts +230 -52
- package/src/Projects/types/ModelOptions.ts +15 -8
- package/src/Projects/types/ModelTiersRaw.ts +7 -7
- package/src/Projects/types/RawProject.ts +2 -0
- package/src/Projects/types/events.ts +5 -4
- package/src/Projects/types/index.ts +86 -6
- package/src/Projects/utils/index.ts +24 -8
- package/src/index.ts +93 -0
- package/src/lib/RestClient.ts +15 -5
- package/src/lib/mediaValidation.ts +367 -0
- package/src/lib/validation.ts +38 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RestClient.js","sourceRoot":"","sources":["../../src/lib/RestClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RestClient.js","sourceRoot":"","sources":["../../src/lib/RestClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type MediaType = 'image' | 'audio' | 'video';
|
|
2
|
+
export interface ImageDimensions {
|
|
3
|
+
width: number;
|
|
4
|
+
height: number;
|
|
5
|
+
}
|
|
6
|
+
export interface InlineMediaValidationOptions {
|
|
7
|
+
maxBytes?: number;
|
|
8
|
+
maxImageLongestSide?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface ParsedInlineMediaData {
|
|
11
|
+
mimeType: string;
|
|
12
|
+
blob: Blob;
|
|
13
|
+
byteLength: number;
|
|
14
|
+
imageDimensions?: ImageDimensions;
|
|
15
|
+
}
|
|
16
|
+
export declare function parseInlineMediaDataUri(input: string, mediaType: MediaType, options?: InlineMediaValidationOptions): ParsedInlineMediaData;
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseInlineMediaDataUri = parseInlineMediaDataUri;
|
|
4
|
+
const BASE64_BODY_PATTERN = /^[A-Za-z0-9+/]*={0,2}$/;
|
|
5
|
+
const IMAGE_MIME_FORMATS = {
|
|
6
|
+
'image/jpeg': 'jpeg',
|
|
7
|
+
'image/jpg': 'jpeg',
|
|
8
|
+
'image/png': 'png'
|
|
9
|
+
};
|
|
10
|
+
const AUDIO_MIME_FORMATS = {
|
|
11
|
+
'audio/m4a': 'mp4',
|
|
12
|
+
'audio/mp3': 'mpeg',
|
|
13
|
+
'audio/mp4': 'mp4',
|
|
14
|
+
'audio/mpeg': 'mpeg',
|
|
15
|
+
'audio/wav': 'wav',
|
|
16
|
+
'audio/wave': 'wav',
|
|
17
|
+
'audio/x-m4a': 'mp4',
|
|
18
|
+
'audio/x-wav': 'wav'
|
|
19
|
+
};
|
|
20
|
+
const VIDEO_MIME_FORMATS = {
|
|
21
|
+
'video/mp4': 'mp4',
|
|
22
|
+
'video/quicktime': 'quicktime'
|
|
23
|
+
};
|
|
24
|
+
function getAllowedMimeTypes(mediaType) {
|
|
25
|
+
switch (mediaType) {
|
|
26
|
+
case 'image':
|
|
27
|
+
return Object.keys(IMAGE_MIME_FORMATS);
|
|
28
|
+
case 'audio':
|
|
29
|
+
return Object.keys(AUDIO_MIME_FORMATS);
|
|
30
|
+
case 'video':
|
|
31
|
+
return Object.keys(VIDEO_MIME_FORMATS);
|
|
32
|
+
default:
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function ascii(bytes, start, length) {
|
|
37
|
+
if (start + length > bytes.length) {
|
|
38
|
+
return '';
|
|
39
|
+
}
|
|
40
|
+
return String.fromCharCode(...bytes.slice(start, start + length));
|
|
41
|
+
}
|
|
42
|
+
function hasPrefix(bytes, prefix, offset = 0) {
|
|
43
|
+
if (offset + prefix.length > bytes.length) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
return prefix.every((value, index) => bytes[offset + index] === value);
|
|
47
|
+
}
|
|
48
|
+
function addBase64Padding(base64) {
|
|
49
|
+
const remainder = base64.length % 4;
|
|
50
|
+
if (remainder === 0)
|
|
51
|
+
return base64;
|
|
52
|
+
if (remainder === 1) {
|
|
53
|
+
throw new Error('Invalid base64 payload');
|
|
54
|
+
}
|
|
55
|
+
return base64.padEnd(base64.length + (4 - remainder), '=');
|
|
56
|
+
}
|
|
57
|
+
function encodeBase64(bytes) {
|
|
58
|
+
if (typeof Buffer !== 'undefined') {
|
|
59
|
+
return Buffer.from(bytes).toString('base64');
|
|
60
|
+
}
|
|
61
|
+
let binary = '';
|
|
62
|
+
for (const byte of bytes) {
|
|
63
|
+
binary += String.fromCharCode(byte);
|
|
64
|
+
}
|
|
65
|
+
if (typeof btoa === 'function') {
|
|
66
|
+
return btoa(binary);
|
|
67
|
+
}
|
|
68
|
+
throw new Error('No base64 encoder available in this environment');
|
|
69
|
+
}
|
|
70
|
+
function decodeStrictBase64(base64) {
|
|
71
|
+
const sanitized = base64.replace(/\s+/g, '');
|
|
72
|
+
if (!BASE64_BODY_PATTERN.test(sanitized)) {
|
|
73
|
+
throw new Error('Invalid base64 payload');
|
|
74
|
+
}
|
|
75
|
+
const padded = addBase64Padding(sanitized);
|
|
76
|
+
let bytes;
|
|
77
|
+
if (typeof Buffer !== 'undefined') {
|
|
78
|
+
bytes = Uint8Array.from(Buffer.from(padded, 'base64'));
|
|
79
|
+
}
|
|
80
|
+
else if (typeof atob === 'function') {
|
|
81
|
+
const binaryString = atob(padded);
|
|
82
|
+
bytes = new Uint8Array(binaryString.length);
|
|
83
|
+
for (let i = 0; i < binaryString.length; i++) {
|
|
84
|
+
bytes[i] = binaryString.charCodeAt(i);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
throw new Error('No base64 decoder available in this environment');
|
|
89
|
+
}
|
|
90
|
+
if (bytes.length === 0) {
|
|
91
|
+
throw new Error('Invalid base64 payload');
|
|
92
|
+
}
|
|
93
|
+
if (encodeBase64(bytes) !== padded) {
|
|
94
|
+
throw new Error('Invalid base64 payload');
|
|
95
|
+
}
|
|
96
|
+
return bytes;
|
|
97
|
+
}
|
|
98
|
+
function detectImageFormat(bytes) {
|
|
99
|
+
if (hasPrefix(bytes, [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])) {
|
|
100
|
+
return 'png';
|
|
101
|
+
}
|
|
102
|
+
if (hasPrefix(bytes, [0xff, 0xd8, 0xff])) {
|
|
103
|
+
return 'jpeg';
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
function detectIsoBmffFormat(bytes) {
|
|
108
|
+
if (bytes.length < 12 || ascii(bytes, 4, 4) !== 'ftyp') {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
const majorBrand = ascii(bytes, 8, 4);
|
|
112
|
+
if (majorBrand === 'qt ') {
|
|
113
|
+
return 'quicktime';
|
|
114
|
+
}
|
|
115
|
+
return 'mp4';
|
|
116
|
+
}
|
|
117
|
+
function isLikelyMp3Frame(bytes) {
|
|
118
|
+
if (bytes.length < 2) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
const b0 = bytes[0];
|
|
122
|
+
const b1 = bytes[1];
|
|
123
|
+
const versionBits = (b1 >> 3) & 0x03;
|
|
124
|
+
const layerBits = (b1 >> 1) & 0x03;
|
|
125
|
+
return b0 === 0xff && (b1 & 0xe0) === 0xe0 && versionBits !== 0x01 && layerBits !== 0x00;
|
|
126
|
+
}
|
|
127
|
+
function detectAudioFormat(bytes) {
|
|
128
|
+
if (ascii(bytes, 0, 4) === 'RIFF' && ascii(bytes, 8, 4) === 'WAVE') {
|
|
129
|
+
return 'wav';
|
|
130
|
+
}
|
|
131
|
+
if (ascii(bytes, 0, 3) === 'ID3' || isLikelyMp3Frame(bytes)) {
|
|
132
|
+
return 'mpeg';
|
|
133
|
+
}
|
|
134
|
+
const isoFormat = detectIsoBmffFormat(bytes);
|
|
135
|
+
if (isoFormat === 'mp4') {
|
|
136
|
+
return 'mp4';
|
|
137
|
+
}
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
function detectVideoFormat(bytes) {
|
|
141
|
+
const isoFormat = detectIsoBmffFormat(bytes);
|
|
142
|
+
if (isoFormat === 'quicktime') {
|
|
143
|
+
return 'quicktime';
|
|
144
|
+
}
|
|
145
|
+
if (isoFormat === 'mp4') {
|
|
146
|
+
return 'mp4';
|
|
147
|
+
}
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
function parsePngDimensions(bytes) {
|
|
151
|
+
if (bytes.length < 24 || ascii(bytes, 12, 4) !== 'IHDR') {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
const width = (bytes[16] << 24) | (bytes[17] << 16) | (bytes[18] << 8) | bytes[19];
|
|
155
|
+
const height = (bytes[20] << 24) | (bytes[21] << 16) | (bytes[22] << 8) | bytes[23];
|
|
156
|
+
if (width <= 0 || height <= 0) {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
return { width, height };
|
|
160
|
+
}
|
|
161
|
+
function parseJpegDimensions(bytes) {
|
|
162
|
+
let offset = 2;
|
|
163
|
+
while (offset + 1 < bytes.length) {
|
|
164
|
+
while (offset < bytes.length && bytes[offset] !== 0xff) {
|
|
165
|
+
offset += 1;
|
|
166
|
+
}
|
|
167
|
+
while (offset < bytes.length && bytes[offset] === 0xff) {
|
|
168
|
+
offset += 1;
|
|
169
|
+
}
|
|
170
|
+
if (offset >= bytes.length) {
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
const marker = bytes[offset];
|
|
174
|
+
offset += 1;
|
|
175
|
+
if (marker === 0xd8 ||
|
|
176
|
+
marker === 0xd9 ||
|
|
177
|
+
(marker >= 0xd0 && marker <= 0xd7) ||
|
|
178
|
+
marker === 0x01) {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
if (offset + 1 >= bytes.length) {
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
const segmentLength = (bytes[offset] << 8) | bytes[offset + 1];
|
|
185
|
+
if (segmentLength < 2 || offset + segmentLength > bytes.length) {
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
const isStartOfFrame = marker >= 0xc0 && marker <= 0xcf && marker !== 0xc4 && marker !== 0xc8 && marker !== 0xcc;
|
|
189
|
+
if (isStartOfFrame) {
|
|
190
|
+
if (offset + 6 >= bytes.length) {
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
const height = (bytes[offset + 3] << 8) | bytes[offset + 4];
|
|
194
|
+
const width = (bytes[offset + 5] << 8) | bytes[offset + 6];
|
|
195
|
+
if (width > 0 && height > 0) {
|
|
196
|
+
return { width, height };
|
|
197
|
+
}
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
offset += segmentLength;
|
|
201
|
+
}
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
function parseImageDimensions(bytes, format) {
|
|
205
|
+
switch (format) {
|
|
206
|
+
case 'png':
|
|
207
|
+
return parsePngDimensions(bytes);
|
|
208
|
+
case 'jpeg':
|
|
209
|
+
return parseJpegDimensions(bytes);
|
|
210
|
+
default:
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
function validateMagicBytes(mediaType, mimeType, bytes) {
|
|
215
|
+
if (mediaType === 'image') {
|
|
216
|
+
const expectedFormat = IMAGE_MIME_FORMATS[mimeType];
|
|
217
|
+
if (!expectedFormat) {
|
|
218
|
+
throw new Error(`Unsupported inline image MIME type ${mimeType}. Allowed types: ${getAllowedMimeTypes('image').join(', ')}`);
|
|
219
|
+
}
|
|
220
|
+
const detectedFormat = detectImageFormat(bytes);
|
|
221
|
+
if (detectedFormat !== expectedFormat) {
|
|
222
|
+
throw new Error(`Inline image data does not match declared MIME type ${mimeType}`);
|
|
223
|
+
}
|
|
224
|
+
const dimensions = parseImageDimensions(bytes, detectedFormat);
|
|
225
|
+
if (!dimensions) {
|
|
226
|
+
throw new Error('Unable to determine inline image dimensions');
|
|
227
|
+
}
|
|
228
|
+
return dimensions;
|
|
229
|
+
}
|
|
230
|
+
if (mediaType === 'audio') {
|
|
231
|
+
const expectedFormat = AUDIO_MIME_FORMATS[mimeType];
|
|
232
|
+
if (!expectedFormat) {
|
|
233
|
+
throw new Error(`Unsupported inline audio MIME type ${mimeType}. Allowed types: ${getAllowedMimeTypes('audio').join(', ')}`);
|
|
234
|
+
}
|
|
235
|
+
const detectedFormat = detectAudioFormat(bytes);
|
|
236
|
+
if (detectedFormat !== expectedFormat) {
|
|
237
|
+
throw new Error(`Inline audio data does not match declared MIME type ${mimeType}`);
|
|
238
|
+
}
|
|
239
|
+
return undefined;
|
|
240
|
+
}
|
|
241
|
+
const expectedFormat = VIDEO_MIME_FORMATS[mimeType];
|
|
242
|
+
if (!expectedFormat) {
|
|
243
|
+
throw new Error(`Unsupported inline video MIME type ${mimeType}. Allowed types: ${getAllowedMimeTypes('video').join(', ')}`);
|
|
244
|
+
}
|
|
245
|
+
const detectedFormat = detectVideoFormat(bytes);
|
|
246
|
+
if (detectedFormat !== expectedFormat) {
|
|
247
|
+
throw new Error(`Inline video data does not match declared MIME type ${mimeType}`);
|
|
248
|
+
}
|
|
249
|
+
return undefined;
|
|
250
|
+
}
|
|
251
|
+
function validateImageDimensions(dimensions, maxLongestSide) {
|
|
252
|
+
if (Math.max(dimensions.width, dimensions.height) > maxLongestSide) {
|
|
253
|
+
throw new Error(`Inline image exceeds maximum dimensions of ${maxLongestSide}px on its longest side`);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
function parseInlineMediaDataUri(input, mediaType, options = {}) {
|
|
257
|
+
const trimmed = input.trim();
|
|
258
|
+
const match = /^data:([^;,]+);base64,([A-Za-z0-9+/=\s]+)$/i.exec(trimmed);
|
|
259
|
+
if (!match) {
|
|
260
|
+
throw new Error(`Only inline base64-encoded data URIs are supported for ${mediaType} inputs; remote URLs are not allowed`);
|
|
261
|
+
}
|
|
262
|
+
const mimeType = match[1].toLowerCase();
|
|
263
|
+
const bytes = decodeStrictBase64(match[2]);
|
|
264
|
+
if (options.maxBytes !== undefined && bytes.length > options.maxBytes) {
|
|
265
|
+
throw new Error(`${mediaType} input exceeds ${Math.round(options.maxBytes / (1024 * 1024))}MB limit`);
|
|
266
|
+
}
|
|
267
|
+
const imageDimensions = validateMagicBytes(mediaType, mimeType, bytes);
|
|
268
|
+
if (imageDimensions && options.maxImageLongestSide !== undefined) {
|
|
269
|
+
validateImageDimensions(imageDimensions, options.maxImageLongestSide);
|
|
270
|
+
}
|
|
271
|
+
const blobBytes = new Uint8Array(bytes.length);
|
|
272
|
+
blobBytes.set(bytes);
|
|
273
|
+
return {
|
|
274
|
+
mimeType,
|
|
275
|
+
blob: new Blob([blobBytes], { type: mimeType }),
|
|
276
|
+
byteLength: bytes.length,
|
|
277
|
+
imageDimensions
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=mediaValidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediaValidation.js","sourceRoot":"","sources":["../../src/lib/mediaValidation.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/validation.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { ModelOptions } from '../Projects/types/ModelOptions';
|
|
2
|
-
|
|
2
|
+
interface ImageSizeValidationOptions {
|
|
3
|
+
modelId?: string;
|
|
4
|
+
propertyName?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function validateCustomImageSize(value: any, { modelId, propertyName }?: ImageSizeValidationOptions): number;
|
|
3
7
|
/**
|
|
4
8
|
* Validate video dimensions for Wan 2.2 models.
|
|
5
9
|
* Minimum dimension is 480px for both width and height.
|
|
@@ -21,6 +25,7 @@ export declare function validateTeacacheThreshold(value?: number): number | unde
|
|
|
21
25
|
export declare function isComfyModel(modelId: string): boolean;
|
|
22
26
|
/**
|
|
23
27
|
* Get the maximum number of context images supported by a model.
|
|
28
|
+
* - GPT Image 2: 16 images
|
|
24
29
|
* - Flux.2 Dev: 6 images
|
|
25
30
|
* - Qwen Image Edit: 3 images
|
|
26
31
|
* - Flux Kontext: 2 images
|
package/dist/lib/validation.js
CHANGED
|
@@ -10,8 +10,30 @@ exports.getMaxContextImages = getMaxContextImages;
|
|
|
10
10
|
exports.validateSampler = validateSampler;
|
|
11
11
|
exports.validateScheduler = validateScheduler;
|
|
12
12
|
const ApiClient_1 = require("../ApiClient");
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
const EXTENDED_IMAGE_SIZE_MODEL_IDS = new Set([
|
|
14
|
+
'z_image_bf16',
|
|
15
|
+
'z_image_turbo_bf16',
|
|
16
|
+
'qwen_image_edit_2511_fp8',
|
|
17
|
+
'qwen_image_edit_2511_fp8_lightning',
|
|
18
|
+
'qwen_image_2512_fp8',
|
|
19
|
+
'qwen_image_2512_fp8_lightning',
|
|
20
|
+
'flux2_dev_fp8'
|
|
21
|
+
]);
|
|
22
|
+
function getMaxCustomImageSize(modelId) {
|
|
23
|
+
if (modelId === 'gpt-image-2') {
|
|
24
|
+
return 3840;
|
|
25
|
+
}
|
|
26
|
+
if (modelId && EXTENDED_IMAGE_SIZE_MODEL_IDS.has(modelId)) {
|
|
27
|
+
return 2560;
|
|
28
|
+
}
|
|
29
|
+
return 2048;
|
|
30
|
+
}
|
|
31
|
+
function validateCustomImageSize(value, { modelId, propertyName = 'Width and height' } = {}) {
|
|
32
|
+
return validateNumber(value, {
|
|
33
|
+
min: 256,
|
|
34
|
+
max: getMaxCustomImageSize(modelId),
|
|
35
|
+
propertyName
|
|
36
|
+
});
|
|
15
37
|
}
|
|
16
38
|
/**
|
|
17
39
|
* Validate video dimensions for Wan 2.2 models.
|
|
@@ -72,12 +94,16 @@ function isComfyModel(modelId) {
|
|
|
72
94
|
}
|
|
73
95
|
/**
|
|
74
96
|
* Get the maximum number of context images supported by a model.
|
|
97
|
+
* - GPT Image 2: 16 images
|
|
75
98
|
* - Flux.2 Dev: 6 images
|
|
76
99
|
* - Qwen Image Edit: 3 images
|
|
77
100
|
* - Flux Kontext: 2 images
|
|
78
101
|
* - Default: 3 images
|
|
79
102
|
*/
|
|
80
103
|
function getMaxContextImages(modelId) {
|
|
104
|
+
if (modelId === 'gpt-image-2') {
|
|
105
|
+
return 16;
|
|
106
|
+
}
|
|
81
107
|
if (modelId.startsWith('flux2_')) {
|
|
82
108
|
return 6;
|
|
83
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"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"}
|