@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,521 @@
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/audio/catalog.ts
8
+ var AUDIO_MODEL_CATALOG = {
9
+ // ─── Speech-to-speech / realtime ────────────────────────────────────────
10
+ // Provider runs the LLM in-session (no separate STT+TTS billing). These
11
+ // bill on active session duration — `per_minute` reuses the same cost
12
+ // path STT uses, fed `seconds` from the voice pod's session timer.
13
+ // baseCost = blended USD/min (audio in+out), point-in-time; refresh via
14
+ // the drift-check script. agentVisible:false — these are call engines,
15
+ // not agent-selectable tool models.
16
+ // `id` is our stable internal billing id (wired into the voice engine
17
+ // descriptors); `providerId` is the live provider model string —
18
+ // refresh it as providers ship new realtime models.
19
+ // Gemini Live — the three provider IDs the adapter accepts. This
20
+ // catalog is the source of truth for those ids + the default; the
21
+ // adapter / tts-providers / env should resolve from here, not
22
+ // re-hardcode. Default = flash (low latency, the call default).
23
+ "google/gemini-live": {
24
+ id: "google/gemini-live",
25
+ name: "Gemini Live 2.5 Flash",
26
+ providerId: "gemini-2.5-flash-preview-tts",
27
+ provider: "google",
28
+ capabilities: {
29
+ s2s: true,
30
+ languages: ["multi"],
31
+ streaming: true
32
+ },
33
+ pricing: {
34
+ billingUnit: "per_minute",
35
+ // ~$0.10/min blended audio in+out (Gemini Live token rates).
36
+ baseCost: 0.1
37
+ },
38
+ description: "Google Gemini Live realtime s2s \u2014 low latency (default)",
39
+ agentVisible: false
40
+ },
41
+ "google/gemini-live-pro": {
42
+ id: "google/gemini-live-pro",
43
+ name: "Gemini Live 2.5 Pro",
44
+ providerId: "gemini-2.5-pro-preview-tts",
45
+ provider: "google",
46
+ capabilities: {
47
+ s2s: true,
48
+ languages: ["multi"],
49
+ streaming: true
50
+ },
51
+ pricing: {
52
+ billingUnit: "per_minute",
53
+ // Heavier/higher-quality tier — ~2× flash.
54
+ baseCost: 0.2
55
+ },
56
+ description: "Google Gemini Live realtime s2s \u2014 higher quality",
57
+ agentVisible: false
58
+ },
59
+ "google/gemini-live-3.1-flash": {
60
+ id: "google/gemini-live-3.1-flash",
61
+ name: "Gemini Live 3.1 Flash",
62
+ providerId: "gemini-3.1-flash-tts-preview",
63
+ provider: "google",
64
+ capabilities: {
65
+ s2s: true,
66
+ languages: ["multi"],
67
+ streaming: true
68
+ },
69
+ pricing: {
70
+ billingUnit: "per_minute",
71
+ baseCost: 0.1
72
+ },
73
+ description: "Google Gemini Live realtime s2s \u2014 3.1 flash preview",
74
+ agentVisible: false
75
+ },
76
+ "openai/gpt-realtime": {
77
+ id: "openai/gpt-realtime",
78
+ name: "OpenAI Realtime (gpt-realtime-1.5)",
79
+ // gpt-realtime-1.5 = best audio-in/audio-out realtime model.
80
+ // Variants: gpt-realtime-2 (reasoning), gpt-realtime-mini (cheap),
81
+ // gpt-realtime-translate (s2s translation).
82
+ providerId: "gpt-realtime-1.5",
83
+ provider: "openai",
84
+ capabilities: {
85
+ s2s: true,
86
+ languages: ["multi"],
87
+ streaming: true
88
+ },
89
+ pricing: {
90
+ billingUnit: "per_minute",
91
+ // ~$0.30/min blended (audio in + out). Verify via drift-check.
92
+ baseCost: 0.3
93
+ },
94
+ description: "OpenAI realtime speech-to-speech (best audio in/out)",
95
+ agentVisible: false
96
+ },
97
+ "openai/gpt-realtime-mini": {
98
+ id: "openai/gpt-realtime-mini",
99
+ name: "OpenAI Realtime mini",
100
+ providerId: "gpt-realtime-mini",
101
+ provider: "openai",
102
+ capabilities: {
103
+ s2s: true,
104
+ languages: ["multi"],
105
+ streaming: true
106
+ },
107
+ pricing: {
108
+ billingUnit: "per_minute",
109
+ // Cost-efficient realtime tier — ~⅓ of gpt-realtime-1.5.
110
+ baseCost: 0.1
111
+ },
112
+ description: "Cost-efficient OpenAI realtime speech-to-speech",
113
+ agentVisible: false
114
+ },
115
+ "elevenlabs/conversational": {
116
+ id: "elevenlabs/conversational",
117
+ name: "ElevenLabs Conversational",
118
+ providerId: "conversational-v1",
119
+ provider: "elevenlabs",
120
+ capabilities: {
121
+ s2s: true,
122
+ languages: ["multi"],
123
+ streaming: true
124
+ },
125
+ pricing: {
126
+ billingUnit: "per_minute",
127
+ // ElevenLabs Conversational AI ~$0.10/min on the business tier.
128
+ baseCost: 0.1
129
+ },
130
+ description: "ElevenLabs Conversational AI (agent-id s2s flow)",
131
+ agentVisible: false
132
+ },
133
+ // ─── ElevenLabs TTS ─────────────────────────────────────────────────────
134
+ // Source: https://elevenlabs.io/pricing (per 1k chars rates derived from
135
+ // tiered credit packages — verified against direct ElevenLabs API quotes).
136
+ "elevenlabs/multilingual-v2": {
137
+ id: "elevenlabs/multilingual-v2",
138
+ name: "ElevenLabs Multilingual v2",
139
+ providerId: "eleven_multilingual_v2",
140
+ provider: "elevenlabs",
141
+ capabilities: {
142
+ tts: true,
143
+ languages: ["multi"],
144
+ voiceCloning: true,
145
+ streaming: true
146
+ },
147
+ pricing: {
148
+ billingUnit: "per_1k_chars",
149
+ baseCost: 0.3,
150
+ creditCost: 30
151
+ },
152
+ description: "Premium quality, 29 languages, voice cloning",
153
+ agentVisible: true
154
+ },
155
+ "elevenlabs/turbo-v2.5": {
156
+ id: "elevenlabs/turbo-v2.5",
157
+ name: "ElevenLabs Turbo v2.5",
158
+ providerId: "eleven_turbo_v2_5",
159
+ provider: "elevenlabs",
160
+ capabilities: {
161
+ tts: true,
162
+ languages: ["multi"],
163
+ voiceCloning: true,
164
+ streaming: true
165
+ },
166
+ pricing: {
167
+ billingUnit: "per_1k_chars",
168
+ baseCost: 0.15,
169
+ creditCost: 15
170
+ },
171
+ description: "Mid-tier \u2014 half the cost of Multilingual, ~300ms latency",
172
+ agentVisible: true
173
+ },
174
+ "elevenlabs/flash-v2.5": {
175
+ id: "elevenlabs/flash-v2.5",
176
+ name: "ElevenLabs Flash v2.5",
177
+ providerId: "eleven_flash_v2_5",
178
+ provider: "elevenlabs",
179
+ capabilities: {
180
+ tts: true,
181
+ languages: ["multi"],
182
+ voiceCloning: true,
183
+ streaming: true
184
+ },
185
+ pricing: {
186
+ billingUnit: "per_1k_chars",
187
+ baseCost: 0.075,
188
+ creditCost: 8
189
+ },
190
+ description: "Lowest cost, ~75ms latency \u2014 voice-chat tier",
191
+ agentVisible: true
192
+ },
193
+ // ─── ElevenLabs STT ─────────────────────────────────────────────────────
194
+ "elevenlabs/scribe-v1": {
195
+ id: "elevenlabs/scribe-v1",
196
+ name: "ElevenLabs Scribe v1",
197
+ providerId: "scribe_v1",
198
+ provider: "elevenlabs",
199
+ capabilities: {
200
+ stt: true,
201
+ languages: ["multi"],
202
+ timestamps: true,
203
+ diarization: true,
204
+ languageDetection: true
205
+ },
206
+ pricing: {
207
+ billingUnit: "per_minute",
208
+ baseCost: 667e-5,
209
+ creditCost: 1
210
+ },
211
+ description: "ElevenLabs transcription with diarization",
212
+ agentVisible: true
213
+ },
214
+ // ─── OpenAI TTS ─────────────────────────────────────────────────────────
215
+ // Source: https://openai.com/api/pricing/ — $15/1M chars (tts-1), $30 (hd).
216
+ "openai/tts-1": {
217
+ id: "openai/tts-1",
218
+ name: "OpenAI TTS-1",
219
+ providerId: "tts-1",
220
+ provider: "openai",
221
+ capabilities: {
222
+ tts: true,
223
+ languages: ["multi"],
224
+ streaming: true
225
+ },
226
+ pricing: {
227
+ billingUnit: "per_1k_chars",
228
+ baseCost: 0.015,
229
+ creditCost: 2
230
+ },
231
+ description: "OpenAI text-to-speech (standard)",
232
+ agentVisible: true
233
+ },
234
+ "openai/tts-1-hd": {
235
+ id: "openai/tts-1-hd",
236
+ name: "OpenAI TTS-1 HD",
237
+ providerId: "tts-1-hd",
238
+ provider: "openai",
239
+ capabilities: {
240
+ tts: true,
241
+ languages: ["multi"],
242
+ streaming: true
243
+ },
244
+ pricing: {
245
+ billingUnit: "per_1k_chars",
246
+ baseCost: 0.03,
247
+ creditCost: 4
248
+ },
249
+ description: "OpenAI text-to-speech (HD)",
250
+ agentVisible: true
251
+ },
252
+ "openai/gpt-4o-mini-tts": {
253
+ id: "openai/gpt-4o-mini-tts",
254
+ name: "OpenAI GPT-4o mini TTS",
255
+ providerId: "gpt-4o-mini-tts",
256
+ provider: "openai",
257
+ capabilities: {
258
+ tts: true,
259
+ languages: ["multi"],
260
+ streaming: true
261
+ },
262
+ pricing: {
263
+ billingUnit: "per_1k_chars",
264
+ // GPT-4o mini TTS — steerable speech, billed per char.
265
+ baseCost: 0.015
266
+ },
267
+ description: "OpenAI GPT-4o mini text-to-speech (steerable)",
268
+ agentVisible: true
269
+ },
270
+ // ─── OpenAI STT ─────────────────────────────────────────────────────────
271
+ "openai/whisper-1": {
272
+ id: "openai/whisper-1",
273
+ name: "OpenAI Whisper",
274
+ providerId: "whisper-1",
275
+ provider: "openai",
276
+ capabilities: {
277
+ stt: true,
278
+ languages: ["multi"],
279
+ timestamps: true,
280
+ languageDetection: true
281
+ },
282
+ pricing: {
283
+ billingUnit: "per_minute",
284
+ baseCost: 6e-3,
285
+ creditCost: 1
286
+ },
287
+ description: "OpenAI Whisper transcription",
288
+ agentVisible: true
289
+ },
290
+ // Source: https://openai.com/api/pricing/ (verified via costgoat.com/pricing/
291
+ // openai-transcription, fetched 2026-05-29) — gpt-4o-transcribe ~$0.006/min,
292
+ // gpt-4o-mini-transcribe ~$0.003/min (token-based billing exposed per-minute).
293
+ "openai/gpt-4o-transcribe": {
294
+ id: "openai/gpt-4o-transcribe",
295
+ name: "OpenAI GPT-4o Transcribe",
296
+ providerId: "gpt-4o-transcribe",
297
+ provider: "openai",
298
+ capabilities: {
299
+ stt: true,
300
+ languages: ["multi"],
301
+ timestamps: true,
302
+ languageDetection: true
303
+ },
304
+ pricing: {
305
+ billingUnit: "per_minute",
306
+ baseCost: 6e-3
307
+ },
308
+ description: "OpenAI GPT-4o transcription \u2014 higher accuracy than Whisper",
309
+ agentVisible: true
310
+ },
311
+ "openai/gpt-4o-mini-transcribe": {
312
+ id: "openai/gpt-4o-mini-transcribe",
313
+ name: "OpenAI GPT-4o mini Transcribe",
314
+ providerId: "gpt-4o-mini-transcribe",
315
+ provider: "openai",
316
+ capabilities: {
317
+ stt: true,
318
+ languages: ["multi"],
319
+ timestamps: true,
320
+ languageDetection: true
321
+ },
322
+ pricing: {
323
+ billingUnit: "per_minute",
324
+ baseCost: 3e-3
325
+ },
326
+ description: "OpenAI GPT-4o mini transcription \u2014 cheapest OpenAI STT",
327
+ agentVisible: true
328
+ },
329
+ // ─── MiniMax TTS ────────────────────────────────────────────────────────
330
+ // Voices live in `@agentproto/model-catalog/voice`; pricing keyed on model.
331
+ "minimax/speech-02-hd": {
332
+ id: "minimax/speech-02-hd",
333
+ name: "MiniMax Speech 02 HD",
334
+ providerId: "speech-02-hd",
335
+ provider: "minimax",
336
+ capabilities: {
337
+ tts: true,
338
+ languages: ["multi"],
339
+ voiceCloning: true,
340
+ streaming: true
341
+ },
342
+ pricing: {
343
+ billingUnit: "per_1k_chars",
344
+ baseCost: 0.018,
345
+ creditCost: 2
346
+ },
347
+ description: "MiniMax HD voice synthesis with cloning",
348
+ agentVisible: true
349
+ },
350
+ "minimax/speech-02-turbo": {
351
+ id: "minimax/speech-02-turbo",
352
+ name: "MiniMax Speech 02 Turbo",
353
+ providerId: "speech-02-turbo",
354
+ provider: "minimax",
355
+ capabilities: {
356
+ tts: true,
357
+ languages: ["multi"],
358
+ voiceCloning: true,
359
+ streaming: true
360
+ },
361
+ pricing: {
362
+ billingUnit: "per_1k_chars",
363
+ baseCost: 0.01,
364
+ creditCost: 1
365
+ },
366
+ description: "MiniMax low-latency TTS",
367
+ agentVisible: true
368
+ },
369
+ // ─── Deepgram STT ───────────────────────────────────────────────────────
370
+ // Source: https://deepgram.com/pricing — Nova-3 streaming $0.0058/min,
371
+ // batch $0.0048/min; Nova-2 streaming $0.0043, batch $0.0036.
372
+ "deepgram/nova-3": {
373
+ id: "deepgram/nova-3",
374
+ name: "Deepgram Nova-3",
375
+ providerId: "nova-3",
376
+ provider: "deepgram",
377
+ capabilities: {
378
+ stt: true,
379
+ languages: ["multi"],
380
+ timestamps: true,
381
+ diarization: true,
382
+ languageDetection: true
383
+ },
384
+ pricing: {
385
+ billingUnit: "per_minute",
386
+ baseCost: 48e-4,
387
+ creditCost: 1
388
+ },
389
+ description: "Latest Deepgram model \u2014 best accuracy",
390
+ agentVisible: true
391
+ },
392
+ "deepgram/nova-2": {
393
+ id: "deepgram/nova-2",
394
+ name: "Deepgram Nova-2",
395
+ providerId: "nova-2",
396
+ provider: "deepgram",
397
+ capabilities: {
398
+ stt: true,
399
+ languages: ["multi"],
400
+ timestamps: true,
401
+ diarization: true,
402
+ languageDetection: true
403
+ },
404
+ pricing: {
405
+ billingUnit: "per_minute",
406
+ baseCost: 36e-4,
407
+ creditCost: 1
408
+ },
409
+ description: "Production Deepgram model \u2014 battle-tested",
410
+ agentVisible: true
411
+ },
412
+ // ─── AssemblyAI STT ─────────────────────────────────────────────────────
413
+ // Source: https://www.assemblyai.com/pricing — Universal-2 $0.37/hour,
414
+ // Nano $0.12/hour. Per-minute math: /60.
415
+ "assemblyai/universal-2": {
416
+ id: "assemblyai/universal-2",
417
+ name: "AssemblyAI Universal-2",
418
+ providerId: "best",
419
+ provider: "assemblyai",
420
+ capabilities: {
421
+ stt: true,
422
+ languages: ["multi"],
423
+ timestamps: true,
424
+ diarization: true,
425
+ languageDetection: true
426
+ },
427
+ pricing: {
428
+ billingUnit: "per_minute",
429
+ baseCost: 617e-5,
430
+ creditCost: 1
431
+ },
432
+ description: "AssemblyAI flagship \u2014 high accuracy, slow",
433
+ agentVisible: true
434
+ },
435
+ "assemblyai/nano": {
436
+ id: "assemblyai/nano",
437
+ name: "AssemblyAI Nano",
438
+ providerId: "nano",
439
+ provider: "assemblyai",
440
+ capabilities: {
441
+ stt: true,
442
+ languages: ["multi"],
443
+ timestamps: true
444
+ },
445
+ pricing: {
446
+ billingUnit: "per_minute",
447
+ baseCost: 2e-3,
448
+ creditCost: 1
449
+ },
450
+ description: "AssemblyAI fast tier",
451
+ agentVisible: true
452
+ },
453
+ // ─── Replicate-hosted STT (cheap, slow) ─────────────────────────────────
454
+ // Source: https://replicate.com/<owner>/<model> per-run pricing pages.
455
+ "replicate/incredibly-fast-whisper": {
456
+ id: "replicate/incredibly-fast-whisper",
457
+ name: "Incredibly Fast Whisper (Replicate)",
458
+ providerId: "vaibhavs10/incredibly-fast-whisper",
459
+ provider: "replicate",
460
+ capabilities: {
461
+ stt: true,
462
+ languages: ["multi"],
463
+ timestamps: true,
464
+ languageDetection: true
465
+ },
466
+ pricing: {
467
+ billingUnit: "per_minute",
468
+ baseCost: 23e-4,
469
+ creditCost: 1
470
+ },
471
+ description: "Whisper-large-v3 on Replicate, fast-decoded",
472
+ agentVisible: true
473
+ },
474
+ // ─── Replicate-hosted TTS ───────────────────────────────────────────────
475
+ // Estimates per ~30s clip → per-1k-chars normalization (~150 chars / 30s).
476
+ "replicate/chatterbox": {
477
+ id: "replicate/chatterbox",
478
+ name: "Chatterbox (Replicate)",
479
+ providerId: "resemble-ai/chatterbox",
480
+ provider: "replicate",
481
+ capabilities: {
482
+ tts: true,
483
+ languages: ["en"],
484
+ voiceCloning: true
485
+ },
486
+ pricing: {
487
+ billingUnit: "per_1k_chars",
488
+ baseCost: 0.02,
489
+ creditCost: 2
490
+ },
491
+ description: "Replicate-hosted voice cloning TTS",
492
+ agentVisible: false
493
+ }
494
+ };
495
+ var AUDIO_MODEL_IDS = Object.keys(AUDIO_MODEL_CATALOG);
496
+ var AGENT_AUDIO_MODEL_IDS = Object.entries(AUDIO_MODEL_CATALOG).filter(([, m]) => m.agentVisible).map(([id]) => id);
497
+ var AGENT_TTS_MODEL_IDS = Object.entries(AUDIO_MODEL_CATALOG).filter(([, m]) => m.agentVisible && m.capabilities.tts).map(([id]) => id);
498
+ var AGENT_STT_MODEL_IDS = Object.entries(AUDIO_MODEL_CATALOG).filter(([, m]) => m.agentVisible && m.capabilities.stt).map(([id]) => id);
499
+ var S2S_MODEL_IDS = Object.entries(AUDIO_MODEL_CATALOG).filter(([, m]) => m.capabilities.s2s).map(([id]) => id);
500
+ var GEMINI_LIVE_MODEL_IDS = Object.values(
501
+ AUDIO_MODEL_CATALOG
502
+ ).filter((m) => m.capabilities.s2s && m.provider === "google").map((m) => m.providerId);
503
+ var DEFAULT_GEMINI_LIVE_MODEL = AUDIO_MODEL_CATALOG["google/gemini-live"]?.providerId ?? "gemini-2.5-flash-preview-tts";
504
+ function isAcceptedGeminiLiveModel(id) {
505
+ return GEMINI_LIVE_MODEL_IDS.includes(id);
506
+ }
507
+ function generateAudioModelTable(modality) {
508
+ return Object.values(AUDIO_MODEL_CATALOG).filter((m) => m.agentVisible && (!modality || m.capabilities[modality])).map((m) => {
509
+ const unit = m.pricing.billingUnit === "per_1k_chars" ? "1k chars" : m.pricing.billingUnit === "per_minute" ? "min" : "sec";
510
+ const modalities = [
511
+ m.capabilities.tts ? "TTS" : null,
512
+ m.capabilities.stt ? "STT" : null,
513
+ m.capabilities.s2s ? "S2S" : null
514
+ ].filter(Boolean).join("+");
515
+ return `| \`${m.id}\` | ${modalities} | $${m.pricing.baseCost}/${unit} | ${m.description} |`;
516
+ }).join("\n");
517
+ }
518
+
519
+ export { AGENT_AUDIO_MODEL_IDS, AGENT_STT_MODEL_IDS, AGENT_TTS_MODEL_IDS, AUDIO_MODEL_CATALOG, AUDIO_MODEL_IDS, DEFAULT_GEMINI_LIVE_MODEL, GEMINI_LIVE_MODEL_IDS, S2S_MODEL_IDS, generateAudioModelTable, isAcceptedGeminiLiveModel };
520
+ //# sourceMappingURL=chunk-WRUWNKDB.mjs.map
521
+ //# sourceMappingURL=chunk-WRUWNKDB.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/audio/catalog.ts"],"names":[],"mappings":";;;;;;;AAiFO,IAAM,mBAAA,GAA4D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAevE,oBAAA,EAAsB;AAAA,IACpB,EAAA,EAAI,oBAAA;AAAA,IACJ,IAAA,EAAM,uBAAA;AAAA,IACN,UAAA,EAAY,8BAAA;AAAA,IACZ,QAAA,EAAU,QAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,SAAA,EAAW;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,YAAA;AAAA;AAAA,MAEb,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,WAAA,EAAa,8DAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,EAAA,EAAI,wBAAA;AAAA,IACJ,IAAA,EAAM,qBAAA;AAAA,IACN,UAAA,EAAY,4BAAA;AAAA,IACZ,QAAA,EAAU,QAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,SAAA,EAAW;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,YAAA;AAAA;AAAA,MAEb,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,WAAA,EAAa,uDAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,8BAAA,EAAgC;AAAA,IAC9B,EAAA,EAAI,8BAAA;AAAA,IACJ,IAAA,EAAM,uBAAA;AAAA,IACN,UAAA,EAAY,8BAAA;AAAA,IACZ,QAAA,EAAU,QAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,SAAA,EAAW;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,YAAA;AAAA,MACb,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,WAAA,EAAa,0DAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,qBAAA,EAAuB;AAAA,IACrB,EAAA,EAAI,qBAAA;AAAA,IACJ,IAAA,EAAM,oCAAA;AAAA;AAAA;AAAA;AAAA,IAIN,UAAA,EAAY,kBAAA;AAAA,IACZ,QAAA,EAAU,QAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,SAAA,EAAW;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,YAAA;AAAA;AAAA,MAEb,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,WAAA,EAAa,sDAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,0BAAA,EAA4B;AAAA,IAC1B,EAAA,EAAI,0BAAA;AAAA,IACJ,IAAA,EAAM,sBAAA;AAAA,IACN,UAAA,EAAY,mBAAA;AAAA,IACZ,QAAA,EAAU,QAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,SAAA,EAAW;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,YAAA;AAAA;AAAA,MAEb,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,WAAA,EAAa,iDAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,2BAAA,EAA6B;AAAA,IAC3B,EAAA,EAAI,2BAAA;AAAA,IACJ,IAAA,EAAM,2BAAA;AAAA,IACN,UAAA,EAAY,mBAAA;AAAA,IACZ,QAAA,EAAU,YAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,SAAA,EAAW;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,YAAA;AAAA;AAAA,MAEb,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,WAAA,EAAa,kDAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA,EAKA,4BAAA,EAA8B;AAAA,IAC5B,EAAA,EAAI,4BAAA;AAAA,IACJ,IAAA,EAAM,4BAAA;AAAA,IACN,UAAA,EAAY,wBAAA;AAAA,IACZ,QAAA,EAAU,YAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,YAAA,EAAc,IAAA;AAAA,MACd,SAAA,EAAW;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,cAAA;AAAA,MACb,QAAA,EAAU,GAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAA,EAAa,8CAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,EAAA,EAAI,uBAAA;AAAA,IACJ,IAAA,EAAM,uBAAA;AAAA,IACN,UAAA,EAAY,mBAAA;AAAA,IACZ,QAAA,EAAU,YAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,YAAA,EAAc,IAAA;AAAA,MACd,SAAA,EAAW;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,cAAA;AAAA,MACb,QAAA,EAAU,IAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAA,EAAa,+DAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,uBAAA,EAAyB;AAAA,IACvB,EAAA,EAAI,uBAAA;AAAA,IACJ,IAAA,EAAM,uBAAA;AAAA,IACN,UAAA,EAAY,mBAAA;AAAA,IACZ,QAAA,EAAU,YAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,YAAA,EAAc,IAAA;AAAA,MACd,SAAA,EAAW;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,cAAA;AAAA,MACb,QAAA,EAAU,KAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAA,EAAa,mDAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA;AAAA,EAGA,sBAAA,EAAwB;AAAA,IACtB,EAAA,EAAI,sBAAA;AAAA,IACJ,IAAA,EAAM,sBAAA;AAAA,IACN,UAAA,EAAY,WAAA;AAAA,IACZ,QAAA,EAAU,YAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,UAAA,EAAY,IAAA;AAAA,MACZ,WAAA,EAAa,IAAA;AAAA,MACb,iBAAA,EAAmB;AAAA,KACrB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,YAAA;AAAA,MACb,QAAA,EAAU,MAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAA,EAAa,2CAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA;AAAA;AAAA,EAIA,cAAA,EAAgB;AAAA,IACd,EAAA,EAAI,cAAA;AAAA,IACJ,IAAA,EAAM,cAAA;AAAA,IACN,UAAA,EAAY,OAAA;AAAA,IACZ,QAAA,EAAU,QAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,SAAA,EAAW;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,cAAA;AAAA,MACb,QAAA,EAAU,KAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAA,EAAa,kCAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,EAAA,EAAI,iBAAA;AAAA,IACJ,IAAA,EAAM,iBAAA;AAAA,IACN,UAAA,EAAY,UAAA;AAAA,IACZ,QAAA,EAAU,QAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,SAAA,EAAW;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,cAAA;AAAA,MACb,QAAA,EAAU,IAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAA,EAAa,4BAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,wBAAA,EAA0B;AAAA,IACxB,EAAA,EAAI,wBAAA;AAAA,IACJ,IAAA,EAAM,wBAAA;AAAA,IACN,UAAA,EAAY,iBAAA;AAAA,IACZ,QAAA,EAAU,QAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,SAAA,EAAW;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,cAAA;AAAA;AAAA,MAEb,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,WAAA,EAAa,+CAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA;AAAA,EAGA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,kBAAA;AAAA,IACJ,IAAA,EAAM,gBAAA;AAAA,IACN,UAAA,EAAY,WAAA;AAAA,IACZ,QAAA,EAAU,QAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,UAAA,EAAY,IAAA;AAAA,MACZ,iBAAA,EAAmB;AAAA,KACrB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,YAAA;AAAA,MACb,QAAA,EAAU,IAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAA,EAAa,8BAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA,EAIA,0BAAA,EAA4B;AAAA,IAC1B,EAAA,EAAI,0BAAA;AAAA,IACJ,IAAA,EAAM,0BAAA;AAAA,IACN,UAAA,EAAY,mBAAA;AAAA,IACZ,QAAA,EAAU,QAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,UAAA,EAAY,IAAA;AAAA,MACZ,iBAAA,EAAmB;AAAA,KACrB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,YAAA;AAAA,MACb,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,WAAA,EAAa,iEAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,+BAAA,EAAiC;AAAA,IAC/B,EAAA,EAAI,+BAAA;AAAA,IACJ,IAAA,EAAM,+BAAA;AAAA,IACN,UAAA,EAAY,wBAAA;AAAA,IACZ,QAAA,EAAU,QAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,UAAA,EAAY,IAAA;AAAA,MACZ,iBAAA,EAAmB;AAAA,KACrB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,YAAA;AAAA,MACb,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,WAAA,EAAa,6DAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA;AAAA;AAAA,EAIA,sBAAA,EAAwB;AAAA,IACtB,EAAA,EAAI,sBAAA;AAAA,IACJ,IAAA,EAAM,sBAAA;AAAA,IACN,UAAA,EAAY,cAAA;AAAA,IACZ,QAAA,EAAU,SAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,YAAA,EAAc,IAAA;AAAA,MACd,SAAA,EAAW;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,cAAA;AAAA,MACb,QAAA,EAAU,KAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAA,EAAa,yCAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,yBAAA,EAA2B;AAAA,IACzB,EAAA,EAAI,yBAAA;AAAA,IACJ,IAAA,EAAM,yBAAA;AAAA,IACN,UAAA,EAAY,iBAAA;AAAA,IACZ,QAAA,EAAU,SAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,YAAA,EAAc,IAAA;AAAA,MACd,SAAA,EAAW;AAAA,KACb;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,cAAA;AAAA,MACb,QAAA,EAAU,IAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAA,EAAa,yBAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAA,EAAmB;AAAA,IACjB,EAAA,EAAI,iBAAA;AAAA,IACJ,IAAA,EAAM,iBAAA;AAAA,IACN,UAAA,EAAY,QAAA;AAAA,IACZ,QAAA,EAAU,UAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,UAAA,EAAY,IAAA;AAAA,MACZ,WAAA,EAAa,IAAA;AAAA,MACb,iBAAA,EAAmB;AAAA,KACrB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,YAAA;AAAA,MACb,QAAA,EAAU,KAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAA,EAAa,4CAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,EAAA,EAAI,iBAAA;AAAA,IACJ,IAAA,EAAM,iBAAA;AAAA,IACN,UAAA,EAAY,QAAA;AAAA,IACZ,QAAA,EAAU,UAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,UAAA,EAAY,IAAA;AAAA,MACZ,WAAA,EAAa,IAAA;AAAA,MACb,iBAAA,EAAmB;AAAA,KACrB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,YAAA;AAAA,MACb,QAAA,EAAU,KAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAA,EAAa,gDAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA;AAAA;AAAA;AAAA,EAKA,wBAAA,EAA0B;AAAA,IACxB,EAAA,EAAI,wBAAA;AAAA,IACJ,IAAA,EAAM,wBAAA;AAAA,IACN,UAAA,EAAY,MAAA;AAAA,IACZ,QAAA,EAAU,YAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,UAAA,EAAY,IAAA;AAAA,MACZ,WAAA,EAAa,IAAA;AAAA,MACb,iBAAA,EAAmB;AAAA,KACrB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,YAAA;AAAA,MACb,QAAA,EAAU,MAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAA,EAAa,gDAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,iBAAA,EAAmB;AAAA,IACjB,EAAA,EAAI,iBAAA;AAAA,IACJ,IAAA,EAAM,iBAAA;AAAA,IACN,UAAA,EAAY,MAAA;AAAA,IACZ,QAAA,EAAU,YAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,UAAA,EAAY;AAAA,KACd;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,YAAA;AAAA,MACb,QAAA,EAAU,IAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAA,EAAa,sBAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA;AAAA;AAAA,EAIA,mCAAA,EAAqC;AAAA,IACnC,EAAA,EAAI,mCAAA;AAAA,IACJ,IAAA,EAAM,qCAAA;AAAA,IACN,UAAA,EAAY,oCAAA;AAAA,IACZ,QAAA,EAAU,WAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,OAAO,CAAA;AAAA,MACnB,UAAA,EAAY,IAAA;AAAA,MACZ,iBAAA,EAAmB;AAAA,KACrB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,YAAA;AAAA,MACb,QAAA,EAAU,KAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAA,EAAa,6CAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AAAA;AAAA;AAAA,EAIA,sBAAA,EAAwB;AAAA,IACtB,EAAA,EAAI,sBAAA;AAAA,IACJ,IAAA,EAAM,wBAAA;AAAA,IACN,UAAA,EAAY,wBAAA;AAAA,IACZ,QAAA,EAAU,WAAA;AAAA,IACV,YAAA,EAAc;AAAA,MACZ,GAAA,EAAK,IAAA;AAAA,MACL,SAAA,EAAW,CAAC,IAAI,CAAA;AAAA,MAChB,YAAA,EAAc;AAAA,KAChB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAA,EAAa,cAAA;AAAA,MACb,QAAA,EAAU,IAAA;AAAA,MACV,UAAA,EAAY;AAAA,KACd;AAAA,IACA,WAAA,EAAa,oCAAA;AAAA,IACb,YAAA,EAAc;AAAA;AAElB;AAIO,IAAM,eAAA,GAAkB,MAAA,CAAO,IAAA,CAAK,mBAAmB;AAKvD,IAAM,wBAAwB,MAAA,CAAO,OAAA,CAAQ,mBAAmB,CAAA,CACpE,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,CAAA,CAAE,YAAY,CAAA,CAChC,GAAA,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE;AAEZ,IAAM,mBAAA,GAAsB,OAAO,OAAA,CAAQ,mBAAmB,EAClE,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,EAAE,YAAA,IAAgB,CAAA,CAAE,aAAa,GAAG,CAAA,CACtD,IAAI,CAAC,CAAC,EAAE,CAAA,KAAM,EAAE;AAEZ,IAAM,mBAAA,GAAsB,OAAO,OAAA,CAAQ,mBAAmB,EAClE,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA,KAAM,EAAE,YAAA,IAAgB,CAAA,CAAE,aAAa,GAAG,CAAA,CACtD,IAAI,CAAC,CAAC,EAAE,CAAA,KAAM,EAAE;AAQZ,IAAM,aAAA,GAAgB,OAAO,OAAA,CAAQ,mBAAmB,EAC5D,MAAA,CAAO,CAAC,GAAG,CAAC,MAAM,CAAA,CAAE,YAAA,CAAa,GAAG,CAAA,CACpC,GAAA,CAAI,CAAC,CAAC,EAAE,MAAM,EAAE;AAIZ,IAAM,wBAAkC,MAAA,CAAO,MAAA;AAAA,EACpD;AACF,CAAA,CACG,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,YAAA,CAAa,GAAA,IAAO,CAAA,CAAE,QAAA,KAAa,QAAQ,CAAA,CACzD,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,UAAU;AAGjB,IAAM,yBAAA,GACX,mBAAA,CAAoB,oBAAoB,CAAA,EAAG,UAAA,IAC3C;AAGK,SAAS,0BAA0B,EAAA,EAAqB;AAC7D,EAAA,OAAO,qBAAA,CAAsB,SAAS,EAAE,CAAA;AAC1C;AAGO,SAAS,wBAAwB,QAAA,EAAkC;AACxE,EAAA,OAAO,OAAO,MAAA,CAAO,mBAAmB,CAAA,CACrC,MAAA,CAAO,OAAK,CAAA,CAAE,YAAA,KAAiB,CAAC,QAAA,IAAY,EAAE,YAAA,CAAa,QAAQ,CAAA,CAAE,CAAA,CACrE,IAAI,CAAA,CAAA,KAAK;AACR,IAAA,MAAM,IAAA,GACJ,CAAA,CAAE,OAAA,CAAQ,WAAA,KAAgB,cAAA,GACtB,aACA,CAAA,CAAE,OAAA,CAAQ,WAAA,KAAgB,YAAA,GACxB,KAAA,GACA,KAAA;AACR,IAAA,MAAM,UAAA,GAAa;AAAA,MACjB,CAAA,CAAE,YAAA,CAAa,GAAA,GAAM,KAAA,GAAQ,IAAA;AAAA,MAC7B,CAAA,CAAE,YAAA,CAAa,GAAA,GAAM,KAAA,GAAQ,IAAA;AAAA,MAC7B,CAAA,CAAE,YAAA,CAAa,GAAA,GAAM,KAAA,GAAQ;AAAA,KAC/B,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACX,IAAA,OAAO,CAAA,IAAA,EAAO,CAAA,CAAE,EAAE,CAAA,KAAA,EAAQ,UAAU,CAAA,IAAA,EAAO,CAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,GAAA,EAAM,EAAE,WAAW,CAAA,EAAA,CAAA;AAAA,EAC1F,CAAC,CAAA,CACA,IAAA,CAAK,IAAI,CAAA;AACd","file":"chunk-WRUWNKDB.mjs","sourcesContent":["/**\n * Audio Model Catalog — TTS + STT provider models.\n *\n * Pairs with the voice catalog (`@agentproto/model-catalog/voice`) but a\n * separate concern: voices describe *what the output sounds like*, models\n * here describe *how the provider bills*. A single TTS model (e.g.\n * ElevenLabs `multilingual-v2`) can render hundreds of voices at the\n * same rate.\n *\n * Billing follows the per-kind dispatcher in `cost/index.ts`:\n * - TTS bills `per_1k_chars` (multiply characters/1000 × creditCost)\n * - STT bills `per_minute` (multiply ceil(seconds/60) × creditCost)\n *\n * Adding a model = 1 entry here + (if used by an integration) a\n * provider call-site that passes the model id to the cost dispatcher\n * so `calculateCost(modelId, { kind: \"audio\", characters / seconds })`\n * returns real numbers instead of the placeholder.\n *\n * Prices are point-in-time (refresh monthly via the drift-check\n * script). Sources noted per entry — production cost ≠ retail; we\n * markup ~1.25-1.5× into `creditCost` (displayed credits, 1 cred ≈\n * €0.01) consistent with the image/video catalogs.\n */\n\nimport type { AudioCapabilities } from \"../schema/audio.js\"\n\n/**\n * Audio MODALITY labels — what an audio model does. A model may do more\n * than one (e.g. a combined engine, or a provider exposing both cascade\n * TTS and conversational s2s), so these are boolean flags on\n * `AudioCapabilities`, not a single discriminator. The model's catalog\n * `kind` is always the family `\"audio\"`; modality lives here.\n * - `tts` — text → speech\n * - `stt` — speech → text\n * - `s2s` — speech ↔ speech (one model; distinct from a tts+llm+stt cascade)\n */\nexport type AudioModality = \"tts\" | \"stt\" | \"s2s\"\n\nexport type AudioBillingUnit = \"per_1k_chars\" | \"per_minute\" | \"per_second\"\n\nexport type AudioProvider =\n | \"elevenlabs\"\n | \"minimax\"\n | \"openai\"\n | \"replicate\"\n | \"deepgram\"\n | \"assemblyai\"\n | \"google\"\n\nexport interface AudioPricing {\n /** How the provider charges (drives the cost dispatcher math). */\n billingUnit: AudioBillingUnit\n /** Production cost in USD per `billingUnit`. */\n baseCost: number\n /**\n * @deprecated Credits derived at call time via\n * `computeCenticredits({ baseCostUsd: baseCost, category: \"audio\" })`.\n * Kept optional for back-compat with existing entries.\n */\n creditCost?: number\n /** Bypass markup formula and charge exactly this many credits per billingUnit. */\n overrideCreditCost?: number\n}\n\n// `AudioCapabilities` is owned by the zod schema (`../schema/audio.ts`) —\n// single source of truth (imported at the top). Re-exported so existing\n// `@agentproto/model-catalog/audio` consumers keep importing it from here.\nexport type { AudioCapabilities }\n\nexport interface AudioModelDefinition {\n id: string\n name: string\n /** Provider-facing identifier (e.g. `eleven_multilingual_v2`, `nova-3`). */\n providerId: string\n provider: AudioProvider\n capabilities: AudioCapabilities\n pricing: AudioPricing\n description: string\n agentVisible: boolean\n}\n\nexport const AUDIO_MODEL_CATALOG: Record<string, AudioModelDefinition> = {\n // ─── Speech-to-speech / realtime ────────────────────────────────────────\n // Provider runs the LLM in-session (no separate STT+TTS billing). These\n // bill on active session duration — `per_minute` reuses the same cost\n // path STT uses, fed `seconds` from the voice pod's session timer.\n // baseCost = blended USD/min (audio in+out), point-in-time; refresh via\n // the drift-check script. agentVisible:false — these are call engines,\n // not agent-selectable tool models.\n // `id` is our stable internal billing id (wired into the voice engine\n // descriptors); `providerId` is the live provider model string —\n // refresh it as providers ship new realtime models.\n // Gemini Live — the three provider IDs the adapter accepts. This\n // catalog is the source of truth for those ids + the default; the\n // adapter / tts-providers / env should resolve from here, not\n // re-hardcode. Default = flash (low latency, the call default).\n \"google/gemini-live\": {\n id: \"google/gemini-live\",\n name: \"Gemini Live 2.5 Flash\",\n providerId: \"gemini-2.5-flash-preview-tts\",\n provider: \"google\",\n capabilities: {\n s2s: true,\n languages: [\"multi\"],\n streaming: true,\n },\n pricing: {\n billingUnit: \"per_minute\",\n // ~$0.10/min blended audio in+out (Gemini Live token rates).\n baseCost: 0.1,\n },\n description: \"Google Gemini Live realtime s2s — low latency (default)\",\n agentVisible: false,\n },\n \"google/gemini-live-pro\": {\n id: \"google/gemini-live-pro\",\n name: \"Gemini Live 2.5 Pro\",\n providerId: \"gemini-2.5-pro-preview-tts\",\n provider: \"google\",\n capabilities: {\n s2s: true,\n languages: [\"multi\"],\n streaming: true,\n },\n pricing: {\n billingUnit: \"per_minute\",\n // Heavier/higher-quality tier — ~2× flash.\n baseCost: 0.2,\n },\n description: \"Google Gemini Live realtime s2s — higher quality\",\n agentVisible: false,\n },\n \"google/gemini-live-3.1-flash\": {\n id: \"google/gemini-live-3.1-flash\",\n name: \"Gemini Live 3.1 Flash\",\n providerId: \"gemini-3.1-flash-tts-preview\",\n provider: \"google\",\n capabilities: {\n s2s: true,\n languages: [\"multi\"],\n streaming: true,\n },\n pricing: {\n billingUnit: \"per_minute\",\n baseCost: 0.1,\n },\n description: \"Google Gemini Live realtime s2s — 3.1 flash preview\",\n agentVisible: false,\n },\n \"openai/gpt-realtime\": {\n id: \"openai/gpt-realtime\",\n name: \"OpenAI Realtime (gpt-realtime-1.5)\",\n // gpt-realtime-1.5 = best audio-in/audio-out realtime model.\n // Variants: gpt-realtime-2 (reasoning), gpt-realtime-mini (cheap),\n // gpt-realtime-translate (s2s translation).\n providerId: \"gpt-realtime-1.5\",\n provider: \"openai\",\n capabilities: {\n s2s: true,\n languages: [\"multi\"],\n streaming: true,\n },\n pricing: {\n billingUnit: \"per_minute\",\n // ~$0.30/min blended (audio in + out). Verify via drift-check.\n baseCost: 0.3,\n },\n description: \"OpenAI realtime speech-to-speech (best audio in/out)\",\n agentVisible: false,\n },\n \"openai/gpt-realtime-mini\": {\n id: \"openai/gpt-realtime-mini\",\n name: \"OpenAI Realtime mini\",\n providerId: \"gpt-realtime-mini\",\n provider: \"openai\",\n capabilities: {\n s2s: true,\n languages: [\"multi\"],\n streaming: true,\n },\n pricing: {\n billingUnit: \"per_minute\",\n // Cost-efficient realtime tier — ~⅓ of gpt-realtime-1.5.\n baseCost: 0.1,\n },\n description: \"Cost-efficient OpenAI realtime speech-to-speech\",\n agentVisible: false,\n },\n \"elevenlabs/conversational\": {\n id: \"elevenlabs/conversational\",\n name: \"ElevenLabs Conversational\",\n providerId: \"conversational-v1\",\n provider: \"elevenlabs\",\n capabilities: {\n s2s: true,\n languages: [\"multi\"],\n streaming: true,\n },\n pricing: {\n billingUnit: \"per_minute\",\n // ElevenLabs Conversational AI ~$0.10/min on the business tier.\n baseCost: 0.1,\n },\n description: \"ElevenLabs Conversational AI (agent-id s2s flow)\",\n agentVisible: false,\n },\n\n // ─── ElevenLabs TTS ─────────────────────────────────────────────────────\n // Source: https://elevenlabs.io/pricing (per 1k chars rates derived from\n // tiered credit packages — verified against direct ElevenLabs API quotes).\n \"elevenlabs/multilingual-v2\": {\n id: \"elevenlabs/multilingual-v2\",\n name: \"ElevenLabs Multilingual v2\",\n providerId: \"eleven_multilingual_v2\",\n provider: \"elevenlabs\",\n capabilities: {\n tts: true,\n languages: [\"multi\"],\n voiceCloning: true,\n streaming: true,\n },\n pricing: {\n billingUnit: \"per_1k_chars\",\n baseCost: 0.3,\n creditCost: 30,\n },\n description: \"Premium quality, 29 languages, voice cloning\",\n agentVisible: true,\n },\n \"elevenlabs/turbo-v2.5\": {\n id: \"elevenlabs/turbo-v2.5\",\n name: \"ElevenLabs Turbo v2.5\",\n providerId: \"eleven_turbo_v2_5\",\n provider: \"elevenlabs\",\n capabilities: {\n tts: true,\n languages: [\"multi\"],\n voiceCloning: true,\n streaming: true,\n },\n pricing: {\n billingUnit: \"per_1k_chars\",\n baseCost: 0.15,\n creditCost: 15,\n },\n description: \"Mid-tier — half the cost of Multilingual, ~300ms latency\",\n agentVisible: true,\n },\n \"elevenlabs/flash-v2.5\": {\n id: \"elevenlabs/flash-v2.5\",\n name: \"ElevenLabs Flash v2.5\",\n providerId: \"eleven_flash_v2_5\",\n provider: \"elevenlabs\",\n capabilities: {\n tts: true,\n languages: [\"multi\"],\n voiceCloning: true,\n streaming: true,\n },\n pricing: {\n billingUnit: \"per_1k_chars\",\n baseCost: 0.075,\n creditCost: 8,\n },\n description: \"Lowest cost, ~75ms latency — voice-chat tier\",\n agentVisible: true,\n },\n\n // ─── ElevenLabs STT ─────────────────────────────────────────────────────\n \"elevenlabs/scribe-v1\": {\n id: \"elevenlabs/scribe-v1\",\n name: \"ElevenLabs Scribe v1\",\n providerId: \"scribe_v1\",\n provider: \"elevenlabs\",\n capabilities: {\n stt: true,\n languages: [\"multi\"],\n timestamps: true,\n diarization: true,\n languageDetection: true,\n },\n pricing: {\n billingUnit: \"per_minute\",\n baseCost: 0.00667,\n creditCost: 1,\n },\n description: \"ElevenLabs transcription with diarization\",\n agentVisible: true,\n },\n\n // ─── OpenAI TTS ─────────────────────────────────────────────────────────\n // Source: https://openai.com/api/pricing/ — $15/1M chars (tts-1), $30 (hd).\n \"openai/tts-1\": {\n id: \"openai/tts-1\",\n name: \"OpenAI TTS-1\",\n providerId: \"tts-1\",\n provider: \"openai\",\n capabilities: {\n tts: true,\n languages: [\"multi\"],\n streaming: true,\n },\n pricing: {\n billingUnit: \"per_1k_chars\",\n baseCost: 0.015,\n creditCost: 2,\n },\n description: \"OpenAI text-to-speech (standard)\",\n agentVisible: true,\n },\n \"openai/tts-1-hd\": {\n id: \"openai/tts-1-hd\",\n name: \"OpenAI TTS-1 HD\",\n providerId: \"tts-1-hd\",\n provider: \"openai\",\n capabilities: {\n tts: true,\n languages: [\"multi\"],\n streaming: true,\n },\n pricing: {\n billingUnit: \"per_1k_chars\",\n baseCost: 0.03,\n creditCost: 4,\n },\n description: \"OpenAI text-to-speech (HD)\",\n agentVisible: true,\n },\n \"openai/gpt-4o-mini-tts\": {\n id: \"openai/gpt-4o-mini-tts\",\n name: \"OpenAI GPT-4o mini TTS\",\n providerId: \"gpt-4o-mini-tts\",\n provider: \"openai\",\n capabilities: {\n tts: true,\n languages: [\"multi\"],\n streaming: true,\n },\n pricing: {\n billingUnit: \"per_1k_chars\",\n // GPT-4o mini TTS — steerable speech, billed per char.\n baseCost: 0.015,\n },\n description: \"OpenAI GPT-4o mini text-to-speech (steerable)\",\n agentVisible: true,\n },\n\n // ─── OpenAI STT ─────────────────────────────────────────────────────────\n \"openai/whisper-1\": {\n id: \"openai/whisper-1\",\n name: \"OpenAI Whisper\",\n providerId: \"whisper-1\",\n provider: \"openai\",\n capabilities: {\n stt: true,\n languages: [\"multi\"],\n timestamps: true,\n languageDetection: true,\n },\n pricing: {\n billingUnit: \"per_minute\",\n baseCost: 0.006,\n creditCost: 1,\n },\n description: \"OpenAI Whisper transcription\",\n agentVisible: true,\n },\n // Source: https://openai.com/api/pricing/ (verified via costgoat.com/pricing/\n // openai-transcription, fetched 2026-05-29) — gpt-4o-transcribe ~$0.006/min,\n // gpt-4o-mini-transcribe ~$0.003/min (token-based billing exposed per-minute).\n \"openai/gpt-4o-transcribe\": {\n id: \"openai/gpt-4o-transcribe\",\n name: \"OpenAI GPT-4o Transcribe\",\n providerId: \"gpt-4o-transcribe\",\n provider: \"openai\",\n capabilities: {\n stt: true,\n languages: [\"multi\"],\n timestamps: true,\n languageDetection: true,\n },\n pricing: {\n billingUnit: \"per_minute\",\n baseCost: 0.006,\n },\n description: \"OpenAI GPT-4o transcription — higher accuracy than Whisper\",\n agentVisible: true,\n },\n \"openai/gpt-4o-mini-transcribe\": {\n id: \"openai/gpt-4o-mini-transcribe\",\n name: \"OpenAI GPT-4o mini Transcribe\",\n providerId: \"gpt-4o-mini-transcribe\",\n provider: \"openai\",\n capabilities: {\n stt: true,\n languages: [\"multi\"],\n timestamps: true,\n languageDetection: true,\n },\n pricing: {\n billingUnit: \"per_minute\",\n baseCost: 0.003,\n },\n description: \"OpenAI GPT-4o mini transcription — cheapest OpenAI STT\",\n agentVisible: true,\n },\n\n // ─── MiniMax TTS ────────────────────────────────────────────────────────\n // Voices live in `@agentproto/model-catalog/voice`; pricing keyed on model.\n \"minimax/speech-02-hd\": {\n id: \"minimax/speech-02-hd\",\n name: \"MiniMax Speech 02 HD\",\n providerId: \"speech-02-hd\",\n provider: \"minimax\",\n capabilities: {\n tts: true,\n languages: [\"multi\"],\n voiceCloning: true,\n streaming: true,\n },\n pricing: {\n billingUnit: \"per_1k_chars\",\n baseCost: 0.018,\n creditCost: 2,\n },\n description: \"MiniMax HD voice synthesis with cloning\",\n agentVisible: true,\n },\n \"minimax/speech-02-turbo\": {\n id: \"minimax/speech-02-turbo\",\n name: \"MiniMax Speech 02 Turbo\",\n providerId: \"speech-02-turbo\",\n provider: \"minimax\",\n capabilities: {\n tts: true,\n languages: [\"multi\"],\n voiceCloning: true,\n streaming: true,\n },\n pricing: {\n billingUnit: \"per_1k_chars\",\n baseCost: 0.01,\n creditCost: 1,\n },\n description: \"MiniMax low-latency TTS\",\n agentVisible: true,\n },\n\n // ─── Deepgram STT ───────────────────────────────────────────────────────\n // Source: https://deepgram.com/pricing — Nova-3 streaming $0.0058/min,\n // batch $0.0048/min; Nova-2 streaming $0.0043, batch $0.0036.\n \"deepgram/nova-3\": {\n id: \"deepgram/nova-3\",\n name: \"Deepgram Nova-3\",\n providerId: \"nova-3\",\n provider: \"deepgram\",\n capabilities: {\n stt: true,\n languages: [\"multi\"],\n timestamps: true,\n diarization: true,\n languageDetection: true,\n },\n pricing: {\n billingUnit: \"per_minute\",\n baseCost: 0.0048,\n creditCost: 1,\n },\n description: \"Latest Deepgram model — best accuracy\",\n agentVisible: true,\n },\n \"deepgram/nova-2\": {\n id: \"deepgram/nova-2\",\n name: \"Deepgram Nova-2\",\n providerId: \"nova-2\",\n provider: \"deepgram\",\n capabilities: {\n stt: true,\n languages: [\"multi\"],\n timestamps: true,\n diarization: true,\n languageDetection: true,\n },\n pricing: {\n billingUnit: \"per_minute\",\n baseCost: 0.0036,\n creditCost: 1,\n },\n description: \"Production Deepgram model — battle-tested\",\n agentVisible: true,\n },\n\n // ─── AssemblyAI STT ─────────────────────────────────────────────────────\n // Source: https://www.assemblyai.com/pricing — Universal-2 $0.37/hour,\n // Nano $0.12/hour. Per-minute math: /60.\n \"assemblyai/universal-2\": {\n id: \"assemblyai/universal-2\",\n name: \"AssemblyAI Universal-2\",\n providerId: \"best\",\n provider: \"assemblyai\",\n capabilities: {\n stt: true,\n languages: [\"multi\"],\n timestamps: true,\n diarization: true,\n languageDetection: true,\n },\n pricing: {\n billingUnit: \"per_minute\",\n baseCost: 0.00617,\n creditCost: 1,\n },\n description: \"AssemblyAI flagship — high accuracy, slow\",\n agentVisible: true,\n },\n \"assemblyai/nano\": {\n id: \"assemblyai/nano\",\n name: \"AssemblyAI Nano\",\n providerId: \"nano\",\n provider: \"assemblyai\",\n capabilities: {\n stt: true,\n languages: [\"multi\"],\n timestamps: true,\n },\n pricing: {\n billingUnit: \"per_minute\",\n baseCost: 0.002,\n creditCost: 1,\n },\n description: \"AssemblyAI fast tier\",\n agentVisible: true,\n },\n\n // ─── Replicate-hosted STT (cheap, slow) ─────────────────────────────────\n // Source: https://replicate.com/<owner>/<model> per-run pricing pages.\n \"replicate/incredibly-fast-whisper\": {\n id: \"replicate/incredibly-fast-whisper\",\n name: \"Incredibly Fast Whisper (Replicate)\",\n providerId: \"vaibhavs10/incredibly-fast-whisper\",\n provider: \"replicate\",\n capabilities: {\n stt: true,\n languages: [\"multi\"],\n timestamps: true,\n languageDetection: true,\n },\n pricing: {\n billingUnit: \"per_minute\",\n baseCost: 0.0023,\n creditCost: 1,\n },\n description: \"Whisper-large-v3 on Replicate, fast-decoded\",\n agentVisible: true,\n },\n\n // ─── Replicate-hosted TTS ───────────────────────────────────────────────\n // Estimates per ~30s clip → per-1k-chars normalization (~150 chars / 30s).\n \"replicate/chatterbox\": {\n id: \"replicate/chatterbox\",\n name: \"Chatterbox (Replicate)\",\n providerId: \"resemble-ai/chatterbox\",\n provider: \"replicate\",\n capabilities: {\n tts: true,\n languages: [\"en\"],\n voiceCloning: true,\n },\n pricing: {\n billingUnit: \"per_1k_chars\",\n baseCost: 0.02,\n creditCost: 2,\n },\n description: \"Replicate-hosted voice cloning TTS\",\n agentVisible: false,\n },\n}\n\n// ─── Derived arrays ──────────────────────────────────────────────────────\n\nexport const AUDIO_MODEL_IDS = Object.keys(AUDIO_MODEL_CATALOG) as [\n string,\n ...string[],\n]\n\nexport const AGENT_AUDIO_MODEL_IDS = Object.entries(AUDIO_MODEL_CATALOG)\n .filter(([, m]) => m.agentVisible)\n .map(([id]) => id) as [string, ...string[]]\n\nexport const AGENT_TTS_MODEL_IDS = Object.entries(AUDIO_MODEL_CATALOG)\n .filter(([, m]) => m.agentVisible && m.capabilities.tts)\n .map(([id]) => id) as [string, ...string[]]\n\nexport const AGENT_STT_MODEL_IDS = Object.entries(AUDIO_MODEL_CATALOG)\n .filter(([, m]) => m.agentVisible && m.capabilities.stt)\n .map(([id]) => id) as [string, ...string[]]\n\n// ─── S2S / Gemini Live source of truth ───────────────────────────────────\n// These were hardcoded (and drifting) across the gemini-live adapter,\n// tts-providers, and per-app voice env. The catalog is the single source;\n// consumers should import from here instead of re-declaring the strings.\n\n/** All catalog s2s entry ids (internal billing ids). */\nexport const S2S_MODEL_IDS = Object.entries(AUDIO_MODEL_CATALOG)\n .filter(([, m]) => m.capabilities.s2s)\n .map(([id]) => id)\n\n/** Provider model strings the Gemini Live adapter accepts server-side,\n * derived from the catalog's google/s2s entries. */\nexport const GEMINI_LIVE_MODEL_IDS: string[] = Object.values(\n AUDIO_MODEL_CATALOG\n)\n .filter(m => m.capabilities.s2s && m.provider === \"google\")\n .map(m => m.providerId)\n\n/** Default Gemini Live model — the low-latency flash tier (`google/gemini-live`). */\nexport const DEFAULT_GEMINI_LIVE_MODEL: string =\n AUDIO_MODEL_CATALOG[\"google/gemini-live\"]?.providerId ??\n \"gemini-2.5-flash-preview-tts\"\n\n/** True when `id` is one of the accepted Gemini Live provider model strings. */\nexport function isAcceptedGeminiLiveModel(id: string): boolean {\n return GEMINI_LIVE_MODEL_IDS.includes(id)\n}\n\n/** Generate a markdown table of agent-visible TTS / STT models for prompt blocks */\nexport function generateAudioModelTable(modality?: AudioModality): string {\n return Object.values(AUDIO_MODEL_CATALOG)\n .filter(m => m.agentVisible && (!modality || m.capabilities[modality]))\n .map(m => {\n const unit =\n m.pricing.billingUnit === \"per_1k_chars\"\n ? \"1k chars\"\n : m.pricing.billingUnit === \"per_minute\"\n ? \"min\"\n : \"sec\"\n const modalities = [\n m.capabilities.tts ? \"TTS\" : null,\n m.capabilities.stt ? \"STT\" : null,\n m.capabilities.s2s ? \"S2S\" : null,\n ]\n .filter(Boolean)\n .join(\"+\")\n return `| \\`${m.id}\\` | ${modalities} | $${m.pricing.baseCost}/${unit} | ${m.description} |`\n })\n .join(\"\\n\")\n}\n"]}