@fabric-harness/sdk 1.11.0 → 1.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/model-pricing.d.ts +6 -0
- package/dist/model-pricing.d.ts.map +1 -1
- package/dist/model-pricing.js +17 -0
- package/dist/model-pricing.js.map +1 -1
- package/dist/model.d.ts +4 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js.map +1 -1
- package/dist/strict.d.ts +12 -0
- package/dist/strict.d.ts.map +1 -1
- package/dist/strict.js +5 -0
- package/dist/strict.js.map +1 -1
- package/dist/voice-pipeline.d.ts +49 -0
- package/dist/voice-pipeline.d.ts.map +1 -0
- package/dist/voice-pipeline.js +312 -0
- package/dist/voice-pipeline.js.map +1 -0
- package/dist/voice-stt-cartesia.d.ts +29 -0
- package/dist/voice-stt-cartesia.d.ts.map +1 -0
- package/dist/voice-stt-cartesia.js +160 -0
- package/dist/voice-stt-cartesia.js.map +1 -0
- package/dist/voice-stt-deepgram.d.ts +28 -0
- package/dist/voice-stt-deepgram.d.ts.map +1 -0
- package/dist/voice-stt-deepgram.js +174 -0
- package/dist/voice-stt-deepgram.js.map +1 -0
- package/dist/voice-stt.d.ts +72 -0
- package/dist/voice-stt.d.ts.map +1 -0
- package/dist/voice-stt.js +8 -0
- package/dist/voice-stt.js.map +1 -0
- package/dist/voice-tts-cartesia.d.ts +36 -0
- package/dist/voice-tts-cartesia.d.ts.map +1 -0
- package/dist/voice-tts-cartesia.js +159 -0
- package/dist/voice-tts-cartesia.js.map +1 -0
- package/dist/voice-tts-elevenlabs.d.ts +35 -0
- package/dist/voice-tts-elevenlabs.d.ts.map +1 -0
- package/dist/voice-tts-elevenlabs.js +163 -0
- package/dist/voice-tts-elevenlabs.js.map +1 -0
- package/dist/voice-tts.d.ts +50 -0
- package/dist/voice-tts.d.ts.map +1 -0
- package/dist/voice-tts.js +11 -0
- package/dist/voice-tts.js.map +1 -0
- package/dist/voice-ws-shared.d.ts +20 -0
- package/dist/voice-ws-shared.d.ts.map +1 -0
- package/dist/voice-ws-shared.js +42 -0
- package/dist/voice-ws-shared.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline voice mode: composes a streaming `SttProvider`, a text
|
|
3
|
+
* `ModelProvider`, and a streaming `TtsProvider` into a `VoiceSession`.
|
|
4
|
+
* Use this for ElevenLabs / Cartesia / Deepgram and any future
|
|
5
|
+
* single-modality vendor combo.
|
|
6
|
+
*
|
|
7
|
+
* For monolithic realtime models (OpenAI Realtime), use
|
|
8
|
+
* `OpenAIRealtimeVoiceProvider` directly — that path is lower-latency and
|
|
9
|
+
* includes server-side VAD.
|
|
10
|
+
*
|
|
11
|
+
* Conversation flow:
|
|
12
|
+
* user speech → STT → final transcript → LLM → text chunks → TTS →
|
|
13
|
+
* audio bytes back to caller. Tool calls relay through the existing
|
|
14
|
+
* `tool_call` / `submitToolResult` contract on `VoiceSession`.
|
|
15
|
+
*
|
|
16
|
+
* Barge-in: when the STT emits `speech_started` while we're speaking,
|
|
17
|
+
* the in-flight TTS stream is aborted and the LLM call cancelled. The
|
|
18
|
+
* caller should also stop playback in their UI.
|
|
19
|
+
*
|
|
20
|
+
* Cost: rolled up across STT seconds, LLM tokens, TTS characters into a
|
|
21
|
+
* single `usage` object on `response_done`. `costBudget` observes the
|
|
22
|
+
* total — same `cost_limit` event semantics as realtime mode.
|
|
23
|
+
*/
|
|
24
|
+
import type { ModelProvider } from './model.js';
|
|
25
|
+
import type { SttProvider } from './voice-stt.js';
|
|
26
|
+
import type { TtsProvider } from './voice-tts.js';
|
|
27
|
+
import type { VoiceConnectOptions, VoiceProvider, VoiceSession } from './voice.js';
|
|
28
|
+
export interface PipelineVoiceProviderOptions {
|
|
29
|
+
/** STT provider (e.g. Deepgram). Default model + format come from the provider. */
|
|
30
|
+
stt: SttProvider;
|
|
31
|
+
/** TTS provider (e.g. ElevenLabs). */
|
|
32
|
+
tts: TtsProvider;
|
|
33
|
+
/** LLM provider. Reuses any existing `ModelProvider` — Anthropic, OpenAI, Gemini, gateways. */
|
|
34
|
+
llm: ModelProvider;
|
|
35
|
+
/** Model id to forward in `ModelRequest`. */
|
|
36
|
+
model: string;
|
|
37
|
+
/** Provider name override for telemetry. Default `pipeline:<stt>+<tts>`. */
|
|
38
|
+
name?: string;
|
|
39
|
+
}
|
|
40
|
+
export declare class PipelineVoiceProvider implements VoiceProvider {
|
|
41
|
+
readonly name: string;
|
|
42
|
+
private readonly stt;
|
|
43
|
+
private readonly tts;
|
|
44
|
+
private readonly llm;
|
|
45
|
+
private readonly model;
|
|
46
|
+
constructor(options: PipelineVoiceProviderOptions);
|
|
47
|
+
connect(options?: VoiceConnectOptions): Promise<VoiceSession>;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=voice-pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice-pipeline.d.ts","sourceRoot":"","sources":["../src/voice-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,OAAO,KAAK,EAAgB,aAAa,EAA6B,MAAM,YAAY,CAAC;AAEzF,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,KAAK,EACV,mBAAmB,EAEnB,aAAa,EACb,YAAY,EAEb,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,4BAA4B;IAC3C,mFAAmF;IACnF,GAAG,EAAE,WAAW,CAAC;IACjB,sCAAsC;IACtC,GAAG,EAAE,WAAW,CAAC;IACjB,+FAA+F;IAC/F,GAAG,EAAE,aAAa,CAAC;IACnB,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,qBAAsB,YAAW,aAAa;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,OAAO,EAAE,4BAA4B;IAQ3C,OAAO,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC;CAexE"}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline voice mode: composes a streaming `SttProvider`, a text
|
|
3
|
+
* `ModelProvider`, and a streaming `TtsProvider` into a `VoiceSession`.
|
|
4
|
+
* Use this for ElevenLabs / Cartesia / Deepgram and any future
|
|
5
|
+
* single-modality vendor combo.
|
|
6
|
+
*
|
|
7
|
+
* For monolithic realtime models (OpenAI Realtime), use
|
|
8
|
+
* `OpenAIRealtimeVoiceProvider` directly — that path is lower-latency and
|
|
9
|
+
* includes server-side VAD.
|
|
10
|
+
*
|
|
11
|
+
* Conversation flow:
|
|
12
|
+
* user speech → STT → final transcript → LLM → text chunks → TTS →
|
|
13
|
+
* audio bytes back to caller. Tool calls relay through the existing
|
|
14
|
+
* `tool_call` / `submitToolResult` contract on `VoiceSession`.
|
|
15
|
+
*
|
|
16
|
+
* Barge-in: when the STT emits `speech_started` while we're speaking,
|
|
17
|
+
* the in-flight TTS stream is aborted and the LLM call cancelled. The
|
|
18
|
+
* caller should also stop playback in their UI.
|
|
19
|
+
*
|
|
20
|
+
* Cost: rolled up across STT seconds, LLM tokens, TTS characters into a
|
|
21
|
+
* single `usage` object on `response_done`. `costBudget` observes the
|
|
22
|
+
* total — same `cost_limit` event semantics as realtime mode.
|
|
23
|
+
*/
|
|
24
|
+
import { CostLimitExceededError } from './cost-budget.js';
|
|
25
|
+
import { applyEstimatedCost } from './model-pricing.js';
|
|
26
|
+
import { toolsToModelSchemas } from './model.js';
|
|
27
|
+
export class PipelineVoiceProvider {
|
|
28
|
+
name;
|
|
29
|
+
stt;
|
|
30
|
+
tts;
|
|
31
|
+
llm;
|
|
32
|
+
model;
|
|
33
|
+
constructor(options) {
|
|
34
|
+
this.stt = options.stt;
|
|
35
|
+
this.tts = options.tts;
|
|
36
|
+
this.llm = options.llm;
|
|
37
|
+
this.model = options.model;
|
|
38
|
+
this.name = options.name ?? `pipeline:${options.stt.name}+${options.tts.name}`;
|
|
39
|
+
}
|
|
40
|
+
async connect(options = {}) {
|
|
41
|
+
const sttSession = await this.stt.open({
|
|
42
|
+
...(options.audioFormat ? { audioFormat: options.audioFormat } : {}),
|
|
43
|
+
...(options.sampleRate ? { sampleRate: options.sampleRate } : {}),
|
|
44
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
45
|
+
});
|
|
46
|
+
return new PipelineVoiceSession({
|
|
47
|
+
stt: sttSession,
|
|
48
|
+
sttProviderName: this.stt.name,
|
|
49
|
+
tts: this.tts,
|
|
50
|
+
llm: this.llm,
|
|
51
|
+
model: this.model,
|
|
52
|
+
options,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
class PipelineVoiceSession {
|
|
57
|
+
stt;
|
|
58
|
+
sttProviderName;
|
|
59
|
+
tts;
|
|
60
|
+
llm;
|
|
61
|
+
modelId;
|
|
62
|
+
tools;
|
|
63
|
+
instructions;
|
|
64
|
+
costBudget;
|
|
65
|
+
requestCostLimitApproval;
|
|
66
|
+
queue = [];
|
|
67
|
+
waiters = [];
|
|
68
|
+
closed = false;
|
|
69
|
+
messages = [];
|
|
70
|
+
state = 'listening';
|
|
71
|
+
currentTurnAbort;
|
|
72
|
+
pendingToolCalls = [];
|
|
73
|
+
// Per-turn rollup for cost telemetry.
|
|
74
|
+
turnUsage = {};
|
|
75
|
+
constructor(init) {
|
|
76
|
+
this.stt = init.stt;
|
|
77
|
+
this.sttProviderName = init.sttProviderName;
|
|
78
|
+
this.tts = init.tts;
|
|
79
|
+
this.llm = init.llm;
|
|
80
|
+
this.modelId = init.model;
|
|
81
|
+
this.tools = init.options.tools ?? [];
|
|
82
|
+
this.instructions = init.options.instructions;
|
|
83
|
+
this.costBudget = init.options.costBudget;
|
|
84
|
+
this.requestCostLimitApproval = init.options.requestCostLimitApproval;
|
|
85
|
+
if (this.instructions)
|
|
86
|
+
this.messages.push({ role: 'system', content: this.instructions });
|
|
87
|
+
this.push({ type: 'session_open' });
|
|
88
|
+
// Pump STT events.
|
|
89
|
+
void this.consumeStt();
|
|
90
|
+
init.options.signal?.addEventListener('abort', () => void this.close(), { once: true });
|
|
91
|
+
}
|
|
92
|
+
async sendAudio(frame) {
|
|
93
|
+
if (this.closed)
|
|
94
|
+
throw new Error('Voice session closed');
|
|
95
|
+
this.stt.send(frame);
|
|
96
|
+
}
|
|
97
|
+
async sendText(text) {
|
|
98
|
+
if (this.closed)
|
|
99
|
+
throw new Error('Voice session closed');
|
|
100
|
+
if (!text)
|
|
101
|
+
return;
|
|
102
|
+
this.push({ type: 'transcript', text, role: 'user' });
|
|
103
|
+
this.messages.push({ role: 'user', content: text });
|
|
104
|
+
void this.runLlmTurn();
|
|
105
|
+
}
|
|
106
|
+
async submitToolResult(input) {
|
|
107
|
+
if (this.closed)
|
|
108
|
+
throw new Error('Voice session closed');
|
|
109
|
+
const output = typeof input.output === 'string' ? input.output : JSON.stringify(input.output);
|
|
110
|
+
this.messages.push({ role: 'tool', content: output, toolCallId: input.id });
|
|
111
|
+
// Remove the matching pending tool call. When all are resolved, continue.
|
|
112
|
+
this.pendingToolCalls = this.pendingToolCalls.filter((c) => c.id !== input.id);
|
|
113
|
+
if (this.pendingToolCalls.length === 0) {
|
|
114
|
+
// Reset state so runLlmTurn() doesn't early-return on the thinking guard.
|
|
115
|
+
this.state = 'listening';
|
|
116
|
+
void this.runLlmTurn();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async cancelResponse() {
|
|
120
|
+
this.currentTurnAbort?.abort();
|
|
121
|
+
this.currentTurnAbort = undefined;
|
|
122
|
+
if (this.state !== 'await_tool')
|
|
123
|
+
this.state = 'listening';
|
|
124
|
+
}
|
|
125
|
+
events() {
|
|
126
|
+
return {
|
|
127
|
+
[Symbol.asyncIterator]: () => ({
|
|
128
|
+
next: () => this.next(),
|
|
129
|
+
return: async () => { await this.close(); return { value: undefined, done: true }; },
|
|
130
|
+
}),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
async close() {
|
|
134
|
+
if (this.closed)
|
|
135
|
+
return;
|
|
136
|
+
this.closed = true;
|
|
137
|
+
this.currentTurnAbort?.abort();
|
|
138
|
+
try {
|
|
139
|
+
await this.stt.close();
|
|
140
|
+
}
|
|
141
|
+
catch { }
|
|
142
|
+
while (this.waiters.length > 0) {
|
|
143
|
+
this.waiters.shift()({ value: undefined, done: true });
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
next() {
|
|
147
|
+
if (this.queue.length > 0)
|
|
148
|
+
return Promise.resolve({ value: this.queue.shift(), done: false });
|
|
149
|
+
if (this.closed)
|
|
150
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
151
|
+
return new Promise((resolve) => this.waiters.push(resolve));
|
|
152
|
+
}
|
|
153
|
+
push(event) {
|
|
154
|
+
if (this.closed)
|
|
155
|
+
return;
|
|
156
|
+
const w = this.waiters.shift();
|
|
157
|
+
if (w)
|
|
158
|
+
w({ value: event, done: false });
|
|
159
|
+
else
|
|
160
|
+
this.queue.push(event);
|
|
161
|
+
}
|
|
162
|
+
async consumeStt() {
|
|
163
|
+
try {
|
|
164
|
+
for await (const event of this.stt.events()) {
|
|
165
|
+
if (this.closed)
|
|
166
|
+
break;
|
|
167
|
+
switch (event.type) {
|
|
168
|
+
case 'transcript': {
|
|
169
|
+
this.push({ type: 'transcript', text: event.text, role: 'user' });
|
|
170
|
+
this.messages.push({ role: 'user', content: event.text });
|
|
171
|
+
void this.runLlmTurn();
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
case 'partial': {
|
|
175
|
+
// Don't surface partials as transcripts — they're not LLM-safe.
|
|
176
|
+
// Callers that want live caption can use a separate STT session.
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
case 'speech_started': {
|
|
180
|
+
// Barge-in: cancel in-flight TTS + LLM if we were speaking.
|
|
181
|
+
if (this.state === 'speaking' || this.state === 'thinking') {
|
|
182
|
+
this.currentTurnAbort?.abort();
|
|
183
|
+
this.currentTurnAbort = undefined;
|
|
184
|
+
this.state = 'listening';
|
|
185
|
+
}
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
case 'speech_ended':
|
|
189
|
+
break;
|
|
190
|
+
case 'error':
|
|
191
|
+
this.push({ type: 'error', message: event.message });
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
this.push({ type: 'error', message: err.message });
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
async runLlmTurn() {
|
|
201
|
+
if (this.closed)
|
|
202
|
+
return;
|
|
203
|
+
if (this.state === 'thinking' || this.state === 'speaking')
|
|
204
|
+
return; // already running
|
|
205
|
+
this.state = 'thinking';
|
|
206
|
+
const abort = new AbortController();
|
|
207
|
+
this.currentTurnAbort = abort;
|
|
208
|
+
this.turnUsage = {};
|
|
209
|
+
try {
|
|
210
|
+
const response = await this.llm.generate({
|
|
211
|
+
model: this.modelId,
|
|
212
|
+
messages: this.messages,
|
|
213
|
+
...(this.tools.length > 0 ? { tools: toolsToModelSchemas(this.tools) } : {}),
|
|
214
|
+
signal: abort.signal,
|
|
215
|
+
});
|
|
216
|
+
if (abort.signal.aborted)
|
|
217
|
+
return;
|
|
218
|
+
const assistantMessage = response.message;
|
|
219
|
+
const toolCalls = response.toolCalls ?? assistantMessage?.toolCalls ?? [];
|
|
220
|
+
const llmUsage = response.usage;
|
|
221
|
+
// Record assistant turn for next iteration.
|
|
222
|
+
if (assistantMessage)
|
|
223
|
+
this.messages.push(assistantMessage);
|
|
224
|
+
// Surface text content via TTS + text_delta events.
|
|
225
|
+
const text = assistantMessage?.content ?? '';
|
|
226
|
+
if (text) {
|
|
227
|
+
this.state = 'speaking';
|
|
228
|
+
this.push({ type: 'text_delta', delta: text, role: 'assistant' });
|
|
229
|
+
this.push({ type: 'transcript', text, role: 'assistant' });
|
|
230
|
+
await this.streamTts(text, abort.signal);
|
|
231
|
+
}
|
|
232
|
+
// Tool-call relay: emit and pause until results submitted.
|
|
233
|
+
if (toolCalls.length > 0) {
|
|
234
|
+
this.pendingToolCalls = [...toolCalls];
|
|
235
|
+
this.state = 'await_tool';
|
|
236
|
+
for (const call of toolCalls) {
|
|
237
|
+
this.push({ type: 'tool_call', id: call.id, name: call.name, input: call.input });
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
this.state = 'listening';
|
|
242
|
+
}
|
|
243
|
+
// Roll up usage and emit response_done.
|
|
244
|
+
const usage = this.rollupUsage(llmUsage);
|
|
245
|
+
if (usage)
|
|
246
|
+
applyEstimatedCost(this.modelKey(), usage);
|
|
247
|
+
this.push({ type: 'response_done', ...(usage ? { usage } : {}) });
|
|
248
|
+
if (usage && this.costBudget?.enabled() && typeof usage.costUsd === 'number' && usage.costUsd > 0) {
|
|
249
|
+
void this.handleCostBudget(usage.costUsd);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch (err) {
|
|
253
|
+
if (abort.signal.aborted)
|
|
254
|
+
return;
|
|
255
|
+
this.push({ type: 'error', message: err.message });
|
|
256
|
+
this.state = 'listening';
|
|
257
|
+
}
|
|
258
|
+
finally {
|
|
259
|
+
if (this.currentTurnAbort === abort)
|
|
260
|
+
this.currentTurnAbort = undefined;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
async streamTts(text, signal) {
|
|
264
|
+
if (this.closed || signal.aborted)
|
|
265
|
+
return;
|
|
266
|
+
const stream = this.tts.synthesize(text, { signal });
|
|
267
|
+
for await (const frame of stream) {
|
|
268
|
+
if (this.closed || signal.aborted)
|
|
269
|
+
break;
|
|
270
|
+
this.push({ type: 'audio_delta', audio: frame });
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
rollupUsage(llmUsage) {
|
|
274
|
+
const stt = this.stt.usage();
|
|
275
|
+
const ttsLast = this.tts.lastUsage();
|
|
276
|
+
const usage = { ...(llmUsage ?? {}) };
|
|
277
|
+
if (stt.seconds > 0)
|
|
278
|
+
usage.sttSeconds = (usage.sttSeconds ?? 0) + stt.seconds;
|
|
279
|
+
if (ttsLast?.characters && ttsLast.characters > 0) {
|
|
280
|
+
usage.ttsCharacters = (usage.ttsCharacters ?? 0) + ttsLast.characters;
|
|
281
|
+
}
|
|
282
|
+
return Object.keys(usage).length > 0 ? usage : undefined;
|
|
283
|
+
}
|
|
284
|
+
modelKey() {
|
|
285
|
+
// Use the LLM provider's model id so `lookupModelPrice` finds the row.
|
|
286
|
+
return this.modelId;
|
|
287
|
+
}
|
|
288
|
+
async handleCostBudget(callCost) {
|
|
289
|
+
if (!this.costBudget)
|
|
290
|
+
return;
|
|
291
|
+
const handle = async (violation) => {
|
|
292
|
+
this.push({ type: 'cost_limit', scope: violation.scope, observedUsd: violation.observedUsd, limitUsd: violation.limitUsd, ...(violation.scopeKey ? { scopeKey: violation.scopeKey } : {}) });
|
|
293
|
+
const mode = this.costBudget.onExceed();
|
|
294
|
+
if (mode === 'approve' && this.requestCostLimitApproval) {
|
|
295
|
+
const approved = await this.requestCostLimitApproval(violation);
|
|
296
|
+
if (approved)
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
this.push({ type: 'error', message: new CostLimitExceededError(violation).message });
|
|
300
|
+
void this.close();
|
|
301
|
+
};
|
|
302
|
+
const local = this.costBudget.observe(callCost);
|
|
303
|
+
if (local) {
|
|
304
|
+
await handle(local);
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
const remote = await this.costBudget.observeScopeAsync(callCost);
|
|
308
|
+
if (remote)
|
|
309
|
+
await handle(remote);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=voice-pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice-pipeline.js","sourceRoot":"","sources":["../src/voice-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cartesia streaming STT provider — single-vendor alternative when
|
|
3
|
+
* pairing with `CartesiaTtsProvider`. Connects to
|
|
4
|
+
* `wss://api.cartesia.ai/stt/websocket`.
|
|
5
|
+
*
|
|
6
|
+
* Pricing: per audio second. Rates registered under provider `cartesia`.
|
|
7
|
+
*/
|
|
8
|
+
import type { SttProvider, SttSession, SttSessionOptions } from './voice-stt.js';
|
|
9
|
+
export interface CartesiaSttProviderOptions {
|
|
10
|
+
apiKey: string;
|
|
11
|
+
/** Default model id. Default `ink-whisper`. */
|
|
12
|
+
model?: string;
|
|
13
|
+
/** Cartesia API version. */
|
|
14
|
+
apiVersion?: string;
|
|
15
|
+
/** Override base URL. */
|
|
16
|
+
baseUrl?: string;
|
|
17
|
+
/** Provider name override. Default `cartesia`. */
|
|
18
|
+
name?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare class CartesiaSttProvider implements SttProvider {
|
|
21
|
+
readonly name: string;
|
|
22
|
+
private readonly apiKey;
|
|
23
|
+
private readonly defaultModel;
|
|
24
|
+
private readonly apiVersion;
|
|
25
|
+
private readonly baseUrl;
|
|
26
|
+
constructor(options: CartesiaSttProviderOptions);
|
|
27
|
+
open(opts?: SttSessionOptions): Promise<SttSession>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=voice-stt-cartesia.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice-stt-cartesia.d.ts","sourceRoot":"","sources":["../src/voice-stt-cartesia.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAY,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAmB,MAAM,gBAAgB,CAAC;AAG5G,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAMD,qBAAa,mBAAoB,YAAW,WAAW;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,0BAA0B;IASzC,IAAI,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;CAe9D"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cartesia streaming STT provider — single-vendor alternative when
|
|
3
|
+
* pairing with `CartesiaTtsProvider`. Connects to
|
|
4
|
+
* `wss://api.cartesia.ai/stt/websocket`.
|
|
5
|
+
*
|
|
6
|
+
* Pricing: per audio second. Rates registered under provider `cartesia`.
|
|
7
|
+
*/
|
|
8
|
+
import { openVoiceWs, toError } from './voice-ws-shared.js';
|
|
9
|
+
const DEFAULT_BASE = 'wss://api.cartesia.ai';
|
|
10
|
+
const DEFAULT_MODEL = 'ink-whisper';
|
|
11
|
+
const DEFAULT_API_VERSION = '2024-11-13';
|
|
12
|
+
export class CartesiaSttProvider {
|
|
13
|
+
name;
|
|
14
|
+
apiKey;
|
|
15
|
+
defaultModel;
|
|
16
|
+
apiVersion;
|
|
17
|
+
baseUrl;
|
|
18
|
+
constructor(options) {
|
|
19
|
+
if (!options.apiKey)
|
|
20
|
+
throw new Error('CartesiaSttProvider: apiKey is required.');
|
|
21
|
+
this.apiKey = options.apiKey;
|
|
22
|
+
this.defaultModel = options.model ?? DEFAULT_MODEL;
|
|
23
|
+
this.apiVersion = options.apiVersion ?? DEFAULT_API_VERSION;
|
|
24
|
+
this.baseUrl = options.baseUrl ?? DEFAULT_BASE;
|
|
25
|
+
this.name = options.name ?? 'cartesia';
|
|
26
|
+
}
|
|
27
|
+
async open(opts = {}) {
|
|
28
|
+
const format = opts.audioFormat ?? 'pcm16';
|
|
29
|
+
const sampleRate = opts.sampleRate ?? defaultSampleRate(format);
|
|
30
|
+
const params = new URLSearchParams({
|
|
31
|
+
api_key: this.apiKey,
|
|
32
|
+
cartesia_version: this.apiVersion,
|
|
33
|
+
model: opts.model ?? this.defaultModel,
|
|
34
|
+
encoding: cartesiaEncoding(format),
|
|
35
|
+
sample_rate: String(sampleRate),
|
|
36
|
+
});
|
|
37
|
+
if (opts.language)
|
|
38
|
+
params.set('language', opts.language);
|
|
39
|
+
const url = `${this.baseUrl}/stt/websocket?${params.toString()}`;
|
|
40
|
+
const ws = await openVoiceWs(url, {});
|
|
41
|
+
return new CartesiaSttSession(ws, opts.signal);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
class CartesiaSttSession {
|
|
45
|
+
ws;
|
|
46
|
+
queue = [];
|
|
47
|
+
waiters = [];
|
|
48
|
+
closed = false;
|
|
49
|
+
secondsSent = 0;
|
|
50
|
+
startedAt = Date.now();
|
|
51
|
+
constructor(ws, signal) {
|
|
52
|
+
this.ws = ws;
|
|
53
|
+
ws.addEventListener('message', (ev) => this.onMessage(ev.data));
|
|
54
|
+
ws.addEventListener('error', (ev) => this.push({ type: 'error', message: toError(ev, 'Cartesia STT WS error').message }));
|
|
55
|
+
ws.addEventListener('close', () => this.terminate());
|
|
56
|
+
signal?.addEventListener('abort', () => void this.close(), { once: true });
|
|
57
|
+
}
|
|
58
|
+
send(frame) {
|
|
59
|
+
if (this.closed)
|
|
60
|
+
return;
|
|
61
|
+
this.ws.send(frame);
|
|
62
|
+
this.secondsSent += frame.byteLength / 32_000;
|
|
63
|
+
}
|
|
64
|
+
events() {
|
|
65
|
+
return {
|
|
66
|
+
[Symbol.asyncIterator]: () => ({
|
|
67
|
+
next: () => this.next(),
|
|
68
|
+
return: async () => { await this.close(); return { value: undefined, done: true }; },
|
|
69
|
+
}),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
async close() {
|
|
73
|
+
if (this.closed)
|
|
74
|
+
return;
|
|
75
|
+
try {
|
|
76
|
+
this.ws.send(JSON.stringify({ type: 'finalize' }));
|
|
77
|
+
}
|
|
78
|
+
catch { }
|
|
79
|
+
try {
|
|
80
|
+
this.ws.close();
|
|
81
|
+
}
|
|
82
|
+
catch { }
|
|
83
|
+
this.terminate();
|
|
84
|
+
}
|
|
85
|
+
usage() {
|
|
86
|
+
return { seconds: this.secondsSent, durationMs: Date.now() - this.startedAt };
|
|
87
|
+
}
|
|
88
|
+
terminate() {
|
|
89
|
+
if (this.closed)
|
|
90
|
+
return;
|
|
91
|
+
this.closed = true;
|
|
92
|
+
while (this.waiters.length > 0)
|
|
93
|
+
this.waiters.shift()({ value: undefined, done: true });
|
|
94
|
+
}
|
|
95
|
+
next() {
|
|
96
|
+
if (this.queue.length > 0)
|
|
97
|
+
return Promise.resolve({ value: this.queue.shift(), done: false });
|
|
98
|
+
if (this.closed)
|
|
99
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
100
|
+
return new Promise((resolve) => this.waiters.push(resolve));
|
|
101
|
+
}
|
|
102
|
+
push(event) {
|
|
103
|
+
if (this.closed)
|
|
104
|
+
return;
|
|
105
|
+
const w = this.waiters.shift();
|
|
106
|
+
if (w)
|
|
107
|
+
w({ value: event, done: false });
|
|
108
|
+
else
|
|
109
|
+
this.queue.push(event);
|
|
110
|
+
}
|
|
111
|
+
onMessage(raw) {
|
|
112
|
+
const text = typeof raw === 'string' ? raw : (raw && typeof raw === 'object' && 'toString' in raw)
|
|
113
|
+
? String(raw)
|
|
114
|
+
: '';
|
|
115
|
+
let payload;
|
|
116
|
+
try {
|
|
117
|
+
payload = JSON.parse(text);
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const type = String(payload.type ?? '');
|
|
123
|
+
switch (type) {
|
|
124
|
+
case 'transcript': {
|
|
125
|
+
const t = String(payload.text ?? '');
|
|
126
|
+
const isFinal = payload.is_final === true;
|
|
127
|
+
if (!t)
|
|
128
|
+
return;
|
|
129
|
+
if (isFinal)
|
|
130
|
+
this.push({ type: 'transcript', text: t, isFinal: true });
|
|
131
|
+
else
|
|
132
|
+
this.push({ type: 'partial', text: t, isFinal: false });
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
case 'speech_started':
|
|
136
|
+
this.push({ type: 'speech_started' });
|
|
137
|
+
return;
|
|
138
|
+
case 'speech_ended':
|
|
139
|
+
this.push({ type: 'speech_ended' });
|
|
140
|
+
return;
|
|
141
|
+
case 'error':
|
|
142
|
+
this.push({ type: 'error', message: String(payload.message ?? 'cartesia stt error') });
|
|
143
|
+
return;
|
|
144
|
+
default: return;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function cartesiaEncoding(format) {
|
|
149
|
+
if (format === 'g711_ulaw')
|
|
150
|
+
return 'pcm_mulaw';
|
|
151
|
+
if (format === 'g711_alaw')
|
|
152
|
+
return 'pcm_alaw';
|
|
153
|
+
return 'pcm_s16le';
|
|
154
|
+
}
|
|
155
|
+
function defaultSampleRate(format) {
|
|
156
|
+
if (format === 'g711_ulaw' || format === 'g711_alaw')
|
|
157
|
+
return 8000;
|
|
158
|
+
return 16000;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=voice-stt-cartesia.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice-stt-cartesia.js","sourceRoot":"","sources":["../src/voice-stt-cartesia.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deepgram streaming STT provider. Default STT for `PipelineVoiceProvider`.
|
|
3
|
+
*
|
|
4
|
+
* Connects to `wss://api.deepgram.com/v1/listen` with WS subprotocol
|
|
5
|
+
* `Token <api_key>`. Emits final + interim transcripts plus VAD
|
|
6
|
+
* `speech_started` / `UtteranceEnd` events for barge-in handling.
|
|
7
|
+
*
|
|
8
|
+
* Pricing: per audio second. Rates registered under provider `deepgram`.
|
|
9
|
+
*/
|
|
10
|
+
import type { SttProvider, SttSession, SttSessionOptions } from './voice-stt.js';
|
|
11
|
+
export interface DeepgramSttProviderOptions {
|
|
12
|
+
apiKey: string;
|
|
13
|
+
/** Default model. `nova-3` is the v1.12 default (best latency/accuracy). */
|
|
14
|
+
model?: string;
|
|
15
|
+
/** Override base URL. */
|
|
16
|
+
baseUrl?: string;
|
|
17
|
+
/** Provider name override. Default `deepgram`. */
|
|
18
|
+
name?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare class DeepgramSttProvider implements SttProvider {
|
|
21
|
+
readonly name: string;
|
|
22
|
+
private readonly apiKey;
|
|
23
|
+
private readonly defaultModel;
|
|
24
|
+
private readonly baseUrl;
|
|
25
|
+
constructor(options: DeepgramSttProviderOptions);
|
|
26
|
+
open(opts?: SttSessionOptions): Promise<SttSession>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=voice-stt-deepgram.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice-stt-deepgram.d.ts","sourceRoot":"","sources":["../src/voice-stt-deepgram.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAY,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAmB,MAAM,gBAAgB,CAAC;AAG5G,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAKD,qBAAa,mBAAoB,YAAW,WAAW;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,0BAA0B;IAQzC,IAAI,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;CAoB9D"}
|