@absolutejs/voice 0.0.22-beta.525 → 0.0.22-beta.527

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/README.md CHANGED
@@ -4229,24 +4229,6 @@ await voice.startRecording();
4229
4229
  - partial user speech starts arriving
4230
4230
  - manual `sendAudio(...)` is called while assistant audio is playing
4231
4231
 
4232
- ## Duplex Benchmarks
4233
-
4234
- The first duplex benchmark lane measures package-level barge-in interruption on the client path. It records scenario pass/fail plus local interruption latency for:
4235
-
4236
- - manual `sendAudio(...)`
4237
- - partial transcript start
4238
- - input-level threshold crossing
4239
-
4240
- Run it with:
4241
-
4242
- ```bash
4243
- bun run bench:duplex
4244
- ```
4245
-
4246
- That writes:
4247
-
4248
- - `benchmark-results/duplex-barge-in.json`
4249
-
4250
4232
  ## Telephony
4251
4233
 
4252
4234
  `@absolutejs/voice` now includes a first PSTN bridge layer for Twilio Media Streams. It converts inbound `audio/x-mulaw` 8 kHz frames into the PCM format the voice session expects, and converts assistant PCM audio back into outbound Twilio media events.
@@ -4293,158 +4275,16 @@ await bridge.handleMessage(mediaMessageFromTwilio);
4293
4275
 
4294
4276
  The bridge also sends Twilio `clear` events on new inbound media after assistant audio has started streaming, so telephony barge-in can stop queued outbound playback.
4295
4277
 
4296
- You can benchmark the package-level Twilio bridge path with:
4297
-
4298
- ```bash
4299
- bun run bench:telephony:run
4300
- ```
4301
-
4302
- That writes:
4303
-
4304
- - `benchmark-results/telephony-twilio-bridge.json`
4305
- - `benchmark-results/telephony-run-manifest.json`
4306
-
4307
- For a live vendor-backed duplex smoke benchmark on the real TTS adapters, run:
4308
-
4309
- ```bash
4310
- bun run bench:duplex:live:run
4311
- ```
4312
-
4313
- That writes fresh results to:
4314
-
4315
- For a live vendor-backed telephony smoke benchmark through the Twilio bridge path, run:
4316
-
4317
- ```bash
4318
- bun run bench:telephony:live:run
4319
- ```
4320
-
4321
- That writes:
4322
-
4323
- - `benchmark-results/telephony-live-deepgram-elevenlabs.json`
4324
- - `benchmark-results/telephony-live-run-manifest.json`
4325
-
4326
- For a repeated live telephony stability read, run:
4327
-
4328
- ```bash
4329
- bun run bench:telephony:live:series
4330
- ```
4331
-
4332
- That writes:
4333
-
4334
- - `benchmark-results/telephony-live-series-summary-runs-3.json`
4335
-
4336
- For a live Deepgram telephony model shootout on the same PSTN path, run:
4337
-
4338
- ```bash
4339
- bun run bench:telephony:live:shootout
4340
- ```
4341
-
4342
- That writes:
4343
-
4344
- - `benchmark-results/telephony-live-flux-general-en.json`
4345
- - `benchmark-results/telephony-live-nova-3-phone.json`
4346
- - `benchmark-results/telephony-live-shootout-manifest.json`
4347
-
4348
- - `benchmark-results/duplex-live-elevenlabs.json`
4349
- - `benchmark-results/duplex-live-openai.json`
4350
- - `benchmark-results/duplex-live-all.json`
4351
- - `benchmark-results/duplex-live-run-manifest.json`
4352
-
4353
- For a browser-run duplex benchmark that uses a real headless Chrome `AudioContext` instead of the fake Node-side playback context, run:
4354
-
4355
- ```bash
4356
- bun run bench:duplex:browser:run
4357
- ```
4358
-
4359
- That writes fresh results to:
4360
-
4361
- - `benchmark-results/duplex-browser-elevenlabs.json`
4362
- - `benchmark-results/duplex-browser-openai.json`
4363
- - `benchmark-results/duplex-browser-all.json`
4364
- - `benchmark-results/duplex-browser-run-manifest.json`
4365
-
4366
- To measure browser duplex stability across repeated runs, use:
4367
-
4368
- ```bash
4369
- bun run bench:duplex:browser:series
4370
- ```
4371
-
4372
- That writes:
4373
-
4374
- - `benchmark-results/duplex-browser-series-summary-runs-3.json`
4375
- - per-run provider artifacts like `benchmark-results/duplex-browser-elevenlabs-series-run-1.json`
4376
-
4377
- For repeated interrupt-and-resume across several consecutive assistant turns, run:
4378
-
4379
- ```bash
4380
- bun run bench:duplex:browser:overlap:run
4381
- ```
4382
-
4383
- That writes:
4384
-
4385
- - `benchmark-results/duplex-browser-overlap-elevenlabs.json`
4386
- - `benchmark-results/duplex-browser-overlap-openai.json`
4387
- - `benchmark-results/duplex-browser-overlap-all.json`
4388
- - `benchmark-results/duplex-browser-overlap-run-manifest.json`
4389
-
4390
- To measure overlap stability across repeated live browser runs, use:
4391
-
4392
- ```bash
4393
- bun run bench:duplex:browser:overlap:series
4394
- ```
4395
-
4396
- That writes:
4397
-
4398
- - `benchmark-results/duplex-browser-overlap-series-summary-runs-3.json`
4399
- - per-run provider artifacts like `benchmark-results/duplex-browser-overlap-elevenlabs-series-run-1.json`
4400
-
4401
- ## TTS Benchmarks
4402
-
4403
- `@absolutejs/voice` now includes a first TTS benchmark harness for streaming output adapters. The initial metrics are:
4404
-
4405
- - `firstAudioLatencyMs`
4406
- - `elapsedMs`
4407
- - `audioChunkCount`
4408
- - `totalAudioBytes`
4409
- - estimated PCM `audioDurationMs`
4410
- - interruption responsiveness via `interruptionLatencyMs`
4411
-
4412
- Run the full TTS suite with one command:
4413
-
4414
- ```bash
4415
- bun run bench:tts:run
4416
- ```
4417
-
4418
- That writes fresh results to:
4419
-
4420
- - `benchmark-results/tts-all.json`
4421
- - `benchmark-results/tts-elevenlabs.json`
4422
- - `benchmark-results/tts-openai.json`
4423
- - `benchmark-results/tts-run-manifest.json`
4424
-
4425
- To measure interruption/cancel responsiveness separately:
4426
-
4427
- ```bash
4428
- bun run bench:tts:interrupt:run
4429
- ```
4430
-
4431
- That writes fresh interruption results to:
4432
-
4433
- - `benchmark-results/tts-all-interrupt.json`
4434
- - `benchmark-results/tts-elevenlabs-interrupt.json`
4435
- - `benchmark-results/tts-openai-interrupt.json`
4436
- - `benchmark-results/tts-interrupt-run-manifest.json`
4437
-
4438
4278
  ## Recommended Production Path
4439
4279
 
4440
- The current best-performing path in the bundled benchmarks is:
4280
+ The current best-performing path is:
4441
4281
 
4442
4282
  - `deepgram-flux` as primary STT
4443
4283
  - route-level `lexicon` for pronunciation/domain entries
4444
4284
  - route-level `phraseHints`
4445
4285
  - route-level `correctTurn` using `createPhraseHintCorrectionHandler()`
4446
4286
 
4447
- That combination outperformed the raw vendor-only paths in the package benchmarks because it lets AbsoluteJS repair domain-specific terms after strong base transcription instead of depending on a second STT vendor to rescue hard turns.
4287
+ That combination outperformed the raw vendor-only paths in our benchmarks ([absolutejs/benchmarks](https://github.com/absolutejs/benchmarks)) because it lets AbsoluteJS repair domain-specific terms after strong base transcription instead of depending on a second STT vendor to rescue hard turns.
4448
4288
 
4449
4289
  Minimal production-oriented example:
4450
4290
 
@@ -4527,11 +4367,7 @@ app.use(
4527
4367
 
4528
4368
  - `best` maps to the current strongest in-package path: Deepgram Flux plus generic deterministic correction.
4529
4369
  - `low-cost` maps to a cheaper/raw package path: one primary STT pass with no correction hook.
4530
- - session benchmarks now include per-turn cost telemetry fields like `averageRelativeCostUnits`, `averagePrimaryAudioMs`, and `averageFallbackReplayAudioMs`.
4531
- - use `bun run bench:stt:routing:run` to benchmark both in parallel and write fresh:
4532
- - `benchmark-results/sessions-best-stt-runs-3.json`
4533
- - `benchmark-results/sessions-cheap-stt-runs-3.json`
4534
- - `benchmark-results/stt-routing-run-manifest.json`
4370
+ - session cost telemetry exposes per-turn fields like `averageRelativeCostUnits`, `averagePrimaryAudioMs`, and `averageFallbackReplayAudioMs`.
4535
4371
 
4536
4372
  ## LLM Provider Routing
4537
4373
 
@@ -5175,137 +5011,9 @@ voice.bindHTMX({ element: "#voice-htmx-sync" });
5175
5011
 
5176
5012
  That keeps HTMX pages declarative without inventing custom fragment endpoints for core voice session UI.
5177
5013
 
5178
- ## Competitive Benchmarking
5179
-
5180
- The package includes a competitive benchmark harness for STT quality and responsiveness.
5181
-
5182
- Run:
5183
-
5184
- ```bash
5185
- bun run bench:vs
5186
- ```
5187
-
5188
- Use profiles to focus where you want to win:
5189
-
5190
- - `bun run bench:vs all` (default)
5191
- - `bun run bench:vs all accents`
5192
- - `bun run bench:vs all code-switch`
5193
- - `bun run bench:vs all jargon`
5194
- - `bun run bench:vs all multilingual`
5195
- - `bun run bench:vs all multi-speaker`
5196
- - `bun run bench:vs all telephony`
5197
- - `bun run bench:vs all clean`
5198
- - `bun run bench:vs all noisy`
5199
- - `bun run bench:vs deepgram accents`
5200
- - `bun run bench:vs deepgram-flux accents` (compare Flux candidate, default includes VAPI output if configured)
5201
- - `bun run bench:vs deepgram-nova accents`
5202
-
5203
- Current benchmark guidance:
5204
-
5205
- - use `deepgram-flux` as the primary conversational STT path
5206
- - prefer route-level `phraseHints` plus `correctTurn` over cross-vendor fallback for domain-specific accuracy
5207
- - use fallback vendors only when your own traffic proves they beat the package-level correction path
5208
- - do not treat `openai` as the default STT path unless your own benchmarks prove it for your traffic
5209
-
5210
- If you use a VAPI baseline file, you can run a direct model comparison:
5211
-
5212
- ```bash
5213
- bun run bench:vs:deepgram-flux
5214
- ```
5215
-
5216
- To benchmark Nova vs Flux back-to-back, set the model explicitly:
5217
-
5218
- ```bash
5219
- DEEPGRAM_MODEL=flux-general-en bun run bench:deepgram:accents
5220
- DEEPGRAM_MODEL=nova-3 bun run bench:deepgram:accents
5221
- ```
5222
-
5223
- To stress the STT path with synthesized narrowband phone audio:
5224
-
5225
- ```bash
5226
- bun run bench:telephony
5227
- bun run bench:telephony:run
5228
- bun run bench:deepgram:telephony
5229
- bun run bench:deepgram:corrected:telephony
5230
- bun run bench:jargon
5231
- bun run bench:deepgram:jargon
5232
- bun run bench:deepgram:corrected:audit:jargon
5233
- bun run bench:multi-speaker:run
5234
- bun run bench:multi-speaker:analyze
5235
- bun run bench:deepgram:multi-speaker
5236
- ```
5237
-
5238
- To compare against Vapi or other providers, provide a baseline JSON file:
5239
-
5240
- ```bash
5241
- bun run bench:vs all accents --compare /path/to/vapi-baseline.json
5242
- ```
5243
-
5244
- Expected benchmark payload:
5245
-
5246
- ```json
5247
- {
5248
- "source": "vapi",
5249
- "results": [
5250
- {
5251
- "adapterId": "vapi-baseline",
5252
- "summary": {
5253
- "passRate": 0.0,
5254
- "averageWordErrorRate": 1.0,
5255
- "averageTermRecall": 0.0,
5256
- "averageElapsedMs": 0,
5257
- "averageTimeToEndOfTurnMs": 0,
5258
- "averageTimeToFirstFinalMs": 0,
5259
- "averageTimeToFirstPartialMs": 0,
5260
- "wordAccuracyRate": 0.0
5261
- }
5262
- }
5263
- ]
5264
- }
5265
- ```
5266
-
5267
- For a fast parse-only validation of arguments:
5268
-
5269
- ```bash
5270
- bun run ./scripts/benchmark-vs.ts --dry-run
5271
- ```
5272
-
5273
- The harness prints:
5274
-
5275
- - pass rate and recall deltas per adapter
5276
- - weighted scorecard (`passRate`, term recall, word accuracy)
5277
- - optional competitor deltas (Vapi)
5278
- - a markdown report beside the JSON output, for example:
5279
- - `benchmark-results/vs-all-telephony.json`
5280
- - `benchmark-results/vs-all-telephony.md`
5281
-
5282
- For package-level multi-turn behavior, use the session benchmark harness instead of raw STT-only benchmarking:
5283
-
5284
- ```bash
5285
- bun run bench:sessions
5286
- bun run bench:deepgram:sessions
5287
- bun run bench:deepgram:soak:sessions
5288
- bun run bench:deepgram:hybrid:sessions
5289
- bun run bench:deepgram:corrected:sessions
5290
- bun run bench:deepgram:corrected:soak:sessions
5291
- bun run bench:stt:routing:run
5292
- bun run bench:assemblyai:sessions
5293
- bun run bench:openai:sessions
5294
- bun run bench:soak:run
5295
- ```
5296
-
5297
- That harness runs the adapter through `VoiceSession` itself, so the output reflects reconnect handling, turn commit stability, and duplicate-turn protection rather than only raw transcript quality.
5298
-
5299
- `bench:soak:run` is the STT-5 runner. It executes the long-session soak lane for raw Deepgram Flux, corrected Deepgram, and the reconnect resilience suite in parallel, then writes fresh JSON into `benchmark-results/` without the runs deleting each other.
5300
-
5301
- `bench:stt:routing:run` is the STT-7 runner. It benchmarks the package’s current `best` vs `low-cost` session strategies in parallel, clears stale outputs first, and writes a manifest so the cost-aware summaries are guaranteed fresh.
5014
+ ## Benchmarks
5302
5015
 
5303
- `bench:deepgram:corrected:sessions` exercises the current recommended package-level production path:
5304
-
5305
- - Deepgram Flux as primary STT
5306
- - phrase hints routed through the adapter layer
5307
- - committed-turn correction via `createPhraseHintCorrectionHandler()`
5308
- - core turn dedupe, reconnect, and transcript selection still owned by `@absolutejs/voice`
5016
+ Performance & accuracy benchmarks (STT, TTS, duplex, telephony, sessions) and head-to-head comparisons against Vapi live in a dedicated repo: **[absolutejs/benchmarks](https://github.com/absolutejs/benchmarks)**. They consume the published `@absolutejs/voice` package and provider adapters.
5309
5017
 
5310
5018
  ## Adapter Contract
5311
5019
 
@@ -5426,100 +5134,6 @@ Fallback triggers are evaluated at commit time:
5426
5134
 
5427
5135
  The fallback adapter receives the same window of turn audio as the primary (default `8s`, configurable with `replayWindowMs`) and can only run `maxAttemptsPerTurn` times per turn.
5428
5136
 
5429
- ## Benchmark Fixture Sources
5430
-
5431
- Bundled fixtures cover the current in-repo English benchmark suite. For multilingual and code-switch evaluation, add external fixture directories and let the benchmark scripts merge them automatically.
5432
-
5433
- The public corpus builder currently assembles:
5434
-
5435
- - FLEURS multilingual dev clips
5436
- - BSC Catalan-Spanish code-switch evaluation clips
5437
- - CoSHE Hindi-English code-switch evaluation clips
5438
-
5439
- Set either:
5440
-
5441
- - `VOICE_FIXTURE_DIR=/abs/path/to/fixtures`
5442
- - `VOICE_FIXTURE_DIRS=/abs/path/one,/abs/path/two`
5443
-
5444
- Each fixture directory must include:
5445
-
5446
- - `manifest.json`
5447
- - `pcm/*.pcm`
5448
-
5449
- Each manifest entry can include:
5450
-
5451
- - `language`
5452
- - `tags`
5453
- Use `multilingual`, `bilingual`, or `code-switch` to route fixtures into the multilingual benchmark lane.
5454
-
5455
- Benchmark commands:
5456
-
5457
- ```bash
5458
- bun run bench:multilingual
5459
- bun run bench:code-switch
5460
- bun run bench:code-switch:series
5461
- bun run bench:code-switch:ca-es
5462
- bun run bench:code-switch:ca-es:series
5463
- bun run bench:code-switch:ca-es:corts:series
5464
- bun run bench:code-switch:ca-es:parlament:series
5465
- bun run bench:code-switch:hi-en
5466
- bun run bench:code-switch:hi-en:series
5467
- bun run bench:deepgram:multilingual
5468
- bun run bench:deepgram:code-switch
5469
- bun run bench:deepgram:code-switch:series
5470
- bun run bench:deepgram:code-switch:ca-es
5471
- bun run bench:deepgram:code-switch:ca-es:series
5472
- bun run bench:deepgram:code-switch:ca-es:corts:series
5473
- bun run bench:deepgram:code-switch:ca-es:parlament:series
5474
- bun run bench:deepgram:code-switch:ca-es:nova3-multi:series
5475
- bun run bench:deepgram:code-switch:ca-es:nova3-ca:series
5476
- bun run bench:deepgram:code-switch:ca-es:nova3-es:series
5477
- bun run bench:deepgram:code-switch:ca-es:nova2-ca:series
5478
- bun run bench:deepgram:code-switch:ca-es:nova2-es:series
5479
- bun run bench:deepgram:code-switch:ca-es:best:corrected:series
5480
- bun run bench:deepgram:code-switch:ca-es:parlament:debug
5481
- bun run bench:deepgram:code-switch:corrected:ca-es
5482
- bun run bench:deepgram:code-switch:corrected:ca-es:series
5483
- bun run bench:deepgram:code-switch:corrected:ca-es:corts:series
5484
- bun run bench:deepgram:code-switch:corrected:ca-es:parlament:series
5485
- bun run bench:deepgram:code-switch:hi-en
5486
- bun run bench:deepgram:code-switch:hi-en:series
5487
- bun run bench:deepgram:code-switch:corrected:hi-en
5488
- bun run bench:deepgram:code-switch:corrected:hi-en:series
5489
- bun run bench:deepgram:code-switch:corrected
5490
- bun run bench:deepgram:code-switch:corrected:series
5491
- bun run bench:assemblyai:multilingual
5492
- bun run bench:assemblyai:code-switch
5493
- bun run bench:openai:multilingual
5494
- bun run bench:openai:code-switch
5495
- bun run bench:openai:code-switch:series
5496
- bun run bench:openai:code-switch:ca-es
5497
- bun run bench:openai:code-switch:ca-es:series
5498
- bun run bench:openai:code-switch:corrected:ca-es
5499
- bun run bench:openai:code-switch:corrected:ca-es:series
5500
- bun run bench:openai:code-switch:hi-en
5501
- bun run bench:openai:code-switch:hi-en:series
5502
- bun run bench:openai:code-switch:corrected:hi-en
5503
- bun run bench:openai:code-switch:corrected:hi-en:series
5504
- bun run bench:openai:code-switch:corrected
5505
- bun run bench:openai:code-switch:corrected:series
5506
- ```
5507
-
5508
- Current benchmark direction:
5509
-
5510
- - `openai` is the strongest adapter on the current public multilingual corpus
5511
- - `deepgram` remains the strongest browser-English path
5512
- - raw code-switch remains a weaker surface for every adapter and should be benchmarked separately with `bench:code-switch`
5513
- - jargon-heavy/domain-heavy English terms now have their own profile; use `bench:jargon` for the cross-adapter read and `bench:deepgram:corrected:audit:jargon` to compare `raw` vs `generic` vs `experimental` vs `benchmarkSeeded`
5514
- - code-switch should be treated as language-pair-specific, not one universal lane; `ca-es` and `hi-en` now have dedicated series commands
5515
- - `ca-es` also has a dedicated Deepgram model/language shootout lane so you can compare `nova-3`/`nova-2` with `multi`, `ca`, and `es` routing without overwriting results
5516
- - current best `ca-es` base path is `deepgram` `nova-3` with `language=ca`; the short runner script uses that path for corrected series
5517
- - `ca-es` is also split by source now: `corts_valencianes` and `parlament_parla` can be benchmarked independently, and `parlament_parla` has a dedicated transcript dump script
5518
- - corrected code-switch runs now have dedicated lexicon-driven series commands so raw and corrected stability can be compared directly
5519
- - multi-speaker diarization is now its own benchmark surface; use `bench:multi-speaker:run` for the parallel cross-adapter plus Deepgram-specific read
5520
- - when tuning diarization specifically, use `bench:multi-speaker:analyze` to split Deepgram into clean vs noisy handoff lanes, include a corrected noisy read, and emit a speaker-pattern debug dump
5521
- - use the `:series` commands when you need stability rather than a single-pass snapshot
5522
-
5523
5137
  ## Client Primitives
5524
5138
 
5525
5139
  Browser and framework helpers sit on top of the same connection core:
package/dist/index.d.ts CHANGED
@@ -204,7 +204,7 @@ export { buildVoicePostCallAnalysisReport, createVoicePostCallAnalysisRoutes, re
204
204
  export { buildVoiceGuardrailReport, createVoiceGuardrailPolicy, createVoiceGuardrailRuntime, createVoiceGuardrailRoutes, evaluateVoiceGuardrailPolicy, renderVoiceGuardrailMarkdown, voiceGuardrailPolicyPresets, } from "./guardrails";
205
205
  export { createId, createVoiceSessionRecord } from "./store";
206
206
  export { createVoiceSTTRoutingCorrectionHandler, resolveVoiceSTTRoutingStrategy, } from "./routing";
207
- export { applyRiskTieredPhraseHintCorrections, applyPhraseHintCorrections, createDomainLexicon, createDomainPhraseHints, createPhraseHintCorrectionHandler, createRiskyTurnCorrectionHandler, } from "./correction";
207
+ export { applyLexiconCorrections, applyRiskTieredPhraseHintCorrections, applyPhraseHintCorrections, createDomainLexicon, createDomainPhraseHints, createPhraseHintCorrectionHandler, createRiskyTurnCorrectionHandler, } from "./correction";
208
208
  export { conditionAudioChunk, resolveAudioConditioningConfig, } from "./audioConditioning";
209
209
  export { resolveVoiceRuntimePreset } from "./presets";
210
210
  export { resolveTurnDetectionConfig, TURN_PROFILE_DEFAULTS, } from "./turnProfiles";
package/dist/index.js CHANGED
@@ -53040,6 +53040,7 @@ export {
53040
53040
  applyVoiceCampaignTelephonyOutcome,
53041
53041
  applyRiskTieredPhraseHintCorrections,
53042
53042
  applyPhraseHintCorrections,
53043
+ applyLexiconCorrections,
53043
53044
  applyBrowserNoiseSuppression,
53044
53045
  appendVoiceRealCallProfileRecoveryEvidence,
53045
53046
  appendVoiceProviderRouterTraceEvent,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@absolutejs/voice",
3
- "version": "0.0.22-beta.525",
3
+ "version": "0.0.22-beta.527",
4
4
  "description": "Voice primitives and Elysia plugin for AbsoluteJS",
5
5
  "repository": {
6
6
  "type": "git",
@@ -16,150 +16,6 @@
16
16
  "license": "CC BY-NC 4.0",
17
17
  "author": "Alex Kahn",
18
18
  "scripts": {
19
- "bench:accents": "bun run ./scripts/benchmark-stt.ts all accents",
20
- "bench:jargon": "bun run ./scripts/benchmark-stt.ts all jargon",
21
- "bench:jargon:run": "bun run ./scripts/run-jargon-benchmarks.ts",
22
- "bench:multilingual": "bun run ./scripts/benchmark-stt.ts all multilingual",
23
- "bench:multi-speaker": "bun run ./scripts/benchmark-stt.ts all multi-speaker",
24
- "bench:multi-speaker:run": "bun run ./scripts/run-multi-speaker-benchmarks.ts",
25
- "bench:multi-speaker:analyze": "bun run ./scripts/run-multi-speaker-analysis.ts",
26
- "bench:deepgram:multi-speaker:clean": "bun run ./scripts/benchmark-stt.ts deepgram multi-speaker-clean",
27
- "bench:deepgram:multi-speaker:noisy": "bun run ./scripts/benchmark-stt.ts deepgram multi-speaker-noisy",
28
- "bench:deepgram:multi-speaker:noisy:corrected": "bun run ./scripts/benchmark-stt.ts deepgram-corrected multi-speaker-noisy",
29
- "bench:deepgram:multi-speaker:debug": "bun run ./scripts/run-multi-speaker-debug.ts",
30
- "bench:code-switch": "bun run ./scripts/benchmark-stt.ts all code-switch",
31
- "bench:code-switch:series": "bun run ./scripts/benchmark-stt.ts all code-switch --runs 5",
32
- "bench:code-switch:ca-es": "bun run ./scripts/benchmark-stt.ts all code-switch-ca-es",
33
- "bench:code-switch:ca-es:series": "bun run ./scripts/benchmark-stt.ts all code-switch-ca-es --runs 5",
34
- "bench:code-switch:ca-es:corts:series": "bun run ./scripts/benchmark-stt.ts all code-switch-ca-es-corts --runs 5",
35
- "bench:code-switch:ca-es:parlament:series": "bun run ./scripts/benchmark-stt.ts all code-switch-ca-es-parlament --runs 5",
36
- "bench:code-switch:hi-en": "bun run ./scripts/benchmark-stt.ts all code-switch-hi-en",
37
- "bench:code-switch:hi-en:series": "bun run ./scripts/benchmark-stt.ts all code-switch-hi-en --runs 5",
38
- "bench:telephony": "bun run ./scripts/benchmark-stt.ts all telephony",
39
- "bench:telephony:bridge": "bun run ./scripts/benchmark-telephony.ts",
40
- "bench:telephony:run": "bun run ./scripts/run-telephony-benchmarks.ts",
41
- "bench:tts": "bun run ./scripts/benchmark-tts.ts all",
42
- "bench:tts:elevenlabs": "bun run ./scripts/benchmark-tts.ts elevenlabs",
43
- "bench:tts:openai": "bun run ./scripts/benchmark-tts.ts openai",
44
- "bench:tts:interrupt": "bun run ./scripts/benchmark-tts.ts all interrupt",
45
- "bench:tts:interrupt:elevenlabs": "bun run ./scripts/benchmark-tts.ts elevenlabs interrupt",
46
- "bench:tts:interrupt:openai": "bun run ./scripts/benchmark-tts.ts openai interrupt",
47
- "bench:tts:run": "bun run ./scripts/run-tts-benchmarks.ts",
48
- "bench:tts:interrupt:run": "bun run ./scripts/run-tts-interruption-benchmarks.ts",
49
- "bench:duplex": "bun run ./scripts/benchmark-duplex.ts",
50
- "bench:duplex:live": "bun run ./scripts/benchmark-live-duplex.ts all",
51
- "bench:duplex:live:elevenlabs": "bun run ./scripts/benchmark-live-duplex.ts elevenlabs",
52
- "bench:duplex:live:openai": "bun run ./scripts/benchmark-live-duplex.ts openai",
53
- "bench:duplex:live:run": "bun run ./scripts/run-live-duplex-benchmarks.ts",
54
- "bench:telephony:live": "bun run ./scripts/benchmark-live-telephony.ts",
55
- "bench:telephony:live:run": "bun run ./scripts/run-live-telephony-benchmarks.ts",
56
- "bench:telephony:live:series": "bun run ./scripts/run-live-telephony-series.ts",
57
- "bench:telephony:live:shootout": "bun run ./scripts/run-live-telephony-shootout.ts",
58
- "bench:telephony:live:stt:shootout": "bun run ./scripts/run-live-telephony-stt-shootout.ts",
59
- "bench:telephony:live:tts:shootout": "bun run ./scripts/run-live-telephony-tts-shootout.ts",
60
- "bench:duplex:browser": "bun run ./scripts/benchmark-browser-duplex.ts all",
61
- "bench:duplex:browser:elevenlabs": "bun run ./scripts/benchmark-browser-duplex.ts elevenlabs",
62
- "bench:duplex:browser:openai": "bun run ./scripts/benchmark-browser-duplex.ts openai",
63
- "bench:duplex:browser:run": "bun run ./scripts/run-browser-duplex-benchmarks.ts",
64
- "bench:duplex:browser:series": "bun run ./scripts/run-browser-duplex-series.ts",
65
- "bench:duplex:browser:overlap": "bun run ./scripts/benchmark-browser-duplex-overlap.ts all",
66
- "bench:duplex:browser:overlap:run": "bun run ./scripts/run-browser-duplex-overlap-benchmarks.ts",
67
- "bench:duplex:browser:overlap:series": "bun run ./scripts/run-browser-duplex-overlap-series.ts",
68
- "bench:production": "bun run ./scripts/benchmark-production.ts",
69
- "bench:production:deepgram-corrected:audit": "bun run ./scripts/benchmark-production.ts deepgram-corrected-audit",
70
- "bench:assemblyai": "bun run ./scripts/benchmark-stt.ts assemblyai",
71
- "bench:assemblyai:accents": "bun run ./scripts/benchmark-stt.ts assemblyai accents",
72
- "bench:assemblyai:multilingual": "bun run ./scripts/benchmark-stt.ts assemblyai multilingual",
73
- "bench:assemblyai:code-switch": "bun run ./scripts/benchmark-stt.ts assemblyai code-switch",
74
- "bench:openai": "bun run ./scripts/benchmark-stt.ts openai",
75
- "bench:openai:accents": "bun run ./scripts/benchmark-stt.ts openai accents",
76
- "bench:openai:multilingual": "bun run ./scripts/benchmark-stt.ts openai multilingual",
77
- "bench:openai:code-switch": "bun run ./scripts/benchmark-stt.ts openai code-switch",
78
- "bench:openai:code-switch:series": "bun run ./scripts/benchmark-stt.ts openai code-switch --runs 5",
79
- "bench:openai:code-switch:ca-es": "bun run ./scripts/benchmark-stt.ts openai code-switch-ca-es",
80
- "bench:openai:code-switch:ca-es:series": "bun run ./scripts/benchmark-stt.ts openai code-switch-ca-es --runs 5",
81
- "bench:openai:code-switch:hi-en": "bun run ./scripts/benchmark-stt.ts openai code-switch-hi-en",
82
- "bench:openai:code-switch:hi-en:series": "bun run ./scripts/benchmark-stt.ts openai code-switch-hi-en --runs 5",
83
- "bench:openai:code-switch:corrected": "bun run ./scripts/benchmark-stt.ts openai-corrected code-switch",
84
- "bench:openai:code-switch:corrected:series": "bun run ./scripts/benchmark-stt.ts openai-corrected code-switch --runs 5",
85
- "bench:openai:code-switch:corrected:ca-es": "bun run ./scripts/benchmark-stt.ts openai-corrected code-switch-ca-es",
86
- "bench:openai:code-switch:corrected:ca-es:series": "bun run ./scripts/benchmark-stt.ts openai-corrected code-switch-ca-es --runs 5",
87
- "bench:openai:code-switch:corrected:hi-en": "bun run ./scripts/benchmark-stt.ts openai-corrected code-switch-hi-en",
88
- "bench:openai:code-switch:corrected:hi-en:series": "bun run ./scripts/benchmark-stt.ts openai-corrected code-switch-hi-en --runs 5",
89
- "bench:openai:diag": "bun run ./scripts/benchmark-stt.ts openai --diag",
90
- "bench:deepgram": "bun run ./scripts/benchmark-stt.ts deepgram",
91
- "bench:deepgram:accents": "bun run ./scripts/benchmark-stt.ts deepgram accents",
92
- "bench:deepgram:jargon": "bun run ./scripts/benchmark-stt.ts deepgram jargon",
93
- "bench:deepgram:multilingual": "bun run ./scripts/benchmark-stt.ts deepgram multilingual",
94
- "bench:deepgram:multi-speaker": "bun run ./scripts/benchmark-stt.ts deepgram multi-speaker",
95
- "bench:deepgram:code-switch": "bun run ./scripts/benchmark-stt.ts deepgram code-switch",
96
- "bench:deepgram:code-switch:series": "bun run ./scripts/benchmark-stt.ts deepgram code-switch --runs 5",
97
- "bench:deepgram:code-switch:ca-es": "bun run ./scripts/benchmark-stt.ts deepgram code-switch-ca-es",
98
- "bench:deepgram:code-switch:ca-es:series": "bun run ./scripts/benchmark-stt.ts deepgram code-switch-ca-es --runs 5",
99
- "bench:deepgram:code-switch:ca-es:corts:series": "bun run ./scripts/benchmark-stt.ts deepgram code-switch-ca-es-corts --runs 5",
100
- "bench:deepgram:code-switch:ca-es:parlament:series": "bun run ./scripts/benchmark-stt.ts deepgram code-switch-ca-es-parlament --runs 5",
101
- "bench:deepgram:code-switch:ca-es:nova3-multi:series": "DEEPGRAM_CODE_SWITCH_MODEL=nova-3 DEEPGRAM_CODE_SWITCH_LANGUAGE=multi bun run ./scripts/benchmark-stt.ts deepgram code-switch-ca-es --runs 5 --variant nova3-multi",
102
- "bench:deepgram:code-switch:ca-es:nova3-ca:series": "DEEPGRAM_CODE_SWITCH_MODEL=nova-3 DEEPGRAM_CODE_SWITCH_LANGUAGE=ca bun run ./scripts/benchmark-stt.ts deepgram code-switch-ca-es --runs 5 --variant nova3-ca",
103
- "bench:deepgram:code-switch:ca-es:nova3-es:series": "DEEPGRAM_CODE_SWITCH_MODEL=nova-3 DEEPGRAM_CODE_SWITCH_LANGUAGE=es bun run ./scripts/benchmark-stt.ts deepgram code-switch-ca-es --runs 5 --variant nova3-es",
104
- "bench:deepgram:code-switch:ca-es:nova2-ca:series": "DEEPGRAM_CODE_SWITCH_MODEL=nova-2 DEEPGRAM_CODE_SWITCH_LANGUAGE=ca bun run ./scripts/benchmark-stt.ts deepgram code-switch-ca-es --runs 5 --variant nova2-ca",
105
- "bench:deepgram:code-switch:ca-es:nova2-es:series": "DEEPGRAM_CODE_SWITCH_MODEL=nova-2 DEEPGRAM_CODE_SWITCH_LANGUAGE=es bun run ./scripts/benchmark-stt.ts deepgram code-switch-ca-es --runs 5 --variant nova2-es",
106
- "bench:deepgram:code-switch:ca-es:best:corrected:series": "bun run ./scripts/run-caes-corrected-benchmark.ts",
107
- "bench:deepgram:code-switch:hi-en": "bun run ./scripts/benchmark-stt.ts deepgram code-switch-hi-en",
108
- "bench:deepgram:code-switch:hi-en:series": "bun run ./scripts/benchmark-stt.ts deepgram code-switch-hi-en --runs 5",
109
- "bench:deepgram:code-switch:corrected": "bun run ./scripts/benchmark-stt.ts deepgram-corrected code-switch",
110
- "bench:deepgram:code-switch:corrected:series": "bun run ./scripts/benchmark-stt.ts deepgram-corrected code-switch --runs 5",
111
- "bench:deepgram:code-switch:corrected:ca-es": "bun run ./scripts/benchmark-stt.ts deepgram-corrected code-switch-ca-es",
112
- "bench:deepgram:code-switch:corrected:ca-es:series": "bun run ./scripts/benchmark-stt.ts deepgram-corrected code-switch-ca-es --runs 5",
113
- "bench:deepgram:code-switch:corrected:ca-es:corts:series": "bun run ./scripts/benchmark-stt.ts deepgram-corrected code-switch-ca-es-corts --runs 5",
114
- "bench:deepgram:code-switch:corrected:ca-es:parlament:series": "bun run ./scripts/benchmark-stt.ts deepgram-corrected code-switch-ca-es-parlament --runs 5",
115
- "bench:deepgram:code-switch:ca-es:parlament:debug": "bun run ./scripts/run-caes-parlament-debug.ts",
116
- "bench:deepgram:code-switch:ca-es:parlament:rerun": "bun run ./scripts/run-caes-parlament-series.ts",
117
- "bench:deepgram:code-switch:ca-es:full:rerun": "bun run ./scripts/run-caes-full-series.ts",
118
- "bench:deepgram:code-switch:corrected:hi-en": "bun run ./scripts/benchmark-stt.ts deepgram-corrected code-switch-hi-en",
119
- "bench:deepgram:code-switch:corrected:hi-en:series": "bun run ./scripts/benchmark-stt.ts deepgram-corrected code-switch-hi-en --runs 5",
120
- "corpus:multilingual": "bun run ./scripts/build-multilingual-corpus.ts",
121
- "bench:deepgram:corrected:audit": "DEEPGRAM_MODEL=flux-general-en bun run ./scripts/benchmark-stt.ts deepgram-corrected-audit all",
122
- "bench:deepgram:corrected:audit:jargon": "DEEPGRAM_MODEL=flux-general-en bun run ./scripts/benchmark-stt.ts deepgram-corrected-audit jargon",
123
- "bench:deepgram:corrected:telephony": "DEEPGRAM_MODEL=flux-general-en bun run ./scripts/benchmark-stt.ts deepgram-corrected telephony",
124
- "bench:deepgram:corrected:audit:telephony": "DEEPGRAM_MODEL=flux-general-en bun run ./scripts/benchmark-stt.ts deepgram-corrected-audit telephony",
125
- "bench:deepgram:telephony": "bun run ./scripts/benchmark-stt.ts deepgram telephony",
126
- "bench:deepgram:nova": "bun run ./scripts/benchmark-stt.ts deepgram",
127
- "bench:deepgram:flux": "DEEPGRAM_MODEL=flux-general-en bun run ./scripts/benchmark-stt.ts deepgram",
128
- "bench:vs": "bun run ./scripts/benchmark-vs.ts",
129
- "bench:vs:all": "bun run ./scripts/benchmark-vs.ts all all",
130
- "bench:vs:all:accents": "bun run ./scripts/benchmark-vs.ts all accents",
131
- "bench:vs:all:code-switch": "bun run ./scripts/benchmark-vs.ts all code-switch",
132
- "bench:vs:all:jargon": "bun run ./scripts/benchmark-vs.ts all jargon",
133
- "bench:vs:all:multilingual": "bun run ./scripts/benchmark-vs.ts all multilingual",
134
- "bench:vs:all:multi-speaker": "bun run ./scripts/benchmark-vs.ts all multi-speaker",
135
- "bench:vs:all:telephony": "bun run ./scripts/benchmark-vs.ts all telephony",
136
- "bench:vs:deepgram": "bun run ./scripts/benchmark-vs.ts deepgram all",
137
- "bench:vs:deepgram-nova": "bun run ./scripts/benchmark-vs.ts deepgram-nova all",
138
- "bench:vs:deepgram-flux": "bun run ./scripts/benchmark-vs.ts deepgram-flux all --compare benchmarks/your-vapi-metrics.json",
139
- "bench:vs:assemblyai": "bun run ./scripts/benchmark-vs.ts assemblyai all",
140
- "bench:vs:openai": "bun run ./scripts/benchmark-vs.ts openai all",
141
- "bench:deepgram:sessions": "bun run ./scripts/benchmark-session.ts deepgram",
142
- "bench:stt:best:sessions": "bun run ./scripts/benchmark-session.ts best-stt",
143
- "bench:stt:cheap:sessions": "bun run ./scripts/benchmark-session.ts cheap-stt",
144
- "bench:stt:routing:run": "bun run ./scripts/run-stt-routing-benchmarks.ts",
145
- "bench:deepgram:soak:sessions": "bun run ./scripts/benchmark-session.ts deepgram-flux --profile soak --runs 3",
146
- "bench:deepgram:hybrid:sessions": "bun run ./scripts/benchmark-session.ts deepgram-hybrid",
147
- "bench:deepgram:corrected:sessions": "bun run ./scripts/benchmark-session.ts deepgram-corrected",
148
- "bench:deepgram:corrected:soak:sessions": "bun run ./scripts/benchmark-session.ts deepgram-corrected --profile soak --runs 3",
149
- "bench:deepgram:corrected:sessions:audit": "bun run ./scripts/benchmark-session.ts deepgram-corrected-audit",
150
- "bench:deepgram:openai-hybrid:sessions": "bun run ./scripts/benchmark-session.ts deepgram-openai-hybrid",
151
- "bench:production:deepgram-flux-noisy-room": "bun run ./scripts/benchmark-production.ts deepgram-flux-noisy-room",
152
- "bench:production:deepgram-corrected": "bun run ./scripts/benchmark-production.ts deepgram-corrected",
153
- "bench:resilience": "bun run ./scripts/benchmark-resilience.ts",
154
- "bench:soak:run": "bun run ./scripts/run-session-soak-benchmarks.ts",
155
- "bench:soak:debug": "bun run ./scripts/run-session-soak-debug.ts",
156
- "bench:soak:debug:corrected": "bun run ./scripts/run-session-soak-debug.ts corrected",
157
- "bench:soak:series:debug": "bun run ./scripts/run-session-soak-series-debug.ts raw",
158
- "bench:soak:series:debug:corrected": "bun run ./scripts/run-session-soak-series-debug.ts corrected",
159
- "bench:sessions": "bun run ./scripts/benchmark-session.ts all",
160
- "bench:stt": "bun run ./scripts/benchmark-stt.ts all",
161
- "bench:assemblyai:sessions": "bun run ./scripts/benchmark-session.ts assemblyai",
162
- "bench:openai:sessions": "bun run ./scripts/benchmark-session.ts openai",
163
19
  "build": "bun run ./scripts/build-htmx-bootstrap-asset.ts && rm -rf dist && bun build ./src/index.ts ./src/client/index.ts ./src/react/index.ts ./src/vue/index.ts ./src/svelte/index.ts ./src/angular/index.ts ./src/testing/index.ts --outdir dist --target bun --external elysia --external react --external vue --external @angular/core --external @absolutejs/absolute --external @absolutejs/ai --external @absolutejs/media && bun build ./src/client/htmxBootstrap.ts --outdir dist/client --target browser --format esm && bun build ./src/embed/index.ts --outfile dist/embed/voice-widget.js --target browser --format iife --minify && bun build ./src/embed/index.ts --outdir dist/embed --target browser --format esm && tsc --emitDeclarationOnly --project tsconfig.json",
164
20
  "format": "prettier --write \"./**/*.{js,jsx,ts,tsx,json,md}\"",
165
21
  "lint": "eslint ./src",