@sogni-ai/sogni-client 5.74.0 → 5.75.0

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.
Files changed (51) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +32 -0
  3. package/dist/Chat/_hostedToolsManifest.generated.js +44 -5
  4. package/dist/Chat/_hostedToolsManifest.generated.js.map +1 -1
  5. package/dist/Chat/modelRouting.d.ts +2 -0
  6. package/dist/Chat/modelRouting.js +2 -0
  7. package/dist/Chat/modelRouting.js.map +1 -1
  8. package/dist/Projects/createJobRequestMessage.js +11 -1
  9. package/dist/Projects/createJobRequestMessage.js.map +1 -1
  10. package/dist/Projects/index.d.ts +1 -1
  11. package/dist/Projects/index.js +13 -1
  12. package/dist/Projects/index.js.map +1 -1
  13. package/dist/Projects/types/index.d.ts +13 -1
  14. package/dist/Projects/types/index.js.map +1 -1
  15. package/dist/index.d.ts +1 -0
  16. package/dist/index.js +6 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/lib/gptImageGif.d.ts +26 -0
  19. package/dist/lib/gptImageGif.js +92 -0
  20. package/dist/lib/gptImageGif.js.map +1 -0
  21. package/dist/lib/validation.d.ts +1 -1
  22. package/dist/lib/validation.js +55 -5
  23. package/dist/lib/validation.js.map +1 -1
  24. package/dist/version.d.ts +1 -1
  25. package/dist/version.js +1 -1
  26. package/dist-esm/Chat/_hostedToolsManifest.generated.js +44 -5
  27. package/dist-esm/Chat/_hostedToolsManifest.generated.js.map +1 -1
  28. package/dist-esm/Chat/modelRouting.js +2 -0
  29. package/dist-esm/Chat/modelRouting.js.map +1 -1
  30. package/dist-esm/Projects/createJobRequestMessage.js +12 -2
  31. package/dist-esm/Projects/createJobRequestMessage.js.map +1 -1
  32. package/dist-esm/Projects/index.js +14 -2
  33. package/dist-esm/Projects/index.js.map +1 -1
  34. package/dist-esm/Projects/types/index.js.map +1 -1
  35. package/dist-esm/index.js +1 -0
  36. package/dist-esm/index.js.map +1 -1
  37. package/dist-esm/lib/gptImageGif.js +86 -0
  38. package/dist-esm/lib/gptImageGif.js.map +1 -0
  39. package/dist-esm/lib/validation.js +53 -4
  40. package/dist-esm/lib/validation.js.map +1 -1
  41. package/dist-esm/version.js +1 -1
  42. package/package.json +4 -3
  43. package/src/Chat/_hostedToolsManifest.generated.ts +44 -5
  44. package/src/Chat/modelRouting.ts +2 -0
  45. package/src/Projects/createJobRequestMessage.ts +10 -1
  46. package/src/Projects/index.ts +13 -1
  47. package/src/Projects/types/index.ts +13 -1
  48. package/src/index.ts +9 -1
  49. package/src/lib/gptImageGif.ts +110 -0
  50. package/src/lib/validation.ts +69 -2
  51. package/src/version.ts +1 -1
@@ -1,3 +1,5 @@
1
+ import { resolveGptImageGifSize } from './gptImageGif.js';
2
+ export { resolveGptImageGifSize } from './gptImageGif.js';
1
3
  import { ApiError } from '../ApiClient/index.js';
2
4
  import { ModelOptions } from '../Projects/types/ModelOptions.js';
3
5
  import type { ImageProjectParams } from '../Projects/types/index.js';
@@ -5,7 +7,9 @@ import type { ImageProjectParams } from '../Projects/types/index.js';
5
7
  const GPT_IMAGE_MODEL_IDS = new Set([
6
8
  'gpt-image-2',
7
9
  'gpt-image-2.5-sunburst',
8
- 'gpt-image-2.5-flare'
10
+ 'gpt-image-2.5-flare',
11
+ 'gpt-image-2.6-sunburst',
12
+ 'gpt-image-2.6-flare'
9
13
  ]);
10
14
 
11
15
  export function isGptImageModel(modelId?: string): boolean {
@@ -13,6 +17,68 @@ export function isGptImageModel(modelId?: string): boolean {
13
17
  }
14
18
 
15
19
  export function validateGptImageOptions(params: ImageProjectParams): void {
20
+ const is26 =
21
+ params.modelId === 'gpt-image-2.6-sunburst' || params.modelId === 'gpt-image-2.6-flare';
22
+ const advancedFormat = params.outputFormat === 'gif';
23
+ if (
24
+ !is26 &&
25
+ (advancedFormat ||
26
+ params.gptImageComplexity !== undefined ||
27
+ params.gptImageFrameCount !== undefined ||
28
+ params.gptImageFrameDurationMs !== undefined ||
29
+ params.gptImageMarkupUrl !== undefined)
30
+ ) {
31
+ throw new Error('GIF, complexity and markup options require GPT Image 2.6');
32
+ }
33
+ if (is26) {
34
+ if (
35
+ params.outputFormat === 'gif' &&
36
+ (!params.sizePreset || params.sizePreset === 'custom' || params.width || params.height)
37
+ )
38
+ resolveGptImageGifSize(params.width, params.height, params.gptImageFrameCount);
39
+ if (
40
+ params.gptImageComplexity !== undefined &&
41
+ !['low', 'medium', 'high'].includes(params.gptImageComplexity)
42
+ )
43
+ throw new Error('Unsupported GPT Image complexity');
44
+ if (
45
+ advancedFormat &&
46
+ (params.contextImages?.length ||
47
+ params.gptImageMask ||
48
+ params.gptImageMaskUrl ||
49
+ params.gptImageMarkupUrl)
50
+ )
51
+ throw new Error('GIF output require text-to-image generation');
52
+ if (
53
+ params.outputFormat !== 'gif' &&
54
+ (params.gptImageFrameCount !== undefined || params.gptImageFrameDurationMs !== undefined)
55
+ )
56
+ throw new Error('Frame options require GIF output');
57
+ if (
58
+ params.gptImageFrameCount !== undefined &&
59
+ (!Number.isInteger(params.gptImageFrameCount) ||
60
+ params.gptImageFrameCount < 2 ||
61
+ params.gptImageFrameCount > 16)
62
+ )
63
+ throw new Error('GIF frame count must be an integer from 2 to 16');
64
+ if (
65
+ params.gptImageFrameDurationMs !== undefined &&
66
+ (!Number.isInteger(params.gptImageFrameDurationMs) ||
67
+ params.gptImageFrameDurationMs < 20 ||
68
+ params.gptImageFrameDurationMs > 2000)
69
+ )
70
+ throw new Error('GIF frame duration must be an integer from 20 to 2000 ms');
71
+ if (
72
+ params.gptImageMarkupUrl !== undefined &&
73
+ (!params.gptImageMarkupUrl.trim() ||
74
+ !params.contextImages?.length ||
75
+ params.gptImageMask ||
76
+ params.gptImageMaskUrl)
77
+ )
78
+ throw new Error('Markup requires a first edit reference and cannot combine with a mask');
79
+ if (params.gptImageBackground === 'transparent' && advancedFormat)
80
+ throw new Error('Transparent output requires PNG or WebP');
81
+ }
16
82
  if (!isGptImageModel(params.modelId)) {
17
83
  if (params.gptImageMask || params.gptImageMaskUrl)
18
84
  throw new Error('GPT Image masks require a GPT Image model');
@@ -314,7 +380,8 @@ export function isComfyModel(modelId: string): boolean {
314
380
  * - Default: 3 images
315
381
  */
316
382
  export function getMaxContextImages(modelId: string): number {
317
- if (['moss_image_sft_int8_convrot', 'moss_image_sft_dmd8_int8_convrot'].includes(modelId || '')) return 0;
383
+ if (['moss_image_sft_int8_convrot', 'moss_image_sft_dmd8_int8_convrot'].includes(modelId || ''))
384
+ return 0;
318
385
  if (isGptImageModel(modelId)) {
319
386
  return 16;
320
387
  }
package/src/version.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  // AUTO-GENERATED by scripts/generate-version.mjs — do not edit.
2
2
  // Source of truth: package.json version.
3
- export const LIB_VERSION = '5.74.0';
3
+ export const LIB_VERSION = '5.75.0';