@brotu/ai 0.1.0 → 0.3.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.
package/dist/catalog.cjs CHANGED
@@ -308,6 +308,55 @@ var GOOGLE_VIDEO_MODELS = {
308
308
  conversationalEditing: true
309
309
  }
310
310
  };
311
+ var GOOGLE_TEXT_MODELS = {
312
+ "gemini-3.7-flash": { usdPerMillionOutput: 3.75 },
313
+ "gemini-3.6-flash": { usdPerMillionOutput: 3.75 },
314
+ "gemini-3.5-flash": { usdPerMillionOutput: 9 },
315
+ "gemini-3.5-flash-lite": {},
316
+ "gemini-3.1-flash-lite": {},
317
+ "gemini-3.1-pro-preview": { usdPerMillionOutput: 12 },
318
+ "gemini-3-flash-preview": {},
319
+ "gemini-2.5-pro": {},
320
+ "gemini-2.5-flash": {},
321
+ "gemini-2.5-flash-lite": {}
322
+ };
323
+ var GOOGLE_TTS_VOICES = [
324
+ "Zephyr",
325
+ "Puck",
326
+ "Charon",
327
+ "Kore",
328
+ "Fenrir",
329
+ "Leda",
330
+ "Orus",
331
+ "Aoede",
332
+ "Callirrhoe",
333
+ "Autonoe",
334
+ "Enceladus",
335
+ "Iapetus",
336
+ "Umbriel",
337
+ "Algieba",
338
+ "Despina",
339
+ "Erinome",
340
+ "Algenib",
341
+ "Rasalgethi",
342
+ "Laomedeia",
343
+ "Achernar",
344
+ "Alnilam",
345
+ "Schedar",
346
+ "Gacrux",
347
+ "Pulcherrima",
348
+ "Achird",
349
+ "Zubenelgenubi",
350
+ "Vindemiatrix",
351
+ "Sadachbia",
352
+ "Sadaltager",
353
+ "Sulafat"
354
+ ];
355
+ var GOOGLE_AUDIO_MODELS = {
356
+ "gemini-3.1-flash-tts-preview": { voices: GOOGLE_TTS_VOICES },
357
+ "gemini-2.5-flash-preview-tts": { voices: GOOGLE_TTS_VOICES },
358
+ "gemini-2.5-pro-preview-tts": { voices: GOOGLE_TTS_VOICES }
359
+ };
311
360
  var GOOGLE_CATALOG = [
312
361
  ...Object.entries(GOOGLE_IMAGE_MODELS).map(
313
362
  ([id, binding]) => ({
@@ -344,6 +393,35 @@ var GOOGLE_CATALOG = [
344
393
  byResolution: binding.usdByResolution
345
394
  }
346
395
  })
396
+ ),
397
+ ...Object.entries(GOOGLE_TEXT_MODELS).map(
398
+ ([id, binding]) => ({
399
+ id,
400
+ name: id,
401
+ category: "text",
402
+ inputType: "image_optional",
403
+ nodeTypes: ["text"],
404
+ creditsPerUnit: 0,
405
+ creditUnit: "token",
406
+ provider: "google",
407
+ pricing: binding.usdPerMillionOutput === void 0 ? void 0 : {
408
+ unit: "token",
409
+ usdPerUnit: binding.usdPerMillionOutput / 1e6
410
+ }
411
+ })
412
+ ),
413
+ ...Object.entries(GOOGLE_AUDIO_MODELS).map(
414
+ ([id, binding]) => ({
415
+ id,
416
+ name: id,
417
+ category: "audio",
418
+ inputType: "text_only",
419
+ nodeTypes: ["text"],
420
+ creditsPerUnit: 0,
421
+ creditUnit: "character",
422
+ provider: "google",
423
+ description: `Voices: ${binding.voices.join(", ")}`
424
+ })
347
425
  )
348
426
  ];
349
427
 
@@ -567,23 +645,42 @@ var OPENAI_IMAGE_MODELS = {
567
645
  usd: { low: 0.011, medium: 0.042, high: 0.167 }
568
646
  }
569
647
  };
570
- var OPENAI_CATALOG = Object.entries(
571
- OPENAI_IMAGE_MODELS
572
- ).map(([id, binding]) => ({
573
- id,
574
- name: id,
575
- category: "image",
576
- inputType: "image_optional",
577
- nodeTypes: ["image_gen"],
578
- creditsPerUnit: 0,
579
- creditUnit: "image",
580
- supportedResolutions: binding.sizes === "any" ? void 0 : binding.sizes,
581
- provider: "openai",
582
- // Medium is the sane middle; `quality: auto` can silently pick high, which
583
- // is 35x the low tier.
584
- pricing: { usdPerUnit: binding.usd.medium, unit: "image" },
585
- description: binding.shutdownOn ? `Deprecated \u2014 OpenAI shuts this down on ${binding.shutdownOn}.` : void 0
586
- }));
648
+ var OPENAI_TEXT_MODELS = {
649
+ "gpt-5.6-sol": { usdPerMillionOutput: 30 },
650
+ "gpt-5.6-terra": { usdPerMillionOutput: 12 },
651
+ "gpt-5.6-luna": { usdPerMillionOutput: 1.2 }
652
+ };
653
+ var OPENAI_CATALOG = [
654
+ ...Object.entries(OPENAI_IMAGE_MODELS).map(([id, binding]) => ({
655
+ id,
656
+ name: id,
657
+ category: "image",
658
+ inputType: "image_optional",
659
+ nodeTypes: ["image_gen"],
660
+ creditsPerUnit: 0,
661
+ creditUnit: "image",
662
+ supportedResolutions: binding.sizes === "any" ? void 0 : binding.sizes,
663
+ provider: "openai",
664
+ // Medium is the sane middle; `quality: auto` can silently pick high, which
665
+ // is 35x the low tier.
666
+ pricing: { usdPerUnit: binding.usd.medium, unit: "image" },
667
+ description: binding.shutdownOn ? `Deprecated \u2014 OpenAI shuts this down on ${binding.shutdownOn}.` : void 0
668
+ })),
669
+ ...Object.entries(OPENAI_TEXT_MODELS).map(([id, binding]) => ({
670
+ id,
671
+ name: id,
672
+ category: "text",
673
+ inputType: "image_optional",
674
+ nodeTypes: ["text"],
675
+ creditsPerUnit: 0,
676
+ creditUnit: "token",
677
+ provider: "openai",
678
+ pricing: {
679
+ unit: "token",
680
+ usdPerUnit: binding.usdPerMillionOutput / 1e6
681
+ }
682
+ }))
683
+ ];
587
684
 
588
685
  // src/providers/qwen.models.ts
589
686
  var KF2V_PATH = "/api/v1/services/aigc/image2video/video-synthesis";
package/dist/catalog.js CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  registerModels,
8
8
  resetCatalog,
9
9
  resolveProvider
10
- } from "./chunk-GKLTQ55S.js";
10
+ } from "./chunk-PL534BFN.js";
11
11
  export {
12
12
  getAvailableModels,
13
13
  getModel,
@@ -296,6 +296,55 @@ var GOOGLE_VIDEO_MODELS = {
296
296
  conversationalEditing: true
297
297
  }
298
298
  };
299
+ var GOOGLE_TEXT_MODELS = {
300
+ "gemini-3.7-flash": { usdPerMillionOutput: 3.75 },
301
+ "gemini-3.6-flash": { usdPerMillionOutput: 3.75 },
302
+ "gemini-3.5-flash": { usdPerMillionOutput: 9 },
303
+ "gemini-3.5-flash-lite": {},
304
+ "gemini-3.1-flash-lite": {},
305
+ "gemini-3.1-pro-preview": { usdPerMillionOutput: 12 },
306
+ "gemini-3-flash-preview": {},
307
+ "gemini-2.5-pro": {},
308
+ "gemini-2.5-flash": {},
309
+ "gemini-2.5-flash-lite": {}
310
+ };
311
+ var GOOGLE_TTS_VOICES = [
312
+ "Zephyr",
313
+ "Puck",
314
+ "Charon",
315
+ "Kore",
316
+ "Fenrir",
317
+ "Leda",
318
+ "Orus",
319
+ "Aoede",
320
+ "Callirrhoe",
321
+ "Autonoe",
322
+ "Enceladus",
323
+ "Iapetus",
324
+ "Umbriel",
325
+ "Algieba",
326
+ "Despina",
327
+ "Erinome",
328
+ "Algenib",
329
+ "Rasalgethi",
330
+ "Laomedeia",
331
+ "Achernar",
332
+ "Alnilam",
333
+ "Schedar",
334
+ "Gacrux",
335
+ "Pulcherrima",
336
+ "Achird",
337
+ "Zubenelgenubi",
338
+ "Vindemiatrix",
339
+ "Sadachbia",
340
+ "Sadaltager",
341
+ "Sulafat"
342
+ ];
343
+ var GOOGLE_AUDIO_MODELS = {
344
+ "gemini-3.1-flash-tts-preview": { voices: GOOGLE_TTS_VOICES },
345
+ "gemini-2.5-flash-preview-tts": { voices: GOOGLE_TTS_VOICES },
346
+ "gemini-2.5-pro-preview-tts": { voices: GOOGLE_TTS_VOICES }
347
+ };
299
348
  var GOOGLE_CATALOG = [
300
349
  ...Object.entries(GOOGLE_IMAGE_MODELS).map(
301
350
  ([id, binding]) => ({
@@ -332,6 +381,35 @@ var GOOGLE_CATALOG = [
332
381
  byResolution: binding.usdByResolution
333
382
  }
334
383
  })
384
+ ),
385
+ ...Object.entries(GOOGLE_TEXT_MODELS).map(
386
+ ([id, binding]) => ({
387
+ id,
388
+ name: id,
389
+ category: "text",
390
+ inputType: "image_optional",
391
+ nodeTypes: ["text"],
392
+ creditsPerUnit: 0,
393
+ creditUnit: "token",
394
+ provider: "google",
395
+ pricing: binding.usdPerMillionOutput === void 0 ? void 0 : {
396
+ unit: "token",
397
+ usdPerUnit: binding.usdPerMillionOutput / 1e6
398
+ }
399
+ })
400
+ ),
401
+ ...Object.entries(GOOGLE_AUDIO_MODELS).map(
402
+ ([id, binding]) => ({
403
+ id,
404
+ name: id,
405
+ category: "audio",
406
+ inputType: "text_only",
407
+ nodeTypes: ["text"],
408
+ creditsPerUnit: 0,
409
+ creditUnit: "character",
410
+ provider: "google",
411
+ description: `Voices: ${binding.voices.join(", ")}`
412
+ })
335
413
  )
336
414
  ];
337
415
 
@@ -722,23 +800,42 @@ var OPENAI_IMAGE_MODELS = {
722
800
  usd: { low: 0.011, medium: 0.042, high: 0.167 }
723
801
  }
724
802
  };
725
- var OPENAI_CATALOG = Object.entries(
726
- OPENAI_IMAGE_MODELS
727
- ).map(([id, binding]) => ({
728
- id,
729
- name: id,
730
- category: "image",
731
- inputType: "image_optional",
732
- nodeTypes: ["image_gen"],
733
- creditsPerUnit: 0,
734
- creditUnit: "image",
735
- supportedResolutions: binding.sizes === "any" ? void 0 : binding.sizes,
736
- provider: "openai",
737
- // Medium is the sane middle; `quality: auto` can silently pick high, which
738
- // is 35x the low tier.
739
- pricing: { usdPerUnit: binding.usd.medium, unit: "image" },
740
- description: binding.shutdownOn ? `Deprecated \u2014 OpenAI shuts this down on ${binding.shutdownOn}.` : void 0
741
- }));
803
+ var OPENAI_TEXT_MODELS = {
804
+ "gpt-5.6-sol": { usdPerMillionOutput: 30 },
805
+ "gpt-5.6-terra": { usdPerMillionOutput: 12 },
806
+ "gpt-5.6-luna": { usdPerMillionOutput: 1.2 }
807
+ };
808
+ var OPENAI_CATALOG = [
809
+ ...Object.entries(OPENAI_IMAGE_MODELS).map(([id, binding]) => ({
810
+ id,
811
+ name: id,
812
+ category: "image",
813
+ inputType: "image_optional",
814
+ nodeTypes: ["image_gen"],
815
+ creditsPerUnit: 0,
816
+ creditUnit: "image",
817
+ supportedResolutions: binding.sizes === "any" ? void 0 : binding.sizes,
818
+ provider: "openai",
819
+ // Medium is the sane middle; `quality: auto` can silently pick high, which
820
+ // is 35x the low tier.
821
+ pricing: { usdPerUnit: binding.usd.medium, unit: "image" },
822
+ description: binding.shutdownOn ? `Deprecated \u2014 OpenAI shuts this down on ${binding.shutdownOn}.` : void 0
823
+ })),
824
+ ...Object.entries(OPENAI_TEXT_MODELS).map(([id, binding]) => ({
825
+ id,
826
+ name: id,
827
+ category: "text",
828
+ inputType: "image_optional",
829
+ nodeTypes: ["text"],
830
+ creditsPerUnit: 0,
831
+ creditUnit: "token",
832
+ provider: "openai",
833
+ pricing: {
834
+ unit: "token",
835
+ usdPerUnit: binding.usdPerMillionOutput / 1e6
836
+ }
837
+ }))
838
+ ];
742
839
 
743
840
  // src/providers/qwen.models.ts
744
841
  var VIDEO_PATH = "/api/v1/services/aigc/video-generation/video-synthesis";
@@ -1150,6 +1247,9 @@ export {
1150
1247
  ELEVENLABS_CATALOG,
1151
1248
  GOOGLE_IMAGE_MODELS,
1152
1249
  GOOGLE_VIDEO_MODELS,
1250
+ GOOGLE_TEXT_MODELS,
1251
+ GOOGLE_TTS_VOICES,
1252
+ GOOGLE_AUDIO_MODELS,
1153
1253
  GOOGLE_CATALOG,
1154
1254
  KLING_MODELS,
1155
1255
  KLING_VOICES,
@@ -1157,6 +1257,7 @@ export {
1157
1257
  KLING_CATALOG,
1158
1258
  KLING_CAPABILITIES,
1159
1259
  OPENAI_IMAGE_MODELS,
1260
+ OPENAI_TEXT_MODELS,
1160
1261
  OPENAI_CATALOG,
1161
1262
  QWEN_VIDEO_MODELS,
1162
1263
  videoPathFor,
package/dist/client.d.ts CHANGED
@@ -2,6 +2,7 @@ import { getModel } from "./catalog";
2
2
  import type { AIModelConfig } from "./constants/model.types";
3
3
  import { type AIError, type Generation, type Result } from "./helpers/result";
4
4
  import { type Job, type JobSnapshot } from "./lib/jobs";
5
+ import { type WebhookConfig } from "./lib/webhook";
5
6
  import type { AudioGenerationParams, CostEstimate, GenerationOutput, GenerationParams, GenerationType, ImageGenerationParams, TextGenerationParams, VideoGenerationParams } from "./ports/content-generator.port";
6
7
  import { type AvatarInput, type ImageOmniInput, type MotionControlInput, type OmniVideoInput, type OutpaintingInput } from "./providers/kling.models";
7
8
  import type { BrotuAIOptions } from "./types";
@@ -35,6 +36,15 @@ export interface BrotuAI {
35
36
  timeoutMs?: number;
36
37
  }): Promise<Result<Generation>>;
37
38
  };
39
+ /**
40
+ * URL the client POSTs when a generation settles. Register at construction
41
+ * (`webhook:`) or here later. A down hook never fails the generation.
42
+ */
43
+ webhook: {
44
+ set(value: string | WebhookConfig): void;
45
+ clear(): void;
46
+ get(): WebhookConfig | undefined;
47
+ };
38
48
  /**
39
49
  * Google capabilities with no portable equivalent. Present only when a google
40
50
  * key is configured.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}