@agentproto/model-catalog 0.2.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 (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +37 -0
  3. package/dist/access/index.d.ts +30 -0
  4. package/dist/access/index.mjs +4 -0
  5. package/dist/access/index.mjs.map +1 -0
  6. package/dist/audio/index.d.ts +84 -0
  7. package/dist/audio/index.mjs +3 -0
  8. package/dist/audio/index.mjs.map +1 -0
  9. package/dist/audio-BzVF_wke.d.ts +92 -0
  10. package/dist/base-BNHcMifc.d.ts +109 -0
  11. package/dist/byok/index.d.ts +33 -0
  12. package/dist/byok/index.mjs +3 -0
  13. package/dist/byok/index.mjs.map +1 -0
  14. package/dist/catalog-aQHd559b.d.ts +594 -0
  15. package/dist/chunk-2LWYZOWB.mjs +643 -0
  16. package/dist/chunk-2LWYZOWB.mjs.map +1 -0
  17. package/dist/chunk-CINXNTU3.mjs +134 -0
  18. package/dist/chunk-CINXNTU3.mjs.map +1 -0
  19. package/dist/chunk-F7OEHYUI.mjs +187 -0
  20. package/dist/chunk-F7OEHYUI.mjs.map +1 -0
  21. package/dist/chunk-GH7PB5FB.mjs +183 -0
  22. package/dist/chunk-GH7PB5FB.mjs.map +1 -0
  23. package/dist/chunk-H6JUTF3U.mjs +33 -0
  24. package/dist/chunk-H6JUTF3U.mjs.map +1 -0
  25. package/dist/chunk-HEDDSOZF.mjs +47 -0
  26. package/dist/chunk-HEDDSOZF.mjs.map +1 -0
  27. package/dist/chunk-HRRG2RZO.mjs +116 -0
  28. package/dist/chunk-HRRG2RZO.mjs.map +1 -0
  29. package/dist/chunk-IJZ4XPO2.mjs +606 -0
  30. package/dist/chunk-IJZ4XPO2.mjs.map +1 -0
  31. package/dist/chunk-IORIAFK2.mjs +227 -0
  32. package/dist/chunk-IORIAFK2.mjs.map +1 -0
  33. package/dist/chunk-OHAMH3ZE.mjs +2629 -0
  34. package/dist/chunk-OHAMH3ZE.mjs.map +1 -0
  35. package/dist/chunk-QHELXPSL.mjs +85 -0
  36. package/dist/chunk-QHELXPSL.mjs.map +1 -0
  37. package/dist/chunk-SGJR6ZQH.mjs +1230 -0
  38. package/dist/chunk-SGJR6ZQH.mjs.map +1 -0
  39. package/dist/chunk-WRUWNKDB.mjs +521 -0
  40. package/dist/chunk-WRUWNKDB.mjs.map +1 -0
  41. package/dist/chunk-WTHHXXIK.mjs +366 -0
  42. package/dist/chunk-WTHHXXIK.mjs.map +1 -0
  43. package/dist/chunk-XFDXTFV3.mjs +28 -0
  44. package/dist/chunk-XFDXTFV3.mjs.map +1 -0
  45. package/dist/cost/index.d.ts +114 -0
  46. package/dist/cost/index.mjs +13 -0
  47. package/dist/cost/index.mjs.map +1 -0
  48. package/dist/curation/index.d.ts +98 -0
  49. package/dist/curation/index.mjs +13 -0
  50. package/dist/curation/index.mjs.map +1 -0
  51. package/dist/evaluate-DisH3H7u.d.ts +84 -0
  52. package/dist/image/index.d.ts +79 -0
  53. package/dist/image/index.mjs +3 -0
  54. package/dist/image/index.mjs.map +1 -0
  55. package/dist/index-BICjPG8H.d.ts +132 -0
  56. package/dist/index-D8nL3fPZ.d.ts +171 -0
  57. package/dist/index.d.ts +94 -0
  58. package/dist/index.mjs +33 -0
  59. package/dist/index.mjs.map +1 -0
  60. package/dist/llm/index.d.ts +48 -0
  61. package/dist/llm/index.mjs +4 -0
  62. package/dist/llm/index.mjs.map +1 -0
  63. package/dist/overlay/index.d.ts +67 -0
  64. package/dist/overlay/index.mjs +3 -0
  65. package/dist/overlay/index.mjs.map +1 -0
  66. package/dist/picker/index.d.ts +11 -0
  67. package/dist/picker/index.mjs +26 -0
  68. package/dist/picker/index.mjs.map +1 -0
  69. package/dist/pricing/index.d.ts +106 -0
  70. package/dist/pricing/index.mjs +3 -0
  71. package/dist/pricing/index.mjs.map +1 -0
  72. package/dist/providers/index.d.ts +78 -0
  73. package/dist/providers/index.mjs +237 -0
  74. package/dist/providers/index.mjs.map +1 -0
  75. package/dist/schema/index.d.ts +627 -0
  76. package/dist/schema/index.mjs +4 -0
  77. package/dist/schema/index.mjs.map +1 -0
  78. package/dist/schema/voice.d.ts +66 -0
  79. package/dist/schema/voice.mjs +3 -0
  80. package/dist/schema/voice.mjs.map +1 -0
  81. package/dist/video/index.d.ts +78 -0
  82. package/dist/video/index.mjs +3 -0
  83. package/dist/video/index.mjs.map +1 -0
  84. package/dist/voice/index.d.ts +1300 -0
  85. package/dist/voice/index.mjs +4 -0
  86. package/dist/voice/index.mjs.map +1 -0
  87. package/package.json +137 -0
@@ -0,0 +1,1230 @@
1
+ /**
2
+ * @agentproto/model-catalog v0.1.0
3
+ * Unified model catalog: LLM, image, video, audio entries + cost dispatcher + picker.
4
+ * Zod-only OSS core; @agstudio/model-catalog layers billing/access/BYOK on top.
5
+ */
6
+
7
+ // src/voice/providers/minimax.ts
8
+ var LANGS = [
9
+ "en",
10
+ "fr",
11
+ "es",
12
+ "de",
13
+ "it",
14
+ "pt",
15
+ "ja",
16
+ "ko",
17
+ "zh",
18
+ "ar",
19
+ "ru",
20
+ "tr",
21
+ "nl",
22
+ "pl",
23
+ "sv",
24
+ "da",
25
+ "no",
26
+ "fi",
27
+ "hi",
28
+ "th",
29
+ "vi",
30
+ "id",
31
+ "ms",
32
+ "tl",
33
+ "ro",
34
+ "hu"
35
+ ];
36
+ var MINIMAX_VOICES = [
37
+ {
38
+ catalogId: "minimax-french-female-anchor",
39
+ providerVoiceId: "French_FemaleAnchor",
40
+ provider: "minimax",
41
+ label: "Camille",
42
+ description: "Pos\xE9e et professionnelle, style pr\xE9sentatrice",
43
+ gender: "female",
44
+ primaryLanguage: "fr",
45
+ supportedLanguages: LANGS,
46
+ age: "adult",
47
+ quality: "premium",
48
+ featured: true
49
+ },
50
+ {
51
+ catalogId: "minimax-french-movie-lead-female",
52
+ providerVoiceId: "French_MovieLeadFemale",
53
+ provider: "minimax",
54
+ label: "Sophie",
55
+ description: "Chaleureuse et naturelle, style cin\xE9ma",
56
+ gender: "female",
57
+ primaryLanguage: "fr",
58
+ supportedLanguages: LANGS,
59
+ age: "adult",
60
+ quality: "premium",
61
+ featured: true
62
+ },
63
+ {
64
+ catalogId: "minimax-french-female-news-anchor",
65
+ providerVoiceId: "French_Female_News Anchor",
66
+ provider: "minimax",
67
+ label: "Marion",
68
+ description: "Rapide et dynamique, style journaliste",
69
+ gender: "female",
70
+ primaryLanguage: "fr",
71
+ supportedLanguages: LANGS,
72
+ age: "adult",
73
+ quality: "premium",
74
+ featured: true
75
+ },
76
+ {
77
+ catalogId: "minimax-french-male-narrator",
78
+ providerVoiceId: "French_MaleNarrator",
79
+ provider: "minimax",
80
+ label: "Pierre",
81
+ description: "Voix masculine pos\xE9e, style narrateur",
82
+ gender: "male",
83
+ primaryLanguage: "fr",
84
+ supportedLanguages: LANGS,
85
+ age: "adult",
86
+ quality: "premium"
87
+ },
88
+ {
89
+ catalogId: "minimax-french-male-speech-new",
90
+ providerVoiceId: "French_Male_Speech_New",
91
+ provider: "minimax",
92
+ label: "Antoine",
93
+ description: "Voix masculine calme et mesur\xE9e",
94
+ gender: "male",
95
+ primaryLanguage: "fr",
96
+ supportedLanguages: LANGS,
97
+ age: "adult",
98
+ quality: "premium"
99
+ },
100
+ {
101
+ catalogId: "minimax-french-casual-man",
102
+ providerVoiceId: "French_CasualMan",
103
+ provider: "minimax",
104
+ label: "Lucas",
105
+ description: "Voix masculine d\xE9contract\xE9e",
106
+ gender: "male",
107
+ primaryLanguage: "fr",
108
+ supportedLanguages: LANGS,
109
+ age: "adult",
110
+ quality: "premium"
111
+ },
112
+ {
113
+ catalogId: "minimax-english-trustworth-man",
114
+ providerVoiceId: "English_Trustworth_Man",
115
+ provider: "minimax",
116
+ label: "Aaron",
117
+ description: "Trustworthy adult male voice",
118
+ gender: "male",
119
+ primaryLanguage: "en",
120
+ supportedLanguages: LANGS,
121
+ age: "adult",
122
+ quality: "premium"
123
+ },
124
+ {
125
+ catalogId: "minimax-english-calm-woman",
126
+ providerVoiceId: "English_CalmWoman",
127
+ provider: "minimax",
128
+ label: "Olivia",
129
+ description: "Calm adult female voice",
130
+ gender: "female",
131
+ primaryLanguage: "en",
132
+ supportedLanguages: LANGS,
133
+ age: "adult",
134
+ quality: "premium"
135
+ },
136
+ {
137
+ catalogId: "minimax-english-gentle-voiced-man",
138
+ providerVoiceId: "English_Gentle-voiced_man",
139
+ provider: "minimax",
140
+ label: "Mark",
141
+ description: "Gentle adult male voice",
142
+ gender: "male",
143
+ primaryLanguage: "en",
144
+ supportedLanguages: LANGS,
145
+ age: "adult",
146
+ quality: "premium"
147
+ },
148
+ {
149
+ catalogId: "minimax-english-graceful-lady",
150
+ providerVoiceId: "English_Graceful_Lady",
151
+ provider: "minimax",
152
+ label: "Charlotte",
153
+ description: "Graceful adult female voice",
154
+ gender: "female",
155
+ primaryLanguage: "en",
156
+ supportedLanguages: LANGS,
157
+ age: "adult",
158
+ quality: "premium"
159
+ },
160
+ {
161
+ catalogId: "minimax-english-upbeat-woman",
162
+ providerVoiceId: "English_Upbeat_Woman",
163
+ provider: "minimax",
164
+ label: "Emma",
165
+ description: "Upbeat young female voice",
166
+ gender: "female",
167
+ primaryLanguage: "en",
168
+ supportedLanguages: LANGS,
169
+ age: "young",
170
+ quality: "premium"
171
+ },
172
+ {
173
+ catalogId: "minimax-english-man-with-deep-voice",
174
+ providerVoiceId: "English_ManWithDeepVoice",
175
+ provider: "minimax",
176
+ label: "Henry",
177
+ description: "Deep adult male voice",
178
+ gender: "male",
179
+ primaryLanguage: "en",
180
+ supportedLanguages: LANGS,
181
+ age: "adult",
182
+ quality: "premium"
183
+ },
184
+ {
185
+ catalogId: "minimax-english-serene-woman",
186
+ providerVoiceId: "English_SereneWoman",
187
+ provider: "minimax",
188
+ label: "Hannah",
189
+ description: "Serene adult female voice",
190
+ gender: "female",
191
+ primaryLanguage: "en",
192
+ supportedLanguages: LANGS,
193
+ age: "adult",
194
+ quality: "premium"
195
+ },
196
+ {
197
+ catalogId: "minimax-english-confident-woman",
198
+ providerVoiceId: "English_ConfidentWoman",
199
+ provider: "minimax",
200
+ label: "Grace",
201
+ description: "Confident adult female voice",
202
+ gender: "female",
203
+ primaryLanguage: "en",
204
+ supportedLanguages: LANGS,
205
+ age: "adult",
206
+ quality: "premium"
207
+ },
208
+ {
209
+ catalogId: "minimax-english-patient-man",
210
+ providerVoiceId: "English_PatientMan",
211
+ provider: "minimax",
212
+ label: "Patrick",
213
+ description: "Patient adult male voice",
214
+ gender: "male",
215
+ primaryLanguage: "en",
216
+ supportedLanguages: LANGS,
217
+ age: "adult",
218
+ quality: "premium"
219
+ },
220
+ {
221
+ catalogId: "minimax-english-expressive-narrator",
222
+ providerVoiceId: "English_expressive_narrator",
223
+ provider: "minimax",
224
+ label: "Daniel",
225
+ description: "Expressive adult male narrator",
226
+ gender: "male",
227
+ primaryLanguage: "en",
228
+ supportedLanguages: LANGS,
229
+ age: "adult",
230
+ quality: "premium"
231
+ },
232
+ {
233
+ catalogId: "minimax-english-radiant-girl",
234
+ providerVoiceId: "English_radiant_girl",
235
+ provider: "minimax",
236
+ label: "Ruby",
237
+ description: "Radiant young female voice",
238
+ gender: "female",
239
+ primaryLanguage: "en",
240
+ supportedLanguages: LANGS,
241
+ age: "young",
242
+ quality: "premium"
243
+ },
244
+ {
245
+ catalogId: "minimax-spanish-serene-woman",
246
+ providerVoiceId: "Spanish_SereneWoman",
247
+ provider: "minimax",
248
+ label: "Isabel",
249
+ description: "Serene adult female voice",
250
+ gender: "female",
251
+ primaryLanguage: "es",
252
+ supportedLanguages: LANGS,
253
+ age: "adult",
254
+ quality: "premium"
255
+ },
256
+ {
257
+ catalogId: "minimax-spanish-narrator",
258
+ providerVoiceId: "Spanish_Narrator",
259
+ provider: "minimax",
260
+ label: "Diego",
261
+ description: "Adult male narrator voice",
262
+ gender: "male",
263
+ primaryLanguage: "es",
264
+ supportedLanguages: LANGS,
265
+ age: "adult",
266
+ quality: "premium"
267
+ },
268
+ {
269
+ catalogId: "minimax-german-friendly-man",
270
+ providerVoiceId: "German_FriendlyMan",
271
+ provider: "minimax",
272
+ label: "Klaus",
273
+ description: "Friendly adult male voice",
274
+ gender: "male",
275
+ primaryLanguage: "de",
276
+ supportedLanguages: LANGS,
277
+ age: "adult",
278
+ quality: "premium"
279
+ },
280
+ {
281
+ catalogId: "minimax-german-sweet-lady",
282
+ providerVoiceId: "German_SweetLady",
283
+ provider: "minimax",
284
+ label: "Greta",
285
+ description: "Sweet young female voice",
286
+ gender: "female",
287
+ primaryLanguage: "de",
288
+ supportedLanguages: LANGS,
289
+ age: "young",
290
+ quality: "premium"
291
+ },
292
+ {
293
+ catalogId: "minimax-japanese-gentle-butler",
294
+ providerVoiceId: "Japanese_GentleButler",
295
+ provider: "minimax",
296
+ label: "Haruto",
297
+ description: "Gentle adult male voice",
298
+ gender: "male",
299
+ primaryLanguage: "ja",
300
+ supportedLanguages: LANGS,
301
+ age: "adult",
302
+ quality: "premium"
303
+ },
304
+ {
305
+ catalogId: "minimax-japanese-kind-lady",
306
+ providerVoiceId: "Japanese_KindLady",
307
+ provider: "minimax",
308
+ label: "Yuki",
309
+ description: "Kind adult female voice",
310
+ gender: "female",
311
+ primaryLanguage: "ja",
312
+ supportedLanguages: LANGS,
313
+ age: "adult",
314
+ quality: "premium"
315
+ },
316
+ {
317
+ catalogId: "minimax-korean-calm-gentleman",
318
+ providerVoiceId: "Korean_CalmGentleman",
319
+ provider: "minimax",
320
+ label: "Minjun",
321
+ description: "Calm adult male voice",
322
+ gender: "male",
323
+ primaryLanguage: "ko",
324
+ supportedLanguages: LANGS,
325
+ age: "adult",
326
+ quality: "premium"
327
+ },
328
+ {
329
+ catalogId: "minimax-korean-sweet-girl",
330
+ providerVoiceId: "Korean_SweetGirl",
331
+ provider: "minimax",
332
+ label: "Yuna",
333
+ description: "Sweet young female voice",
334
+ gender: "female",
335
+ primaryLanguage: "ko",
336
+ supportedLanguages: LANGS,
337
+ age: "young",
338
+ quality: "premium"
339
+ },
340
+ {
341
+ catalogId: "minimax-chinese-mandarin-gentleman",
342
+ providerVoiceId: "Chinese (Mandarin)_Gentleman",
343
+ provider: "minimax",
344
+ label: "Wei",
345
+ description: "Adult male voice",
346
+ gender: "male",
347
+ primaryLanguage: "zh",
348
+ supportedLanguages: LANGS,
349
+ age: "adult",
350
+ quality: "premium"
351
+ },
352
+ {
353
+ catalogId: "minimax-chinese-mandarin-sweet-lady",
354
+ providerVoiceId: "Chinese (Mandarin)_Sweet_Lady",
355
+ provider: "minimax",
356
+ label: "Mei",
357
+ description: "Sweet young female voice",
358
+ gender: "female",
359
+ primaryLanguage: "zh",
360
+ supportedLanguages: LANGS,
361
+ age: "young",
362
+ quality: "premium"
363
+ },
364
+ {
365
+ catalogId: "minimax-portuguese-reliable-man",
366
+ providerVoiceId: "Portuguese_ReliableMan",
367
+ provider: "minimax",
368
+ label: "Rafael",
369
+ description: "Reliable adult male voice",
370
+ gender: "male",
371
+ primaryLanguage: "pt",
372
+ supportedLanguages: LANGS,
373
+ age: "adult",
374
+ quality: "premium"
375
+ },
376
+ {
377
+ catalogId: "minimax-portuguese-sweet-girl",
378
+ providerVoiceId: "Portuguese_SweetGirl",
379
+ provider: "minimax",
380
+ label: "Beatriz",
381
+ description: "Sweet young female voice",
382
+ gender: "female",
383
+ primaryLanguage: "pt",
384
+ supportedLanguages: LANGS,
385
+ age: "young",
386
+ quality: "premium"
387
+ },
388
+ {
389
+ catalogId: "minimax-italian-narrator",
390
+ providerVoiceId: "Italian_Narrator",
391
+ provider: "minimax",
392
+ label: "Marco",
393
+ description: "Adult male narrator voice",
394
+ gender: "male",
395
+ primaryLanguage: "it",
396
+ supportedLanguages: LANGS,
397
+ age: "adult",
398
+ quality: "premium"
399
+ },
400
+ {
401
+ catalogId: "minimax-italian-brave-heroine",
402
+ providerVoiceId: "Italian_BraveHeroine",
403
+ provider: "minimax",
404
+ label: "Giulia",
405
+ description: "Brave adult female voice",
406
+ gender: "female",
407
+ primaryLanguage: "it",
408
+ supportedLanguages: LANGS,
409
+ age: "adult",
410
+ quality: "premium"
411
+ }
412
+ ];
413
+
414
+ // src/voice/providers/elevenlabs.ts
415
+ var LANGS2 = [
416
+ "en",
417
+ "fr",
418
+ "es",
419
+ "de",
420
+ "it",
421
+ "pt",
422
+ "ja",
423
+ "ko",
424
+ "zh",
425
+ "ar",
426
+ "ru",
427
+ "tr",
428
+ "nl",
429
+ "pl",
430
+ "sv",
431
+ "hi"
432
+ ];
433
+ var ELEVENLABS_VOICES = [
434
+ // ── French (featured) ──
435
+ {
436
+ catalogId: "elevenlabs-victoire",
437
+ providerVoiceId: "O31r762Gb3WFygrEOGh0",
438
+ provider: "elevenlabs",
439
+ label: "Victoire",
440
+ description: "Haute fid\xE9lit\xE9, voix naturelle premium",
441
+ gender: "female",
442
+ primaryLanguage: "fr",
443
+ supportedLanguages: LANGS2,
444
+ age: "young",
445
+ quality: "premium",
446
+ featured: true
447
+ },
448
+ {
449
+ catalogId: "elevenlabs-victoria",
450
+ providerVoiceId: "WeAAwKYcS06VmXw086yZ",
451
+ provider: "elevenlabs",
452
+ label: "Victoria",
453
+ description: "Chaleureuse et pos\xE9e, style narration",
454
+ gender: "female",
455
+ primaryLanguage: "fr",
456
+ supportedLanguages: LANGS2,
457
+ age: "adult",
458
+ quality: "premium",
459
+ featured: true
460
+ },
461
+ {
462
+ catalogId: "elevenlabs-nicolas",
463
+ providerVoiceId: "aQROLel5sQbj1vuIVi6B",
464
+ provider: "elevenlabs",
465
+ label: "Nicolas",
466
+ description: "Voix masculine parisienne, style narrateur",
467
+ gender: "male",
468
+ primaryLanguage: "fr",
469
+ supportedLanguages: LANGS2,
470
+ age: "adult",
471
+ quality: "premium",
472
+ featured: true
473
+ },
474
+ // ── English (featured, premade — portable across accounts) ──
475
+ {
476
+ catalogId: "elevenlabs-george",
477
+ providerVoiceId: "JBFqnCBsd6RMkjVDRZzb",
478
+ provider: "elevenlabs",
479
+ label: "George",
480
+ description: "Warm, captivating British storyteller",
481
+ gender: "male",
482
+ primaryLanguage: "en",
483
+ supportedLanguages: LANGS2,
484
+ age: "adult",
485
+ quality: "premium",
486
+ featured: true
487
+ },
488
+ {
489
+ catalogId: "elevenlabs-sarah",
490
+ providerVoiceId: "EXAVITQu4vr4xnSDxMaL",
491
+ provider: "elevenlabs",
492
+ label: "Sarah",
493
+ description: "Mature, reassuring, confident",
494
+ gender: "female",
495
+ primaryLanguage: "en",
496
+ supportedLanguages: LANGS2,
497
+ age: "young",
498
+ quality: "premium",
499
+ featured: true
500
+ },
501
+ {
502
+ catalogId: "elevenlabs-daniel",
503
+ providerVoiceId: "onwK4e9ZLuTAKqWW03F9",
504
+ provider: "elevenlabs",
505
+ label: "Daniel",
506
+ description: "Steady British broadcaster",
507
+ gender: "male",
508
+ primaryLanguage: "en",
509
+ supportedLanguages: LANGS2,
510
+ age: "adult",
511
+ quality: "premium",
512
+ featured: true
513
+ },
514
+ {
515
+ catalogId: "elevenlabs-alice",
516
+ providerVoiceId: "Xb7hH8MSUJpSbSDYk0k2",
517
+ provider: "elevenlabs",
518
+ label: "Alice",
519
+ description: "Clear, engaging British educator",
520
+ gender: "female",
521
+ primaryLanguage: "en",
522
+ supportedLanguages: LANGS2,
523
+ age: "adult",
524
+ quality: "premium",
525
+ featured: true
526
+ }
527
+ ];
528
+
529
+ // src/voice/providers/openai-realtime.ts
530
+ var LANGS3 = [
531
+ "en",
532
+ "fr",
533
+ "es",
534
+ "de",
535
+ "it",
536
+ "pt",
537
+ "ja",
538
+ "ko",
539
+ "zh",
540
+ "ar",
541
+ "ru",
542
+ "tr",
543
+ "nl",
544
+ "pl",
545
+ "sv",
546
+ "hi"
547
+ ];
548
+ var OPENAI_REALTIME_VOICES = [
549
+ {
550
+ catalogId: "openai-realtime-marin",
551
+ providerVoiceId: "marin",
552
+ provider: "openai-realtime",
553
+ label: "Marin",
554
+ description: "OpenAI Realtime \u2014 newest premium voice, warm and expressive",
555
+ gender: "neutral",
556
+ primaryLanguage: "en",
557
+ supportedLanguages: LANGS3,
558
+ featured: true
559
+ },
560
+ {
561
+ catalogId: "openai-realtime-cedar",
562
+ providerVoiceId: "cedar",
563
+ provider: "openai-realtime",
564
+ label: "Cedar",
565
+ description: "OpenAI Realtime \u2014 grounded, confident",
566
+ gender: "neutral",
567
+ primaryLanguage: "en",
568
+ supportedLanguages: LANGS3,
569
+ featured: true
570
+ },
571
+ {
572
+ catalogId: "openai-realtime-alloy",
573
+ providerVoiceId: "alloy",
574
+ provider: "openai-realtime",
575
+ label: "Alloy",
576
+ description: "OpenAI Realtime \u2014 neutral, balanced",
577
+ gender: "neutral",
578
+ primaryLanguage: "en",
579
+ supportedLanguages: LANGS3
580
+ },
581
+ {
582
+ catalogId: "openai-realtime-echo",
583
+ providerVoiceId: "echo",
584
+ provider: "openai-realtime",
585
+ label: "Echo",
586
+ description: "OpenAI Realtime \u2014 calm male",
587
+ gender: "male",
588
+ primaryLanguage: "en",
589
+ supportedLanguages: LANGS3
590
+ },
591
+ {
592
+ catalogId: "openai-realtime-shimmer",
593
+ providerVoiceId: "shimmer",
594
+ provider: "openai-realtime",
595
+ label: "Shimmer",
596
+ description: "OpenAI Realtime \u2014 soft female",
597
+ gender: "female",
598
+ primaryLanguage: "en",
599
+ supportedLanguages: LANGS3
600
+ },
601
+ {
602
+ catalogId: "openai-realtime-ash",
603
+ providerVoiceId: "ash",
604
+ provider: "openai-realtime",
605
+ label: "Ash",
606
+ description: "OpenAI Realtime \u2014 relaxed neutral",
607
+ gender: "neutral",
608
+ primaryLanguage: "en",
609
+ supportedLanguages: LANGS3
610
+ },
611
+ {
612
+ catalogId: "openai-realtime-ballad",
613
+ providerVoiceId: "ballad",
614
+ provider: "openai-realtime",
615
+ label: "Ballad",
616
+ description: "OpenAI Realtime \u2014 melodic, smooth",
617
+ gender: "neutral",
618
+ primaryLanguage: "en",
619
+ supportedLanguages: LANGS3
620
+ },
621
+ {
622
+ catalogId: "openai-realtime-coral",
623
+ providerVoiceId: "coral",
624
+ provider: "openai-realtime",
625
+ label: "Coral",
626
+ description: "OpenAI Realtime \u2014 friendly female",
627
+ gender: "female",
628
+ primaryLanguage: "en",
629
+ supportedLanguages: LANGS3
630
+ },
631
+ {
632
+ catalogId: "openai-realtime-sage",
633
+ providerVoiceId: "sage",
634
+ provider: "openai-realtime",
635
+ label: "Sage",
636
+ description: "OpenAI Realtime \u2014 wise, measured",
637
+ gender: "neutral",
638
+ primaryLanguage: "en",
639
+ supportedLanguages: LANGS3
640
+ },
641
+ {
642
+ catalogId: "openai-realtime-verse",
643
+ providerVoiceId: "verse",
644
+ provider: "openai-realtime",
645
+ label: "Verse",
646
+ description: "OpenAI Realtime \u2014 lyrical, animated",
647
+ gender: "neutral",
648
+ primaryLanguage: "en",
649
+ supportedLanguages: LANGS3
650
+ }
651
+ ];
652
+
653
+ // src/voice/providers/gemini-live.ts
654
+ var LANGS4 = [
655
+ "en",
656
+ "fr",
657
+ "es",
658
+ "de",
659
+ "it",
660
+ "pt",
661
+ "ja",
662
+ "ko",
663
+ "zh",
664
+ "ar",
665
+ "ru",
666
+ "hi"
667
+ ];
668
+ var GEMINI_LIVE_VOICES = [
669
+ {
670
+ catalogId: "gemini-live-aoede",
671
+ providerVoiceId: "Aoede",
672
+ provider: "gemini-live",
673
+ label: "Aoede",
674
+ description: "Gemini Live \u2014 bright, melodic",
675
+ gender: "female",
676
+ primaryLanguage: "en",
677
+ supportedLanguages: LANGS4
678
+ },
679
+ {
680
+ catalogId: "gemini-live-charon",
681
+ providerVoiceId: "Charon",
682
+ provider: "gemini-live",
683
+ label: "Charon",
684
+ description: "Gemini Live \u2014 deep, measured",
685
+ gender: "male",
686
+ primaryLanguage: "en",
687
+ supportedLanguages: LANGS4
688
+ },
689
+ {
690
+ catalogId: "gemini-live-fenrir",
691
+ providerVoiceId: "Fenrir",
692
+ provider: "gemini-live",
693
+ label: "Fenrir",
694
+ description: "Gemini Live \u2014 gravelly, intense",
695
+ gender: "male",
696
+ primaryLanguage: "en",
697
+ supportedLanguages: LANGS4
698
+ },
699
+ {
700
+ catalogId: "gemini-live-kore",
701
+ providerVoiceId: "Kore",
702
+ provider: "gemini-live",
703
+ label: "Kore",
704
+ description: "Gemini Live \u2014 clear, articulate",
705
+ gender: "female",
706
+ primaryLanguage: "en",
707
+ supportedLanguages: LANGS4
708
+ },
709
+ {
710
+ catalogId: "gemini-live-puck",
711
+ providerVoiceId: "Puck",
712
+ provider: "gemini-live",
713
+ label: "Puck",
714
+ description: "Gemini Live \u2014 playful, energetic",
715
+ gender: "neutral",
716
+ primaryLanguage: "en",
717
+ supportedLanguages: LANGS4
718
+ }
719
+ ];
720
+
721
+ // src/voice/catalog.ts
722
+ var VOICE_CATALOG = [
723
+ ...ELEVENLABS_VOICES,
724
+ ...MINIMAX_VOICES,
725
+ ...OPENAI_REALTIME_VOICES,
726
+ ...GEMINI_LIVE_VOICES
727
+ ];
728
+ var VOICE_BY_CATALOG_ID = new Map(
729
+ VOICE_CATALOG.map((v) => [v.catalogId, v])
730
+ );
731
+ var VOICE_BY_PROVIDER_ID = new Map(
732
+ VOICE_CATALOG.map((v) => [v.providerVoiceId, v])
733
+ );
734
+ var VOICE_BY_ALIAS = new Map(
735
+ VOICE_CATALOG.flatMap(
736
+ (v) => (v.aliases ?? []).map((a) => [a, v])
737
+ )
738
+ );
739
+ function getVoiceCatalog(language) {
740
+ if (language) {
741
+ return VOICE_CATALOG.filter((v) => v.primaryLanguage === language);
742
+ }
743
+ return VOICE_CATALOG;
744
+ }
745
+ function getVoiceByCatalogId(catalogId) {
746
+ return VOICE_BY_CATALOG_ID.get(catalogId);
747
+ }
748
+ function getVoiceByProviderVoiceId(providerVoiceId) {
749
+ return VOICE_BY_PROVIDER_ID.get(providerVoiceId);
750
+ }
751
+ function resolveVoice(ref) {
752
+ return VOICE_BY_CATALOG_ID.get(ref) ?? VOICE_BY_PROVIDER_ID.get(ref) ?? VOICE_BY_ALIAS.get(ref);
753
+ }
754
+ function getVoiceById(id) {
755
+ return resolveVoice(id);
756
+ }
757
+ function getFeaturedVoices(language) {
758
+ return VOICE_CATALOG.filter(
759
+ (v) => v.featured && (!language || v.primaryLanguage === language)
760
+ );
761
+ }
762
+ function getProviderForVoice(ref) {
763
+ const voice = resolveVoice(ref);
764
+ if (!voice) return void 0;
765
+ return { provider: voice.provider, providerVoiceId: voice.providerVoiceId };
766
+ }
767
+
768
+ // src/voice/curate.ts
769
+ function slugifyVoiceId(provider, providerVoiceId) {
770
+ const slug = providerVoiceId.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
771
+ return `${provider}-${slug}`;
772
+ }
773
+ function curateVoice(native, overrides = {}) {
774
+ return {
775
+ catalogId: overrides.catalogId ?? slugifyVoiceId(native.provider, native.providerVoiceId),
776
+ providerVoiceId: native.providerVoiceId,
777
+ provider: native.provider,
778
+ // Default to the provider's REAL name — rebrand only when explicit.
779
+ label: overrides.label ?? native.name,
780
+ description: native.description ?? `${native.provider} voice`,
781
+ gender: native.gender,
782
+ primaryLanguage: native.primaryLanguage,
783
+ supportedLanguages: native.supportedLanguages,
784
+ samplePath: native.samplePath,
785
+ aliases: overrides.aliases,
786
+ age: native.age,
787
+ quality: native.quality,
788
+ featured: overrides.featured
789
+ };
790
+ }
791
+
792
+ // src/voice/preview-manifest.generated.ts
793
+ var VOICE_PREVIEW_BASE = "https://storage.googleapis.com/agentik-public-assets/voice-previews";
794
+ var VOICE_PREVIEW_LOCALES = ["en", "fr", "es", "de", "it", "pt"];
795
+ var BAKED_VOICE_PREVIEWS = {
796
+ "elevenlabs-alice": [
797
+ "en",
798
+ "fr",
799
+ "es",
800
+ "de",
801
+ "it",
802
+ "pt"
803
+ ],
804
+ "elevenlabs-daniel": [
805
+ "en",
806
+ "fr",
807
+ "es",
808
+ "de",
809
+ "it",
810
+ "pt"
811
+ ],
812
+ "elevenlabs-george": [
813
+ "en",
814
+ "fr",
815
+ "es",
816
+ "de",
817
+ "it",
818
+ "pt"
819
+ ],
820
+ "elevenlabs-nicolas": [
821
+ "en",
822
+ "fr",
823
+ "es",
824
+ "de",
825
+ "it",
826
+ "pt"
827
+ ],
828
+ "elevenlabs-sarah": [
829
+ "en",
830
+ "fr",
831
+ "es",
832
+ "de",
833
+ "it",
834
+ "pt"
835
+ ],
836
+ "elevenlabs-victoria": [
837
+ "en",
838
+ "fr",
839
+ "es",
840
+ "de",
841
+ "it",
842
+ "pt"
843
+ ],
844
+ "gemini-live-aoede": [
845
+ "en",
846
+ "fr",
847
+ "es",
848
+ "de",
849
+ "it",
850
+ "pt"
851
+ ],
852
+ "gemini-live-charon": [
853
+ "en",
854
+ "fr",
855
+ "es",
856
+ "de",
857
+ "it",
858
+ "pt"
859
+ ],
860
+ "gemini-live-fenrir": [
861
+ "en",
862
+ "fr",
863
+ "es",
864
+ "de",
865
+ "it",
866
+ "pt"
867
+ ],
868
+ "gemini-live-kore": [
869
+ "en",
870
+ "fr",
871
+ "es",
872
+ "de",
873
+ "it",
874
+ "pt"
875
+ ],
876
+ "gemini-live-puck": [
877
+ "en",
878
+ "fr",
879
+ "es",
880
+ "de",
881
+ "it",
882
+ "pt"
883
+ ],
884
+ "minimax-chinese-mandarin-gentleman": [
885
+ "en",
886
+ "fr",
887
+ "es",
888
+ "de",
889
+ "it",
890
+ "pt"
891
+ ],
892
+ "minimax-chinese-mandarin-sweet-lady": [
893
+ "en",
894
+ "fr",
895
+ "es",
896
+ "de",
897
+ "it",
898
+ "pt"
899
+ ],
900
+ "minimax-english-calm-woman": [
901
+ "en",
902
+ "fr",
903
+ "es",
904
+ "de",
905
+ "it",
906
+ "pt"
907
+ ],
908
+ "minimax-english-confident-woman": [
909
+ "en",
910
+ "fr",
911
+ "es",
912
+ "de",
913
+ "it",
914
+ "pt"
915
+ ],
916
+ "minimax-english-expressive-narrator": [
917
+ "en",
918
+ "fr",
919
+ "es",
920
+ "de",
921
+ "it",
922
+ "pt"
923
+ ],
924
+ "minimax-english-gentle-voiced-man": [
925
+ "en",
926
+ "fr",
927
+ "es",
928
+ "de",
929
+ "it",
930
+ "pt"
931
+ ],
932
+ "minimax-english-graceful-lady": [
933
+ "en",
934
+ "fr",
935
+ "es",
936
+ "de",
937
+ "it",
938
+ "pt"
939
+ ],
940
+ "minimax-english-man-with-deep-voice": [
941
+ "en",
942
+ "fr",
943
+ "es",
944
+ "de",
945
+ "it",
946
+ "pt"
947
+ ],
948
+ "minimax-english-patient-man": [
949
+ "en",
950
+ "fr",
951
+ "es",
952
+ "de",
953
+ "it",
954
+ "pt"
955
+ ],
956
+ "minimax-english-radiant-girl": [
957
+ "en",
958
+ "fr",
959
+ "es",
960
+ "de",
961
+ "it",
962
+ "pt"
963
+ ],
964
+ "minimax-english-serene-woman": [
965
+ "en",
966
+ "fr",
967
+ "es",
968
+ "de",
969
+ "it",
970
+ "pt"
971
+ ],
972
+ "minimax-english-trustworth-man": [
973
+ "en",
974
+ "fr",
975
+ "es",
976
+ "de",
977
+ "it",
978
+ "pt"
979
+ ],
980
+ "minimax-english-upbeat-woman": [
981
+ "en",
982
+ "fr",
983
+ "es",
984
+ "de",
985
+ "it",
986
+ "pt"
987
+ ],
988
+ "minimax-french-casual-man": [
989
+ "en",
990
+ "fr",
991
+ "es",
992
+ "de",
993
+ "it",
994
+ "pt"
995
+ ],
996
+ "minimax-french-female-anchor": [
997
+ "en",
998
+ "fr",
999
+ "es",
1000
+ "de",
1001
+ "it",
1002
+ "pt"
1003
+ ],
1004
+ "minimax-french-female-news-anchor": [
1005
+ "en",
1006
+ "fr",
1007
+ "es",
1008
+ "de",
1009
+ "it",
1010
+ "pt"
1011
+ ],
1012
+ "minimax-french-male-narrator": [
1013
+ "en",
1014
+ "fr",
1015
+ "es",
1016
+ "de",
1017
+ "it",
1018
+ "pt"
1019
+ ],
1020
+ "minimax-french-male-speech-new": [
1021
+ "en",
1022
+ "fr",
1023
+ "es",
1024
+ "de",
1025
+ "it",
1026
+ "pt"
1027
+ ],
1028
+ "minimax-french-movie-lead-female": [
1029
+ "en",
1030
+ "fr",
1031
+ "es",
1032
+ "de",
1033
+ "it",
1034
+ "pt"
1035
+ ],
1036
+ "minimax-german-friendly-man": [
1037
+ "en",
1038
+ "fr",
1039
+ "es",
1040
+ "de",
1041
+ "it",
1042
+ "pt"
1043
+ ],
1044
+ "minimax-german-sweet-lady": [
1045
+ "en",
1046
+ "fr",
1047
+ "es",
1048
+ "de",
1049
+ "it",
1050
+ "pt"
1051
+ ],
1052
+ "minimax-italian-brave-heroine": [
1053
+ "en",
1054
+ "fr",
1055
+ "es",
1056
+ "de",
1057
+ "it",
1058
+ "pt"
1059
+ ],
1060
+ "minimax-italian-narrator": [
1061
+ "en",
1062
+ "fr",
1063
+ "es",
1064
+ "de",
1065
+ "it",
1066
+ "pt"
1067
+ ],
1068
+ "minimax-japanese-gentle-butler": [
1069
+ "en",
1070
+ "fr",
1071
+ "es",
1072
+ "de",
1073
+ "it",
1074
+ "pt"
1075
+ ],
1076
+ "minimax-japanese-kind-lady": [
1077
+ "en",
1078
+ "fr",
1079
+ "es",
1080
+ "de",
1081
+ "it",
1082
+ "pt"
1083
+ ],
1084
+ "minimax-korean-calm-gentleman": [
1085
+ "en",
1086
+ "fr",
1087
+ "es",
1088
+ "de",
1089
+ "it",
1090
+ "pt"
1091
+ ],
1092
+ "minimax-korean-sweet-girl": [
1093
+ "en",
1094
+ "fr",
1095
+ "es",
1096
+ "de",
1097
+ "it",
1098
+ "pt"
1099
+ ],
1100
+ "minimax-portuguese-reliable-man": [
1101
+ "en",
1102
+ "fr",
1103
+ "es",
1104
+ "de",
1105
+ "it",
1106
+ "pt"
1107
+ ],
1108
+ "minimax-portuguese-sweet-girl": [
1109
+ "en",
1110
+ "fr",
1111
+ "es",
1112
+ "de",
1113
+ "it",
1114
+ "pt"
1115
+ ],
1116
+ "minimax-spanish-narrator": [
1117
+ "en",
1118
+ "fr",
1119
+ "es",
1120
+ "de",
1121
+ "it",
1122
+ "pt"
1123
+ ],
1124
+ "minimax-spanish-serene-woman": [
1125
+ "en",
1126
+ "fr",
1127
+ "es",
1128
+ "de",
1129
+ "it",
1130
+ "pt"
1131
+ ],
1132
+ "openai-realtime-alloy": [
1133
+ "en",
1134
+ "fr",
1135
+ "es",
1136
+ "de",
1137
+ "it",
1138
+ "pt"
1139
+ ],
1140
+ "openai-realtime-ash": [
1141
+ "en",
1142
+ "fr",
1143
+ "es",
1144
+ "de",
1145
+ "it",
1146
+ "pt"
1147
+ ],
1148
+ "openai-realtime-ballad": [
1149
+ "en",
1150
+ "fr",
1151
+ "es",
1152
+ "de",
1153
+ "it",
1154
+ "pt"
1155
+ ],
1156
+ "openai-realtime-cedar": [
1157
+ "en",
1158
+ "fr",
1159
+ "es",
1160
+ "de",
1161
+ "it",
1162
+ "pt"
1163
+ ],
1164
+ "openai-realtime-coral": [
1165
+ "en",
1166
+ "fr",
1167
+ "es",
1168
+ "de",
1169
+ "it",
1170
+ "pt"
1171
+ ],
1172
+ "openai-realtime-echo": [
1173
+ "en",
1174
+ "fr",
1175
+ "es",
1176
+ "de",
1177
+ "it",
1178
+ "pt"
1179
+ ],
1180
+ "openai-realtime-marin": [
1181
+ "en",
1182
+ "fr",
1183
+ "es",
1184
+ "de",
1185
+ "it",
1186
+ "pt"
1187
+ ],
1188
+ "openai-realtime-sage": [
1189
+ "en",
1190
+ "fr",
1191
+ "es",
1192
+ "de",
1193
+ "it",
1194
+ "pt"
1195
+ ],
1196
+ "openai-realtime-shimmer": [
1197
+ "en",
1198
+ "fr",
1199
+ "es",
1200
+ "de",
1201
+ "it",
1202
+ "pt"
1203
+ ],
1204
+ "openai-realtime-verse": [
1205
+ "en",
1206
+ "fr",
1207
+ "es",
1208
+ "de",
1209
+ "it",
1210
+ "pt"
1211
+ ],
1212
+ "elevenlabs-victoire": [
1213
+ "en",
1214
+ "fr",
1215
+ "es",
1216
+ "de",
1217
+ "it",
1218
+ "pt"
1219
+ ]
1220
+ };
1221
+ function voicePreviewUrl(catalogId, locale = "en") {
1222
+ const locales = BAKED_VOICE_PREVIEWS[catalogId];
1223
+ if (!locales || locales.length === 0) return void 0;
1224
+ const chosen = locales.includes(locale) ? locale : locales.includes("en") ? "en" : locales[0];
1225
+ return `${VOICE_PREVIEW_BASE}/${catalogId}.${chosen}.wav`;
1226
+ }
1227
+
1228
+ export { BAKED_VOICE_PREVIEWS, ELEVENLABS_VOICES, GEMINI_LIVE_VOICES, MINIMAX_VOICES, OPENAI_REALTIME_VOICES, VOICE_CATALOG, VOICE_PREVIEW_BASE, VOICE_PREVIEW_LOCALES, curateVoice, getFeaturedVoices, getProviderForVoice, getVoiceByCatalogId, getVoiceById, getVoiceByProviderVoiceId, getVoiceCatalog, resolveVoice, slugifyVoiceId, voicePreviewUrl };
1229
+ //# sourceMappingURL=chunk-SGJR6ZQH.mjs.map
1230
+ //# sourceMappingURL=chunk-SGJR6ZQH.mjs.map