@ariaflowagents/livekit-plugin 0.9.3 → 0.9.5

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/index.d.ts CHANGED
@@ -9,6 +9,7 @@ export { TransportEvent } from './types.js';
9
9
  export { TransportError, TransportDisconnectedError, TransportProtocolError, AudioConfigError } from './errors.js';
10
10
  export { AriaRuntimeLLMAdapter, AriaRuntimeLLMStream, type AriaRuntimeLLMAdapterOptions, type AriaRuntimeLike } from './llm/AriaRuntimeLLMAdapter.js';
11
11
  export { LiveKitRealtimeAdapter, type LiveKitRealtimeAdapterConfig, type LiveKitRealtimeSessionLike, } from './llm/LiveKitRealtimeAdapter.js';
12
+ export { AriaFlowGeminiRealtimeModel, AriaFlowGeminiRealtimeSession, type AriaFlowGeminiRealtimeModelOptions, } from './llm/AriaFlowGeminiRealtimeModel.js';
12
13
  export { FillerCoordinator } from './filler/FillerCoordinator.js';
13
14
  export { createAriaVoicePipeline, type AriaVoicePipelineOptions, type AriaVoicePipeline } from './session/createAriaVoicePipeline.js';
14
15
  export { createAriaFlowSession, type CreateAriaFlowSessionOptions } from './session/createAriaFlowSession.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACxG,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKnH,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,KAAK,4BAA4B,EAAE,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtJ,OAAO,EACL,sBAAsB,EACtB,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,GAChC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,OAAO,EAAE,uBAAuB,EAAE,KAAK,wBAAwB,EAAE,KAAK,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACtI,OAAO,EAAE,qBAAqB,EAAE,KAAK,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAC9G,OAAO,EAAE,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAC3G,OAAO,EAAE,sBAAsB,EAAE,KAAK,6BAA6B,EAAE,KAAK,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAGvI,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACjF,YAAY,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGhE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1E,cAAc,sBAAsB,CAAC;AAGrC,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,KAAK,UAAU,EACf,KAAK,gBAAgB,GACtB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACxG,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKnH,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,KAAK,4BAA4B,EAAE,KAAK,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtJ,OAAO,EACL,sBAAsB,EACtB,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,GAChC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,EAC7B,KAAK,kCAAkC,GACxC,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,OAAO,EAAE,uBAAuB,EAAE,KAAK,wBAAwB,EAAE,KAAK,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACtI,OAAO,EAAE,qBAAqB,EAAE,KAAK,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAC9G,OAAO,EAAE,oBAAoB,EAAE,KAAK,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAC3G,OAAO,EAAE,sBAAsB,EAAE,KAAK,6BAA6B,EAAE,KAAK,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAGvI,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACjF,YAAY,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGhE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1E,cAAc,sBAAsB,CAAC;AAGrC,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,KAAK,UAAU,EACf,KAAK,gBAAgB,GACtB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC"}
package/dist/index.js CHANGED
@@ -10,6 +10,7 @@ export { TransportError, TransportDisconnectedError, TransportProtocolError, Aud
10
10
  // AriaFlow runtime adapter
11
11
  export { AriaRuntimeLLMAdapter, AriaRuntimeLLMStream } from './llm/AriaRuntimeLLMAdapter.js';
12
12
  export { LiveKitRealtimeAdapter, } from './llm/LiveKitRealtimeAdapter.js';
13
+ export { AriaFlowGeminiRealtimeModel, AriaFlowGeminiRealtimeSession, } from './llm/AriaFlowGeminiRealtimeModel.js';
13
14
  export { FillerCoordinator } from './filler/FillerCoordinator.js';
14
15
  // Session factories and pipeline
15
16
  export { createAriaVoicePipeline } from './session/createAriaVoicePipeline.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGxG,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEnH,wBAAwB;AAExB,2BAA2B;AAC3B,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAA2D,MAAM,gCAAgC,CAAC;AACtJ,OAAO,EACL,sBAAsB,GAGvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,iCAAiC;AACjC,OAAO,EAAE,uBAAuB,EAAyD,MAAM,sCAAsC,CAAC;AACtI,OAAO,EAAE,qBAAqB,EAAqC,MAAM,oCAAoC,CAAC;AAC9G,OAAO,EAAE,oBAAoB,EAAoC,MAAM,mCAAmC,CAAC;AAC3G,OAAO,EAAE,sBAAsB,EAA4D,MAAM,qCAAqC,CAAC;AAEvI,kBAAkB;AAClB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGjF,qBAAqB;AACrB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAIhE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1E,YAAY;AACZ,cAAc,sBAAsB,CAAC;AAErC,iBAAiB;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,GAG3B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGxG,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEnH,wBAAwB;AAExB,2BAA2B;AAC3B,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAA2D,MAAM,gCAAgC,CAAC;AACtJ,OAAO,EACL,sBAAsB,GAGvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,2BAA2B,EAC3B,6BAA6B,GAE9B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,iCAAiC;AACjC,OAAO,EAAE,uBAAuB,EAAyD,MAAM,sCAAsC,CAAC;AACtI,OAAO,EAAE,qBAAqB,EAAqC,MAAM,oCAAoC,CAAC;AAC9G,OAAO,EAAE,oBAAoB,EAAoC,MAAM,mCAAmC,CAAC;AAC3G,OAAO,EAAE,sBAAsB,EAA4D,MAAM,qCAAqC,CAAC;AAEvI,kBAAkB;AAClB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGjF,qBAAqB;AACrB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAIhE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1E,YAAY;AACZ,cAAc,sBAAsB,CAAC;AAErC,iBAAiB;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,GAG3B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { llm } from '@livekit/agents';
2
+ import type { GeminiConfig } from '@ariaflowagents/gemini-native-audio';
3
+ import type { LiveKitRealtimeAdapter } from './LiveKitRealtimeAdapter.js';
4
+ import { AriaFlowGeminiRealtimeSession } from './AriaFlowGeminiRealtimeSession.js';
5
+ export interface AriaFlowGeminiRealtimeModelOptions {
6
+ gemini: GeminiConfig;
7
+ agentId: string;
8
+ basePrompt: string;
9
+ agentName?: string;
10
+ voice?: string;
11
+ /**
12
+ * Optional — enables `recordUserTranscript` / `recordAssistantTranscript` on turn completion.
13
+ * Use the same instance you pass to `LiveKitRealtimeAdapter.attach(session)`.
14
+ */
15
+ liveKitAdapter?: LiveKitRealtimeAdapter;
16
+ }
17
+ export declare class AriaFlowGeminiRealtimeModel extends llm.RealtimeModel {
18
+ #private;
19
+ constructor(options: AriaFlowGeminiRealtimeModelOptions);
20
+ get model(): string;
21
+ get provider(): string;
22
+ /** @internal Session reads configuration without widening the public surface. */
23
+ _sessionOptions(): Readonly<AriaFlowGeminiRealtimeModelOptions>;
24
+ session(): AriaFlowGeminiRealtimeSession;
25
+ close(): Promise<void>;
26
+ }
27
+ export { AriaFlowGeminiRealtimeSession } from './AriaFlowGeminiRealtimeSession.js';
28
+ //# sourceMappingURL=AriaFlowGeminiRealtimeModel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AriaFlowGeminiRealtimeModel.d.ts","sourceRoot":"","sources":["../../src/llm/AriaFlowGeminiRealtimeModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAenF,MAAM,WAAW,kCAAkC;IACjD,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAED,qBAAa,2BAA4B,SAAQ,GAAG,CAAC,aAAa;;gBAGpD,OAAO,EAAE,kCAAkC;IAKvD,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,iFAAiF;IACjF,eAAe,IAAI,QAAQ,CAAC,kCAAkC,CAAC;IAI/D,OAAO,IAAI,6BAA6B;IAIlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAC7B;AAED,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { llm } from '@livekit/agents';
2
+ import { AriaFlowGeminiRealtimeSession } from './AriaFlowGeminiRealtimeSession.js';
3
+ const DEFAULT_GEMINI_MODEL = 'gemini-3.1-flash-live-preview';
4
+ const REALTIME_CAPABILITIES = {
5
+ messageTruncation: false,
6
+ turnDetection: true,
7
+ userTranscription: true,
8
+ autoToolReplyGeneration: true,
9
+ audioOutput: true,
10
+ manualFunctionCalls: false,
11
+ midSessionInstructionsUpdate: true,
12
+ midSessionToolsUpdate: true,
13
+ };
14
+ export class AriaFlowGeminiRealtimeModel extends llm.RealtimeModel {
15
+ #options;
16
+ constructor(options) {
17
+ super(REALTIME_CAPABILITIES);
18
+ this.#options = options;
19
+ }
20
+ get model() {
21
+ return this.#options.gemini.model ?? DEFAULT_GEMINI_MODEL;
22
+ }
23
+ get provider() {
24
+ return 'ariaflow.gemini.native';
25
+ }
26
+ /** @internal Session reads configuration without widening the public surface. */
27
+ _sessionOptions() {
28
+ return this.#options;
29
+ }
30
+ session() {
31
+ return new AriaFlowGeminiRealtimeSession(this);
32
+ }
33
+ async close() { }
34
+ }
35
+ export { AriaFlowGeminiRealtimeSession } from './AriaFlowGeminiRealtimeSession.js';
36
+ //# sourceMappingURL=AriaFlowGeminiRealtimeModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AriaFlowGeminiRealtimeModel.js","sourceRoot":"","sources":["../../src/llm/AriaFlowGeminiRealtimeModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,MAAM,oBAAoB,GAAG,+BAA+B,CAAC;AAE7D,MAAM,qBAAqB,GAA6B;IACtD,iBAAiB,EAAE,KAAK;IACxB,aAAa,EAAE,IAAI;IACnB,iBAAiB,EAAE,IAAI;IACvB,uBAAuB,EAAE,IAAI;IAC7B,WAAW,EAAE,IAAI;IACjB,mBAAmB,EAAE,KAAK;IAC1B,4BAA4B,EAAE,IAAI;IAClC,qBAAqB,EAAE,IAAI;CAC5B,CAAC;AAeF,MAAM,OAAO,2BAA4B,SAAQ,GAAG,CAAC,aAAa;IACvD,QAAQ,CAA+C;IAEhE,YAAY,OAA2C;QACrD,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC;IAC5D,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,wBAAwB,CAAC;IAClC,CAAC;IAED,iFAAiF;IACjF,eAAe;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,6BAA6B,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,KAAK,KAAmB,CAAC;CAChC;AAED,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { llm } from '@livekit/agents';
2
+ import { AudioFrame } from '@livekit/rtc-node';
3
+ import type { AriaFlowGeminiRealtimeModel } from './AriaFlowGeminiRealtimeModel.js';
4
+ export declare class AriaFlowGeminiRealtimeSession extends llm.RealtimeSession {
5
+ #private;
6
+ constructor(model: AriaFlowGeminiRealtimeModel);
7
+ get chatCtx(): llm.ChatContext;
8
+ get tools(): llm.ToolContext;
9
+ updateInstructions(instructions: string): Promise<void>;
10
+ updateChatCtx(chatCtx: llm.ChatContext): Promise<void>;
11
+ /**
12
+ * Inject raw Gemini tool declarations that bypass the ToolContext → Gemini
13
+ * conversion. Called by LiveKitRealtimeAdapter when it has the original
14
+ * declarations from prepareRealtimeConfig().
15
+ */
16
+ setAuthorityToolDeclarations(declarations: import('@ariaflowagents/gemini-native-audio').GeminiFunctionDeclaration[]): void;
17
+ updateTools(tools: llm.ToolContext): Promise<void>;
18
+ updateOptions(_options: {
19
+ toolChoice?: llm.ToolChoice | null;
20
+ }): void;
21
+ pushAudio(frame: AudioFrame): void;
22
+ generateReply(instructions?: string): Promise<llm.GenerationCreatedEvent>;
23
+ commitAudio(): Promise<void>;
24
+ clearAudio(): Promise<void>;
25
+ interrupt(): Promise<void>;
26
+ truncate(_options: {
27
+ messageId: string;
28
+ audioEndMs: number;
29
+ modalities?: ('text' | 'audio')[];
30
+ audioTranscript?: string;
31
+ }): Promise<void>;
32
+ close(): Promise<void>;
33
+ }
34
+ //# sourceMappingURL=AriaFlowGeminiRealtimeSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AriaFlowGeminiRealtimeSession.d.ts","sourceRoot":"","sources":["../../src/llm/AriaFlowGeminiRealtimeSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,GAAG,EAAqB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAkB,MAAM,mBAAmB,CAAC;AAG/D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAsBpF,qBAAa,6BAA8B,SAAQ,GAAG,CAAC,eAAe;;gBAgBxD,KAAK,EAAE,2BAA2B;IAmB9C,IAAI,OAAO,IAAI,GAAG,CAAC,WAAW,CAE7B;IAED,IAAI,KAAK,IAAI,GAAG,CAAC,WAAW,CAE3B;IAEK,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B5D;;;;OAIG;IACH,4BAA4B,CAC1B,YAAY,EAAE,OAAO,qCAAqC,EAAE,yBAAyB,EAAE,GACtF,IAAI;IAID,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBxD,aAAa,CAAC,QAAQ,EAAE;QAAE,UAAU,CAAC,EAAE,GAAG,CAAC,UAAU,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI;IAErE,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAgB5B,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAqBzE,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAE5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAE3B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAO1B,QAAQ,CAAC,QAAQ,EAAE;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;QAClC,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,IAAI,CAAC;IAIX,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA8Q7B"}
@@ -0,0 +1,419 @@
1
+ import { Future, llm, shortuuid, stream } from '@livekit/agents';
2
+ import { AudioFrame, AudioResampler } from '@livekit/rtc-node';
3
+ import { GeminiLiveSession } from '@ariaflowagents/gemini-native-audio';
4
+ import { closeStreamChannel, toMonoAudioFrame, toolContextToGeminiDeclarations, } from './ariaflowGeminiRealtimeUtils.js';
5
+ const OUTPUT_SAMPLE_RATE = 24000;
6
+ const OUTPUT_CHANNELS = 1;
7
+ export class AriaFlowGeminiRealtimeSession extends llm.RealtimeSession {
8
+ #model;
9
+ #gemini;
10
+ #chatCtx;
11
+ #tools = {};
12
+ #instructions = '';
13
+ #toolCallPending = false;
14
+ #pendingGenerationFut;
15
+ #currentGen;
16
+ #discardModelOutput = false;
17
+ #sentToolResponseIds = new Set();
18
+ #inputResampler;
19
+ #inputResamplerKey;
20
+ #toolCallBatch = [];
21
+ #toolBatchFlushScheduled = false;
22
+ constructor(model) {
23
+ super(model);
24
+ this.#model = model;
25
+ const opts = model._sessionOptions();
26
+ const agent = {
27
+ id: opts.agentId,
28
+ name: opts.agentName ?? opts.agentId,
29
+ prompt: opts.basePrompt,
30
+ voice: opts.voice,
31
+ };
32
+ this.#gemini = new GeminiLiveSession({
33
+ gemini: opts.gemini,
34
+ agent,
35
+ onEvent: () => { },
36
+ });
37
+ this.#chatCtx = llm.ChatContext.empty();
38
+ this.#wireGemini();
39
+ }
40
+ get chatCtx() {
41
+ return this.#chatCtx;
42
+ }
43
+ get tools() {
44
+ return this.#tools;
45
+ }
46
+ async updateInstructions(instructions) {
47
+ this.#instructions = instructions;
48
+ if (this.#gemini.connected) {
49
+ await this.#gemini.updateConfig({ systemInstruction: instructions });
50
+ }
51
+ }
52
+ async updateChatCtx(chatCtx) {
53
+ this.#chatCtx = chatCtx.copy();
54
+ const responses = [];
55
+ for (const item of chatCtx.items) {
56
+ if (item.type !== 'function_call_output')
57
+ continue;
58
+ if (this.#sentToolResponseIds.has(item.callId))
59
+ continue;
60
+ this.#sentToolResponseIds.add(item.callId);
61
+ let output = item.output;
62
+ try {
63
+ output = JSON.parse(item.output);
64
+ }
65
+ catch {
66
+ output = item.output;
67
+ }
68
+ responses.push({ id: item.callId, name: item.name, output });
69
+ }
70
+ if (responses.length > 0) {
71
+ this.#gemini.sendToolResponse(responses);
72
+ this.#toolCallPending = false;
73
+ }
74
+ }
75
+ /**
76
+ * Raw Gemini tool declarations injected by the authority adapter.
77
+ * When set, these take priority over converting from the LiveKit ToolContext
78
+ * (which loses parameter schemas due to the z.object({}).passthrough() wrapper).
79
+ */
80
+ #authorityToolDeclarations;
81
+ /**
82
+ * Inject raw Gemini tool declarations that bypass the ToolContext → Gemini
83
+ * conversion. Called by LiveKitRealtimeAdapter when it has the original
84
+ * declarations from prepareRealtimeConfig().
85
+ */
86
+ setAuthorityToolDeclarations(declarations) {
87
+ this.#authorityToolDeclarations = declarations;
88
+ }
89
+ async updateTools(tools) {
90
+ this.#tools = tools;
91
+ // Use authority-injected declarations (full schema) when available.
92
+ // Fall back to converting from ToolContext (may have empty schemas from passthrough).
93
+ const usedAuthority = !!this.#authorityToolDeclarations;
94
+ const declarations = this.#authorityToolDeclarations ?? toolContextToGeminiDeclarations(tools);
95
+ this.#authorityToolDeclarations = undefined; // Consume once
96
+ if (!this.#gemini.connected) {
97
+ await this.#gemini.connect({
98
+ systemInstruction: this.#instructions,
99
+ tools: declarations,
100
+ model: this.#model.model,
101
+ });
102
+ }
103
+ else {
104
+ await this.#gemini.updateConfig({ tools: declarations });
105
+ }
106
+ }
107
+ updateOptions(_options) { }
108
+ pushAudio(frame) {
109
+ if (this.#toolCallPending)
110
+ return;
111
+ try {
112
+ const mono = toMonoAudioFrame(frame);
113
+ for (const f of this.#resampleToOutputRate(mono)) {
114
+ const pcm = new Uint8Array(f.data.buffer, f.data.byteOffset, f.data.byteLength);
115
+ this.#gemini.sendAudio(pcm);
116
+ }
117
+ }
118
+ catch (err) {
119
+ console.error('[AriaFlowGeminiRealtimeSession] pushAudio:', err instanceof Error ? err.message : String(err));
120
+ }
121
+ }
122
+ async generateReply(instructions) {
123
+ if (this.#pendingGenerationFut && !this.#pendingGenerationFut.done) {
124
+ // Suppress the unhandled rejection from the superseded future before rejecting.
125
+ this.#pendingGenerationFut.await.catch(() => { });
126
+ this.#pendingGenerationFut.reject(new Error('Superseded by new generate_reply call'));
127
+ }
128
+ const fut = new Future();
129
+ this.#pendingGenerationFut = fut;
130
+ this.#gemini.requestResponse(instructions);
131
+ const timeoutHandle = setTimeout(() => {
132
+ if (!fut.done) {
133
+ fut.reject(new Error('generateReply timed out waiting for generation_created event.'));
134
+ if (this.#pendingGenerationFut === fut) {
135
+ this.#pendingGenerationFut = undefined;
136
+ }
137
+ }
138
+ }, 15000);
139
+ void fut.await.finally(() => clearTimeout(timeoutHandle)).catch(() => { });
140
+ return fut.await;
141
+ }
142
+ async commitAudio() { }
143
+ async clearAudio() { }
144
+ async interrupt() {
145
+ if (this.#currentGen && !this.#currentGen._done) {
146
+ this.#discardModelOutput = true;
147
+ closeStreamChannel(this.#currentGen.audioChannel);
148
+ }
149
+ }
150
+ async truncate(_options) {
151
+ console.warn('[AriaFlowGeminiRealtimeSession] truncate is not supported for Gemini Live.');
152
+ }
153
+ async close() {
154
+ if (this.#pendingGenerationFut && !this.#pendingGenerationFut.done) {
155
+ // Suppress the unhandled rejection before rejecting the future.
156
+ this.#pendingGenerationFut.await.catch(() => { });
157
+ this.#pendingGenerationFut.reject(new Error('Session closed'));
158
+ this.#pendingGenerationFut = undefined;
159
+ }
160
+ if (this.#currentGen && !this.#currentGen._done) {
161
+ await this.#finalizeGeneration();
162
+ }
163
+ this.#inputResampler?.close();
164
+ this.#inputResampler = undefined;
165
+ await this.#gemini.disconnect();
166
+ await super.close();
167
+ }
168
+ *#resampleToOutputRate(frame) {
169
+ if (frame.sampleRate === OUTPUT_SAMPLE_RATE && frame.channels === OUTPUT_CHANNELS) {
170
+ yield frame;
171
+ return;
172
+ }
173
+ const key = `${frame.sampleRate}:${frame.channels}`;
174
+ if (!this.#inputResampler || this.#inputResamplerKey !== key) {
175
+ this.#inputResampler?.close();
176
+ this.#inputResampler = new AudioResampler(frame.sampleRate, OUTPUT_SAMPLE_RATE, frame.channels);
177
+ this.#inputResamplerKey = key;
178
+ }
179
+ for (const out of this.#inputResampler.push(frame)) {
180
+ yield out;
181
+ }
182
+ }
183
+ #wireGemini() {
184
+ const logErr = (label, err) => console.error(`[AriaFlowGeminiRealtimeSession] ${label}:`, err instanceof Error ? err.message : String(err));
185
+ this.#gemini.on('audio', (data) => {
186
+ try {
187
+ this.#onModelAudio(data);
188
+ }
189
+ catch (err) {
190
+ logErr('audio event', err);
191
+ }
192
+ });
193
+ this.#gemini.on('transcript', (text, role) => {
194
+ try {
195
+ this.#onTranscript(text, role);
196
+ }
197
+ catch (err) {
198
+ logErr('transcript event', err);
199
+ }
200
+ });
201
+ this.#gemini.on('tool-call', (id, name, args) => {
202
+ try {
203
+ this.#enqueueToolCall(id, name, args);
204
+ }
205
+ catch (err) {
206
+ logErr('tool-call event', err);
207
+ }
208
+ });
209
+ this.#gemini.on('turn-complete', () => {
210
+ void this.#onModelTurnComplete();
211
+ });
212
+ this.#gemini.on('interrupted', () => {
213
+ try {
214
+ this.#onInterrupted();
215
+ }
216
+ catch (err) {
217
+ logErr('interrupted event', err);
218
+ }
219
+ });
220
+ this.#gemini.on('error', (msg) => {
221
+ this.emit('error', {
222
+ type: 'realtime_model_error',
223
+ timestamp: Date.now(),
224
+ label: 'ariaflow_gemini_realtime',
225
+ error: new Error(msg),
226
+ recoverable: true,
227
+ });
228
+ });
229
+ }
230
+ #enqueueToolCall(id, name, args) {
231
+ this.#toolCallBatch.push({ id, name, args });
232
+ if (this.#toolBatchFlushScheduled)
233
+ return;
234
+ this.#toolBatchFlushScheduled = true;
235
+ queueMicrotask(() => this.#flushToolCallBatch());
236
+ }
237
+ #flushToolCallBatch() {
238
+ this.#toolBatchFlushScheduled = false;
239
+ const batch = this.#toolCallBatch;
240
+ this.#toolCallBatch = [];
241
+ if (batch.length === 0)
242
+ return;
243
+ this.#toolCallPending = true;
244
+ this.#ensureGeneration();
245
+ const gen = this.#currentGen;
246
+ if (!gen || gen.functionChannel.closed)
247
+ return;
248
+ for (const fc of batch) {
249
+ void gen.functionChannel.write(llm.FunctionCall.create({
250
+ callId: fc.id,
251
+ name: fc.name,
252
+ args: typeof fc.args === 'string' ? fc.args : JSON.stringify(fc.args ?? {}),
253
+ })).catch(() => { });
254
+ }
255
+ void gen.functionChannel.close().catch(() => { });
256
+ }
257
+ #onModelAudio(data) {
258
+ if (this.#discardModelOutput)
259
+ return;
260
+ this.#ensureGeneration();
261
+ const gen = this.#currentGen;
262
+ if (!gen || gen._done || gen.audioChannel.closed)
263
+ return;
264
+ const sampleCount = Math.floor(data.byteLength / 2);
265
+ if (sampleCount <= 0)
266
+ return;
267
+ const int16 = new Int16Array(data.buffer, data.byteOffset, sampleCount);
268
+ const frame = new AudioFrame(int16, OUTPUT_SAMPLE_RATE, OUTPUT_CHANNELS, sampleCount);
269
+ void gen.audioChannel.write(frame).catch(() => { });
270
+ }
271
+ #onTranscript(text, role) {
272
+ this.#ensureGeneration();
273
+ const gen = this.#currentGen;
274
+ if (!gen || gen._done)
275
+ return;
276
+ if (role === 'user') {
277
+ let chunk = text;
278
+ if (gen.inputTranscription === '') {
279
+ chunk = chunk.trimStart();
280
+ }
281
+ gen.inputTranscription += chunk;
282
+ this.emit('input_audio_transcription_completed', {
283
+ itemId: gen.inputId,
284
+ transcript: gen.inputTranscription,
285
+ isFinal: false,
286
+ });
287
+ return;
288
+ }
289
+ gen.outputText += text;
290
+ if (!gen.textChannel.closed) {
291
+ void gen.textChannel.write(text).catch(() => { });
292
+ }
293
+ }
294
+ #onInterrupted() {
295
+ this.emit('input_speech_started', {});
296
+ this.#discardModelOutput = true;
297
+ const gen = this.#currentGen;
298
+ if (gen && !gen._done) {
299
+ closeStreamChannel(gen.audioChannel);
300
+ }
301
+ }
302
+ async #onModelTurnComplete() {
303
+ this.#discardModelOutput = false;
304
+ this.#toolCallPending = false;
305
+ await this.#finalizeGeneration();
306
+ this.emit('turn_complete');
307
+ try {
308
+ this.emit('input_speech_stopped', {
309
+ userTranscriptionEnabled: true,
310
+ });
311
+ }
312
+ catch {
313
+ // ignore
314
+ }
315
+ }
316
+ #ensureGeneration() {
317
+ if (this.#currentGen && !this.#currentGen._done)
318
+ return;
319
+ this.#startGeneration();
320
+ }
321
+ #startGeneration() {
322
+ const responseId = shortuuid('AR_');
323
+ const inputId = shortuuid('AI_');
324
+ const messageChannel = stream.createStreamChannel();
325
+ const functionChannel = stream.createStreamChannel();
326
+ const textChannel = stream.createStreamChannel();
327
+ const audioChannel = stream.createStreamChannel();
328
+ this.#currentGen = {
329
+ messageChannel,
330
+ functionChannel,
331
+ textChannel,
332
+ audioChannel,
333
+ responseId,
334
+ inputId,
335
+ inputTranscription: '',
336
+ outputText: '',
337
+ _done: false,
338
+ };
339
+ const gen = this.#currentGen;
340
+ void gen.messageChannel.write({
341
+ messageId: responseId,
342
+ textStream: gen.textChannel.stream(),
343
+ audioStream: gen.audioChannel.stream(),
344
+ modalities: Promise.resolve(['audio', 'text']),
345
+ }).catch(() => { });
346
+ const generationEvent = {
347
+ messageStream: gen.messageChannel.stream(),
348
+ functionStream: gen.functionChannel.stream(),
349
+ userInitiated: false,
350
+ responseId,
351
+ };
352
+ if (this.#pendingGenerationFut && !this.#pendingGenerationFut.done) {
353
+ generationEvent.userInitiated = true;
354
+ this.#pendingGenerationFut.resolve(generationEvent);
355
+ this.#pendingGenerationFut = undefined;
356
+ }
357
+ else {
358
+ this.emit('input_speech_started', {});
359
+ }
360
+ this.emit('generation_created', generationEvent);
361
+ }
362
+ async #finalizeGeneration() {
363
+ const gen = this.#currentGen;
364
+ if (!gen || gen._done)
365
+ return;
366
+ const adapter = this.#model._sessionOptions().liveKitAdapter;
367
+ if (gen.inputTranscription.trim()) {
368
+ try {
369
+ this.emit('input_audio_transcription_completed', {
370
+ itemId: gen.inputId,
371
+ transcript: gen.inputTranscription,
372
+ isFinal: true,
373
+ });
374
+ }
375
+ catch {
376
+ // ignore
377
+ }
378
+ this.#chatCtx.addMessage({
379
+ role: 'user',
380
+ content: gen.inputTranscription,
381
+ id: gen.inputId,
382
+ });
383
+ if (adapter) {
384
+ try {
385
+ await adapter.recordUserTranscript(gen.inputTranscription);
386
+ }
387
+ catch (err) {
388
+ console.error('[AriaFlowGeminiRealtimeSession] recordUserTranscript:', err instanceof Error ? err.message : String(err));
389
+ }
390
+ }
391
+ }
392
+ if (gen.outputText.trim()) {
393
+ this.#chatCtx.addMessage({
394
+ role: 'assistant',
395
+ content: gen.outputText,
396
+ id: gen.responseId,
397
+ });
398
+ if (adapter) {
399
+ try {
400
+ await adapter.recordAssistantTranscript(gen.outputText);
401
+ }
402
+ catch (err) {
403
+ console.error('[AriaFlowGeminiRealtimeSession] recordAssistantTranscript:', err instanceof Error ? err.message : String(err));
404
+ }
405
+ }
406
+ }
407
+ // Mark done BEFORE closing channels — prevents #ensureGeneration from
408
+ // returning early with a "live" gen whose channels are already closed.
409
+ // Without this, audio arriving during the async finalization gap is
410
+ // silently dropped (written to a closed audioChannel).
411
+ gen._done = true;
412
+ this.#currentGen = undefined;
413
+ closeStreamChannel(gen.textChannel);
414
+ closeStreamChannel(gen.audioChannel);
415
+ closeStreamChannel(gen.functionChannel);
416
+ closeStreamChannel(gen.messageChannel);
417
+ }
418
+ }
419
+ //# sourceMappingURL=AriaFlowGeminiRealtimeSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AriaFlowGeminiRealtimeSession.js","sourceRoot":"","sources":["../../src/llm/AriaFlowGeminiRealtimeSession.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LiveKitRealtimeAdapter.d.ts","sourceRoot":"","sources":["../../src/llm/LiveKitRealtimeAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,KAAK,EAAE,sBAAsB,EAA0B,MAAM,oCAAoC,CAAC;AAezG,MAAM,WAAW,4BAA4B;IAC3C,+DAA+D;IAC/D,SAAS,EAAE,sBAAsB,CAAC;IAElC,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAEhB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IAEnB,sCAAsC;IACtC,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAE3D,gDAAgD;IAChD,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,QAAQ,CAAC,aAAa,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,sBAAsB;;gBAWrB,MAAM,EAAE,4BAA4B;IAOhD;;;;;;OAMG;IACG,MAAM,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBhE;;;;;OAKG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7B;;;;;;;;;;OAUG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrC;;;OAGG;IACG,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvD;;;OAGG;IACG,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAsH7D"}
1
+ {"version":3,"file":"LiveKitRealtimeAdapter.d.ts","sourceRoot":"","sources":["../../src/llm/LiveKitRealtimeAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,KAAK,EAAE,sBAAsB,EAA0B,MAAM,oCAAoC,CAAC;AAezG,MAAM,WAAW,4BAA4B;IAC3C,+DAA+D;IAC/D,SAAS,EAAE,sBAAsB,CAAC;IAElC,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAEhB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IAEnB,sCAAsC;IACtC,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAE3D,gDAAgD;IAChD,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,QAAQ,CAAC,aAAa,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,qBAAa,sBAAsB;;gBAWrB,MAAM,EAAE,4BAA4B;IAOhD;;;;;;OAMG;IACG,MAAM,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BhE;;;;;OAKG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7B;;;;;;;;;;OAUG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrC;;;OAGG;IACG,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvD;;;OAGG;IACG,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CA0H7D"}
@@ -65,6 +65,11 @@ export class LiveKitRealtimeAdapter {
65
65
  const realtimeConfig = await this.#authority.prepareRealtimeConfig(this.#handle);
66
66
  // Store tool declarations for building LiveKit ToolContext
67
67
  this.#currentToolDeclarations = realtimeConfig.tools;
68
+ // If the session supports direct Gemini declarations, inject them before
69
+ // updateTools so the full parameter schemas survive the round-trip.
70
+ if (typeof session.setAuthorityToolDeclarations === 'function') {
71
+ session.setAuthorityToolDeclarations(realtimeConfig.tools);
72
+ }
68
73
  // Configure the LiveKit session
69
74
  await session.updateInstructions(realtimeConfig.systemInstruction);
70
75
  await session.updateTools(this.#buildToolContext());
@@ -199,6 +204,10 @@ export class LiveKitRealtimeAdapter {
199
204
  }
200
205
  if (outcome.nextRealtimeConfig?.tools) {
201
206
  this.#currentToolDeclarations = outcome.nextRealtimeConfig.tools;
207
+ // Inject raw declarations before updateTools for schema preservation
208
+ if (typeof this.#session.setAuthorityToolDeclarations === 'function') {
209
+ this.#session.setAuthorityToolDeclarations(outcome.nextRealtimeConfig.tools);
210
+ }
202
211
  await this.#session.updateTools(this.#buildToolContext());
203
212
  }
204
213
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LiveKitRealtimeAdapter.js","sourceRoot":"","sources":["../../src/llm/LiveKitRealtimeAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA6CxB,+EAA+E;AAE/E,MAAM,kCAAkC,GAAG,IAAI,GAAG,CAAS;IACzD,+BAA+B;CAChC,CAAC,CAAC;AAEH,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,OAAO,sBAAsB;IACxB,UAAU,CAAyB;IACnC,OAAO,CAA+B;IAC/C,QAAQ,GAAsC,IAAI,CAAC;IACnD,OAAO,GAAkC,IAAI,CAAC;IAC9C,wBAAwB,GAInB,EAAE,CAAC;IAER,YAAY,MAAoC;QAC9C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,+EAA+E;IAE/E;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,OAAmC;QAC9C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,sEAAsE;QACtE,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAC/C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;QAEH,mEAAmE;QACnE,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEjF,2DAA2D;QAC3D,IAAI,CAAC,wBAAwB,GAAG,cAAc,CAAC,KAAK,CAAC;QAErD,gCAAgC;QAChC,MAAM,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACnE,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACtD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM;QACV,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;IACrC,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,cAAc;QAClB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,oBAAoB,CAAC,IAAY;QACrC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,yBAAyB,CAAC,IAAY;QAC1C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,6EAA6E;IAE7E;;;;;OAKG;IACH,iBAAiB;QACf,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAE7B,MAAM,WAAW,GAAoB,EAAE,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACjD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,SAAS,CACP,IAAgF;QAEhF,MAAM,OAAO,GAAG,IAAI,CAAC;QAErB,OAAO,GAAG,CAAC,IAAI,CAAC;YACd,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,yEAAyE;YACzE,uEAAuE;YACvE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAgB;YACpD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAsB,EAAoB,EAAE;gBAChE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACrB,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;gBAC3C,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAEvD,2CAA2C;gBAC3C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE;oBACxE,EAAE,EAAE,MAAM;oBACV,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI;iBACL,CAAC,CAAC;gBAEH,qBAAqB;gBACrB,QAAQ,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC5B,KAAK,aAAa;wBAChB,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;4BAC1C,OAAO,CAAC,KAAK,CACX,8CAA8C,EAC9C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;wBACJ,CAAC,CAAC,CAAC;wBACH,MAAM;oBAER,KAAK,SAAS,CAAC,CAAC,CAAC;wBACf,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;wBAC/C,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;wBACjD,MAAM;oBACR,CAAC;oBAED,KAAK,KAAK,CAAC,CAAC,CAAC;wBACX,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;wBAClC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;wBAChC,MAAM;oBACR,CAAC;oBAED,KAAK,UAAU,CAAC;oBAChB,KAAK,qBAAqB,CAAC;oBAC3B;wBACE,MAAM;gBACV,CAAC;gBAED,OAAO,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC;YACrC,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAE7E;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,OAMlB;QACC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC;QAC3D,IAAI,kCAAkC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,IAAI,CACV,mCAAmC,SAAS,iCAAiC;gBAC7E,4EAA4E,CAC7E,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,OAAO,CAAC,kBAAkB,EAAE,KAAK,EAAE,CAAC;YACtC,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC;YACjE,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"LiveKitRealtimeAdapter.js","sourceRoot":"","sources":["../../src/llm/LiveKitRealtimeAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA6CxB,+EAA+E;AAE/E,MAAM,kCAAkC,GAAG,IAAI,GAAG,CAAS;IACzD,+BAA+B;CAChC,CAAC,CAAC;AAEH,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,OAAO,sBAAsB;IACxB,UAAU,CAAyB;IACnC,OAAO,CAA+B;IAC/C,QAAQ,GAAsC,IAAI,CAAC;IACnD,OAAO,GAAkC,IAAI,CAAC;IAC9C,wBAAwB,GAInB,EAAE,CAAC;IAER,YAAY,MAAoC;QAC9C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,+EAA+E;IAE/E;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,OAAmC;QAC9C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,sEAAsE;QACtE,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAC/C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;YAC7B,IAAI,EAAE,UAAU;SACjB,CAAC,CAAC;QAEH,mEAAmE;QACnE,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEjF,2DAA2D;QAC3D,IAAI,CAAC,wBAAwB,GAAG,cAAc,CAAC,KAAK,CAAC;QAErD,yEAAyE;QACzE,oEAAoE;QACpE,IAAI,OAAQ,OAAe,CAAC,4BAA4B,KAAK,UAAU,EAAE,CAAC;YACvE,OAAe,CAAC,4BAA4B,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtE,CAAC;QAED,gCAAgC;QAChC,MAAM,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;QACnE,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACtD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM;QACV,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACpE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;IACrC,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,cAAc;QAClB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,oBAAoB,CAAC,IAAY;QACrC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,yBAAyB,CAAC,IAAY;QAC1C,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,6EAA6E;IAE7E;;;;;OAKG;IACH,iBAAiB;QACf,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAE7B,MAAM,WAAW,GAAoB,EAAE,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACjD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,SAAS,CACP,IAAgF;QAEhF,MAAM,OAAO,GAAG,IAAI,CAAC;QAErB,OAAO,GAAG,CAAC,IAAI,CAAC;YACd,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,yEAAyE;YACzE,uEAAuE;YACvE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAgB;YACpD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAsB,EAAoB,EAAE;gBAChE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACrB,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;gBAC3C,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAEvD,2CAA2C;gBAC3C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE;oBACxE,EAAE,EAAE,MAAM;oBACV,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI;iBACL,CAAC,CAAC;gBAEH,qBAAqB;gBACrB,QAAQ,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC5B,KAAK,aAAa;wBAChB,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;4BAC1C,OAAO,CAAC,KAAK,CACX,8CAA8C,EAC9C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD,CAAC;wBACJ,CAAC,CAAC,CAAC;wBACH,MAAM;oBAER,KAAK,SAAS,CAAC,CAAC,CAAC;wBACf,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;wBAC/C,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;wBACjD,MAAM;oBACR,CAAC;oBAED,KAAK,KAAK,CAAC,CAAC,CAAC;wBACX,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;wBAClC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;wBAChC,MAAM;oBACR,CAAC;oBAED,KAAK,UAAU,CAAC;oBAChB,KAAK,qBAAqB,CAAC;oBAC3B;wBACE,MAAM;gBACV,CAAC;gBAED,OAAO,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC;YACrC,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAE7E;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,OAMlB;QACC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAE3B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC;QAC3D,IAAI,kCAAkC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACtD,OAAO,CAAC,IAAI,CACV,mCAAmC,SAAS,iCAAiC;gBAC7E,4EAA4E,CAC7E,CAAC;QACJ,CAAC;QAED,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,OAAO,CAAC,kBAAkB,EAAE,KAAK,EAAE,CAAC;YACtC,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC;YACjE,qEAAqE;YACrE,IAAI,OAAQ,IAAI,CAAC,QAAgB,CAAC,4BAA4B,KAAK,UAAU,EAAE,CAAC;gBAC7E,IAAI,CAAC,QAAgB,CAAC,4BAA4B,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACxF,CAAC;YACD,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { llm } from '@livekit/agents';
2
+ import { AudioFrame } from '@livekit/rtc-node';
3
+ import type { GeminiFunctionDeclaration } from '@ariaflowagents/gemini-native-audio';
4
+ export declare function toolContextToGeminiDeclarations(ctx: llm.ToolContext): GeminiFunctionDeclaration[];
5
+ export declare function toMonoAudioFrame(frame: AudioFrame): AudioFrame;
6
+ export declare function closeStreamChannel(ch: {
7
+ readonly closed: boolean;
8
+ close(): void | Promise<void>;
9
+ }): void;
10
+ //# sourceMappingURL=ariaflowGeminiRealtimeUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ariaflowGeminiRealtimeUtils.d.ts","sourceRoot":"","sources":["../../src/llm/ariaflowGeminiRealtimeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAErF,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,GAAG,yBAAyB,EAAE,CAWjG;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAa9D;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,GAAG,IAAI,CAWxG"}
@@ -0,0 +1,45 @@
1
+ import { llm } from '@livekit/agents';
2
+ import { AudioFrame } from '@livekit/rtc-node';
3
+ export function toolContextToGeminiDeclarations(ctx) {
4
+ const out = [];
5
+ for (const [name, tool] of Object.entries(ctx)) {
6
+ if (!llm.isFunctionTool(tool))
7
+ continue;
8
+ out.push({
9
+ name,
10
+ description: tool.description,
11
+ parameters: llm.toJsonSchema(tool.parameters, false, false),
12
+ });
13
+ }
14
+ return out;
15
+ }
16
+ export function toMonoAudioFrame(frame) {
17
+ if (frame.channels === 1)
18
+ return frame;
19
+ const src = frame.data;
20
+ const n = frame.samplesPerChannel;
21
+ const mono = new Int16Array(n);
22
+ for (let i = 0; i < n; i++) {
23
+ let sum = 0;
24
+ for (let c = 0; c < frame.channels; c++) {
25
+ sum += src[i * frame.channels + c] ?? 0;
26
+ }
27
+ mono[i] = Math.round(sum / frame.channels);
28
+ }
29
+ return new AudioFrame(mono, frame.sampleRate, 1, n);
30
+ }
31
+ export function closeStreamChannel(ch) {
32
+ if (ch.closed)
33
+ return;
34
+ try {
35
+ const result = ch.close();
36
+ // StreamChannel.close() returns Promise<void> — suppress any rejection.
37
+ if (result && typeof result.catch === 'function') {
38
+ result.catch(() => { });
39
+ }
40
+ }
41
+ catch {
42
+ // ignore synchronous throws
43
+ }
44
+ }
45
+ //# sourceMappingURL=ariaflowGeminiRealtimeUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ariaflowGeminiRealtimeUtils.js","sourceRoot":"","sources":["../../src/llm/ariaflowGeminiRealtimeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,MAAM,UAAU,+BAA+B,CAAC,GAAoB;IAClE,MAAM,GAAG,GAAgC,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC;YAAE,SAAS;QACxC,GAAG,CAAC,IAAI,CAAC;YACP,IAAI;YACJ,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAA4B;SACvF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IAChD,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC;IACvB,MAAM,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAA+D;IAChG,IAAI,EAAE,CAAC,MAAM;QAAE,OAAO;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;QAC1B,wEAAwE;QACxE,IAAI,MAAM,IAAI,OAAQ,MAAwB,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACnE,MAAwB,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4BAA4B;IAC9B,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ariaflowagents/livekit-plugin",
3
- "version": "0.9.3",
3
+ "version": "0.9.5",
4
4
  "description": "AriaFlow plugin for LiveKit Agents — runtime adapter, transport foundation, Gemini STT/TTS",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -34,7 +34,7 @@
34
34
  "@livekit/agents": ">=1.0.0",
35
35
  "@livekit/rtc-node": ">=0.12.0",
36
36
  "zod": "^3.23.0",
37
- "@ariaflowagents/core": "0.9.3"
37
+ "@ariaflowagents/core": "0.9.5"
38
38
  },
39
39
  "dependencies": {
40
40
  "@google/genai": "1.43.0",
@@ -44,7 +44,8 @@
44
44
  "onnxruntime-node": "^1.21.0",
45
45
  "@huggingface/hub": "^1.1.2",
46
46
  "@huggingface/transformers": "^3.7.2",
47
- "alawmulaw": "^6.0.0"
47
+ "alawmulaw": "^6.0.0",
48
+ "@ariaflowagents/gemini-native-audio": "0.9.5"
48
49
  },
49
50
  "devDependencies": {
50
51
  "@types/node": "^25.3.2",