@llmrtc/llmrtc-provider-openai 1.1.0 → 1.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.
- package/CHANGELOG.md +72 -0
- package/README.md +1 -1
- package/dist/index.d.ts +101 -7
- package/dist/index.js +364 -32
- package/dist/index.js.map +1 -1
- package/dist/tool-adapter.d.ts +2 -2
- package/dist/tool-adapter.js +1 -1
- package/dist/tool-adapter.js.map +1 -1
- package/package.json +7 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,77 @@
|
|
|
1
1
|
# @llmrtc/llmrtc-provider-openai
|
|
2
2
|
|
|
3
|
+
## 1.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- fd91344: Anthropic modernization and richer stop reasons.
|
|
8
|
+
- The StopReason union gains `refusal`, `content_filter`, `pause_turn`, and
|
|
9
|
+
`context_overflow`. Note for TypeScript consumers with exhaustive switches:
|
|
10
|
+
this widens the union. OpenAI-compatible providers now report
|
|
11
|
+
`content_filter` for filtered responses (previously mis-reported as
|
|
12
|
+
`stop_sequence`); Gemini safety blocks and Bedrock guardrail interventions
|
|
13
|
+
also map to `content_filter`.
|
|
14
|
+
- The Anthropic provider defaults to `claude-sonnet-5` and automatically
|
|
15
|
+
omits temperature/top_p for model families that reject them (Sonnet 5,
|
|
16
|
+
Opus 4.7+, Fable tier), with a `samplingParamsSupported` override. The
|
|
17
|
+
Bedrock provider applies the same guard for Claude models.
|
|
18
|
+
- Orchestrators log a warning when a turn ends with an unusual stop reason.
|
|
19
|
+
- CLI and example fallbacks move off retired model ids.
|
|
20
|
+
|
|
21
|
+
- 319bb47: OpenAI voice updates: steerable TTS and current transcription models.
|
|
22
|
+
- TTSConfig gains an optional `instructions` field for instructable TTS
|
|
23
|
+
models. OpenAITTSProvider accepts `instructions` at the constructor and
|
|
24
|
+
per call, sends them for gpt-\* models (e.g. gpt-4o-mini-tts), and
|
|
25
|
+
ignores them with a one-time warning on tts-1/tts-1-hd.
|
|
26
|
+
- OpenAITTSVoice widened to the current voice roster (adds ash, ballad,
|
|
27
|
+
coral, sage, verse) while accepting any string for forward
|
|
28
|
+
compatibility; TTS model accepts any string. Note: code doing
|
|
29
|
+
exhaustive switches over OpenAITTSVoice will need adjusting, matching
|
|
30
|
+
the same widening in the official openai SDK. ballad/verse require
|
|
31
|
+
gpt-4o-mini-tts; the other nine voices work on all TTS models.
|
|
32
|
+
- OpenAIWhisperProvider documents gpt-4o-transcribe /
|
|
33
|
+
gpt-4o-mini-transcribe support.
|
|
34
|
+
- CLI: new OPENAI_STT_MODEL, OPENAI_TTS_MODEL, and
|
|
35
|
+
OPENAI_TTS_INSTRUCTIONS environment variables.
|
|
36
|
+
|
|
37
|
+
- a7d1ecc: Streaming speech-to-text: live interim transcripts while the user speaks.
|
|
38
|
+
- New ElevenLabsScribeProvider: batch STT via Scribe v2 and realtime
|
|
39
|
+
streaming via the Scribe v2 Realtime WebSocket (sub-150ms partials).
|
|
40
|
+
- New OpenAIRealtimeSTTProvider: streaming transcription over the OpenAI
|
|
41
|
+
Realtime API (gpt-realtime-whisper by default; audio-duration billing).
|
|
42
|
+
- Opt-in server mode streamingSTT (CLI: STREAMING_STT=true) streams mic
|
|
43
|
+
audio to the STT provider from VAD speech start, relaying partial
|
|
44
|
+
transcripts to the client over the existing transcript/isFinal
|
|
45
|
+
protocol; falls back to buffered STT when the provider can't stream.
|
|
46
|
+
- Both orchestrators gain runTurnStreamFromAudioStream; STTProvider
|
|
47
|
+
gains an optional streamingInputSampleRate hint; core exports an
|
|
48
|
+
AsyncEventQueue utility. Buffered STT remains the default.
|
|
49
|
+
- Streaming sockets carry watchdog timeouts (connect/inactivity/final)
|
|
50
|
+
and surface early closes or transcription failures as turn errors
|
|
51
|
+
instead of silently dropping the utterance.
|
|
52
|
+
- Behavior notes: the onSpeechStart server hook now fires after barge-in
|
|
53
|
+
cancellation, so a slow hook can no longer delay interruptions;
|
|
54
|
+
STT_PROVIDER=elevenlabs now selects ElevenLabs Scribe (previously it
|
|
55
|
+
silently fell back to OpenAI Whisper).
|
|
56
|
+
|
|
57
|
+
### Patch Changes
|
|
58
|
+
|
|
59
|
+
- Updated dependencies [fd91344]
|
|
60
|
+
- Updated dependencies [319bb47]
|
|
61
|
+
- Updated dependencies [a7d1ecc]
|
|
62
|
+
- @llmrtc/llmrtc-core@1.2.0
|
|
63
|
+
|
|
64
|
+
## 1.1.1
|
|
65
|
+
|
|
66
|
+
### Patch Changes
|
|
67
|
+
|
|
68
|
+
- b35b4e1: Fix streaming TTS failing with "response.body?.getReader is not a function"
|
|
69
|
+
when the OpenAI SDK returns a Node Readable body (Node < 18 or apps loading
|
|
70
|
+
the SDK's Node shims). The provider now handles web ReadableStream bodies,
|
|
71
|
+
async-iterable Node stream bodies, and buffered fallback. Previously the
|
|
72
|
+
error was caught upstream and every turn silently fell back to
|
|
73
|
+
non-streaming TTS, adding seconds of latency.
|
|
74
|
+
|
|
3
75
|
## 1.1.0
|
|
4
76
|
|
|
5
77
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ import { OpenAILLMProvider } from '@llmrtc/llmrtc-provider-openai';
|
|
|
17
17
|
|
|
18
18
|
const llm = new OpenAILLMProvider({
|
|
19
19
|
apiKey: process.env.OPENAI_API_KEY!,
|
|
20
|
-
model: 'gpt-
|
|
20
|
+
model: 'gpt-5.6-terra' // or 'gpt-5.6-sol' (flagship), 'gpt-5.6-luna' (fast)
|
|
21
21
|
});
|
|
22
22
|
```
|
|
23
23
|
|
package/dist/index.d.ts
CHANGED
|
@@ -16,6 +16,11 @@ export declare class OpenAILLMProvider implements LLMProvider {
|
|
|
16
16
|
export interface OpenAIWhisperConfig {
|
|
17
17
|
apiKey: string;
|
|
18
18
|
baseURL?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Transcription model (default: 'whisper-1'). The newer
|
|
21
|
+
* 'gpt-4o-transcribe' and 'gpt-4o-mini-transcribe' models run on the
|
|
22
|
+
* same endpoint with better accuracy, especially in noisy audio.
|
|
23
|
+
*/
|
|
19
24
|
model?: string;
|
|
20
25
|
language?: string;
|
|
21
26
|
}
|
|
@@ -27,32 +32,46 @@ export declare class OpenAIWhisperProvider implements STTProvider {
|
|
|
27
32
|
constructor(config: OpenAIWhisperConfig);
|
|
28
33
|
transcribe(audio: Buffer, config?: STTConfig): Promise<STTResult>;
|
|
29
34
|
}
|
|
30
|
-
export type OpenAITTSVoice = 'alloy' | 'echo' | 'fable' | 'onyx' | '
|
|
35
|
+
export type OpenAITTSVoice = 'alloy' | 'ash' | 'ballad' | 'coral' | 'echo' | 'fable' | 'nova' | 'onyx' | 'sage' | 'shimmer' | 'verse' | (string & {});
|
|
31
36
|
export type OpenAITTSFormat = 'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm';
|
|
37
|
+
export type OpenAITTSModel = 'tts-1' | 'tts-1-hd' | 'gpt-4o-mini-tts' | (string & {});
|
|
32
38
|
export interface OpenAITTSConfig {
|
|
33
39
|
/** OpenAI API key */
|
|
34
40
|
apiKey: string;
|
|
35
41
|
/** Base URL for API (optional, for Azure OpenAI or proxies) */
|
|
36
42
|
baseURL?: string;
|
|
37
43
|
/** TTS model (default: 'tts-1') */
|
|
38
|
-
model?:
|
|
44
|
+
model?: OpenAITTSModel;
|
|
39
45
|
/** Default voice (default: 'alloy') */
|
|
40
46
|
voice?: OpenAITTSVoice;
|
|
41
|
-
/** Speech speed multiplier 0.25-4.0 (default: 1.0) */
|
|
47
|
+
/** Speech speed multiplier 0.25-4.0 (default: 1.0). No effect on gpt-4o-mini-tts - use `instructions` to direct pacing there. */
|
|
42
48
|
speed?: number;
|
|
49
|
+
/**
|
|
50
|
+
* Default delivery instructions (tone, pacing, emotion, accent) for
|
|
51
|
+
* instructable models such as gpt-4o-mini-tts, e.g. "Speak like a
|
|
52
|
+
* calm customer-support agent". Instructions are only sent when the
|
|
53
|
+
* effective model name starts with 'gpt-'; on any other name
|
|
54
|
+
* (tts-1, tts-1-hd, proxy/deployment aliases) they are ignored with
|
|
55
|
+
* a one-time warning, since the API rejects them there.
|
|
56
|
+
*/
|
|
57
|
+
instructions?: string;
|
|
43
58
|
}
|
|
44
59
|
/**
|
|
45
60
|
* OpenAI Text-to-Speech Provider.
|
|
46
61
|
*
|
|
47
|
-
* Available voices: alloy, echo, fable, onyx,
|
|
48
|
-
*
|
|
62
|
+
* Available voices: alloy, ash, coral, echo, fable, nova, onyx, sage,
|
|
63
|
+
* shimmer on all models; ballad and verse additionally on
|
|
64
|
+
* gpt-4o-mini-tts.
|
|
65
|
+
* Available models: tts-1 (fast), tts-1-hd (quality), gpt-4o-mini-tts
|
|
66
|
+
* (instructable - accepts natural-language delivery `instructions`).
|
|
49
67
|
*
|
|
50
68
|
* @example
|
|
51
69
|
* ```typescript
|
|
52
70
|
* const provider = new OpenAITTSProvider({
|
|
53
71
|
* apiKey: 'sk-...',
|
|
54
|
-
* model: 'tts
|
|
55
|
-
* voice: '
|
|
72
|
+
* model: 'gpt-4o-mini-tts',
|
|
73
|
+
* voice: 'coral',
|
|
74
|
+
* instructions: 'Speak warmly, at a relaxed pace.'
|
|
56
75
|
* });
|
|
57
76
|
* ```
|
|
58
77
|
*/
|
|
@@ -65,7 +84,10 @@ export declare class OpenAITTSProvider implements TTSProvider {
|
|
|
65
84
|
private model;
|
|
66
85
|
private voice;
|
|
67
86
|
private speed;
|
|
87
|
+
private instructions?;
|
|
88
|
+
private warnedInstructionsUnsupported;
|
|
68
89
|
constructor(config: OpenAITTSConfig);
|
|
90
|
+
private speechParams;
|
|
69
91
|
speak(text: string, overrideConfig?: TTSConfig): Promise<TTSResult>;
|
|
70
92
|
/**
|
|
71
93
|
* Streaming TTS - returns audio chunks as they are generated.
|
|
@@ -76,3 +98,75 @@ export declare class OpenAITTSProvider implements TTSProvider {
|
|
|
76
98
|
*/
|
|
77
99
|
speakStream(text: string, overrideConfig?: TTSConfig): AsyncIterable<Buffer>;
|
|
78
100
|
}
|
|
101
|
+
export interface OpenAIRealtimeSTTConfig {
|
|
102
|
+
/** OpenAI API key */
|
|
103
|
+
apiKey: string;
|
|
104
|
+
/**
|
|
105
|
+
* Transcription model (default: 'gpt-realtime-whisper' - native
|
|
106
|
+
* streaming). 'gpt-4o-transcribe' / 'gpt-4o-mini-transcribe' also work
|
|
107
|
+
* over the Realtime API.
|
|
108
|
+
*/
|
|
109
|
+
model?: string;
|
|
110
|
+
/** ISO language code hint */
|
|
111
|
+
language?: string;
|
|
112
|
+
/**
|
|
113
|
+
* Latency/accuracy trade-off for gpt-realtime-whisper
|
|
114
|
+
* (default: server-side default).
|
|
115
|
+
*/
|
|
116
|
+
delay?: 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';
|
|
117
|
+
/**
|
|
118
|
+
* Realtime WebSocket URL
|
|
119
|
+
* (default: 'wss://api.openai.com/v1/realtime?intent=transcription')
|
|
120
|
+
*/
|
|
121
|
+
url?: string;
|
|
122
|
+
/**
|
|
123
|
+
* Socket watchdog timeouts in ms. Defaults: connect 10000, inactivity
|
|
124
|
+
* 30000, final-after-commit 15000. Mostly useful in tests.
|
|
125
|
+
*/
|
|
126
|
+
timeoutsMs?: {
|
|
127
|
+
connect?: number;
|
|
128
|
+
inactivity?: number;
|
|
129
|
+
final?: number;
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* OpenAI Realtime Speech-to-Text Provider.
|
|
134
|
+
*
|
|
135
|
+
* Streams audio to a transcription-type Realtime API session and yields
|
|
136
|
+
* interim transcripts as the user speaks. Partial results carry the
|
|
137
|
+
* accumulated transcript-so-far; the final result carries the complete
|
|
138
|
+
* transcript. Billing follows the transcription model's audio pricing,
|
|
139
|
+
* not realtime LLM tokens.
|
|
140
|
+
*
|
|
141
|
+
* Input frames must be 24kHz mono 16-bit signed LE PCM
|
|
142
|
+
* (streamingInputSampleRate). transcribe() accepts a 16-bit mono PCM WAV
|
|
143
|
+
* buffer for compatibility with the buffered pipeline; for general batch
|
|
144
|
+
* transcription use OpenAIWhisperProvider instead.
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```typescript
|
|
148
|
+
* const stt = new OpenAIRealtimeSTTProvider({
|
|
149
|
+
* apiKey: process.env.OPENAI_API_KEY!,
|
|
150
|
+
* model: 'gpt-realtime-whisper'
|
|
151
|
+
* });
|
|
152
|
+
* ```
|
|
153
|
+
*/
|
|
154
|
+
export declare class OpenAIRealtimeSTTProvider implements STTProvider {
|
|
155
|
+
readonly name = "openai-realtime-stt";
|
|
156
|
+
/** The Realtime API consumes 24kHz mono 16-bit PCM */
|
|
157
|
+
readonly streamingInputSampleRate = 24000;
|
|
158
|
+
private readonly apiKey;
|
|
159
|
+
private readonly model;
|
|
160
|
+
private readonly language?;
|
|
161
|
+
private readonly delay?;
|
|
162
|
+
private readonly url;
|
|
163
|
+
private readonly timeoutsMs;
|
|
164
|
+
constructor(config: OpenAIRealtimeSTTConfig);
|
|
165
|
+
transcribeStream(audio: AsyncIterable<Buffer>, config?: STTConfig): AsyncIterable<STTResult>;
|
|
166
|
+
/**
|
|
167
|
+
* One-shot transcription of a 16-bit mono PCM WAV buffer (the format
|
|
168
|
+
* produced by the LLMRTC voice pipeline), streamed through a realtime
|
|
169
|
+
* session. For arbitrary containers use OpenAIWhisperProvider.
|
|
170
|
+
*/
|
|
171
|
+
transcribe(audio: Buffer, config?: STTConfig): Promise<STTResult>;
|
|
172
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import OpenAI, { toFile } from 'openai';
|
|
2
|
+
import WebSocket from 'ws';
|
|
3
|
+
import { AsyncEventQueue } from '@llmrtc/llmrtc-core';
|
|
2
4
|
import { mapToolsToOpenAI, mapToolChoiceToOpenAI, parseToolCallsFromOpenAI, mapStopReasonFromOpenAI, processToolCallDelta, finalizeToolCalls, } from './tool-adapter.js';
|
|
3
5
|
export class OpenAILLMProvider {
|
|
4
6
|
constructor(config) {
|
|
@@ -191,18 +193,26 @@ function mapMessages(messages) {
|
|
|
191
193
|
return { role: m.role, content: [{ type: 'text', text: m.content }, ...imageParts] };
|
|
192
194
|
});
|
|
193
195
|
}
|
|
196
|
+
/** The speech endpoint only accepts `instructions` on gpt-* TTS models. */
|
|
197
|
+
function ttsModelSupportsInstructions(model) {
|
|
198
|
+
return model.toLowerCase().startsWith('gpt-');
|
|
199
|
+
}
|
|
194
200
|
/**
|
|
195
201
|
* OpenAI Text-to-Speech Provider.
|
|
196
202
|
*
|
|
197
|
-
* Available voices: alloy, echo, fable, onyx,
|
|
198
|
-
*
|
|
203
|
+
* Available voices: alloy, ash, coral, echo, fable, nova, onyx, sage,
|
|
204
|
+
* shimmer on all models; ballad and verse additionally on
|
|
205
|
+
* gpt-4o-mini-tts.
|
|
206
|
+
* Available models: tts-1 (fast), tts-1-hd (quality), gpt-4o-mini-tts
|
|
207
|
+
* (instructable - accepts natural-language delivery `instructions`).
|
|
199
208
|
*
|
|
200
209
|
* @example
|
|
201
210
|
* ```typescript
|
|
202
211
|
* const provider = new OpenAITTSProvider({
|
|
203
212
|
* apiKey: 'sk-...',
|
|
204
|
-
* model: 'tts
|
|
205
|
-
* voice: '
|
|
213
|
+
* model: 'gpt-4o-mini-tts',
|
|
214
|
+
* voice: 'coral',
|
|
215
|
+
* instructions: 'Speak warmly, at a relaxed pace.'
|
|
206
216
|
* });
|
|
207
217
|
* ```
|
|
208
218
|
*/
|
|
@@ -251,21 +261,48 @@ export class OpenAITTSProvider {
|
|
|
251
261
|
writable: true,
|
|
252
262
|
value: void 0
|
|
253
263
|
});
|
|
264
|
+
Object.defineProperty(this, "instructions", {
|
|
265
|
+
enumerable: true,
|
|
266
|
+
configurable: true,
|
|
267
|
+
writable: true,
|
|
268
|
+
value: void 0
|
|
269
|
+
});
|
|
270
|
+
Object.defineProperty(this, "warnedInstructionsUnsupported", {
|
|
271
|
+
enumerable: true,
|
|
272
|
+
configurable: true,
|
|
273
|
+
writable: true,
|
|
274
|
+
value: false
|
|
275
|
+
});
|
|
254
276
|
this.client = new OpenAI({ apiKey: config.apiKey, baseURL: config.baseURL });
|
|
255
277
|
this.model = config.model ?? 'tts-1';
|
|
256
278
|
this.voice = config.voice ?? 'alloy';
|
|
257
279
|
this.speed = config.speed ?? 1.0;
|
|
280
|
+
this.instructions = config.instructions;
|
|
258
281
|
}
|
|
259
|
-
|
|
260
|
-
const
|
|
261
|
-
const
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
voice,
|
|
282
|
+
speechParams(text, overrideConfig) {
|
|
283
|
+
const model = overrideConfig?.model ?? this.model;
|
|
284
|
+
const params = {
|
|
285
|
+
model,
|
|
286
|
+
voice: overrideConfig?.voice ?? this.voice,
|
|
265
287
|
input: text,
|
|
266
|
-
response_format: format,
|
|
288
|
+
response_format: mapFormat(overrideConfig?.format),
|
|
267
289
|
speed: this.speed
|
|
268
|
-
}
|
|
290
|
+
};
|
|
291
|
+
const instructions = overrideConfig?.instructions ?? this.instructions;
|
|
292
|
+
if (instructions) {
|
|
293
|
+
if (ttsModelSupportsInstructions(model)) {
|
|
294
|
+
params.instructions = instructions;
|
|
295
|
+
}
|
|
296
|
+
else if (!this.warnedInstructionsUnsupported) {
|
|
297
|
+
this.warnedInstructionsUnsupported = true;
|
|
298
|
+
console.warn(`[openai-tts] Model "${model}" does not support TTS instructions - ignoring them. ` +
|
|
299
|
+
`Use an instructable model such as gpt-4o-mini-tts.`);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return params;
|
|
303
|
+
}
|
|
304
|
+
async speak(text, overrideConfig) {
|
|
305
|
+
const response = await this.client.audio.speech.create(this.speechParams(text, overrideConfig));
|
|
269
306
|
const buffer = Buffer.from(await response.arrayBuffer());
|
|
270
307
|
return {
|
|
271
308
|
audio: buffer,
|
|
@@ -281,29 +318,32 @@ export class OpenAITTSProvider {
|
|
|
281
318
|
* This is the recommended format for lowest latency (no decode step needed).
|
|
282
319
|
*/
|
|
283
320
|
async *speakStream(text, overrideConfig) {
|
|
284
|
-
const
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
yield buffer;
|
|
321
|
+
const response = await this.client.audio.speech.create(this.speechParams(text, overrideConfig));
|
|
322
|
+
// The SDK's response body is a web ReadableStream when a global fetch
|
|
323
|
+
// is available, but a Node Readable when the SDK runs with its Node
|
|
324
|
+
// shims (e.g. Node < 18 or an app importing 'openai/shims/node').
|
|
325
|
+
// Handle both instead of assuming getReader() exists.
|
|
326
|
+
const body = response.body;
|
|
327
|
+
if (body && typeof body.getReader === 'function') {
|
|
328
|
+
const reader = body.getReader();
|
|
329
|
+
while (true) {
|
|
330
|
+
const { done, value } = await reader.read();
|
|
331
|
+
if (done)
|
|
332
|
+
break;
|
|
333
|
+
yield Buffer.from(value);
|
|
334
|
+
}
|
|
299
335
|
return;
|
|
300
336
|
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
337
|
+
if (body &&
|
|
338
|
+
typeof body[Symbol.asyncIterator] === 'function') {
|
|
339
|
+
for await (const chunk of body) {
|
|
340
|
+
yield Buffer.from(chunk);
|
|
341
|
+
}
|
|
342
|
+
return;
|
|
306
343
|
}
|
|
344
|
+
// Fallback: return the whole buffer if streaming is not available
|
|
345
|
+
const buffer = Buffer.from(await response.arrayBuffer());
|
|
346
|
+
yield buffer;
|
|
307
347
|
}
|
|
308
348
|
}
|
|
309
349
|
/**
|
|
@@ -322,4 +362,296 @@ function mapFormat(format) {
|
|
|
322
362
|
return 'mp3';
|
|
323
363
|
}
|
|
324
364
|
}
|
|
365
|
+
const REALTIME_STT_TIMEOUTS = { connect: 10000, inactivity: 30000, final: 15000 };
|
|
366
|
+
/**
|
|
367
|
+
* OpenAI Realtime Speech-to-Text Provider.
|
|
368
|
+
*
|
|
369
|
+
* Streams audio to a transcription-type Realtime API session and yields
|
|
370
|
+
* interim transcripts as the user speaks. Partial results carry the
|
|
371
|
+
* accumulated transcript-so-far; the final result carries the complete
|
|
372
|
+
* transcript. Billing follows the transcription model's audio pricing,
|
|
373
|
+
* not realtime LLM tokens.
|
|
374
|
+
*
|
|
375
|
+
* Input frames must be 24kHz mono 16-bit signed LE PCM
|
|
376
|
+
* (streamingInputSampleRate). transcribe() accepts a 16-bit mono PCM WAV
|
|
377
|
+
* buffer for compatibility with the buffered pipeline; for general batch
|
|
378
|
+
* transcription use OpenAIWhisperProvider instead.
|
|
379
|
+
*
|
|
380
|
+
* @example
|
|
381
|
+
* ```typescript
|
|
382
|
+
* const stt = new OpenAIRealtimeSTTProvider({
|
|
383
|
+
* apiKey: process.env.OPENAI_API_KEY!,
|
|
384
|
+
* model: 'gpt-realtime-whisper'
|
|
385
|
+
* });
|
|
386
|
+
* ```
|
|
387
|
+
*/
|
|
388
|
+
export class OpenAIRealtimeSTTProvider {
|
|
389
|
+
constructor(config) {
|
|
390
|
+
Object.defineProperty(this, "name", {
|
|
391
|
+
enumerable: true,
|
|
392
|
+
configurable: true,
|
|
393
|
+
writable: true,
|
|
394
|
+
value: 'openai-realtime-stt'
|
|
395
|
+
});
|
|
396
|
+
/** The Realtime API consumes 24kHz mono 16-bit PCM */
|
|
397
|
+
Object.defineProperty(this, "streamingInputSampleRate", {
|
|
398
|
+
enumerable: true,
|
|
399
|
+
configurable: true,
|
|
400
|
+
writable: true,
|
|
401
|
+
value: 24000
|
|
402
|
+
});
|
|
403
|
+
Object.defineProperty(this, "apiKey", {
|
|
404
|
+
enumerable: true,
|
|
405
|
+
configurable: true,
|
|
406
|
+
writable: true,
|
|
407
|
+
value: void 0
|
|
408
|
+
});
|
|
409
|
+
Object.defineProperty(this, "model", {
|
|
410
|
+
enumerable: true,
|
|
411
|
+
configurable: true,
|
|
412
|
+
writable: true,
|
|
413
|
+
value: void 0
|
|
414
|
+
});
|
|
415
|
+
Object.defineProperty(this, "language", {
|
|
416
|
+
enumerable: true,
|
|
417
|
+
configurable: true,
|
|
418
|
+
writable: true,
|
|
419
|
+
value: void 0
|
|
420
|
+
});
|
|
421
|
+
Object.defineProperty(this, "delay", {
|
|
422
|
+
enumerable: true,
|
|
423
|
+
configurable: true,
|
|
424
|
+
writable: true,
|
|
425
|
+
value: void 0
|
|
426
|
+
});
|
|
427
|
+
Object.defineProperty(this, "url", {
|
|
428
|
+
enumerable: true,
|
|
429
|
+
configurable: true,
|
|
430
|
+
writable: true,
|
|
431
|
+
value: void 0
|
|
432
|
+
});
|
|
433
|
+
Object.defineProperty(this, "timeoutsMs", {
|
|
434
|
+
enumerable: true,
|
|
435
|
+
configurable: true,
|
|
436
|
+
writable: true,
|
|
437
|
+
value: void 0
|
|
438
|
+
});
|
|
439
|
+
this.apiKey = config.apiKey;
|
|
440
|
+
this.model = config.model ?? 'gpt-realtime-whisper';
|
|
441
|
+
this.language = config.language;
|
|
442
|
+
this.delay = config.delay;
|
|
443
|
+
// intent=transcription opens a transcription-type session directly,
|
|
444
|
+
// without naming an (unused) realtime LLM session model
|
|
445
|
+
this.url = config.url ?? 'wss://api.openai.com/v1/realtime?intent=transcription';
|
|
446
|
+
this.timeoutsMs = {
|
|
447
|
+
connect: config.timeoutsMs?.connect ?? REALTIME_STT_TIMEOUTS.connect,
|
|
448
|
+
inactivity: config.timeoutsMs?.inactivity ?? REALTIME_STT_TIMEOUTS.inactivity,
|
|
449
|
+
final: config.timeoutsMs?.final ?? REALTIME_STT_TIMEOUTS.final
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
async *transcribeStream(audio, config) {
|
|
453
|
+
const model = config?.model ?? this.model;
|
|
454
|
+
const ws = new WebSocket(this.url, {
|
|
455
|
+
headers: { Authorization: `Bearer ${this.apiKey}` }
|
|
456
|
+
});
|
|
457
|
+
const queue = new AsyncEventQueue();
|
|
458
|
+
let runningText = '';
|
|
459
|
+
let completed = false;
|
|
460
|
+
let commitSent = false;
|
|
461
|
+
// Watchdog: a silently-stalled socket must not hang the voice turn
|
|
462
|
+
let watchdog = null;
|
|
463
|
+
const armWatchdog = (ms, waitingFor) => {
|
|
464
|
+
if (watchdog)
|
|
465
|
+
clearTimeout(watchdog);
|
|
466
|
+
watchdog = setTimeout(() => {
|
|
467
|
+
queue.fail(new Error(`OpenAI Realtime STT timed out waiting for ${waitingFor}`));
|
|
468
|
+
ws.terminate();
|
|
469
|
+
}, ms);
|
|
470
|
+
watchdog.unref?.();
|
|
471
|
+
};
|
|
472
|
+
const disarmWatchdog = () => {
|
|
473
|
+
if (watchdog)
|
|
474
|
+
clearTimeout(watchdog);
|
|
475
|
+
watchdog = null;
|
|
476
|
+
};
|
|
477
|
+
armWatchdog(this.timeoutsMs.connect, 'connection');
|
|
478
|
+
ws.on('message', (data) => {
|
|
479
|
+
armWatchdog(commitSent ? this.timeoutsMs.final : this.timeoutsMs.inactivity, commitSent ? 'the final transcript' : 'server messages');
|
|
480
|
+
let event;
|
|
481
|
+
try {
|
|
482
|
+
event = JSON.parse(data.toString());
|
|
483
|
+
}
|
|
484
|
+
catch {
|
|
485
|
+
return;
|
|
486
|
+
}
|
|
487
|
+
switch (event.type) {
|
|
488
|
+
case 'conversation.item.input_audio_transcription.delta':
|
|
489
|
+
runningText += event.delta ?? '';
|
|
490
|
+
queue.push({ text: runningText, isFinal: false, raw: event });
|
|
491
|
+
break;
|
|
492
|
+
case 'conversation.item.input_audio_transcription.completed':
|
|
493
|
+
completed = true;
|
|
494
|
+
queue.push({ text: event.transcript ?? runningText, isFinal: true, raw: event });
|
|
495
|
+
queue.end();
|
|
496
|
+
ws.close();
|
|
497
|
+
break;
|
|
498
|
+
case 'conversation.item.input_audio_transcription.failed':
|
|
499
|
+
queue.fail(new Error(`OpenAI Realtime STT transcription failed: ${event.error?.message ?? JSON.stringify(event.error)}`));
|
|
500
|
+
ws.close();
|
|
501
|
+
break;
|
|
502
|
+
case 'error':
|
|
503
|
+
queue.fail(new Error(`OpenAI Realtime STT error: ${event.error?.message ?? JSON.stringify(event.error)}`));
|
|
504
|
+
ws.close();
|
|
505
|
+
break;
|
|
506
|
+
default:
|
|
507
|
+
break;
|
|
508
|
+
}
|
|
509
|
+
});
|
|
510
|
+
ws.on('error', (err) => {
|
|
511
|
+
queue.fail(new Error(`OpenAI Realtime STT socket error: ${err.message}`));
|
|
512
|
+
});
|
|
513
|
+
ws.on('close', () => {
|
|
514
|
+
disarmWatchdog();
|
|
515
|
+
// A close before the final transcript means the utterance was lost;
|
|
516
|
+
// surface it instead of silently producing an empty transcript
|
|
517
|
+
// (no-op when the queue already ended or failed)
|
|
518
|
+
if (!completed) {
|
|
519
|
+
queue.fail(new Error('OpenAI Realtime STT connection closed before the final transcript'));
|
|
520
|
+
}
|
|
521
|
+
});
|
|
522
|
+
const opened = new Promise((resolve, reject) => {
|
|
523
|
+
ws.once('open', () => resolve());
|
|
524
|
+
ws.once('error', (err) => reject(err));
|
|
525
|
+
ws.once('close', () => reject(new Error('socket closed before opening')));
|
|
526
|
+
});
|
|
527
|
+
const language = config?.language ?? this.language;
|
|
528
|
+
const sendLoop = (async () => {
|
|
529
|
+
await opened;
|
|
530
|
+
armWatchdog(this.timeoutsMs.inactivity, 'server messages');
|
|
531
|
+
// Transcription-type session; our own VAD segments the audio, so
|
|
532
|
+
// server turn detection stays off and we commit manually
|
|
533
|
+
ws.send(JSON.stringify({
|
|
534
|
+
type: 'session.update',
|
|
535
|
+
session: {
|
|
536
|
+
type: 'transcription',
|
|
537
|
+
audio: {
|
|
538
|
+
input: {
|
|
539
|
+
format: { type: 'audio/pcm', rate: this.streamingInputSampleRate },
|
|
540
|
+
transcription: {
|
|
541
|
+
model,
|
|
542
|
+
...(language && { language }),
|
|
543
|
+
...(this.delay && { delay: this.delay })
|
|
544
|
+
},
|
|
545
|
+
turn_detection: null
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}));
|
|
550
|
+
let sentAny = false;
|
|
551
|
+
for await (const frame of audio) {
|
|
552
|
+
if (ws.readyState !== WebSocket.OPEN)
|
|
553
|
+
return;
|
|
554
|
+
if (frame.length === 0)
|
|
555
|
+
continue;
|
|
556
|
+
sentAny = true;
|
|
557
|
+
ws.send(JSON.stringify({ type: 'input_audio_buffer.append', audio: frame.toString('base64') }));
|
|
558
|
+
}
|
|
559
|
+
if (ws.readyState !== WebSocket.OPEN)
|
|
560
|
+
return;
|
|
561
|
+
if (sentAny) {
|
|
562
|
+
commitSent = true;
|
|
563
|
+
armWatchdog(this.timeoutsMs.final, 'the final transcript');
|
|
564
|
+
ws.send(JSON.stringify({ type: 'input_audio_buffer.commit' }));
|
|
565
|
+
}
|
|
566
|
+
else {
|
|
567
|
+
// Nothing to transcribe; committing an empty buffer errors
|
|
568
|
+
completed = true;
|
|
569
|
+
queue.end();
|
|
570
|
+
ws.close();
|
|
571
|
+
}
|
|
572
|
+
})().catch((err) => {
|
|
573
|
+
queue.fail(err);
|
|
574
|
+
ws.close();
|
|
575
|
+
});
|
|
576
|
+
try {
|
|
577
|
+
yield* queue;
|
|
578
|
+
}
|
|
579
|
+
finally {
|
|
580
|
+
disarmWatchdog();
|
|
581
|
+
// Close first: an abandoned sendLoop exits at its next frame once
|
|
582
|
+
// the socket is no longer OPEN, instead of feeding a dead session
|
|
583
|
+
if (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING) {
|
|
584
|
+
ws.close();
|
|
585
|
+
}
|
|
586
|
+
// sendLoop never rejects (errors route into the queue); the bounded
|
|
587
|
+
// wait guards against a caller-owned frame iterable that never ends
|
|
588
|
+
await Promise.race([
|
|
589
|
+
sendLoop,
|
|
590
|
+
new Promise((resolve) => {
|
|
591
|
+
const t = setTimeout(resolve, 5000);
|
|
592
|
+
t.unref?.();
|
|
593
|
+
})
|
|
594
|
+
]);
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
/**
|
|
598
|
+
* One-shot transcription of a 16-bit mono PCM WAV buffer (the format
|
|
599
|
+
* produced by the LLMRTC voice pipeline), streamed through a realtime
|
|
600
|
+
* session. For arbitrary containers use OpenAIWhisperProvider.
|
|
601
|
+
*/
|
|
602
|
+
async transcribe(audio, config) {
|
|
603
|
+
const pcm = wavToRealtimePCM(audio, this.streamingInputSampleRate);
|
|
604
|
+
const frames = (async function* () {
|
|
605
|
+
// 100ms chunks
|
|
606
|
+
const chunkBytes = 4800;
|
|
607
|
+
for (let off = 0; off < pcm.length; off += chunkBytes) {
|
|
608
|
+
yield pcm.subarray(off, Math.min(off + chunkBytes, pcm.length));
|
|
609
|
+
}
|
|
610
|
+
})();
|
|
611
|
+
let last = { text: '', isFinal: true };
|
|
612
|
+
for await (const result of this.transcribeStream(frames, config)) {
|
|
613
|
+
if (result.isFinal) {
|
|
614
|
+
last = result;
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
return last;
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
/**
|
|
621
|
+
* Extract PCM from a 16-bit mono WAV buffer and linearly resample it to
|
|
622
|
+
* the target rate. Throws on non-WAV input.
|
|
623
|
+
*/
|
|
624
|
+
function wavToRealtimePCM(audio, targetRate) {
|
|
625
|
+
if (audio.length < 44 || audio.toString('ascii', 0, 4) !== 'RIFF' || audio.toString('ascii', 8, 12) !== 'WAVE') {
|
|
626
|
+
throw new Error('OpenAIRealtimeSTTProvider.transcribe expects a 16-bit mono PCM WAV buffer; use OpenAIWhisperProvider for other formats');
|
|
627
|
+
}
|
|
628
|
+
if (audio.toString('ascii', 36, 40) !== 'data') {
|
|
629
|
+
// Non-canonical header (extended fmt chunk, LIST metadata, ...) would
|
|
630
|
+
// silently misread the fields below - refuse instead
|
|
631
|
+
throw new Error('OpenAIRealtimeSTTProvider.transcribe expects a canonical 44-byte WAV header; use OpenAIWhisperProvider for other formats');
|
|
632
|
+
}
|
|
633
|
+
const sourceRate = audio.readUInt32LE(24);
|
|
634
|
+
const channels = audio.readUInt16LE(22);
|
|
635
|
+
const bits = audio.readUInt16LE(34);
|
|
636
|
+
if (channels !== 1 || bits !== 16) {
|
|
637
|
+
throw new Error(`OpenAIRealtimeSTTProvider.transcribe expects 16-bit mono WAV (got ${bits}-bit, ${channels}ch)`);
|
|
638
|
+
}
|
|
639
|
+
const pcm = audio.subarray(44);
|
|
640
|
+
if (sourceRate === targetRate) {
|
|
641
|
+
return pcm;
|
|
642
|
+
}
|
|
643
|
+
const sourceSamples = Math.floor(pcm.length / 2);
|
|
644
|
+
const targetSamples = Math.floor((sourceSamples * targetRate) / sourceRate);
|
|
645
|
+
const out = Buffer.alloc(targetSamples * 2);
|
|
646
|
+
for (let i = 0; i < targetSamples; i++) {
|
|
647
|
+
const pos = (i * sourceRate) / targetRate;
|
|
648
|
+
const i0 = Math.floor(pos);
|
|
649
|
+
const i1 = Math.min(i0 + 1, sourceSamples - 1);
|
|
650
|
+
const frac = pos - i0;
|
|
651
|
+
const s0 = pcm.readInt16LE(i0 * 2);
|
|
652
|
+
const s1 = pcm.readInt16LE(i1 * 2);
|
|
653
|
+
out.writeInt16LE(Math.round(s0 + (s1 - s0) * frac), i * 2);
|
|
654
|
+
}
|
|
655
|
+
return out;
|
|
656
|
+
}
|
|
325
657
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tool-adapter.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* parses tool calls from OpenAI responses.
|
|
6
6
|
*/
|
|
7
7
|
import type { ChatCompletionTool, ChatCompletionToolChoiceOption } from 'openai/resources/chat/completions';
|
|
8
|
-
import type { ToolDefinition, ToolCallRequest, ToolChoice } from '@llmrtc/llmrtc-core';
|
|
8
|
+
import type { ToolDefinition, ToolCallRequest, ToolChoice, StopReason } from '@llmrtc/llmrtc-core';
|
|
9
9
|
/**
|
|
10
10
|
* Convert provider-agnostic tool definitions to OpenAI format
|
|
11
11
|
*/
|
|
@@ -55,4 +55,4 @@ export declare function finalizeToolCalls(accumulators: Map<number, StreamingToo
|
|
|
55
55
|
/**
|
|
56
56
|
* Map stop reason from OpenAI to provider-agnostic format
|
|
57
57
|
*/
|
|
58
|
-
export declare function mapStopReasonFromOpenAI(finishReason: string | null | undefined):
|
|
58
|
+
export declare function mapStopReasonFromOpenAI(finishReason: string | null | undefined): StopReason | undefined;
|
package/dist/tool-adapter.js
CHANGED
package/dist/tool-adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-adapter.js","sourceRoot":"","sources":["../src/tool-adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tool-adapter.js","sourceRoot":"","sources":["../src/tool-adapter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@llmrtc/llmrtc-provider-openai",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "OpenAI/compatible LLM + Whisper adapters for @llmrtc/LLMRTC",
|
|
5
5
|
"homepage": "https://www.llmrtc.org",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -32,8 +32,9 @@
|
|
|
32
32
|
"prepublishOnly": "npm run build"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@llmrtc/llmrtc-core": "^1.
|
|
36
|
-
"openai": "^4.
|
|
35
|
+
"@llmrtc/llmrtc-core": "^1.2.0",
|
|
36
|
+
"openai": "^4.89.0",
|
|
37
|
+
"ws": "^8.16.0"
|
|
37
38
|
},
|
|
38
39
|
"exports": {
|
|
39
40
|
".": {
|
|
@@ -46,5 +47,8 @@
|
|
|
46
47
|
"sideEffects": false,
|
|
47
48
|
"engines": {
|
|
48
49
|
"node": ">=20"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@types/ws": "^8.5.10"
|
|
49
53
|
}
|
|
50
54
|
}
|