@livekit/agents 1.0.47 → 1.0.49
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/beta/index.cjs +29 -0
- package/dist/beta/index.cjs.map +1 -0
- package/dist/beta/index.d.cts +2 -0
- package/dist/beta/index.d.ts +2 -0
- package/dist/beta/index.d.ts.map +1 -0
- package/dist/beta/index.js +7 -0
- package/dist/beta/index.js.map +1 -0
- package/dist/beta/workflows/index.cjs +29 -0
- package/dist/beta/workflows/index.cjs.map +1 -0
- package/dist/beta/workflows/index.d.cts +2 -0
- package/dist/beta/workflows/index.d.ts +2 -0
- package/dist/beta/workflows/index.d.ts.map +1 -0
- package/dist/beta/workflows/index.js +7 -0
- package/dist/beta/workflows/index.js.map +1 -0
- package/dist/beta/workflows/task_group.cjs +162 -0
- package/dist/beta/workflows/task_group.cjs.map +1 -0
- package/dist/beta/workflows/task_group.d.cts +32 -0
- package/dist/beta/workflows/task_group.d.ts +32 -0
- package/dist/beta/workflows/task_group.d.ts.map +1 -0
- package/dist/beta/workflows/task_group.js +138 -0
- package/dist/beta/workflows/task_group.js.map +1 -0
- package/dist/cpu.cjs +189 -0
- package/dist/cpu.cjs.map +1 -0
- package/dist/cpu.d.cts +24 -0
- package/dist/cpu.d.ts +24 -0
- package/dist/cpu.d.ts.map +1 -0
- package/dist/cpu.js +152 -0
- package/dist/cpu.js.map +1 -0
- package/dist/cpu.test.cjs +227 -0
- package/dist/cpu.test.cjs.map +1 -0
- package/dist/cpu.test.js +204 -0
- package/dist/cpu.test.js.map +1 -0
- package/dist/index.cjs +3 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/inference/api_protos.d.cts +59 -59
- package/dist/inference/api_protos.d.ts +59 -59
- package/dist/inference/llm.cjs.map +1 -1
- package/dist/inference/llm.d.cts +1 -1
- package/dist/inference/llm.d.ts +1 -1
- package/dist/inference/llm.d.ts.map +1 -1
- package/dist/inference/llm.js.map +1 -1
- package/dist/inference/tts.cjs.map +1 -1
- package/dist/inference/tts.d.cts +6 -0
- package/dist/inference/tts.d.ts +6 -0
- package/dist/inference/tts.d.ts.map +1 -1
- package/dist/inference/tts.js.map +1 -1
- package/dist/llm/chat_context.cjs +89 -1
- package/dist/llm/chat_context.cjs.map +1 -1
- package/dist/llm/chat_context.d.cts +10 -1
- package/dist/llm/chat_context.d.ts +10 -1
- package/dist/llm/chat_context.d.ts.map +1 -1
- package/dist/llm/chat_context.js +89 -1
- package/dist/llm/chat_context.js.map +1 -1
- package/dist/llm/chat_context.test.cjs +43 -0
- package/dist/llm/chat_context.test.cjs.map +1 -1
- package/dist/llm/chat_context.test.js +43 -0
- package/dist/llm/chat_context.test.js.map +1 -1
- package/dist/llm/index.cjs +2 -0
- package/dist/llm/index.cjs.map +1 -1
- package/dist/llm/index.d.cts +1 -1
- package/dist/llm/index.d.ts +1 -1
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +3 -1
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/provider_format/index.d.cts +1 -1
- package/dist/llm/provider_format/index.d.ts +1 -1
- package/dist/llm/tool_context.cjs +7 -0
- package/dist/llm/tool_context.cjs.map +1 -1
- package/dist/llm/tool_context.d.cts +10 -2
- package/dist/llm/tool_context.d.ts +10 -2
- package/dist/llm/tool_context.d.ts.map +1 -1
- package/dist/llm/tool_context.js +6 -0
- package/dist/llm/tool_context.js.map +1 -1
- package/dist/utils.cjs +1 -0
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -0
- package/dist/utils.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/dist/voice/agent.cjs +9 -0
- package/dist/voice/agent.cjs.map +1 -1
- package/dist/voice/agent.d.cts +1 -0
- package/dist/voice/agent.d.ts +1 -0
- package/dist/voice/agent.d.ts.map +1 -1
- package/dist/voice/agent.js +9 -0
- package/dist/voice/agent.js.map +1 -1
- package/dist/voice/agent_activity.cjs +67 -16
- package/dist/voice/agent_activity.cjs.map +1 -1
- package/dist/voice/agent_activity.d.cts +7 -0
- package/dist/voice/agent_activity.d.ts +7 -0
- package/dist/voice/agent_activity.d.ts.map +1 -1
- package/dist/voice/agent_activity.js +68 -17
- package/dist/voice/agent_activity.js.map +1 -1
- package/dist/voice/agent_session.cjs +27 -1
- package/dist/voice/agent_session.cjs.map +1 -1
- package/dist/voice/agent_session.d.cts +6 -0
- package/dist/voice/agent_session.d.ts +6 -0
- package/dist/voice/agent_session.d.ts.map +1 -1
- package/dist/voice/agent_session.js +27 -1
- package/dist/voice/agent_session.js.map +1 -1
- package/dist/voice/room_io/room_io.cjs +11 -2
- package/dist/voice/room_io/room_io.cjs.map +1 -1
- package/dist/voice/room_io/room_io.d.ts.map +1 -1
- package/dist/voice/room_io/room_io.js +12 -3
- package/dist/voice/room_io/room_io.js.map +1 -1
- package/dist/voice/testing/fake_llm.cjs +127 -0
- package/dist/voice/testing/fake_llm.cjs.map +1 -0
- package/dist/voice/testing/fake_llm.d.cts +30 -0
- package/dist/voice/testing/fake_llm.d.ts +30 -0
- package/dist/voice/testing/fake_llm.d.ts.map +1 -0
- package/dist/voice/testing/fake_llm.js +103 -0
- package/dist/voice/testing/fake_llm.js.map +1 -0
- package/dist/voice/testing/index.cjs +3 -0
- package/dist/voice/testing/index.cjs.map +1 -1
- package/dist/voice/testing/index.d.cts +1 -0
- package/dist/voice/testing/index.d.ts +1 -0
- package/dist/voice/testing/index.d.ts.map +1 -1
- package/dist/voice/testing/index.js +2 -0
- package/dist/voice/testing/index.js.map +1 -1
- package/dist/worker.cjs +6 -29
- package/dist/worker.cjs.map +1 -1
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +6 -19
- package/dist/worker.js.map +1 -1
- package/package.json +1 -1
- package/src/beta/index.ts +9 -0
- package/src/beta/workflows/index.ts +9 -0
- package/src/beta/workflows/task_group.ts +194 -0
- package/src/cpu.test.ts +239 -0
- package/src/cpu.ts +173 -0
- package/src/index.ts +2 -1
- package/src/inference/llm.ts +2 -0
- package/src/inference/tts.ts +8 -1
- package/src/llm/chat_context.test.ts +48 -0
- package/src/llm/chat_context.ts +123 -0
- package/src/llm/index.ts +1 -0
- package/src/llm/tool_context.ts +14 -0
- package/src/utils.ts +5 -0
- package/src/voice/agent.ts +11 -0
- package/src/voice/agent_activity.ts +102 -16
- package/src/voice/agent_session.ts +33 -2
- package/src/voice/room_io/room_io.ts +14 -3
- package/src/voice/testing/fake_llm.ts +138 -0
- package/src/voice/testing/index.ts +2 -0
- package/src/worker.ts +34 -50
|
@@ -14,6 +14,11 @@ import { type AgentSession, type TurnDetectionMode } from './agent_session.js';
|
|
|
14
14
|
import { type EndOfTurnInfo, type PreemptiveGenerationInfo, type RecognitionHooks } from './audio_recognition.js';
|
|
15
15
|
import { SpeechHandle } from './speech_handle.js';
|
|
16
16
|
export declare const agentActivityStorage: AsyncLocalStorage<AgentActivity>;
|
|
17
|
+
export declare const onEnterStorage: AsyncLocalStorage<OnEnterData>;
|
|
18
|
+
interface OnEnterData {
|
|
19
|
+
session: AgentSession;
|
|
20
|
+
agent: Agent;
|
|
21
|
+
}
|
|
17
22
|
export declare class AgentActivity implements RecognitionHooks {
|
|
18
23
|
agent: Agent;
|
|
19
24
|
agentSession: AgentSession;
|
|
@@ -63,6 +68,7 @@ export declare class AgentActivity implements RecognitionHooks {
|
|
|
63
68
|
get turnDetection(): TurnDetectionMode | undefined;
|
|
64
69
|
get toolCtx(): ToolContext;
|
|
65
70
|
updateChatCtx(chatCtx: ChatContext): Promise<void>;
|
|
71
|
+
updateTools(tools: ToolContext): Promise<void>;
|
|
66
72
|
updateOptions({ toolChoice }: {
|
|
67
73
|
toolChoice?: ToolChoice | null;
|
|
68
74
|
}): void;
|
|
@@ -129,4 +135,5 @@ export declare class AgentActivity implements RecognitionHooks {
|
|
|
129
135
|
close(): Promise<void>;
|
|
130
136
|
private _closeSessionResources;
|
|
131
137
|
}
|
|
138
|
+
export {};
|
|
132
139
|
//# sourceMappingURL=agent_activity.d.ts.map
|
|
@@ -14,6 +14,11 @@ import { type AgentSession, type TurnDetectionMode } from './agent_session.js';
|
|
|
14
14
|
import { type EndOfTurnInfo, type PreemptiveGenerationInfo, type RecognitionHooks } from './audio_recognition.js';
|
|
15
15
|
import { SpeechHandle } from './speech_handle.js';
|
|
16
16
|
export declare const agentActivityStorage: AsyncLocalStorage<AgentActivity>;
|
|
17
|
+
export declare const onEnterStorage: AsyncLocalStorage<OnEnterData>;
|
|
18
|
+
interface OnEnterData {
|
|
19
|
+
session: AgentSession;
|
|
20
|
+
agent: Agent;
|
|
21
|
+
}
|
|
17
22
|
export declare class AgentActivity implements RecognitionHooks {
|
|
18
23
|
agent: Agent;
|
|
19
24
|
agentSession: AgentSession;
|
|
@@ -63,6 +68,7 @@ export declare class AgentActivity implements RecognitionHooks {
|
|
|
63
68
|
get turnDetection(): TurnDetectionMode | undefined;
|
|
64
69
|
get toolCtx(): ToolContext;
|
|
65
70
|
updateChatCtx(chatCtx: ChatContext): Promise<void>;
|
|
71
|
+
updateTools(tools: ToolContext): Promise<void>;
|
|
66
72
|
updateOptions({ toolChoice }: {
|
|
67
73
|
toolChoice?: ToolChoice | null;
|
|
68
74
|
}): void;
|
|
@@ -129,4 +135,5 @@ export declare class AgentActivity implements RecognitionHooks {
|
|
|
129
135
|
close(): Promise<void>;
|
|
130
136
|
private _closeSessionResources;
|
|
131
137
|
}
|
|
138
|
+
export {};
|
|
132
139
|
//# sourceMappingURL=agent_activity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent_activity.d.ts","sourceRoot":"","sources":["../../src/voice/agent_activity.ts"],"names":[],"mappings":";;AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"agent_activity.d.ts","sourceRoot":"","sources":["../../src/voice/agent_activity.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,12 @@ import { Mutex } from "@livekit/mutex";
|
|
|
2
2
|
import { ROOT_CONTEXT, context as otelContext, trace } from "@opentelemetry/api";
|
|
3
3
|
import { Heap } from "heap-js";
|
|
4
4
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
5
|
-
import { ReadableStream } from "node:stream/web";
|
|
5
|
+
import { ReadableStream, TransformStream } from "node:stream/web";
|
|
6
6
|
import { ChatMessage } from "../llm/chat_context.js";
|
|
7
7
|
import {
|
|
8
8
|
LLM,
|
|
9
|
-
RealtimeModel
|
|
9
|
+
RealtimeModel,
|
|
10
|
+
ToolFlag
|
|
10
11
|
} from "../llm/index.js";
|
|
11
12
|
import { isSameToolChoice, isSameToolContext } from "../llm/tool_context.js";
|
|
12
13
|
import { log } from "../log.js";
|
|
@@ -48,6 +49,7 @@ import {
|
|
|
48
49
|
import { SpeechHandle } from "./speech_handle.js";
|
|
49
50
|
import { setParticipantSpanAttributes } from "./utils.js";
|
|
50
51
|
const agentActivityStorage = new AsyncLocalStorage();
|
|
52
|
+
const onEnterStorage = new AsyncLocalStorage();
|
|
51
53
|
class AgentActivity {
|
|
52
54
|
agent;
|
|
53
55
|
agentSession;
|
|
@@ -247,11 +249,14 @@ class AgentActivity {
|
|
|
247
249
|
this._resumeSchedulingTask();
|
|
248
250
|
if (runOnEnter) {
|
|
249
251
|
this._onEnterTask = this.createSpeechTask({
|
|
250
|
-
taskFn: () =>
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
252
|
+
taskFn: () => onEnterStorage.run(
|
|
253
|
+
{ session: this.agentSession, agent: this.agent },
|
|
254
|
+
() => tracer.startActiveSpan(async () => this.agent.onEnter(), {
|
|
255
|
+
name: "on_enter",
|
|
256
|
+
context: trace.setSpan(ROOT_CONTEXT, startSpan),
|
|
257
|
+
attributes: { [traceTypes.ATTR_AGENT_LABEL]: this.agent.id }
|
|
258
|
+
})
|
|
259
|
+
),
|
|
255
260
|
inlineTask: true,
|
|
256
261
|
name: "AgentActivity_onEnter"
|
|
257
262
|
});
|
|
@@ -317,6 +322,16 @@ class AgentActivity {
|
|
|
317
322
|
});
|
|
318
323
|
}
|
|
319
324
|
}
|
|
325
|
+
// TODO: Add when AgentConfigUpdate is ported to ChatContext.
|
|
326
|
+
async updateTools(tools) {
|
|
327
|
+
this.agent._tools = { ...tools };
|
|
328
|
+
if (this.realtimeSession) {
|
|
329
|
+
await this.realtimeSession.updateTools(tools);
|
|
330
|
+
}
|
|
331
|
+
if (this.llm instanceof LLM) {
|
|
332
|
+
await this.updateChatCtx(this.agent._chatCtx.copy({ toolCtx: tools }));
|
|
333
|
+
}
|
|
334
|
+
}
|
|
320
335
|
updateOptions({ toolChoice }) {
|
|
321
336
|
if (toolChoice !== void 0) {
|
|
322
337
|
this.toolChoice = toolChoice;
|
|
@@ -328,13 +343,27 @@ class AgentActivity {
|
|
|
328
343
|
attachAudioInput(audioStream) {
|
|
329
344
|
void this.audioStream.close();
|
|
330
345
|
this.audioStream = new MultiInputStream();
|
|
346
|
+
const aecWarmupAudioFilter = new TransformStream({
|
|
347
|
+
transform: (frame, controller) => {
|
|
348
|
+
const shouldDiscardForAecWarmup = this.agentSession.agentState === "speaking" && this.agentSession._aecWarmupRemaining > 0;
|
|
349
|
+
if (!shouldDiscardForAecWarmup) {
|
|
350
|
+
controller.enqueue(frame);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
});
|
|
331
354
|
this.audioStreamId = this.audioStream.addInputStream(audioStream);
|
|
332
|
-
|
|
333
|
-
|
|
355
|
+
if (this.realtimeSession && this.audioRecognition) {
|
|
356
|
+
const [realtimeAudioStream, recognitionAudioStream] = this.audioStream.stream.pipeThrough(aecWarmupAudioFilter).tee();
|
|
334
357
|
this.realtimeSession.setInputAudioStream(realtimeAudioStream);
|
|
335
|
-
}
|
|
336
|
-
if (this.audioRecognition) {
|
|
337
358
|
this.audioRecognition.setInputAudioStream(recognitionAudioStream);
|
|
359
|
+
} else if (this.realtimeSession) {
|
|
360
|
+
this.realtimeSession.setInputAudioStream(
|
|
361
|
+
this.audioStream.stream.pipeThrough(aecWarmupAudioFilter)
|
|
362
|
+
);
|
|
363
|
+
} else if (this.audioRecognition) {
|
|
364
|
+
this.audioRecognition.setInputAudioStream(
|
|
365
|
+
this.audioStream.stream.pipeThrough(aecWarmupAudioFilter)
|
|
366
|
+
);
|
|
338
367
|
}
|
|
339
368
|
}
|
|
340
369
|
detachAudioInput() {
|
|
@@ -530,6 +559,9 @@ class AgentActivity {
|
|
|
530
559
|
}
|
|
531
560
|
interruptByAudioActivity() {
|
|
532
561
|
var _a, _b;
|
|
562
|
+
if (this.agentSession._aecWarmupRemaining > 0) {
|
|
563
|
+
return;
|
|
564
|
+
}
|
|
533
565
|
if (this.llm instanceof RealtimeModel && this.llm.capabilities.turnDetection) {
|
|
534
566
|
return;
|
|
535
567
|
}
|
|
@@ -808,11 +840,18 @@ class AgentActivity {
|
|
|
808
840
|
instructions = `${this.agent.instructions}
|
|
809
841
|
${instructions}`;
|
|
810
842
|
}
|
|
843
|
+
const onEnterData = onEnterStorage.getStore();
|
|
844
|
+
const shouldFilterTools = (onEnterData == null ? void 0 : onEnterData.agent) === this.agent && (onEnterData == null ? void 0 : onEnterData.session) === this.agentSession;
|
|
845
|
+
const tools = shouldFilterTools ? Object.fromEntries(
|
|
846
|
+
Object.entries(this.agent.toolCtx).filter(
|
|
847
|
+
([, fnTool]) => !(fnTool.flags & ToolFlag.IGNORE_ON_ENTER)
|
|
848
|
+
)
|
|
849
|
+
) : this.agent.toolCtx;
|
|
811
850
|
const task = this.createSpeechTask({
|
|
812
851
|
taskFn: (abortController) => this.pipelineReplyTask(
|
|
813
852
|
handle,
|
|
814
853
|
chatCtx ?? this.agent.chatCtx,
|
|
815
|
-
|
|
854
|
+
tools,
|
|
816
855
|
{
|
|
817
856
|
toolChoice: toOaiToolChoice(toolChoice !== void 0 ? toolChoice : this.toolChoice)
|
|
818
857
|
},
|
|
@@ -841,7 +880,16 @@ ${instructions}`;
|
|
|
841
880
|
speech.interrupt(force);
|
|
842
881
|
}
|
|
843
882
|
(_a = this.realtimeSession) == null ? void 0 : _a.interrupt();
|
|
844
|
-
if (
|
|
883
|
+
if (force) {
|
|
884
|
+
for (const task of this.speechTasks) {
|
|
885
|
+
task.cancel();
|
|
886
|
+
}
|
|
887
|
+
if (currentSpeech && !currentSpeech.done()) {
|
|
888
|
+
currentSpeech._markDone();
|
|
889
|
+
}
|
|
890
|
+
this.speechQueue.clear();
|
|
891
|
+
future.resolve();
|
|
892
|
+
} else if (currentSpeech === void 0) {
|
|
845
893
|
future.resolve();
|
|
846
894
|
} else {
|
|
847
895
|
currentSpeech.addDoneCallback(() => {
|
|
@@ -1209,9 +1257,7 @@ ${instructions}`;
|
|
|
1209
1257
|
audioOutput.clearBuffer();
|
|
1210
1258
|
}
|
|
1211
1259
|
replyAbortController.abort();
|
|
1212
|
-
await
|
|
1213
|
-
tasks.map((task) => task.cancelAndWait(AgentActivity.REPLY_TASK_CANCEL_TIMEOUT))
|
|
1214
|
-
);
|
|
1260
|
+
await cancelAndWait(tasks, AgentActivity.REPLY_TASK_CANCEL_TIMEOUT);
|
|
1215
1261
|
let forwardedText = (textOut == null ? void 0 : textOut.text) || "";
|
|
1216
1262
|
if (audioOutput) {
|
|
1217
1263
|
const playbackEv = await audioOutput.waitForPlayout();
|
|
@@ -1841,6 +1887,10 @@ ${instructions}`;
|
|
|
1841
1887
|
const unlock = await this.lock.lock();
|
|
1842
1888
|
try {
|
|
1843
1889
|
this.cancelPreemptiveGeneration();
|
|
1890
|
+
await cancelAndWait(Array.from(this.speechTasks), AgentActivity.REPLY_TASK_CANCEL_TIMEOUT);
|
|
1891
|
+
if (this._currentSpeech && !this._currentSpeech.done()) {
|
|
1892
|
+
this._currentSpeech._markDone();
|
|
1893
|
+
}
|
|
1844
1894
|
await this._closeSessionResources();
|
|
1845
1895
|
if (this._mainTask) {
|
|
1846
1896
|
await this._mainTask.cancelAndWait();
|
|
@@ -1891,6 +1941,7 @@ function toOaiToolChoice(toolChoice) {
|
|
|
1891
1941
|
}
|
|
1892
1942
|
export {
|
|
1893
1943
|
AgentActivity,
|
|
1894
|
-
agentActivityStorage
|
|
1944
|
+
agentActivityStorage,
|
|
1945
|
+
onEnterStorage
|
|
1895
1946
|
};
|
|
1896
1947
|
//# sourceMappingURL=agent_activity.js.map
|