@byte_fluffy/nexra-sdk 0.1.0-alpha.1

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.
@@ -0,0 +1,1512 @@
1
+ // src/generated/public-catalog.generated.json
2
+ var public_catalog_generated_default = [
3
+ {
4
+ id: "bytedance/doubao-seedream-5-0-260128",
5
+ contractVersion: 2,
6
+ developer: "bytedance",
7
+ displayName: "Doubao Seedream 5.0 Lite",
8
+ summary: "\u652F\u6301\u56FE\u50CF\u751F\u6210\u4E0E\u591A\u56FE\u7F16\u8F91\u3002",
9
+ kind: "image",
10
+ family: "Doubao Seedream Lite",
11
+ versionLabel: "5.0",
12
+ aliases: [
13
+ "seedream-5-0",
14
+ "seedream-5.0",
15
+ "volcengine/doubao-seedream-5-0-260128"
16
+ ],
17
+ capabilities: {
18
+ inputModalities: [
19
+ "text",
20
+ "image"
21
+ ],
22
+ outputModalities: [
23
+ "image"
24
+ ],
25
+ inputModes: [
26
+ "text-to-image",
27
+ "image-to-image"
28
+ ],
29
+ features: []
30
+ },
31
+ operations: [
32
+ {
33
+ operation: "image.generate",
34
+ inputModalities: [
35
+ "text",
36
+ "image"
37
+ ],
38
+ outputModalities: [
39
+ "image"
40
+ ],
41
+ inputSchema: {
42
+ type: "object",
43
+ properties: {
44
+ model: {
45
+ type: "string",
46
+ minLength: 1,
47
+ title: "\u6A21\u578B ID",
48
+ description: "Nexra \u516C\u5171\u6A21\u578B ID\uFF0C\u5FC5\u987B\u4E0E\u5916\u5C42 modelId \u76F8\u540C\u3002",
49
+ "x-ui": {
50
+ order: 0
51
+ },
52
+ examples: [
53
+ "bytedance/doubao-seedream-5-0-260128"
54
+ ],
55
+ const: "bytedance/doubao-seedream-5-0-260128"
56
+ },
57
+ prompt: {
58
+ type: "string",
59
+ minLength: 1,
60
+ title: "\u63D0\u793A\u8BCD",
61
+ description: "\u63CF\u8FF0\u751F\u6210\u6216\u7F16\u8F91\u8981\u6C42\u3002",
62
+ "x-ui": {
63
+ order: 1,
64
+ control: "textarea"
65
+ }
66
+ },
67
+ image: {
68
+ title: "\u53C2\u8003\u56FE\u7247",
69
+ description: "\u56FE\u7247 URL \u6216\u5B8C\u6574 Data URL\u3002\u6700\u591A 14 \u5F20\u3002",
70
+ anyOf: [
71
+ {
72
+ type: "string",
73
+ format: "uri",
74
+ minLength: 1
75
+ },
76
+ {
77
+ type: "array",
78
+ items: {
79
+ type: "string",
80
+ format: "uri",
81
+ minLength: 1
82
+ },
83
+ minItems: 1,
84
+ maxItems: 14
85
+ }
86
+ ],
87
+ "x-ui": {
88
+ order: 2
89
+ }
90
+ },
91
+ size: {
92
+ type: "string",
93
+ minLength: 1,
94
+ title: "\u8F93\u51FA\u5C3A\u5BF8",
95
+ description: "\u5C3A\u5BF8\u6863\u4F4D 2K\u30013K\u30014K\uFF0C\u6216\u5BBD\xD7\u9AD8\u50CF\u7D20\uFF0C\u5982 2048x2048\u3002",
96
+ examples: [
97
+ "2K",
98
+ "3K",
99
+ "4K",
100
+ "2048x2048"
101
+ ],
102
+ "x-ui": {
103
+ order: 3
104
+ }
105
+ },
106
+ response_format: {
107
+ type: "string",
108
+ enum: [
109
+ "url",
110
+ "b64_json"
111
+ ],
112
+ title: "\u54CD\u5E94\u56FE\u7247\u5F62\u5F0F",
113
+ description: "url \u8FD4\u56DE\u56FE\u7247\u5730\u5740\uFF0Cb64_json \u8FD4\u56DE Base64 \u56FE\u7247\u6570\u636E\u3002"
114
+ },
115
+ output_format: {
116
+ type: "string",
117
+ enum: [
118
+ "png",
119
+ "jpeg"
120
+ ],
121
+ title: "\u56FE\u7247\u683C\u5F0F"
122
+ },
123
+ watermark: {
124
+ type: "boolean",
125
+ title: "\u6C34\u5370",
126
+ description: "\u662F\u5426\u6DFB\u52A0\u6C34\u5370\u3002"
127
+ }
128
+ },
129
+ required: [
130
+ "model",
131
+ "prompt"
132
+ ],
133
+ additionalProperties: true
134
+ },
135
+ outputSchema: {
136
+ type: "object",
137
+ properties: {
138
+ data: {
139
+ type: "array",
140
+ items: {
141
+ type: "object",
142
+ properties: {
143
+ url: {
144
+ type: "string",
145
+ title: "\u56FE\u7247\u5730\u5740",
146
+ format: "uri"
147
+ },
148
+ b64_json: {
149
+ type: "string",
150
+ title: "Base64 \u56FE\u7247\u6570\u636E"
151
+ },
152
+ size: {
153
+ type: "string",
154
+ title: "\u56FE\u7247\u5C3A\u5BF8"
155
+ }
156
+ },
157
+ additionalProperties: true
158
+ },
159
+ title: "\u751F\u6210\u56FE\u7247"
160
+ },
161
+ usage: {
162
+ type: "object",
163
+ properties: {},
164
+ additionalProperties: true,
165
+ title: "\u4E0A\u6E38\u7528\u91CF"
166
+ },
167
+ model: {
168
+ type: "string",
169
+ title: "\u6A21\u578B ID",
170
+ const: "bytedance/doubao-seedream-5-0-260128",
171
+ description: "Nexra \u516C\u5171\u6A21\u578B ID\u3002",
172
+ examples: [
173
+ "bytedance/doubao-seedream-5-0-260128"
174
+ ]
175
+ },
176
+ created: {
177
+ type: "integer",
178
+ title: "\u751F\u6210\u65F6\u95F4",
179
+ description: "Unix \u65F6\u95F4\u6233\uFF0C\u5355\u4F4D\u79D2\u3002"
180
+ }
181
+ },
182
+ required: [
183
+ "data"
184
+ ],
185
+ additionalProperties: true
186
+ },
187
+ metering: {
188
+ schemaVersion: 1,
189
+ kind: "non_token",
190
+ metrics: [
191
+ {
192
+ metric: "requests",
193
+ requirement: "required"
194
+ },
195
+ {
196
+ metric: "input_images",
197
+ requirement: "informational"
198
+ },
199
+ {
200
+ metric: "output_images",
201
+ requirement: "required"
202
+ }
203
+ ]
204
+ }
205
+ }
206
+ ]
207
+ },
208
+ {
209
+ id: "openai/gpt-image-2",
210
+ contractVersion: 2,
211
+ developer: "openai",
212
+ displayName: "GPT Image 2",
213
+ summary: "GPT Image 2 \u56FE\u7247\u751F\u6210\u4E0E\u7F16\u8F91\uFF0C\u652F\u6301\u591A\u56FE\u8F93\u5165\u3001\u8499\u7248\u53CA\u81EA\u5B9A\u4E49\u8F93\u51FA\u5C3A\u5BF8\u3002",
214
+ kind: "image",
215
+ family: "GPT Image",
216
+ versionLabel: "2",
217
+ aliases: [
218
+ "azure/gpt-image-2",
219
+ "gpt-image-2",
220
+ "gpt-image2",
221
+ "gptimage2"
222
+ ],
223
+ capabilities: {
224
+ inputModalities: [
225
+ "text",
226
+ "image"
227
+ ],
228
+ outputModalities: [
229
+ "image"
230
+ ],
231
+ inputModes: [
232
+ "text-to-image",
233
+ "image-to-image"
234
+ ],
235
+ features: []
236
+ },
237
+ operations: [
238
+ {
239
+ operation: "image.generate",
240
+ inputModalities: [
241
+ "text",
242
+ "image"
243
+ ],
244
+ outputModalities: [
245
+ "image"
246
+ ],
247
+ inputSchema: {
248
+ type: "object",
249
+ properties: {
250
+ model: {
251
+ type: "string",
252
+ title: "\u6A21\u578B ID",
253
+ minLength: 1,
254
+ description: "Nexra \u516C\u5171\u6A21\u578B ID\uFF0C\u5FC5\u987B\u4E0E\u5916\u5C42 modelId \u76F8\u540C\u3002",
255
+ "x-ui": {
256
+ order: 0
257
+ },
258
+ const: "openai/gpt-image-2",
259
+ examples: [
260
+ "openai/gpt-image-2"
261
+ ]
262
+ },
263
+ prompt: {
264
+ type: "string",
265
+ title: "\u63D0\u793A\u8BCD",
266
+ minLength: 1,
267
+ maxLength: 32e3,
268
+ description: "\u63CF\u8FF0\u8981\u751F\u6210\u7684\u56FE\u7247\uFF0C\u6216\u5BF9\u8F93\u5165\u56FE\u7247\u7684\u4FEE\u6539\u8981\u6C42\u3002",
269
+ "x-ui": {
270
+ order: 1,
271
+ control: "textarea"
272
+ }
273
+ },
274
+ image: {
275
+ title: "\u8F93\u5165\u56FE\u7247",
276
+ description: "\u7528\u4E8E\u56FE\u7247\u7F16\u8F91\uFF0C\u6700\u591A 16 \u5F20\u3002Task \u4E2D\u586B\u5199\u56FE\u7247 URL \u6216 Data URL\uFF1B\u6267\u884C\u65F6\u6309\u539F\u751F image[] \u5B57\u6BB5\u4E0A\u4F20\u6587\u4EF6\uFF0C\u987A\u5E8F\u4E0D\u53D8\u3002",
277
+ anyOf: [
278
+ {
279
+ type: "string",
280
+ format: "uri",
281
+ pattern: "^(https?://|data:image/)",
282
+ minLength: 1
283
+ },
284
+ {
285
+ type: "array",
286
+ items: {
287
+ type: "string",
288
+ format: "uri",
289
+ pattern: "^(https?://|data:image/)",
290
+ minLength: 1
291
+ },
292
+ minItems: 1,
293
+ maxItems: 16
294
+ }
295
+ ],
296
+ "x-ui": {
297
+ order: 2
298
+ }
299
+ },
300
+ mask: {
301
+ type: "string",
302
+ format: "uri",
303
+ pattern: "^(https?://|data:image/)",
304
+ minLength: 1,
305
+ title: "\u7F16\u8F91\u8499\u7248",
306
+ description: "\u53EF\u9009\u7684\u4E00\u5F20 PNG \u8499\u7248\uFF0C\u9700\u540C\u65F6\u63D0\u4F9B\u8F93\u5165\u56FE\u7247\uFF1B\u5C3A\u5BF8\u4E0E\u7B2C\u4E00\u5F20\u8F93\u5165\u56FE\u4E00\u81F4\uFF0C\u900F\u660E\u533A\u57DF\u7528\u4E8E\u7F16\u8F91\u3002Task \u4E2D\u586B\u5199 URL \u6216 Data URL\uFF0C\u6267\u884C\u65F6\u4E0A\u4F20\u4E3A mask \u6587\u4EF6\u3002",
307
+ "x-ui": {
308
+ order: 3
309
+ }
310
+ },
311
+ size: {
312
+ type: "string",
313
+ title: "\u8F93\u51FA\u5C3A\u5BF8",
314
+ pattern: "^(auto|[1-9][0-9]{2,3}x[1-9][0-9]{2,3})$",
315
+ description: "\u586B\u5199 WIDTHxHEIGHT \u6216 auto\u3002\u4E24\u8FB9\u5747\u987B\u4E3A 16 \u7684\u500D\u6570\uFF0C\u6700\u957F\u8FB9\u4E0D\u8D85\u8FC7 3840\uFF0C\u5BBD\u9AD8\u6BD4\u5728 1:3\uFF5E3:1\uFF0C\u50CF\u7D20\u603B\u6570\u4E3A 655360\uFF5E8294400\u3002",
316
+ examples: [
317
+ "1024x1024",
318
+ "1536x1024",
319
+ "2048x1152",
320
+ "3840x2160",
321
+ "auto"
322
+ ],
323
+ "x-ui": {
324
+ order: 4
325
+ }
326
+ },
327
+ n: {
328
+ type: "integer",
329
+ title: "\u8F93\u51FA\u5F20\u6570",
330
+ minimum: 1,
331
+ maximum: 10,
332
+ "x-ui": {
333
+ order: 5
334
+ }
335
+ },
336
+ quality: {
337
+ type: "string",
338
+ title: "\u56FE\u7247\u8D28\u91CF",
339
+ enum: [
340
+ "auto",
341
+ "low",
342
+ "medium",
343
+ "high"
344
+ ],
345
+ "x-ui": {
346
+ order: 6,
347
+ optionLabels: {
348
+ auto: "\u81EA\u52A8",
349
+ low: "\u4F4E",
350
+ medium: "\u4E2D",
351
+ high: "\u9AD8"
352
+ }
353
+ }
354
+ },
355
+ output_format: {
356
+ type: "string",
357
+ description: "\u8F93\u51FA\u56FE\u7247\u7684\u7F16\u7801\u683C\u5F0F\u3002",
358
+ enum: [
359
+ "png",
360
+ "jpeg"
361
+ ],
362
+ title: "\u56FE\u7247\u683C\u5F0F",
363
+ "x-ui": {
364
+ order: 7,
365
+ optionLabels: {
366
+ png: "PNG",
367
+ jpeg: "JPEG"
368
+ }
369
+ }
370
+ },
371
+ output_compression: {
372
+ type: "integer",
373
+ minimum: 0,
374
+ maximum: 100,
375
+ multipleOf: 1,
376
+ description: "JPEG \u538B\u7F29\u8D28\u91CF\uFF0C0\uFF5E100\uFF1B\u4EC5\u5728 output_format \u4E3A jpeg \u65F6\u4F7F\u7528\u3002",
377
+ "x-ui": {
378
+ order: 8
379
+ },
380
+ title: "\u538B\u7F29\u8D28\u91CF"
381
+ },
382
+ background: {
383
+ type: "string",
384
+ enum: [
385
+ "auto",
386
+ "opaque",
387
+ "transparent"
388
+ ],
389
+ description: "\u53EF\u9009\u62E9\u81EA\u52A8\u3001\u4E0D\u900F\u660E\u6216\u900F\u660E\u80CC\u666F\uFF1B\u900F\u660E\u80CC\u666F\u4E3A\u4E0A\u6E38\u9884\u89C8\u80FD\u529B\uFF0C\u9700\u4F7F\u7528 PNG\u3002",
390
+ "x-ui": {
391
+ order: 9,
392
+ optionLabels: {
393
+ auto: "\u81EA\u52A8",
394
+ opaque: "\u4E0D\u900F\u660E",
395
+ transparent: "\u900F\u660E"
396
+ }
397
+ },
398
+ title: "\u80CC\u666F"
399
+ },
400
+ moderation: {
401
+ type: "string",
402
+ enum: [
403
+ "auto",
404
+ "low"
405
+ ],
406
+ description: "\u4F20\u7ED9\u4E0A\u6E38\u7684\u5185\u5BB9\u5BA1\u6838\u7EA7\u522B\u3002",
407
+ "x-ui": {
408
+ order: 10,
409
+ optionLabels: {
410
+ auto: "\u81EA\u52A8",
411
+ low: "\u4F4E"
412
+ }
413
+ },
414
+ title: "\u5185\u5BB9\u5BA1\u6838"
415
+ },
416
+ user: {
417
+ type: "string",
418
+ title: "\u7EC8\u7AEF\u7528\u6237\u6807\u8BC6",
419
+ description: "\u4F20\u7ED9\u4E0A\u6E38\u7684\u7EC8\u7AEF\u7528\u6237\u6807\u8BC6\uFF0C\u7528\u4E8E\u6EE5\u7528\u76D1\u6D4B\u3002",
420
+ "x-ui": {
421
+ order: 11
422
+ }
423
+ }
424
+ },
425
+ required: [
426
+ "prompt"
427
+ ],
428
+ additionalProperties: true,
429
+ allOf: [
430
+ {
431
+ if: {
432
+ required: [
433
+ "mask"
434
+ ]
435
+ },
436
+ then: {
437
+ required: [
438
+ "image"
439
+ ]
440
+ }
441
+ },
442
+ {
443
+ if: {
444
+ required: [
445
+ "image"
446
+ ]
447
+ },
448
+ then: {
449
+ required: [
450
+ "model"
451
+ ]
452
+ }
453
+ },
454
+ {
455
+ if: {
456
+ required: [
457
+ "output_compression"
458
+ ]
459
+ },
460
+ then: {
461
+ required: [
462
+ "output_format"
463
+ ],
464
+ properties: {
465
+ output_format: {
466
+ const: "jpeg"
467
+ }
468
+ }
469
+ }
470
+ },
471
+ {
472
+ if: {
473
+ required: [
474
+ "background"
475
+ ],
476
+ properties: {
477
+ background: {
478
+ const: "transparent"
479
+ }
480
+ }
481
+ },
482
+ then: {
483
+ properties: {
484
+ output_format: {
485
+ const: "png"
486
+ }
487
+ }
488
+ }
489
+ },
490
+ {
491
+ not: {
492
+ anyOf: [
493
+ {
494
+ required: [
495
+ "texts"
496
+ ]
497
+ },
498
+ {
499
+ required: [
500
+ "images"
501
+ ]
502
+ },
503
+ {
504
+ required: [
505
+ "ratio"
506
+ ]
507
+ },
508
+ {
509
+ required: [
510
+ "resolution"
511
+ ]
512
+ },
513
+ {
514
+ required: [
515
+ "generate_count"
516
+ ]
517
+ },
518
+ {
519
+ required: [
520
+ "callback_url"
521
+ ]
522
+ },
523
+ {
524
+ required: [
525
+ "partial_images"
526
+ ]
527
+ }
528
+ ]
529
+ }
530
+ },
531
+ {
532
+ properties: {
533
+ stream: {
534
+ const: false
535
+ }
536
+ }
537
+ }
538
+ ]
539
+ },
540
+ outputSchema: {
541
+ type: "object",
542
+ properties: {
543
+ created: {
544
+ type: "integer",
545
+ title: "\u751F\u6210\u65F6\u95F4",
546
+ description: "\u4E0A\u6E38\u751F\u6210\u65F6\u95F4\uFF0CUnix \u65F6\u95F4\u6233\uFF0C\u5355\u4F4D\u4E3A\u79D2\u3002",
547
+ "x-ui": {
548
+ order: 0
549
+ }
550
+ },
551
+ data: {
552
+ type: "array",
553
+ title: "\u751F\u6210\u56FE\u7247",
554
+ items: {
555
+ type: "object",
556
+ properties: {
557
+ b64_json: {
558
+ type: "string",
559
+ title: "\u56FE\u7247 Base64",
560
+ description: "\u5B8C\u6574\u56FE\u7247\u7F16\u7801\uFF1B\u683C\u5F0F\u7531\u54CD\u5E94 output_format \u6216\u8BF7\u6C42 output_format \u786E\u5B9A\u3002",
561
+ "x-ui": {
562
+ order: 0
563
+ }
564
+ },
565
+ url: {
566
+ type: "string",
567
+ title: "\u56FE\u7247\u5730\u5740",
568
+ format: "uri",
569
+ "x-ui": {
570
+ order: 1
571
+ }
572
+ }
573
+ },
574
+ additionalProperties: true
575
+ },
576
+ "x-ui": {
577
+ order: 1
578
+ }
579
+ },
580
+ size: {
581
+ type: "string",
582
+ title: "\u5B9E\u9645\u8F93\u51FA\u5C3A\u5BF8",
583
+ "x-ui": {
584
+ order: 2
585
+ }
586
+ },
587
+ quality: {
588
+ type: "string",
589
+ title: "\u5B9E\u9645\u56FE\u7247\u8D28\u91CF",
590
+ "x-ui": {
591
+ order: 3
592
+ }
593
+ },
594
+ output_format: {
595
+ type: "string",
596
+ title: "\u5B9E\u9645\u56FE\u7247\u683C\u5F0F",
597
+ "x-ui": {
598
+ order: 4
599
+ }
600
+ },
601
+ background: {
602
+ type: "string",
603
+ title: "\u5B9E\u9645\u80CC\u666F",
604
+ "x-ui": {
605
+ order: 5
606
+ }
607
+ },
608
+ usage: {
609
+ type: "object",
610
+ title: "\u4E0A\u6E38\u7528\u91CF",
611
+ properties: {
612
+ input_tokens: {
613
+ type: "integer",
614
+ title: "\u8F93\u5165 Token \u603B\u6570",
615
+ minimum: 0,
616
+ "x-ui": {
617
+ order: 0
618
+ }
619
+ },
620
+ input_tokens_details: {
621
+ type: "object",
622
+ properties: {
623
+ text_tokens: {
624
+ type: "integer",
625
+ title: "\u6587\u672C Token",
626
+ minimum: 0,
627
+ "x-ui": {
628
+ order: 0
629
+ }
630
+ },
631
+ image_tokens: {
632
+ type: "integer",
633
+ title: "\u56FE\u7247 Token",
634
+ minimum: 0,
635
+ "x-ui": {
636
+ order: 1
637
+ }
638
+ }
639
+ },
640
+ additionalProperties: true,
641
+ title: "\u8F93\u5165 Token \u660E\u7EC6",
642
+ "x-ui": {
643
+ order: 1
644
+ }
645
+ },
646
+ output_tokens: {
647
+ type: "integer",
648
+ title: "\u8F93\u51FA Token \u603B\u6570",
649
+ minimum: 0,
650
+ "x-ui": {
651
+ order: 2
652
+ }
653
+ },
654
+ output_tokens_details: {
655
+ type: "object",
656
+ properties: {
657
+ text_tokens: {
658
+ type: "integer",
659
+ title: "\u6587\u672C Token",
660
+ minimum: 0,
661
+ "x-ui": {
662
+ order: 0
663
+ }
664
+ },
665
+ image_tokens: {
666
+ type: "integer",
667
+ title: "\u56FE\u7247 Token",
668
+ minimum: 0,
669
+ "x-ui": {
670
+ order: 1
671
+ }
672
+ }
673
+ },
674
+ additionalProperties: true,
675
+ title: "\u8F93\u51FA Token \u660E\u7EC6",
676
+ "x-ui": {
677
+ order: 3
678
+ }
679
+ },
680
+ total_tokens: {
681
+ type: "integer",
682
+ title: "Token \u603B\u6570",
683
+ minimum: 0,
684
+ "x-ui": {
685
+ order: 4
686
+ }
687
+ }
688
+ },
689
+ additionalProperties: true,
690
+ "x-ui": {
691
+ order: 6
692
+ }
693
+ }
694
+ },
695
+ required: [
696
+ "data"
697
+ ],
698
+ additionalProperties: true
699
+ },
700
+ metering: {
701
+ schemaVersion: 1,
702
+ kind: "token",
703
+ metrics: [
704
+ {
705
+ metric: "requests",
706
+ requirement: "required"
707
+ },
708
+ {
709
+ metric: "input_tokens",
710
+ requirement: "required"
711
+ },
712
+ {
713
+ metric: "output_tokens",
714
+ requirement: "required"
715
+ },
716
+ {
717
+ metric: "cached_input_tokens",
718
+ requirement: "informational"
719
+ },
720
+ {
721
+ metric: "input_images",
722
+ requirement: "informational"
723
+ },
724
+ {
725
+ metric: "output_images",
726
+ requirement: "informational"
727
+ }
728
+ ]
729
+ }
730
+ }
731
+ ]
732
+ },
733
+ {
734
+ id: "xai/grok-imagine-image-quality",
735
+ contractVersion: 2,
736
+ developer: "xai",
737
+ displayName: "grok-imagine-image-quality",
738
+ summary: "Grok \u9AD8\u8D28\u91CF\u56FE\u7247\u751F\u6210\u4E0E\u7F16\u8F91\uFF0C\u652F\u6301\u591A\u56FE\u53C2\u8003\u53CA 1K / 2K \u8F93\u51FA\u3002",
739
+ kind: "image",
740
+ family: "Grok Image Quality",
741
+ aliases: [
742
+ "grok-imagine-image-quality"
743
+ ],
744
+ capabilities: {
745
+ inputModalities: [
746
+ "text",
747
+ "image"
748
+ ],
749
+ outputModalities: [
750
+ "image"
751
+ ],
752
+ inputModes: [
753
+ "text-to-image",
754
+ "image-to-image"
755
+ ],
756
+ features: [
757
+ "structured-output"
758
+ ]
759
+ },
760
+ operations: [
761
+ {
762
+ operation: "image.generate",
763
+ inputModalities: [
764
+ "text",
765
+ "image"
766
+ ],
767
+ outputModalities: [
768
+ "image"
769
+ ],
770
+ inputSchema: {
771
+ type: "object",
772
+ properties: {
773
+ model: {
774
+ type: "string",
775
+ minLength: 1,
776
+ title: "\u6A21\u578B ID",
777
+ description: "Nexra \u516C\u5171\u6A21\u578B ID\uFF0C\u5FC5\u987B\u4E0E\u5916\u5C42 modelId \u76F8\u540C\u3002",
778
+ "x-ui": {
779
+ order: 0
780
+ },
781
+ const: "xai/grok-imagine-image-quality",
782
+ examples: [
783
+ "xai/grok-imagine-image-quality"
784
+ ]
785
+ },
786
+ prompt: {
787
+ type: "string",
788
+ minLength: 1,
789
+ title: "\u63D0\u793A\u8BCD",
790
+ description: "\u63CF\u8FF0\u8981\u751F\u6210\u7684\u56FE\u50CF\uFF0C\u6216\u5BF9\u53C2\u8003\u56FE\u7247\u7684\u4FEE\u6539\u8981\u6C42\u3002",
791
+ "x-ui": {
792
+ order: 1,
793
+ control: "textarea"
794
+ }
795
+ },
796
+ image: {
797
+ type: "object",
798
+ title: "\u5355\u5F20\u53C2\u8003\u56FE\u7247",
799
+ properties: {
800
+ url: {
801
+ type: "string",
802
+ format: "uri",
803
+ title: "\u56FE\u7247\u5730\u5740",
804
+ description: "\u516C\u7F51 URL \u6216\u5305\u542B\u5B8C\u6574\u524D\u7F00\u7684\u56FE\u7247 Data URL\u3002",
805
+ "x-ui": {
806
+ order: 0
807
+ }
808
+ },
809
+ image_url: {
810
+ type: "string",
811
+ format: "uri",
812
+ title: "\u56FE\u7247\u5730\u5740\u522B\u540D",
813
+ description: "\u4E0A\u6E38\u517C\u5BB9\u7684 url \u522B\u540D\uFF1B\u53EA\u586B\u5199\u4E00\u79CD\u56FE\u7247\u5730\u5740\u3002",
814
+ "x-ui": {
815
+ order: 1
816
+ }
817
+ },
818
+ file_id: {
819
+ type: [
820
+ "string",
821
+ "null"
822
+ ],
823
+ title: "\u4E0A\u6E38\u6587\u4EF6 ID",
824
+ description: "\u6240\u9009 xAI \u6E20\u9053\u8D26\u53F7\u4E2D\u7684\u56FE\u7247\u6587\u4EF6\uFF1B\u4E0D\u662F Nexra \u8D44\u6E90 ID\u3002",
825
+ "x-ui": {
826
+ order: 2
827
+ }
828
+ }
829
+ },
830
+ anyOf: [
831
+ {
832
+ required: [
833
+ "url"
834
+ ],
835
+ properties: {
836
+ file_id: {
837
+ type: "null"
838
+ }
839
+ },
840
+ not: {
841
+ required: [
842
+ "image_url"
843
+ ]
844
+ }
845
+ },
846
+ {
847
+ required: [
848
+ "image_url"
849
+ ],
850
+ properties: {
851
+ file_id: {
852
+ type: "null"
853
+ }
854
+ },
855
+ not: {
856
+ required: [
857
+ "url"
858
+ ]
859
+ }
860
+ },
861
+ {
862
+ required: [
863
+ "file_id"
864
+ ],
865
+ properties: {
866
+ file_id: {
867
+ type: "string",
868
+ minLength: 1
869
+ }
870
+ },
871
+ not: {
872
+ anyOf: [
873
+ {
874
+ required: [
875
+ "url"
876
+ ]
877
+ },
878
+ {
879
+ required: [
880
+ "image_url"
881
+ ]
882
+ }
883
+ ]
884
+ }
885
+ }
886
+ ],
887
+ additionalProperties: true,
888
+ description: "\u7528\u4E8E\u56FE\u7247\u7F16\u8F91\uFF1B\u4E0E images \u4E8C\u9009\u4E00\u3002",
889
+ "x-ui": {
890
+ order: 2
891
+ }
892
+ },
893
+ images: {
894
+ type: "array",
895
+ minItems: 1,
896
+ maxItems: 3,
897
+ items: {
898
+ type: "object",
899
+ title: "\u56FE\u7247\u5F15\u7528",
900
+ properties: {
901
+ url: {
902
+ type: "string",
903
+ format: "uri",
904
+ title: "\u56FE\u7247\u5730\u5740",
905
+ description: "\u516C\u7F51 URL \u6216\u5305\u542B\u5B8C\u6574\u524D\u7F00\u7684\u56FE\u7247 Data URL\u3002",
906
+ "x-ui": {
907
+ order: 0
908
+ }
909
+ },
910
+ image_url: {
911
+ type: "string",
912
+ format: "uri",
913
+ title: "\u56FE\u7247\u5730\u5740\u522B\u540D",
914
+ description: "\u4E0A\u6E38\u517C\u5BB9\u7684 url \u522B\u540D\uFF1B\u53EA\u586B\u5199\u4E00\u79CD\u56FE\u7247\u5730\u5740\u3002",
915
+ "x-ui": {
916
+ order: 1
917
+ }
918
+ },
919
+ file_id: {
920
+ type: [
921
+ "string",
922
+ "null"
923
+ ],
924
+ title: "\u4E0A\u6E38\u6587\u4EF6 ID",
925
+ description: "\u6240\u9009 xAI \u6E20\u9053\u8D26\u53F7\u4E2D\u7684\u56FE\u7247\u6587\u4EF6\uFF1B\u4E0D\u662F Nexra \u8D44\u6E90 ID\u3002",
926
+ "x-ui": {
927
+ order: 2
928
+ }
929
+ }
930
+ },
931
+ anyOf: [
932
+ {
933
+ required: [
934
+ "url"
935
+ ],
936
+ properties: {
937
+ file_id: {
938
+ type: "null"
939
+ }
940
+ },
941
+ not: {
942
+ required: [
943
+ "image_url"
944
+ ]
945
+ }
946
+ },
947
+ {
948
+ required: [
949
+ "image_url"
950
+ ],
951
+ properties: {
952
+ file_id: {
953
+ type: "null"
954
+ }
955
+ },
956
+ not: {
957
+ required: [
958
+ "url"
959
+ ]
960
+ }
961
+ },
962
+ {
963
+ required: [
964
+ "file_id"
965
+ ],
966
+ properties: {
967
+ file_id: {
968
+ type: "string",
969
+ minLength: 1
970
+ }
971
+ },
972
+ not: {
973
+ anyOf: [
974
+ {
975
+ required: [
976
+ "url"
977
+ ]
978
+ },
979
+ {
980
+ required: [
981
+ "image_url"
982
+ ]
983
+ }
984
+ ]
985
+ }
986
+ }
987
+ ],
988
+ additionalProperties: true
989
+ },
990
+ title: "\u591A\u5F20\u53C2\u8003\u56FE\u7247",
991
+ description: "\u6309\u8F93\u5165\u987A\u5E8F\u63D0\u4F9B\u56FE\u7247\u5F15\u7528\uFF0C\u4E0E image \u4E8C\u9009\u4E00\u3002",
992
+ "x-ui": {
993
+ order: 3
994
+ }
995
+ },
996
+ aspect_ratio: {
997
+ type: "string",
998
+ description: "\u8F93\u51FA\u5BBD\u9AD8\u6BD4\uFF1B\u56FE\u7247\u7F16\u8F91\u9ED8\u8BA4\u8DDF\u968F\u7B2C\u4E00\u5F20\u8F93\u5165\u56FE\uFF0C\u4E5F\u53EF\u663E\u5F0F\u6307\u5B9A\u5982 1:1\u300116:9\u3002",
999
+ enum: [
1000
+ "auto",
1001
+ "1:1",
1002
+ "16:9",
1003
+ "9:16",
1004
+ "4:3",
1005
+ "3:4",
1006
+ "3:2",
1007
+ "2:3",
1008
+ "2:1",
1009
+ "1:2",
1010
+ "19.5:9",
1011
+ "9:19.5",
1012
+ "20:9",
1013
+ "9:20",
1014
+ "21:9",
1015
+ "5:2"
1016
+ ],
1017
+ "x-ui": {
1018
+ order: 4,
1019
+ control: "select"
1020
+ },
1021
+ title: "\u753B\u9762\u6BD4\u4F8B"
1022
+ },
1023
+ resolution: {
1024
+ type: "string",
1025
+ enum: [
1026
+ "1k",
1027
+ "2k"
1028
+ ],
1029
+ title: "\u8F93\u51FA\u5206\u8FA8\u7387",
1030
+ "x-ui": {
1031
+ order: 5,
1032
+ control: "select"
1033
+ }
1034
+ },
1035
+ n: {
1036
+ type: [
1037
+ "integer",
1038
+ "null"
1039
+ ],
1040
+ minimum: 1,
1041
+ maximum: 10,
1042
+ title: "\u8F93\u51FA\u5F20\u6570",
1043
+ "x-ui": {
1044
+ order: 6,
1045
+ control: "number"
1046
+ }
1047
+ },
1048
+ response_format: {
1049
+ type: [
1050
+ "string",
1051
+ "null"
1052
+ ],
1053
+ enum: [
1054
+ "url",
1055
+ "b64_json",
1056
+ null
1057
+ ],
1058
+ title: "\u56FE\u7247\u8FD4\u56DE\u683C\u5F0F",
1059
+ description: "url \u8FD4\u56DE\u56FE\u7247\u5730\u5740\uFF1Bb64_json \u8FD4\u56DE Base64\u3002",
1060
+ "x-ui": {
1061
+ order: 7,
1062
+ control: "select",
1063
+ optionLabels: {
1064
+ url: "\u56FE\u7247 URL",
1065
+ b64_json: "Base64",
1066
+ null: "\u4E0A\u6E38\u9ED8\u8BA4"
1067
+ }
1068
+ }
1069
+ },
1070
+ user: {
1071
+ type: [
1072
+ "string",
1073
+ "null"
1074
+ ],
1075
+ title: "\u7EC8\u7AEF\u7528\u6237\u6807\u8BC6",
1076
+ description: "\u4F20\u7ED9 xAI \u7684\u7EC8\u7AEF\u7528\u6237\u6807\u8BC6\uFF0C\u7528\u4E8E\u6EE5\u7528\u76D1\u6D4B\u3002",
1077
+ "x-ui": {
1078
+ order: 8
1079
+ }
1080
+ }
1081
+ },
1082
+ required: [
1083
+ "model",
1084
+ "prompt"
1085
+ ],
1086
+ additionalProperties: true,
1087
+ allOf: [
1088
+ {
1089
+ not: {
1090
+ required: [
1091
+ "image",
1092
+ "images"
1093
+ ]
1094
+ }
1095
+ },
1096
+ {
1097
+ not: {
1098
+ anyOf: [
1099
+ {
1100
+ required: [
1101
+ "texts"
1102
+ ]
1103
+ },
1104
+ {
1105
+ required: [
1106
+ "ratio"
1107
+ ]
1108
+ },
1109
+ {
1110
+ required: [
1111
+ "generate_count"
1112
+ ]
1113
+ },
1114
+ {
1115
+ required: [
1116
+ "callback_url"
1117
+ ]
1118
+ }
1119
+ ]
1120
+ }
1121
+ }
1122
+ ]
1123
+ },
1124
+ outputSchema: {
1125
+ type: "object",
1126
+ required: [
1127
+ "data"
1128
+ ],
1129
+ additionalProperties: true,
1130
+ properties: {
1131
+ data: {
1132
+ type: "array",
1133
+ title: "\u751F\u6210\u56FE\u7247",
1134
+ items: {
1135
+ type: "object",
1136
+ additionalProperties: true,
1137
+ properties: {
1138
+ url: {
1139
+ type: [
1140
+ "string",
1141
+ "null"
1142
+ ],
1143
+ title: "\u56FE\u7247\u5730\u5740",
1144
+ "x-ui": {
1145
+ order: 0
1146
+ }
1147
+ },
1148
+ b64_json: {
1149
+ type: [
1150
+ "string",
1151
+ "null"
1152
+ ],
1153
+ title: "\u56FE\u7247 Base64",
1154
+ description: "\u4E0D\u5305\u542B Data URL \u524D\u7F00\u7684\u56FE\u7247\u5185\u5BB9\u3002",
1155
+ "x-ui": {
1156
+ order: 1
1157
+ }
1158
+ },
1159
+ mime_type: {
1160
+ type: [
1161
+ "string",
1162
+ "null"
1163
+ ],
1164
+ title: "\u5A92\u4F53\u7C7B\u578B",
1165
+ "x-ui": {
1166
+ order: 2
1167
+ }
1168
+ },
1169
+ revised_prompt: {
1170
+ type: [
1171
+ "string",
1172
+ "null"
1173
+ ],
1174
+ title: "\u4E0A\u6E38\u8C03\u6574\u540E\u7684\u63D0\u793A\u8BCD",
1175
+ "x-ui": {
1176
+ order: 3
1177
+ }
1178
+ },
1179
+ file_output: {
1180
+ type: "object",
1181
+ title: "\u4E0A\u6E38\u6587\u4EF6\u4FDD\u5B58\u7ED3\u679C",
1182
+ additionalProperties: true,
1183
+ properties: {
1184
+ file_id: {
1185
+ type: "string",
1186
+ title: "\u4E0A\u6E38\u6587\u4EF6 ID"
1187
+ },
1188
+ filename: {
1189
+ type: "string",
1190
+ title: "\u6587\u4EF6\u540D"
1191
+ },
1192
+ public_url: {
1193
+ type: [
1194
+ "string",
1195
+ "null"
1196
+ ],
1197
+ title: "\u516C\u5F00\u5730\u5740"
1198
+ },
1199
+ expires_at: {
1200
+ type: [
1201
+ "integer",
1202
+ "null"
1203
+ ],
1204
+ title: "\u6587\u4EF6\u8FC7\u671F\u65F6\u95F4",
1205
+ description: "Unix \u65F6\u95F4\u6233\uFF0C\u5355\u4F4D\u4E3A\u79D2\u3002"
1206
+ },
1207
+ public_url_expires_at: {
1208
+ type: [
1209
+ "integer",
1210
+ "null"
1211
+ ],
1212
+ title: "\u516C\u5F00\u5730\u5740\u8FC7\u671F\u65F6\u95F4",
1213
+ description: "Unix \u65F6\u95F4\u6233\uFF0C\u5355\u4F4D\u4E3A\u79D2\u3002"
1214
+ },
1215
+ public_url_error: {
1216
+ type: [
1217
+ "string",
1218
+ "null"
1219
+ ],
1220
+ title: "\u516C\u5F00\u5730\u5740\u521B\u5EFA\u9519\u8BEF"
1221
+ }
1222
+ },
1223
+ "x-ui": {
1224
+ order: 4
1225
+ }
1226
+ },
1227
+ storage_error: {
1228
+ type: [
1229
+ "string",
1230
+ "null"
1231
+ ],
1232
+ title: "\u4E0A\u6E38\u6587\u4EF6\u4FDD\u5B58\u9519\u8BEF",
1233
+ "x-ui": {
1234
+ order: 5
1235
+ }
1236
+ }
1237
+ }
1238
+ },
1239
+ "x-ui": {
1240
+ order: 0
1241
+ }
1242
+ },
1243
+ usage: {
1244
+ type: "object",
1245
+ title: "\u4E0A\u6E38\u7528\u91CF",
1246
+ additionalProperties: true,
1247
+ properties: {
1248
+ input_tokens: {
1249
+ type: [
1250
+ "integer",
1251
+ "null"
1252
+ ],
1253
+ title: "\u8F93\u5165 Token"
1254
+ },
1255
+ output_tokens: {
1256
+ type: [
1257
+ "integer",
1258
+ "null"
1259
+ ],
1260
+ title: "\u8F93\u51FA Token"
1261
+ },
1262
+ total_tokens: {
1263
+ type: [
1264
+ "integer",
1265
+ "null"
1266
+ ],
1267
+ title: "\u603B Token"
1268
+ },
1269
+ cost_in_usd_ticks: {
1270
+ type: "integer",
1271
+ title: "\u4E0A\u6E38\u91D1\u989D\u5355\u4F4D",
1272
+ description: "xAI \u7684 USD ticks\uFF1B\u4E0D\u662F Nexra \u5411\u7528\u6237\u6536\u53D6\u7684\u8D39\u7528\u3002"
1273
+ }
1274
+ },
1275
+ "x-ui": {
1276
+ order: 1
1277
+ }
1278
+ }
1279
+ }
1280
+ },
1281
+ metering: {
1282
+ schemaVersion: 1,
1283
+ kind: "non_token",
1284
+ metrics: [
1285
+ {
1286
+ metric: "requests",
1287
+ requirement: "required"
1288
+ },
1289
+ {
1290
+ metric: "input_images",
1291
+ requirement: "required"
1292
+ },
1293
+ {
1294
+ metric: "output_images",
1295
+ requirement: "required"
1296
+ }
1297
+ ]
1298
+ }
1299
+ }
1300
+ ]
1301
+ }
1302
+ ];
1303
+
1304
+ // src/errors.ts
1305
+ var NexraApiError = class extends Error {
1306
+ status;
1307
+ code;
1308
+ requestId;
1309
+ retryable;
1310
+ details;
1311
+ constructor(message, options) {
1312
+ super(message);
1313
+ this.name = "NexraApiError";
1314
+ this.status = options.status;
1315
+ this.code = options.code ?? "api_error";
1316
+ this.requestId = options.requestId;
1317
+ this.retryable = options.retryable ?? false;
1318
+ this.details = options.details;
1319
+ }
1320
+ };
1321
+ var NexraTaskError = class extends Error {
1322
+ task;
1323
+ constructor(task) {
1324
+ super(task.error?.message ?? `Task ${task.id} ended with status ${task.status}`);
1325
+ this.name = "NexraTaskError";
1326
+ this.task = task;
1327
+ }
1328
+ };
1329
+ var NexraWaitTimeoutError = class extends Error {
1330
+ taskId;
1331
+ timeoutMs;
1332
+ constructor(taskId, timeoutMs) {
1333
+ super(`Timed out waiting ${timeoutMs}ms for task ${taskId}`);
1334
+ this.name = "NexraWaitTimeoutError";
1335
+ this.taskId = taskId;
1336
+ this.timeoutMs = timeoutMs;
1337
+ }
1338
+ };
1339
+
1340
+ // src/generated/version.generated.ts
1341
+ var SDK_VERSION = "0.1.0-alpha.1";
1342
+
1343
+ // src/transport.ts
1344
+ var DEFAULT_BASE_URL = "https://api.nexra-ai.com/v1";
1345
+ var HttpTransport = class {
1346
+ baseUrl;
1347
+ apiKey;
1348
+ fetchImplementation;
1349
+ defaultHeaders;
1350
+ maxRetries;
1351
+ constructor(options) {
1352
+ this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\/$/, "");
1353
+ this.apiKey = options.apiKey;
1354
+ this.fetchImplementation = options.fetch ?? globalThis.fetch.bind(globalThis);
1355
+ this.defaultHeaders = new Headers(options.headers);
1356
+ this.maxRetries = options.maxRetries ?? 2;
1357
+ if (!this.fetchImplementation) {
1358
+ throw new TypeError("A Web-compatible fetch implementation is required");
1359
+ }
1360
+ }
1361
+ url(path) {
1362
+ return `${this.baseUrl}${path.startsWith("/") ? path : `/${path}`}`;
1363
+ }
1364
+ async json(path, init = {}, options = {}) {
1365
+ const response = await this.response(path, init, options);
1366
+ if (response.status === 204) return void 0;
1367
+ return await response.json();
1368
+ }
1369
+ async response(path, init = {}, options = {}) {
1370
+ const headers = new Headers(this.defaultHeaders);
1371
+ new Headers(init.headers).forEach((value, key) => headers.set(key, value));
1372
+ if (this.apiKey && !headers.has("authorization")) {
1373
+ headers.set("authorization", `Bearer ${this.apiKey}`);
1374
+ }
1375
+ if (!headers.has("x-nexra-client-request-id")) {
1376
+ headers.set("x-nexra-client-request-id", crypto.randomUUID());
1377
+ }
1378
+ headers.set("x-nexra-sdk", `typescript/${SDK_VERSION}`);
1379
+ const retryable = options.retryable ?? isSafeMethod(init.method);
1380
+ const attempts = retryable ? this.maxRetries + 1 : 1;
1381
+ let lastError;
1382
+ for (let attempt = 0; attempt < attempts; attempt += 1) {
1383
+ try {
1384
+ const response = await this.fetchImplementation(this.url(path), {
1385
+ ...init,
1386
+ headers
1387
+ });
1388
+ if (response.ok) return response;
1389
+ if (attempt + 1 < attempts && shouldRetryStatus(response.status)) {
1390
+ await waitForRetry(response, attempt, init.signal);
1391
+ continue;
1392
+ }
1393
+ throw await createApiError(response);
1394
+ } catch (error) {
1395
+ if (error instanceof NexraApiError) throw error;
1396
+ if (init.signal?.aborted) throw init.signal.reason ?? error;
1397
+ lastError = error;
1398
+ if (attempt + 1 < attempts) {
1399
+ await sleep(200 * 2 ** attempt, init.signal);
1400
+ continue;
1401
+ }
1402
+ }
1403
+ }
1404
+ throw lastError instanceof Error ? lastError : new Error("Nexra request failed without an error response");
1405
+ }
1406
+ };
1407
+ function jsonBody(value) {
1408
+ return {
1409
+ body: JSON.stringify(value),
1410
+ headers: { "content-type": "application/json" }
1411
+ };
1412
+ }
1413
+ function queryString(values) {
1414
+ const params = new URLSearchParams();
1415
+ for (const [key, value] of Object.entries(values)) {
1416
+ if (value !== void 0) params.set(key, String(value));
1417
+ }
1418
+ const query = params.toString();
1419
+ return query ? `?${query}` : "";
1420
+ }
1421
+ function sleep(milliseconds, signal) {
1422
+ if (signal?.aborted) return Promise.reject(signal.reason);
1423
+ return new Promise((resolve, reject) => {
1424
+ const timeout = setTimeout(resolve, milliseconds);
1425
+ signal?.addEventListener(
1426
+ "abort",
1427
+ () => {
1428
+ clearTimeout(timeout);
1429
+ reject(signal.reason);
1430
+ },
1431
+ { once: true }
1432
+ );
1433
+ });
1434
+ }
1435
+ async function createApiError(response) {
1436
+ let payload;
1437
+ try {
1438
+ payload = await response.clone().json();
1439
+ } catch {
1440
+ }
1441
+ const error = payload?.error;
1442
+ return new NexraApiError(error?.message ?? `Nexra API returned HTTP ${response.status}`, {
1443
+ status: response.status,
1444
+ code: error?.code,
1445
+ requestId: error?.requestId ?? response.headers.get("x-request-id") ?? void 0,
1446
+ retryable: error?.retryable ?? shouldRetryStatus(response.status),
1447
+ details: error?.details
1448
+ });
1449
+ }
1450
+ function isSafeMethod(method) {
1451
+ const normalized = (method ?? "GET").toUpperCase();
1452
+ return normalized === "GET" || normalized === "HEAD" || normalized === "OPTIONS";
1453
+ }
1454
+ function shouldRetryStatus(status) {
1455
+ return status === 408 || status === 409 || status === 429 || status >= 500;
1456
+ }
1457
+ async function waitForRetry(response, attempt, signal) {
1458
+ const retryAfter = response.headers.get("retry-after");
1459
+ const seconds = retryAfter ? Number(retryAfter) : Number.NaN;
1460
+ await sleep(Number.isFinite(seconds) ? seconds * 1e3 : 200 * 2 ** attempt, signal);
1461
+ }
1462
+
1463
+ // src/catalog.ts
1464
+ var modelSpecs = deepFreeze(structuredClone(public_catalog_generated_default));
1465
+ var byIdentifier = /* @__PURE__ */ new Map();
1466
+ for (const model of modelSpecs) {
1467
+ for (const identifier of [model.id, ...model.aliases]) {
1468
+ if (byIdentifier.has(identifier)) throw new Error(`Duplicate public SDK model identifier: ${identifier}`);
1469
+ byIdentifier.set(identifier, model);
1470
+ }
1471
+ }
1472
+ var CatalogClient = class {
1473
+ constructor(transport) {
1474
+ this.transport = transport;
1475
+ }
1476
+ transport;
1477
+ quote(request, signal) {
1478
+ return this.transport.json(
1479
+ "/catalog/quotes",
1480
+ { method: "POST", ...jsonBody(request), signal },
1481
+ { retryable: false }
1482
+ );
1483
+ }
1484
+ };
1485
+ function getModelSpec(modelId) {
1486
+ return byIdentifier.get(modelId);
1487
+ }
1488
+ function listModelSpecs(filter = {}) {
1489
+ return modelSpecs.filter(
1490
+ (model) => (!filter.kind || model.kind === filter.kind) && (!filter.operation || model.operations.some((operation) => operation.operation === filter.operation))
1491
+ );
1492
+ }
1493
+ function deepFreeze(value) {
1494
+ if (value && typeof value === "object" && !Object.isFrozen(value)) {
1495
+ Object.freeze(value);
1496
+ for (const child of Object.values(value)) deepFreeze(child);
1497
+ }
1498
+ return value;
1499
+ }
1500
+
1501
+ export {
1502
+ NexraApiError,
1503
+ NexraTaskError,
1504
+ NexraWaitTimeoutError,
1505
+ HttpTransport,
1506
+ jsonBody,
1507
+ queryString,
1508
+ sleep,
1509
+ CatalogClient,
1510
+ getModelSpec,
1511
+ listModelSpecs
1512
+ };