dvgateway-adapters 1.2.8 → 1.2.9
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/stt/index.d.ts +2 -0
- package/dist/stt/index.d.ts.map +1 -1
- package/dist/stt/index.js +1 -0
- package/dist/stt/index.js.map +1 -1
- package/dist/stt/openai-stt.d.ts +68 -0
- package/dist/stt/openai-stt.d.ts.map +1 -0
- package/dist/stt/openai-stt.js +189 -0
- package/dist/stt/openai-stt.js.map +1 -0
- package/package.json +1 -1
package/dist/stt/index.d.ts
CHANGED
|
@@ -2,4 +2,6 @@ export { DeepgramAdapter } from './deepgram.js';
|
|
|
2
2
|
export type { DeepgramAdapterOptions } from './deepgram.js';
|
|
3
3
|
export { GoogleChirp3Adapter } from './google-chirp3.js';
|
|
4
4
|
export type { GoogleChirp3AdapterOptions } from './google-chirp3.js';
|
|
5
|
+
export { OpenAISttAdapter } from './openai-stt.js';
|
|
6
|
+
export type { OpenAISttAdapterOptions } from './openai-stt.js';
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/stt/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stt/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stt/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/stt/index.js
CHANGED
package/dist/stt/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stt/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stt/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI STT Adapter
|
|
3
|
+
*
|
|
4
|
+
* Streams 16kHz slin16 PCM audio to OpenAI's Realtime Transcription API
|
|
5
|
+
* and fires onTranscript callbacks for final transcription results.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - gpt-4o-transcribe model (default — best multilingual accuracy)
|
|
9
|
+
* - Server-side VAD with configurable threshold/silence/prefix
|
|
10
|
+
* - Automatic base64 PCM encoding for the WebSocket protocol
|
|
11
|
+
* - Clean telephony audio optimization (aggressive VAD defaults)
|
|
12
|
+
*
|
|
13
|
+
* Protocol:
|
|
14
|
+
* Connect to wss://api.openai.com/v1/realtime?intent=transcription
|
|
15
|
+
* Send transcription_session.update with model/language/VAD config
|
|
16
|
+
* Send input_audio_buffer.append with base64 PCM chunks
|
|
17
|
+
* Receive conversation.item.input_audio_transcription.completed events
|
|
18
|
+
*
|
|
19
|
+
* API Endpoint: wss://api.openai.com/v1/realtime?intent=transcription
|
|
20
|
+
* Docs: https://platform.openai.com/docs/guides/realtime-transcription
|
|
21
|
+
*/
|
|
22
|
+
import type { SttAdapter, AudioChunk, TranscriptResult } from 'dvgateway-sdk';
|
|
23
|
+
export interface OpenAISttAdapterOptions {
|
|
24
|
+
apiKey: string;
|
|
25
|
+
/** Language code, e.g. "ko", "en" (default: "ko") */
|
|
26
|
+
language?: string;
|
|
27
|
+
/**
|
|
28
|
+
* OpenAI transcription model (default: "gpt-4o-transcribe")
|
|
29
|
+
* Options: gpt-4o-transcribe, gpt-4o-mini-transcribe
|
|
30
|
+
*/
|
|
31
|
+
model?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Enable server-side VAD (default: true).
|
|
34
|
+
* When true, sends turn_detection config with server_vad mode.
|
|
35
|
+
* When false, no turn detection is configured.
|
|
36
|
+
*/
|
|
37
|
+
vadEnabled?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* VAD threshold — speech detection sensitivity (0.0–1.0, default: 0.4).
|
|
40
|
+
* Lower = more sensitive. Optimized for clean snoop audio.
|
|
41
|
+
*/
|
|
42
|
+
vadThreshold?: number;
|
|
43
|
+
/**
|
|
44
|
+
* Silence duration (ms) to trigger utterance end (default: 200).
|
|
45
|
+
* Aggressive for clean dedicated media with minimal background noise.
|
|
46
|
+
*/
|
|
47
|
+
silenceDurationMs?: number;
|
|
48
|
+
/**
|
|
49
|
+
* Audio to include before speech start (ms, default: 200).
|
|
50
|
+
* Less padding needed for clean dedicated media.
|
|
51
|
+
*/
|
|
52
|
+
prefixPaddingMs?: number;
|
|
53
|
+
}
|
|
54
|
+
export declare class OpenAISttAdapter implements SttAdapter {
|
|
55
|
+
private readonly opts;
|
|
56
|
+
private transcriptHandler;
|
|
57
|
+
private ws;
|
|
58
|
+
private stopped;
|
|
59
|
+
constructor(opts: OpenAISttAdapterOptions);
|
|
60
|
+
onTranscript(handler: (result: TranscriptResult) => void): void;
|
|
61
|
+
startStream(linkedId: string, audioStream: AsyncIterable<AudioChunk>): Promise<void>;
|
|
62
|
+
stop(): Promise<void>;
|
|
63
|
+
private connect;
|
|
64
|
+
private sendSessionConfig;
|
|
65
|
+
private pipeAudio;
|
|
66
|
+
private handleEvent;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=openai-stt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-stt.d.ts","sourceRoot":"","sources":["../../src/stt/openai-stt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAG9E,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAMf;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAaD,qBAAa,gBAAiB,YAAW,UAAU;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoC;IACzD,OAAO,CAAC,iBAAiB,CAAqD;IAC9E,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE,uBAAuB;IAYzC,YAAY,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI;IAIzD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBpF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAQb,OAAO;IAgCrB,OAAO,CAAC,iBAAiB;YA2BX,SAAS;IAiCvB,OAAO,CAAC,WAAW;CA+CpB"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI STT Adapter
|
|
3
|
+
*
|
|
4
|
+
* Streams 16kHz slin16 PCM audio to OpenAI's Realtime Transcription API
|
|
5
|
+
* and fires onTranscript callbacks for final transcription results.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - gpt-4o-transcribe model (default — best multilingual accuracy)
|
|
9
|
+
* - Server-side VAD with configurable threshold/silence/prefix
|
|
10
|
+
* - Automatic base64 PCM encoding for the WebSocket protocol
|
|
11
|
+
* - Clean telephony audio optimization (aggressive VAD defaults)
|
|
12
|
+
*
|
|
13
|
+
* Protocol:
|
|
14
|
+
* Connect to wss://api.openai.com/v1/realtime?intent=transcription
|
|
15
|
+
* Send transcription_session.update with model/language/VAD config
|
|
16
|
+
* Send input_audio_buffer.append with base64 PCM chunks
|
|
17
|
+
* Receive conversation.item.input_audio_transcription.completed events
|
|
18
|
+
*
|
|
19
|
+
* API Endpoint: wss://api.openai.com/v1/realtime?intent=transcription
|
|
20
|
+
* Docs: https://platform.openai.com/docs/guides/realtime-transcription
|
|
21
|
+
*/
|
|
22
|
+
import WebSocket from 'ws';
|
|
23
|
+
import { float32ToSlin16 } from 'dvgateway-sdk';
|
|
24
|
+
export class OpenAISttAdapter {
|
|
25
|
+
opts;
|
|
26
|
+
transcriptHandler = null;
|
|
27
|
+
ws = null;
|
|
28
|
+
stopped = false;
|
|
29
|
+
constructor(opts) {
|
|
30
|
+
this.opts = {
|
|
31
|
+
apiKey: opts.apiKey,
|
|
32
|
+
language: opts.language ?? 'ko',
|
|
33
|
+
model: opts.model ?? 'gpt-4o-transcribe',
|
|
34
|
+
vadEnabled: opts.vadEnabled ?? true,
|
|
35
|
+
vadThreshold: opts.vadThreshold ?? 0.4,
|
|
36
|
+
silenceDurationMs: opts.silenceDurationMs ?? 200,
|
|
37
|
+
prefixPaddingMs: opts.prefixPaddingMs ?? 200,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
onTranscript(handler) {
|
|
41
|
+
this.transcriptHandler = handler;
|
|
42
|
+
}
|
|
43
|
+
async startStream(linkedId, audioStream) {
|
|
44
|
+
this.stopped = false;
|
|
45
|
+
this.ws = await this.connect();
|
|
46
|
+
// Send session configuration
|
|
47
|
+
this.sendSessionConfig();
|
|
48
|
+
// Pipe audio frames
|
|
49
|
+
void this.pipeAudio(audioStream);
|
|
50
|
+
// Keep the promise alive until stream ends
|
|
51
|
+
await new Promise((resolve) => {
|
|
52
|
+
this.ws?.once('close', () => resolve());
|
|
53
|
+
const checkStopped = setInterval(() => {
|
|
54
|
+
if (this.stopped) {
|
|
55
|
+
clearInterval(checkStopped);
|
|
56
|
+
this.ws?.close(1000, 'stream ended');
|
|
57
|
+
resolve();
|
|
58
|
+
}
|
|
59
|
+
}, 100);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
async stop() {
|
|
63
|
+
this.stopped = true;
|
|
64
|
+
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
|
65
|
+
this.ws.close(1000, 'stop');
|
|
66
|
+
}
|
|
67
|
+
this.ws = null;
|
|
68
|
+
}
|
|
69
|
+
async connect() {
|
|
70
|
+
const url = 'wss://api.openai.com/v1/realtime?intent=transcription';
|
|
71
|
+
const ws = new WebSocket(url, {
|
|
72
|
+
headers: {
|
|
73
|
+
'Authorization': `Bearer ${this.opts.apiKey}`,
|
|
74
|
+
'OpenAI-Beta': 'realtime=v1',
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
ws.on('message', (data) => {
|
|
78
|
+
try {
|
|
79
|
+
const event = JSON.parse(data.toString());
|
|
80
|
+
this.handleEvent(event);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// Ignore malformed JSON
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
ws.on('error', (err) => {
|
|
87
|
+
process.stderr.write(`[OpenAISttAdapter] WebSocket error: ${err.message}\n`);
|
|
88
|
+
});
|
|
89
|
+
// Wait for connection
|
|
90
|
+
await new Promise((resolve, reject) => {
|
|
91
|
+
ws.once('open', resolve);
|
|
92
|
+
ws.once('error', reject);
|
|
93
|
+
});
|
|
94
|
+
return ws;
|
|
95
|
+
}
|
|
96
|
+
sendSessionConfig() {
|
|
97
|
+
if (!this.ws || this.ws.readyState !== WebSocket.OPEN)
|
|
98
|
+
return;
|
|
99
|
+
const session = {
|
|
100
|
+
input_audio_format: 'pcm16',
|
|
101
|
+
input_audio_transcription: {
|
|
102
|
+
model: this.opts.model,
|
|
103
|
+
language: this.opts.language,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
if (this.opts.vadEnabled) {
|
|
107
|
+
session.turn_detection = {
|
|
108
|
+
type: 'server_vad',
|
|
109
|
+
threshold: this.opts.vadThreshold,
|
|
110
|
+
prefix_padding_ms: this.opts.prefixPaddingMs,
|
|
111
|
+
silence_duration_ms: this.opts.silenceDurationMs,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
const msg = JSON.stringify({
|
|
115
|
+
type: 'transcription_session.update',
|
|
116
|
+
session,
|
|
117
|
+
});
|
|
118
|
+
this.ws.send(msg);
|
|
119
|
+
}
|
|
120
|
+
async pipeAudio(audioStream) {
|
|
121
|
+
// OpenAI expects 100ms chunks (3200 bytes at 16kHz s16le)
|
|
122
|
+
const CHUNK_SIZE = 3200;
|
|
123
|
+
let buffer = Buffer.alloc(0);
|
|
124
|
+
for await (const chunk of audioStream) {
|
|
125
|
+
if (this.stopped || !this.ws || this.ws.readyState !== WebSocket.OPEN)
|
|
126
|
+
break;
|
|
127
|
+
const pcm = float32ToSlin16(chunk.samples);
|
|
128
|
+
buffer = Buffer.concat([buffer, pcm]);
|
|
129
|
+
// Send in optimal chunk size
|
|
130
|
+
while (buffer.length >= CHUNK_SIZE) {
|
|
131
|
+
const frame = buffer.subarray(0, CHUNK_SIZE);
|
|
132
|
+
const msg = JSON.stringify({
|
|
133
|
+
type: 'input_audio_buffer.append',
|
|
134
|
+
audio: frame.toString('base64'),
|
|
135
|
+
});
|
|
136
|
+
this.ws.send(msg);
|
|
137
|
+
buffer = buffer.subarray(CHUNK_SIZE);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Flush remaining buffer
|
|
141
|
+
if (buffer.length > 0 && this.ws && this.ws.readyState === WebSocket.OPEN) {
|
|
142
|
+
const msg = JSON.stringify({
|
|
143
|
+
type: 'input_audio_buffer.append',
|
|
144
|
+
audio: buffer.toString('base64'),
|
|
145
|
+
});
|
|
146
|
+
this.ws.send(msg);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
handleEvent(event) {
|
|
150
|
+
switch (event.type) {
|
|
151
|
+
case 'conversation.item.input_audio_transcription.completed':
|
|
152
|
+
if (event.transcript) {
|
|
153
|
+
const result = {
|
|
154
|
+
linkedId: '',
|
|
155
|
+
text: event.transcript,
|
|
156
|
+
isFinal: true,
|
|
157
|
+
confidence: 1.0,
|
|
158
|
+
language: this.opts.language,
|
|
159
|
+
timestampMs: Date.now(),
|
|
160
|
+
};
|
|
161
|
+
this.transcriptHandler?.(result);
|
|
162
|
+
}
|
|
163
|
+
break;
|
|
164
|
+
case 'conversation.item.input_audio_transcription.failed':
|
|
165
|
+
if (event.error) {
|
|
166
|
+
process.stderr.write(`[OpenAISttAdapter] transcription failed: ${event.error.code} - ${event.error.message}\n`);
|
|
167
|
+
}
|
|
168
|
+
break;
|
|
169
|
+
case 'error':
|
|
170
|
+
if (event.error) {
|
|
171
|
+
process.stderr.write(`[OpenAISttAdapter] error: ${event.error.code} - ${event.error.message}\n`);
|
|
172
|
+
}
|
|
173
|
+
break;
|
|
174
|
+
// Known control events — no action needed
|
|
175
|
+
case 'transcription_session.created':
|
|
176
|
+
case 'transcription_session.updated':
|
|
177
|
+
case 'input_audio_buffer.speech_started':
|
|
178
|
+
case 'input_audio_buffer.speech_stopped':
|
|
179
|
+
case 'input_audio_buffer.committed':
|
|
180
|
+
case 'input_audio_buffer.cleared':
|
|
181
|
+
case 'conversation.item.created':
|
|
182
|
+
case 'conversation.item.input_audio_transcription.delta':
|
|
183
|
+
break;
|
|
184
|
+
default:
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=openai-stt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-stt.js","sourceRoot":"","sources":["../../src/stt/openai-stt.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED