@livekit/agents 1.0.24 → 1.0.27
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/inference/llm.cjs +1 -2
- package/dist/inference/llm.cjs.map +1 -1
- package/dist/inference/llm.d.ts.map +1 -1
- package/dist/inference/llm.js +1 -2
- package/dist/inference/llm.js.map +1 -1
- package/dist/inference/stt.cjs +1 -1
- package/dist/inference/stt.cjs.map +1 -1
- package/dist/inference/stt.d.ts.map +1 -1
- package/dist/inference/stt.js +1 -1
- package/dist/inference/stt.js.map +1 -1
- package/dist/inference/tts.cjs +4 -4
- package/dist/inference/tts.cjs.map +1 -1
- package/dist/inference/tts.d.cts +0 -1
- package/dist/inference/tts.d.ts +0 -1
- package/dist/inference/tts.d.ts.map +1 -1
- package/dist/inference/tts.js +4 -4
- package/dist/inference/tts.js.map +1 -1
- package/dist/ipc/job_proc_lazy_main.cjs +1 -1
- package/dist/ipc/job_proc_lazy_main.cjs.map +1 -1
- package/dist/ipc/job_proc_lazy_main.js +1 -1
- package/dist/ipc/job_proc_lazy_main.js.map +1 -1
- package/dist/job.cjs +29 -2
- package/dist/job.cjs.map +1 -1
- package/dist/job.d.cts +6 -0
- package/dist/job.d.ts +6 -0
- package/dist/job.d.ts.map +1 -1
- package/dist/job.js +19 -2
- package/dist/job.js.map +1 -1
- package/dist/llm/llm.cjs +2 -1
- package/dist/llm/llm.cjs.map +1 -1
- package/dist/llm/llm.d.cts +1 -1
- package/dist/llm/llm.d.ts +1 -1
- package/dist/llm/llm.d.ts.map +1 -1
- package/dist/llm/llm.js +2 -1
- package/dist/llm/llm.js.map +1 -1
- package/dist/stream/deferred_stream.cjs +12 -4
- package/dist/stream/deferred_stream.cjs.map +1 -1
- package/dist/stream/deferred_stream.d.cts +6 -1
- package/dist/stream/deferred_stream.d.ts +6 -1
- package/dist/stream/deferred_stream.d.ts.map +1 -1
- package/dist/stream/deferred_stream.js +12 -4
- package/dist/stream/deferred_stream.js.map +1 -1
- package/dist/stream/deferred_stream.test.cjs +2 -2
- package/dist/stream/deferred_stream.test.cjs.map +1 -1
- package/dist/stream/deferred_stream.test.js +2 -2
- package/dist/stream/deferred_stream.test.js.map +1 -1
- package/dist/stt/stream_adapter.cjs +15 -8
- package/dist/stt/stream_adapter.cjs.map +1 -1
- package/dist/stt/stream_adapter.d.cts +7 -3
- package/dist/stt/stream_adapter.d.ts +7 -3
- package/dist/stt/stream_adapter.d.ts.map +1 -1
- package/dist/stt/stream_adapter.js +15 -8
- package/dist/stt/stream_adapter.js.map +1 -1
- package/dist/stt/stt.cjs +8 -3
- package/dist/stt/stt.cjs.map +1 -1
- package/dist/stt/stt.d.cts +9 -3
- package/dist/stt/stt.d.ts +9 -3
- package/dist/stt/stt.d.ts.map +1 -1
- package/dist/stt/stt.js +9 -4
- package/dist/stt/stt.js.map +1 -1
- package/dist/telemetry/traces.cjs +23 -2
- package/dist/telemetry/traces.cjs.map +1 -1
- package/dist/telemetry/traces.d.ts.map +1 -1
- package/dist/telemetry/traces.js +23 -2
- package/dist/telemetry/traces.js.map +1 -1
- package/dist/tts/stream_adapter.cjs +10 -7
- package/dist/tts/stream_adapter.cjs.map +1 -1
- package/dist/tts/stream_adapter.d.cts +6 -3
- package/dist/tts/stream_adapter.d.ts +6 -3
- package/dist/tts/stream_adapter.d.ts.map +1 -1
- package/dist/tts/stream_adapter.js +10 -7
- package/dist/tts/stream_adapter.js.map +1 -1
- package/dist/tts/tts.cjs +27 -16
- package/dist/tts/tts.cjs.map +1 -1
- package/dist/tts/tts.d.cts +12 -5
- package/dist/tts/tts.d.ts +12 -5
- package/dist/tts/tts.d.ts.map +1 -1
- package/dist/tts/tts.js +28 -17
- package/dist/tts/tts.js.map +1 -1
- package/dist/types.cjs +21 -32
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +41 -10
- package/dist/types.d.ts +41 -10
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +18 -30
- package/dist/types.js.map +1 -1
- package/dist/voice/agent.cjs +54 -19
- package/dist/voice/agent.cjs.map +1 -1
- package/dist/voice/agent.d.ts.map +1 -1
- package/dist/voice/agent.js +54 -19
- package/dist/voice/agent.js.map +1 -1
- package/dist/voice/agent_activity.cjs +0 -3
- package/dist/voice/agent_activity.cjs.map +1 -1
- package/dist/voice/agent_activity.d.ts.map +1 -1
- package/dist/voice/agent_activity.js +0 -3
- package/dist/voice/agent_activity.js.map +1 -1
- package/dist/voice/agent_session.cjs +107 -27
- package/dist/voice/agent_session.cjs.map +1 -1
- package/dist/voice/agent_session.d.cts +16 -2
- package/dist/voice/agent_session.d.ts +16 -2
- package/dist/voice/agent_session.d.ts.map +1 -1
- package/dist/voice/agent_session.js +110 -27
- package/dist/voice/agent_session.js.map +1 -1
- package/dist/voice/events.cjs.map +1 -1
- package/dist/voice/events.d.cts +4 -4
- package/dist/voice/events.d.ts +4 -4
- package/dist/voice/events.d.ts.map +1 -1
- package/dist/voice/events.js.map +1 -1
- package/dist/voice/generation.cjs +6 -7
- package/dist/voice/generation.cjs.map +1 -1
- package/dist/voice/generation.d.ts.map +1 -1
- package/dist/voice/generation.js +7 -8
- package/dist/voice/generation.js.map +1 -1
- package/dist/voice/io.cjs +16 -0
- package/dist/voice/io.cjs.map +1 -1
- package/dist/voice/io.d.cts +8 -0
- package/dist/voice/io.d.ts +8 -0
- package/dist/voice/io.d.ts.map +1 -1
- package/dist/voice/io.js +16 -0
- package/dist/voice/io.js.map +1 -1
- package/dist/voice/recorder_io/index.cjs +23 -0
- package/dist/voice/recorder_io/index.cjs.map +1 -0
- package/dist/voice/recorder_io/index.d.cts +2 -0
- package/dist/voice/recorder_io/index.d.ts +2 -0
- package/dist/voice/recorder_io/index.d.ts.map +1 -0
- package/dist/voice/recorder_io/index.js +2 -0
- package/dist/voice/recorder_io/index.js.map +1 -0
- package/dist/voice/recorder_io/recorder_io.cjs +542 -0
- package/dist/voice/recorder_io/recorder_io.cjs.map +1 -0
- package/dist/voice/recorder_io/recorder_io.d.cts +100 -0
- package/dist/voice/recorder_io/recorder_io.d.ts +100 -0
- package/dist/voice/recorder_io/recorder_io.d.ts.map +1 -0
- package/dist/voice/recorder_io/recorder_io.js +508 -0
- package/dist/voice/recorder_io/recorder_io.js.map +1 -0
- package/dist/voice/report.cjs +7 -2
- package/dist/voice/report.cjs.map +1 -1
- package/dist/voice/report.d.cts +11 -1
- package/dist/voice/report.d.ts +11 -1
- package/dist/voice/report.d.ts.map +1 -1
- package/dist/voice/report.js +7 -2
- package/dist/voice/report.js.map +1 -1
- package/dist/voice/room_io/_input.cjs +2 -1
- package/dist/voice/room_io/_input.cjs.map +1 -1
- package/dist/voice/room_io/_input.d.ts.map +1 -1
- package/dist/voice/room_io/_input.js +2 -1
- package/dist/voice/room_io/_input.js.map +1 -1
- package/dist/voice/room_io/_output.cjs +8 -7
- package/dist/voice/room_io/_output.cjs.map +1 -1
- package/dist/voice/room_io/_output.d.cts +2 -1
- package/dist/voice/room_io/_output.d.ts +2 -1
- package/dist/voice/room_io/_output.d.ts.map +1 -1
- package/dist/voice/room_io/_output.js +8 -7
- package/dist/voice/room_io/_output.js.map +1 -1
- package/dist/worker.cjs +4 -3
- package/dist/worker.cjs.map +1 -1
- package/dist/worker.js +4 -3
- package/dist/worker.js.map +1 -1
- package/package.json +1 -1
- package/src/inference/llm.ts +0 -1
- package/src/inference/stt.ts +1 -2
- package/src/inference/tts.ts +5 -4
- package/src/ipc/job_proc_lazy_main.ts +1 -1
- package/src/job.ts +21 -2
- package/src/llm/llm.ts +2 -2
- package/src/stream/deferred_stream.test.ts +3 -3
- package/src/stream/deferred_stream.ts +22 -5
- package/src/stt/stream_adapter.ts +18 -8
- package/src/stt/stt.ts +19 -6
- package/src/telemetry/traces.ts +25 -3
- package/src/tts/stream_adapter.ts +15 -7
- package/src/tts/tts.ts +46 -21
- package/src/types.ts +57 -33
- package/src/voice/agent.ts +59 -19
- package/src/voice/agent_activity.ts +0 -3
- package/src/voice/agent_session.ts +142 -35
- package/src/voice/events.ts +6 -3
- package/src/voice/generation.ts +10 -8
- package/src/voice/io.ts +19 -0
- package/src/voice/recorder_io/index.ts +4 -0
- package/src/voice/recorder_io/recorder_io.ts +690 -0
- package/src/voice/report.ts +20 -3
- package/src/voice/room_io/_input.ts +2 -1
- package/src/voice/room_io/_output.ts +10 -7
- package/src/worker.ts +1 -1
package/src/voice/report.ts
CHANGED
|
@@ -17,6 +17,12 @@ export interface SessionReport {
|
|
|
17
17
|
startedAt: number;
|
|
18
18
|
/** Timestamp when the session report was created (milliseconds), typically at the end of the session */
|
|
19
19
|
timestamp: number;
|
|
20
|
+
/** Path to the audio recording file (if recording was enabled) */
|
|
21
|
+
audioRecordingPath?: string;
|
|
22
|
+
/** Timestamp when the audio recording started (milliseconds) */
|
|
23
|
+
audioRecordingStartedAt?: number;
|
|
24
|
+
/** Duration of the session in milliseconds */
|
|
25
|
+
duration?: number;
|
|
20
26
|
}
|
|
21
27
|
|
|
22
28
|
export interface SessionReportOptions {
|
|
@@ -26,14 +32,21 @@ export interface SessionReportOptions {
|
|
|
26
32
|
options: VoiceOptions;
|
|
27
33
|
events: AgentEvent[];
|
|
28
34
|
chatHistory: ChatContext;
|
|
29
|
-
|
|
35
|
+
enableRecording?: boolean;
|
|
30
36
|
/** Timestamp when the session started (milliseconds) */
|
|
31
37
|
startedAt?: number;
|
|
32
38
|
/** Timestamp when the session report was created (milliseconds) */
|
|
33
39
|
timestamp?: number;
|
|
40
|
+
/** Path to the audio recording file (if recording was enabled) */
|
|
41
|
+
audioRecordingPath?: string;
|
|
42
|
+
/** Timestamp when the audio recording started (milliseconds) */
|
|
43
|
+
audioRecordingStartedAt?: number;
|
|
34
44
|
}
|
|
35
45
|
|
|
36
46
|
export function createSessionReport(opts: SessionReportOptions): SessionReport {
|
|
47
|
+
const timestamp = opts.timestamp ?? Date.now();
|
|
48
|
+
const audioRecordingStartedAt = opts.audioRecordingStartedAt;
|
|
49
|
+
|
|
37
50
|
return {
|
|
38
51
|
jobId: opts.jobId,
|
|
39
52
|
roomId: opts.roomId,
|
|
@@ -41,9 +54,13 @@ export function createSessionReport(opts: SessionReportOptions): SessionReport {
|
|
|
41
54
|
options: opts.options,
|
|
42
55
|
events: opts.events,
|
|
43
56
|
chatHistory: opts.chatHistory,
|
|
44
|
-
enableRecording: opts.
|
|
57
|
+
enableRecording: opts.enableRecording ?? false,
|
|
45
58
|
startedAt: opts.startedAt ?? Date.now(),
|
|
46
|
-
timestamp
|
|
59
|
+
timestamp,
|
|
60
|
+
audioRecordingPath: opts.audioRecordingPath,
|
|
61
|
+
audioRecordingStartedAt,
|
|
62
|
+
duration:
|
|
63
|
+
audioRecordingStartedAt !== undefined ? timestamp - audioRecordingStartedAt : undefined,
|
|
47
64
|
};
|
|
48
65
|
}
|
|
49
66
|
|
|
@@ -156,6 +156,7 @@ export class ParticipantAudioInputStream extends AudioInput {
|
|
|
156
156
|
this.room.off(RoomEvent.TrackSubscribed, this.onTrackSubscribed);
|
|
157
157
|
this.room.off(RoomEvent.TrackUnpublished, this.onTrackUnpublished);
|
|
158
158
|
this.closeStream();
|
|
159
|
-
|
|
159
|
+
// Ignore errors - stream may be locked by RecorderIO or already cancelled
|
|
160
|
+
await this.deferredStream.stream.cancel().catch(() => {});
|
|
160
161
|
}
|
|
161
162
|
}
|
|
@@ -321,7 +321,9 @@ export class ParticipantAudioOutput extends AudioOutput {
|
|
|
321
321
|
private audioSource: AudioSource;
|
|
322
322
|
private publication?: LocalTrackPublication;
|
|
323
323
|
private flushTask?: Task<void>;
|
|
324
|
-
|
|
324
|
+
|
|
325
|
+
/** Duration of audio pushed to the source, in seconds */
|
|
326
|
+
private pushedDuration: number = 0;
|
|
325
327
|
private startedFuture: Future<void> = new Future();
|
|
326
328
|
private interruptedFuture: Future<void> = new Future();
|
|
327
329
|
|
|
@@ -346,7 +348,7 @@ export class ParticipantAudioOutput extends AudioOutput {
|
|
|
346
348
|
super.captureFrame(frame);
|
|
347
349
|
|
|
348
350
|
// TODO(AJS-102): use frame.durationMs once available in rtc-node
|
|
349
|
-
this.
|
|
351
|
+
this.pushedDuration += frame.samplesPerChannel / frame.sampleRate;
|
|
350
352
|
await this.audioSource.captureFrame(frame);
|
|
351
353
|
}
|
|
352
354
|
|
|
@@ -369,15 +371,16 @@ export class ParticipantAudioOutput extends AudioOutput {
|
|
|
369
371
|
this.interruptedFuture.await.then(() => true),
|
|
370
372
|
]);
|
|
371
373
|
|
|
372
|
-
let pushedDuration = this.
|
|
374
|
+
let pushedDuration = this.pushedDuration;
|
|
373
375
|
|
|
374
376
|
if (interrupted) {
|
|
375
377
|
// Calculate actual played duration accounting for queued audio
|
|
376
|
-
|
|
378
|
+
// Note: queuedDuration is in milliseconds, pushedDuration is in seconds
|
|
379
|
+
pushedDuration = Math.max(this.pushedDuration - this.audioSource.queuedDuration / 1000, 0);
|
|
377
380
|
this.audioSource.clearQueue();
|
|
378
381
|
}
|
|
379
382
|
|
|
380
|
-
this.
|
|
383
|
+
this.pushedDuration = 0;
|
|
381
384
|
this.interruptedFuture = new Future();
|
|
382
385
|
this.onPlaybackFinished({
|
|
383
386
|
playbackPosition: pushedDuration,
|
|
@@ -391,7 +394,7 @@ export class ParticipantAudioOutput extends AudioOutput {
|
|
|
391
394
|
flush(): void {
|
|
392
395
|
super.flush();
|
|
393
396
|
|
|
394
|
-
if (!this.
|
|
397
|
+
if (!this.pushedDuration) {
|
|
395
398
|
return;
|
|
396
399
|
}
|
|
397
400
|
|
|
@@ -404,7 +407,7 @@ export class ParticipantAudioOutput extends AudioOutput {
|
|
|
404
407
|
}
|
|
405
408
|
|
|
406
409
|
clearBuffer(): void {
|
|
407
|
-
if (!this.
|
|
410
|
+
if (!this.pushedDuration) {
|
|
408
411
|
return;
|
|
409
412
|
}
|
|
410
413
|
|
package/src/worker.ts
CHANGED
|
@@ -729,7 +729,7 @@ export class AgentServer {
|
|
|
729
729
|
|
|
730
730
|
const req = new JobRequest(msg.job!, onReject, onAccept);
|
|
731
731
|
this.#logger
|
|
732
|
-
.child({
|
|
732
|
+
.child({ jobId: msg.job?.id, resuming: msg.resuming, agentName: this.#opts.agentName })
|
|
733
733
|
.info('received job request');
|
|
734
734
|
|
|
735
735
|
const jobRequestTask = async () => {
|