@livekit/agents 0.3.4 → 0.4.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +40 -0
- package/dist/audio.js +17 -30
- package/dist/audio.js.map +1 -1
- package/dist/cli.js +3 -14
- package/dist/cli.js.map +1 -1
- package/dist/http_server.d.ts +1 -1
- package/dist/http_server.js +5 -9
- package/dist/http_server.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -2
- package/dist/index.js.map +1 -1
- package/dist/ipc/job_executor.js +3 -5
- package/dist/ipc/job_executor.js.map +1 -1
- package/dist/ipc/job_main.d.ts +1 -1
- package/dist/ipc/proc_job_executor.js +66 -80
- package/dist/ipc/proc_job_executor.js.map +1 -1
- package/dist/ipc/proc_pool.d.ts +3 -3
- package/dist/ipc/proc_pool.d.ts.map +1 -1
- package/dist/ipc/proc_pool.js +16 -11
- package/dist/ipc/proc_pool.js.map +1 -1
- package/dist/job.js +56 -73
- package/dist/job.js.map +1 -1
- package/dist/llm/chat_context.d.ts +66 -0
- package/dist/llm/chat_context.d.ts.map +1 -0
- package/dist/llm/chat_context.js +93 -0
- package/dist/llm/chat_context.js.map +1 -0
- package/dist/llm/function_context.d.ts +19 -1
- package/dist/llm/function_context.d.ts.map +1 -1
- package/dist/llm/function_context.js +54 -18
- package/dist/llm/function_context.js.map +1 -1
- package/dist/llm/function_context.test.d.ts +2 -0
- package/dist/llm/function_context.test.d.ts.map +1 -0
- package/dist/llm/function_context.test.js +218 -0
- package/dist/llm/function_context.test.js.map +1 -0
- package/dist/llm/index.d.ts +3 -2
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +3 -2
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/llm.d.ts +53 -0
- package/dist/llm/llm.d.ts.map +1 -0
- package/dist/llm/llm.js +45 -0
- package/dist/llm/llm.js.map +1 -0
- package/dist/multimodal/agent_playout.d.ts +1 -1
- package/dist/multimodal/agent_playout.js +116 -153
- package/dist/multimodal/agent_playout.js.map +1 -1
- package/dist/multimodal/multimodal_agent.d.ts +4 -3
- package/dist/multimodal/multimodal_agent.d.ts.map +1 -1
- package/dist/multimodal/multimodal_agent.js +214 -237
- package/dist/multimodal/multimodal_agent.js.map +1 -1
- package/dist/pipeline/agent_output.d.ts +30 -0
- package/dist/pipeline/agent_output.d.ts.map +1 -0
- package/dist/pipeline/agent_output.js +155 -0
- package/dist/pipeline/agent_output.js.map +1 -0
- package/dist/pipeline/agent_playout.d.ts +38 -0
- package/dist/pipeline/agent_playout.d.ts.map +1 -0
- package/dist/pipeline/agent_playout.js +142 -0
- package/dist/pipeline/agent_playout.js.map +1 -0
- package/dist/pipeline/human_input.d.ts +28 -0
- package/dist/pipeline/human_input.d.ts.map +1 -0
- package/dist/pipeline/human_input.js +134 -0
- package/dist/pipeline/human_input.js.map +1 -0
- package/dist/pipeline/index.d.ts +2 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +5 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/pipeline_agent.d.ts +134 -0
- package/dist/pipeline/pipeline_agent.d.ts.map +1 -0
- package/dist/pipeline/pipeline_agent.js +661 -0
- package/dist/pipeline/pipeline_agent.js.map +1 -0
- package/dist/pipeline/speech_handle.d.ts +27 -0
- package/dist/pipeline/speech_handle.d.ts.map +1 -0
- package/dist/pipeline/speech_handle.js +102 -0
- package/dist/pipeline/speech_handle.js.map +1 -0
- package/dist/plugin.js +7 -20
- package/dist/plugin.js.map +1 -1
- package/dist/stt/index.d.ts +1 -2
- package/dist/stt/index.d.ts.map +1 -1
- package/dist/stt/index.js +1 -2
- package/dist/stt/index.js.map +1 -1
- package/dist/stt/stt.d.ts +62 -24
- package/dist/stt/stt.d.ts.map +1 -1
- package/dist/stt/stt.js +77 -27
- package/dist/stt/stt.js.map +1 -1
- package/dist/tokenize/basic/basic.d.ts +16 -0
- package/dist/tokenize/basic/basic.d.ts.map +1 -0
- package/dist/tokenize/basic/basic.js +50 -0
- package/dist/tokenize/basic/basic.js.map +1 -0
- package/dist/tokenize/basic/hyphenator.d.ts +17 -0
- package/dist/tokenize/basic/hyphenator.d.ts.map +1 -0
- package/dist/tokenize/basic/hyphenator.js +420 -0
- package/dist/tokenize/basic/hyphenator.js.map +1 -0
- package/dist/tokenize/basic/index.d.ts +2 -0
- package/dist/tokenize/basic/index.d.ts.map +1 -0
- package/dist/tokenize/basic/index.js +5 -0
- package/dist/tokenize/basic/index.js.map +1 -0
- package/dist/tokenize/basic/paragraph.d.ts +5 -0
- package/dist/tokenize/basic/paragraph.d.ts.map +1 -0
- package/dist/tokenize/basic/paragraph.js +38 -0
- package/dist/tokenize/basic/paragraph.js.map +1 -0
- package/dist/tokenize/basic/sentence.d.ts +5 -0
- package/dist/tokenize/basic/sentence.d.ts.map +1 -0
- package/dist/tokenize/basic/sentence.js +60 -0
- package/dist/tokenize/basic/sentence.js.map +1 -0
- package/dist/tokenize/basic/word.d.ts +5 -0
- package/dist/tokenize/basic/word.d.ts.map +1 -0
- package/dist/tokenize/basic/word.js +23 -0
- package/dist/tokenize/basic/word.js.map +1 -0
- package/dist/tokenize/index.d.ts +5 -0
- package/dist/tokenize/index.d.ts.map +1 -0
- package/dist/tokenize/index.js +8 -0
- package/dist/tokenize/index.js.map +1 -0
- package/dist/tokenize/token_stream.d.ts +36 -0
- package/dist/tokenize/token_stream.d.ts.map +1 -0
- package/dist/tokenize/token_stream.js +136 -0
- package/dist/tokenize/token_stream.js.map +1 -0
- package/dist/tokenize/tokenizer.d.ts +55 -0
- package/dist/tokenize/tokenizer.d.ts.map +1 -0
- package/dist/tokenize/tokenizer.js +117 -0
- package/dist/tokenize/tokenizer.js.map +1 -0
- package/dist/transcription.js +78 -89
- package/dist/transcription.js.map +1 -1
- package/dist/tts/index.d.ts +1 -3
- package/dist/tts/index.d.ts.map +1 -1
- package/dist/tts/index.js +1 -3
- package/dist/tts/index.js.map +1 -1
- package/dist/tts/tts.d.ts +66 -37
- package/dist/tts/tts.d.ts.map +1 -1
- package/dist/tts/tts.js +79 -74
- package/dist/tts/tts.js.map +1 -1
- package/dist/utils.d.ts +21 -6
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +120 -76
- package/dist/utils.js.map +1 -1
- package/dist/vad.d.ts +43 -39
- package/dist/vad.d.ts.map +1 -1
- package/dist/vad.js +51 -4
- package/dist/vad.js.map +1 -1
- package/dist/worker.d.ts +1 -1
- package/dist/worker.js +257 -247
- package/dist/worker.js.map +1 -1
- package/package.json +4 -3
- package/src/index.ts +16 -2
- package/src/ipc/proc_pool.ts +4 -4
- package/src/llm/chat_context.ts +147 -0
- package/src/llm/function_context.test.ts +248 -0
- package/src/llm/function_context.ts +77 -18
- package/src/llm/index.ts +21 -2
- package/src/llm/llm.ts +102 -0
- package/src/multimodal/multimodal_agent.ts +19 -6
- package/src/pipeline/agent_output.ts +185 -0
- package/src/pipeline/agent_playout.ts +187 -0
- package/src/pipeline/human_input.ts +166 -0
- package/src/pipeline/index.ts +15 -0
- package/src/pipeline/pipeline_agent.ts +917 -0
- package/src/pipeline/speech_handle.ts +136 -0
- package/src/stt/index.ts +8 -2
- package/src/stt/stt.ts +98 -31
- package/src/tokenize/basic/basic.ts +73 -0
- package/src/tokenize/basic/hyphenator.ts +436 -0
- package/src/tokenize/basic/index.ts +5 -0
- package/src/tokenize/basic/paragraph.ts +43 -0
- package/src/tokenize/basic/sentence.ts +69 -0
- package/src/tokenize/basic/word.ts +27 -0
- package/src/tokenize/index.ts +16 -0
- package/src/tokenize/token_stream.ts +163 -0
- package/src/tokenize/tokenizer.ts +152 -0
- package/src/tts/index.ts +1 -20
- package/src/tts/tts.ts +110 -57
- package/src/utils.ts +95 -25
- package/src/vad.ts +86 -45
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/stt/stream_adapter.d.ts +0 -19
- package/dist/stt/stream_adapter.d.ts.map +0 -1
- package/dist/stt/stream_adapter.js +0 -96
- package/dist/stt/stream_adapter.js.map +0 -1
- package/dist/tokenize.d.ts +0 -15
- package/dist/tokenize.d.ts.map +0 -1
- package/dist/tokenize.js +0 -12
- package/dist/tokenize.js.map +0 -1
- package/dist/tts/stream_adapter.d.ts +0 -19
- package/dist/tts/stream_adapter.d.ts.map +0 -1
- package/dist/tts/stream_adapter.js +0 -111
- package/dist/tts/stream_adapter.js.map +0 -1
- package/src/stt/stream_adapter.ts +0 -104
- package/src/tokenize.ts +0 -22
- package/src/tts/stream_adapter.ts +0 -93
package/dist/ipc/proc_pool.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Mutex } from '@livekit/mutex';
|
|
1
|
+
import { MultiMutex, Mutex } from '@livekit/mutex';
|
|
2
2
|
import type { RunningJobInfo } from '../job.js';
|
|
3
3
|
import { Queue } from '../utils.js';
|
|
4
4
|
import type { JobExecutor } from './job_executor.js';
|
|
@@ -12,10 +12,10 @@ export declare class ProcPool {
|
|
|
12
12
|
closed: boolean;
|
|
13
13
|
controller: AbortController;
|
|
14
14
|
initMutex: Mutex;
|
|
15
|
-
procMutex:
|
|
15
|
+
procMutex: MultiMutex;
|
|
16
16
|
procUnlock?: () => void;
|
|
17
17
|
warmedProcQueue: Queue<JobExecutor>;
|
|
18
|
-
constructor(agent: string,
|
|
18
|
+
constructor(agent: string, numIdleProcesses: number, initializeTimeout: number, closeTimeout: number);
|
|
19
19
|
get processes(): JobExecutor[];
|
|
20
20
|
getByJobId(id: string): JobExecutor | null;
|
|
21
21
|
launchJob(info: RunningJobInfo): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proc_pool.d.ts","sourceRoot":"","sources":["../../src/ipc/proc_pool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"proc_pool.d.ts","sourceRoot":"","sources":["../../src/ipc/proc_pool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,qBAAa,QAAQ;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,WAAW,EAAE,CAAM;IAC9B,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAM;IAC5B,OAAO,UAAS;IAChB,MAAM,UAAS;IACf,UAAU,kBAAyB;IACnC,SAAS,QAAe;IACxB,SAAS,EAAE,UAAU,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,eAAe,qBAA4B;gBAGzC,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,MAAM;IAQtB,IAAI,SAAS,IAAI,WAAW,EAAE,CAE7B;IAED,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAIpC,SAAS,CAAC,IAAI,EAAE,cAAc;IAS9B,aAAa;IA6BnB,KAAK;IASC,GAAG,CAAC,MAAM,EAAE,WAAW;IASvB,KAAK;CAUZ"}
|
package/dist/ipc/proc_pool.js
CHANGED
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2024 LiveKit, Inc.
|
|
2
2
|
//
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
import { Mutex } from '@livekit/mutex';
|
|
4
|
+
import { MultiMutex, Mutex } from '@livekit/mutex';
|
|
5
5
|
import { Queue } from '../utils.js';
|
|
6
6
|
import { ProcJobExecutor } from './proc_job_executor.js';
|
|
7
7
|
export class ProcPool {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
agent;
|
|
9
|
+
initializeTimeout;
|
|
10
|
+
closeTimeout;
|
|
11
|
+
executors = [];
|
|
12
|
+
tasks = [];
|
|
13
|
+
started = false;
|
|
14
|
+
closed = false;
|
|
15
|
+
controller = new AbortController();
|
|
16
|
+
initMutex = new Mutex();
|
|
17
|
+
procMutex;
|
|
18
|
+
procUnlock;
|
|
19
|
+
warmedProcQueue = new Queue();
|
|
20
|
+
constructor(agent, numIdleProcesses, initializeTimeout, closeTimeout) {
|
|
16
21
|
this.agent = agent;
|
|
17
|
-
this.procMutex = new
|
|
22
|
+
this.procMutex = new MultiMutex(numIdleProcesses);
|
|
18
23
|
this.initializeTimeout = initializeTimeout;
|
|
19
24
|
this.closeTimeout = closeTimeout;
|
|
20
25
|
}
|
|
@@ -45,7 +50,7 @@ export class ProcPool {
|
|
|
45
50
|
await proc.initialize();
|
|
46
51
|
await this.warmedProcQueue.put(proc);
|
|
47
52
|
}
|
|
48
|
-
catch
|
|
53
|
+
catch {
|
|
49
54
|
if (this.procUnlock) {
|
|
50
55
|
this.procUnlock();
|
|
51
56
|
this.procUnlock = undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proc_pool.js","sourceRoot":"","sources":["../../src/ipc/proc_pool.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,sCAAsC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"proc_pool.js","sourceRoot":"","sources":["../../src/ipc/proc_pool.ts"],"names":[],"mappings":"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"}
|
package/dist/job.js
CHANGED
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
-
};
|
|
7
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
-
};
|
|
12
|
-
var _JobContext_proc, _JobContext_info, _JobContext_room, _JobContext_onConnect, _JobContext_onShutdown, _JobContext_participantEntrypoints, _JobContext_participantTasks, _JobContext_logger, _JobProcess_pid, _JobRequest_job, _JobRequest_onReject, _JobRequest_onAccept;
|
|
13
1
|
import { ParticipantKind, RoomEvent, TrackKind } from '@livekit/rtc-node';
|
|
14
2
|
import { log } from './log.js';
|
|
15
3
|
/** Which tracks, if any, should the agent automatically subscribe to? */
|
|
@@ -29,49 +17,49 @@ export class FunctionExistsError extends Error {
|
|
|
29
17
|
}
|
|
30
18
|
/** The job and environment context as seen by the agent, accessible by the entrypoint function. */
|
|
31
19
|
export class JobContext {
|
|
20
|
+
#proc;
|
|
21
|
+
#info;
|
|
22
|
+
#room;
|
|
23
|
+
#onConnect;
|
|
24
|
+
#onShutdown;
|
|
25
|
+
/** @internal */
|
|
26
|
+
shutdownCallbacks = [];
|
|
27
|
+
#participantEntrypoints = [];
|
|
28
|
+
#participantTasks = {};
|
|
29
|
+
#logger;
|
|
32
30
|
constructor(proc, info, room, onConnect, onShutdown) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
/** @internal */
|
|
39
|
-
this.shutdownCallbacks = [];
|
|
40
|
-
_JobContext_participantEntrypoints.set(this, []);
|
|
41
|
-
_JobContext_participantTasks.set(this, {});
|
|
42
|
-
_JobContext_logger.set(this, void 0);
|
|
43
|
-
__classPrivateFieldSet(this, _JobContext_proc, proc, "f");
|
|
44
|
-
__classPrivateFieldSet(this, _JobContext_info, info, "f");
|
|
45
|
-
__classPrivateFieldSet(this, _JobContext_room, room, "f");
|
|
46
|
-
__classPrivateFieldSet(this, _JobContext_onConnect, onConnect, "f");
|
|
47
|
-
__classPrivateFieldSet(this, _JobContext_onShutdown, onShutdown, "f");
|
|
31
|
+
this.#proc = proc;
|
|
32
|
+
this.#info = info;
|
|
33
|
+
this.#room = room;
|
|
34
|
+
this.#onConnect = onConnect;
|
|
35
|
+
this.#onShutdown = onShutdown;
|
|
48
36
|
this.onParticipantConnected = this.onParticipantConnected.bind(this);
|
|
49
|
-
|
|
50
|
-
|
|
37
|
+
this.#room.on(RoomEvent.ParticipantConnected, this.onParticipantConnected);
|
|
38
|
+
this.#logger = log().child({ info: this.#info });
|
|
51
39
|
}
|
|
52
40
|
get proc() {
|
|
53
|
-
return
|
|
41
|
+
return this.#proc;
|
|
54
42
|
}
|
|
55
43
|
get job() {
|
|
56
|
-
return
|
|
44
|
+
return this.#info.job;
|
|
57
45
|
}
|
|
58
46
|
/** @returns The room the agent was called into */
|
|
59
47
|
get room() {
|
|
60
|
-
return
|
|
48
|
+
return this.#room;
|
|
61
49
|
}
|
|
62
50
|
/** @returns The agent's participant if connected to the room, otherwise `undefined` */
|
|
63
51
|
get agent() {
|
|
64
|
-
return
|
|
52
|
+
return this.#room.localParticipant;
|
|
65
53
|
}
|
|
66
54
|
/** Adds a promise to be awaited when {@link JobContext.shutdown | shutdown} is called. */
|
|
67
55
|
addShutdownCallback(callback) {
|
|
68
56
|
this.shutdownCallbacks.push(callback);
|
|
69
57
|
}
|
|
70
58
|
async waitForParticipant(identity) {
|
|
71
|
-
if (!
|
|
59
|
+
if (!this.#room.isConnected) {
|
|
72
60
|
throw new Error('room is not connected');
|
|
73
61
|
}
|
|
74
|
-
for (const p of
|
|
62
|
+
for (const p of this.#room.remoteParticipants.values()) {
|
|
75
63
|
if ((!identity || p.identity === identity) && p.info.kind != ParticipantKind.AGENT) {
|
|
76
64
|
return p;
|
|
77
65
|
}
|
|
@@ -89,11 +77,11 @@ export class JobContext {
|
|
|
89
77
|
reject(new Error('Room disconnected while waiting for participant'));
|
|
90
78
|
};
|
|
91
79
|
const clearHandlers = () => {
|
|
92
|
-
|
|
93
|
-
|
|
80
|
+
this.#room.off(RoomEvent.ParticipantConnected, onParticipantConnected);
|
|
81
|
+
this.#room.off(RoomEvent.Disconnected, onDisconnected);
|
|
94
82
|
};
|
|
95
|
-
|
|
96
|
-
|
|
83
|
+
this.#room.on(RoomEvent.ParticipantConnected, onParticipantConnected);
|
|
84
|
+
this.#room.on(RoomEvent.Disconnected, onDisconnected);
|
|
97
85
|
});
|
|
98
86
|
}
|
|
99
87
|
/**
|
|
@@ -113,11 +101,11 @@ export class JobContext {
|
|
|
113
101
|
rtcConfig,
|
|
114
102
|
dynacast: false,
|
|
115
103
|
};
|
|
116
|
-
await
|
|
117
|
-
|
|
118
|
-
|
|
104
|
+
await this.#room.connect(this.#info.url, this.#info.token, opts);
|
|
105
|
+
this.#onConnect();
|
|
106
|
+
this.#room.remoteParticipants.forEach(this.onParticipantConnected);
|
|
119
107
|
if ([AutoSubscribe.AUDIO_ONLY, AutoSubscribe.VIDEO_ONLY].includes(autoSubscribe)) {
|
|
120
|
-
|
|
108
|
+
this.#room.remoteParticipants.forEach((p) => {
|
|
121
109
|
p.trackPublications.forEach((pub) => {
|
|
122
110
|
if ((autoSubscribe === AutoSubscribe.AUDIO_ONLY && pub.kind === TrackKind.KIND_AUDIO) ||
|
|
123
111
|
(autoSubscribe === AutoSubscribe.VIDEO_ONLY && pub.kind === TrackKind.KIND_VIDEO)) {
|
|
@@ -133,18 +121,18 @@ export class JobContext {
|
|
|
133
121
|
* @param reason - Optional reason for shutdown
|
|
134
122
|
*/
|
|
135
123
|
shutdown(reason = '') {
|
|
136
|
-
|
|
124
|
+
this.#onShutdown(reason);
|
|
137
125
|
}
|
|
138
126
|
/** @internal */
|
|
139
127
|
onParticipantConnected(p) {
|
|
140
|
-
for (const callback of
|
|
141
|
-
if (p.identity in
|
|
142
|
-
|
|
143
|
-
|
|
128
|
+
for (const callback of this.#participantEntrypoints) {
|
|
129
|
+
if (p.identity in this.#participantTasks &&
|
|
130
|
+
this.#participantTasks[p.identity].callback == callback) {
|
|
131
|
+
this.#logger.warn('a participant has joined before a prior prticipant task matching the same identity has finished:', p.identity);
|
|
144
132
|
}
|
|
145
133
|
const result = callback(this, p);
|
|
146
|
-
result.finally(() => delete
|
|
147
|
-
|
|
134
|
+
result.finally(() => delete this.#participantTasks[p.identity]);
|
|
135
|
+
this.#participantTasks[p.identity] = { callback, result };
|
|
148
136
|
}
|
|
149
137
|
}
|
|
150
138
|
/**
|
|
@@ -153,23 +141,19 @@ export class JobContext {
|
|
|
153
141
|
* @throws {@link FunctionExistsError} if an entrypoint already exists
|
|
154
142
|
*/
|
|
155
143
|
addParticipantEntrypoint(callback) {
|
|
156
|
-
if (
|
|
144
|
+
if (this.#participantEntrypoints.includes(callback)) {
|
|
157
145
|
throw new FunctionExistsError('entrypoints cannot be added more than once');
|
|
158
146
|
}
|
|
159
|
-
|
|
147
|
+
this.#participantEntrypoints.push(callback);
|
|
160
148
|
}
|
|
161
149
|
}
|
|
162
|
-
_JobContext_proc = new WeakMap(), _JobContext_info = new WeakMap(), _JobContext_room = new WeakMap(), _JobContext_onConnect = new WeakMap(), _JobContext_onShutdown = new WeakMap(), _JobContext_participantEntrypoints = new WeakMap(), _JobContext_participantTasks = new WeakMap(), _JobContext_logger = new WeakMap();
|
|
163
150
|
export class JobProcess {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
this.userData = {};
|
|
167
|
-
}
|
|
151
|
+
#pid = process.pid;
|
|
152
|
+
userData = {};
|
|
168
153
|
get pid() {
|
|
169
|
-
return
|
|
154
|
+
return this.#pid;
|
|
170
155
|
}
|
|
171
156
|
}
|
|
172
|
-
_JobProcess_pid = new WeakMap();
|
|
173
157
|
/**
|
|
174
158
|
* A request sent by the server to spawn a new agent job.
|
|
175
159
|
*
|
|
@@ -179,45 +163,44 @@ _JobProcess_pid = new WeakMap();
|
|
|
179
163
|
* requests should fill idle processes and which should be outright rejected.
|
|
180
164
|
*/
|
|
181
165
|
export class JobRequest {
|
|
166
|
+
#job;
|
|
167
|
+
#onReject;
|
|
168
|
+
#onAccept;
|
|
182
169
|
/** @internal */
|
|
183
170
|
constructor(job, onReject, onAccept) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
__classPrivateFieldSet(this, _JobRequest_job, job, "f");
|
|
188
|
-
__classPrivateFieldSet(this, _JobRequest_onReject, onReject, "f");
|
|
189
|
-
__classPrivateFieldSet(this, _JobRequest_onAccept, onAccept, "f");
|
|
171
|
+
this.#job = job;
|
|
172
|
+
this.#onReject = onReject;
|
|
173
|
+
this.#onAccept = onAccept;
|
|
190
174
|
}
|
|
191
175
|
/** @returns The ID of the job, set by the LiveKit server */
|
|
192
176
|
get id() {
|
|
193
|
-
return
|
|
177
|
+
return this.#job.id;
|
|
194
178
|
}
|
|
195
179
|
/** @see {@link https://www.npmjs.com/package/@livekit/protocol | @livekit/protocol} */
|
|
196
180
|
get job() {
|
|
197
|
-
return
|
|
181
|
+
return this.#job;
|
|
198
182
|
}
|
|
199
183
|
/** @see {@link https://www.npmjs.com/package/@livekit/protocol | @livekit/protocol} */
|
|
200
184
|
get room() {
|
|
201
|
-
return
|
|
185
|
+
return this.#job.room;
|
|
202
186
|
}
|
|
203
187
|
/** @see {@link https://www.npmjs.com/package/@livekit/protocol | @livekit/protocol} */
|
|
204
188
|
get publisher() {
|
|
205
|
-
return
|
|
189
|
+
return this.#job.participant;
|
|
206
190
|
}
|
|
207
191
|
/** @returns The agent's name, as set in {@link WorkerOptions} */
|
|
208
192
|
get agentName() {
|
|
209
|
-
return
|
|
193
|
+
return this.#job.agentName;
|
|
210
194
|
}
|
|
211
195
|
/** Rejects the job. */
|
|
212
196
|
async reject() {
|
|
213
|
-
await
|
|
197
|
+
await this.#onReject();
|
|
214
198
|
}
|
|
215
199
|
/** Accepts the job, launching it on an idle child process. */
|
|
216
200
|
async accept(name = '', identity = '', metadata = '') {
|
|
217
201
|
if (identity === '')
|
|
218
202
|
identity = 'agent-' + this.id;
|
|
219
|
-
|
|
203
|
+
this.#onAccept({ name, identity, metadata });
|
|
220
204
|
}
|
|
221
205
|
}
|
|
222
|
-
_JobRequest_job = new WeakMap(), _JobRequest_onReject = new WeakMap(), _JobRequest_onAccept = new WeakMap();
|
|
223
206
|
//# sourceMappingURL=job.js.map
|
package/dist/job.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job.js","sourceRoot":"","sources":["../src/job.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"job.js","sourceRoot":"","sources":["../src/job.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { AudioFrame, VideoFrame } from '@livekit/rtc-node';
|
|
2
|
+
import type { CallableFunctionResult, FunctionCallInfo } from './function_context.js';
|
|
3
|
+
export declare enum ChatRole {
|
|
4
|
+
SYSTEM = 0,
|
|
5
|
+
USER = 1,
|
|
6
|
+
ASSISTANT = 2,
|
|
7
|
+
TOOL = 3
|
|
8
|
+
}
|
|
9
|
+
export interface ChatImage {
|
|
10
|
+
image: string | VideoFrame;
|
|
11
|
+
inferenceWidth?: number;
|
|
12
|
+
inferenceHeight?: number;
|
|
13
|
+
/**
|
|
14
|
+
* @internal
|
|
15
|
+
* Used by LLM implementations to store a processed version of the image for later use.
|
|
16
|
+
*/
|
|
17
|
+
cache: {
|
|
18
|
+
[id: string | number | symbol]: any;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface ChatAudio {
|
|
22
|
+
frame: AudioFrame | AudioFrame[];
|
|
23
|
+
}
|
|
24
|
+
export type ChatContent = string | ChatImage | ChatAudio;
|
|
25
|
+
export declare class ChatMessage {
|
|
26
|
+
readonly role: ChatRole;
|
|
27
|
+
readonly id?: string;
|
|
28
|
+
readonly name?: string;
|
|
29
|
+
readonly content?: ChatContent | ChatContent[];
|
|
30
|
+
readonly toolCalls?: FunctionCallInfo[];
|
|
31
|
+
readonly toolCallId?: string;
|
|
32
|
+
readonly toolException?: Error;
|
|
33
|
+
/** @internal */
|
|
34
|
+
constructor({ role, id, name, content, toolCalls, toolCallId, toolException, }: {
|
|
35
|
+
role: ChatRole;
|
|
36
|
+
id?: string;
|
|
37
|
+
name?: string;
|
|
38
|
+
content?: ChatContent | ChatContent[];
|
|
39
|
+
toolCalls?: FunctionCallInfo[];
|
|
40
|
+
toolCallId?: string;
|
|
41
|
+
toolException?: Error;
|
|
42
|
+
});
|
|
43
|
+
static createToolFromFunctionResult(func: CallableFunctionResult): ChatMessage;
|
|
44
|
+
static createToolCalls(toolCalls: FunctionCallInfo[], text?: string): ChatMessage;
|
|
45
|
+
static create(options: Partial<{
|
|
46
|
+
text?: string;
|
|
47
|
+
images: ChatImage[];
|
|
48
|
+
role: ChatRole;
|
|
49
|
+
}>): ChatMessage;
|
|
50
|
+
/** Returns a structured clone of this message. */
|
|
51
|
+
copy(): ChatMessage;
|
|
52
|
+
}
|
|
53
|
+
export declare class ChatContext {
|
|
54
|
+
messages: ChatMessage[];
|
|
55
|
+
metadata: {
|
|
56
|
+
[id: string]: any;
|
|
57
|
+
};
|
|
58
|
+
append(msg: {
|
|
59
|
+
text?: string;
|
|
60
|
+
images?: ChatImage[];
|
|
61
|
+
role: ChatRole;
|
|
62
|
+
}): ChatContext;
|
|
63
|
+
/** Returns a structured clone of this context. */
|
|
64
|
+
copy(): ChatContext;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=chat_context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat_context.d.ts","sourceRoot":"","sources":["../../src/llm/chat_context.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEtF,oBAAY,QAAQ;IAClB,MAAM,IAAA;IACN,IAAI,IAAA;IACJ,SAAS,IAAA;IACT,IAAI,IAAA;CACL;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,KAAK,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CAChD;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;CAClC;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAQzD,qBAAa,WAAW;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC;IAE/B,gBAAgB;gBACJ,EACV,IAAI,EACJ,EAAE,EACF,IAAI,EACJ,OAAO,EACP,SAAS,EACT,UAAU,EACV,aAAa,GACd,EAAE;QACD,IAAI,EAAE,QAAQ,CAAC;QACf,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;QACtC,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;QAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,KAAK,CAAC;KACvB;IAUD,MAAM,CAAC,4BAA4B,CAAC,IAAI,EAAE,sBAAsB,GAAG,WAAW;IAc9E,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,gBAAgB,EAAE,EAAE,IAAI,SAAK;IAQ/D,MAAM,CAAC,MAAM,CACX,OAAO,EAAE,OAAO,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,SAAS,EAAE,CAAC;QACpB,IAAI,EAAE,QAAQ,CAAC;KAChB,CAAC,GACD,WAAW;IAgBd,kDAAkD;IAClD,IAAI,IAAI,WAAW;CAWpB;AAED,qBAAa,WAAW;IACtB,QAAQ,EAAE,WAAW,EAAE,CAAM;IAC7B,QAAQ,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAM;IAErC,MAAM,CAAC,GAAG,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG,WAAW;IAKjF,kDAAkD;IAClD,IAAI,IAAI,WAAW;CAMpB"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
export var ChatRole;
|
|
2
|
+
(function (ChatRole) {
|
|
3
|
+
ChatRole[ChatRole["SYSTEM"] = 0] = "SYSTEM";
|
|
4
|
+
ChatRole[ChatRole["USER"] = 1] = "USER";
|
|
5
|
+
ChatRole[ChatRole["ASSISTANT"] = 2] = "ASSISTANT";
|
|
6
|
+
ChatRole[ChatRole["TOOL"] = 3] = "TOOL";
|
|
7
|
+
})(ChatRole || (ChatRole = {}));
|
|
8
|
+
const defaultCreateChatMessage = {
|
|
9
|
+
text: '',
|
|
10
|
+
images: [],
|
|
11
|
+
role: ChatRole.SYSTEM,
|
|
12
|
+
};
|
|
13
|
+
export class ChatMessage {
|
|
14
|
+
role;
|
|
15
|
+
id;
|
|
16
|
+
name;
|
|
17
|
+
content;
|
|
18
|
+
toolCalls;
|
|
19
|
+
toolCallId;
|
|
20
|
+
toolException;
|
|
21
|
+
/** @internal */
|
|
22
|
+
constructor({ role, id, name, content, toolCalls, toolCallId, toolException, }) {
|
|
23
|
+
this.role = role;
|
|
24
|
+
this.id = id;
|
|
25
|
+
this.name = name;
|
|
26
|
+
this.content = content;
|
|
27
|
+
this.toolCalls = toolCalls;
|
|
28
|
+
this.toolCallId = toolCallId;
|
|
29
|
+
this.toolException = toolException;
|
|
30
|
+
}
|
|
31
|
+
static createToolFromFunctionResult(func) {
|
|
32
|
+
if (!func.result && !func.error) {
|
|
33
|
+
throw new TypeError('CallableFunctionResult must include result or error');
|
|
34
|
+
}
|
|
35
|
+
return new ChatMessage({
|
|
36
|
+
role: ChatRole.TOOL,
|
|
37
|
+
name: func.name,
|
|
38
|
+
content: func.result || `Error: ${func.error}`,
|
|
39
|
+
toolCallId: func.toolCallId,
|
|
40
|
+
toolException: func.error,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
static createToolCalls(toolCalls, text = '') {
|
|
44
|
+
return new ChatMessage({
|
|
45
|
+
role: ChatRole.ASSISTANT,
|
|
46
|
+
toolCalls,
|
|
47
|
+
content: text,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
static create(options) {
|
|
51
|
+
const { text, images, role } = { ...defaultCreateChatMessage, ...options };
|
|
52
|
+
if (!images.length) {
|
|
53
|
+
return new ChatMessage({
|
|
54
|
+
role,
|
|
55
|
+
content: text,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
return new ChatMessage({
|
|
60
|
+
role,
|
|
61
|
+
content: [...(text ? [text] : []), ...images],
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** Returns a structured clone of this message. */
|
|
66
|
+
copy() {
|
|
67
|
+
return new ChatMessage({
|
|
68
|
+
role: this.role,
|
|
69
|
+
id: this.id,
|
|
70
|
+
name: this.name,
|
|
71
|
+
content: this.content,
|
|
72
|
+
toolCalls: this.toolCalls,
|
|
73
|
+
toolCallId: this.toolCallId,
|
|
74
|
+
toolException: this.toolException,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export class ChatContext {
|
|
79
|
+
messages = [];
|
|
80
|
+
metadata = {};
|
|
81
|
+
append(msg) {
|
|
82
|
+
this.messages.push(ChatMessage.create(msg));
|
|
83
|
+
return this;
|
|
84
|
+
}
|
|
85
|
+
/** Returns a structured clone of this context. */
|
|
86
|
+
copy() {
|
|
87
|
+
const ctx = new ChatContext();
|
|
88
|
+
ctx.messages.push(...this.messages.map((msg) => msg.copy()));
|
|
89
|
+
ctx.metadata = structuredClone(this.metadata);
|
|
90
|
+
return ctx;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=chat_context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat_context.js","sourceRoot":"","sources":["../../src/llm/chat_context.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,22 @@ export interface CallableFunction<P extends z.ZodTypeAny = any, R = any> {
|
|
|
7
7
|
parameters: P;
|
|
8
8
|
execute: (args: inferParameters<P>) => PromiseLike<R>;
|
|
9
9
|
}
|
|
10
|
+
/** A function that has been called but is not yet running */
|
|
11
|
+
export interface FunctionCallInfo<P extends z.ZodTypeAny = any, R = any> {
|
|
12
|
+
name: string;
|
|
13
|
+
func: CallableFunction<P, R>;
|
|
14
|
+
toolCallId: string;
|
|
15
|
+
rawParams: string;
|
|
16
|
+
params: inferParameters<P>;
|
|
17
|
+
task?: PromiseLike<CallableFunctionResult>;
|
|
18
|
+
}
|
|
19
|
+
/** The result of a ran FunctionCallInfo. */
|
|
20
|
+
export interface CallableFunctionResult {
|
|
21
|
+
name: string;
|
|
22
|
+
toolCallId: string;
|
|
23
|
+
result?: any;
|
|
24
|
+
error?: any;
|
|
25
|
+
}
|
|
10
26
|
/** An object containing callable functions and their names */
|
|
11
27
|
export type FunctionContext = {
|
|
12
28
|
[name: string]: CallableFunction;
|
|
@@ -15,6 +31,8 @@ export type FunctionContext = {
|
|
|
15
31
|
export declare const oaiParams: (p: z.AnyZodObject) => {
|
|
16
32
|
type: "object";
|
|
17
33
|
properties: Record<string, any>;
|
|
18
|
-
|
|
34
|
+
required: string[];
|
|
19
35
|
};
|
|
36
|
+
/** @internal */
|
|
37
|
+
export declare const oaiBuildFunctionInfo: (fncCtx: FunctionContext, toolCallId: string, fncName: string, rawArgs: string) => FunctionCallInfo;
|
|
20
38
|
//# sourceMappingURL=function_context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function_context.d.ts","sourceRoot":"","sources":["../../src/llm/function_context.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,yEAAyE;AACzE,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEjE,uDAAuD;AACvD,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC;CACvD;AAED,8DAA8D;AAC9D,MAAM,MAAM,eAAe,GAAG;IAC5B,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;CAClC,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,SAAS;;;;
|
|
1
|
+
{"version":3,"file":"function_context.d.ts","sourceRoot":"","sources":["../../src/llm/function_context.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,yEAAyE;AACzE,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEjE,uDAAuD;AACvD,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC;CACvD;AAED,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;CAC5C;AAED,4CAA4C;AAC5C,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,KAAK,CAAC,EAAE,GAAG,CAAC;CACb;AAED,8DAA8D;AAC9D,MAAM,MAAM,eAAe,GAAG;IAC5B,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;CAClC,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,SAAS;;;;CAuDrB,CAAC;AAEF,gBAAgB;AAChB,eAAO,MAAM,oBAAoB,WACvB,eAAe,cACX,MAAM,WACT,MAAM,WACN,MAAM,KACd,gBAYF,CAAC"}
|