/** * @license * Copyright 2025 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the License for the specific language governing permissions and * limitations under the License. */ import { FunctionResponse, GenerativeContentBlob, LiveServerContent, LiveServerGoingAwayNotice, LiveServerToolCall, LiveServerToolCallCancellation, LiveSessionResumptionUpdate, Part, SessionResumptionConfig } from '../types'; import { WebSocketHandler } from '../websocket'; import { _LiveClientSetup } from '../types/live-responses'; import { ReadableStream } from 'web-streams-polyfill'; import { ApiSettings } from '../types/internal'; /** * Represents an active, real-time, bidirectional conversation with the model. * * This class should only be instantiated by calling {@link LiveGenerativeModel.connect}. * * @beta */ export declare class LiveSession { private _setupMessage; private _apiSettings; private _sessionResumption?; private _webSocketHandler?; /** * Indicates whether this Live session is closed. * * @beta */ isClosed: boolean; /** * Indicates whether this Live session is being controlled by an `AudioConversationController`. * * @beta */ inConversation: boolean; /** * Allows external code to await the opening of the WebSocket connection. * * @beta */ connectionPromise: Promise; /** * Generator yielding WebSocket messages from the server. */ private _serverMessages; /** * @internal */ constructor(_setupMessage: _LiveClientSetup, _apiSettings: ApiSettings, _sessionResumption?: SessionResumptionConfig | undefined, _webSocketHandler?: WebSocketHandler | undefined); /** * Initializes connection to the WebSocket. Should be called immediately * after instantiation. * * @internal */ _connectSession(sessionResumption?: SessionResumptionConfig): Promise; /** * Resumes an existing live session with the server. * * This closes the current WebSocket connection and establishes a new one using * the same configuration (URI, headers, model, system instruction, tools, etc.) * as the original session. * * @param sessionResumption - The configuration for session resumption, such as the handle to the previous session state to restore. * @throws If the session resumption configuration is unsupported. * * @beta */ resumeSession(sessionResumption?: SessionResumptionConfig): Promise; /** * Sends content to the server. * * @param request - The message to send to the model. * @param turnComplete - Indicates if the turn is complete. Defaults to false. * @throws If this session has been closed. * * @beta */ send(request: string | Array, turnComplete?: boolean): Promise; /** * Sends text to the server in realtime. * * @example * ```javascript * liveSession.sendTextRealtime("Hello, how are you?"); * ``` * * @param text - The text data to send. * @throws If this session has been closed. * * @beta */ sendTextRealtime(text: string): Promise; /** * Sends audio data to the server in realtime. * * @remarks The server requires that the audio data is base64-encoded 16-bit PCM at 16kHz * little-endian. * * @example * ```javascript * // const pcmData = ... base64-encoded 16-bit PCM at 16kHz little-endian. * const blob = { mimeType: "audio/pcm", data: pcmData }; * liveSession.sendAudioRealtime(blob); * ``` * * @param blob - The base64-encoded PCM data to send to the server in realtime. * @throws If this session has been closed. * * @beta */ sendAudioRealtime(blob: GenerativeContentBlob): Promise; /** * Sends video data to the server in realtime. * * @remarks The server requires that the video is sent as individual video frames at 1 FPS. It * is recommended to set `mimeType` to `image/jpeg`. * * @example * ```javascript * // const videoFrame = ... base64-encoded JPEG data * const blob = { mimeType: "image/jpeg", data: videoFrame }; * liveSession.sendVideoRealtime(blob); * ``` * @param blob - The base64-encoded video data to send to the server in realtime. * @throws If this session has been closed. * * @beta */ sendVideoRealtime(blob: GenerativeContentBlob): Promise; /** * Sends function responses to the server. * * @param functionResponses - The function responses to send. * @throws If this session has been closed. * * @beta */ sendFunctionResponses(functionResponses: FunctionResponse[]): Promise; /** * Yields messages received from the server. * This can only be used by one consumer at a time. * * @returns An `AsyncGenerator` that yields server messages as they arrive. * @throws If the session is already closed, or if we receive a response that we don't support. * * @beta */ receive(): AsyncGenerator; /** * Closes this session. * All methods on this session will throw an error once this resolves. * * @beta */ close(): Promise; /** * Sends realtime input to the server. * * @deprecated Use `sendTextRealtime()`, `sendAudioRealtime()`, and `sendVideoRealtime()` instead. * * @param mediaChunks - The media chunks to send. * @throws If this session has been closed. * * @beta */ sendMediaChunks(mediaChunks: GenerativeContentBlob[]): Promise; /** * @deprecated Use `sendTextRealtime()`, `sendAudioRealtime()`, and `sendVideoRealtime()` instead. * * Sends a stream of {@link GenerativeContentBlob}. * * @param mediaChunkStream - The stream of {@link GenerativeContentBlob} to send. * @throws If this session has been closed. * * @beta */ sendMediaStream(mediaChunkStream: ReadableStream): Promise; } //# sourceMappingURL=live-session.d.ts.map