/** * @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 specific language governing permissions and * limitations under the License. */ import { CountTokensRequest, GenerateContentRequest, InferenceMode, OnDeviceParams } from '../types'; import { ChromeAdapter } from '../types/chrome-adapter'; import { LanguageModel } from '../types/language-model'; /** * Defines an inference "backend" that uses Chrome's on-device model, * and encapsulates logic for detecting when on-device inference is * possible. */ export declare class ChromeAdapterImpl implements ChromeAdapter { languageModelProvider: LanguageModel; mode: InferenceMode; static SUPPORTED_MIME_TYPES: string[]; private isDownloading; private downloadPromise; private oldSession; onDeviceParams: OnDeviceParams; constructor(languageModelProvider: LanguageModel, mode: InferenceMode, onDeviceParams?: OnDeviceParams); /** * Checks if a given request can be made on-device. * * Encapsulates a few concerns: * the mode * API existence * prompt formatting * model availability, including triggering download if necessary * * * Pros: callers needn't be concerned with details of on-device availability.

* Cons: this method spans a few concerns and splits request validation from usage. * If instance variables weren't already part of the API, we could consider a better * separation of concerns. */ isAvailable(request: GenerateContentRequest): Promise; /** * Generates content on device. * * @remarks * This is comparable to {@link GenerativeModel.generateContent} for generating content in * Cloud. * @param request - a standard Firebase AI {@link GenerateContentRequest} * @returns {@link Response}, so we can reuse common response formatting. */ generateContent(request: GenerateContentRequest): Promise; /** * Generates content stream on device. * * @remarks * This is comparable to {@link GenerativeModel.generateContentStream} for generating content in * Cloud. * @param request - a standard Firebase AI {@link GenerateContentRequest} * @returns {@link Response}, so we can reuse common response formatting. */ generateContentStream(request: GenerateContentRequest): Promise; countTokens(_request: CountTokensRequest): Promise; /** * Asserts inference for the given request can be performed by an on-device model. */ private static isOnDeviceRequest; /** * Encapsulates logic to get availability and download a model if one is downloadable. */ private downloadIfAvailable; /** * Triggers out-of-band download of an on-device model. * * Chrome only downloads models as needed. Chrome knows a model is needed when code calls * LanguageModel.create. * * Since Chrome manages the download, the SDK can only avoid redundant download requests by * tracking if a download has previously been requested. */ private download; /** * Converts Firebase AI {@link Content} object to a Chrome {@link LanguageModelMessage} object. */ private static toLanguageModelMessage; /** * Converts a Firebase AI Part object to a Chrome LanguageModelMessageContent object. */ private static toLanguageModelMessageContent; /** * Converts a Firebase AI {@link Role} string to a {@link LanguageModelMessageRole} string. */ private static toLanguageModelMessageRole; /** * Abstracts Chrome session creation. * * Chrome uses a multi-turn session for all inference. Firebase AI uses single-turn for all * inference. To map the Firebase AI API to Chrome's API, the SDK creates a new session for all * inference. * * Chrome will remove a model from memory if it's no longer in use, so this method ensures a * new session is created before an old session is destroyed. */ private createSession; /** * Formats string returned by Chrome as a {@link Response} returned by Firebase AI. */ private static toResponse; /** * Formats string stream returned by Chrome as SSE returned by Firebase AI. */ private static toStreamResponse; } /** * Creates a ChromeAdapterImpl on demand. */ export declare function chromeAdapterFactory(mode: InferenceMode, window?: Window, params?: OnDeviceParams): ChromeAdapterImpl | undefined;