@llmrtc/llmrtc-core 1.0.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 +83 -0
- package/NOTICE +7 -0
- package/dist/async-event-queue.d.ts +24 -0
- package/dist/async-event-queue.js +104 -0
- package/dist/async-event-queue.js.map +1 -0
- package/dist/hooks.d.ts +10 -6
- package/dist/hooks.js +3 -1
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/logging-hooks.js +6 -1
- package/dist/logging-hooks.js.map +1 -1
- package/dist/orchestrator.d.ts +27 -7
- package/dist/orchestrator.js +233 -86
- package/dist/orchestrator.js.map +1 -1
- package/dist/playbook-engine.d.ts +6 -0
- package/dist/playbook-engine.js +8 -4
- package/dist/playbook-engine.js.map +1 -1
- package/dist/playbook-orchestrator.d.ts +22 -1
- package/dist/playbook-orchestrator.js +145 -29
- package/dist/playbook-orchestrator.js.map +1 -1
- package/dist/tool-executor.d.ts +0 -4
- package/dist/tool-executor.js +58 -43
- package/dist/tool-executor.js.map +1 -1
- package/dist/tools.d.ts +10 -2
- package/dist/tools.js +73 -26
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +26 -1
- package/package.json +13 -5
package/dist/orchestrator.js
CHANGED
|
@@ -100,12 +100,10 @@ export class ConversationOrchestrator {
|
|
|
100
100
|
content: transcript.text,
|
|
101
101
|
attachments: attachments.length ? attachments : undefined
|
|
102
102
|
};
|
|
103
|
-
|
|
104
|
-
this.history.push({ role: 'system', content: this.systemPrompt });
|
|
105
|
-
}
|
|
103
|
+
this.ensureSystemMessage();
|
|
106
104
|
this.pushHistory(userMessage);
|
|
107
105
|
const llmRequest = {
|
|
108
|
-
messages: this.
|
|
106
|
+
messages: this.buildRequestMessages(),
|
|
109
107
|
config: {
|
|
110
108
|
systemPrompt: this.systemPrompt,
|
|
111
109
|
historyLimit: this.historyLimit,
|
|
@@ -132,7 +130,8 @@ export class ConversationOrchestrator {
|
|
|
132
130
|
*
|
|
133
131
|
* Hooks and metrics are called throughout the turn lifecycle.
|
|
134
132
|
*/
|
|
135
|
-
async *runTurnStream(audio, attachments = []) {
|
|
133
|
+
async *runTurnStream(audio, attachments = [], options) {
|
|
134
|
+
const signal = options?.signal;
|
|
136
135
|
// Generate turn context
|
|
137
136
|
const turnStartTime = Date.now();
|
|
138
137
|
const ctx = {
|
|
@@ -140,6 +139,109 @@ export class ConversationOrchestrator {
|
|
|
140
139
|
sessionId: this.sessionId,
|
|
141
140
|
startTime: turnStartTime
|
|
142
141
|
};
|
|
142
|
+
let errored = false;
|
|
143
|
+
let turnEnded = false;
|
|
144
|
+
const endTurn = async () => {
|
|
145
|
+
if (turnEnded)
|
|
146
|
+
return;
|
|
147
|
+
turnEnded = true;
|
|
148
|
+
const turnTiming = createTimingInfo(turnStartTime, Date.now());
|
|
149
|
+
this.metrics.timing(MetricNames.TURN_DURATION, turnTiming.durationMs);
|
|
150
|
+
await callHookSafe(this.hooks.onTurnEnd, ctx, turnTiming);
|
|
151
|
+
};
|
|
152
|
+
try {
|
|
153
|
+
yield* this.runTurnStreamInternal(ctx, audio, attachments, signal, () => {
|
|
154
|
+
errored = true;
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
finally {
|
|
158
|
+
// Runs on normal completion, barge-in abort, and consumer abandonment,
|
|
159
|
+
// so turn metrics and onTurnEnd are never skipped. Errors keep the
|
|
160
|
+
// previous semantics: the turn ends without onTurnEnd.
|
|
161
|
+
if (!errored) {
|
|
162
|
+
await endTurn();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Streaming-STT version of runTurnStream: consumes live audio frames
|
|
168
|
+
* (16kHz mono 16-bit PCM Buffers) through the STT provider's
|
|
169
|
+
* transcribeStream, yielding every interim STTResult as it arrives.
|
|
170
|
+
* Final results are concatenated into the transcript that drives the
|
|
171
|
+
* same LLM/TTS pipeline as runTurnStream. Requires a provider with
|
|
172
|
+
* transcribeStream support.
|
|
173
|
+
*/
|
|
174
|
+
async *runTurnStreamFromAudioStream(frames, attachments = [], options) {
|
|
175
|
+
const signal = options?.signal;
|
|
176
|
+
const turnStartTime = Date.now();
|
|
177
|
+
const ctx = {
|
|
178
|
+
turnId: globalThis.crypto.randomUUID(),
|
|
179
|
+
sessionId: this.sessionId,
|
|
180
|
+
startTime: turnStartTime
|
|
181
|
+
};
|
|
182
|
+
let errored = false;
|
|
183
|
+
let turnEnded = false;
|
|
184
|
+
const endTurn = async () => {
|
|
185
|
+
if (turnEnded)
|
|
186
|
+
return;
|
|
187
|
+
turnEnded = true;
|
|
188
|
+
const turnTiming = createTimingInfo(turnStartTime, Date.now());
|
|
189
|
+
this.metrics.timing(MetricNames.TURN_DURATION, turnTiming.durationMs);
|
|
190
|
+
await callHookSafe(this.hooks.onTurnEnd, ctx, turnTiming);
|
|
191
|
+
};
|
|
192
|
+
try {
|
|
193
|
+
yield* this.runTurnStreamFromAudioStreamInternal(ctx, frames, attachments, signal, () => {
|
|
194
|
+
errored = true;
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
finally {
|
|
198
|
+
if (!errored) {
|
|
199
|
+
await endTurn();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
async *runTurnStreamFromAudioStreamInternal(ctx, frames, attachments, signal, markErrored) {
|
|
204
|
+
// Audio arrives as a stream, so turn/STT hooks receive an empty buffer
|
|
205
|
+
const emptyAudio = Buffer.alloc(0);
|
|
206
|
+
await callHookSafe(this.hooks.onTurnStart, ctx, emptyAudio);
|
|
207
|
+
const sttStartTime = Date.now();
|
|
208
|
+
await callHookSafe(this.hooks.onSTTStart, ctx, emptyAudio);
|
|
209
|
+
let transcript;
|
|
210
|
+
try {
|
|
211
|
+
if (!this.providers.stt.transcribeStream) {
|
|
212
|
+
throw new Error(`STT provider "${this.providers.stt.name}" does not support transcribeStream`);
|
|
213
|
+
}
|
|
214
|
+
// Yield every interim result; providers may emit several finals
|
|
215
|
+
// (one per segment), so finals are accumulated into the transcript
|
|
216
|
+
const finalParts = [];
|
|
217
|
+
let lastResult;
|
|
218
|
+
for await (const result of this.providers.stt.transcribeStream(frames)) {
|
|
219
|
+
yield result;
|
|
220
|
+
lastResult = result;
|
|
221
|
+
if (result.isFinal && result.text.trim()) {
|
|
222
|
+
finalParts.push(result.text.trim());
|
|
223
|
+
}
|
|
224
|
+
if (signal?.aborted) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
transcript = { text: finalParts.join(' '), isFinal: true, raw: lastResult?.raw };
|
|
229
|
+
const sttTiming = createTimingInfo(sttStartTime, Date.now());
|
|
230
|
+
this.metrics.timing(MetricNames.STT_DURATION, sttTiming.durationMs, {
|
|
231
|
+
provider: this.providers.stt.name
|
|
232
|
+
});
|
|
233
|
+
await callHookSafe(this.hooks.onSTTEnd, ctx, transcript, sttTiming);
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
237
|
+
await callHookSafe(this.hooks.onSTTError, ctx, err);
|
|
238
|
+
this.metrics.increment(MetricNames.ERRORS, 1, { component: 'stt' });
|
|
239
|
+
markErrored();
|
|
240
|
+
throw error;
|
|
241
|
+
}
|
|
242
|
+
yield* this.completeTurnFromTranscript(ctx, transcript, attachments, signal, markErrored);
|
|
243
|
+
}
|
|
244
|
+
async *runTurnStreamInternal(ctx, audio, attachments, signal, markErrored) {
|
|
143
245
|
// Call onTurnStart hook
|
|
144
246
|
await callHookSafe(this.hooks.onTurnStart, ctx, audio);
|
|
145
247
|
// -------------------------------------------------------------------------
|
|
@@ -160,12 +262,29 @@ export class ConversationOrchestrator {
|
|
|
160
262
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
161
263
|
await callHookSafe(this.hooks.onSTTError, ctx, err);
|
|
162
264
|
this.metrics.increment(MetricNames.ERRORS, 1, { component: 'stt' });
|
|
265
|
+
markErrored();
|
|
163
266
|
throw error;
|
|
164
267
|
}
|
|
165
|
-
this.pushHistory({ role: 'user', content: transcript.text, attachments: attachments.length ? attachments : undefined });
|
|
166
268
|
yield transcript;
|
|
269
|
+
yield* this.completeTurnFromTranscript(ctx, transcript, attachments, signal, markErrored);
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Everything after the transcript is known: history, LLM, TTS.
|
|
273
|
+
* Shared by the buffered and streaming STT entry points.
|
|
274
|
+
*/
|
|
275
|
+
async *completeTurnFromTranscript(ctx, transcript, attachments, signal, markErrored) {
|
|
276
|
+
// Empty transcript guard: VAD misfires and silent audio produce empty
|
|
277
|
+
// text - don't burn an LLM/TTS round trip or pollute history with it.
|
|
278
|
+
if (!transcript.text.trim()) {
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
if (signal?.aborted) {
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
284
|
+
this.ensureSystemMessage();
|
|
285
|
+
this.pushHistory({ role: 'user', content: transcript.text, attachments: attachments.length ? attachments : undefined });
|
|
167
286
|
const llmRequest = {
|
|
168
|
-
messages: this.
|
|
287
|
+
messages: this.buildRequestMessages(),
|
|
169
288
|
config: {
|
|
170
289
|
systemPrompt: this.systemPrompt,
|
|
171
290
|
historyLimit: this.historyLimit,
|
|
@@ -183,28 +302,44 @@ export class ConversationOrchestrator {
|
|
|
183
302
|
let llmFirstChunkTime;
|
|
184
303
|
// Non-streaming LLM fallback
|
|
185
304
|
if (!this.providers.llm.stream) {
|
|
305
|
+
let llm;
|
|
306
|
+
let llmTiming;
|
|
186
307
|
try {
|
|
187
|
-
|
|
188
|
-
|
|
308
|
+
llm = await this.providers.llm.complete(llmRequest);
|
|
309
|
+
llmTiming = createTimingInfo(llmStartTime, Date.now());
|
|
189
310
|
this.metrics.timing(MetricNames.LLM_DURATION, llmTiming.durationMs, {
|
|
190
311
|
provider: this.providers.llm.name
|
|
191
312
|
});
|
|
192
|
-
await callHookSafe(this.hooks.onLLMEnd, ctx, llm, llmTiming);
|
|
193
|
-
this.pushHistory({ role: 'assistant', content: llm.fullText });
|
|
194
|
-
yield llm;
|
|
195
|
-
yield* this.generateTTSWithHooks(ctx, llm.fullText);
|
|
196
|
-
// Turn complete
|
|
197
|
-
const turnTiming = createTimingInfo(turnStartTime, Date.now());
|
|
198
|
-
this.metrics.timing(MetricNames.TURN_DURATION, turnTiming.durationMs);
|
|
199
|
-
await callHookSafe(this.hooks.onTurnEnd, ctx, turnTiming);
|
|
200
|
-
return;
|
|
201
313
|
}
|
|
202
314
|
catch (error) {
|
|
203
315
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
204
316
|
await callHookSafe(this.hooks.onLLMError, ctx, err);
|
|
205
317
|
this.metrics.increment(MetricNames.ERRORS, 1, { component: 'llm' });
|
|
318
|
+
markErrored();
|
|
206
319
|
throw error;
|
|
207
320
|
}
|
|
321
|
+
if (llm.stopReason === 'refusal' ||
|
|
322
|
+
llm.stopReason === 'content_filter' ||
|
|
323
|
+
llm.stopReason === 'context_overflow' ||
|
|
324
|
+
llm.stopReason === 'pause_turn') {
|
|
325
|
+
this.logger.warn?.(`[orchestrator] LLM stopped with '${llm.stopReason}' - the response may be empty or truncated`);
|
|
326
|
+
}
|
|
327
|
+
// Guardrail: a throw from onLLMEnd cancels the response - it is not
|
|
328
|
+
// committed to history and no TTS is produced.
|
|
329
|
+
try {
|
|
330
|
+
await this.hooks.onLLMEnd?.(ctx, llm, llmTiming);
|
|
331
|
+
}
|
|
332
|
+
catch (error) {
|
|
333
|
+
markErrored();
|
|
334
|
+
throw error;
|
|
335
|
+
}
|
|
336
|
+
this.pushHistory({ role: 'assistant', content: llm.fullText });
|
|
337
|
+
yield llm;
|
|
338
|
+
if (signal?.aborted) {
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
yield* this.generateTTSWithHooks(ctx, llm.fullText);
|
|
342
|
+
return;
|
|
208
343
|
}
|
|
209
344
|
// Check if we can do streaming TTS (requires config enabled AND provider support)
|
|
210
345
|
const canStreamTTS = this.streamingTTS && !!this.providers.tts.speakStream;
|
|
@@ -212,11 +347,16 @@ export class ConversationOrchestrator {
|
|
|
212
347
|
let pendingText = '';
|
|
213
348
|
let ttsStarted = false;
|
|
214
349
|
let chunkIndex = 0;
|
|
215
|
-
|
|
350
|
+
let ttsStartTime;
|
|
351
|
+
let aborted = false;
|
|
216
352
|
try {
|
|
217
353
|
for await (const chunk of this.providers.llm.stream(llmRequest)) {
|
|
354
|
+
if (signal?.aborted) {
|
|
355
|
+
aborted = true;
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
218
358
|
// Track time to first token
|
|
219
|
-
if (
|
|
359
|
+
if (llmFirstChunkTime === undefined && chunk.content) {
|
|
220
360
|
llmFirstChunkTime = Date.now();
|
|
221
361
|
this.metrics.timing(MetricNames.LLM_TTFT, llmFirstChunkTime - llmStartTime, {
|
|
222
362
|
provider: this.providers.llm.name
|
|
@@ -239,37 +379,62 @@ export class ConversationOrchestrator {
|
|
|
239
379
|
const completeSentences = sentences.slice(0, -1);
|
|
240
380
|
pendingText = sentences[sentences.length - 1];
|
|
241
381
|
for (const completeSentence of completeSentences) {
|
|
382
|
+
if (signal?.aborted) {
|
|
383
|
+
aborted = true;
|
|
384
|
+
break;
|
|
385
|
+
}
|
|
242
386
|
if (completeSentence.trim()) {
|
|
243
387
|
// Signal TTS start on first sentence
|
|
244
388
|
if (!ttsStarted) {
|
|
245
389
|
ttsStarted = true;
|
|
390
|
+
ttsStartTime = Date.now();
|
|
246
391
|
await callHookSafe(this.hooks.onTTSStart, ctx, completeSentence.trim());
|
|
247
392
|
yield { type: 'tts-start' };
|
|
248
393
|
}
|
|
249
394
|
// Stream TTS for this sentence
|
|
250
|
-
yield* this.streamTTSChunksWithHooks(ctx, completeSentence.trim());
|
|
395
|
+
yield* this.streamTTSChunksWithHooks(ctx, completeSentence.trim(), signal);
|
|
251
396
|
}
|
|
252
397
|
}
|
|
398
|
+
if (aborted) {
|
|
399
|
+
break;
|
|
400
|
+
}
|
|
253
401
|
}
|
|
254
402
|
}
|
|
255
403
|
}
|
|
256
|
-
// LLM complete
|
|
257
|
-
const llmEndTime = Date.now();
|
|
258
|
-
const llmTiming = createTimingInfo(llmStartTime, llmEndTime);
|
|
259
|
-
this.metrics.timing(MetricNames.LLM_DURATION, llmTiming.durationMs, {
|
|
260
|
-
provider: this.providers.llm.name
|
|
261
|
-
});
|
|
262
|
-
const llmResult = { fullText: assembled };
|
|
263
|
-
await callHookSafe(this.hooks.onLLMEnd, ctx, llmResult, llmTiming);
|
|
264
|
-
this.pushHistory({ role: 'assistant', content: assembled });
|
|
265
|
-
yield llmResult;
|
|
266
404
|
}
|
|
267
405
|
catch (error) {
|
|
268
406
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
269
407
|
await callHookSafe(this.hooks.onLLMError, ctx, err);
|
|
270
408
|
this.metrics.increment(MetricNames.ERRORS, 1, { component: 'llm' });
|
|
409
|
+
markErrored();
|
|
271
410
|
throw error;
|
|
272
411
|
}
|
|
412
|
+
// LLM complete (or interrupted)
|
|
413
|
+
const llmTiming = createTimingInfo(llmStartTime, Date.now());
|
|
414
|
+
this.metrics.timing(MetricNames.LLM_DURATION, llmTiming.durationMs, {
|
|
415
|
+
provider: this.providers.llm.name
|
|
416
|
+
});
|
|
417
|
+
if (aborted) {
|
|
418
|
+
// Barge-in: commit what was generated so far so history reflects what
|
|
419
|
+
// the user (partially) heard, then stop without further TTS.
|
|
420
|
+
if (assembled) {
|
|
421
|
+
this.pushHistory({ role: 'assistant', content: assembled });
|
|
422
|
+
}
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
const llmResult = { fullText: assembled };
|
|
426
|
+
// Guardrail: a throw from onLLMEnd cancels the response - it is not
|
|
427
|
+
// committed to history and no further TTS is produced. (With streaming
|
|
428
|
+
// TTS, audio for earlier sentences may already have been emitted.)
|
|
429
|
+
try {
|
|
430
|
+
await this.hooks.onLLMEnd?.(ctx, llmResult, llmTiming);
|
|
431
|
+
}
|
|
432
|
+
catch (error) {
|
|
433
|
+
markErrored();
|
|
434
|
+
throw error;
|
|
435
|
+
}
|
|
436
|
+
this.pushHistory({ role: 'assistant', content: assembled });
|
|
437
|
+
yield llmResult;
|
|
273
438
|
// -------------------------------------------------------------------------
|
|
274
439
|
// TTS Phase (remaining text)
|
|
275
440
|
// -------------------------------------------------------------------------
|
|
@@ -277,17 +442,18 @@ export class ConversationOrchestrator {
|
|
|
277
442
|
// Handle remaining text after LLM completes
|
|
278
443
|
if (canStreamTTS) {
|
|
279
444
|
const remainingText = pendingText.trim();
|
|
280
|
-
if (remainingText) {
|
|
445
|
+
if (remainingText && !signal?.aborted) {
|
|
281
446
|
if (!ttsStarted) {
|
|
282
447
|
ttsStarted = true;
|
|
448
|
+
ttsStartTime = Date.now();
|
|
283
449
|
await callHookSafe(this.hooks.onTTSStart, ctx, remainingText);
|
|
284
450
|
yield { type: 'tts-start' };
|
|
285
451
|
}
|
|
286
|
-
yield* this.streamTTSChunksWithHooks(ctx, remainingText);
|
|
452
|
+
yield* this.streamTTSChunksWithHooks(ctx, remainingText, signal);
|
|
287
453
|
}
|
|
288
454
|
// Signal TTS complete
|
|
289
455
|
if (ttsStarted) {
|
|
290
|
-
const ttsTiming = createTimingInfo(ttsStartTime, Date.now());
|
|
456
|
+
const ttsTiming = createTimingInfo(ttsStartTime ?? llmStartTime, Date.now());
|
|
291
457
|
this.metrics.timing(MetricNames.TTS_DURATION, ttsTiming.durationMs, {
|
|
292
458
|
provider: this.providers.tts.name
|
|
293
459
|
});
|
|
@@ -295,7 +461,7 @@ export class ConversationOrchestrator {
|
|
|
295
461
|
yield { type: 'tts-complete' };
|
|
296
462
|
}
|
|
297
463
|
}
|
|
298
|
-
else {
|
|
464
|
+
else if (!signal?.aborted) {
|
|
299
465
|
// Fallback to non-streaming TTS
|
|
300
466
|
yield* this.generateTTSWithHooks(ctx, assembled);
|
|
301
467
|
}
|
|
@@ -304,12 +470,9 @@ export class ConversationOrchestrator {
|
|
|
304
470
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
305
471
|
await callHookSafe(this.hooks.onTTSError, ctx, err);
|
|
306
472
|
this.metrics.increment(MetricNames.ERRORS, 1, { component: 'tts' });
|
|
473
|
+
markErrored();
|
|
307
474
|
throw error;
|
|
308
475
|
}
|
|
309
|
-
// Turn complete
|
|
310
|
-
const turnTiming = createTimingInfo(turnStartTime, Date.now());
|
|
311
|
-
this.metrics.timing(MetricNames.TURN_DURATION, turnTiming.durationMs);
|
|
312
|
-
await callHookSafe(this.hooks.onTurnEnd, ctx, turnTiming);
|
|
313
476
|
}
|
|
314
477
|
/**
|
|
315
478
|
* Split text into sentences using custom chunker or default regex
|
|
@@ -336,26 +499,37 @@ export class ConversationOrchestrator {
|
|
|
336
499
|
* Stream TTS chunks for a sentence using PCM format with hooks.
|
|
337
500
|
* Yields TTSChunk events as audio data arrives.
|
|
338
501
|
*/
|
|
339
|
-
async *streamTTSChunksWithHooks(ctx, text) {
|
|
502
|
+
async *streamTTSChunksWithHooks(ctx, text, signal) {
|
|
340
503
|
if (!this.providers.tts.speakStream)
|
|
341
504
|
return;
|
|
505
|
+
const sampleRate = this.providers.tts.pcmSampleRate ?? 24000;
|
|
342
506
|
let chunkIndex = 0;
|
|
507
|
+
let emittedChunks = false;
|
|
343
508
|
try {
|
|
344
509
|
for await (const audioChunk of this.providers.tts.speakStream(text, { format: 'pcm' })) {
|
|
510
|
+
if (signal?.aborted) {
|
|
511
|
+
return;
|
|
512
|
+
}
|
|
345
513
|
const ttsChunk = {
|
|
346
514
|
type: 'tts-chunk',
|
|
347
515
|
audio: audioChunk,
|
|
348
516
|
format: 'pcm',
|
|
349
|
-
sampleRate
|
|
517
|
+
sampleRate,
|
|
350
518
|
sentence: text
|
|
351
519
|
};
|
|
352
520
|
await callHookSafe(this.hooks.onTTSChunk, ctx, ttsChunk, chunkIndex);
|
|
353
521
|
chunkIndex++;
|
|
522
|
+
emittedChunks = true;
|
|
354
523
|
yield ttsChunk;
|
|
355
524
|
}
|
|
356
525
|
}
|
|
357
526
|
catch (err) {
|
|
358
527
|
this.logger.error?.('[orchestrator] TTS stream error:', err);
|
|
528
|
+
if (emittedChunks) {
|
|
529
|
+
// Part of this sentence was already emitted; re-speaking it would
|
|
530
|
+
// duplicate audio, so surface the failure instead.
|
|
531
|
+
throw err;
|
|
532
|
+
}
|
|
359
533
|
// Fallback: try non-streaming TTS
|
|
360
534
|
try {
|
|
361
535
|
const tts = await this.providers.tts.speak(text, { format: 'pcm' });
|
|
@@ -363,7 +537,7 @@ export class ConversationOrchestrator {
|
|
|
363
537
|
type: 'tts-chunk',
|
|
364
538
|
audio: tts.audio,
|
|
365
539
|
format: 'pcm',
|
|
366
|
-
sampleRate
|
|
540
|
+
sampleRate,
|
|
367
541
|
sentence: text
|
|
368
542
|
};
|
|
369
543
|
await callHookSafe(this.hooks.onTTSChunk, ctx, ttsChunk, chunkIndex);
|
|
@@ -392,58 +566,31 @@ export class ConversationOrchestrator {
|
|
|
392
566
|
yield { type: 'tts-complete' };
|
|
393
567
|
}
|
|
394
568
|
/**
|
|
395
|
-
*
|
|
396
|
-
* Stream TTS chunks for a sentence using PCM format.
|
|
569
|
+
* Ensure the system prompt is seeded as the first history message.
|
|
397
570
|
*/
|
|
398
|
-
|
|
399
|
-
if (
|
|
400
|
-
|
|
401
|
-
try {
|
|
402
|
-
for await (const audioChunk of this.providers.tts.speakStream(text, { format: 'pcm' })) {
|
|
403
|
-
yield {
|
|
404
|
-
type: 'tts-chunk',
|
|
405
|
-
audio: audioChunk,
|
|
406
|
-
format: 'pcm',
|
|
407
|
-
sampleRate: 24000, // OpenAI/ElevenLabs PCM is 24kHz
|
|
408
|
-
sentence: text
|
|
409
|
-
};
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
catch (err) {
|
|
413
|
-
this.logger.error?.('[orchestrator] TTS stream error:', err);
|
|
414
|
-
// Fallback: try non-streaming TTS
|
|
415
|
-
try {
|
|
416
|
-
const tts = await this.providers.tts.speak(text, { format: 'pcm' });
|
|
417
|
-
yield {
|
|
418
|
-
type: 'tts-chunk',
|
|
419
|
-
audio: tts.audio,
|
|
420
|
-
format: 'pcm',
|
|
421
|
-
sampleRate: 24000,
|
|
422
|
-
sentence: text
|
|
423
|
-
};
|
|
424
|
-
}
|
|
425
|
-
catch (fallbackErr) {
|
|
426
|
-
this.logger.error?.('[orchestrator] TTS fallback also failed:', fallbackErr);
|
|
427
|
-
}
|
|
571
|
+
ensureSystemMessage() {
|
|
572
|
+
if (this.systemPrompt && this.history[0]?.role !== 'system') {
|
|
573
|
+
this.history.unshift({ role: 'system', content: this.systemPrompt });
|
|
428
574
|
}
|
|
429
575
|
}
|
|
430
576
|
/**
|
|
431
|
-
*
|
|
432
|
-
*
|
|
577
|
+
* Build the message window for an LLM request.
|
|
578
|
+
* The system message is always included and does not consume history slots,
|
|
579
|
+
* so long conversations never lose the assistant's instructions.
|
|
433
580
|
*/
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
const
|
|
437
|
-
|
|
438
|
-
|
|
581
|
+
buildRequestMessages() {
|
|
582
|
+
const hasSystem = this.history[0]?.role === 'system';
|
|
583
|
+
const conversation = hasSystem ? this.history.slice(1) : this.history;
|
|
584
|
+
const window = conversation.slice(-this.historyLimit);
|
|
585
|
+
return hasSystem ? [this.history[0], ...window] : window;
|
|
439
586
|
}
|
|
440
587
|
pushHistory(message) {
|
|
441
588
|
this.history.push(message);
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
this.history.splice(start,
|
|
589
|
+
const hasSystem = this.history[0]?.role === 'system';
|
|
590
|
+
const start = hasSystem ? 1 : 0;
|
|
591
|
+
const maxLength = this.historyLimit + 2 + start;
|
|
592
|
+
if (this.history.length > maxLength) {
|
|
593
|
+
this.history.splice(start, this.history.length - maxLength);
|
|
447
594
|
}
|
|
448
595
|
}
|
|
449
596
|
}
|
package/dist/orchestrator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,12 @@ export interface PlaybookEngineOptions {
|
|
|
17
17
|
warn: (msg: string, ...args: unknown[]) => void;
|
|
18
18
|
error: (msg: string, ...args: unknown[]) => void;
|
|
19
19
|
};
|
|
20
|
+
/**
|
|
21
|
+
* Called when a transition with clearHistory is executed. The engine does
|
|
22
|
+
* not own the conversation history, so the owner (typically an
|
|
23
|
+
* orchestrator) supplies the actual clearing behavior.
|
|
24
|
+
*/
|
|
25
|
+
onClearHistory?: () => void;
|
|
20
26
|
}
|
|
21
27
|
/**
|
|
22
28
|
* Event emitted during playbook execution
|
package/dist/playbook-engine.js
CHANGED
|
@@ -135,7 +135,7 @@ export class PlaybookEngine {
|
|
|
135
135
|
switch (condition.type) {
|
|
136
136
|
case 'tool_call':
|
|
137
137
|
return context.lastToolCalls?.some(tc => tc.name === condition.toolName) ?? false;
|
|
138
|
-
case 'intent':
|
|
138
|
+
case 'intent': {
|
|
139
139
|
// Intent detection would typically be done by the LLM or a classifier
|
|
140
140
|
// For now, check if the intent is in the conversation context
|
|
141
141
|
const detectedIntent = context.conversationContext.detectedIntent;
|
|
@@ -146,9 +146,11 @@ export class PlaybookEngine {
|
|
|
146
146
|
return detectedIntent === condition.intent && (confidence ?? 0) >= condition.confidence;
|
|
147
147
|
}
|
|
148
148
|
return detectedIntent === condition.intent;
|
|
149
|
-
|
|
149
|
+
}
|
|
150
|
+
case 'keyword': {
|
|
150
151
|
const message = context.lastAssistantMessage?.toLowerCase() ?? '';
|
|
151
152
|
return condition.keywords.some(kw => message.includes(kw.toLowerCase()));
|
|
153
|
+
}
|
|
152
154
|
case 'llm_decision':
|
|
153
155
|
// LLM decision is handled via the playbook_transition tool
|
|
154
156
|
// Check if the LLM called the transition tool
|
|
@@ -255,9 +257,11 @@ export class PlaybookEngine {
|
|
|
255
257
|
}
|
|
256
258
|
// Emit exit event
|
|
257
259
|
await this.emit({ type: 'stage_exit', stage: fromStage, nextStage: toStage });
|
|
258
|
-
// Clear history if requested
|
|
260
|
+
// Clear conversation history if requested. The accumulated
|
|
261
|
+
// conversationContext is intentionally preserved - it carries
|
|
262
|
+
// cross-stage state, not messages.
|
|
259
263
|
if (transition.action.clearHistory) {
|
|
260
|
-
this.
|
|
264
|
+
this.options.onClearHistory?.();
|
|
261
265
|
}
|
|
262
266
|
// Record transition in history
|
|
263
267
|
this.state.transitionHistory.push({
|