diff --git a/.changeset/breezy-carpets-travel.md b/.changeset/breezy-carpets-travel.md new file mode 100644 index 00000000000..207f824feb7 --- /dev/null +++ b/.changeset/breezy-carpets-travel.md @@ -0,0 +1,7 @@ +--- +'firebase': patch +'@firebase/vertexai': patch +'@firebase/app': patch +--- + +Roll back #9011 and #8931 for temporary release. diff --git a/.changeset/fast-mangos-chew.md b/.changeset/fast-mangos-chew.md index 4e1f7ab3121..c5d2e4b4d1f 100644 --- a/.changeset/fast-mangos-chew.md +++ b/.changeset/fast-mangos-chew.md @@ -1,5 +1,5 @@ --- -'@firebase/ai': patch +'@firebase/vertexai': patch --- Pass `GenerativeModel`'s `BaseParams` to created chat sessions. This fixes an issue where `GenerationConfig` would not be inherited from `ChatSession`. diff --git a/.changeset/perfect-camels-try.md b/.changeset/perfect-camels-try.md index 52292807f0a..409a598531d 100644 --- a/.changeset/perfect-camels-try.md +++ b/.changeset/perfect-camels-try.md @@ -1,6 +1,6 @@ --- 'firebase': minor -'@firebase/ai': minor +'@firebase/vertexai': minor --- Add support for Gemini multimodal output diff --git a/.changeset/tall-zoos-stare.md b/.changeset/tall-zoos-stare.md deleted file mode 100644 index 96d480762ea..00000000000 --- a/.changeset/tall-zoos-stare.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'firebase': minor -'@firebase/ai': minor ---- - -Add support for the Gemini Developer API, enabling usage in a free tier, and add new `AI` API to accomodate new product naming. diff --git a/.github/workflows/canary-deploy.yml b/.github/workflows/canary-deploy.yml index 318db24f667..2a9a6a803a6 100644 --- a/.github/workflows/canary-deploy.yml +++ b/.github/workflows/canary-deploy.yml @@ -71,7 +71,7 @@ jobs: NPM_TOKEN_STORAGE: ${{secrets.NPM_TOKEN_STORAGE}} NPM_TOKEN_STORAGE_TYPES: ${{secrets.NPM_TOKEN_STORAGE_TYPES}} NPM_TOKEN_UTIL: ${{secrets.NPM_TOKEN_UTIL}} - NPM_TOKEN_AI: ${{secrets.NPM_TOKEN_AI}} + NPM_TOKEN_VERTEXAI: ${{secrets.NPM_TOKEN_VERTEXAI}} NPM_TOKEN_WEBCHANNEL_WRAPPER: ${{secrets.NPM_TOKEN_WEBCHANNEL_WRAPPER}} NPM_TOKEN_FIREBASE: ${{secrets.NPM_TOKEN_FIREBASE}} NPM_TOKEN_APP_COMPAT: ${{ secrets.NPM_TOKEN_APP_COMPAT }} diff --git a/.github/workflows/check-vertexai-responses.yml b/.github/workflows/check-vertexai-responses.yml index 4eceacd61b1..5014ad44266 100644 --- a/.github/workflows/check-vertexai-responses.yml +++ b/.github/workflows/check-vertexai-responses.yml @@ -33,7 +33,7 @@ jobs: LATEST=$(git tag --sort=v:refname | tail -n1) echo "cloned_tag=$CLONED" >> $GITHUB_ENV echo "latest_tag=$LATEST" >> $GITHUB_ENV - working-directory: packages/ai/test-utils/vertexai-sdk-test-data + working-directory: packages/vertexai/test-utils/vertexai-sdk-test-data - name: Find comment from previous run if exists # This commit represents v3.1.0 uses: peter-evans/find-comment@3eae4d37986fb5a8592848f6a574fdf654e61f9e diff --git a/.github/workflows/prerelease-manual-deploy.yml b/.github/workflows/prerelease-manual-deploy.yml index d1ab281634c..e5ccabdd144 100644 --- a/.github/workflows/prerelease-manual-deploy.yml +++ b/.github/workflows/prerelease-manual-deploy.yml @@ -74,7 +74,7 @@ jobs: NPM_TOKEN_STORAGE: ${{secrets.NPM_TOKEN_STORAGE}} NPM_TOKEN_STORAGE_TYPES: ${{secrets.NPM_TOKEN_STORAGE_TYPES}} NPM_TOKEN_UTIL: ${{secrets.NPM_TOKEN_UTIL}} - NPM_TOKEN_AI: ${{secrets.NPM_TOKEN_AI}} + NPM_TOKEN_VERTEXAI: ${{secrets.NPM_TOKEN_VERTEXAI}} NPM_TOKEN_WEBCHANNEL_WRAPPER: ${{secrets.NPM_TOKEN_WEBCHANNEL_WRAPPER}} NPM_TOKEN_FIREBASE: ${{secrets.NPM_TOKEN_FIREBASE}} NPM_TOKEN_APP_COMPAT: ${{ secrets.NPM_TOKEN_APP_COMPAT }} diff --git a/.github/workflows/release-prod.yml b/.github/workflows/release-prod.yml index 3ae667df6be..f5a5b808629 100644 --- a/.github/workflows/release-prod.yml +++ b/.github/workflows/release-prod.yml @@ -84,7 +84,7 @@ jobs: NPM_TOKEN_STORAGE: ${{secrets.NPM_TOKEN_STORAGE}} NPM_TOKEN_STORAGE_TYPES: ${{secrets.NPM_TOKEN_STORAGE_TYPES}} NPM_TOKEN_UTIL: ${{secrets.NPM_TOKEN_UTIL}} - NPM_TOKEN_AI: ${{secrets.NPM_TOKEN_AI}} + NPM_TOKEN_VERTEXAI: ${{secrets.NPM_TOKEN_VERTEXAI}} NPM_TOKEN_WEBCHANNEL_WRAPPER: ${{secrets.NPM_TOKEN_WEBCHANNEL_WRAPPER}} NPM_TOKEN_FIREBASE: ${{secrets.NPM_TOKEN_FIREBASE}} NPM_TOKEN_APP_COMPAT: ${{ secrets.NPM_TOKEN_APP_COMPAT }} diff --git a/.github/workflows/release-staging.yml b/.github/workflows/release-staging.yml index 2f5cf5eeb38..c4adefb44a8 100644 --- a/.github/workflows/release-staging.yml +++ b/.github/workflows/release-staging.yml @@ -110,7 +110,7 @@ jobs: NPM_TOKEN_STORAGE: ${{secrets.NPM_TOKEN_STORAGE}} NPM_TOKEN_STORAGE_TYPES: ${{secrets.NPM_TOKEN_STORAGE_TYPES}} NPM_TOKEN_UTIL: ${{secrets.NPM_TOKEN_UTIL}} - NPM_TOKEN_AI: ${{secrets.NPM_TOKEN_AI}} + NPM_TOKEN_VERTEXAI: ${{secrets.NPM_TOKEN_VERTEXAI}} NPM_TOKEN_WEBCHANNEL_WRAPPER: ${{secrets.NPM_TOKEN_WEBCHANNEL_WRAPPER}} NPM_TOKEN_FIREBASE: ${{secrets.NPM_TOKEN_FIREBASE}} NPM_TOKEN_APP_COMPAT: ${{ secrets.NPM_TOKEN_APP_COMPAT }} diff --git a/common/api-review/ai.api.md b/common/api-review/ai.api.md deleted file mode 100644 index d096d4c27f6..00000000000 --- a/common/api-review/ai.api.md +++ /dev/null @@ -1,955 +0,0 @@ -## API Report File for "@firebase/ai" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts - -import { AppCheckTokenResult } from '@firebase/app-check-interop-types'; -import { FirebaseApp } from '@firebase/app'; -import { FirebaseAuthTokenData } from '@firebase/auth-interop-types'; -import { FirebaseError } from '@firebase/util'; - -// @public -export interface AI { - app: FirebaseApp; - backend: Backend; - // @deprecated (undocumented) - location: string; -} - -// @public -export class AIError extends FirebaseError { - constructor(code: AIErrorCode, message: string, customErrorData?: CustomErrorData | undefined); - // (undocumented) - readonly code: AIErrorCode; - // (undocumented) - readonly customErrorData?: CustomErrorData | undefined; -} - -// @public -const enum AIErrorCode { - API_NOT_ENABLED = "api-not-enabled", - ERROR = "error", - FETCH_ERROR = "fetch-error", - INVALID_CONTENT = "invalid-content", - INVALID_SCHEMA = "invalid-schema", - NO_API_KEY = "no-api-key", - NO_APP_ID = "no-app-id", - NO_MODEL = "no-model", - NO_PROJECT_ID = "no-project-id", - PARSE_FAILED = "parse-failed", - REQUEST_ERROR = "request-error", - RESPONSE_ERROR = "response-error", - UNSUPPORTED = "unsupported" -} - -export { AIErrorCode } - -export { AIErrorCode as VertexAIErrorCode } - -// @public -export abstract class AIModel { - // @internal - protected constructor(ai: AI, modelName: string); - // Warning: (ae-forgotten-export) The symbol "ApiSettings" needs to be exported by the entry point index.d.ts - // - // @internal (undocumented) - protected _apiSettings: ApiSettings; - readonly model: string; - // @internal - static normalizeModelName(modelName: string, backendType: BackendType): string; - } - -// @public -export interface AIOptions { - backend: Backend; -} - -// @public -export class ArraySchema extends Schema { - constructor(schemaParams: SchemaParams, items: TypedSchema); - // (undocumented) - items: TypedSchema; - // @internal (undocumented) - toJSON(): SchemaRequest; -} - -// @public -export abstract class Backend { - protected constructor(type: BackendType); - readonly backendType: BackendType; -} - -// @public -export const BackendType: { - readonly VERTEX_AI: "VERTEX_AI"; - readonly GOOGLE_AI: "GOOGLE_AI"; -}; - -// @public -export type BackendType = (typeof BackendType)[keyof typeof BackendType]; - -// @public -export interface BaseParams { - // (undocumented) - generationConfig?: GenerationConfig; - // (undocumented) - safetySettings?: SafetySetting[]; -} - -// @public -export enum BlockReason { - BLOCKLIST = "BLOCKLIST", - OTHER = "OTHER", - PROHIBITED_CONTENT = "PROHIBITED_CONTENT", - SAFETY = "SAFETY" -} - -// @public -export class BooleanSchema extends Schema { - constructor(schemaParams?: SchemaParams); -} - -// @public -export class ChatSession { - constructor(apiSettings: ApiSettings, model: string, params?: StartChatParams | undefined, requestOptions?: RequestOptions | undefined); - getHistory(): Promise; - // (undocumented) - model: string; - // (undocumented) - params?: StartChatParams | undefined; - // (undocumented) - requestOptions?: RequestOptions | undefined; - sendMessage(request: string | Array): Promise; - sendMessageStream(request: string | Array): Promise; - } - -// @public -export interface Citation { - // (undocumented) - endIndex?: number; - // (undocumented) - license?: string; - publicationDate?: Date_2; - // (undocumented) - startIndex?: number; - title?: string; - // (undocumented) - uri?: string; -} - -// @public -export interface CitationMetadata { - // (undocumented) - citations: Citation[]; -} - -// @public -export interface Content { - // (undocumented) - parts: Part[]; - // (undocumented) - role: Role; -} - -// @public -export interface CountTokensRequest { - // (undocumented) - contents: Content[]; - generationConfig?: GenerationConfig; - systemInstruction?: string | Part | Content; - tools?: Tool[]; -} - -// @public -export interface CountTokensResponse { - promptTokensDetails?: ModalityTokenCount[]; - totalBillableCharacters?: number; - totalTokens: number; -} - -// @public -export interface CustomErrorData { - errorDetails?: ErrorDetails[]; - response?: GenerateContentResponse; - status?: number; - statusText?: string; -} - -// @public -interface Date_2 { - // (undocumented) - day: number; - // (undocumented) - month: number; - // (undocumented) - year: number; -} - -export { Date_2 as Date } - -// @public -export interface EnhancedGenerateContentResponse extends GenerateContentResponse { - // (undocumented) - functionCalls: () => FunctionCall[] | undefined; - inlineDataParts: () => InlineDataPart[] | undefined; - text: () => string; -} - -// @public -export interface ErrorDetails { - // (undocumented) - '@type'?: string; - [key: string]: unknown; - domain?: string; - metadata?: Record; - reason?: string; -} - -// @public -export interface FileData { - // (undocumented) - fileUri: string; - // (undocumented) - mimeType: string; -} - -// @public -export interface FileDataPart { - // (undocumented) - fileData: FileData; - // (undocumented) - functionCall?: never; - // (undocumented) - functionResponse?: never; - // (undocumented) - inlineData?: never; - // (undocumented) - text?: never; -} - -// @public -export enum FinishReason { - BLOCKLIST = "BLOCKLIST", - MALFORMED_FUNCTION_CALL = "MALFORMED_FUNCTION_CALL", - MAX_TOKENS = "MAX_TOKENS", - OTHER = "OTHER", - PROHIBITED_CONTENT = "PROHIBITED_CONTENT", - RECITATION = "RECITATION", - SAFETY = "SAFETY", - SPII = "SPII", - STOP = "STOP" -} - -// @public -export interface FunctionCall { - // (undocumented) - args: object; - // (undocumented) - name: string; -} - -// @public (undocumented) -export interface FunctionCallingConfig { - // (undocumented) - allowedFunctionNames?: string[]; - // (undocumented) - mode?: FunctionCallingMode; -} - -// @public (undocumented) -export enum FunctionCallingMode { - ANY = "ANY", - AUTO = "AUTO", - NONE = "NONE" -} - -// @public -export interface FunctionCallPart { - // (undocumented) - functionCall: FunctionCall; - // (undocumented) - functionResponse?: never; - // (undocumented) - inlineData?: never; - // (undocumented) - text?: never; -} - -// @public -export interface FunctionDeclaration { - description: string; - name: string; - parameters?: ObjectSchemaInterface; -} - -// @public -export interface FunctionDeclarationsTool { - functionDeclarations?: FunctionDeclaration[]; -} - -// @public -export interface FunctionResponse { - // (undocumented) - name: string; - // (undocumented) - response: object; -} - -// @public -export interface FunctionResponsePart { - // (undocumented) - functionCall?: never; - // (undocumented) - functionResponse: FunctionResponse; - // (undocumented) - inlineData?: never; - // (undocumented) - text?: never; -} - -// @public -export interface GenerateContentCandidate { - // (undocumented) - citationMetadata?: CitationMetadata; - // (undocumented) - content: Content; - // (undocumented) - finishMessage?: string; - // (undocumented) - finishReason?: FinishReason; - // (undocumented) - groundingMetadata?: GroundingMetadata; - // (undocumented) - index: number; - // (undocumented) - safetyRatings?: SafetyRating[]; -} - -// @public -export interface GenerateContentRequest extends BaseParams { - // (undocumented) - contents: Content[]; - // (undocumented) - systemInstruction?: string | Part | Content; - // (undocumented) - toolConfig?: ToolConfig; - // (undocumented) - tools?: Tool[]; -} - -// @public -export interface GenerateContentResponse { - // (undocumented) - candidates?: GenerateContentCandidate[]; - // (undocumented) - promptFeedback?: PromptFeedback; - // (undocumented) - usageMetadata?: UsageMetadata; -} - -// @public -export interface GenerateContentResult { - // (undocumented) - response: EnhancedGenerateContentResponse; -} - -// @public -export interface GenerateContentStreamResult { - // (undocumented) - response: Promise; - // (undocumented) - stream: AsyncGenerator; -} - -// @public -export interface GenerationConfig { - // (undocumented) - candidateCount?: number; - // (undocumented) - frequencyPenalty?: number; - // (undocumented) - maxOutputTokens?: number; - // (undocumented) - presencePenalty?: number; - responseMimeType?: string; - // @beta - responseModalities?: ResponseModality[]; - responseSchema?: TypedSchema | SchemaRequest; - // (undocumented) - stopSequences?: string[]; - // (undocumented) - temperature?: number; - // (undocumented) - topK?: number; - // (undocumented) - topP?: number; -} - -// @public -export interface GenerativeContentBlob { - data: string; - // (undocumented) - mimeType: string; -} - -// @public -export class GenerativeModel extends AIModel { - constructor(ai: AI, modelParams: ModelParams, requestOptions?: RequestOptions); - countTokens(request: CountTokensRequest | string | Array): Promise; - generateContent(request: GenerateContentRequest | string | Array): Promise; - generateContentStream(request: GenerateContentRequest | string | Array): Promise; - // (undocumented) - generationConfig: GenerationConfig; - // (undocumented) - requestOptions?: RequestOptions; - // (undocumented) - safetySettings: SafetySetting[]; - startChat(startChatParams?: StartChatParams): ChatSession; - // (undocumented) - systemInstruction?: Content; - // (undocumented) - toolConfig?: ToolConfig; - // (undocumented) - tools?: Tool[]; -} - -// @public -export function getAI(app?: FirebaseApp, options?: AIOptions): AI; - -// @public -export function getGenerativeModel(ai: AI, modelParams: ModelParams, requestOptions?: RequestOptions): GenerativeModel; - -// @beta -export function getImagenModel(ai: AI, modelParams: ImagenModelParams, requestOptions?: RequestOptions): ImagenModel; - -// @public @deprecated (undocumented) -export function getVertexAI(app?: FirebaseApp, options?: VertexAIOptions): VertexAI; - -// @public -export class GoogleAIBackend extends Backend { - constructor(); -} - -// Warning: (ae-internal-missing-underscore) The name "GoogleAICitationMetadata" should be prefixed with an underscore because the declaration is marked as @internal -// -// @internal (undocumented) -export interface GoogleAICitationMetadata { - // (undocumented) - citationSources: Citation[]; -} - -// Warning: (ae-internal-missing-underscore) The name "GoogleAICountTokensRequest" should be prefixed with an underscore because the declaration is marked as @internal -// -// @internal (undocumented) -export interface GoogleAICountTokensRequest { - // (undocumented) - generateContentRequest: { - model: string; - contents: Content[]; - systemInstruction?: string | Part | Content; - tools?: Tool[]; - generationConfig?: GenerationConfig; - }; -} - -// Warning: (ae-internal-missing-underscore) The name "GoogleAIGenerateContentCandidate" should be prefixed with an underscore because the declaration is marked as @internal -// -// @internal (undocumented) -export interface GoogleAIGenerateContentCandidate { - // (undocumented) - citationMetadata?: GoogleAICitationMetadata; - // (undocumented) - content: Content; - // (undocumented) - finishMessage?: string; - // (undocumented) - finishReason?: FinishReason; - // (undocumented) - groundingMetadata?: GroundingMetadata; - // (undocumented) - index: number; - // (undocumented) - safetyRatings?: SafetyRating[]; -} - -// Warning: (ae-internal-missing-underscore) The name "GoogleAIGenerateContentResponse" should be prefixed with an underscore because the declaration is marked as @internal -// -// @internal (undocumented) -export interface GoogleAIGenerateContentResponse { - // (undocumented) - candidates?: GoogleAIGenerateContentCandidate[]; - // (undocumented) - promptFeedback?: PromptFeedback; - // (undocumented) - usageMetadata?: UsageMetadata; -} - -// @public @deprecated (undocumented) -export interface GroundingAttribution { - // (undocumented) - confidenceScore?: number; - // (undocumented) - retrievedContext?: RetrievedContextAttribution; - // (undocumented) - segment: Segment; - // (undocumented) - web?: WebAttribution; -} - -// @public -export interface GroundingMetadata { - // @deprecated (undocumented) - groundingAttributions: GroundingAttribution[]; - // (undocumented) - retrievalQueries?: string[]; - // (undocumented) - webSearchQueries?: string[]; -} - -// @public -export enum HarmBlockMethod { - PROBABILITY = "PROBABILITY", - SEVERITY = "SEVERITY" -} - -// @public -export enum HarmBlockThreshold { - BLOCK_LOW_AND_ABOVE = "BLOCK_LOW_AND_ABOVE", - BLOCK_MEDIUM_AND_ABOVE = "BLOCK_MEDIUM_AND_ABOVE", - BLOCK_NONE = "BLOCK_NONE", - BLOCK_ONLY_HIGH = "BLOCK_ONLY_HIGH" -} - -// @public -export enum HarmCategory { - // (undocumented) - HARM_CATEGORY_DANGEROUS_CONTENT = "HARM_CATEGORY_DANGEROUS_CONTENT", - // (undocumented) - HARM_CATEGORY_HARASSMENT = "HARM_CATEGORY_HARASSMENT", - // (undocumented) - HARM_CATEGORY_HATE_SPEECH = "HARM_CATEGORY_HATE_SPEECH", - // (undocumented) - HARM_CATEGORY_SEXUALLY_EXPLICIT = "HARM_CATEGORY_SEXUALLY_EXPLICIT" -} - -// @public -export enum HarmProbability { - HIGH = "HIGH", - LOW = "LOW", - MEDIUM = "MEDIUM", - NEGLIGIBLE = "NEGLIGIBLE" -} - -// @public -export enum HarmSeverity { - HARM_SEVERITY_HIGH = "HARM_SEVERITY_HIGH", - HARM_SEVERITY_LOW = "HARM_SEVERITY_LOW", - HARM_SEVERITY_MEDIUM = "HARM_SEVERITY_MEDIUM", - HARM_SEVERITY_NEGLIGIBLE = "HARM_SEVERITY_NEGLIGIBLE", - HARM_SEVERITY_UNSUPPORTED = "HARM_SEVERITY_UNSUPPORTED" -} - -// @beta -export enum ImagenAspectRatio { - LANDSCAPE_16x9 = "16:9", - LANDSCAPE_3x4 = "3:4", - PORTRAIT_4x3 = "4:3", - PORTRAIT_9x16 = "9:16", - SQUARE = "1:1" -} - -// @public -export interface ImagenGCSImage { - gcsURI: string; - mimeType: string; -} - -// @beta -export interface ImagenGenerationConfig { - addWatermark?: boolean; - aspectRatio?: ImagenAspectRatio; - imageFormat?: ImagenImageFormat; - negativePrompt?: string; - numberOfImages?: number; -} - -// @beta -export interface ImagenGenerationResponse { - filteredReason?: string; - images: T[]; -} - -// @beta -export class ImagenImageFormat { - compressionQuality?: number; - static jpeg(compressionQuality?: number): ImagenImageFormat; - mimeType: string; - static png(): ImagenImageFormat; -} - -// @beta -export interface ImagenInlineImage { - bytesBase64Encoded: string; - mimeType: string; -} - -// @beta -export class ImagenModel extends AIModel { - constructor(ai: AI, modelParams: ImagenModelParams, requestOptions?: RequestOptions | undefined); - generateImages(prompt: string): Promise>; - // @internal - generateImagesGCS(prompt: string, gcsURI: string): Promise>; - generationConfig?: ImagenGenerationConfig; - // (undocumented) - requestOptions?: RequestOptions | undefined; - safetySettings?: ImagenSafetySettings; -} - -// @beta -export interface ImagenModelParams { - generationConfig?: ImagenGenerationConfig; - model: string; - safetySettings?: ImagenSafetySettings; -} - -// @beta -export enum ImagenPersonFilterLevel { - ALLOW_ADULT = "allow_adult", - ALLOW_ALL = "allow_all", - BLOCK_ALL = "dont_allow" -} - -// @beta -export enum ImagenSafetyFilterLevel { - BLOCK_LOW_AND_ABOVE = "block_low_and_above", - BLOCK_MEDIUM_AND_ABOVE = "block_medium_and_above", - BLOCK_NONE = "block_none", - BLOCK_ONLY_HIGH = "block_only_high" -} - -// @beta -export interface ImagenSafetySettings { - personFilterLevel?: ImagenPersonFilterLevel; - safetyFilterLevel?: ImagenSafetyFilterLevel; -} - -// @public -export interface InlineDataPart { - // (undocumented) - functionCall?: never; - // (undocumented) - functionResponse?: never; - // (undocumented) - inlineData: GenerativeContentBlob; - // (undocumented) - text?: never; - videoMetadata?: VideoMetadata; -} - -// @public -export class IntegerSchema extends Schema { - constructor(schemaParams?: SchemaParams); -} - -// @public -export enum Modality { - AUDIO = "AUDIO", - DOCUMENT = "DOCUMENT", - IMAGE = "IMAGE", - MODALITY_UNSPECIFIED = "MODALITY_UNSPECIFIED", - TEXT = "TEXT", - VIDEO = "VIDEO" -} - -// @public -export interface ModalityTokenCount { - modality: Modality; - tokenCount: number; -} - -// @public -export interface ModelParams extends BaseParams { - // (undocumented) - model: string; - // (undocumented) - systemInstruction?: string | Part | Content; - // (undocumented) - toolConfig?: ToolConfig; - // (undocumented) - tools?: Tool[]; -} - -// @public -export class NumberSchema extends Schema { - constructor(schemaParams?: SchemaParams); -} - -// @public -export class ObjectSchema extends Schema { - constructor(schemaParams: SchemaParams, properties: { - [k: string]: TypedSchema; - }, optionalProperties?: string[]); - // (undocumented) - optionalProperties: string[]; - // (undocumented) - properties: { - [k: string]: TypedSchema; - }; - // @internal (undocumented) - toJSON(): SchemaRequest; -} - -// @public -export interface ObjectSchemaInterface extends SchemaInterface { - // (undocumented) - optionalProperties?: string[]; - // (undocumented) - type: SchemaType.OBJECT; -} - -// @public -export type Part = TextPart | InlineDataPart | FunctionCallPart | FunctionResponsePart | FileDataPart; - -// @public -export const POSSIBLE_ROLES: readonly ["user", "model", "function", "system"]; - -// @public -export interface PromptFeedback { - // (undocumented) - blockReason?: BlockReason; - blockReasonMessage?: string; - // (undocumented) - safetyRatings: SafetyRating[]; -} - -// @public -export interface RequestOptions { - baseUrl?: string; - timeout?: number; -} - -// @beta -export const ResponseModality: { - readonly TEXT: "TEXT"; - readonly IMAGE: "IMAGE"; -}; - -// @beta -export type ResponseModality = (typeof ResponseModality)[keyof typeof ResponseModality]; - -// @public (undocumented) -export interface RetrievedContextAttribution { - // (undocumented) - title: string; - // (undocumented) - uri: string; -} - -// @public -export type Role = (typeof POSSIBLE_ROLES)[number]; - -// @public -export interface SafetyRating { - // (undocumented) - blocked: boolean; - // (undocumented) - category: HarmCategory; - // (undocumented) - probability: HarmProbability; - probabilityScore: number; - severity: HarmSeverity; - severityScore: number; -} - -// @public -export interface SafetySetting { - // (undocumented) - category: HarmCategory; - method?: HarmBlockMethod; - // (undocumented) - threshold: HarmBlockThreshold; -} - -// @public -export abstract class Schema implements SchemaInterface { - constructor(schemaParams: SchemaInterface); - [key: string]: unknown; - // (undocumented) - static array(arrayParams: SchemaParams & { - items: Schema; - }): ArraySchema; - // (undocumented) - static boolean(booleanParams?: SchemaParams): BooleanSchema; - description?: string; - // (undocumented) - static enumString(stringParams: SchemaParams & { - enum: string[]; - }): StringSchema; - example?: unknown; - format?: string; - // (undocumented) - static integer(integerParams?: SchemaParams): IntegerSchema; - nullable: boolean; - // (undocumented) - static number(numberParams?: SchemaParams): NumberSchema; - // (undocumented) - static object(objectParams: SchemaParams & { - properties: { - [k: string]: Schema; - }; - optionalProperties?: string[]; - }): ObjectSchema; - // (undocumented) - static string(stringParams?: SchemaParams): StringSchema; - // @internal - toJSON(): SchemaRequest; - type: SchemaType; -} - -// @public -export interface SchemaInterface extends SchemaShared { - type: SchemaType; -} - -// @public -export interface SchemaParams extends SchemaShared { -} - -// @public -export interface SchemaRequest extends SchemaShared { - required?: string[]; - type: SchemaType; -} - -// @public -export interface SchemaShared { - // (undocumented) - [key: string]: unknown; - description?: string; - enum?: string[]; - example?: unknown; - format?: string; - items?: T; - nullable?: boolean; - properties?: { - [k: string]: T; - }; -} - -// @public -export enum SchemaType { - ARRAY = "array", - BOOLEAN = "boolean", - INTEGER = "integer", - NUMBER = "number", - OBJECT = "object", - STRING = "string" -} - -// @public (undocumented) -export interface Segment { - // (undocumented) - endIndex: number; - // (undocumented) - partIndex: number; - // (undocumented) - startIndex: number; -} - -// @public -export interface StartChatParams extends BaseParams { - // (undocumented) - history?: Content[]; - // (undocumented) - systemInstruction?: string | Part | Content; - // (undocumented) - toolConfig?: ToolConfig; - // (undocumented) - tools?: Tool[]; -} - -// @public -export class StringSchema extends Schema { - constructor(schemaParams?: SchemaParams, enumValues?: string[]); - // (undocumented) - enum?: string[]; - // @internal (undocumented) - toJSON(): SchemaRequest; -} - -// @public -export interface TextPart { - // (undocumented) - functionCall?: never; - // (undocumented) - functionResponse?: never; - // (undocumented) - inlineData?: never; - // (undocumented) - text: string; -} - -// @public -export type Tool = FunctionDeclarationsTool; - -// @public -export interface ToolConfig { - // (undocumented) - functionCallingConfig?: FunctionCallingConfig; -} - -// @public -export type TypedSchema = IntegerSchema | NumberSchema | StringSchema | BooleanSchema | ObjectSchema | ArraySchema; - -// @public -export interface UsageMetadata { - // (undocumented) - candidatesTokenCount: number; - // (undocumented) - candidatesTokensDetails?: ModalityTokenCount[]; - // (undocumented) - promptTokenCount: number; - // (undocumented) - promptTokensDetails?: ModalityTokenCount[]; - // (undocumented) - totalTokenCount: number; -} - -// @public @deprecated (undocumented) -export type VertexAI = AI; - -// @public -export class VertexAIBackend extends Backend { - constructor(location?: string); - readonly location: string; -} - -// @public @deprecated (undocumented) -export const VertexAIError: typeof AIError; - -// @public @deprecated (undocumented) -export const VertexAIModel: typeof AIModel; - -// @public -export interface VertexAIOptions { - // (undocumented) - location?: string; -} - -// @public -export interface VideoMetadata { - endOffset: string; - startOffset: string; -} - -// @public (undocumented) -export interface WebAttribution { - // (undocumented) - title: string; - // (undocumented) - uri: string; -} - - -``` diff --git a/common/api-review/vertexai.api.md b/common/api-review/vertexai.api.md index 42da114f9e9..f9cf3dac5bd 100644 --- a/common/api-review/vertexai.api.md +++ b/common/api-review/vertexai.api.md @@ -9,62 +9,6 @@ import { FirebaseApp } from '@firebase/app'; import { FirebaseAuthTokenData } from '@firebase/auth-interop-types'; import { FirebaseError } from '@firebase/util'; -// @public -export interface AI { - app: FirebaseApp; - backend: Backend; - // @deprecated - location: string; -} - -// @public -export class AIError extends FirebaseError { - constructor(code: AIErrorCode, message: string, customErrorData?: CustomErrorData | undefined); - // (undocumented) - readonly code: AIErrorCode; - // (undocumented) - readonly customErrorData?: CustomErrorData | undefined; -} - -// @public -const enum AIErrorCode { - API_NOT_ENABLED = "api-not-enabled", - ERROR = "error", - FETCH_ERROR = "fetch-error", - INVALID_CONTENT = "invalid-content", - INVALID_SCHEMA = "invalid-schema", - NO_API_KEY = "no-api-key", - NO_APP_ID = "no-app-id", - NO_MODEL = "no-model", - NO_PROJECT_ID = "no-project-id", - PARSE_FAILED = "parse-failed", - REQUEST_ERROR = "request-error", - RESPONSE_ERROR = "response-error", - UNSUPPORTED = "unsupported" -} - -export { AIErrorCode } - -export { AIErrorCode as VertexAIErrorCode } - -// @public -export abstract class AIModel { - // @internal - protected constructor(ai: AI, modelName: string); - // Warning: (ae-forgotten-export) The symbol "ApiSettings" needs to be exported by the entry point index.d.ts - // - // @internal (undocumented) - protected _apiSettings: ApiSettings; - readonly model: string; - // @internal - static normalizeModelName(modelName: string, backendType: BackendType): string; - } - -// @public -export interface AIOptions { - backend: Backend; -} - // @public export class ArraySchema extends Schema { constructor(schemaParams: SchemaParams, items: TypedSchema); @@ -74,21 +18,6 @@ export class ArraySchema extends Schema { toJSON(): SchemaRequest; } -// @public -export abstract class Backend { - protected constructor(type: BackendType); - readonly backendType: BackendType; -} - -// @public -export const BackendType: { - readonly VERTEX_AI: "VERTEX_AI"; - readonly GOOGLE_AI: "GOOGLE_AI"; -}; - -// @public -export type BackendType = (typeof BackendType)[keyof typeof BackendType]; - // @public export interface BaseParams { // (undocumented) @@ -112,6 +41,7 @@ export class BooleanSchema extends Schema { // @public export class ChatSession { + // Warning: (ae-forgotten-export) The symbol "ApiSettings" needs to be exported by the entry point index.d.ts constructor(apiSettings: ApiSettings, model: string, params?: StartChatParams | undefined, requestOptions?: RequestOptions | undefined); getHistory(): Promise; // (undocumented) @@ -130,9 +60,11 @@ export interface Citation { endIndex?: number; // (undocumented) license?: string; + // (undocumented) publicationDate?: Date_2; // (undocumented) startIndex?: number; + // (undocumented) title?: string; // (undocumented) uri?: string; @@ -394,8 +326,8 @@ export interface GenerativeContentBlob { } // @public -export class GenerativeModel extends AIModel { - constructor(ai: AI, modelParams: ModelParams, requestOptions?: RequestOptions); +export class GenerativeModel extends VertexAIModel { + constructor(vertexAI: VertexAI, modelParams: ModelParams, requestOptions?: RequestOptions); countTokens(request: CountTokensRequest | string | Array): Promise; generateContent(request: GenerateContentRequest | string | Array): Promise; generateContentStream(request: GenerateContentRequest | string | Array): Promise; @@ -415,76 +347,14 @@ export class GenerativeModel extends AIModel { } // @public -export function getAI(app?: FirebaseApp, options?: AIOptions): AI; - -// @public -export function getGenerativeModel(ai: AI, modelParams: ModelParams, requestOptions?: RequestOptions): GenerativeModel; +export function getGenerativeModel(vertexAI: VertexAI, modelParams: ModelParams, requestOptions?: RequestOptions): GenerativeModel; // @beta -export function getImagenModel(ai: AI, modelParams: ImagenModelParams, requestOptions?: RequestOptions): ImagenModel; +export function getImagenModel(vertexAI: VertexAI, modelParams: ImagenModelParams, requestOptions?: RequestOptions): ImagenModel; // @public export function getVertexAI(app?: FirebaseApp, options?: VertexAIOptions): VertexAI; -// @public -export class GoogleAIBackend extends Backend { - constructor(); -} - -// Warning: (ae-internal-missing-underscore) The name "GoogleAICitationMetadata" should be prefixed with an underscore because the declaration is marked as @internal -// -// @internal (undocumented) -export interface GoogleAICitationMetadata { - // (undocumented) - citationSources: Citation[]; -} - -// Warning: (ae-internal-missing-underscore) The name "GoogleAICountTokensRequest" should be prefixed with an underscore because the declaration is marked as @internal -// -// @internal (undocumented) -export interface GoogleAICountTokensRequest { - // (undocumented) - generateContentRequest: { - model: string; - contents: Content[]; - systemInstruction?: string | Part | Content; - tools?: Tool[]; - generationConfig?: GenerationConfig; - }; -} - -// Warning: (ae-internal-missing-underscore) The name "GoogleAIGenerateContentCandidate" should be prefixed with an underscore because the declaration is marked as @internal -// -// @internal (undocumented) -export interface GoogleAIGenerateContentCandidate { - // (undocumented) - citationMetadata?: GoogleAICitationMetadata; - // (undocumented) - content: Content; - // (undocumented) - finishMessage?: string; - // (undocumented) - finishReason?: FinishReason; - // (undocumented) - groundingMetadata?: GroundingMetadata; - // (undocumented) - index: number; - // (undocumented) - safetyRatings?: SafetyRating[]; -} - -// Warning: (ae-internal-missing-underscore) The name "GoogleAIGenerateContentResponse" should be prefixed with an underscore because the declaration is marked as @internal -// -// @internal (undocumented) -export interface GoogleAIGenerateContentResponse { - // (undocumented) - candidates?: GoogleAIGenerateContentCandidate[]; - // (undocumented) - promptFeedback?: PromptFeedback; - // (undocumented) - usageMetadata?: UsageMetadata; -} - // @public @deprecated (undocumented) export interface GroundingAttribution { // (undocumented) @@ -507,7 +377,7 @@ export interface GroundingMetadata { webSearchQueries?: string[]; } -// @public +// @public (undocumented) export enum HarmBlockMethod { PROBABILITY = "PROBABILITY", SEVERITY = "SEVERITY" @@ -546,8 +416,7 @@ export enum HarmSeverity { HARM_SEVERITY_HIGH = "HARM_SEVERITY_HIGH", HARM_SEVERITY_LOW = "HARM_SEVERITY_LOW", HARM_SEVERITY_MEDIUM = "HARM_SEVERITY_MEDIUM", - HARM_SEVERITY_NEGLIGIBLE = "HARM_SEVERITY_NEGLIGIBLE", - HARM_SEVERITY_UNSUPPORTED = "HARM_SEVERITY_UNSUPPORTED" + HARM_SEVERITY_NEGLIGIBLE = "HARM_SEVERITY_NEGLIGIBLE" } // @beta @@ -595,8 +464,8 @@ export interface ImagenInlineImage { } // @beta -export class ImagenModel extends AIModel { - constructor(ai: AI, modelParams: ImagenModelParams, requestOptions?: RequestOptions | undefined); +export class ImagenModel extends VertexAIModel { + constructor(vertexAI: VertexAI, modelParams: ImagenModelParams, requestOptions?: RequestOptions | undefined); generateImages(prompt: string): Promise>; // @internal generateImagesGCS(prompt: string, gcsURI: string): Promise>; @@ -718,6 +587,7 @@ export const POSSIBLE_ROLES: readonly ["user", "model", "function", "system"]; export interface PromptFeedback { // (undocumented) blockReason?: BlockReason; + // (undocumented) blockReasonMessage?: string; // (undocumented) safetyRatings: SafetyRating[]; @@ -757,8 +627,11 @@ export interface SafetyRating { category: HarmCategory; // (undocumented) probability: HarmProbability; + // (undocumented) probabilityScore: number; + // (undocumented) severity: HarmSeverity; + // (undocumented) severityScore: number; } @@ -766,6 +639,7 @@ export interface SafetyRating { export interface SafetySetting { // (undocumented) category: HarmCategory; + // (undocumented) method?: HarmBlockMethod; // (undocumented) threshold: HarmBlockThreshold; @@ -917,19 +791,46 @@ export interface UsageMetadata { } // @public -export type VertexAI = AI; +export interface VertexAI { + app: FirebaseApp; + // (undocumented) + location: string; +} // @public -export class VertexAIBackend extends Backend { - constructor(location?: string); - readonly location: string; +export class VertexAIError extends FirebaseError { + constructor(code: VertexAIErrorCode, message: string, customErrorData?: CustomErrorData | undefined); + // (undocumented) + readonly code: VertexAIErrorCode; + // (undocumented) + readonly customErrorData?: CustomErrorData | undefined; } // @public -export const VertexAIError: typeof AIError; +export const enum VertexAIErrorCode { + API_NOT_ENABLED = "api-not-enabled", + ERROR = "error", + FETCH_ERROR = "fetch-error", + INVALID_CONTENT = "invalid-content", + INVALID_SCHEMA = "invalid-schema", + NO_API_KEY = "no-api-key", + NO_APP_ID = "no-app-id", + NO_MODEL = "no-model", + NO_PROJECT_ID = "no-project-id", + PARSE_FAILED = "parse-failed", + REQUEST_ERROR = "request-error", + RESPONSE_ERROR = "response-error" +} // @public -export const VertexAIModel: typeof AIModel; +export abstract class VertexAIModel { + // @internal + protected constructor(vertexAI: VertexAI, modelName: string); + // @internal (undocumented) + protected _apiSettings: ApiSettings; + readonly model: string; + static normalizeModelName(modelName: string): string; +} // @public export interface VertexAIOptions { diff --git a/docs-devsite/_toc.yaml b/docs-devsite/_toc.yaml index b77a6b5910e..665222edb9d 100644 --- a/docs-devsite/_toc.yaml +++ b/docs-devsite/_toc.yaml @@ -1,155 +1,6 @@ toc: - title: firebase path: /docs/reference/js/index -- title: ai - path: /docs/reference/js/ai.md - section: - - title: AI - path: /docs/reference/js/ai.ai.md - - title: AIError - path: /docs/reference/js/ai.aierror.md - - title: AIModel - path: /docs/reference/js/ai.aimodel.md - - title: AIOptions - path: /docs/reference/js/ai.aioptions.md - - title: ArraySchema - path: /docs/reference/js/ai.arrayschema.md - - title: Backend - path: /docs/reference/js/ai.backend.md - - title: BaseParams - path: /docs/reference/js/ai.baseparams.md - - title: BooleanSchema - path: /docs/reference/js/ai.booleanschema.md - - title: ChatSession - path: /docs/reference/js/ai.chatsession.md - - title: Citation - path: /docs/reference/js/ai.citation.md - - title: CitationMetadata - path: /docs/reference/js/ai.citationmetadata.md - - title: Content - path: /docs/reference/js/ai.content.md - - title: CountTokensRequest - path: /docs/reference/js/ai.counttokensrequest.md - - title: CountTokensResponse - path: /docs/reference/js/ai.counttokensresponse.md - - title: CustomErrorData - path: /docs/reference/js/ai.customerrordata.md - - title: Date_2 - path: /docs/reference/js/ai.date_2.md - - title: EnhancedGenerateContentResponse - path: /docs/reference/js/ai.enhancedgeneratecontentresponse.md - - title: ErrorDetails - path: /docs/reference/js/ai.errordetails.md - - title: FileData - path: /docs/reference/js/ai.filedata.md - - title: FileDataPart - path: /docs/reference/js/ai.filedatapart.md - - title: FunctionCall - path: /docs/reference/js/ai.functioncall.md - - title: FunctionCallingConfig - path: /docs/reference/js/ai.functioncallingconfig.md - - title: FunctionCallPart - path: /docs/reference/js/ai.functioncallpart.md - - title: FunctionDeclaration - path: /docs/reference/js/ai.functiondeclaration.md - - title: FunctionDeclarationsTool - path: /docs/reference/js/ai.functiondeclarationstool.md - - title: FunctionResponse - path: /docs/reference/js/ai.functionresponse.md - - title: FunctionResponsePart - path: /docs/reference/js/ai.functionresponsepart.md - - title: GenerateContentCandidate - path: /docs/reference/js/ai.generatecontentcandidate.md - - title: GenerateContentRequest - path: /docs/reference/js/ai.generatecontentrequest.md - - title: GenerateContentResponse - path: /docs/reference/js/ai.generatecontentresponse.md - - title: GenerateContentResult - path: /docs/reference/js/ai.generatecontentresult.md - - title: GenerateContentStreamResult - path: /docs/reference/js/ai.generatecontentstreamresult.md - - title: GenerationConfig - path: /docs/reference/js/ai.generationconfig.md - - title: GenerativeContentBlob - path: /docs/reference/js/ai.generativecontentblob.md - - title: GenerativeModel - path: /docs/reference/js/ai.generativemodel.md - - title: GoogleAIBackend - path: /docs/reference/js/ai.googleaibackend.md - - title: GroundingAttribution - path: /docs/reference/js/ai.groundingattribution.md - - title: GroundingMetadata - path: /docs/reference/js/ai.groundingmetadata.md - - title: ImagenGCSImage - path: /docs/reference/js/ai.imagengcsimage.md - - title: ImagenGenerationConfig - path: /docs/reference/js/ai.imagengenerationconfig.md - - title: ImagenGenerationResponse - path: /docs/reference/js/ai.imagengenerationresponse.md - - title: ImagenImageFormat - path: /docs/reference/js/ai.imagenimageformat.md - - title: ImagenInlineImage - path: /docs/reference/js/ai.imageninlineimage.md - - title: ImagenModel - path: /docs/reference/js/ai.imagenmodel.md - - title: ImagenModelParams - path: /docs/reference/js/ai.imagenmodelparams.md - - title: ImagenSafetySettings - path: /docs/reference/js/ai.imagensafetysettings.md - - title: InlineDataPart - path: /docs/reference/js/ai.inlinedatapart.md - - title: IntegerSchema - path: /docs/reference/js/ai.integerschema.md - - title: ModalityTokenCount - path: /docs/reference/js/ai.modalitytokencount.md - - title: ModelParams - path: /docs/reference/js/ai.modelparams.md - - title: NumberSchema - path: /docs/reference/js/ai.numberschema.md - - title: ObjectSchema - path: /docs/reference/js/ai.objectschema.md - - title: ObjectSchemaInterface - path: /docs/reference/js/ai.objectschemainterface.md - - title: PromptFeedback - path: /docs/reference/js/ai.promptfeedback.md - - title: RequestOptions - path: /docs/reference/js/ai.requestoptions.md - - title: RetrievedContextAttribution - path: /docs/reference/js/ai.retrievedcontextattribution.md - - title: SafetyRating - path: /docs/reference/js/ai.safetyrating.md - - title: SafetySetting - path: /docs/reference/js/ai.safetysetting.md - - title: Schema - path: /docs/reference/js/ai.schema.md - - title: SchemaInterface - path: /docs/reference/js/ai.schemainterface.md - - title: SchemaParams - path: /docs/reference/js/ai.schemaparams.md - - title: SchemaRequest - path: /docs/reference/js/ai.schemarequest.md - - title: SchemaShared - path: /docs/reference/js/ai.schemashared.md - - title: Segment - path: /docs/reference/js/ai.segment.md - - title: StartChatParams - path: /docs/reference/js/ai.startchatparams.md - - title: StringSchema - path: /docs/reference/js/ai.stringschema.md - - title: TextPart - path: /docs/reference/js/ai.textpart.md - - title: ToolConfig - path: /docs/reference/js/ai.toolconfig.md - - title: UsageMetadata - path: /docs/reference/js/ai.usagemetadata.md - - title: VertexAIBackend - path: /docs/reference/js/ai.vertexaibackend.md - - title: VertexAIOptions - path: /docs/reference/js/ai.vertexaioptions.md - - title: VideoMetadata - path: /docs/reference/js/ai.videometadata.md - - title: WebAttribution - path: /docs/reference/js/ai.webattribution.md - title: analytics path: /docs/reference/js/analytics.md section: @@ -618,3 +469,144 @@ toc: path: /docs/reference/js/storage.uploadtask.md - title: UploadTaskSnapshot path: /docs/reference/js/storage.uploadtasksnapshot.md +- title: vertexai + path: /docs/reference/js/vertexai.md + section: + - title: ArraySchema + path: /docs/reference/js/vertexai.arrayschema.md + - title: BaseParams + path: /docs/reference/js/vertexai.baseparams.md + - title: BooleanSchema + path: /docs/reference/js/vertexai.booleanschema.md + - title: ChatSession + path: /docs/reference/js/vertexai.chatsession.md + - title: Citation + path: /docs/reference/js/vertexai.citation.md + - title: CitationMetadata + path: /docs/reference/js/vertexai.citationmetadata.md + - title: Content + path: /docs/reference/js/vertexai.content.md + - title: CountTokensRequest + path: /docs/reference/js/vertexai.counttokensrequest.md + - title: CountTokensResponse + path: /docs/reference/js/vertexai.counttokensresponse.md + - title: CustomErrorData + path: /docs/reference/js/vertexai.customerrordata.md + - title: Date_2 + path: /docs/reference/js/vertexai.date_2.md + - title: EnhancedGenerateContentResponse + path: /docs/reference/js/vertexai.enhancedgeneratecontentresponse.md + - title: ErrorDetails + path: /docs/reference/js/vertexai.errordetails.md + - title: FileData + path: /docs/reference/js/vertexai.filedata.md + - title: FileDataPart + path: /docs/reference/js/vertexai.filedatapart.md + - title: FunctionCall + path: /docs/reference/js/vertexai.functioncall.md + - title: FunctionCallingConfig + path: /docs/reference/js/vertexai.functioncallingconfig.md + - title: FunctionCallPart + path: /docs/reference/js/vertexai.functioncallpart.md + - title: FunctionDeclaration + path: /docs/reference/js/vertexai.functiondeclaration.md + - title: FunctionDeclarationsTool + path: /docs/reference/js/vertexai.functiondeclarationstool.md + - title: FunctionResponse + path: /docs/reference/js/vertexai.functionresponse.md + - title: FunctionResponsePart + path: /docs/reference/js/vertexai.functionresponsepart.md + - title: GenerateContentCandidate + path: /docs/reference/js/vertexai.generatecontentcandidate.md + - title: GenerateContentRequest + path: /docs/reference/js/vertexai.generatecontentrequest.md + - title: GenerateContentResponse + path: /docs/reference/js/vertexai.generatecontentresponse.md + - title: GenerateContentResult + path: /docs/reference/js/vertexai.generatecontentresult.md + - title: GenerateContentStreamResult + path: /docs/reference/js/vertexai.generatecontentstreamresult.md + - title: GenerationConfig + path: /docs/reference/js/vertexai.generationconfig.md + - title: GenerativeContentBlob + path: /docs/reference/js/vertexai.generativecontentblob.md + - title: GenerativeModel + path: /docs/reference/js/vertexai.generativemodel.md + - title: GroundingAttribution + path: /docs/reference/js/vertexai.groundingattribution.md + - title: GroundingMetadata + path: /docs/reference/js/vertexai.groundingmetadata.md + - title: ImagenGCSImage + path: /docs/reference/js/vertexai.imagengcsimage.md + - title: ImagenGenerationConfig + path: /docs/reference/js/vertexai.imagengenerationconfig.md + - title: ImagenGenerationResponse + path: /docs/reference/js/vertexai.imagengenerationresponse.md + - title: ImagenImageFormat + path: /docs/reference/js/vertexai.imagenimageformat.md + - title: ImagenInlineImage + path: /docs/reference/js/vertexai.imageninlineimage.md + - title: ImagenModel + path: /docs/reference/js/vertexai.imagenmodel.md + - title: ImagenModelParams + path: /docs/reference/js/vertexai.imagenmodelparams.md + - title: ImagenSafetySettings + path: /docs/reference/js/vertexai.imagensafetysettings.md + - title: InlineDataPart + path: /docs/reference/js/vertexai.inlinedatapart.md + - title: IntegerSchema + path: /docs/reference/js/vertexai.integerschema.md + - title: ModalityTokenCount + path: /docs/reference/js/vertexai.modalitytokencount.md + - title: ModelParams + path: /docs/reference/js/vertexai.modelparams.md + - title: NumberSchema + path: /docs/reference/js/vertexai.numberschema.md + - title: ObjectSchema + path: /docs/reference/js/vertexai.objectschema.md + - title: ObjectSchemaInterface + path: /docs/reference/js/vertexai.objectschemainterface.md + - title: PromptFeedback + path: /docs/reference/js/vertexai.promptfeedback.md + - title: RequestOptions + path: /docs/reference/js/vertexai.requestoptions.md + - title: RetrievedContextAttribution + path: /docs/reference/js/vertexai.retrievedcontextattribution.md + - title: SafetyRating + path: /docs/reference/js/vertexai.safetyrating.md + - title: SafetySetting + path: /docs/reference/js/vertexai.safetysetting.md + - title: Schema + path: /docs/reference/js/vertexai.schema.md + - title: SchemaInterface + path: /docs/reference/js/vertexai.schemainterface.md + - title: SchemaParams + path: /docs/reference/js/vertexai.schemaparams.md + - title: SchemaRequest + path: /docs/reference/js/vertexai.schemarequest.md + - title: SchemaShared + path: /docs/reference/js/vertexai.schemashared.md + - title: Segment + path: /docs/reference/js/vertexai.segment.md + - title: StartChatParams + path: /docs/reference/js/vertexai.startchatparams.md + - title: StringSchema + path: /docs/reference/js/vertexai.stringschema.md + - title: TextPart + path: /docs/reference/js/vertexai.textpart.md + - title: ToolConfig + path: /docs/reference/js/vertexai.toolconfig.md + - title: UsageMetadata + path: /docs/reference/js/vertexai.usagemetadata.md + - title: VertexAI + path: /docs/reference/js/vertexai.vertexai.md + - title: VertexAIError + path: /docs/reference/js/vertexai.vertexaierror.md + - title: VertexAIModel + path: /docs/reference/js/vertexai.vertexaimodel.md + - title: VertexAIOptions + path: /docs/reference/js/vertexai.vertexaioptions.md + - title: VideoMetadata + path: /docs/reference/js/vertexai.videometadata.md + - title: WebAttribution + path: /docs/reference/js/vertexai.webattribution.md diff --git a/docs-devsite/ai.ai.md b/docs-devsite/ai.ai.md deleted file mode 100644 index d4127ffb7e8..00000000000 --- a/docs-devsite/ai.ai.md +++ /dev/null @@ -1,64 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# AI interface -An instance of the Firebase AI SDK. - -Do not create this instance directly. Instead, use [getAI()](./ai.md#getai_a94a413). - -Signature: - -```typescript -export interface AI -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [app](./ai.ai.md#aiapp) | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [AI](./ai.ai.md#ai_interface) instance is associated with. | -| [backend](./ai.ai.md#aibackend) | [Backend](./ai.backend.md#backend_class) | A [Backend](./ai.backend.md#backend_class) instance that specifies the configuration for the target backend, either the Gemini Developer API (using [GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)) or the Vertex AI Gemini API (using [VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). | -| [location](./ai.ai.md#ailocation) | string | | - -## AI.app - -The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [AI](./ai.ai.md#ai_interface) instance is associated with. - -Signature: - -```typescript -app: FirebaseApp; -``` - -## AI.backend - -A [Backend](./ai.backend.md#backend_class) instance that specifies the configuration for the target backend, either the Gemini Developer API (using [GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)) or the Vertex AI Gemini API (using [VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). - -Signature: - -```typescript -backend: Backend; -``` - -## AI.location - -> Warning: This API is now obsolete. -> -> use `AI.backend.location` instead. -> -> The location configured for this AI service instance, relevant for Vertex AI backends. -> - -Signature: - -```typescript -location: string; -``` diff --git a/docs-devsite/ai.aierror.md b/docs-devsite/ai.aierror.md deleted file mode 100644 index cf2d7e2b4c1..00000000000 --- a/docs-devsite/ai.aierror.md +++ /dev/null @@ -1,67 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# AIError class -Error class for the Firebase AI SDK. - -Signature: - -```typescript -export declare class AIError extends FirebaseError -``` -Extends: [FirebaseError](./util.firebaseerror.md#firebaseerror_class) - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(code, message, customErrorData)](./ai.aierror.md#aierrorconstructor) | | Constructs a new instance of the AIError class. | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [code](./ai.aierror.md#aierrorcode) | | [AIErrorCode](./ai.md#aierrorcode) | | -| [customErrorData](./ai.aierror.md#aierrorcustomerrordata) | | [CustomErrorData](./ai.customerrordata.md#customerrordata_interface) \| undefined | | - -## AIError.(constructor) - -Constructs a new instance of the `AIError` class. - -Signature: - -```typescript -constructor(code: AIErrorCode, message: string, customErrorData?: CustomErrorData | undefined); -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| code | [AIErrorCode](./ai.md#aierrorcode) | The error code from [AIErrorCode](./ai.md#aierrorcode). | -| message | string | A human-readable message describing the error. | -| customErrorData | [CustomErrorData](./ai.customerrordata.md#customerrordata_interface) \| undefined | Optional error data. | - -## AIError.code - -Signature: - -```typescript -readonly code: AIErrorCode; -``` - -## AIError.customErrorData - -Signature: - -```typescript -readonly customErrorData?: CustomErrorData | undefined; -``` diff --git a/docs-devsite/ai.aimodel.md b/docs-devsite/ai.aimodel.md deleted file mode 100644 index d8910c11dc5..00000000000 --- a/docs-devsite/ai.aimodel.md +++ /dev/null @@ -1,39 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# AIModel class -Base class for Firebase AI model APIs. - -Instances of this class are associated with a specific Firebase AI [Backend](./ai.backend.md#backend_class) and provide methods for interacting with the configured generative model. - -The constructor for this class is marked as internal. Third-party code should not call the constructor directly or create subclasses that extend the `AIModel` class. - -Signature: - -```typescript -export declare abstract class AIModel -``` - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [model](./ai.aimodel.md#aimodelmodel) | | string | The fully qualified model resource name to use for generating images (for example, publishers/google/models/imagen-3.0-generate-002). | - -## AIModel.model - -The fully qualified model resource name to use for generating images (for example, `publishers/google/models/imagen-3.0-generate-002`). - -Signature: - -```typescript -readonly model: string; -``` diff --git a/docs-devsite/ai.aioptions.md b/docs-devsite/ai.aioptions.md deleted file mode 100644 index a092046900b..00000000000 --- a/docs-devsite/ai.aioptions.md +++ /dev/null @@ -1,35 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# AIOptions interface -Options for initializing the AI service using [getAI()](./ai.md#getai_a94a413). This allows specifying which backend to use (Vertex AI Gemini API or Gemini Developer API) and configuring its specific options (like location for Vertex AI). - -Signature: - -```typescript -export interface AIOptions -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [backend](./ai.aioptions.md#aioptionsbackend) | [Backend](./ai.backend.md#backend_class) | The backend configuration to use for the AI service instance. | - -## AIOptions.backend - -The backend configuration to use for the AI service instance. - -Signature: - -```typescript -backend: Backend; -``` diff --git a/docs-devsite/ai.backend.md b/docs-devsite/ai.backend.md deleted file mode 100644 index 967c1de19de..00000000000 --- a/docs-devsite/ai.backend.md +++ /dev/null @@ -1,57 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# Backend class -Abstract base class representing the configuration for an AI service backend. This class should not be instantiated directly. Use its subclasses; [GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class) for the Gemini Developer API (via [Google AI](https://ai.google/)), and [VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class) for the Vertex AI Gemini API. - -Signature: - -```typescript -export declare abstract class Backend -``` - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(type)](./ai.backend.md#backendconstructor) | | Protected constructor for use by subclasses. | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [backendType](./ai.backend.md#backendbackendtype) | | [BackendType](./ai.md#backendtype) | Specifies the backend type. | - -## Backend.(constructor) - -Protected constructor for use by subclasses. - -Signature: - -```typescript -protected constructor(type: BackendType); -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| type | [BackendType](./ai.md#backendtype) | The backend type. | - -## Backend.backendType - -Specifies the backend type. - -Signature: - -```typescript -readonly backendType: BackendType; -``` diff --git a/docs-devsite/ai.citation.md b/docs-devsite/ai.citation.md deleted file mode 100644 index 3ed9dddc70d..00000000000 --- a/docs-devsite/ai.citation.md +++ /dev/null @@ -1,86 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# Citation interface -A single citation. - -Signature: - -```typescript -export interface Citation -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [endIndex](./ai.citation.md#citationendindex) | number | | -| [license](./ai.citation.md#citationlicense) | string | | -| [publicationDate](./ai.citation.md#citationpublicationdate) | Date | The publication date of the cited source, if available.This property is only supported in the Vertex AI Gemini API ([VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). | -| [startIndex](./ai.citation.md#citationstartindex) | number | | -| [title](./ai.citation.md#citationtitle) | string | The title of the cited source, if available.This property is only supported in the Vertex AI Gemini API ([VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). | -| [uri](./ai.citation.md#citationuri) | string | | - -## Citation.endIndex - -Signature: - -```typescript -endIndex?: number; -``` - -## Citation.license - -Signature: - -```typescript -license?: string; -``` - -## Citation.publicationDate - -The publication date of the cited source, if available. - -This property is only supported in the Vertex AI Gemini API ([VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). - -Signature: - -```typescript -publicationDate?: Date; -``` - -## Citation.startIndex - -Signature: - -```typescript -startIndex?: number; -``` - -## Citation.title - -The title of the cited source, if available. - -This property is only supported in the Vertex AI Gemini API ([VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). - -Signature: - -```typescript -title?: string; -``` - -## Citation.uri - -Signature: - -```typescript -uri?: string; -``` diff --git a/docs-devsite/ai.counttokensresponse.md b/docs-devsite/ai.counttokensresponse.md deleted file mode 100644 index 71e64d885d8..00000000000 --- a/docs-devsite/ai.counttokensresponse.md +++ /dev/null @@ -1,59 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# CountTokensResponse interface -Response from calling [GenerativeModel.countTokens()](./ai.generativemodel.md#generativemodelcounttokens). - -Signature: - -```typescript -export interface CountTokensResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [promptTokensDetails](./ai.counttokensresponse.md#counttokensresponseprompttokensdetails) | [ModalityTokenCount](./ai.modalitytokencount.md#modalitytokencount_interface)\[\] | The breakdown, by modality, of how many tokens are consumed by the prompt. | -| [totalBillableCharacters](./ai.counttokensresponse.md#counttokensresponsetotalbillablecharacters) | number | The total number of billable characters counted across all instances from the request.This property is only supported when using the Vertex AI Gemini API ([VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). When using the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)), this property is not supported and will default to 0. | -| [totalTokens](./ai.counttokensresponse.md#counttokensresponsetotaltokens) | number | The total number of tokens counted across all instances from the request. | - -## CountTokensResponse.promptTokensDetails - -The breakdown, by modality, of how many tokens are consumed by the prompt. - -Signature: - -```typescript -promptTokensDetails?: ModalityTokenCount[]; -``` - -## CountTokensResponse.totalBillableCharacters - -The total number of billable characters counted across all instances from the request. - -This property is only supported when using the Vertex AI Gemini API ([VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). When using the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)), this property is not supported and will default to 0. - -Signature: - -```typescript -totalBillableCharacters?: number; -``` - -## CountTokensResponse.totalTokens - -The total number of tokens counted across all instances from the request. - -Signature: - -```typescript -totalTokens: number; -``` diff --git a/docs-devsite/ai.enhancedgeneratecontentresponse.md b/docs-devsite/ai.enhancedgeneratecontentresponse.md deleted file mode 100644 index 330dc10f322..00000000000 --- a/docs-devsite/ai.enhancedgeneratecontentresponse.md +++ /dev/null @@ -1,56 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# EnhancedGenerateContentResponse interface -Response object wrapped with helper methods. - -Signature: - -```typescript -export interface EnhancedGenerateContentResponse extends GenerateContentResponse -``` -Extends: [GenerateContentResponse](./ai.generatecontentresponse.md#generatecontentresponse_interface) - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [functionCalls](./ai.enhancedgeneratecontentresponse.md#enhancedgeneratecontentresponsefunctioncalls) | () => [FunctionCall](./ai.functioncall.md#functioncall_interface)\[\] \| undefined | | -| [inlineDataParts](./ai.enhancedgeneratecontentresponse.md#enhancedgeneratecontentresponseinlinedataparts) | () => [InlineDataPart](./ai.inlinedatapart.md#inlinedatapart_interface)\[\] \| undefined | Aggregates and returns all [InlineDataPart](./ai.inlinedatapart.md#inlinedatapart_interface)s from the [GenerateContentResponse](./ai.generatecontentresponse.md#generatecontentresponse_interface)'s first candidate. | -| [text](./ai.enhancedgeneratecontentresponse.md#enhancedgeneratecontentresponsetext) | () => string | Returns the text string from the response, if available. Throws if the prompt or candidate was blocked. | - -## EnhancedGenerateContentResponse.functionCalls - -Signature: - -```typescript -functionCalls: () => FunctionCall[] | undefined; -``` - -## EnhancedGenerateContentResponse.inlineDataParts - -Aggregates and returns all [InlineDataPart](./ai.inlinedatapart.md#inlinedatapart_interface)s from the [GenerateContentResponse](./ai.generatecontentresponse.md#generatecontentresponse_interface)'s first candidate. - -Signature: - -```typescript -inlineDataParts: () => InlineDataPart[] | undefined; -``` - -## EnhancedGenerateContentResponse.text - -Returns the text string from the response, if available. Throws if the prompt or candidate was blocked. - -Signature: - -```typescript -text: () => string; -``` diff --git a/docs-devsite/ai.functiondeclarationstool.md b/docs-devsite/ai.functiondeclarationstool.md deleted file mode 100644 index bde785d730b..00000000000 --- a/docs-devsite/ai.functiondeclarationstool.md +++ /dev/null @@ -1,35 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# FunctionDeclarationsTool interface -A `FunctionDeclarationsTool` is a piece of code that enables the system to interact with external systems to perform an action, or set of actions, outside of knowledge and scope of the model. - -Signature: - -```typescript -export declare interface FunctionDeclarationsTool -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [functionDeclarations](./ai.functiondeclarationstool.md#functiondeclarationstoolfunctiondeclarations) | [FunctionDeclaration](./ai.functiondeclaration.md#functiondeclaration_interface)\[\] | Optional. One or more function declarations to be passed to the model along with the current user query. Model may decide to call a subset of these functions by populating [FunctionCall](./ai.functioncall.md#functioncall_interface) in the response. User should provide a [FunctionResponse](./ai.functionresponse.md#functionresponse_interface) for each function call in the next turn. Based on the function responses, the model will generate the final response back to the user. Maximum 64 function declarations can be provided. | - -## FunctionDeclarationsTool.functionDeclarations - -Optional. One or more function declarations to be passed to the model along with the current user query. Model may decide to call a subset of these functions by populating [FunctionCall](./ai.functioncall.md#functioncall_interface) in the response. User should provide a [FunctionResponse](./ai.functionresponse.md#functionresponse_interface) for each function call in the next turn. Based on the function responses, the model will generate the final response back to the user. Maximum 64 function declarations can be provided. - -Signature: - -```typescript -functionDeclarations?: FunctionDeclaration[]; -``` diff --git a/docs-devsite/ai.generatecontentresponse.md b/docs-devsite/ai.generatecontentresponse.md deleted file mode 100644 index 7c2dc1dc86a..00000000000 --- a/docs-devsite/ai.generatecontentresponse.md +++ /dev/null @@ -1,51 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# GenerateContentResponse interface -Individual response from [GenerativeModel.generateContent()](./ai.generativemodel.md#generativemodelgeneratecontent) and [GenerativeModel.generateContentStream()](./ai.generativemodel.md#generativemodelgeneratecontentstream). `generateContentStream()` will return one in each chunk until the stream is done. - -Signature: - -```typescript -export interface GenerateContentResponse -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [candidates](./ai.generatecontentresponse.md#generatecontentresponsecandidates) | [GenerateContentCandidate](./ai.generatecontentcandidate.md#generatecontentcandidate_interface)\[\] | | -| [promptFeedback](./ai.generatecontentresponse.md#generatecontentresponsepromptfeedback) | [PromptFeedback](./ai.promptfeedback.md#promptfeedback_interface) | | -| [usageMetadata](./ai.generatecontentresponse.md#generatecontentresponseusagemetadata) | [UsageMetadata](./ai.usagemetadata.md#usagemetadata_interface) | | - -## GenerateContentResponse.candidates - -Signature: - -```typescript -candidates?: GenerateContentCandidate[]; -``` - -## GenerateContentResponse.promptFeedback - -Signature: - -```typescript -promptFeedback?: PromptFeedback; -``` - -## GenerateContentResponse.usageMetadata - -Signature: - -```typescript -usageMetadata?: UsageMetadata; -``` diff --git a/docs-devsite/ai.generationconfig.md b/docs-devsite/ai.generationconfig.md deleted file mode 100644 index f9697a07454..00000000000 --- a/docs-devsite/ai.generationconfig.md +++ /dev/null @@ -1,134 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# GenerationConfig interface -Config options for content-related requests - -Signature: - -```typescript -export interface GenerationConfig -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [candidateCount](./ai.generationconfig.md#generationconfigcandidatecount) | number | | -| [frequencyPenalty](./ai.generationconfig.md#generationconfigfrequencypenalty) | number | | -| [maxOutputTokens](./ai.generationconfig.md#generationconfigmaxoutputtokens) | number | | -| [presencePenalty](./ai.generationconfig.md#generationconfigpresencepenalty) | number | | -| [responseMimeType](./ai.generationconfig.md#generationconfigresponsemimetype) | string | Output response MIME type of the generated candidate text. Supported MIME types are text/plain (default, text output), application/json (JSON response in the candidates), and text/x.enum. | -| [responseModalities](./ai.generationconfig.md#generationconfigresponsemodalities) | [ResponseModality](./ai.md#responsemodality)\[\] | (Public Preview) Generation modalities to be returned in generation responses. | -| [responseSchema](./ai.generationconfig.md#generationconfigresponseschema) | [TypedSchema](./ai.md#typedschema) \| [SchemaRequest](./ai.schemarequest.md#schemarequest_interface) | Output response schema of the generated candidate text. This value can be a class generated with a [Schema](./ai.schema.md#schema_class) static method like Schema.string() or Schema.object() or it can be a plain JS object matching the [SchemaRequest](./ai.schemarequest.md#schemarequest_interface) interface.
Note: This only applies when the specified responseMIMEType supports a schema; currently this is limited to application/json and text/x.enum. | -| [stopSequences](./ai.generationconfig.md#generationconfigstopsequences) | string\[\] | | -| [temperature](./ai.generationconfig.md#generationconfigtemperature) | number | | -| [topK](./ai.generationconfig.md#generationconfigtopk) | number | | -| [topP](./ai.generationconfig.md#generationconfigtopp) | number | | - -## GenerationConfig.candidateCount - -Signature: - -```typescript -candidateCount?: number; -``` - -## GenerationConfig.frequencyPenalty - -Signature: - -```typescript -frequencyPenalty?: number; -``` - -## GenerationConfig.maxOutputTokens - -Signature: - -```typescript -maxOutputTokens?: number; -``` - -## GenerationConfig.presencePenalty - -Signature: - -```typescript -presencePenalty?: number; -``` - -## GenerationConfig.responseMimeType - -Output response MIME type of the generated candidate text. Supported MIME types are `text/plain` (default, text output), `application/json` (JSON response in the candidates), and `text/x.enum`. - -Signature: - -```typescript -responseMimeType?: string; -``` - -## GenerationConfig.responseModalities - -> This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. -> - -Generation modalities to be returned in generation responses. - -- Multimodal response generation is only supported by some Gemini models and versions; see [model versions](https://firebase.google.com/docs/vertex-ai/models). - Only image generation (`ResponseModality.IMAGE`) is supported. - -Signature: - -```typescript -responseModalities?: ResponseModality[]; -``` - -## GenerationConfig.responseSchema - -Output response schema of the generated candidate text. This value can be a class generated with a [Schema](./ai.schema.md#schema_class) static method like `Schema.string()` or `Schema.object()` or it can be a plain JS object matching the [SchemaRequest](./ai.schemarequest.md#schemarequest_interface) interface.
Note: This only applies when the specified `responseMIMEType` supports a schema; currently this is limited to `application/json` and `text/x.enum`. - -Signature: - -```typescript -responseSchema?: TypedSchema | SchemaRequest; -``` - -## GenerationConfig.stopSequences - -Signature: - -```typescript -stopSequences?: string[]; -``` - -## GenerationConfig.temperature - -Signature: - -```typescript -temperature?: number; -``` - -## GenerationConfig.topK - -Signature: - -```typescript -topK?: number; -``` - -## GenerationConfig.topP - -Signature: - -```typescript -topP?: number; -``` diff --git a/docs-devsite/ai.generativemodel.md b/docs-devsite/ai.generativemodel.md deleted file mode 100644 index d91cf80e881..00000000000 --- a/docs-devsite/ai.generativemodel.md +++ /dev/null @@ -1,193 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# GenerativeModel class -Class for generative model APIs. - -Signature: - -```typescript -export declare class GenerativeModel extends AIModel -``` -Extends: [AIModel](./ai.aimodel.md#aimodel_class) - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(ai, modelParams, requestOptions)](./ai.generativemodel.md#generativemodelconstructor) | | Constructs a new instance of the GenerativeModel class | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [generationConfig](./ai.generativemodel.md#generativemodelgenerationconfig) | | [GenerationConfig](./ai.generationconfig.md#generationconfig_interface) | | -| [requestOptions](./ai.generativemodel.md#generativemodelrequestoptions) | | [RequestOptions](./ai.requestoptions.md#requestoptions_interface) | | -| [safetySettings](./ai.generativemodel.md#generativemodelsafetysettings) | | [SafetySetting](./ai.safetysetting.md#safetysetting_interface)\[\] | | -| [systemInstruction](./ai.generativemodel.md#generativemodelsysteminstruction) | | [Content](./ai.content.md#content_interface) | | -| [toolConfig](./ai.generativemodel.md#generativemodeltoolconfig) | | [ToolConfig](./ai.toolconfig.md#toolconfig_interface) | | -| [tools](./ai.generativemodel.md#generativemodeltools) | | [Tool](./ai.md#tool)\[\] | | - -## Methods - -| Method | Modifiers | Description | -| --- | --- | --- | -| [countTokens(request)](./ai.generativemodel.md#generativemodelcounttokens) | | Counts the tokens in the provided request. | -| [generateContent(request)](./ai.generativemodel.md#generativemodelgeneratecontent) | | Makes a single non-streaming call to the model and returns an object containing a single [GenerateContentResponse](./ai.generatecontentresponse.md#generatecontentresponse_interface). | -| [generateContentStream(request)](./ai.generativemodel.md#generativemodelgeneratecontentstream) | | Makes a single streaming call to the model and returns an object containing an iterable stream that iterates over all chunks in the streaming response as well as a promise that returns the final aggregated response. | -| [startChat(startChatParams)](./ai.generativemodel.md#generativemodelstartchat) | | Gets a new [ChatSession](./ai.chatsession.md#chatsession_class) instance which can be used for multi-turn chats. | - -## GenerativeModel.(constructor) - -Constructs a new instance of the `GenerativeModel` class - -Signature: - -```typescript -constructor(ai: AI, modelParams: ModelParams, requestOptions?: RequestOptions); -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| ai | [AI](./ai.ai.md#ai_interface) | | -| modelParams | [ModelParams](./ai.modelparams.md#modelparams_interface) | | -| requestOptions | [RequestOptions](./ai.requestoptions.md#requestoptions_interface) | | - -## GenerativeModel.generationConfig - -Signature: - -```typescript -generationConfig: GenerationConfig; -``` - -## GenerativeModel.requestOptions - -Signature: - -```typescript -requestOptions?: RequestOptions; -``` - -## GenerativeModel.safetySettings - -Signature: - -```typescript -safetySettings: SafetySetting[]; -``` - -## GenerativeModel.systemInstruction - -Signature: - -```typescript -systemInstruction?: Content; -``` - -## GenerativeModel.toolConfig - -Signature: - -```typescript -toolConfig?: ToolConfig; -``` - -## GenerativeModel.tools - -Signature: - -```typescript -tools?: Tool[]; -``` - -## GenerativeModel.countTokens() - -Counts the tokens in the provided request. - -Signature: - -```typescript -countTokens(request: CountTokensRequest | string | Array): Promise; -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| request | [CountTokensRequest](./ai.counttokensrequest.md#counttokensrequest_interface) \| string \| Array<string \| [Part](./ai.md#part)> | | - -Returns: - -Promise<[CountTokensResponse](./ai.counttokensresponse.md#counttokensresponse_interface)> - -## GenerativeModel.generateContent() - -Makes a single non-streaming call to the model and returns an object containing a single [GenerateContentResponse](./ai.generatecontentresponse.md#generatecontentresponse_interface). - -Signature: - -```typescript -generateContent(request: GenerateContentRequest | string | Array): Promise; -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| request | [GenerateContentRequest](./ai.generatecontentrequest.md#generatecontentrequest_interface) \| string \| Array<string \| [Part](./ai.md#part)> | | - -Returns: - -Promise<[GenerateContentResult](./ai.generatecontentresult.md#generatecontentresult_interface)> - -## GenerativeModel.generateContentStream() - -Makes a single streaming call to the model and returns an object containing an iterable stream that iterates over all chunks in the streaming response as well as a promise that returns the final aggregated response. - -Signature: - -```typescript -generateContentStream(request: GenerateContentRequest | string | Array): Promise; -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| request | [GenerateContentRequest](./ai.generatecontentrequest.md#generatecontentrequest_interface) \| string \| Array<string \| [Part](./ai.md#part)> | | - -Returns: - -Promise<[GenerateContentStreamResult](./ai.generatecontentstreamresult.md#generatecontentstreamresult_interface)> - -## GenerativeModel.startChat() - -Gets a new [ChatSession](./ai.chatsession.md#chatsession_class) instance which can be used for multi-turn chats. - -Signature: - -```typescript -startChat(startChatParams?: StartChatParams): ChatSession; -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| startChatParams | [StartChatParams](./ai.startchatparams.md#startchatparams_interface) | | - -Returns: - -[ChatSession](./ai.chatsession.md#chatsession_class) - diff --git a/docs-devsite/ai.googleaibackend.md b/docs-devsite/ai.googleaibackend.md deleted file mode 100644 index 7ccf8834a0a..00000000000 --- a/docs-devsite/ai.googleaibackend.md +++ /dev/null @@ -1,38 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# GoogleAIBackend class -Configuration class for the Gemini Developer API. - -Use this with [AIOptions](./ai.aioptions.md#aioptions_interface) when initializing the AI service via [getAI()](./ai.md#getai_a94a413) to specify the Gemini Developer API as the backend. - -Signature: - -```typescript -export declare class GoogleAIBackend extends Backend -``` -Extends: [Backend](./ai.backend.md#backend_class) - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)()](./ai.googleaibackend.md#googleaibackendconstructor) | | Creates a configuration object for the Gemini Developer API backend. | - -## GoogleAIBackend.(constructor) - -Creates a configuration object for the Gemini Developer API backend. - -Signature: - -```typescript -constructor(); -``` diff --git a/docs-devsite/ai.md b/docs-devsite/ai.md deleted file mode 100644 index c43c0391ba4..00000000000 --- a/docs-devsite/ai.md +++ /dev/null @@ -1,728 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# ai package -The Firebase AI Web SDK. - -## Functions - -| Function | Description | -| --- | --- | -| function(app, ...) | -| [getAI(app, options)](./ai.md#getai_a94a413) | Returns the default [AI](./ai.ai.md#ai_interface) instance that is associated with the provided [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface). If no instance exists, initializes a new instance with the default settings. | -| [getVertexAI(app, options)](./ai.md#getvertexai_04094cf) | | -| function(ai, ...) | -| [getGenerativeModel(ai, modelParams, requestOptions)](./ai.md#getgenerativemodel_80bd839) | Returns a [GenerativeModel](./ai.generativemodel.md#generativemodel_class) class with methods for inference and other functionality. | -| [getImagenModel(ai, modelParams, requestOptions)](./ai.md#getimagenmodel_e1f6645) | (Public Preview) Returns an [ImagenModel](./ai.imagenmodel.md#imagenmodel_class) class with methods for using Imagen.Only Imagen 3 models (named imagen-3.0-*) are supported. | - -## Classes - -| Class | Description | -| --- | --- | -| [AIError](./ai.aierror.md#aierror_class) | Error class for the Firebase AI SDK. | -| [AIModel](./ai.aimodel.md#aimodel_class) | Base class for Firebase AI model APIs.Instances of this class are associated with a specific Firebase AI [Backend](./ai.backend.md#backend_class) and provide methods for interacting with the configured generative model. | -| [ArraySchema](./ai.arrayschema.md#arrayschema_class) | Schema class for "array" types. The items param should refer to the type of item that can be a member of the array. | -| [Backend](./ai.backend.md#backend_class) | Abstract base class representing the configuration for an AI service backend. This class should not be instantiated directly. Use its subclasses; [GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class) for the Gemini Developer API (via [Google AI](https://ai.google/)), and [VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class) for the Vertex AI Gemini API. | -| [BooleanSchema](./ai.booleanschema.md#booleanschema_class) | Schema class for "boolean" types. | -| [ChatSession](./ai.chatsession.md#chatsession_class) | ChatSession class that enables sending chat messages and stores history of sent and received messages so far. | -| [GenerativeModel](./ai.generativemodel.md#generativemodel_class) | Class for generative model APIs. | -| [GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class) | Configuration class for the Gemini Developer API.Use this with [AIOptions](./ai.aioptions.md#aioptions_interface) when initializing the AI service via [getAI()](./ai.md#getai_a94a413) to specify the Gemini Developer API as the backend. | -| [ImagenImageFormat](./ai.imagenimageformat.md#imagenimageformat_class) | (Public Preview) Defines the image format for images generated by Imagen.Use this class to specify the desired format (JPEG or PNG) and compression quality for images generated by Imagen. This is typically included as part of [ImagenModelParams](./ai.imagenmodelparams.md#imagenmodelparams_interface). | -| [ImagenModel](./ai.imagenmodel.md#imagenmodel_class) | (Public Preview) Class for Imagen model APIs.This class provides methods for generating images using the Imagen model. | -| [IntegerSchema](./ai.integerschema.md#integerschema_class) | Schema class for "integer" types. | -| [NumberSchema](./ai.numberschema.md#numberschema_class) | Schema class for "number" types. | -| [ObjectSchema](./ai.objectschema.md#objectschema_class) | Schema class for "object" types. The properties param must be a map of Schema objects. | -| [Schema](./ai.schema.md#schema_class) | Parent class encompassing all Schema types, with static methods that allow building specific Schema types. This class can be converted with JSON.stringify() into a JSON string accepted by Vertex AI REST endpoints. (This string conversion is automatically done when calling SDK methods.) | -| [StringSchema](./ai.stringschema.md#stringschema_class) | Schema class for "string" types. Can be used with or without enum values. | -| [VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class) | Configuration class for the Vertex AI Gemini API.Use this with [AIOptions](./ai.aioptions.md#aioptions_interface) when initializing the AI service via [getAI()](./ai.md#getai_a94a413) to specify the Vertex AI Gemini API as the backend. | - -## Enumerations - -| Enumeration | Description | -| --- | --- | -| [AIErrorCode](./ai.md#aierrorcode) | Standardized error codes that [AIError](./ai.aierror.md#aierror_class) can have. | -| [BlockReason](./ai.md#blockreason) | Reason that a prompt was blocked. | -| [FinishReason](./ai.md#finishreason) | Reason that a candidate finished. | -| [FunctionCallingMode](./ai.md#functioncallingmode) | | -| [HarmBlockMethod](./ai.md#harmblockmethod) | This property is not supported in the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)). | -| [HarmBlockThreshold](./ai.md#harmblockthreshold) | Threshold above which a prompt or candidate will be blocked. | -| [HarmCategory](./ai.md#harmcategory) | Harm categories that would cause prompts or candidates to be blocked. | -| [HarmProbability](./ai.md#harmprobability) | Probability that a prompt or candidate matches a harm category. | -| [HarmSeverity](./ai.md#harmseverity) | Harm severity levels. | -| [ImagenAspectRatio](./ai.md#imagenaspectratio) | (Public Preview) Aspect ratios for Imagen images.To specify an aspect ratio for generated images, set the aspectRatio property in your [ImagenGenerationConfig](./ai.imagengenerationconfig.md#imagengenerationconfig_interface).See the the [documentation](http://firebase.google.com/docs/vertex-ai/generate-images) for more details and examples of the supported aspect ratios. | -| [ImagenPersonFilterLevel](./ai.md#imagenpersonfilterlevel) | (Public Preview) A filter level controlling whether generation of images containing people or faces is allowed.See the personGeneration documentation for more details. | -| [ImagenSafetyFilterLevel](./ai.md#imagensafetyfilterlevel) | (Public Preview) A filter level controlling how aggressively to filter sensitive content.Text prompts provided as inputs and images (generated or uploaded) through Imagen on Vertex AI are assessed against a list of safety filters, which include 'harmful categories' (for example, violence, sexual, derogatory, and toxic). This filter level controls how aggressively to filter out potentially harmful content from responses. See the [documentation](http://firebase.google.com/docs/vertex-ai/generate-images) and the [Responsible AI and usage guidelines](https://cloud.google.com/vertex-ai/generative-ai/docs/image/responsible-ai-imagen#safety-filters) for more details. | -| [Modality](./ai.md#modality) | Content part modality. | -| [SchemaType](./ai.md#schematype) | Contains the list of OpenAPI data types as defined by the [OpenAPI specification](https://swagger.io/docs/specification/data-models/data-types/) | - -## Interfaces - -| Interface | Description | -| --- | --- | -| [AI](./ai.ai.md#ai_interface) | An instance of the Firebase AI SDK.Do not create this instance directly. Instead, use [getAI()](./ai.md#getai_a94a413). | -| [AIOptions](./ai.aioptions.md#aioptions_interface) | Options for initializing the AI service using [getAI()](./ai.md#getai_a94a413). This allows specifying which backend to use (Vertex AI Gemini API or Gemini Developer API) and configuring its specific options (like location for Vertex AI). | -| [BaseParams](./ai.baseparams.md#baseparams_interface) | Base parameters for a number of methods. | -| [Citation](./ai.citation.md#citation_interface) | A single citation. | -| [CitationMetadata](./ai.citationmetadata.md#citationmetadata_interface) | Citation metadata that may be found on a [GenerateContentCandidate](./ai.generatecontentcandidate.md#generatecontentcandidate_interface). | -| [Content](./ai.content.md#content_interface) | Content type for both prompts and response candidates. | -| [CountTokensRequest](./ai.counttokensrequest.md#counttokensrequest_interface) | Params for calling [GenerativeModel.countTokens()](./ai.generativemodel.md#generativemodelcounttokens) | -| [CountTokensResponse](./ai.counttokensresponse.md#counttokensresponse_interface) | Response from calling [GenerativeModel.countTokens()](./ai.generativemodel.md#generativemodelcounttokens). | -| [CustomErrorData](./ai.customerrordata.md#customerrordata_interface) | Details object that contains data originating from a bad HTTP response. | -| [Date\_2](./ai.date_2.md#date_2_interface) | Protobuf google.type.Date | -| [EnhancedGenerateContentResponse](./ai.enhancedgeneratecontentresponse.md#enhancedgeneratecontentresponse_interface) | Response object wrapped with helper methods. | -| [ErrorDetails](./ai.errordetails.md#errordetails_interface) | Details object that may be included in an error response. | -| [FileData](./ai.filedata.md#filedata_interface) | Data pointing to a file uploaded on Google Cloud Storage. | -| [FileDataPart](./ai.filedatapart.md#filedatapart_interface) | Content part interface if the part represents [FileData](./ai.filedata.md#filedata_interface) | -| [FunctionCall](./ai.functioncall.md#functioncall_interface) | A predicted [FunctionCall](./ai.functioncall.md#functioncall_interface) returned from the model that contains a string representing the [FunctionDeclaration.name](./ai.functiondeclaration.md#functiondeclarationname) and a structured JSON object containing the parameters and their values. | -| [FunctionCallingConfig](./ai.functioncallingconfig.md#functioncallingconfig_interface) | | -| [FunctionCallPart](./ai.functioncallpart.md#functioncallpart_interface) | Content part interface if the part represents a [FunctionCall](./ai.functioncall.md#functioncall_interface). | -| [FunctionDeclaration](./ai.functiondeclaration.md#functiondeclaration_interface) | Structured representation of a function declaration as defined by the [OpenAPI 3.0 specification](https://spec.openapis.org/oas/v3.0.3). Included in this declaration are the function name and parameters. This FunctionDeclaration is a representation of a block of code that can be used as a Tool by the model and executed by the client. | -| [FunctionDeclarationsTool](./ai.functiondeclarationstool.md#functiondeclarationstool_interface) | A FunctionDeclarationsTool is a piece of code that enables the system to interact with external systems to perform an action, or set of actions, outside of knowledge and scope of the model. | -| [FunctionResponse](./ai.functionresponse.md#functionresponse_interface) | The result output from a [FunctionCall](./ai.functioncall.md#functioncall_interface) that contains a string representing the [FunctionDeclaration.name](./ai.functiondeclaration.md#functiondeclarationname) and a structured JSON object containing any output from the function is used as context to the model. This should contain the result of a [FunctionCall](./ai.functioncall.md#functioncall_interface) made based on model prediction. | -| [FunctionResponsePart](./ai.functionresponsepart.md#functionresponsepart_interface) | Content part interface if the part represents [FunctionResponse](./ai.functionresponse.md#functionresponse_interface). | -| [GenerateContentCandidate](./ai.generatecontentcandidate.md#generatecontentcandidate_interface) | A candidate returned as part of a [GenerateContentResponse](./ai.generatecontentresponse.md#generatecontentresponse_interface). | -| [GenerateContentRequest](./ai.generatecontentrequest.md#generatecontentrequest_interface) | Request sent through [GenerativeModel.generateContent()](./ai.generativemodel.md#generativemodelgeneratecontent) | -| [GenerateContentResponse](./ai.generatecontentresponse.md#generatecontentresponse_interface) | Individual response from [GenerativeModel.generateContent()](./ai.generativemodel.md#generativemodelgeneratecontent) and [GenerativeModel.generateContentStream()](./ai.generativemodel.md#generativemodelgeneratecontentstream). generateContentStream() will return one in each chunk until the stream is done. | -| [GenerateContentResult](./ai.generatecontentresult.md#generatecontentresult_interface) | Result object returned from [GenerativeModel.generateContent()](./ai.generativemodel.md#generativemodelgeneratecontent) call. | -| [GenerateContentStreamResult](./ai.generatecontentstreamresult.md#generatecontentstreamresult_interface) | Result object returned from [GenerativeModel.generateContentStream()](./ai.generativemodel.md#generativemodelgeneratecontentstream) call. Iterate over stream to get chunks as they come in and/or use the response promise to get the aggregated response when the stream is done. | -| [GenerationConfig](./ai.generationconfig.md#generationconfig_interface) | Config options for content-related requests | -| [GenerativeContentBlob](./ai.generativecontentblob.md#generativecontentblob_interface) | Interface for sending an image. | -| [GroundingAttribution](./ai.groundingattribution.md#groundingattribution_interface) | | -| [GroundingMetadata](./ai.groundingmetadata.md#groundingmetadata_interface) | Metadata returned to client when grounding is enabled. | -| [ImagenGCSImage](./ai.imagengcsimage.md#imagengcsimage_interface) | An image generated by Imagen, stored in a Cloud Storage for Firebase bucket.This feature is not available yet. | -| [ImagenGenerationConfig](./ai.imagengenerationconfig.md#imagengenerationconfig_interface) | (Public Preview) Configuration options for generating images with Imagen.See the [documentation](http://firebase.google.com/docs/vertex-ai/generate-images-imagen) for more details. | -| [ImagenGenerationResponse](./ai.imagengenerationresponse.md#imagengenerationresponse_interface) | (Public Preview) The response from a request to generate images with Imagen. | -| [ImagenInlineImage](./ai.imageninlineimage.md#imageninlineimage_interface) | (Public Preview) An image generated by Imagen, represented as inline data. | -| [ImagenModelParams](./ai.imagenmodelparams.md#imagenmodelparams_interface) | (Public Preview) Parameters for configuring an [ImagenModel](./ai.imagenmodel.md#imagenmodel_class). | -| [ImagenSafetySettings](./ai.imagensafetysettings.md#imagensafetysettings_interface) | (Public Preview) Settings for controlling the aggressiveness of filtering out sensitive content.See the [documentation](http://firebase.google.com/docs/vertex-ai/generate-images) for more details. | -| [InlineDataPart](./ai.inlinedatapart.md#inlinedatapart_interface) | Content part interface if the part represents an image. | -| [ModalityTokenCount](./ai.modalitytokencount.md#modalitytokencount_interface) | Represents token counting info for a single modality. | -| [ModelParams](./ai.modelparams.md#modelparams_interface) | Params passed to [getGenerativeModel()](./ai.md#getgenerativemodel_80bd839). | -| [ObjectSchemaInterface](./ai.objectschemainterface.md#objectschemainterface_interface) | Interface for [ObjectSchema](./ai.objectschema.md#objectschema_class) class. | -| [PromptFeedback](./ai.promptfeedback.md#promptfeedback_interface) | If the prompt was blocked, this will be populated with blockReason and the relevant safetyRatings. | -| [RequestOptions](./ai.requestoptions.md#requestoptions_interface) | Params passed to [getGenerativeModel()](./ai.md#getgenerativemodel_80bd839). | -| [RetrievedContextAttribution](./ai.retrievedcontextattribution.md#retrievedcontextattribution_interface) | | -| [SafetyRating](./ai.safetyrating.md#safetyrating_interface) | A safety rating associated with a [GenerateContentCandidate](./ai.generatecontentcandidate.md#generatecontentcandidate_interface) | -| [SafetySetting](./ai.safetysetting.md#safetysetting_interface) | Safety setting that can be sent as part of request parameters. | -| [SchemaInterface](./ai.schemainterface.md#schemainterface_interface) | Interface for [Schema](./ai.schema.md#schema_class) class. | -| [SchemaParams](./ai.schemaparams.md#schemaparams_interface) | Params passed to [Schema](./ai.schema.md#schema_class) static methods to create specific [Schema](./ai.schema.md#schema_class) classes. | -| [SchemaRequest](./ai.schemarequest.md#schemarequest_interface) | Final format for [Schema](./ai.schema.md#schema_class) params passed to backend requests. | -| [SchemaShared](./ai.schemashared.md#schemashared_interface) | Basic [Schema](./ai.schema.md#schema_class) properties shared across several Schema-related types. | -| [Segment](./ai.segment.md#segment_interface) | | -| [StartChatParams](./ai.startchatparams.md#startchatparams_interface) | Params for [GenerativeModel.startChat()](./ai.generativemodel.md#generativemodelstartchat). | -| [TextPart](./ai.textpart.md#textpart_interface) | Content part interface if the part represents a text string. | -| [ToolConfig](./ai.toolconfig.md#toolconfig_interface) | Tool config. This config is shared for all tools provided in the request. | -| [UsageMetadata](./ai.usagemetadata.md#usagemetadata_interface) | Usage metadata about a [GenerateContentResponse](./ai.generatecontentresponse.md#generatecontentresponse_interface). | -| [VertexAIOptions](./ai.vertexaioptions.md#vertexaioptions_interface) | Options when initializing the Firebase AI SDK. | -| [VideoMetadata](./ai.videometadata.md#videometadata_interface) | Describes the input video content. | -| [WebAttribution](./ai.webattribution.md#webattribution_interface) | | - -## Variables - -| Variable | Description | -| --- | --- | -| [BackendType](./ai.md#backendtype) | An enum-like object containing constants that represent the supported backends for the Firebase AI SDK. This determines which backend service (Vertex AI Gemini API or Gemini Developer API) the SDK will communicate with.These values are assigned to the backendType property within the specific backend configuration objects ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class) or [VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)) to identify which service to target. | -| [POSSIBLE\_ROLES](./ai.md#possible_roles) | Possible roles. | -| [ResponseModality](./ai.md#responsemodality) | (Public Preview) Generation modalities to be returned in generation responses. | -| [VertexAIError](./ai.md#vertexaierror) | | -| [VertexAIModel](./ai.md#vertexaimodel) | | - -## Type Aliases - -| Type Alias | Description | -| --- | --- | -| [BackendType](./ai.md#backendtype) | Type alias representing valid backend types. It can be either 'VERTEX_AI' or 'GOOGLE_AI'. | -| [Part](./ai.md#part) | Content part - includes text, image/video, or function call/response part types. | -| [ResponseModality](./ai.md#responsemodality) | (Public Preview) Generation modalities to be returned in generation responses. | -| [Role](./ai.md#role) | Role is the producer of the content. | -| [Tool](./ai.md#tool) | Defines a tool that model can call to access external knowledge. | -| [TypedSchema](./ai.md#typedschema) | A type that includes all specific Schema types. | -| [VertexAI](./ai.md#vertexai) | | - -## function(app, ...) - -### getAI(app, options) {:#getai_a94a413} - -Returns the default [AI](./ai.ai.md#ai_interface) instance that is associated with the provided [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface). If no instance exists, initializes a new instance with the default settings. - -Signature: - -```typescript -export declare function getAI(app?: FirebaseApp, options?: AIOptions): AI; -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| app | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) to use. | -| options | [AIOptions](./ai.aioptions.md#aioptions_interface) | [AIOptions](./ai.aioptions.md#aioptions_interface) that configure the AI instance. | - -Returns: - -[AI](./ai.ai.md#ai_interface) - -The default [AI](./ai.ai.md#ai_interface) instance for the given [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface). - -### Example 1 - - -```javascript -const ai = getAI(app); - -``` - -### Example 2 - - -```javascript -// Get an AI instance configured to use the Gemini Developer API (via Google AI). -const ai = getAI(app, { backend: new GoogleAIBackend() }); - -``` - -### Example 3 - - -```javascript -// Get an AI instance configured to use the Vertex AI Gemini API. -const ai = getAI(app, { backend: new VertexAIBackend() }); - -``` - -### getVertexAI(app, options) {:#getvertexai_04094cf} - -> Warning: This API is now obsolete. -> -> Use the new [getAI()](./ai.md#getai_a94a413) instead. The Vertex AI in Firebase SDK has been replaced with the Firebase AI SDK to accommodate the evolving set of supported features and services. For migration details, see the [migration guide](https://firebase.google.com/docs/vertex-ai/migrate-to-latest-sdk). -> -> Returns a [VertexAI](./ai.md#vertexai) instance for the given app, configured to use the Vertex AI Gemini API. This instance will be configured to use the Vertex AI Gemini API. -> - -Signature: - -```typescript -export declare function getVertexAI(app?: FirebaseApp, options?: VertexAIOptions): VertexAI; -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| app | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) to use. | -| options | [VertexAIOptions](./ai.vertexaioptions.md#vertexaioptions_interface) | Options to configure the Vertex AI instance, including the location. | - -Returns: - -[VertexAI](./ai.md#vertexai) - -## function(ai, ...) - -### getGenerativeModel(ai, modelParams, requestOptions) {:#getgenerativemodel_80bd839} - -Returns a [GenerativeModel](./ai.generativemodel.md#generativemodel_class) class with methods for inference and other functionality. - -Signature: - -```typescript -export declare function getGenerativeModel(ai: AI, modelParams: ModelParams, requestOptions?: RequestOptions): GenerativeModel; -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| ai | [AI](./ai.ai.md#ai_interface) | | -| modelParams | [ModelParams](./ai.modelparams.md#modelparams_interface) | | -| requestOptions | [RequestOptions](./ai.requestoptions.md#requestoptions_interface) | | - -Returns: - -[GenerativeModel](./ai.generativemodel.md#generativemodel_class) - -### getImagenModel(ai, modelParams, requestOptions) {:#getimagenmodel_e1f6645} - -> This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. -> - -Returns an [ImagenModel](./ai.imagenmodel.md#imagenmodel_class) class with methods for using Imagen. - -Only Imagen 3 models (named `imagen-3.0-*`) are supported. - -Signature: - -```typescript -export declare function getImagenModel(ai: AI, modelParams: ImagenModelParams, requestOptions?: RequestOptions): ImagenModel; -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| ai | [AI](./ai.ai.md#ai_interface) | An [AI](./ai.ai.md#ai_interface) instance. | -| modelParams | [ImagenModelParams](./ai.imagenmodelparams.md#imagenmodelparams_interface) | Parameters to use when making Imagen requests. | -| requestOptions | [RequestOptions](./ai.requestoptions.md#requestoptions_interface) | Additional options to use when making requests. | - -Returns: - -[ImagenModel](./ai.imagenmodel.md#imagenmodel_class) - -#### Exceptions - -If the `apiKey` or `projectId` fields are missing in your Firebase config. - -## BackendType - -An enum-like object containing constants that represent the supported backends for the Firebase AI SDK. This determines which backend service (Vertex AI Gemini API or Gemini Developer API) the SDK will communicate with. - -These values are assigned to the `backendType` property within the specific backend configuration objects ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class) or [VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)) to identify which service to target. - -Signature: - -```typescript -BackendType: { - readonly VERTEX_AI: "VERTEX_AI"; - readonly GOOGLE_AI: "GOOGLE_AI"; -} -``` - -## POSSIBLE\_ROLES - -Possible roles. - -Signature: - -```typescript -POSSIBLE_ROLES: readonly ["user", "model", "function", "system"] -``` - -## ResponseModality - -> This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. -> - -Generation modalities to be returned in generation responses. - -Signature: - -```typescript -ResponseModality: { - readonly TEXT: "TEXT"; - readonly IMAGE: "IMAGE"; -} -``` - -## VertexAIError - -> Warning: This API is now obsolete. -> -> Use the new [AIError](./ai.aierror.md#aierror_class) instead. The Vertex AI in Firebase SDK has been replaced with the Firebase AI SDK to accommodate the evolving set of supported features and services. For migration details, see the [migration guide](https://firebase.google.com/docs/vertex-ai/migrate-to-latest-sdk). -> -> Error class for the Firebase AI SDK. -> - -Signature: - -```typescript -VertexAIError: typeof AIError -``` - -## VertexAIModel - -> Warning: This API is now obsolete. -> -> Use the new [AIModel](./ai.aimodel.md#aimodel_class) instead. The Vertex AI in Firebase SDK has been replaced with the Firebase AI SDK to accommodate the evolving set of supported features and services. For migration details, see the [migration guide](https://firebase.google.com/docs/vertex-ai/migrate-to-latest-sdk). -> -> Base class for Firebase AI model APIs. -> - -Signature: - -```typescript -VertexAIModel: typeof AIModel -``` - -## BackendType - -Type alias representing valid backend types. It can be either `'VERTEX_AI'` or `'GOOGLE_AI'`. - -Signature: - -```typescript -export type BackendType = (typeof BackendType)[keyof typeof BackendType]; -``` - -## Part - -Content part - includes text, image/video, or function call/response part types. - -Signature: - -```typescript -export type Part = TextPart | InlineDataPart | FunctionCallPart | FunctionResponsePart | FileDataPart; -``` - -## ResponseModality - -> This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. -> - -Generation modalities to be returned in generation responses. - -Signature: - -```typescript -export type ResponseModality = (typeof ResponseModality)[keyof typeof ResponseModality]; -``` - -## Role - -Role is the producer of the content. - -Signature: - -```typescript -export type Role = (typeof POSSIBLE_ROLES)[number]; -``` - -## Tool - -Defines a tool that model can call to access external knowledge. - -Signature: - -```typescript -export declare type Tool = FunctionDeclarationsTool; -``` - -## TypedSchema - -A type that includes all specific Schema types. - -Signature: - -```typescript -export type TypedSchema = IntegerSchema | NumberSchema | StringSchema | BooleanSchema | ObjectSchema | ArraySchema; -``` - -## VertexAI - -> Warning: This API is now obsolete. -> -> Use the new [AI](./ai.ai.md#ai_interface) instead. The Vertex AI in Firebase SDK has been replaced with the Firebase AI SDK to accommodate the evolving set of supported features and services. For migration details, see the [migration guide](https://firebase.google.com/docs/vertex-ai/migrate-to-latest-sdk). -> -> An instance of the Firebase AI SDK. -> - -Signature: - -```typescript -export type VertexAI = AI; -``` - -## AIErrorCode - -Standardized error codes that [AIError](./ai.aierror.md#aierror_class) can have. - -Signature: - -```typescript -export declare const enum AIErrorCode -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| API\_NOT\_ENABLED | "api-not-enabled" | An error due to the Firebase API not being enabled in the Console. | -| ERROR | "error" | A generic error occurred. | -| FETCH\_ERROR | "fetch-error" | An error occurred while performing a fetch. | -| INVALID\_CONTENT | "invalid-content" | An error associated with a Content object. | -| INVALID\_SCHEMA | "invalid-schema" | An error due to invalid Schema input. | -| NO\_API\_KEY | "no-api-key" | An error occurred due to a missing Firebase API key. | -| NO\_APP\_ID | "no-app-id" | An error occured due to a missing Firebase app ID. | -| NO\_MODEL | "no-model" | An error occurred due to a model name not being specified during initialization. | -| NO\_PROJECT\_ID | "no-project-id" | An error occurred due to a missing project ID. | -| PARSE\_FAILED | "parse-failed" | An error occurred while parsing. | -| REQUEST\_ERROR | "request-error" | An error occurred in a request. | -| RESPONSE\_ERROR | "response-error" | An error occurred in a response. | -| UNSUPPORTED | "unsupported" | An error occured due an attempt to use an unsupported feature. | - -## BlockReason - -Reason that a prompt was blocked. - -Signature: - -```typescript -export declare enum BlockReason -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| BLOCKLIST | "BLOCKLIST" | Content was blocked because it contained terms from the terminology blocklist. | -| OTHER | "OTHER" | Content was blocked, but the reason is uncategorized. | -| PROHIBITED\_CONTENT | "PROHIBITED_CONTENT" | Content was blocked due to prohibited content. | -| SAFETY | "SAFETY" | Content was blocked by safety settings. | - -## FinishReason - -Reason that a candidate finished. - -Signature: - -```typescript -export declare enum FinishReason -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| BLOCKLIST | "BLOCKLIST" | The candidate content contained forbidden terms. | -| MALFORMED\_FUNCTION\_CALL | "MALFORMED_FUNCTION_CALL" | The function call generated by the model was invalid. | -| MAX\_TOKENS | "MAX_TOKENS" | The maximum number of tokens as specified in the request was reached. | -| OTHER | "OTHER" | Unknown reason. | -| PROHIBITED\_CONTENT | "PROHIBITED_CONTENT" | The candidate content potentially contained prohibited content. | -| RECITATION | "RECITATION" | The candidate content was flagged for recitation reasons. | -| SAFETY | "SAFETY" | The candidate content was flagged for safety reasons. | -| SPII | "SPII" | The candidate content potentially contained Sensitive Personally Identifiable Information (SPII). | -| STOP | "STOP" | Natural stop point of the model or provided stop sequence. | - -## FunctionCallingMode - - -Signature: - -```typescript -export declare enum FunctionCallingMode -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| ANY | "ANY" | Model is constrained to always predicting a function call only. If allowed_function_names is set, the predicted function call will be limited to any one of allowed_function_names, else the predicted function call will be any one of the provided function_declarations. | -| AUTO | "AUTO" | Default model behavior; model decides to predict either a function call or a natural language response. | -| NONE | "NONE" | Model will not predict any function call. Model behavior is same as when not passing any function declarations. | - -## HarmBlockMethod - -This property is not supported in the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)). - -Signature: - -```typescript -export declare enum HarmBlockMethod -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| PROBABILITY | "PROBABILITY" | The harm block method uses the probability score. | -| SEVERITY | "SEVERITY" | The harm block method uses both probability and severity scores. | - -## HarmBlockThreshold - -Threshold above which a prompt or candidate will be blocked. - -Signature: - -```typescript -export declare enum HarmBlockThreshold -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| BLOCK\_LOW\_AND\_ABOVE | "BLOCK_LOW_AND_ABOVE" | Content with NEGLIGIBLE will be allowed. | -| BLOCK\_MEDIUM\_AND\_ABOVE | "BLOCK_MEDIUM_AND_ABOVE" | Content with NEGLIGIBLE and LOW will be allowed. | -| BLOCK\_NONE | "BLOCK_NONE" | All content will be allowed. | -| BLOCK\_ONLY\_HIGH | "BLOCK_ONLY_HIGH" | Content with NEGLIGIBLE, LOW, and MEDIUM will be allowed. | - -## HarmCategory - -Harm categories that would cause prompts or candidates to be blocked. - -Signature: - -```typescript -export declare enum HarmCategory -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| HARM\_CATEGORY\_DANGEROUS\_CONTENT | "HARM_CATEGORY_DANGEROUS_CONTENT" | | -| HARM\_CATEGORY\_HARASSMENT | "HARM_CATEGORY_HARASSMENT" | | -| HARM\_CATEGORY\_HATE\_SPEECH | "HARM_CATEGORY_HATE_SPEECH" | | -| HARM\_CATEGORY\_SEXUALLY\_EXPLICIT | "HARM_CATEGORY_SEXUALLY_EXPLICIT" | | - -## HarmProbability - -Probability that a prompt or candidate matches a harm category. - -Signature: - -```typescript -export declare enum HarmProbability -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| HIGH | "HIGH" | Content has a high chance of being unsafe. | -| LOW | "LOW" | Content has a low chance of being unsafe. | -| MEDIUM | "MEDIUM" | Content has a medium chance of being unsafe. | -| NEGLIGIBLE | "NEGLIGIBLE" | Content has a negligible chance of being unsafe. | - -## HarmSeverity - -Harm severity levels. - -Signature: - -```typescript -export declare enum HarmSeverity -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| HARM\_SEVERITY\_HIGH | "HARM_SEVERITY_HIGH" | High level of harm severity. | -| HARM\_SEVERITY\_LOW | "HARM_SEVERITY_LOW" | Low level of harm severity. | -| HARM\_SEVERITY\_MEDIUM | "HARM_SEVERITY_MEDIUM" | Medium level of harm severity. | -| HARM\_SEVERITY\_NEGLIGIBLE | "HARM_SEVERITY_NEGLIGIBLE" | Negligible level of harm severity. | -| HARM\_SEVERITY\_UNSUPPORTED | "HARM_SEVERITY_UNSUPPORTED" | Harm severity is not supported. | - -## ImagenAspectRatio - -> This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. -> - -Aspect ratios for Imagen images. - -To specify an aspect ratio for generated images, set the `aspectRatio` property in your [ImagenGenerationConfig](./ai.imagengenerationconfig.md#imagengenerationconfig_interface). - -See the the [documentation](http://firebase.google.com/docs/vertex-ai/generate-images) for more details and examples of the supported aspect ratios. - -Signature: - -```typescript -export declare enum ImagenAspectRatio -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| LANDSCAPE\_16x9 | "16:9" | (Public Preview) Landscape (16:9) aspect ratio. | -| LANDSCAPE\_3x4 | "3:4" | (Public Preview) Landscape (3:4) aspect ratio. | -| PORTRAIT\_4x3 | "4:3" | (Public Preview) Portrait (4:3) aspect ratio. | -| PORTRAIT\_9x16 | "9:16" | (Public Preview) Portrait (9:16) aspect ratio. | -| SQUARE | "1:1" | (Public Preview) Square (1:1) aspect ratio. | - -## ImagenPersonFilterLevel - -> This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. -> - -A filter level controlling whether generation of images containing people or faces is allowed. - -See the personGeneration documentation for more details. - -Signature: - -```typescript -export declare enum ImagenPersonFilterLevel -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| ALLOW\_ADULT | "allow_adult" | (Public Preview) Allow generation of images containing adults only; images of children are filtered out.Generation of images containing people or faces may require your use case to be reviewed and approved by Cloud support; see the [Responsible AI and usage guidelines](https://cloud.google.com/vertex-ai/generative-ai/docs/image/responsible-ai-imagen#person-face-gen) for more details. | -| ALLOW\_ALL | "allow_all" | (Public Preview) Allow generation of images containing adults only; images of children are filtered out.Generation of images containing people or faces may require your use case to be reviewed and approved by Cloud support; see the [Responsible AI and usage guidelines](https://cloud.google.com/vertex-ai/generative-ai/docs/image/responsible-ai-imagen#person-face-gen) for more details. | -| BLOCK\_ALL | "dont_allow" | (Public Preview) Disallow generation of images containing people or faces; images of people are filtered out. | - -## ImagenSafetyFilterLevel - -> This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. -> - -A filter level controlling how aggressively to filter sensitive content. - -Text prompts provided as inputs and images (generated or uploaded) through Imagen on Vertex AI are assessed against a list of safety filters, which include 'harmful categories' (for example, `violence`, `sexual`, `derogatory`, and `toxic`). This filter level controls how aggressively to filter out potentially harmful content from responses. See the [documentation](http://firebase.google.com/docs/vertex-ai/generate-images) and the [Responsible AI and usage guidelines](https://cloud.google.com/vertex-ai/generative-ai/docs/image/responsible-ai-imagen#safety-filters) for more details. - -Signature: - -```typescript -export declare enum ImagenSafetyFilterLevel -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| BLOCK\_LOW\_AND\_ABOVE | "block_low_and_above" | (Public Preview) The most aggressive filtering level; most strict blocking. | -| BLOCK\_MEDIUM\_AND\_ABOVE | "block_medium_and_above" | (Public Preview) Blocks some sensitive prompts and responses. | -| BLOCK\_NONE | "block_none" | (Public Preview) The least aggressive filtering level; blocks very few sensitive prompts and responses.Access to this feature is restricted and may require your case to be reviewed and approved by Cloud support. | -| BLOCK\_ONLY\_HIGH | "block_only_high" | (Public Preview) Blocks few sensitive prompts and responses. | - -## Modality - -Content part modality. - -Signature: - -```typescript -export declare enum Modality -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| AUDIO | "AUDIO" | Audio. | -| DOCUMENT | "DOCUMENT" | Document (for example, PDF). | -| IMAGE | "IMAGE" | Image. | -| MODALITY\_UNSPECIFIED | "MODALITY_UNSPECIFIED" | Unspecified modality. | -| TEXT | "TEXT" | Plain text. | -| VIDEO | "VIDEO" | Video. | - -## SchemaType - -Contains the list of OpenAPI data types as defined by the [OpenAPI specification](https://swagger.io/docs/specification/data-models/data-types/) - -Signature: - -```typescript -export declare enum SchemaType -``` - -## Enumeration Members - -| Member | Value | Description | -| --- | --- | --- | -| ARRAY | "array" | Array type. | -| BOOLEAN | "boolean" | Boolean type. | -| INTEGER | "integer" | Integer type. | -| NUMBER | "number" | Number type. | -| OBJECT | "object" | Object type. | -| STRING | "string" | String type. | - diff --git a/docs-devsite/ai.safetyrating.md b/docs-devsite/ai.safetyrating.md deleted file mode 100644 index 86b1549569e..00000000000 --- a/docs-devsite/ai.safetyrating.md +++ /dev/null @@ -1,90 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# SafetyRating interface -A safety rating associated with a [GenerateContentCandidate](./ai.generatecontentcandidate.md#generatecontentcandidate_interface) - -Signature: - -```typescript -export interface SafetyRating -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [blocked](./ai.safetyrating.md#safetyratingblocked) | boolean | | -| [category](./ai.safetyrating.md#safetyratingcategory) | [HarmCategory](./ai.md#harmcategory) | | -| [probability](./ai.safetyrating.md#safetyratingprobability) | [HarmProbability](./ai.md#harmprobability) | | -| [probabilityScore](./ai.safetyrating.md#safetyratingprobabilityscore) | number | The probability score of the harm category.This property is only supported when using the Vertex AI Gemini API ([VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). When using the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)), this property is not supported and will default to 0. | -| [severity](./ai.safetyrating.md#safetyratingseverity) | [HarmSeverity](./ai.md#harmseverity) | The harm severity level.This property is only supported when using the Vertex AI Gemini API ([VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). When using the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)), this property is not supported and will default to HarmSeverity.UNSUPPORTED. | -| [severityScore](./ai.safetyrating.md#safetyratingseverityscore) | number | The severity score of the harm category.This property is only supported when using the Vertex AI Gemini API ([VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). When using the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)), this property is not supported and will default to 0. | - -## SafetyRating.blocked - -Signature: - -```typescript -blocked: boolean; -``` - -## SafetyRating.category - -Signature: - -```typescript -category: HarmCategory; -``` - -## SafetyRating.probability - -Signature: - -```typescript -probability: HarmProbability; -``` - -## SafetyRating.probabilityScore - -The probability score of the harm category. - -This property is only supported when using the Vertex AI Gemini API ([VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). When using the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)), this property is not supported and will default to 0. - -Signature: - -```typescript -probabilityScore: number; -``` - -## SafetyRating.severity - -The harm severity level. - -This property is only supported when using the Vertex AI Gemini API ([VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). When using the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)), this property is not supported and will default to `HarmSeverity.UNSUPPORTED`. - -Signature: - -```typescript -severity: HarmSeverity; -``` - -## SafetyRating.severityScore - -The severity score of the harm category. - -This property is only supported when using the Vertex AI Gemini API ([VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). When using the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)), this property is not supported and will default to 0. - -Signature: - -```typescript -severityScore: number; -``` diff --git a/docs-devsite/ai.safetysetting.md b/docs-devsite/ai.safetysetting.md deleted file mode 100644 index b6c770a5f60..00000000000 --- a/docs-devsite/ai.safetysetting.md +++ /dev/null @@ -1,55 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# SafetySetting interface -Safety setting that can be sent as part of request parameters. - -Signature: - -```typescript -export interface SafetySetting -``` - -## Properties - -| Property | Type | Description | -| --- | --- | --- | -| [category](./ai.safetysetting.md#safetysettingcategory) | [HarmCategory](./ai.md#harmcategory) | | -| [method](./ai.safetysetting.md#safetysettingmethod) | [HarmBlockMethod](./ai.md#harmblockmethod) | The harm block method.This property is only supported in the Vertex AI Gemini API ([VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). When using the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)), an [AIError](./ai.aierror.md#aierror_class) will be thrown if this property is defined. | -| [threshold](./ai.safetysetting.md#safetysettingthreshold) | [HarmBlockThreshold](./ai.md#harmblockthreshold) | | - -## SafetySetting.category - -Signature: - -```typescript -category: HarmCategory; -``` - -## SafetySetting.method - -The harm block method. - -This property is only supported in the Vertex AI Gemini API ([VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). When using the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)), an [AIError](./ai.aierror.md#aierror_class) will be thrown if this property is defined. - -Signature: - -```typescript -method?: HarmBlockMethod; -``` - -## SafetySetting.threshold - -Signature: - -```typescript -threshold: HarmBlockThreshold; -``` diff --git a/docs-devsite/ai.vertexaibackend.md b/docs-devsite/ai.vertexaibackend.md deleted file mode 100644 index 88424b75c45..00000000000 --- a/docs-devsite/ai.vertexaibackend.md +++ /dev/null @@ -1,60 +0,0 @@ -Project: /docs/reference/js/_project.yaml -Book: /docs/reference/_book.yaml -page_type: reference - -{% comment %} -DO NOT EDIT THIS FILE! -This is generated by the JS SDK team, and any local changes will be -overwritten. Changes should be made in the source code at -https://github.com/firebase/firebase-js-sdk -{% endcomment %} - -# VertexAIBackend class -Configuration class for the Vertex AI Gemini API. - -Use this with [AIOptions](./ai.aioptions.md#aioptions_interface) when initializing the AI service via [getAI()](./ai.md#getai_a94a413) to specify the Vertex AI Gemini API as the backend. - -Signature: - -```typescript -export declare class VertexAIBackend extends Backend -``` -Extends: [Backend](./ai.backend.md#backend_class) - -## Constructors - -| Constructor | Modifiers | Description | -| --- | --- | --- | -| [(constructor)(location)](./ai.vertexaibackend.md#vertexaibackendconstructor) | | Creates a configuration object for the Vertex AI backend. | - -## Properties - -| Property | Modifiers | Type | Description | -| --- | --- | --- | --- | -| [location](./ai.vertexaibackend.md#vertexaibackendlocation) | | string | The region identifier. See [Vertex AI locations](https://firebase.google.com/docs/vertex-ai/locations#available-locations) for a list of supported locations. | - -## VertexAIBackend.(constructor) - -Creates a configuration object for the Vertex AI backend. - -Signature: - -```typescript -constructor(location?: string); -``` - -#### Parameters - -| Parameter | Type | Description | -| --- | --- | --- | -| location | string | The region identifier, defaulting to us-central1; see [Vertex AI locations](https://firebase.google.com/docs/vertex-ai/locations#available-locations) for a list of supported locations. | - -## VertexAIBackend.location - -The region identifier. See [Vertex AI locations](https://firebase.google.com/docs/vertex-ai/locations#available-locations) for a list of supported locations. - -Signature: - -```typescript -readonly location: string; -``` diff --git a/docs-devsite/index.md b/docs-devsite/index.md index 47ec0be16ba..82fdb36f076 100644 --- a/docs-devsite/index.md +++ b/docs-devsite/index.md @@ -15,7 +15,6 @@ https://github.com/firebase/firebase-js-sdk | Package | Description | | --- | --- | -| [@firebase/ai](./ai.md#ai_package) | The Firebase AI Web SDK. | | [@firebase/analytics](./analytics.md#analytics_package) | The Firebase Analytics Web SDK. This SDK does not work in a Node.js environment. | | [@firebase/app](./app.md#app_package) | Firebase App | | [@firebase/app-check](./app-check.md#app-check_package) | The Firebase App Check Web SDK. | @@ -28,4 +27,5 @@ https://github.com/firebase/firebase-js-sdk | [@firebase/performance](./performance.md#performance_package) | The Firebase Performance Monitoring Web SDK. This SDK does not work in a Node.js environment. | | [@firebase/remote-config](./remote-config.md#remote-config_package) | The Firebase Remote Config Web SDK. This SDK does not work in a Node.js environment. | | [@firebase/storage](./storage.md#storage_package) | Cloud Storage for Firebase | +| [@firebase/vertexai](./vertexai.md#vertexai_package) | The Vertex AI in Firebase Web SDK. | diff --git a/docs-devsite/ai.arrayschema.md b/docs-devsite/vertexai.arrayschema.md similarity index 69% rename from docs-devsite/ai.arrayschema.md rename to docs-devsite/vertexai.arrayschema.md index ef29bbd63f5..8f228baf9e8 100644 --- a/docs-devsite/ai.arrayschema.md +++ b/docs-devsite/vertexai.arrayschema.md @@ -17,19 +17,19 @@ Schema class for "array" types. The `items` param should refer to the type of it ```typescript export declare class ArraySchema extends Schema ``` -Extends: [Schema](./ai.schema.md#schema_class) +Extends: [Schema](./vertexai.schema.md#schema_class) ## Constructors | Constructor | Modifiers | Description | | --- | --- | --- | -| [(constructor)(schemaParams, items)](./ai.arrayschema.md#arrayschemaconstructor) | | Constructs a new instance of the ArraySchema class | +| [(constructor)(schemaParams, items)](./vertexai.arrayschema.md#arrayschemaconstructor) | | Constructs a new instance of the ArraySchema class | ## Properties | Property | Modifiers | Type | Description | | --- | --- | --- | --- | -| [items](./ai.arrayschema.md#arrayschemaitems) | | [TypedSchema](./ai.md#typedschema) | | +| [items](./vertexai.arrayschema.md#arrayschemaitems) | | [TypedSchema](./vertexai.md#typedschema) | | ## ArraySchema.(constructor) @@ -45,8 +45,8 @@ constructor(schemaParams: SchemaParams, items: TypedSchema); | Parameter | Type | Description | | --- | --- | --- | -| schemaParams | [SchemaParams](./ai.schemaparams.md#schemaparams_interface) | | -| items | [TypedSchema](./ai.md#typedschema) | | +| schemaParams | [SchemaParams](./vertexai.schemaparams.md#schemaparams_interface) | | +| items | [TypedSchema](./vertexai.md#typedschema) | | ## ArraySchema.items diff --git a/docs-devsite/ai.baseparams.md b/docs-devsite/vertexai.baseparams.md similarity index 69% rename from docs-devsite/ai.baseparams.md rename to docs-devsite/vertexai.baseparams.md index 62484281f3b..382ec825210 100644 --- a/docs-devsite/ai.baseparams.md +++ b/docs-devsite/vertexai.baseparams.md @@ -22,8 +22,8 @@ export interface BaseParams | Property | Type | Description | | --- | --- | --- | -| [generationConfig](./ai.baseparams.md#baseparamsgenerationconfig) | [GenerationConfig](./ai.generationconfig.md#generationconfig_interface) | | -| [safetySettings](./ai.baseparams.md#baseparamssafetysettings) | [SafetySetting](./ai.safetysetting.md#safetysetting_interface)\[\] | | +| [generationConfig](./vertexai.baseparams.md#baseparamsgenerationconfig) | [GenerationConfig](./vertexai.generationconfig.md#generationconfig_interface) | | +| [safetySettings](./vertexai.baseparams.md#baseparamssafetysettings) | [SafetySetting](./vertexai.safetysetting.md#safetysetting_interface)\[\] | | ## BaseParams.generationConfig diff --git a/docs-devsite/ai.booleanschema.md b/docs-devsite/vertexai.booleanschema.md similarity index 71% rename from docs-devsite/ai.booleanschema.md rename to docs-devsite/vertexai.booleanschema.md index 5797d530286..89449f26142 100644 --- a/docs-devsite/ai.booleanschema.md +++ b/docs-devsite/vertexai.booleanschema.md @@ -17,13 +17,13 @@ Schema class for "boolean" types. ```typescript export declare class BooleanSchema extends Schema ``` -Extends: [Schema](./ai.schema.md#schema_class) +Extends: [Schema](./vertexai.schema.md#schema_class) ## Constructors | Constructor | Modifiers | Description | | --- | --- | --- | -| [(constructor)(schemaParams)](./ai.booleanschema.md#booleanschemaconstructor) | | Constructs a new instance of the BooleanSchema class | +| [(constructor)(schemaParams)](./vertexai.booleanschema.md#booleanschemaconstructor) | | Constructs a new instance of the BooleanSchema class | ## BooleanSchema.(constructor) @@ -39,5 +39,5 @@ constructor(schemaParams?: SchemaParams); | Parameter | Type | Description | | --- | --- | --- | -| schemaParams | [SchemaParams](./ai.schemaparams.md#schemaparams_interface) | | +| schemaParams | [SchemaParams](./vertexai.schemaparams.md#schemaparams_interface) | | diff --git a/docs-devsite/ai.chatsession.md b/docs-devsite/vertexai.chatsession.md similarity index 52% rename from docs-devsite/ai.chatsession.md rename to docs-devsite/vertexai.chatsession.md index 1d6e403b6a8..ed359f7e08c 100644 --- a/docs-devsite/ai.chatsession.md +++ b/docs-devsite/vertexai.chatsession.md @@ -22,23 +22,23 @@ export declare class ChatSession | Constructor | Modifiers | Description | | --- | --- | --- | -| [(constructor)(apiSettings, model, params, requestOptions)](./ai.chatsession.md#chatsessionconstructor) | | Constructs a new instance of the ChatSession class | +| [(constructor)(apiSettings, model, params, requestOptions)](./vertexai.chatsession.md#chatsessionconstructor) | | Constructs a new instance of the ChatSession class | ## Properties | Property | Modifiers | Type | Description | | --- | --- | --- | --- | -| [model](./ai.chatsession.md#chatsessionmodel) | | string | | -| [params](./ai.chatsession.md#chatsessionparams) | | [StartChatParams](./ai.startchatparams.md#startchatparams_interface) \| undefined | | -| [requestOptions](./ai.chatsession.md#chatsessionrequestoptions) | | [RequestOptions](./ai.requestoptions.md#requestoptions_interface) \| undefined | | +| [model](./vertexai.chatsession.md#chatsessionmodel) | | string | | +| [params](./vertexai.chatsession.md#chatsessionparams) | | [StartChatParams](./vertexai.startchatparams.md#startchatparams_interface) \| undefined | | +| [requestOptions](./vertexai.chatsession.md#chatsessionrequestoptions) | | [RequestOptions](./vertexai.requestoptions.md#requestoptions_interface) \| undefined | | ## Methods | Method | Modifiers | Description | | --- | --- | --- | -| [getHistory()](./ai.chatsession.md#chatsessiongethistory) | | Gets the chat history so far. Blocked prompts are not added to history. Neither blocked candidates nor the prompts that generated them are added to history. | -| [sendMessage(request)](./ai.chatsession.md#chatsessionsendmessage) | | Sends a chat message and receives a non-streaming [GenerateContentResult](./ai.generatecontentresult.md#generatecontentresult_interface) | -| [sendMessageStream(request)](./ai.chatsession.md#chatsessionsendmessagestream) | | Sends a chat message and receives the response as a [GenerateContentStreamResult](./ai.generatecontentstreamresult.md#generatecontentstreamresult_interface) containing an iterable stream and a response promise. | +| [getHistory()](./vertexai.chatsession.md#chatsessiongethistory) | | Gets the chat history so far. Blocked prompts are not added to history. Neither blocked candidates nor the prompts that generated them are added to history. | +| [sendMessage(request)](./vertexai.chatsession.md#chatsessionsendmessage) | | Sends a chat message and receives a non-streaming [GenerateContentResult](./vertexai.generatecontentresult.md#generatecontentresult_interface) | +| [sendMessageStream(request)](./vertexai.chatsession.md#chatsessionsendmessagestream) | | Sends a chat message and receives the response as a [GenerateContentStreamResult](./vertexai.generatecontentstreamresult.md#generatecontentstreamresult_interface) containing an iterable stream and a response promise. | ## ChatSession.(constructor) @@ -56,8 +56,8 @@ constructor(apiSettings: ApiSettings, model: string, params?: StartChatParams | | --- | --- | --- | | apiSettings | ApiSettings | | | model | string | | -| params | [StartChatParams](./ai.startchatparams.md#startchatparams_interface) \| undefined | | -| requestOptions | [RequestOptions](./ai.requestoptions.md#requestoptions_interface) \| undefined | | +| params | [StartChatParams](./vertexai.startchatparams.md#startchatparams_interface) \| undefined | | +| requestOptions | [RequestOptions](./vertexai.requestoptions.md#requestoptions_interface) \| undefined | | ## ChatSession.model @@ -94,11 +94,11 @@ getHistory(): Promise; ``` Returns: -Promise<[Content](./ai.content.md#content_interface)\[\]> +Promise<[Content](./vertexai.content.md#content_interface)\[\]> ## ChatSession.sendMessage() -Sends a chat message and receives a non-streaming [GenerateContentResult](./ai.generatecontentresult.md#generatecontentresult_interface) +Sends a chat message and receives a non-streaming [GenerateContentResult](./vertexai.generatecontentresult.md#generatecontentresult_interface) Signature: @@ -110,15 +110,15 @@ sendMessage(request: string | Array): Promise> | | +| request | string \| Array<string \| [Part](./vertexai.md#part)> | | Returns: -Promise<[GenerateContentResult](./ai.generatecontentresult.md#generatecontentresult_interface)> +Promise<[GenerateContentResult](./vertexai.generatecontentresult.md#generatecontentresult_interface)> ## ChatSession.sendMessageStream() -Sends a chat message and receives the response as a [GenerateContentStreamResult](./ai.generatecontentstreamresult.md#generatecontentstreamresult_interface) containing an iterable stream and a response promise. +Sends a chat message and receives the response as a [GenerateContentStreamResult](./vertexai.generatecontentstreamresult.md#generatecontentstreamresult_interface) containing an iterable stream and a response promise. Signature: @@ -130,9 +130,9 @@ sendMessageStream(request: string | Array): Promise> | | +| request | string \| Array<string \| [Part](./vertexai.md#part)> | | Returns: -Promise<[GenerateContentStreamResult](./ai.generatecontentstreamresult.md#generatecontentstreamresult_interface)> +Promise<[GenerateContentStreamResult](./vertexai.generatecontentstreamresult.md#generatecontentstreamresult_interface)> diff --git a/docs-devsite/vertexai.citation.md b/docs-devsite/vertexai.citation.md new file mode 100644 index 00000000000..b5f5a19f231 --- /dev/null +++ b/docs-devsite/vertexai.citation.md @@ -0,0 +1,78 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# Citation interface +A single citation. + +Signature: + +```typescript +export interface Citation +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [endIndex](./vertexai.citation.md#citationendindex) | number | | +| [license](./vertexai.citation.md#citationlicense) | string | | +| [publicationDate](./vertexai.citation.md#citationpublicationdate) | Date | | +| [startIndex](./vertexai.citation.md#citationstartindex) | number | | +| [title](./vertexai.citation.md#citationtitle) | string | | +| [uri](./vertexai.citation.md#citationuri) | string | | + +## Citation.endIndex + +Signature: + +```typescript +endIndex?: number; +``` + +## Citation.license + +Signature: + +```typescript +license?: string; +``` + +## Citation.publicationDate + +Signature: + +```typescript +publicationDate?: Date; +``` + +## Citation.startIndex + +Signature: + +```typescript +startIndex?: number; +``` + +## Citation.title + +Signature: + +```typescript +title?: string; +``` + +## Citation.uri + +Signature: + +```typescript +uri?: string; +``` diff --git a/docs-devsite/ai.citationmetadata.md b/docs-devsite/vertexai.citationmetadata.md similarity index 73% rename from docs-devsite/ai.citationmetadata.md rename to docs-devsite/vertexai.citationmetadata.md index a87654de38f..c317160e64f 100644 --- a/docs-devsite/ai.citationmetadata.md +++ b/docs-devsite/vertexai.citationmetadata.md @@ -10,7 +10,7 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # CitationMetadata interface -Citation metadata that may be found on a [GenerateContentCandidate](./ai.generatecontentcandidate.md#generatecontentcandidate_interface). +Citation metadata that may be found on a [GenerateContentCandidate](./vertexai.generatecontentcandidate.md#generatecontentcandidate_interface). Signature: @@ -22,7 +22,7 @@ export interface CitationMetadata | Property | Type | Description | | --- | --- | --- | -| [citations](./ai.citationmetadata.md#citationmetadatacitations) | [Citation](./ai.citation.md#citation_interface)\[\] | | +| [citations](./vertexai.citationmetadata.md#citationmetadatacitations) | [Citation](./vertexai.citation.md#citation_interface)\[\] | | ## CitationMetadata.citations diff --git a/docs-devsite/ai.content.md b/docs-devsite/vertexai.content.md similarity index 79% rename from docs-devsite/ai.content.md rename to docs-devsite/vertexai.content.md index 299a0947924..7a4634a62bc 100644 --- a/docs-devsite/ai.content.md +++ b/docs-devsite/vertexai.content.md @@ -22,8 +22,8 @@ export interface Content | Property | Type | Description | | --- | --- | --- | -| [parts](./ai.content.md#contentparts) | [Part](./ai.md#part)\[\] | | -| [role](./ai.content.md#contentrole) | [Role](./ai.md#role) | | +| [parts](./vertexai.content.md#contentparts) | [Part](./vertexai.md#part)\[\] | | +| [role](./vertexai.content.md#contentrole) | [Role](./vertexai.md#role) | | ## Content.parts diff --git a/docs-devsite/ai.counttokensrequest.md b/docs-devsite/vertexai.counttokensrequest.md similarity index 52% rename from docs-devsite/ai.counttokensrequest.md rename to docs-devsite/vertexai.counttokensrequest.md index ddcb020378b..740ae5feed4 100644 --- a/docs-devsite/ai.counttokensrequest.md +++ b/docs-devsite/vertexai.counttokensrequest.md @@ -10,7 +10,7 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # CountTokensRequest interface -Params for calling [GenerativeModel.countTokens()](./ai.generativemodel.md#generativemodelcounttokens) +Params for calling [GenerativeModel.countTokens()](./vertexai.generativemodel.md#generativemodelcounttokens) Signature: @@ -22,10 +22,10 @@ export interface CountTokensRequest | Property | Type | Description | | --- | --- | --- | -| [contents](./ai.counttokensrequest.md#counttokensrequestcontents) | [Content](./ai.content.md#content_interface)\[\] | | -| [generationConfig](./ai.counttokensrequest.md#counttokensrequestgenerationconfig) | [GenerationConfig](./ai.generationconfig.md#generationconfig_interface) | Configuration options that control how the model generates a response. | -| [systemInstruction](./ai.counttokensrequest.md#counttokensrequestsysteminstruction) | string \| [Part](./ai.md#part) \| [Content](./ai.content.md#content_interface) | Instructions that direct the model to behave a certain way. | -| [tools](./ai.counttokensrequest.md#counttokensrequesttools) | [Tool](./ai.md#tool)\[\] | [Tool](./ai.md#tool) configuration. | +| [contents](./vertexai.counttokensrequest.md#counttokensrequestcontents) | [Content](./vertexai.content.md#content_interface)\[\] | | +| [generationConfig](./vertexai.counttokensrequest.md#counttokensrequestgenerationconfig) | [GenerationConfig](./vertexai.generationconfig.md#generationconfig_interface) | Configuration options that control how the model generates a response. | +| [systemInstruction](./vertexai.counttokensrequest.md#counttokensrequestsysteminstruction) | string \| [Part](./vertexai.md#part) \| [Content](./vertexai.content.md#content_interface) | Instructions that direct the model to behave a certain way. | +| [tools](./vertexai.counttokensrequest.md#counttokensrequesttools) | [Tool](./vertexai.md#tool)\[\] | [Tool](./vertexai.md#tool) configuration. | ## CountTokensRequest.contents @@ -57,7 +57,7 @@ systemInstruction?: string | Part | Content; ## CountTokensRequest.tools -[Tool](./ai.md#tool) configuration. +[Tool](./vertexai.md#tool) configuration. Signature: diff --git a/docs-devsite/vertexai.counttokensresponse.md b/docs-devsite/vertexai.counttokensresponse.md new file mode 100644 index 00000000000..d67cc99fab2 --- /dev/null +++ b/docs-devsite/vertexai.counttokensresponse.md @@ -0,0 +1,57 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# CountTokensResponse interface +Response from calling [GenerativeModel.countTokens()](./vertexai.generativemodel.md#generativemodelcounttokens). + +Signature: + +```typescript +export interface CountTokensResponse +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [promptTokensDetails](./vertexai.counttokensresponse.md#counttokensresponseprompttokensdetails) | [ModalityTokenCount](./vertexai.modalitytokencount.md#modalitytokencount_interface)\[\] | The breakdown, by modality, of how many tokens are consumed by the prompt. | +| [totalBillableCharacters](./vertexai.counttokensresponse.md#counttokensresponsetotalbillablecharacters) | number | The total number of billable characters counted across all instances from the request. | +| [totalTokens](./vertexai.counttokensresponse.md#counttokensresponsetotaltokens) | number | The total number of tokens counted across all instances from the request. | + +## CountTokensResponse.promptTokensDetails + +The breakdown, by modality, of how many tokens are consumed by the prompt. + +Signature: + +```typescript +promptTokensDetails?: ModalityTokenCount[]; +``` + +## CountTokensResponse.totalBillableCharacters + +The total number of billable characters counted across all instances from the request. + +Signature: + +```typescript +totalBillableCharacters?: number; +``` + +## CountTokensResponse.totalTokens + +The total number of tokens counted across all instances from the request. + +Signature: + +```typescript +totalTokens: number; +``` diff --git a/docs-devsite/ai.customerrordata.md b/docs-devsite/vertexai.customerrordata.md similarity index 55% rename from docs-devsite/ai.customerrordata.md rename to docs-devsite/vertexai.customerrordata.md index 149ad876191..100f4a85fd9 100644 --- a/docs-devsite/ai.customerrordata.md +++ b/docs-devsite/vertexai.customerrordata.md @@ -22,10 +22,10 @@ export interface CustomErrorData | Property | Type | Description | | --- | --- | --- | -| [errorDetails](./ai.customerrordata.md#customerrordataerrordetails) | [ErrorDetails](./ai.errordetails.md#errordetails_interface)\[\] | Optional additional details about the error. | -| [response](./ai.customerrordata.md#customerrordataresponse) | [GenerateContentResponse](./ai.generatecontentresponse.md#generatecontentresponse_interface) | Response from a [GenerateContentRequest](./ai.generatecontentrequest.md#generatecontentrequest_interface) | -| [status](./ai.customerrordata.md#customerrordatastatus) | number | HTTP status code of the error response. | -| [statusText](./ai.customerrordata.md#customerrordatastatustext) | string | HTTP status text of the error response. | +| [errorDetails](./vertexai.customerrordata.md#customerrordataerrordetails) | [ErrorDetails](./vertexai.errordetails.md#errordetails_interface)\[\] | Optional additional details about the error. | +| [response](./vertexai.customerrordata.md#customerrordataresponse) | [GenerateContentResponse](./vertexai.generatecontentresponse.md#generatecontentresponse_interface) | Response from a [GenerateContentRequest](./vertexai.generatecontentrequest.md#generatecontentrequest_interface) | +| [status](./vertexai.customerrordata.md#customerrordatastatus) | number | HTTP status code of the error response. | +| [statusText](./vertexai.customerrordata.md#customerrordatastatustext) | string | HTTP status text of the error response. | ## CustomErrorData.errorDetails @@ -39,7 +39,7 @@ errorDetails?: ErrorDetails[]; ## CustomErrorData.response -Response from a [GenerateContentRequest](./ai.generatecontentrequest.md#generatecontentrequest_interface) +Response from a [GenerateContentRequest](./vertexai.generatecontentrequest.md#generatecontentrequest_interface) Signature: diff --git a/docs-devsite/ai.date_2.md b/docs-devsite/vertexai.date_2.md similarity index 80% rename from docs-devsite/ai.date_2.md rename to docs-devsite/vertexai.date_2.md index 10b3cfc41e9..cf073bb86fe 100644 --- a/docs-devsite/ai.date_2.md +++ b/docs-devsite/vertexai.date_2.md @@ -22,9 +22,9 @@ export interface Date | Property | Type | Description | | --- | --- | --- | -| [day](./ai.date_2.md#date_2day) | number | | -| [month](./ai.date_2.md#date_2month) | number | | -| [year](./ai.date_2.md#date_2year) | number | | +| [day](./vertexai.date_2.md#date_2day) | number | | +| [month](./vertexai.date_2.md#date_2month) | number | | +| [year](./vertexai.date_2.md#date_2year) | number | | ## Date\_2.day diff --git a/docs-devsite/vertexai.enhancedgeneratecontentresponse.md b/docs-devsite/vertexai.enhancedgeneratecontentresponse.md new file mode 100644 index 00000000000..b557219bf84 --- /dev/null +++ b/docs-devsite/vertexai.enhancedgeneratecontentresponse.md @@ -0,0 +1,56 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# EnhancedGenerateContentResponse interface +Response object wrapped with helper methods. + +Signature: + +```typescript +export interface EnhancedGenerateContentResponse extends GenerateContentResponse +``` +Extends: [GenerateContentResponse](./vertexai.generatecontentresponse.md#generatecontentresponse_interface) + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [functionCalls](./vertexai.enhancedgeneratecontentresponse.md#enhancedgeneratecontentresponsefunctioncalls) | () => [FunctionCall](./vertexai.functioncall.md#functioncall_interface)\[\] \| undefined | | +| [inlineDataParts](./vertexai.enhancedgeneratecontentresponse.md#enhancedgeneratecontentresponseinlinedataparts) | () => [InlineDataPart](./vertexai.inlinedatapart.md#inlinedatapart_interface)\[\] \| undefined | Aggregates and returns all [InlineDataPart](./vertexai.inlinedatapart.md#inlinedatapart_interface)s from the [GenerateContentResponse](./vertexai.generatecontentresponse.md#generatecontentresponse_interface)'s first candidate. | +| [text](./vertexai.enhancedgeneratecontentresponse.md#enhancedgeneratecontentresponsetext) | () => string | Returns the text string from the response, if available. Throws if the prompt or candidate was blocked. | + +## EnhancedGenerateContentResponse.functionCalls + +Signature: + +```typescript +functionCalls: () => FunctionCall[] | undefined; +``` + +## EnhancedGenerateContentResponse.inlineDataParts + +Aggregates and returns all [InlineDataPart](./vertexai.inlinedatapart.md#inlinedatapart_interface)s from the [GenerateContentResponse](./vertexai.generatecontentresponse.md#generatecontentresponse_interface)'s first candidate. + +Signature: + +```typescript +inlineDataParts: () => InlineDataPart[] | undefined; +``` + +## EnhancedGenerateContentResponse.text + +Returns the text string from the response, if available. Throws if the prompt or candidate was blocked. + +Signature: + +```typescript +text: () => string; +``` diff --git a/docs-devsite/ai.errordetails.md b/docs-devsite/vertexai.errordetails.md similarity index 70% rename from docs-devsite/ai.errordetails.md rename to docs-devsite/vertexai.errordetails.md index efa49c23021..68959343439 100644 --- a/docs-devsite/ai.errordetails.md +++ b/docs-devsite/vertexai.errordetails.md @@ -22,10 +22,10 @@ export interface ErrorDetails | Property | Type | Description | | --- | --- | --- | -| ["@type"](./ai.errordetails.md#errordetails"@type") | string | | -| [domain](./ai.errordetails.md#errordetailsdomain) | string | The domain where the error occurred. | -| [metadata](./ai.errordetails.md#errordetailsmetadata) | Record<string, unknown> | Additional metadata about the error. | -| [reason](./ai.errordetails.md#errordetailsreason) | string | The reason for the error. | +| ["@type"](./vertexai.errordetails.md#errordetails"@type") | string | | +| [domain](./vertexai.errordetails.md#errordetailsdomain) | string | The domain where the error occurred. | +| [metadata](./vertexai.errordetails.md#errordetailsmetadata) | Record<string, unknown> | Additional metadata about the error. | +| [reason](./vertexai.errordetails.md#errordetailsreason) | string | The reason for the error. | ## ErrorDetails."@type" diff --git a/docs-devsite/ai.filedata.md b/docs-devsite/vertexai.filedata.md similarity index 83% rename from docs-devsite/ai.filedata.md rename to docs-devsite/vertexai.filedata.md index c88ca71a8bb..7e000174692 100644 --- a/docs-devsite/ai.filedata.md +++ b/docs-devsite/vertexai.filedata.md @@ -22,8 +22,8 @@ export interface FileData | Property | Type | Description | | --- | --- | --- | -| [fileUri](./ai.filedata.md#filedatafileuri) | string | | -| [mimeType](./ai.filedata.md#filedatamimetype) | string | | +| [fileUri](./vertexai.filedata.md#filedatafileuri) | string | | +| [mimeType](./vertexai.filedata.md#filedatamimetype) | string | | ## FileData.fileUri diff --git a/docs-devsite/ai.filedatapart.md b/docs-devsite/vertexai.filedatapart.md similarity index 62% rename from docs-devsite/ai.filedatapart.md rename to docs-devsite/vertexai.filedatapart.md index 65cb9dc00ef..76162227526 100644 --- a/docs-devsite/ai.filedatapart.md +++ b/docs-devsite/vertexai.filedatapart.md @@ -10,7 +10,7 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # FileDataPart interface -Content part interface if the part represents [FileData](./ai.filedata.md#filedata_interface) +Content part interface if the part represents [FileData](./vertexai.filedata.md#filedata_interface) Signature: @@ -22,11 +22,11 @@ export interface FileDataPart | Property | Type | Description | | --- | --- | --- | -| [fileData](./ai.filedatapart.md#filedatapartfiledata) | [FileData](./ai.filedata.md#filedata_interface) | | -| [functionCall](./ai.filedatapart.md#filedatapartfunctioncall) | never | | -| [functionResponse](./ai.filedatapart.md#filedatapartfunctionresponse) | never | | -| [inlineData](./ai.filedatapart.md#filedatapartinlinedata) | never | | -| [text](./ai.filedatapart.md#filedataparttext) | never | | +| [fileData](./vertexai.filedatapart.md#filedatapartfiledata) | [FileData](./vertexai.filedata.md#filedata_interface) | | +| [functionCall](./vertexai.filedatapart.md#filedatapartfunctioncall) | never | | +| [functionResponse](./vertexai.filedatapart.md#filedatapartfunctionresponse) | never | | +| [inlineData](./vertexai.filedatapart.md#filedatapartinlinedata) | never | | +| [text](./vertexai.filedatapart.md#filedataparttext) | never | | ## FileDataPart.fileData diff --git a/docs-devsite/ai.functioncall.md b/docs-devsite/vertexai.functioncall.md similarity index 59% rename from docs-devsite/ai.functioncall.md rename to docs-devsite/vertexai.functioncall.md index 1c789784fe1..299fb7130f4 100644 --- a/docs-devsite/ai.functioncall.md +++ b/docs-devsite/vertexai.functioncall.md @@ -10,7 +10,7 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # FunctionCall interface -A predicted [FunctionCall](./ai.functioncall.md#functioncall_interface) returned from the model that contains a string representing the [FunctionDeclaration.name](./ai.functiondeclaration.md#functiondeclarationname) and a structured JSON object containing the parameters and their values. +A predicted [FunctionCall](./vertexai.functioncall.md#functioncall_interface) returned from the model that contains a string representing the [FunctionDeclaration.name](./vertexai.functiondeclaration.md#functiondeclarationname) and a structured JSON object containing the parameters and their values. Signature: @@ -22,8 +22,8 @@ export interface FunctionCall | Property | Type | Description | | --- | --- | --- | -| [args](./ai.functioncall.md#functioncallargs) | object | | -| [name](./ai.functioncall.md#functioncallname) | string | | +| [args](./vertexai.functioncall.md#functioncallargs) | object | | +| [name](./vertexai.functioncall.md#functioncallname) | string | | ## FunctionCall.args diff --git a/docs-devsite/ai.functioncallingconfig.md b/docs-devsite/vertexai.functioncallingconfig.md similarity index 73% rename from docs-devsite/ai.functioncallingconfig.md rename to docs-devsite/vertexai.functioncallingconfig.md index 99531b4cb1f..3724fec5bf7 100644 --- a/docs-devsite/ai.functioncallingconfig.md +++ b/docs-devsite/vertexai.functioncallingconfig.md @@ -21,8 +21,8 @@ export interface FunctionCallingConfig | Property | Type | Description | | --- | --- | --- | -| [allowedFunctionNames](./ai.functioncallingconfig.md#functioncallingconfigallowedfunctionnames) | string\[\] | | -| [mode](./ai.functioncallingconfig.md#functioncallingconfigmode) | [FunctionCallingMode](./ai.md#functioncallingmode) | | +| [allowedFunctionNames](./vertexai.functioncallingconfig.md#functioncallingconfigallowedfunctionnames) | string\[\] | | +| [mode](./vertexai.functioncallingconfig.md#functioncallingconfigmode) | [FunctionCallingMode](./vertexai.md#functioncallingmode) | | ## FunctionCallingConfig.allowedFunctionNames diff --git a/docs-devsite/ai.functioncallpart.md b/docs-devsite/vertexai.functioncallpart.md similarity index 66% rename from docs-devsite/ai.functioncallpart.md rename to docs-devsite/vertexai.functioncallpart.md index b16e58f80a6..58fe0f5fa97 100644 --- a/docs-devsite/ai.functioncallpart.md +++ b/docs-devsite/vertexai.functioncallpart.md @@ -10,7 +10,7 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # FunctionCallPart interface -Content part interface if the part represents a [FunctionCall](./ai.functioncall.md#functioncall_interface). +Content part interface if the part represents a [FunctionCall](./vertexai.functioncall.md#functioncall_interface). Signature: @@ -22,10 +22,10 @@ export interface FunctionCallPart | Property | Type | Description | | --- | --- | --- | -| [functionCall](./ai.functioncallpart.md#functioncallpartfunctioncall) | [FunctionCall](./ai.functioncall.md#functioncall_interface) | | -| [functionResponse](./ai.functioncallpart.md#functioncallpartfunctionresponse) | never | | -| [inlineData](./ai.functioncallpart.md#functioncallpartinlinedata) | never | | -| [text](./ai.functioncallpart.md#functioncallparttext) | never | | +| [functionCall](./vertexai.functioncallpart.md#functioncallpartfunctioncall) | [FunctionCall](./vertexai.functioncall.md#functioncall_interface) | | +| [functionResponse](./vertexai.functioncallpart.md#functioncallpartfunctionresponse) | never | | +| [inlineData](./vertexai.functioncallpart.md#functioncallpartinlinedata) | never | | +| [text](./vertexai.functioncallpart.md#functioncallparttext) | never | | ## FunctionCallPart.functionCall diff --git a/docs-devsite/ai.functiondeclaration.md b/docs-devsite/vertexai.functiondeclaration.md similarity index 65% rename from docs-devsite/ai.functiondeclaration.md rename to docs-devsite/vertexai.functiondeclaration.md index 2a87d67ed47..211c1dd868d 100644 --- a/docs-devsite/ai.functiondeclaration.md +++ b/docs-devsite/vertexai.functiondeclaration.md @@ -22,9 +22,9 @@ export declare interface FunctionDeclaration | Property | Type | Description | | --- | --- | --- | -| [description](./ai.functiondeclaration.md#functiondeclarationdescription) | string | Description and purpose of the function. Model uses it to decide how and whether to call the function. | -| [name](./ai.functiondeclaration.md#functiondeclarationname) | string | The name of the function to call. Must start with a letter or an underscore. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a max length of 64. | -| [parameters](./ai.functiondeclaration.md#functiondeclarationparameters) | [ObjectSchemaInterface](./ai.objectschemainterface.md#objectschemainterface_interface) | Optional. Describes the parameters to this function in JSON Schema Object format. Reflects the Open API 3.03 Parameter Object. Parameter names are case-sensitive. For a function with no parameters, this can be left unset. | +| [description](./vertexai.functiondeclaration.md#functiondeclarationdescription) | string | Description and purpose of the function. Model uses it to decide how and whether to call the function. | +| [name](./vertexai.functiondeclaration.md#functiondeclarationname) | string | The name of the function to call. Must start with a letter or an underscore. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a max length of 64. | +| [parameters](./vertexai.functiondeclaration.md#functiondeclarationparameters) | [ObjectSchemaInterface](./vertexai.objectschemainterface.md#objectschemainterface_interface) | Optional. Describes the parameters to this function in JSON Schema Object format. Reflects the Open API 3.03 Parameter Object. Parameter names are case-sensitive. For a function with no parameters, this can be left unset. | ## FunctionDeclaration.description diff --git a/docs-devsite/vertexai.functiondeclarationstool.md b/docs-devsite/vertexai.functiondeclarationstool.md new file mode 100644 index 00000000000..2eff3138d8d --- /dev/null +++ b/docs-devsite/vertexai.functiondeclarationstool.md @@ -0,0 +1,35 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# FunctionDeclarationsTool interface +A `FunctionDeclarationsTool` is a piece of code that enables the system to interact with external systems to perform an action, or set of actions, outside of knowledge and scope of the model. + +Signature: + +```typescript +export declare interface FunctionDeclarationsTool +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [functionDeclarations](./vertexai.functiondeclarationstool.md#functiondeclarationstoolfunctiondeclarations) | [FunctionDeclaration](./vertexai.functiondeclaration.md#functiondeclaration_interface)\[\] | Optional. One or more function declarations to be passed to the model along with the current user query. Model may decide to call a subset of these functions by populating [FunctionCall](./vertexai.functioncall.md#functioncall_interface) in the response. User should provide a [FunctionResponse](./vertexai.functionresponse.md#functionresponse_interface) for each function call in the next turn. Based on the function responses, the model will generate the final response back to the user. Maximum 64 function declarations can be provided. | + +## FunctionDeclarationsTool.functionDeclarations + +Optional. One or more function declarations to be passed to the model along with the current user query. Model may decide to call a subset of these functions by populating [FunctionCall](./vertexai.functioncall.md#functioncall_interface) in the response. User should provide a [FunctionResponse](./vertexai.functionresponse.md#functionresponse_interface) for each function call in the next turn. Based on the function responses, the model will generate the final response back to the user. Maximum 64 function declarations can be provided. + +Signature: + +```typescript +functionDeclarations?: FunctionDeclaration[]; +``` diff --git a/docs-devsite/ai.functionresponse.md b/docs-devsite/vertexai.functionresponse.md similarity index 51% rename from docs-devsite/ai.functionresponse.md rename to docs-devsite/vertexai.functionresponse.md index e0838cf515a..072a08b3486 100644 --- a/docs-devsite/ai.functionresponse.md +++ b/docs-devsite/vertexai.functionresponse.md @@ -10,7 +10,7 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # FunctionResponse interface -The result output from a [FunctionCall](./ai.functioncall.md#functioncall_interface) that contains a string representing the [FunctionDeclaration.name](./ai.functiondeclaration.md#functiondeclarationname) and a structured JSON object containing any output from the function is used as context to the model. This should contain the result of a [FunctionCall](./ai.functioncall.md#functioncall_interface) made based on model prediction. +The result output from a [FunctionCall](./vertexai.functioncall.md#functioncall_interface) that contains a string representing the [FunctionDeclaration.name](./vertexai.functiondeclaration.md#functiondeclarationname) and a structured JSON object containing any output from the function is used as context to the model. This should contain the result of a [FunctionCall](./vertexai.functioncall.md#functioncall_interface) made based on model prediction. Signature: @@ -22,8 +22,8 @@ export interface FunctionResponse | Property | Type | Description | | --- | --- | --- | -| [name](./ai.functionresponse.md#functionresponsename) | string | | -| [response](./ai.functionresponse.md#functionresponseresponse) | object | | +| [name](./vertexai.functionresponse.md#functionresponsename) | string | | +| [response](./vertexai.functionresponse.md#functionresponseresponse) | object | | ## FunctionResponse.name diff --git a/docs-devsite/ai.functionresponsepart.md b/docs-devsite/vertexai.functionresponsepart.md similarity index 64% rename from docs-devsite/ai.functionresponsepart.md rename to docs-devsite/vertexai.functionresponsepart.md index 9c80258f43f..ffbf2ad0517 100644 --- a/docs-devsite/ai.functionresponsepart.md +++ b/docs-devsite/vertexai.functionresponsepart.md @@ -10,7 +10,7 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # FunctionResponsePart interface -Content part interface if the part represents [FunctionResponse](./ai.functionresponse.md#functionresponse_interface). +Content part interface if the part represents [FunctionResponse](./vertexai.functionresponse.md#functionresponse_interface). Signature: @@ -22,10 +22,10 @@ export interface FunctionResponsePart | Property | Type | Description | | --- | --- | --- | -| [functionCall](./ai.functionresponsepart.md#functionresponsepartfunctioncall) | never | | -| [functionResponse](./ai.functionresponsepart.md#functionresponsepartfunctionresponse) | [FunctionResponse](./ai.functionresponse.md#functionresponse_interface) | | -| [inlineData](./ai.functionresponsepart.md#functionresponsepartinlinedata) | never | | -| [text](./ai.functionresponsepart.md#functionresponseparttext) | never | | +| [functionCall](./vertexai.functionresponsepart.md#functionresponsepartfunctioncall) | never | | +| [functionResponse](./vertexai.functionresponsepart.md#functionresponsepartfunctionresponse) | [FunctionResponse](./vertexai.functionresponse.md#functionresponse_interface) | | +| [inlineData](./vertexai.functionresponsepart.md#functionresponsepartinlinedata) | never | | +| [text](./vertexai.functionresponsepart.md#functionresponseparttext) | never | | ## FunctionResponsePart.functionCall diff --git a/docs-devsite/ai.generatecontentcandidate.md b/docs-devsite/vertexai.generatecontentcandidate.md similarity index 51% rename from docs-devsite/ai.generatecontentcandidate.md rename to docs-devsite/vertexai.generatecontentcandidate.md index ca0383549a7..e5fd9eacbbe 100644 --- a/docs-devsite/ai.generatecontentcandidate.md +++ b/docs-devsite/vertexai.generatecontentcandidate.md @@ -10,7 +10,7 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # GenerateContentCandidate interface -A candidate returned as part of a [GenerateContentResponse](./ai.generatecontentresponse.md#generatecontentresponse_interface). +A candidate returned as part of a [GenerateContentResponse](./vertexai.generatecontentresponse.md#generatecontentresponse_interface). Signature: @@ -22,13 +22,13 @@ export interface GenerateContentCandidate | Property | Type | Description | | --- | --- | --- | -| [citationMetadata](./ai.generatecontentcandidate.md#generatecontentcandidatecitationmetadata) | [CitationMetadata](./ai.citationmetadata.md#citationmetadata_interface) | | -| [content](./ai.generatecontentcandidate.md#generatecontentcandidatecontent) | [Content](./ai.content.md#content_interface) | | -| [finishMessage](./ai.generatecontentcandidate.md#generatecontentcandidatefinishmessage) | string | | -| [finishReason](./ai.generatecontentcandidate.md#generatecontentcandidatefinishreason) | [FinishReason](./ai.md#finishreason) | | -| [groundingMetadata](./ai.generatecontentcandidate.md#generatecontentcandidategroundingmetadata) | [GroundingMetadata](./ai.groundingmetadata.md#groundingmetadata_interface) | | -| [index](./ai.generatecontentcandidate.md#generatecontentcandidateindex) | number | | -| [safetyRatings](./ai.generatecontentcandidate.md#generatecontentcandidatesafetyratings) | [SafetyRating](./ai.safetyrating.md#safetyrating_interface)\[\] | | +| [citationMetadata](./vertexai.generatecontentcandidate.md#generatecontentcandidatecitationmetadata) | [CitationMetadata](./vertexai.citationmetadata.md#citationmetadata_interface) | | +| [content](./vertexai.generatecontentcandidate.md#generatecontentcandidatecontent) | [Content](./vertexai.content.md#content_interface) | | +| [finishMessage](./vertexai.generatecontentcandidate.md#generatecontentcandidatefinishmessage) | string | | +| [finishReason](./vertexai.generatecontentcandidate.md#generatecontentcandidatefinishreason) | [FinishReason](./vertexai.md#finishreason) | | +| [groundingMetadata](./vertexai.generatecontentcandidate.md#generatecontentcandidategroundingmetadata) | [GroundingMetadata](./vertexai.groundingmetadata.md#groundingmetadata_interface) | | +| [index](./vertexai.generatecontentcandidate.md#generatecontentcandidateindex) | number | | +| [safetyRatings](./vertexai.generatecontentcandidate.md#generatecontentcandidatesafetyratings) | [SafetyRating](./vertexai.safetyrating.md#safetyrating_interface)\[\] | | ## GenerateContentCandidate.citationMetadata diff --git a/docs-devsite/ai.generatecontentrequest.md b/docs-devsite/vertexai.generatecontentrequest.md similarity index 53% rename from docs-devsite/ai.generatecontentrequest.md rename to docs-devsite/vertexai.generatecontentrequest.md index 257a2d308fa..31f1103a2e2 100644 --- a/docs-devsite/ai.generatecontentrequest.md +++ b/docs-devsite/vertexai.generatecontentrequest.md @@ -10,23 +10,23 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # GenerateContentRequest interface -Request sent through [GenerativeModel.generateContent()](./ai.generativemodel.md#generativemodelgeneratecontent) +Request sent through [GenerativeModel.generateContent()](./vertexai.generativemodel.md#generativemodelgeneratecontent) Signature: ```typescript export interface GenerateContentRequest extends BaseParams ``` -Extends: [BaseParams](./ai.baseparams.md#baseparams_interface) +Extends: [BaseParams](./vertexai.baseparams.md#baseparams_interface) ## Properties | Property | Type | Description | | --- | --- | --- | -| [contents](./ai.generatecontentrequest.md#generatecontentrequestcontents) | [Content](./ai.content.md#content_interface)\[\] | | -| [systemInstruction](./ai.generatecontentrequest.md#generatecontentrequestsysteminstruction) | string \| [Part](./ai.md#part) \| [Content](./ai.content.md#content_interface) | | -| [toolConfig](./ai.generatecontentrequest.md#generatecontentrequesttoolconfig) | [ToolConfig](./ai.toolconfig.md#toolconfig_interface) | | -| [tools](./ai.generatecontentrequest.md#generatecontentrequesttools) | [Tool](./ai.md#tool)\[\] | | +| [contents](./vertexai.generatecontentrequest.md#generatecontentrequestcontents) | [Content](./vertexai.content.md#content_interface)\[\] | | +| [systemInstruction](./vertexai.generatecontentrequest.md#generatecontentrequestsysteminstruction) | string \| [Part](./vertexai.md#part) \| [Content](./vertexai.content.md#content_interface) | | +| [toolConfig](./vertexai.generatecontentrequest.md#generatecontentrequesttoolconfig) | [ToolConfig](./vertexai.toolconfig.md#toolconfig_interface) | | +| [tools](./vertexai.generatecontentrequest.md#generatecontentrequesttools) | [Tool](./vertexai.md#tool)\[\] | | ## GenerateContentRequest.contents diff --git a/docs-devsite/vertexai.generatecontentresponse.md b/docs-devsite/vertexai.generatecontentresponse.md new file mode 100644 index 00000000000..304674c9b6f --- /dev/null +++ b/docs-devsite/vertexai.generatecontentresponse.md @@ -0,0 +1,51 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# GenerateContentResponse interface +Individual response from [GenerativeModel.generateContent()](./vertexai.generativemodel.md#generativemodelgeneratecontent) and [GenerativeModel.generateContentStream()](./vertexai.generativemodel.md#generativemodelgeneratecontentstream). `generateContentStream()` will return one in each chunk until the stream is done. + +Signature: + +```typescript +export interface GenerateContentResponse +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [candidates](./vertexai.generatecontentresponse.md#generatecontentresponsecandidates) | [GenerateContentCandidate](./vertexai.generatecontentcandidate.md#generatecontentcandidate_interface)\[\] | | +| [promptFeedback](./vertexai.generatecontentresponse.md#generatecontentresponsepromptfeedback) | [PromptFeedback](./vertexai.promptfeedback.md#promptfeedback_interface) | | +| [usageMetadata](./vertexai.generatecontentresponse.md#generatecontentresponseusagemetadata) | [UsageMetadata](./vertexai.usagemetadata.md#usagemetadata_interface) | | + +## GenerateContentResponse.candidates + +Signature: + +```typescript +candidates?: GenerateContentCandidate[]; +``` + +## GenerateContentResponse.promptFeedback + +Signature: + +```typescript +promptFeedback?: PromptFeedback; +``` + +## GenerateContentResponse.usageMetadata + +Signature: + +```typescript +usageMetadata?: UsageMetadata; +``` diff --git a/docs-devsite/ai.generatecontentresult.md b/docs-devsite/vertexai.generatecontentresult.md similarity index 71% rename from docs-devsite/ai.generatecontentresult.md rename to docs-devsite/vertexai.generatecontentresult.md index a59e75f8672..3e162f9ebb2 100644 --- a/docs-devsite/ai.generatecontentresult.md +++ b/docs-devsite/vertexai.generatecontentresult.md @@ -10,7 +10,7 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # GenerateContentResult interface -Result object returned from [GenerativeModel.generateContent()](./ai.generativemodel.md#generativemodelgeneratecontent) call. +Result object returned from [GenerativeModel.generateContent()](./vertexai.generativemodel.md#generativemodelgeneratecontent) call. Signature: @@ -22,7 +22,7 @@ export interface GenerateContentResult | Property | Type | Description | | --- | --- | --- | -| [response](./ai.generatecontentresult.md#generatecontentresultresponse) | [EnhancedGenerateContentResponse](./ai.enhancedgeneratecontentresponse.md#enhancedgeneratecontentresponse_interface) | | +| [response](./vertexai.generatecontentresult.md#generatecontentresultresponse) | [EnhancedGenerateContentResponse](./vertexai.enhancedgeneratecontentresponse.md#enhancedgeneratecontentresponse_interface) | | ## GenerateContentResult.response diff --git a/docs-devsite/ai.generatecontentstreamresult.md b/docs-devsite/vertexai.generatecontentstreamresult.md similarity index 54% rename from docs-devsite/ai.generatecontentstreamresult.md rename to docs-devsite/vertexai.generatecontentstreamresult.md index fd3a06e933e..340abb1d0bd 100644 --- a/docs-devsite/ai.generatecontentstreamresult.md +++ b/docs-devsite/vertexai.generatecontentstreamresult.md @@ -10,7 +10,7 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # GenerateContentStreamResult interface -Result object returned from [GenerativeModel.generateContentStream()](./ai.generativemodel.md#generativemodelgeneratecontentstream) call. Iterate over `stream` to get chunks as they come in and/or use the `response` promise to get the aggregated response when the stream is done. +Result object returned from [GenerativeModel.generateContentStream()](./vertexai.generativemodel.md#generativemodelgeneratecontentstream) call. Iterate over `stream` to get chunks as they come in and/or use the `response` promise to get the aggregated response when the stream is done. Signature: @@ -22,8 +22,8 @@ export interface GenerateContentStreamResult | Property | Type | Description | | --- | --- | --- | -| [response](./ai.generatecontentstreamresult.md#generatecontentstreamresultresponse) | Promise<[EnhancedGenerateContentResponse](./ai.enhancedgeneratecontentresponse.md#enhancedgeneratecontentresponse_interface)> | | -| [stream](./ai.generatecontentstreamresult.md#generatecontentstreamresultstream) | AsyncGenerator<[EnhancedGenerateContentResponse](./ai.enhancedgeneratecontentresponse.md#enhancedgeneratecontentresponse_interface)> | | +| [response](./vertexai.generatecontentstreamresult.md#generatecontentstreamresultresponse) | Promise<[EnhancedGenerateContentResponse](./vertexai.enhancedgeneratecontentresponse.md#enhancedgeneratecontentresponse_interface)> | | +| [stream](./vertexai.generatecontentstreamresult.md#generatecontentstreamresultstream) | AsyncGenerator<[EnhancedGenerateContentResponse](./vertexai.enhancedgeneratecontentresponse.md#enhancedgeneratecontentresponse_interface)> | | ## GenerateContentStreamResult.response diff --git a/docs-devsite/vertexai.generationconfig.md b/docs-devsite/vertexai.generationconfig.md new file mode 100644 index 00000000000..360ef709419 --- /dev/null +++ b/docs-devsite/vertexai.generationconfig.md @@ -0,0 +1,134 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# GenerationConfig interface +Config options for content-related requests + +Signature: + +```typescript +export interface GenerationConfig +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [candidateCount](./vertexai.generationconfig.md#generationconfigcandidatecount) | number | | +| [frequencyPenalty](./vertexai.generationconfig.md#generationconfigfrequencypenalty) | number | | +| [maxOutputTokens](./vertexai.generationconfig.md#generationconfigmaxoutputtokens) | number | | +| [presencePenalty](./vertexai.generationconfig.md#generationconfigpresencepenalty) | number | | +| [responseMimeType](./vertexai.generationconfig.md#generationconfigresponsemimetype) | string | Output response MIME type of the generated candidate text. Supported MIME types are text/plain (default, text output), application/json (JSON response in the candidates), and text/x.enum. | +| [responseModalities](./vertexai.generationconfig.md#generationconfigresponsemodalities) | [ResponseModality](./vertexai.md#responsemodality)\[\] | (Public Preview) Generation modalities to be returned in generation responses. | +| [responseSchema](./vertexai.generationconfig.md#generationconfigresponseschema) | [TypedSchema](./vertexai.md#typedschema) \| [SchemaRequest](./vertexai.schemarequest.md#schemarequest_interface) | Output response schema of the generated candidate text. This value can be a class generated with a [Schema](./vertexai.schema.md#schema_class) static method like Schema.string() or Schema.object() or it can be a plain JS object matching the [SchemaRequest](./vertexai.schemarequest.md#schemarequest_interface) interface.
Note: This only applies when the specified responseMIMEType supports a schema; currently this is limited to application/json and text/x.enum. | +| [stopSequences](./vertexai.generationconfig.md#generationconfigstopsequences) | string\[\] | | +| [temperature](./vertexai.generationconfig.md#generationconfigtemperature) | number | | +| [topK](./vertexai.generationconfig.md#generationconfigtopk) | number | | +| [topP](./vertexai.generationconfig.md#generationconfigtopp) | number | | + +## GenerationConfig.candidateCount + +Signature: + +```typescript +candidateCount?: number; +``` + +## GenerationConfig.frequencyPenalty + +Signature: + +```typescript +frequencyPenalty?: number; +``` + +## GenerationConfig.maxOutputTokens + +Signature: + +```typescript +maxOutputTokens?: number; +``` + +## GenerationConfig.presencePenalty + +Signature: + +```typescript +presencePenalty?: number; +``` + +## GenerationConfig.responseMimeType + +Output response MIME type of the generated candidate text. Supported MIME types are `text/plain` (default, text output), `application/json` (JSON response in the candidates), and `text/x.enum`. + +Signature: + +```typescript +responseMimeType?: string; +``` + +## GenerationConfig.responseModalities + +> This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. +> + +Generation modalities to be returned in generation responses. + +- Multimodal response generation is only supported by some Gemini models and versions; see [model versions](https://firebase.google.com/docs/vertex-ai/models). - Only image generation (`ResponseModality.IMAGE`) is supported. + +Signature: + +```typescript +responseModalities?: ResponseModality[]; +``` + +## GenerationConfig.responseSchema + +Output response schema of the generated candidate text. This value can be a class generated with a [Schema](./vertexai.schema.md#schema_class) static method like `Schema.string()` or `Schema.object()` or it can be a plain JS object matching the [SchemaRequest](./vertexai.schemarequest.md#schemarequest_interface) interface.
Note: This only applies when the specified `responseMIMEType` supports a schema; currently this is limited to `application/json` and `text/x.enum`. + +Signature: + +```typescript +responseSchema?: TypedSchema | SchemaRequest; +``` + +## GenerationConfig.stopSequences + +Signature: + +```typescript +stopSequences?: string[]; +``` + +## GenerationConfig.temperature + +Signature: + +```typescript +temperature?: number; +``` + +## GenerationConfig.topK + +Signature: + +```typescript +topK?: number; +``` + +## GenerationConfig.topP + +Signature: + +```typescript +topP?: number; +``` diff --git a/docs-devsite/ai.generativecontentblob.md b/docs-devsite/vertexai.generativecontentblob.md similarity index 78% rename from docs-devsite/ai.generativecontentblob.md rename to docs-devsite/vertexai.generativecontentblob.md index 74a582aae6d..dfcd098291f 100644 --- a/docs-devsite/ai.generativecontentblob.md +++ b/docs-devsite/vertexai.generativecontentblob.md @@ -22,8 +22,8 @@ export interface GenerativeContentBlob | Property | Type | Description | | --- | --- | --- | -| [data](./ai.generativecontentblob.md#generativecontentblobdata) | string | Image as a base64 string. | -| [mimeType](./ai.generativecontentblob.md#generativecontentblobmimetype) | string | | +| [data](./vertexai.generativecontentblob.md#generativecontentblobdata) | string | Image as a base64 string. | +| [mimeType](./vertexai.generativecontentblob.md#generativecontentblobmimetype) | string | | ## GenerativeContentBlob.data diff --git a/docs-devsite/vertexai.generativemodel.md b/docs-devsite/vertexai.generativemodel.md new file mode 100644 index 00000000000..e4a238b0af5 --- /dev/null +++ b/docs-devsite/vertexai.generativemodel.md @@ -0,0 +1,193 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# GenerativeModel class +Class for generative model APIs. + +Signature: + +```typescript +export declare class GenerativeModel extends VertexAIModel +``` +Extends: [VertexAIModel](./vertexai.vertexaimodel.md#vertexaimodel_class) + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(vertexAI, modelParams, requestOptions)](./vertexai.generativemodel.md#generativemodelconstructor) | | Constructs a new instance of the GenerativeModel class | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [generationConfig](./vertexai.generativemodel.md#generativemodelgenerationconfig) | | [GenerationConfig](./vertexai.generationconfig.md#generationconfig_interface) | | +| [requestOptions](./vertexai.generativemodel.md#generativemodelrequestoptions) | | [RequestOptions](./vertexai.requestoptions.md#requestoptions_interface) | | +| [safetySettings](./vertexai.generativemodel.md#generativemodelsafetysettings) | | [SafetySetting](./vertexai.safetysetting.md#safetysetting_interface)\[\] | | +| [systemInstruction](./vertexai.generativemodel.md#generativemodelsysteminstruction) | | [Content](./vertexai.content.md#content_interface) | | +| [toolConfig](./vertexai.generativemodel.md#generativemodeltoolconfig) | | [ToolConfig](./vertexai.toolconfig.md#toolconfig_interface) | | +| [tools](./vertexai.generativemodel.md#generativemodeltools) | | [Tool](./vertexai.md#tool)\[\] | | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [countTokens(request)](./vertexai.generativemodel.md#generativemodelcounttokens) | | Counts the tokens in the provided request. | +| [generateContent(request)](./vertexai.generativemodel.md#generativemodelgeneratecontent) | | Makes a single non-streaming call to the model and returns an object containing a single [GenerateContentResponse](./vertexai.generatecontentresponse.md#generatecontentresponse_interface). | +| [generateContentStream(request)](./vertexai.generativemodel.md#generativemodelgeneratecontentstream) | | Makes a single streaming call to the model and returns an object containing an iterable stream that iterates over all chunks in the streaming response as well as a promise that returns the final aggregated response. | +| [startChat(startChatParams)](./vertexai.generativemodel.md#generativemodelstartchat) | | Gets a new [ChatSession](./vertexai.chatsession.md#chatsession_class) instance which can be used for multi-turn chats. | + +## GenerativeModel.(constructor) + +Constructs a new instance of the `GenerativeModel` class + +Signature: + +```typescript +constructor(vertexAI: VertexAI, modelParams: ModelParams, requestOptions?: RequestOptions); +``` + +#### Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| vertexAI | [VertexAI](./vertexai.vertexai.md#vertexai_interface) | | +| modelParams | [ModelParams](./vertexai.modelparams.md#modelparams_interface) | | +| requestOptions | [RequestOptions](./vertexai.requestoptions.md#requestoptions_interface) | | + +## GenerativeModel.generationConfig + +Signature: + +```typescript +generationConfig: GenerationConfig; +``` + +## GenerativeModel.requestOptions + +Signature: + +```typescript +requestOptions?: RequestOptions; +``` + +## GenerativeModel.safetySettings + +Signature: + +```typescript +safetySettings: SafetySetting[]; +``` + +## GenerativeModel.systemInstruction + +Signature: + +```typescript +systemInstruction?: Content; +``` + +## GenerativeModel.toolConfig + +Signature: + +```typescript +toolConfig?: ToolConfig; +``` + +## GenerativeModel.tools + +Signature: + +```typescript +tools?: Tool[]; +``` + +## GenerativeModel.countTokens() + +Counts the tokens in the provided request. + +Signature: + +```typescript +countTokens(request: CountTokensRequest | string | Array): Promise; +``` + +#### Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| request | [CountTokensRequest](./vertexai.counttokensrequest.md#counttokensrequest_interface) \| string \| Array<string \| [Part](./vertexai.md#part)> | | + +Returns: + +Promise<[CountTokensResponse](./vertexai.counttokensresponse.md#counttokensresponse_interface)> + +## GenerativeModel.generateContent() + +Makes a single non-streaming call to the model and returns an object containing a single [GenerateContentResponse](./vertexai.generatecontentresponse.md#generatecontentresponse_interface). + +Signature: + +```typescript +generateContent(request: GenerateContentRequest | string | Array): Promise; +``` + +#### Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| request | [GenerateContentRequest](./vertexai.generatecontentrequest.md#generatecontentrequest_interface) \| string \| Array<string \| [Part](./vertexai.md#part)> | | + +Returns: + +Promise<[GenerateContentResult](./vertexai.generatecontentresult.md#generatecontentresult_interface)> + +## GenerativeModel.generateContentStream() + +Makes a single streaming call to the model and returns an object containing an iterable stream that iterates over all chunks in the streaming response as well as a promise that returns the final aggregated response. + +Signature: + +```typescript +generateContentStream(request: GenerateContentRequest | string | Array): Promise; +``` + +#### Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| request | [GenerateContentRequest](./vertexai.generatecontentrequest.md#generatecontentrequest_interface) \| string \| Array<string \| [Part](./vertexai.md#part)> | | + +Returns: + +Promise<[GenerateContentStreamResult](./vertexai.generatecontentstreamresult.md#generatecontentstreamresult_interface)> + +## GenerativeModel.startChat() + +Gets a new [ChatSession](./vertexai.chatsession.md#chatsession_class) instance which can be used for multi-turn chats. + +Signature: + +```typescript +startChat(startChatParams?: StartChatParams): ChatSession; +``` + +#### Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| startChatParams | [StartChatParams](./vertexai.startchatparams.md#startchatparams_interface) | | + +Returns: + +[ChatSession](./vertexai.chatsession.md#chatsession_class) + diff --git a/docs-devsite/ai.groundingattribution.md b/docs-devsite/vertexai.groundingattribution.md similarity index 61% rename from docs-devsite/ai.groundingattribution.md rename to docs-devsite/vertexai.groundingattribution.md index a0895550bf1..b3a3b6257c3 100644 --- a/docs-devsite/ai.groundingattribution.md +++ b/docs-devsite/vertexai.groundingattribution.md @@ -24,10 +24,10 @@ export interface GroundingAttribution | Property | Type | Description | | --- | --- | --- | -| [confidenceScore](./ai.groundingattribution.md#groundingattributionconfidencescore) | number | | -| [retrievedContext](./ai.groundingattribution.md#groundingattributionretrievedcontext) | [RetrievedContextAttribution](./ai.retrievedcontextattribution.md#retrievedcontextattribution_interface) | | -| [segment](./ai.groundingattribution.md#groundingattributionsegment) | [Segment](./ai.segment.md#segment_interface) | | -| [web](./ai.groundingattribution.md#groundingattributionweb) | [WebAttribution](./ai.webattribution.md#webattribution_interface) | | +| [confidenceScore](./vertexai.groundingattribution.md#groundingattributionconfidencescore) | number | | +| [retrievedContext](./vertexai.groundingattribution.md#groundingattributionretrievedcontext) | [RetrievedContextAttribution](./vertexai.retrievedcontextattribution.md#retrievedcontextattribution_interface) | | +| [segment](./vertexai.groundingattribution.md#groundingattributionsegment) | [Segment](./vertexai.segment.md#segment_interface) | | +| [web](./vertexai.groundingattribution.md#groundingattributionweb) | [WebAttribution](./vertexai.webattribution.md#webattribution_interface) | | ## GroundingAttribution.confidenceScore diff --git a/docs-devsite/ai.groundingmetadata.md b/docs-devsite/vertexai.groundingmetadata.md similarity index 68% rename from docs-devsite/ai.groundingmetadata.md rename to docs-devsite/vertexai.groundingmetadata.md index 90994d9c01c..24686da39ba 100644 --- a/docs-devsite/ai.groundingmetadata.md +++ b/docs-devsite/vertexai.groundingmetadata.md @@ -22,9 +22,9 @@ export interface GroundingMetadata | Property | Type | Description | | --- | --- | --- | -| [groundingAttributions](./ai.groundingmetadata.md#groundingmetadatagroundingattributions) | [GroundingAttribution](./ai.groundingattribution.md#groundingattribution_interface)\[\] | | -| [retrievalQueries](./ai.groundingmetadata.md#groundingmetadataretrievalqueries) | string\[\] | | -| [webSearchQueries](./ai.groundingmetadata.md#groundingmetadatawebsearchqueries) | string\[\] | | +| [groundingAttributions](./vertexai.groundingmetadata.md#groundingmetadatagroundingattributions) | [GroundingAttribution](./vertexai.groundingattribution.md#groundingattribution_interface)\[\] | | +| [retrievalQueries](./vertexai.groundingmetadata.md#groundingmetadataretrievalqueries) | string\[\] | | +| [webSearchQueries](./vertexai.groundingmetadata.md#groundingmetadatawebsearchqueries) | string\[\] | | ## GroundingMetadata.groundingAttributions diff --git a/docs-devsite/ai.imagengcsimage.md b/docs-devsite/vertexai.imagengcsimage.md similarity index 62% rename from docs-devsite/ai.imagengcsimage.md rename to docs-devsite/vertexai.imagengcsimage.md index cd11d8ee354..23770192b3b 100644 --- a/docs-devsite/ai.imagengcsimage.md +++ b/docs-devsite/vertexai.imagengcsimage.md @@ -24,8 +24,8 @@ export interface ImagenGCSImage | Property | Type | Description | | --- | --- | --- | -| [gcsURI](./ai.imagengcsimage.md#imagengcsimagegcsuri) | string | The URI of the file stored in a Cloud Storage for Firebase bucket. | -| [mimeType](./ai.imagengcsimage.md#imagengcsimagemimetype) | string | The MIME type of the image; either "image/png" or "image/jpeg".To request a different format, set the imageFormat property in your [ImagenGenerationConfig](./ai.imagengenerationconfig.md#imagengenerationconfig_interface). | +| [gcsURI](./vertexai.imagengcsimage.md#imagengcsimagegcsuri) | string | The URI of the file stored in a Cloud Storage for Firebase bucket. | +| [mimeType](./vertexai.imagengcsimage.md#imagengcsimagemimetype) | string | The MIME type of the image; either "image/png" or "image/jpeg".To request a different format, set the imageFormat property in your [ImagenGenerationConfig](./vertexai.imagengenerationconfig.md#imagengenerationconfig_interface). | ## ImagenGCSImage.gcsURI @@ -45,7 +45,7 @@ gcsURI: string; The MIME type of the image; either `"image/png"` or `"image/jpeg"`. -To request a different format, set the `imageFormat` property in your [ImagenGenerationConfig](./ai.imagengenerationconfig.md#imagengenerationconfig_interface). +To request a different format, set the `imageFormat` property in your [ImagenGenerationConfig](./vertexai.imagengenerationconfig.md#imagengenerationconfig_interface). Signature: diff --git a/docs-devsite/ai.imagengenerationconfig.md b/docs-devsite/vertexai.imagengenerationconfig.md similarity index 52% rename from docs-devsite/ai.imagengenerationconfig.md rename to docs-devsite/vertexai.imagengenerationconfig.md index d4f32a7e5a3..b6785b9b2bb 100644 --- a/docs-devsite/ai.imagengenerationconfig.md +++ b/docs-devsite/vertexai.imagengenerationconfig.md @@ -27,11 +27,11 @@ export interface ImagenGenerationConfig | Property | Type | Description | | --- | --- | --- | -| [addWatermark](./ai.imagengenerationconfig.md#imagengenerationconfigaddwatermark) | boolean | (Public Preview) Whether to add an invisible watermark to generated images.If set to true, an invisible SynthID watermark is embedded in generated images to indicate that they are AI generated. If set to false, watermarking will be disabled.For Imagen 3 models, the default value is true; see the addWatermark documentation for more details.When using the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)), this will default to true, and cannot be turned off. | -| [aspectRatio](./ai.imagengenerationconfig.md#imagengenerationconfigaspectratio) | [ImagenAspectRatio](./ai.md#imagenaspectratio) | (Public Preview) The aspect ratio of the generated images. The default value is square 1:1. Supported aspect ratios depend on the Imagen model, see [ImagenAspectRatio](./ai.md#imagenaspectratio) for more details. | -| [imageFormat](./ai.imagengenerationconfig.md#imagengenerationconfigimageformat) | [ImagenImageFormat](./ai.imagenimageformat.md#imagenimageformat_class) | (Public Preview) The image format of the generated images. The default is PNG.See [ImagenImageFormat](./ai.imagenimageformat.md#imagenimageformat_class) for more details. | -| [negativePrompt](./ai.imagengenerationconfig.md#imagengenerationconfignegativeprompt) | string | (Public Preview) A description of what should be omitted from the generated images.Support for negative prompts depends on the Imagen model.See the [documentation](http://firebase.google.com/docs/vertex-ai/model-parameters#imagen) for more details.This is no longer supported in the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)) in versions greater than imagen-3.0-generate-002. | -| [numberOfImages](./ai.imagengenerationconfig.md#imagengenerationconfignumberofimages) | number | (Public Preview) The number of images to generate. The default value is 1.The number of sample images that may be generated in each request depends on the model (typically up to 4); see the sampleCount documentation for more details. | +| [addWatermark](./vertexai.imagengenerationconfig.md#imagengenerationconfigaddwatermark) | boolean | (Public Preview) Whether to add an invisible watermark to generated images.If set to true, an invisible SynthID watermark is embedded in generated images to indicate that they are AI generated. If set to false, watermarking will be disabled.For Imagen 3 models, the default value is true; see the addWatermark documentation for more details. | +| [aspectRatio](./vertexai.imagengenerationconfig.md#imagengenerationconfigaspectratio) | [ImagenAspectRatio](./vertexai.md#imagenaspectratio) | (Public Preview) The aspect ratio of the generated images. The default value is square 1:1. Supported aspect ratios depend on the Imagen model, see [ImagenAspectRatio](./vertexai.md#imagenaspectratio) for more details. | +| [imageFormat](./vertexai.imagengenerationconfig.md#imagengenerationconfigimageformat) | [ImagenImageFormat](./vertexai.imagenimageformat.md#imagenimageformat_class) | (Public Preview) The image format of the generated images. The default is PNG.See [ImagenImageFormat](./vertexai.imagenimageformat.md#imagenimageformat_class) for more details. | +| [negativePrompt](./vertexai.imagengenerationconfig.md#imagengenerationconfignegativeprompt) | string | (Public Preview) A description of what should be omitted from the generated images.Support for negative prompts depends on the Imagen model.See the [documentation](http://firebase.google.com/docs/vertex-ai/model-parameters#imagen) for more details. | +| [numberOfImages](./vertexai.imagengenerationconfig.md#imagengenerationconfignumberofimages) | number | (Public Preview) The number of images to generate. The default value is 1.The number of sample images that may be generated in each request depends on the model (typically up to 4); see the sampleCount documentation for more details. | ## ImagenGenerationConfig.addWatermark @@ -44,8 +44,6 @@ If set to `true`, an invisible SynthID watermark is embedded in generate For Imagen 3 models, the default value is `true`; see the addWatermark documentation for more details. -When using the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)), this will default to true, and cannot be turned off. - Signature: ```typescript @@ -57,7 +55,7 @@ addWatermark?: boolean; > This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. > -The aspect ratio of the generated images. The default value is square 1:1. Supported aspect ratios depend on the Imagen model, see [ImagenAspectRatio](./ai.md#imagenaspectratio) for more details. +The aspect ratio of the generated images. The default value is square 1:1. Supported aspect ratios depend on the Imagen model, see [ImagenAspectRatio](./vertexai.md#imagenaspectratio) for more details. Signature: @@ -72,7 +70,7 @@ aspectRatio?: ImagenAspectRatio; The image format of the generated images. The default is PNG. -See [ImagenImageFormat](./ai.imagenimageformat.md#imagenimageformat_class) for more details. +See [ImagenImageFormat](./vertexai.imagenimageformat.md#imagenimageformat_class) for more details. Signature: @@ -91,8 +89,6 @@ Support for negative prompts depends on the Imagen model. See the [documentation](http://firebase.google.com/docs/vertex-ai/model-parameters#imagen) for more details. -This is no longer supported in the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)) in versions greater than `imagen-3.0-generate-002`. - Signature: ```typescript diff --git a/docs-devsite/ai.imagengenerationresponse.md b/docs-devsite/vertexai.imagengenerationresponse.md similarity index 56% rename from docs-devsite/ai.imagengenerationresponse.md rename to docs-devsite/vertexai.imagengenerationresponse.md index 54b0ac9b1a9..d8de93df3ec 100644 --- a/docs-devsite/ai.imagengenerationresponse.md +++ b/docs-devsite/vertexai.imagengenerationresponse.md @@ -25,8 +25,8 @@ export interface ImagenGenerationResponse(Public Preview) The reason that images were filtered out. This property will only be defined if one or more images were filtered.Images may be filtered out due to the [ImagenSafetyFilterLevel](./ai.md#imagensafetyfilterlevel), [ImagenPersonFilterLevel](./ai.md#imagenpersonfilterlevel), or filtering included in the model. The filter levels may be adjusted in your [ImagenSafetySettings](./ai.imagensafetysettings.md#imagensafetysettings_interface).See the [Responsible AI and usage guidelines for Imagen](https://cloud.google.com/vertex-ai/generative-ai/docs/image/responsible-ai-imagen) for more details. | -| [images](./ai.imagengenerationresponse.md#imagengenerationresponseimages) | T\[\] | (Public Preview) The images generated by Imagen.The number of images generated may be fewer than the number requested if one or more were filtered out; see filteredReason. | +| [filteredReason](./vertexai.imagengenerationresponse.md#imagengenerationresponsefilteredreason) | string | (Public Preview) The reason that images were filtered out. This property will only be defined if one or more images were filtered.Images may be filtered out due to the [ImagenSafetyFilterLevel](./vertexai.md#imagensafetyfilterlevel), [ImagenPersonFilterLevel](./vertexai.md#imagenpersonfilterlevel), or filtering included in the model. The filter levels may be adjusted in your [ImagenSafetySettings](./vertexai.imagensafetysettings.md#imagensafetysettings_interface).See the [Responsible AI and usage guidelines for Imagen](https://cloud.google.com/vertex-ai/generative-ai/docs/image/responsible-ai-imagen) for more details. | +| [images](./vertexai.imagengenerationresponse.md#imagengenerationresponseimages) | T\[\] | (Public Preview) The images generated by Imagen.The number of images generated may be fewer than the number requested if one or more were filtered out; see filteredReason. | ## ImagenGenerationResponse.filteredReason @@ -35,7 +35,7 @@ export interface ImagenGenerationResponse, [ImagenPersonFilterLevel](./ai.md#imagenpersonfilterlevel), or filtering included in the model. The filter levels may be adjusted in your [ImagenSafetySettings](./ai.imagensafetysettings.md#imagensafetysettings_interface). +Images may be filtered out due to the [ImagenSafetyFilterLevel](./vertexai.md#imagensafetyfilterlevel), [ImagenPersonFilterLevel](./vertexai.md#imagenpersonfilterlevel), or filtering included in the model. The filter levels may be adjusted in your [ImagenSafetySettings](./vertexai.imagensafetysettings.md#imagensafetysettings_interface). See the [Responsible AI and usage guidelines for Imagen](https://cloud.google.com/vertex-ai/generative-ai/docs/image/responsible-ai-imagen) for more details. diff --git a/docs-devsite/ai.imagenimageformat.md b/docs-devsite/vertexai.imagenimageformat.md similarity index 61% rename from docs-devsite/ai.imagenimageformat.md rename to docs-devsite/vertexai.imagenimageformat.md index bd0bdf1baa7..68db8bbdae0 100644 --- a/docs-devsite/ai.imagenimageformat.md +++ b/docs-devsite/vertexai.imagenimageformat.md @@ -15,7 +15,7 @@ https://github.com/firebase/firebase-js-sdk Defines the image format for images generated by Imagen. -Use this class to specify the desired format (JPEG or PNG) and compression quality for images generated by Imagen. This is typically included as part of [ImagenModelParams](./ai.imagenmodelparams.md#imagenmodelparams_interface). +Use this class to specify the desired format (JPEG or PNG) and compression quality for images generated by Imagen. This is typically included as part of [ImagenModelParams](./vertexai.imagenmodelparams.md#imagenmodelparams_interface). Signature: @@ -27,15 +27,15 @@ export declare class ImagenImageFormat | Property | Modifiers | Type | Description | | --- | --- | --- | --- | -| [compressionQuality](./ai.imagenimageformat.md#imagenimageformatcompressionquality) | | number | (Public Preview) The level of compression (a number between 0 and 100). | -| [mimeType](./ai.imagenimageformat.md#imagenimageformatmimetype) | | string | (Public Preview) The MIME type. | +| [compressionQuality](./vertexai.imagenimageformat.md#imagenimageformatcompressionquality) | | number | (Public Preview) The level of compression (a number between 0 and 100). | +| [mimeType](./vertexai.imagenimageformat.md#imagenimageformatmimetype) | | string | (Public Preview) The MIME type. | ## Methods | Method | Modifiers | Description | | --- | --- | --- | -| [jpeg(compressionQuality)](./ai.imagenimageformat.md#imagenimageformatjpeg) | static | (Public Preview) Creates an [ImagenImageFormat](./ai.imagenimageformat.md#imagenimageformat_class) for a JPEG image. | -| [png()](./ai.imagenimageformat.md#imagenimageformatpng) | static | (Public Preview) Creates an [ImagenImageFormat](./ai.imagenimageformat.md#imagenimageformat_class) for a PNG image. | +| [jpeg(compressionQuality)](./vertexai.imagenimageformat.md#imagenimageformatjpeg) | static | (Public Preview) Creates an [ImagenImageFormat](./vertexai.imagenimageformat.md#imagenimageformat_class) for a JPEG image. | +| [png()](./vertexai.imagenimageformat.md#imagenimageformatpng) | static | (Public Preview) Creates an [ImagenImageFormat](./vertexai.imagenimageformat.md#imagenimageformat_class) for a PNG image. | ## ImagenImageFormat.compressionQuality @@ -68,7 +68,7 @@ mimeType: string; > This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. > -Creates an [ImagenImageFormat](./ai.imagenimageformat.md#imagenimageformat_class) for a JPEG image. +Creates an [ImagenImageFormat](./vertexai.imagenimageformat.md#imagenimageformat_class) for a JPEG image. Signature: @@ -84,16 +84,16 @@ static jpeg(compressionQuality?: number): ImagenImageFormat; Returns: -[ImagenImageFormat](./ai.imagenimageformat.md#imagenimageformat_class) +[ImagenImageFormat](./vertexai.imagenimageformat.md#imagenimageformat_class) -An [ImagenImageFormat](./ai.imagenimageformat.md#imagenimageformat_class) object for a JPEG image. +An [ImagenImageFormat](./vertexai.imagenimageformat.md#imagenimageformat_class) object for a JPEG image. ## ImagenImageFormat.png() > This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. > -Creates an [ImagenImageFormat](./ai.imagenimageformat.md#imagenimageformat_class) for a PNG image. +Creates an [ImagenImageFormat](./vertexai.imagenimageformat.md#imagenimageformat_class) for a PNG image. Signature: @@ -102,9 +102,9 @@ static png(): ImagenImageFormat; ``` Returns: -[ImagenImageFormat](./ai.imagenimageformat.md#imagenimageformat_class) +[ImagenImageFormat](./vertexai.imagenimageformat.md#imagenimageformat_class) -An [ImagenImageFormat](./ai.imagenimageformat.md#imagenimageformat_class) object for a PNG image. +An [ImagenImageFormat](./vertexai.imagenimageformat.md#imagenimageformat_class) object for a PNG image. ### Example diff --git a/docs-devsite/ai.imageninlineimage.md b/docs-devsite/vertexai.imageninlineimage.md similarity index 66% rename from docs-devsite/ai.imageninlineimage.md rename to docs-devsite/vertexai.imageninlineimage.md index 4bb81cac55d..a72937b5e5d 100644 --- a/docs-devsite/ai.imageninlineimage.md +++ b/docs-devsite/vertexai.imageninlineimage.md @@ -25,8 +25,8 @@ export interface ImagenInlineImage | Property | Type | Description | | --- | --- | --- | -| [bytesBase64Encoded](./ai.imageninlineimage.md#imageninlineimagebytesbase64encoded) | string | (Public Preview) The base64-encoded image data. | -| [mimeType](./ai.imageninlineimage.md#imageninlineimagemimetype) | string | (Public Preview) The MIME type of the image; either "image/png" or "image/jpeg".To request a different format, set the imageFormat property in your [ImagenGenerationConfig](./ai.imagengenerationconfig.md#imagengenerationconfig_interface). | +| [bytesBase64Encoded](./vertexai.imageninlineimage.md#imageninlineimagebytesbase64encoded) | string | (Public Preview) The base64-encoded image data. | +| [mimeType](./vertexai.imageninlineimage.md#imageninlineimagemimetype) | string | (Public Preview) The MIME type of the image; either "image/png" or "image/jpeg".To request a different format, set the imageFormat property in your [ImagenGenerationConfig](./vertexai.imagengenerationconfig.md#imagengenerationconfig_interface). | ## ImagenInlineImage.bytesBase64Encoded @@ -48,7 +48,7 @@ bytesBase64Encoded: string; The MIME type of the image; either `"image/png"` or `"image/jpeg"`. -To request a different format, set the `imageFormat` property in your [ImagenGenerationConfig](./ai.imagengenerationconfig.md#imagengenerationconfig_interface). +To request a different format, set the `imageFormat` property in your [ImagenGenerationConfig](./vertexai.imagengenerationconfig.md#imagengenerationconfig_interface). Signature: diff --git a/docs-devsite/ai.imagenmodel.md b/docs-devsite/vertexai.imagenmodel.md similarity index 58% rename from docs-devsite/ai.imagenmodel.md rename to docs-devsite/vertexai.imagenmodel.md index 911971e0988..ed40dc8f578 100644 --- a/docs-devsite/ai.imagenmodel.md +++ b/docs-devsite/vertexai.imagenmodel.md @@ -20,50 +20,50 @@ This class provides methods for generating images using the Imagen model. Signature: ```typescript -export declare class ImagenModel extends AIModel +export declare class ImagenModel extends VertexAIModel ``` -Extends: [AIModel](./ai.aimodel.md#aimodel_class) +Extends: [VertexAIModel](./vertexai.vertexaimodel.md#vertexaimodel_class) ## Constructors | Constructor | Modifiers | Description | | --- | --- | --- | -| [(constructor)(ai, modelParams, requestOptions)](./ai.imagenmodel.md#imagenmodelconstructor) | | (Public Preview) Constructs a new instance of the [ImagenModel](./ai.imagenmodel.md#imagenmodel_class) class. | +| [(constructor)(vertexAI, modelParams, requestOptions)](./vertexai.imagenmodel.md#imagenmodelconstructor) | | (Public Preview) Constructs a new instance of the [ImagenModel](./vertexai.imagenmodel.md#imagenmodel_class) class. | ## Properties | Property | Modifiers | Type | Description | | --- | --- | --- | --- | -| [generationConfig](./ai.imagenmodel.md#imagenmodelgenerationconfig) | | [ImagenGenerationConfig](./ai.imagengenerationconfig.md#imagengenerationconfig_interface) | (Public Preview) The Imagen generation configuration. | -| [requestOptions](./ai.imagenmodel.md#imagenmodelrequestoptions) | | [RequestOptions](./ai.requestoptions.md#requestoptions_interface) \| undefined | (Public Preview) | -| [safetySettings](./ai.imagenmodel.md#imagenmodelsafetysettings) | | [ImagenSafetySettings](./ai.imagensafetysettings.md#imagensafetysettings_interface) | (Public Preview) Safety settings for filtering inappropriate content. | +| [generationConfig](./vertexai.imagenmodel.md#imagenmodelgenerationconfig) | | [ImagenGenerationConfig](./vertexai.imagengenerationconfig.md#imagengenerationconfig_interface) | (Public Preview) The Imagen generation configuration. | +| [requestOptions](./vertexai.imagenmodel.md#imagenmodelrequestoptions) | | [RequestOptions](./vertexai.requestoptions.md#requestoptions_interface) \| undefined | (Public Preview) | +| [safetySettings](./vertexai.imagenmodel.md#imagenmodelsafetysettings) | | [ImagenSafetySettings](./vertexai.imagensafetysettings.md#imagensafetysettings_interface) | (Public Preview) Safety settings for filtering inappropriate content. | ## Methods | Method | Modifiers | Description | | --- | --- | --- | -| [generateImages(prompt)](./ai.imagenmodel.md#imagenmodelgenerateimages) | | (Public Preview) Generates images using the Imagen model and returns them as base64-encoded strings. | +| [generateImages(prompt)](./vertexai.imagenmodel.md#imagenmodelgenerateimages) | | (Public Preview) Generates images using the Imagen model and returns them as base64-encoded strings. | ## ImagenModel.(constructor) > This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. > -Constructs a new instance of the [ImagenModel](./ai.imagenmodel.md#imagenmodel_class) class. +Constructs a new instance of the [ImagenModel](./vertexai.imagenmodel.md#imagenmodel_class) class. Signature: ```typescript -constructor(ai: AI, modelParams: ImagenModelParams, requestOptions?: RequestOptions | undefined); +constructor(vertexAI: VertexAI, modelParams: ImagenModelParams, requestOptions?: RequestOptions | undefined); ``` #### Parameters | Parameter | Type | Description | | --- | --- | --- | -| ai | [AI](./ai.ai.md#ai_interface) | an [AI](./ai.ai.md#ai_interface) instance. | -| modelParams | [ImagenModelParams](./ai.imagenmodelparams.md#imagenmodelparams_interface) | Parameters to use when making requests to Imagen. | -| requestOptions | [RequestOptions](./ai.requestoptions.md#requestoptions_interface) \| undefined | Additional options to use when making requests. | +| vertexAI | [VertexAI](./vertexai.vertexai.md#vertexai_interface) | An instance of the Vertex AI in Firebase SDK. | +| modelParams | [ImagenModelParams](./vertexai.imagenmodelparams.md#imagenmodelparams_interface) | Parameters to use when making requests to Imagen. | +| requestOptions | [RequestOptions](./vertexai.requestoptions.md#requestoptions_interface) \| undefined | Additional options to use when making requests. | #### Exceptions @@ -129,9 +129,9 @@ generateImages(prompt: string): PromiseReturns: -Promise<[ImagenGenerationResponse](./ai.imagengenerationresponse.md#imagengenerationresponse_interface)<[ImagenInlineImage](./ai.imageninlineimage.md#imageninlineimage_interface)>> +Promise<[ImagenGenerationResponse](./vertexai.imagengenerationresponse.md#imagengenerationresponse_interface)<[ImagenInlineImage](./vertexai.imageninlineimage.md#imageninlineimage_interface)>> -A promise that resolves to an [ImagenGenerationResponse](./ai.imagengenerationresponse.md#imagengenerationresponse_interface) object containing the generated images. +A promise that resolves to an [ImagenGenerationResponse](./vertexai.imagengenerationresponse.md#imagengenerationresponse_interface) object containing the generated images. #### Exceptions @@ -142,7 +142,7 @@ If the request to generate images fails. This happens if the prompt is blocked. ```javascript const imagen = new ImagenModel( - ai, + vertexAI, { model: 'imagen-3.0-generate-002' } diff --git a/docs-devsite/ai.imagenmodelparams.md b/docs-devsite/vertexai.imagenmodelparams.md similarity index 63% rename from docs-devsite/ai.imagenmodelparams.md rename to docs-devsite/vertexai.imagenmodelparams.md index a63345b64e6..5396a36e4d1 100644 --- a/docs-devsite/ai.imagenmodelparams.md +++ b/docs-devsite/vertexai.imagenmodelparams.md @@ -13,7 +13,7 @@ https://github.com/firebase/firebase-js-sdk > This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. > -Parameters for configuring an [ImagenModel](./ai.imagenmodel.md#imagenmodel_class). +Parameters for configuring an [ImagenModel](./vertexai.imagenmodel.md#imagenmodel_class). Signature: @@ -25,9 +25,9 @@ export interface ImagenModelParams | Property | Type | Description | | --- | --- | --- | -| [generationConfig](./ai.imagenmodelparams.md#imagenmodelparamsgenerationconfig) | [ImagenGenerationConfig](./ai.imagengenerationconfig.md#imagengenerationconfig_interface) | (Public Preview) Configuration options for generating images with Imagen. | -| [model](./ai.imagenmodelparams.md#imagenmodelparamsmodel) | string | (Public Preview) The Imagen model to use for generating images. For example: imagen-3.0-generate-002.Only Imagen 3 models (named imagen-3.0-*) are supported.See [model versions](https://firebase.google.com/docs/vertex-ai/models) for a full list of supported Imagen 3 models. | -| [safetySettings](./ai.imagenmodelparams.md#imagenmodelparamssafetysettings) | [ImagenSafetySettings](./ai.imagensafetysettings.md#imagensafetysettings_interface) | (Public Preview) Safety settings for filtering potentially inappropriate content. | +| [generationConfig](./vertexai.imagenmodelparams.md#imagenmodelparamsgenerationconfig) | [ImagenGenerationConfig](./vertexai.imagengenerationconfig.md#imagengenerationconfig_interface) | (Public Preview) Configuration options for generating images with Imagen. | +| [model](./vertexai.imagenmodelparams.md#imagenmodelparamsmodel) | string | (Public Preview) The Imagen model to use for generating images. For example: imagen-3.0-generate-002.Only Imagen 3 models (named imagen-3.0-*) are supported.See [model versions](https://firebase.google.com/docs/vertex-ai/models) for a full list of supported Imagen 3 models. | +| [safetySettings](./vertexai.imagenmodelparams.md#imagenmodelparamssafetysettings) | [ImagenSafetySettings](./vertexai.imagensafetysettings.md#imagensafetysettings_interface) | (Public Preview) Safety settings for filtering potentially inappropriate content. | ## ImagenModelParams.generationConfig diff --git a/docs-devsite/ai.imagensafetysettings.md b/docs-devsite/vertexai.imagensafetysettings.md similarity index 72% rename from docs-devsite/ai.imagensafetysettings.md rename to docs-devsite/vertexai.imagensafetysettings.md index 366e615d243..3cf7931a959 100644 --- a/docs-devsite/ai.imagensafetysettings.md +++ b/docs-devsite/vertexai.imagensafetysettings.md @@ -27,8 +27,8 @@ export interface ImagenSafetySettings | Property | Type | Description | | --- | --- | --- | -| [personFilterLevel](./ai.imagensafetysettings.md#imagensafetysettingspersonfilterlevel) | [ImagenPersonFilterLevel](./ai.md#imagenpersonfilterlevel) | (Public Preview) A filter level controlling whether generation of images containing people or faces is allowed. | -| [safetyFilterLevel](./ai.imagensafetysettings.md#imagensafetysettingssafetyfilterlevel) | [ImagenSafetyFilterLevel](./ai.md#imagensafetyfilterlevel) | (Public Preview) A filter level controlling how aggressive to filter out sensitive content from generated images. | +| [personFilterLevel](./vertexai.imagensafetysettings.md#imagensafetysettingspersonfilterlevel) | [ImagenPersonFilterLevel](./vertexai.md#imagenpersonfilterlevel) | (Public Preview) A filter level controlling whether generation of images containing people or faces is allowed. | +| [safetyFilterLevel](./vertexai.imagensafetysettings.md#imagensafetysettingssafetyfilterlevel) | [ImagenSafetyFilterLevel](./vertexai.md#imagensafetyfilterlevel) | (Public Preview) A filter level controlling how aggressive to filter out sensitive content from generated images. | ## ImagenSafetySettings.personFilterLevel diff --git a/docs-devsite/ai.inlinedatapart.md b/docs-devsite/vertexai.inlinedatapart.md similarity index 62% rename from docs-devsite/ai.inlinedatapart.md rename to docs-devsite/vertexai.inlinedatapart.md index 0dd68edda68..0cb064fc357 100644 --- a/docs-devsite/ai.inlinedatapart.md +++ b/docs-devsite/vertexai.inlinedatapart.md @@ -22,11 +22,11 @@ export interface InlineDataPart | Property | Type | Description | | --- | --- | --- | -| [functionCall](./ai.inlinedatapart.md#inlinedatapartfunctioncall) | never | | -| [functionResponse](./ai.inlinedatapart.md#inlinedatapartfunctionresponse) | never | | -| [inlineData](./ai.inlinedatapart.md#inlinedatapartinlinedata) | [GenerativeContentBlob](./ai.generativecontentblob.md#generativecontentblob_interface) | | -| [text](./ai.inlinedatapart.md#inlinedataparttext) | never | | -| [videoMetadata](./ai.inlinedatapart.md#inlinedatapartvideometadata) | [VideoMetadata](./ai.videometadata.md#videometadata_interface) | Applicable if inlineData is a video. | +| [functionCall](./vertexai.inlinedatapart.md#inlinedatapartfunctioncall) | never | | +| [functionResponse](./vertexai.inlinedatapart.md#inlinedatapartfunctionresponse) | never | | +| [inlineData](./vertexai.inlinedatapart.md#inlinedatapartinlinedata) | [GenerativeContentBlob](./vertexai.generativecontentblob.md#generativecontentblob_interface) | | +| [text](./vertexai.inlinedatapart.md#inlinedataparttext) | never | | +| [videoMetadata](./vertexai.inlinedatapart.md#inlinedatapartvideometadata) | [VideoMetadata](./vertexai.videometadata.md#videometadata_interface) | Applicable if inlineData is a video. | ## InlineDataPart.functionCall diff --git a/docs-devsite/ai.integerschema.md b/docs-devsite/vertexai.integerschema.md similarity index 71% rename from docs-devsite/ai.integerschema.md rename to docs-devsite/vertexai.integerschema.md index 4ba96e49ca5..4822bdd618b 100644 --- a/docs-devsite/ai.integerschema.md +++ b/docs-devsite/vertexai.integerschema.md @@ -17,13 +17,13 @@ Schema class for "integer" types. ```typescript export declare class IntegerSchema extends Schema ``` -Extends: [Schema](./ai.schema.md#schema_class) +Extends: [Schema](./vertexai.schema.md#schema_class) ## Constructors | Constructor | Modifiers | Description | | --- | --- | --- | -| [(constructor)(schemaParams)](./ai.integerschema.md#integerschemaconstructor) | | Constructs a new instance of the IntegerSchema class | +| [(constructor)(schemaParams)](./vertexai.integerschema.md#integerschemaconstructor) | | Constructs a new instance of the IntegerSchema class | ## IntegerSchema.(constructor) @@ -39,5 +39,5 @@ constructor(schemaParams?: SchemaParams); | Parameter | Type | Description | | --- | --- | --- | -| schemaParams | [SchemaParams](./ai.schemaparams.md#schemaparams_interface) | | +| schemaParams | [SchemaParams](./vertexai.schemaparams.md#schemaparams_interface) | | diff --git a/docs-devsite/vertexai.md b/docs-devsite/vertexai.md new file mode 100644 index 00000000000..47d45a492ec --- /dev/null +++ b/docs-devsite/vertexai.md @@ -0,0 +1,591 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# vertexai package +The Vertex AI in Firebase Web SDK. + +## Functions + +| Function | Description | +| --- | --- | +| function(app, ...) | +| [getVertexAI(app, options)](./vertexai.md#getvertexai_04094cf) | Returns a [VertexAI](./vertexai.vertexai.md#vertexai_interface) instance for the given app. | +| function(vertexAI, ...) | +| [getGenerativeModel(vertexAI, modelParams, requestOptions)](./vertexai.md#getgenerativemodel_e3037c9) | Returns a [GenerativeModel](./vertexai.generativemodel.md#generativemodel_class) class with methods for inference and other functionality. | +| [getImagenModel(vertexAI, modelParams, requestOptions)](./vertexai.md#getimagenmodel_812c375) | (Public Preview) Returns an [ImagenModel](./vertexai.imagenmodel.md#imagenmodel_class) class with methods for using Imagen.Only Imagen 3 models (named imagen-3.0-*) are supported. | + +## Classes + +| Class | Description | +| --- | --- | +| [ArraySchema](./vertexai.arrayschema.md#arrayschema_class) | Schema class for "array" types. The items param should refer to the type of item that can be a member of the array. | +| [BooleanSchema](./vertexai.booleanschema.md#booleanschema_class) | Schema class for "boolean" types. | +| [ChatSession](./vertexai.chatsession.md#chatsession_class) | ChatSession class that enables sending chat messages and stores history of sent and received messages so far. | +| [GenerativeModel](./vertexai.generativemodel.md#generativemodel_class) | Class for generative model APIs. | +| [ImagenImageFormat](./vertexai.imagenimageformat.md#imagenimageformat_class) | (Public Preview) Defines the image format for images generated by Imagen.Use this class to specify the desired format (JPEG or PNG) and compression quality for images generated by Imagen. This is typically included as part of [ImagenModelParams](./vertexai.imagenmodelparams.md#imagenmodelparams_interface). | +| [ImagenModel](./vertexai.imagenmodel.md#imagenmodel_class) | (Public Preview) Class for Imagen model APIs.This class provides methods for generating images using the Imagen model. | +| [IntegerSchema](./vertexai.integerschema.md#integerschema_class) | Schema class for "integer" types. | +| [NumberSchema](./vertexai.numberschema.md#numberschema_class) | Schema class for "number" types. | +| [ObjectSchema](./vertexai.objectschema.md#objectschema_class) | Schema class for "object" types. The properties param must be a map of Schema objects. | +| [Schema](./vertexai.schema.md#schema_class) | Parent class encompassing all Schema types, with static methods that allow building specific Schema types. This class can be converted with JSON.stringify() into a JSON string accepted by Vertex AI REST endpoints. (This string conversion is automatically done when calling SDK methods.) | +| [StringSchema](./vertexai.stringschema.md#stringschema_class) | Schema class for "string" types. Can be used with or without enum values. | +| [VertexAIError](./vertexai.vertexaierror.md#vertexaierror_class) | Error class for the Vertex AI in Firebase SDK. | +| [VertexAIModel](./vertexai.vertexaimodel.md#vertexaimodel_class) | Base class for Vertex AI in Firebase model APIs. | + +## Enumerations + +| Enumeration | Description | +| --- | --- | +| [BlockReason](./vertexai.md#blockreason) | Reason that a prompt was blocked. | +| [FinishReason](./vertexai.md#finishreason) | Reason that a candidate finished. | +| [FunctionCallingMode](./vertexai.md#functioncallingmode) | | +| [HarmBlockMethod](./vertexai.md#harmblockmethod) | | +| [HarmBlockThreshold](./vertexai.md#harmblockthreshold) | Threshold above which a prompt or candidate will be blocked. | +| [HarmCategory](./vertexai.md#harmcategory) | Harm categories that would cause prompts or candidates to be blocked. | +| [HarmProbability](./vertexai.md#harmprobability) | Probability that a prompt or candidate matches a harm category. | +| [HarmSeverity](./vertexai.md#harmseverity) | Harm severity levels. | +| [ImagenAspectRatio](./vertexai.md#imagenaspectratio) | (Public Preview) Aspect ratios for Imagen images.To specify an aspect ratio for generated images, set the aspectRatio property in your [ImagenGenerationConfig](./vertexai.imagengenerationconfig.md#imagengenerationconfig_interface).See the the [documentation](http://firebase.google.com/docs/vertex-ai/generate-images) for more details and examples of the supported aspect ratios. | +| [ImagenPersonFilterLevel](./vertexai.md#imagenpersonfilterlevel) | (Public Preview) A filter level controlling whether generation of images containing people or faces is allowed.See the personGeneration documentation for more details. | +| [ImagenSafetyFilterLevel](./vertexai.md#imagensafetyfilterlevel) | (Public Preview) A filter level controlling how aggressively to filter sensitive content.Text prompts provided as inputs and images (generated or uploaded) through Imagen on Vertex AI are assessed against a list of safety filters, which include 'harmful categories' (for example, violence, sexual, derogatory, and toxic). This filter level controls how aggressively to filter out potentially harmful content from responses. See the [documentation](http://firebase.google.com/docs/vertex-ai/generate-images) and the [Responsible AI and usage guidelines](https://cloud.google.com/vertex-ai/generative-ai/docs/image/responsible-ai-imagen#safety-filters) for more details. | +| [Modality](./vertexai.md#modality) | Content part modality. | +| [SchemaType](./vertexai.md#schematype) | Contains the list of OpenAPI data types as defined by the [OpenAPI specification](https://swagger.io/docs/specification/data-models/data-types/) | +| [VertexAIErrorCode](./vertexai.md#vertexaierrorcode) | Standardized error codes that [VertexAIError](./vertexai.vertexaierror.md#vertexaierror_class) can have. | + +## Interfaces + +| Interface | Description | +| --- | --- | +| [BaseParams](./vertexai.baseparams.md#baseparams_interface) | Base parameters for a number of methods. | +| [Citation](./vertexai.citation.md#citation_interface) | A single citation. | +| [CitationMetadata](./vertexai.citationmetadata.md#citationmetadata_interface) | Citation metadata that may be found on a [GenerateContentCandidate](./vertexai.generatecontentcandidate.md#generatecontentcandidate_interface). | +| [Content](./vertexai.content.md#content_interface) | Content type for both prompts and response candidates. | +| [CountTokensRequest](./vertexai.counttokensrequest.md#counttokensrequest_interface) | Params for calling [GenerativeModel.countTokens()](./vertexai.generativemodel.md#generativemodelcounttokens) | +| [CountTokensResponse](./vertexai.counttokensresponse.md#counttokensresponse_interface) | Response from calling [GenerativeModel.countTokens()](./vertexai.generativemodel.md#generativemodelcounttokens). | +| [CustomErrorData](./vertexai.customerrordata.md#customerrordata_interface) | Details object that contains data originating from a bad HTTP response. | +| [Date\_2](./vertexai.date_2.md#date_2_interface) | Protobuf google.type.Date | +| [EnhancedGenerateContentResponse](./vertexai.enhancedgeneratecontentresponse.md#enhancedgeneratecontentresponse_interface) | Response object wrapped with helper methods. | +| [ErrorDetails](./vertexai.errordetails.md#errordetails_interface) | Details object that may be included in an error response. | +| [FileData](./vertexai.filedata.md#filedata_interface) | Data pointing to a file uploaded on Google Cloud Storage. | +| [FileDataPart](./vertexai.filedatapart.md#filedatapart_interface) | Content part interface if the part represents [FileData](./vertexai.filedata.md#filedata_interface) | +| [FunctionCall](./vertexai.functioncall.md#functioncall_interface) | A predicted [FunctionCall](./vertexai.functioncall.md#functioncall_interface) returned from the model that contains a string representing the [FunctionDeclaration.name](./vertexai.functiondeclaration.md#functiondeclarationname) and a structured JSON object containing the parameters and their values. | +| [FunctionCallingConfig](./vertexai.functioncallingconfig.md#functioncallingconfig_interface) | | +| [FunctionCallPart](./vertexai.functioncallpart.md#functioncallpart_interface) | Content part interface if the part represents a [FunctionCall](./vertexai.functioncall.md#functioncall_interface). | +| [FunctionDeclaration](./vertexai.functiondeclaration.md#functiondeclaration_interface) | Structured representation of a function declaration as defined by the [OpenAPI 3.0 specification](https://spec.openapis.org/oas/v3.0.3). Included in this declaration are the function name and parameters. This FunctionDeclaration is a representation of a block of code that can be used as a Tool by the model and executed by the client. | +| [FunctionDeclarationsTool](./vertexai.functiondeclarationstool.md#functiondeclarationstool_interface) | A FunctionDeclarationsTool is a piece of code that enables the system to interact with external systems to perform an action, or set of actions, outside of knowledge and scope of the model. | +| [FunctionResponse](./vertexai.functionresponse.md#functionresponse_interface) | The result output from a [FunctionCall](./vertexai.functioncall.md#functioncall_interface) that contains a string representing the [FunctionDeclaration.name](./vertexai.functiondeclaration.md#functiondeclarationname) and a structured JSON object containing any output from the function is used as context to the model. This should contain the result of a [FunctionCall](./vertexai.functioncall.md#functioncall_interface) made based on model prediction. | +| [FunctionResponsePart](./vertexai.functionresponsepart.md#functionresponsepart_interface) | Content part interface if the part represents [FunctionResponse](./vertexai.functionresponse.md#functionresponse_interface). | +| [GenerateContentCandidate](./vertexai.generatecontentcandidate.md#generatecontentcandidate_interface) | A candidate returned as part of a [GenerateContentResponse](./vertexai.generatecontentresponse.md#generatecontentresponse_interface). | +| [GenerateContentRequest](./vertexai.generatecontentrequest.md#generatecontentrequest_interface) | Request sent through [GenerativeModel.generateContent()](./vertexai.generativemodel.md#generativemodelgeneratecontent) | +| [GenerateContentResponse](./vertexai.generatecontentresponse.md#generatecontentresponse_interface) | Individual response from [GenerativeModel.generateContent()](./vertexai.generativemodel.md#generativemodelgeneratecontent) and [GenerativeModel.generateContentStream()](./vertexai.generativemodel.md#generativemodelgeneratecontentstream). generateContentStream() will return one in each chunk until the stream is done. | +| [GenerateContentResult](./vertexai.generatecontentresult.md#generatecontentresult_interface) | Result object returned from [GenerativeModel.generateContent()](./vertexai.generativemodel.md#generativemodelgeneratecontent) call. | +| [GenerateContentStreamResult](./vertexai.generatecontentstreamresult.md#generatecontentstreamresult_interface) | Result object returned from [GenerativeModel.generateContentStream()](./vertexai.generativemodel.md#generativemodelgeneratecontentstream) call. Iterate over stream to get chunks as they come in and/or use the response promise to get the aggregated response when the stream is done. | +| [GenerationConfig](./vertexai.generationconfig.md#generationconfig_interface) | Config options for content-related requests | +| [GenerativeContentBlob](./vertexai.generativecontentblob.md#generativecontentblob_interface) | Interface for sending an image. | +| [GroundingAttribution](./vertexai.groundingattribution.md#groundingattribution_interface) | | +| [GroundingMetadata](./vertexai.groundingmetadata.md#groundingmetadata_interface) | Metadata returned to client when grounding is enabled. | +| [ImagenGCSImage](./vertexai.imagengcsimage.md#imagengcsimage_interface) | An image generated by Imagen, stored in a Cloud Storage for Firebase bucket.This feature is not available yet. | +| [ImagenGenerationConfig](./vertexai.imagengenerationconfig.md#imagengenerationconfig_interface) | (Public Preview) Configuration options for generating images with Imagen.See the [documentation](http://firebase.google.com/docs/vertex-ai/generate-images-imagen) for more details. | +| [ImagenGenerationResponse](./vertexai.imagengenerationresponse.md#imagengenerationresponse_interface) | (Public Preview) The response from a request to generate images with Imagen. | +| [ImagenInlineImage](./vertexai.imageninlineimage.md#imageninlineimage_interface) | (Public Preview) An image generated by Imagen, represented as inline data. | +| [ImagenModelParams](./vertexai.imagenmodelparams.md#imagenmodelparams_interface) | (Public Preview) Parameters for configuring an [ImagenModel](./vertexai.imagenmodel.md#imagenmodel_class). | +| [ImagenSafetySettings](./vertexai.imagensafetysettings.md#imagensafetysettings_interface) | (Public Preview) Settings for controlling the aggressiveness of filtering out sensitive content.See the [documentation](http://firebase.google.com/docs/vertex-ai/generate-images) for more details. | +| [InlineDataPart](./vertexai.inlinedatapart.md#inlinedatapart_interface) | Content part interface if the part represents an image. | +| [ModalityTokenCount](./vertexai.modalitytokencount.md#modalitytokencount_interface) | Represents token counting info for a single modality. | +| [ModelParams](./vertexai.modelparams.md#modelparams_interface) | Params passed to [getGenerativeModel()](./vertexai.md#getgenerativemodel_e3037c9). | +| [ObjectSchemaInterface](./vertexai.objectschemainterface.md#objectschemainterface_interface) | Interface for [ObjectSchema](./vertexai.objectschema.md#objectschema_class) class. | +| [PromptFeedback](./vertexai.promptfeedback.md#promptfeedback_interface) | If the prompt was blocked, this will be populated with blockReason and the relevant safetyRatings. | +| [RequestOptions](./vertexai.requestoptions.md#requestoptions_interface) | Params passed to [getGenerativeModel()](./vertexai.md#getgenerativemodel_e3037c9). | +| [RetrievedContextAttribution](./vertexai.retrievedcontextattribution.md#retrievedcontextattribution_interface) | | +| [SafetyRating](./vertexai.safetyrating.md#safetyrating_interface) | A safety rating associated with a [GenerateContentCandidate](./vertexai.generatecontentcandidate.md#generatecontentcandidate_interface) | +| [SafetySetting](./vertexai.safetysetting.md#safetysetting_interface) | Safety setting that can be sent as part of request parameters. | +| [SchemaInterface](./vertexai.schemainterface.md#schemainterface_interface) | Interface for [Schema](./vertexai.schema.md#schema_class) class. | +| [SchemaParams](./vertexai.schemaparams.md#schemaparams_interface) | Params passed to [Schema](./vertexai.schema.md#schema_class) static methods to create specific [Schema](./vertexai.schema.md#schema_class) classes. | +| [SchemaRequest](./vertexai.schemarequest.md#schemarequest_interface) | Final format for [Schema](./vertexai.schema.md#schema_class) params passed to backend requests. | +| [SchemaShared](./vertexai.schemashared.md#schemashared_interface) | Basic [Schema](./vertexai.schema.md#schema_class) properties shared across several Schema-related types. | +| [Segment](./vertexai.segment.md#segment_interface) | | +| [StartChatParams](./vertexai.startchatparams.md#startchatparams_interface) | Params for [GenerativeModel.startChat()](./vertexai.generativemodel.md#generativemodelstartchat). | +| [TextPart](./vertexai.textpart.md#textpart_interface) | Content part interface if the part represents a text string. | +| [ToolConfig](./vertexai.toolconfig.md#toolconfig_interface) | Tool config. This config is shared for all tools provided in the request. | +| [UsageMetadata](./vertexai.usagemetadata.md#usagemetadata_interface) | Usage metadata about a [GenerateContentResponse](./vertexai.generatecontentresponse.md#generatecontentresponse_interface). | +| [VertexAI](./vertexai.vertexai.md#vertexai_interface) | An instance of the Vertex AI in Firebase SDK. | +| [VertexAIOptions](./vertexai.vertexaioptions.md#vertexaioptions_interface) | Options when initializing the Vertex AI in Firebase SDK. | +| [VideoMetadata](./vertexai.videometadata.md#videometadata_interface) | Describes the input video content. | +| [WebAttribution](./vertexai.webattribution.md#webattribution_interface) | | + +## Variables + +| Variable | Description | +| --- | --- | +| [POSSIBLE\_ROLES](./vertexai.md#possible_roles) | Possible roles. | +| [ResponseModality](./vertexai.md#responsemodality) | (Public Preview) Generation modalities to be returned in generation responses. | + +## Type Aliases + +| Type Alias | Description | +| --- | --- | +| [Part](./vertexai.md#part) | Content part - includes text, image/video, or function call/response part types. | +| [ResponseModality](./vertexai.md#responsemodality) | (Public Preview) Generation modalities to be returned in generation responses. | +| [Role](./vertexai.md#role) | Role is the producer of the content. | +| [Tool](./vertexai.md#tool) | Defines a tool that model can call to access external knowledge. | +| [TypedSchema](./vertexai.md#typedschema) | A type that includes all specific Schema types. | + +## function(app, ...) + +### getVertexAI(app, options) {:#getvertexai_04094cf} + +Returns a [VertexAI](./vertexai.vertexai.md#vertexai_interface) instance for the given app. + +Signature: + +```typescript +export declare function getVertexAI(app?: FirebaseApp, options?: VertexAIOptions): VertexAI; +``` + +#### Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| app | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) to use. | +| options | [VertexAIOptions](./vertexai.vertexaioptions.md#vertexaioptions_interface) | | + +Returns: + +[VertexAI](./vertexai.vertexai.md#vertexai_interface) + +## function(vertexAI, ...) + +### getGenerativeModel(vertexAI, modelParams, requestOptions) {:#getgenerativemodel_e3037c9} + +Returns a [GenerativeModel](./vertexai.generativemodel.md#generativemodel_class) class with methods for inference and other functionality. + +Signature: + +```typescript +export declare function getGenerativeModel(vertexAI: VertexAI, modelParams: ModelParams, requestOptions?: RequestOptions): GenerativeModel; +``` + +#### Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| vertexAI | [VertexAI](./vertexai.vertexai.md#vertexai_interface) | | +| modelParams | [ModelParams](./vertexai.modelparams.md#modelparams_interface) | | +| requestOptions | [RequestOptions](./vertexai.requestoptions.md#requestoptions_interface) | | + +Returns: + +[GenerativeModel](./vertexai.generativemodel.md#generativemodel_class) + +### getImagenModel(vertexAI, modelParams, requestOptions) {:#getimagenmodel_812c375} + +> This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. +> + +Returns an [ImagenModel](./vertexai.imagenmodel.md#imagenmodel_class) class with methods for using Imagen. + +Only Imagen 3 models (named `imagen-3.0-*`) are supported. + +Signature: + +```typescript +export declare function getImagenModel(vertexAI: VertexAI, modelParams: ImagenModelParams, requestOptions?: RequestOptions): ImagenModel; +``` + +#### Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| vertexAI | [VertexAI](./vertexai.vertexai.md#vertexai_interface) | An instance of the Vertex AI in Firebase SDK. | +| modelParams | [ImagenModelParams](./vertexai.imagenmodelparams.md#imagenmodelparams_interface) | Parameters to use when making Imagen requests. | +| requestOptions | [RequestOptions](./vertexai.requestoptions.md#requestoptions_interface) | Additional options to use when making requests. | + +Returns: + +[ImagenModel](./vertexai.imagenmodel.md#imagenmodel_class) + +#### Exceptions + +If the `apiKey` or `projectId` fields are missing in your Firebase config. + +## POSSIBLE\_ROLES + +Possible roles. + +Signature: + +```typescript +POSSIBLE_ROLES: readonly ["user", "model", "function", "system"] +``` + +## ResponseModality + +> This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. +> + +Generation modalities to be returned in generation responses. + +Signature: + +```typescript +ResponseModality: { + readonly TEXT: "TEXT"; + readonly IMAGE: "IMAGE"; +} +``` + +## Part + +Content part - includes text, image/video, or function call/response part types. + +Signature: + +```typescript +export type Part = TextPart | InlineDataPart | FunctionCallPart | FunctionResponsePart | FileDataPart; +``` + +## ResponseModality + +> This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. +> + +Generation modalities to be returned in generation responses. + +Signature: + +```typescript +export type ResponseModality = (typeof ResponseModality)[keyof typeof ResponseModality]; +``` + +## Role + +Role is the producer of the content. + +Signature: + +```typescript +export type Role = (typeof POSSIBLE_ROLES)[number]; +``` + +## Tool + +Defines a tool that model can call to access external knowledge. + +Signature: + +```typescript +export declare type Tool = FunctionDeclarationsTool; +``` + +## TypedSchema + +A type that includes all specific Schema types. + +Signature: + +```typescript +export type TypedSchema = IntegerSchema | NumberSchema | StringSchema | BooleanSchema | ObjectSchema | ArraySchema; +``` + +## BlockReason + +Reason that a prompt was blocked. + +Signature: + +```typescript +export declare enum BlockReason +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| BLOCKLIST | "BLOCKLIST" | Content was blocked because it contained terms from the terminology blocklist. | +| OTHER | "OTHER" | Content was blocked, but the reason is uncategorized. | +| PROHIBITED\_CONTENT | "PROHIBITED_CONTENT" | Content was blocked due to prohibited content. | +| SAFETY | "SAFETY" | Content was blocked by safety settings. | + +## FinishReason + +Reason that a candidate finished. + +Signature: + +```typescript +export declare enum FinishReason +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| BLOCKLIST | "BLOCKLIST" | The candidate content contained forbidden terms. | +| MALFORMED\_FUNCTION\_CALL | "MALFORMED_FUNCTION_CALL" | The function call generated by the model was invalid. | +| MAX\_TOKENS | "MAX_TOKENS" | The maximum number of tokens as specified in the request was reached. | +| OTHER | "OTHER" | Unknown reason. | +| PROHIBITED\_CONTENT | "PROHIBITED_CONTENT" | The candidate content potentially contained prohibited content. | +| RECITATION | "RECITATION" | The candidate content was flagged for recitation reasons. | +| SAFETY | "SAFETY" | The candidate content was flagged for safety reasons. | +| SPII | "SPII" | The candidate content potentially contained Sensitive Personally Identifiable Information (SPII). | +| STOP | "STOP" | Natural stop point of the model or provided stop sequence. | + +## FunctionCallingMode + + +Signature: + +```typescript +export declare enum FunctionCallingMode +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| ANY | "ANY" | Model is constrained to always predicting a function call only. If allowed_function_names is set, the predicted function call will be limited to any one of allowed_function_names, else the predicted function call will be any one of the provided function_declarations. | +| AUTO | "AUTO" | Default model behavior; model decides to predict either a function call or a natural language response. | +| NONE | "NONE" | Model will not predict any function call. Model behavior is same as when not passing any function declarations. | + +## HarmBlockMethod + + +Signature: + +```typescript +export declare enum HarmBlockMethod +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| PROBABILITY | "PROBABILITY" | The harm block method uses the probability score. | +| SEVERITY | "SEVERITY" | The harm block method uses both probability and severity scores. | + +## HarmBlockThreshold + +Threshold above which a prompt or candidate will be blocked. + +Signature: + +```typescript +export declare enum HarmBlockThreshold +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| BLOCK\_LOW\_AND\_ABOVE | "BLOCK_LOW_AND_ABOVE" | Content with NEGLIGIBLE will be allowed. | +| BLOCK\_MEDIUM\_AND\_ABOVE | "BLOCK_MEDIUM_AND_ABOVE" | Content with NEGLIGIBLE and LOW will be allowed. | +| BLOCK\_NONE | "BLOCK_NONE" | All content will be allowed. | +| BLOCK\_ONLY\_HIGH | "BLOCK_ONLY_HIGH" | Content with NEGLIGIBLE, LOW, and MEDIUM will be allowed. | + +## HarmCategory + +Harm categories that would cause prompts or candidates to be blocked. + +Signature: + +```typescript +export declare enum HarmCategory +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| HARM\_CATEGORY\_DANGEROUS\_CONTENT | "HARM_CATEGORY_DANGEROUS_CONTENT" | | +| HARM\_CATEGORY\_HARASSMENT | "HARM_CATEGORY_HARASSMENT" | | +| HARM\_CATEGORY\_HATE\_SPEECH | "HARM_CATEGORY_HATE_SPEECH" | | +| HARM\_CATEGORY\_SEXUALLY\_EXPLICIT | "HARM_CATEGORY_SEXUALLY_EXPLICIT" | | + +## HarmProbability + +Probability that a prompt or candidate matches a harm category. + +Signature: + +```typescript +export declare enum HarmProbability +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| HIGH | "HIGH" | Content has a high chance of being unsafe. | +| LOW | "LOW" | Content has a low chance of being unsafe. | +| MEDIUM | "MEDIUM" | Content has a medium chance of being unsafe. | +| NEGLIGIBLE | "NEGLIGIBLE" | Content has a negligible chance of being unsafe. | + +## HarmSeverity + +Harm severity levels. + +Signature: + +```typescript +export declare enum HarmSeverity +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| HARM\_SEVERITY\_HIGH | "HARM_SEVERITY_HIGH" | High level of harm severity. | +| HARM\_SEVERITY\_LOW | "HARM_SEVERITY_LOW" | Low level of harm severity. | +| HARM\_SEVERITY\_MEDIUM | "HARM_SEVERITY_MEDIUM" | Medium level of harm severity. | +| HARM\_SEVERITY\_NEGLIGIBLE | "HARM_SEVERITY_NEGLIGIBLE" | Negligible level of harm severity. | + +## ImagenAspectRatio + +> This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. +> + +Aspect ratios for Imagen images. + +To specify an aspect ratio for generated images, set the `aspectRatio` property in your [ImagenGenerationConfig](./vertexai.imagengenerationconfig.md#imagengenerationconfig_interface). + +See the the [documentation](http://firebase.google.com/docs/vertex-ai/generate-images) for more details and examples of the supported aspect ratios. + +Signature: + +```typescript +export declare enum ImagenAspectRatio +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| LANDSCAPE\_16x9 | "16:9" | (Public Preview) Landscape (16:9) aspect ratio. | +| LANDSCAPE\_3x4 | "3:4" | (Public Preview) Landscape (3:4) aspect ratio. | +| PORTRAIT\_4x3 | "4:3" | (Public Preview) Portrait (4:3) aspect ratio. | +| PORTRAIT\_9x16 | "9:16" | (Public Preview) Portrait (9:16) aspect ratio. | +| SQUARE | "1:1" | (Public Preview) Square (1:1) aspect ratio. | + +## ImagenPersonFilterLevel + +> This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. +> + +A filter level controlling whether generation of images containing people or faces is allowed. + +See the personGeneration documentation for more details. + +Signature: + +```typescript +export declare enum ImagenPersonFilterLevel +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| ALLOW\_ADULT | "allow_adult" | (Public Preview) Allow generation of images containing adults only; images of children are filtered out.Generation of images containing people or faces may require your use case to be reviewed and approved by Cloud support; see the [Responsible AI and usage guidelines](https://cloud.google.com/vertex-ai/generative-ai/docs/image/responsible-ai-imagen#person-face-gen) for more details. | +| ALLOW\_ALL | "allow_all" | (Public Preview) Allow generation of images containing adults only; images of children are filtered out.Generation of images containing people or faces may require your use case to be reviewed and approved by Cloud support; see the [Responsible AI and usage guidelines](https://cloud.google.com/vertex-ai/generative-ai/docs/image/responsible-ai-imagen#person-face-gen) for more details. | +| BLOCK\_ALL | "dont_allow" | (Public Preview) Disallow generation of images containing people or faces; images of people are filtered out. | + +## ImagenSafetyFilterLevel + +> This API is provided as a preview for developers and may change based on feedback that we receive. Do not use this API in a production environment. +> + +A filter level controlling how aggressively to filter sensitive content. + +Text prompts provided as inputs and images (generated or uploaded) through Imagen on Vertex AI are assessed against a list of safety filters, which include 'harmful categories' (for example, `violence`, `sexual`, `derogatory`, and `toxic`). This filter level controls how aggressively to filter out potentially harmful content from responses. See the [documentation](http://firebase.google.com/docs/vertex-ai/generate-images) and the [Responsible AI and usage guidelines](https://cloud.google.com/vertex-ai/generative-ai/docs/image/responsible-ai-imagen#safety-filters) for more details. + +Signature: + +```typescript +export declare enum ImagenSafetyFilterLevel +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| BLOCK\_LOW\_AND\_ABOVE | "block_low_and_above" | (Public Preview) The most aggressive filtering level; most strict blocking. | +| BLOCK\_MEDIUM\_AND\_ABOVE | "block_medium_and_above" | (Public Preview) Blocks some sensitive prompts and responses. | +| BLOCK\_NONE | "block_none" | (Public Preview) The least aggressive filtering level; blocks very few sensitive prompts and responses.Access to this feature is restricted and may require your case to be reviewed and approved by Cloud support. | +| BLOCK\_ONLY\_HIGH | "block_only_high" | (Public Preview) Blocks few sensitive prompts and responses. | + +## Modality + +Content part modality. + +Signature: + +```typescript +export declare enum Modality +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| AUDIO | "AUDIO" | Audio. | +| DOCUMENT | "DOCUMENT" | Document (for example, PDF). | +| IMAGE | "IMAGE" | Image. | +| MODALITY\_UNSPECIFIED | "MODALITY_UNSPECIFIED" | Unspecified modality. | +| TEXT | "TEXT" | Plain text. | +| VIDEO | "VIDEO" | Video. | + +## SchemaType + +Contains the list of OpenAPI data types as defined by the [OpenAPI specification](https://swagger.io/docs/specification/data-models/data-types/) + +Signature: + +```typescript +export declare enum SchemaType +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| ARRAY | "array" | Array type. | +| BOOLEAN | "boolean" | Boolean type. | +| INTEGER | "integer" | Integer type. | +| NUMBER | "number" | Number type. | +| OBJECT | "object" | Object type. | +| STRING | "string" | String type. | + +## VertexAIErrorCode + +Standardized error codes that [VertexAIError](./vertexai.vertexaierror.md#vertexaierror_class) can have. + +Signature: + +```typescript +export declare const enum VertexAIErrorCode +``` + +## Enumeration Members + +| Member | Value | Description | +| --- | --- | --- | +| API\_NOT\_ENABLED | "api-not-enabled" | An error due to the Firebase API not being enabled in the Console. | +| ERROR | "error" | A generic error occurred. | +| FETCH\_ERROR | "fetch-error" | An error occurred while performing a fetch. | +| INVALID\_CONTENT | "invalid-content" | An error associated with a Content object. | +| INVALID\_SCHEMA | "invalid-schema" | An error due to invalid Schema input. | +| NO\_API\_KEY | "no-api-key" | An error occurred due to a missing Firebase API key. | +| NO\_APP\_ID | "no-app-id" | An error occured due to a missing Firebase app ID. | +| NO\_MODEL | "no-model" | An error occurred due to a model name not being specified during initialization. | +| NO\_PROJECT\_ID | "no-project-id" | An error occurred due to a missing project ID. | +| PARSE\_FAILED | "parse-failed" | An error occurred while parsing. | +| REQUEST\_ERROR | "request-error" | An error occurred in a request. | +| RESPONSE\_ERROR | "response-error" | An error occurred in a response. | + diff --git a/docs-devsite/ai.modalitytokencount.md b/docs-devsite/vertexai.modalitytokencount.md similarity index 74% rename from docs-devsite/ai.modalitytokencount.md rename to docs-devsite/vertexai.modalitytokencount.md index b1a504dddbc..d710b51fba6 100644 --- a/docs-devsite/ai.modalitytokencount.md +++ b/docs-devsite/vertexai.modalitytokencount.md @@ -22,8 +22,8 @@ export interface ModalityTokenCount | Property | Type | Description | | --- | --- | --- | -| [modality](./ai.modalitytokencount.md#modalitytokencountmodality) | [Modality](./ai.md#modality) | The modality associated with this token count. | -| [tokenCount](./ai.modalitytokencount.md#modalitytokencounttokencount) | number | The number of tokens counted. | +| [modality](./vertexai.modalitytokencount.md#modalitytokencountmodality) | [Modality](./vertexai.md#modality) | The modality associated with this token count. | +| [tokenCount](./vertexai.modalitytokencount.md#modalitytokencounttokencount) | number | The number of tokens counted. | ## ModalityTokenCount.modality diff --git a/docs-devsite/ai.modelparams.md b/docs-devsite/vertexai.modelparams.md similarity index 57% rename from docs-devsite/ai.modelparams.md rename to docs-devsite/vertexai.modelparams.md index a92b2e9035d..d3963d240eb 100644 --- a/docs-devsite/ai.modelparams.md +++ b/docs-devsite/vertexai.modelparams.md @@ -10,23 +10,23 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # ModelParams interface -Params passed to [getGenerativeModel()](./ai.md#getgenerativemodel_80bd839). +Params passed to [getGenerativeModel()](./vertexai.md#getgenerativemodel_e3037c9). Signature: ```typescript export interface ModelParams extends BaseParams ``` -Extends: [BaseParams](./ai.baseparams.md#baseparams_interface) +Extends: [BaseParams](./vertexai.baseparams.md#baseparams_interface) ## Properties | Property | Type | Description | | --- | --- | --- | -| [model](./ai.modelparams.md#modelparamsmodel) | string | | -| [systemInstruction](./ai.modelparams.md#modelparamssysteminstruction) | string \| [Part](./ai.md#part) \| [Content](./ai.content.md#content_interface) | | -| [toolConfig](./ai.modelparams.md#modelparamstoolconfig) | [ToolConfig](./ai.toolconfig.md#toolconfig_interface) | | -| [tools](./ai.modelparams.md#modelparamstools) | [Tool](./ai.md#tool)\[\] | | +| [model](./vertexai.modelparams.md#modelparamsmodel) | string | | +| [systemInstruction](./vertexai.modelparams.md#modelparamssysteminstruction) | string \| [Part](./vertexai.md#part) \| [Content](./vertexai.content.md#content_interface) | | +| [toolConfig](./vertexai.modelparams.md#modelparamstoolconfig) | [ToolConfig](./vertexai.toolconfig.md#toolconfig_interface) | | +| [tools](./vertexai.modelparams.md#modelparamstools) | [Tool](./vertexai.md#tool)\[\] | | ## ModelParams.model diff --git a/docs-devsite/ai.numberschema.md b/docs-devsite/vertexai.numberschema.md similarity index 72% rename from docs-devsite/ai.numberschema.md rename to docs-devsite/vertexai.numberschema.md index 4e7800cfb21..8fdd9374652 100644 --- a/docs-devsite/ai.numberschema.md +++ b/docs-devsite/vertexai.numberschema.md @@ -17,13 +17,13 @@ Schema class for "number" types. ```typescript export declare class NumberSchema extends Schema ``` -Extends: [Schema](./ai.schema.md#schema_class) +Extends: [Schema](./vertexai.schema.md#schema_class) ## Constructors | Constructor | Modifiers | Description | | --- | --- | --- | -| [(constructor)(schemaParams)](./ai.numberschema.md#numberschemaconstructor) | | Constructs a new instance of the NumberSchema class | +| [(constructor)(schemaParams)](./vertexai.numberschema.md#numberschemaconstructor) | | Constructs a new instance of the NumberSchema class | ## NumberSchema.(constructor) @@ -39,5 +39,5 @@ constructor(schemaParams?: SchemaParams); | Parameter | Type | Description | | --- | --- | --- | -| schemaParams | [SchemaParams](./ai.schemaparams.md#schemaparams_interface) | | +| schemaParams | [SchemaParams](./vertexai.schemaparams.md#schemaparams_interface) | | diff --git a/docs-devsite/ai.objectschema.md b/docs-devsite/vertexai.objectschema.md similarity index 68% rename from docs-devsite/ai.objectschema.md rename to docs-devsite/vertexai.objectschema.md index 2ba358c6b07..8731960b220 100644 --- a/docs-devsite/ai.objectschema.md +++ b/docs-devsite/vertexai.objectschema.md @@ -17,20 +17,20 @@ Schema class for "object" types. The `properties` param must be a map of `Schema ```typescript export declare class ObjectSchema extends Schema ``` -Extends: [Schema](./ai.schema.md#schema_class) +Extends: [Schema](./vertexai.schema.md#schema_class) ## Constructors | Constructor | Modifiers | Description | | --- | --- | --- | -| [(constructor)(schemaParams, properties, optionalProperties)](./ai.objectschema.md#objectschemaconstructor) | | Constructs a new instance of the ObjectSchema class | +| [(constructor)(schemaParams, properties, optionalProperties)](./vertexai.objectschema.md#objectschemaconstructor) | | Constructs a new instance of the ObjectSchema class | ## Properties | Property | Modifiers | Type | Description | | --- | --- | --- | --- | -| [optionalProperties](./ai.objectschema.md#objectschemaoptionalproperties) | | string\[\] | | -| [properties](./ai.objectschema.md#objectschemaproperties) | | { \[k: string\]: [TypedSchema](./ai.md#typedschema); } | | +| [optionalProperties](./vertexai.objectschema.md#objectschemaoptionalproperties) | | string\[\] | | +| [properties](./vertexai.objectschema.md#objectschemaproperties) | | { \[k: string\]: [TypedSchema](./vertexai.md#typedschema); } | | ## ObjectSchema.(constructor) @@ -48,8 +48,8 @@ constructor(schemaParams: SchemaParams, properties: { | Parameter | Type | Description | | --- | --- | --- | -| schemaParams | [SchemaParams](./ai.schemaparams.md#schemaparams_interface) | | -| properties | { \[k: string\]: [TypedSchema](./ai.md#typedschema); } | | +| schemaParams | [SchemaParams](./vertexai.schemaparams.md#schemaparams_interface) | | +| properties | { \[k: string\]: [TypedSchema](./vertexai.md#typedschema); } | | | optionalProperties | string\[\] | | ## ObjectSchema.optionalProperties diff --git a/docs-devsite/ai.objectschemainterface.md b/docs-devsite/vertexai.objectschemainterface.md similarity index 62% rename from docs-devsite/ai.objectschemainterface.md rename to docs-devsite/vertexai.objectschemainterface.md index 15b1a97f40d..4eb7a5d80e7 100644 --- a/docs-devsite/ai.objectschemainterface.md +++ b/docs-devsite/vertexai.objectschemainterface.md @@ -10,21 +10,21 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # ObjectSchemaInterface interface -Interface for [ObjectSchema](./ai.objectschema.md#objectschema_class) class. +Interface for [ObjectSchema](./vertexai.objectschema.md#objectschema_class) class. Signature: ```typescript export interface ObjectSchemaInterface extends SchemaInterface ``` -Extends: [SchemaInterface](./ai.schemainterface.md#schemainterface_interface) +Extends: [SchemaInterface](./vertexai.schemainterface.md#schemainterface_interface) ## Properties | Property | Type | Description | | --- | --- | --- | -| [optionalProperties](./ai.objectschemainterface.md#objectschemainterfaceoptionalproperties) | string\[\] | | -| [type](./ai.objectschemainterface.md#objectschemainterfacetype) | [SchemaType.OBJECT](./ai.md#schematypeobject_enummember) | | +| [optionalProperties](./vertexai.objectschemainterface.md#objectschemainterfaceoptionalproperties) | string\[\] | | +| [type](./vertexai.objectschemainterface.md#objectschemainterfacetype) | [SchemaType.OBJECT](./vertexai.md#schematypeobject_enummember) | | ## ObjectSchemaInterface.optionalProperties diff --git a/docs-devsite/ai.promptfeedback.md b/docs-devsite/vertexai.promptfeedback.md similarity index 54% rename from docs-devsite/ai.promptfeedback.md rename to docs-devsite/vertexai.promptfeedback.md index b874c0e70b1..369ef02051d 100644 --- a/docs-devsite/ai.promptfeedback.md +++ b/docs-devsite/vertexai.promptfeedback.md @@ -22,9 +22,9 @@ export interface PromptFeedback | Property | Type | Description | | --- | --- | --- | -| [blockReason](./ai.promptfeedback.md#promptfeedbackblockreason) | [BlockReason](./ai.md#blockreason) | | -| [blockReasonMessage](./ai.promptfeedback.md#promptfeedbackblockreasonmessage) | string | A human-readable description of the blockReason.This property is only supported in the Vertex AI Gemini API ([VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). | -| [safetyRatings](./ai.promptfeedback.md#promptfeedbacksafetyratings) | [SafetyRating](./ai.safetyrating.md#safetyrating_interface)\[\] | | +| [blockReason](./vertexai.promptfeedback.md#promptfeedbackblockreason) | [BlockReason](./vertexai.md#blockreason) | | +| [blockReasonMessage](./vertexai.promptfeedback.md#promptfeedbackblockreasonmessage) | string | | +| [safetyRatings](./vertexai.promptfeedback.md#promptfeedbacksafetyratings) | [SafetyRating](./vertexai.safetyrating.md#safetyrating_interface)\[\] | | ## PromptFeedback.blockReason @@ -36,10 +36,6 @@ blockReason?: BlockReason; ## PromptFeedback.blockReasonMessage -A human-readable description of the `blockReason`. - -This property is only supported in the Vertex AI Gemini API ([VertexAIBackend](./ai.vertexaibackend.md#vertexaibackend_class)). - Signature: ```typescript diff --git a/docs-devsite/ai.requestoptions.md b/docs-devsite/vertexai.requestoptions.md similarity index 67% rename from docs-devsite/ai.requestoptions.md rename to docs-devsite/vertexai.requestoptions.md index 73aa03c1d25..dcd0c552ecb 100644 --- a/docs-devsite/ai.requestoptions.md +++ b/docs-devsite/vertexai.requestoptions.md @@ -10,7 +10,7 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # RequestOptions interface -Params passed to [getGenerativeModel()](./ai.md#getgenerativemodel_80bd839). +Params passed to [getGenerativeModel()](./vertexai.md#getgenerativemodel_e3037c9). Signature: @@ -22,8 +22,8 @@ export interface RequestOptions | Property | Type | Description | | --- | --- | --- | -| [baseUrl](./ai.requestoptions.md#requestoptionsbaseurl) | string | Base url for endpoint. Defaults to https://firebasevertexai.googleapis.com | -| [timeout](./ai.requestoptions.md#requestoptionstimeout) | number | Request timeout in milliseconds. Defaults to 180 seconds (180000ms). | +| [baseUrl](./vertexai.requestoptions.md#requestoptionsbaseurl) | string | Base url for endpoint. Defaults to https://firebasevertexai.googleapis.com | +| [timeout](./vertexai.requestoptions.md#requestoptionstimeout) | number | Request timeout in milliseconds. Defaults to 180 seconds (180000ms). | ## RequestOptions.baseUrl diff --git a/docs-devsite/ai.retrievedcontextattribution.md b/docs-devsite/vertexai.retrievedcontextattribution.md similarity index 77% rename from docs-devsite/ai.retrievedcontextattribution.md rename to docs-devsite/vertexai.retrievedcontextattribution.md index 21b12b79c18..e36bfacb3ec 100644 --- a/docs-devsite/ai.retrievedcontextattribution.md +++ b/docs-devsite/vertexai.retrievedcontextattribution.md @@ -21,8 +21,8 @@ export interface RetrievedContextAttribution | Property | Type | Description | | --- | --- | --- | -| [title](./ai.retrievedcontextattribution.md#retrievedcontextattributiontitle) | string | | -| [uri](./ai.retrievedcontextattribution.md#retrievedcontextattributionuri) | string | | +| [title](./vertexai.retrievedcontextattribution.md#retrievedcontextattributiontitle) | string | | +| [uri](./vertexai.retrievedcontextattribution.md#retrievedcontextattributionuri) | string | | ## RetrievedContextAttribution.title diff --git a/docs-devsite/vertexai.safetyrating.md b/docs-devsite/vertexai.safetyrating.md new file mode 100644 index 00000000000..28493bafef0 --- /dev/null +++ b/docs-devsite/vertexai.safetyrating.md @@ -0,0 +1,78 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# SafetyRating interface +A safety rating associated with a [GenerateContentCandidate](./vertexai.generatecontentcandidate.md#generatecontentcandidate_interface) + +Signature: + +```typescript +export interface SafetyRating +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [blocked](./vertexai.safetyrating.md#safetyratingblocked) | boolean | | +| [category](./vertexai.safetyrating.md#safetyratingcategory) | [HarmCategory](./vertexai.md#harmcategory) | | +| [probability](./vertexai.safetyrating.md#safetyratingprobability) | [HarmProbability](./vertexai.md#harmprobability) | | +| [probabilityScore](./vertexai.safetyrating.md#safetyratingprobabilityscore) | number | | +| [severity](./vertexai.safetyrating.md#safetyratingseverity) | [HarmSeverity](./vertexai.md#harmseverity) | | +| [severityScore](./vertexai.safetyrating.md#safetyratingseverityscore) | number | | + +## SafetyRating.blocked + +Signature: + +```typescript +blocked: boolean; +``` + +## SafetyRating.category + +Signature: + +```typescript +category: HarmCategory; +``` + +## SafetyRating.probability + +Signature: + +```typescript +probability: HarmProbability; +``` + +## SafetyRating.probabilityScore + +Signature: + +```typescript +probabilityScore: number; +``` + +## SafetyRating.severity + +Signature: + +```typescript +severity: HarmSeverity; +``` + +## SafetyRating.severityScore + +Signature: + +```typescript +severityScore: number; +``` diff --git a/docs-devsite/vertexai.safetysetting.md b/docs-devsite/vertexai.safetysetting.md new file mode 100644 index 00000000000..17fa1cff839 --- /dev/null +++ b/docs-devsite/vertexai.safetysetting.md @@ -0,0 +1,51 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# SafetySetting interface +Safety setting that can be sent as part of request parameters. + +Signature: + +```typescript +export interface SafetySetting +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [category](./vertexai.safetysetting.md#safetysettingcategory) | [HarmCategory](./vertexai.md#harmcategory) | | +| [method](./vertexai.safetysetting.md#safetysettingmethod) | [HarmBlockMethod](./vertexai.md#harmblockmethod) | | +| [threshold](./vertexai.safetysetting.md#safetysettingthreshold) | [HarmBlockThreshold](./vertexai.md#harmblockthreshold) | | + +## SafetySetting.category + +Signature: + +```typescript +category: HarmCategory; +``` + +## SafetySetting.method + +Signature: + +```typescript +method?: HarmBlockMethod; +``` + +## SafetySetting.threshold + +Signature: + +```typescript +threshold: HarmBlockThreshold; +``` diff --git a/docs-devsite/ai.schema.md b/docs-devsite/vertexai.schema.md similarity index 53% rename from docs-devsite/ai.schema.md rename to docs-devsite/vertexai.schema.md index b0681b0cdf3..f4a36c3c506 100644 --- a/docs-devsite/ai.schema.md +++ b/docs-devsite/vertexai.schema.md @@ -17,35 +17,35 @@ Parent class encompassing all Schema types, with static methods that allow build ```typescript export declare abstract class Schema implements SchemaInterface ``` -Implements: [SchemaInterface](./ai.schemainterface.md#schemainterface_interface) +Implements: [SchemaInterface](./vertexai.schemainterface.md#schemainterface_interface) ## Constructors | Constructor | Modifiers | Description | | --- | --- | --- | -| [(constructor)(schemaParams)](./ai.schema.md#schemaconstructor) | | Constructs a new instance of the Schema class | +| [(constructor)(schemaParams)](./vertexai.schema.md#schemaconstructor) | | Constructs a new instance of the Schema class | ## Properties | Property | Modifiers | Type | Description | | --- | --- | --- | --- | -| [description](./ai.schema.md#schemadescription) | | string | Optional. The description of the property. | -| [example](./ai.schema.md#schemaexample) | | unknown | Optional. The example of the property. | -| [format](./ai.schema.md#schemaformat) | | string | Optional. The format of the property. Supported formats:
  • for NUMBER type: "float", "double"
  • for INTEGER type: "int32", "int64"
  • for STRING type: "email", "byte", etc
| -| [nullable](./ai.schema.md#schemanullable) | | boolean | Optional. Whether the property is nullable. Defaults to false. | -| [type](./ai.schema.md#schematype) | | [SchemaType](./ai.md#schematype) | Optional. The type of the property. [SchemaType](./ai.md#schematype). | +| [description](./vertexai.schema.md#schemadescription) | | string | Optional. The description of the property. | +| [example](./vertexai.schema.md#schemaexample) | | unknown | Optional. The example of the property. | +| [format](./vertexai.schema.md#schemaformat) | | string | Optional. The format of the property. Supported formats:
  • for NUMBER type: "float", "double"
  • for INTEGER type: "int32", "int64"
  • for STRING type: "email", "byte", etc
| +| [nullable](./vertexai.schema.md#schemanullable) | | boolean | Optional. Whether the property is nullable. Defaults to false. | +| [type](./vertexai.schema.md#schematype) | | [SchemaType](./vertexai.md#schematype) | Optional. The type of the property. [SchemaType](./vertexai.md#schematype). | ## Methods | Method | Modifiers | Description | | --- | --- | --- | -| [array(arrayParams)](./ai.schema.md#schemaarray) | static | | -| [boolean(booleanParams)](./ai.schema.md#schemaboolean) | static | | -| [enumString(stringParams)](./ai.schema.md#schemaenumstring) | static | | -| [integer(integerParams)](./ai.schema.md#schemainteger) | static | | -| [number(numberParams)](./ai.schema.md#schemanumber) | static | | -| [object(objectParams)](./ai.schema.md#schemaobject) | static | | -| [string(stringParams)](./ai.schema.md#schemastring) | static | | +| [array(arrayParams)](./vertexai.schema.md#schemaarray) | static | | +| [boolean(booleanParams)](./vertexai.schema.md#schemaboolean) | static | | +| [enumString(stringParams)](./vertexai.schema.md#schemaenumstring) | static | | +| [integer(integerParams)](./vertexai.schema.md#schemainteger) | static | | +| [number(numberParams)](./vertexai.schema.md#schemanumber) | static | | +| [object(objectParams)](./vertexai.schema.md#schemaobject) | static | | +| [string(stringParams)](./vertexai.schema.md#schemastring) | static | | ## Schema.(constructor) @@ -61,7 +61,7 @@ constructor(schemaParams: SchemaInterface); | Parameter | Type | Description | | --- | --- | --- | -| schemaParams | [SchemaInterface](./ai.schemainterface.md#schemainterface_interface) | | +| schemaParams | [SchemaInterface](./vertexai.schemainterface.md#schemainterface_interface) | | ## Schema.description @@ -105,7 +105,7 @@ nullable: boolean; ## Schema.type -Optional. The type of the property. [SchemaType](./ai.md#schematype). +Optional. The type of the property. [SchemaType](./vertexai.md#schematype). Signature: @@ -127,11 +127,11 @@ static array(arrayParams: SchemaParams & { | Parameter | Type | Description | | --- | --- | --- | -| arrayParams | [SchemaParams](./ai.schemaparams.md#schemaparams_interface) & { items: [Schema](./ai.schema.md#schema_class); } | | +| arrayParams | [SchemaParams](./vertexai.schemaparams.md#schemaparams_interface) & { items: [Schema](./vertexai.schema.md#schema_class); } | | Returns: -[ArraySchema](./ai.arrayschema.md#arrayschema_class) +[ArraySchema](./vertexai.arrayschema.md#arrayschema_class) ## Schema.boolean() @@ -145,11 +145,11 @@ static boolean(booleanParams?: SchemaParams): BooleanSchema; | Parameter | Type | Description | | --- | --- | --- | -| booleanParams | [SchemaParams](./ai.schemaparams.md#schemaparams_interface) | | +| booleanParams | [SchemaParams](./vertexai.schemaparams.md#schemaparams_interface) | | Returns: -[BooleanSchema](./ai.booleanschema.md#booleanschema_class) +[BooleanSchema](./vertexai.booleanschema.md#booleanschema_class) ## Schema.enumString() @@ -165,11 +165,11 @@ static enumString(stringParams: SchemaParams & { | Parameter | Type | Description | | --- | --- | --- | -| stringParams | [SchemaParams](./ai.schemaparams.md#schemaparams_interface) & { enum: string\[\]; } | | +| stringParams | [SchemaParams](./vertexai.schemaparams.md#schemaparams_interface) & { enum: string\[\]; } | | Returns: -[StringSchema](./ai.stringschema.md#stringschema_class) +[StringSchema](./vertexai.stringschema.md#stringschema_class) ## Schema.integer() @@ -183,11 +183,11 @@ static integer(integerParams?: SchemaParams): IntegerSchema; | Parameter | Type | Description | | --- | --- | --- | -| integerParams | [SchemaParams](./ai.schemaparams.md#schemaparams_interface) | | +| integerParams | [SchemaParams](./vertexai.schemaparams.md#schemaparams_interface) | | Returns: -[IntegerSchema](./ai.integerschema.md#integerschema_class) +[IntegerSchema](./vertexai.integerschema.md#integerschema_class) ## Schema.number() @@ -201,11 +201,11 @@ static number(numberParams?: SchemaParams): NumberSchema; | Parameter | Type | Description | | --- | --- | --- | -| numberParams | [SchemaParams](./ai.schemaparams.md#schemaparams_interface) | | +| numberParams | [SchemaParams](./vertexai.schemaparams.md#schemaparams_interface) | | Returns: -[NumberSchema](./ai.numberschema.md#numberschema_class) +[NumberSchema](./vertexai.numberschema.md#numberschema_class) ## Schema.object() @@ -224,11 +224,11 @@ static object(objectParams: SchemaParams & { | Parameter | Type | Description | | --- | --- | --- | -| objectParams | [SchemaParams](./ai.schemaparams.md#schemaparams_interface) & { properties: { \[k: string\]: [Schema](./ai.schema.md#schema_class); }; optionalProperties?: string\[\]; } | | +| objectParams | [SchemaParams](./vertexai.schemaparams.md#schemaparams_interface) & { properties: { \[k: string\]: [Schema](./vertexai.schema.md#schema_class); }; optionalProperties?: string\[\]; } | | Returns: -[ObjectSchema](./ai.objectschema.md#objectschema_class) +[ObjectSchema](./vertexai.objectschema.md#objectschema_class) ## Schema.string() @@ -242,9 +242,9 @@ static string(stringParams?: SchemaParams): StringSchema; | Parameter | Type | Description | | --- | --- | --- | -| stringParams | [SchemaParams](./ai.schemaparams.md#schemaparams_interface) | | +| stringParams | [SchemaParams](./vertexai.schemaparams.md#schemaparams_interface) | | Returns: -[StringSchema](./ai.stringschema.md#stringschema_class) +[StringSchema](./vertexai.stringschema.md#stringschema_class) diff --git a/docs-devsite/ai.schemainterface.md b/docs-devsite/vertexai.schemainterface.md similarity index 55% rename from docs-devsite/ai.schemainterface.md rename to docs-devsite/vertexai.schemainterface.md index 6dd33e69e18..c14b561193b 100644 --- a/docs-devsite/ai.schemainterface.md +++ b/docs-devsite/vertexai.schemainterface.md @@ -10,24 +10,24 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # SchemaInterface interface -Interface for [Schema](./ai.schema.md#schema_class) class. +Interface for [Schema](./vertexai.schema.md#schema_class) class. Signature: ```typescript export interface SchemaInterface extends SchemaShared ``` -Extends: [SchemaShared](./ai.schemashared.md#schemashared_interface)<[SchemaInterface](./ai.schemainterface.md#schemainterface_interface)> +Extends: [SchemaShared](./vertexai.schemashared.md#schemashared_interface)<[SchemaInterface](./vertexai.schemainterface.md#schemainterface_interface)> ## Properties | Property | Type | Description | | --- | --- | --- | -| [type](./ai.schemainterface.md#schemainterfacetype) | [SchemaType](./ai.md#schematype) | The type of the property. [SchemaType](./ai.md#schematype). | +| [type](./vertexai.schemainterface.md#schemainterfacetype) | [SchemaType](./vertexai.md#schematype) | The type of the property. [SchemaType](./vertexai.md#schematype). | ## SchemaInterface.type -The type of the property. [SchemaType](./ai.md#schematype). +The type of the property. [SchemaType](./vertexai.md#schematype). Signature: diff --git a/docs-devsite/ai.schemaparams.md b/docs-devsite/vertexai.schemaparams.md similarity index 58% rename from docs-devsite/ai.schemaparams.md rename to docs-devsite/vertexai.schemaparams.md index 3f9626306c2..8e4a41f6bdc 100644 --- a/docs-devsite/ai.schemaparams.md +++ b/docs-devsite/vertexai.schemaparams.md @@ -10,12 +10,12 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # SchemaParams interface -Params passed to [Schema](./ai.schema.md#schema_class) static methods to create specific [Schema](./ai.schema.md#schema_class) classes. +Params passed to [Schema](./vertexai.schema.md#schema_class) static methods to create specific [Schema](./vertexai.schema.md#schema_class) classes. Signature: ```typescript export interface SchemaParams extends SchemaShared ``` -Extends: [SchemaShared](./ai.schemashared.md#schemashared_interface)<[SchemaInterface](./ai.schemainterface.md#schemainterface_interface)> +Extends: [SchemaShared](./vertexai.schemashared.md#schemashared_interface)<[SchemaInterface](./vertexai.schemainterface.md#schemainterface_interface)> diff --git a/docs-devsite/ai.schemarequest.md b/docs-devsite/vertexai.schemarequest.md similarity index 53% rename from docs-devsite/ai.schemarequest.md rename to docs-devsite/vertexai.schemarequest.md index e71d24a6b1a..c382c2a6297 100644 --- a/docs-devsite/ai.schemarequest.md +++ b/docs-devsite/vertexai.schemarequest.md @@ -10,21 +10,21 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # SchemaRequest interface -Final format for [Schema](./ai.schema.md#schema_class) params passed to backend requests. +Final format for [Schema](./vertexai.schema.md#schema_class) params passed to backend requests. Signature: ```typescript export interface SchemaRequest extends SchemaShared ``` -Extends: [SchemaShared](./ai.schemashared.md#schemashared_interface)<[SchemaRequest](./ai.schemarequest.md#schemarequest_interface)> +Extends: [SchemaShared](./vertexai.schemashared.md#schemashared_interface)<[SchemaRequest](./vertexai.schemarequest.md#schemarequest_interface)> ## Properties | Property | Type | Description | | --- | --- | --- | -| [required](./ai.schemarequest.md#schemarequestrequired) | string\[\] | Optional. Array of required property. | -| [type](./ai.schemarequest.md#schemarequesttype) | [SchemaType](./ai.md#schematype) | The type of the property. [SchemaType](./ai.md#schematype). | +| [required](./vertexai.schemarequest.md#schemarequestrequired) | string\[\] | Optional. Array of required property. | +| [type](./vertexai.schemarequest.md#schemarequesttype) | [SchemaType](./vertexai.md#schematype) | The type of the property. [SchemaType](./vertexai.md#schematype). | ## SchemaRequest.required @@ -38,7 +38,7 @@ required?: string[]; ## SchemaRequest.type -The type of the property. [SchemaType](./ai.md#schematype). +The type of the property. [SchemaType](./vertexai.md#schematype). Signature: diff --git a/docs-devsite/ai.schemashared.md b/docs-devsite/vertexai.schemashared.md similarity index 50% rename from docs-devsite/ai.schemashared.md rename to docs-devsite/vertexai.schemashared.md index eba57f82935..0764a53bdc0 100644 --- a/docs-devsite/ai.schemashared.md +++ b/docs-devsite/vertexai.schemashared.md @@ -10,7 +10,7 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # SchemaShared interface -Basic [Schema](./ai.schema.md#schema_class) properties shared across several Schema-related types. +Basic [Schema](./vertexai.schema.md#schema_class) properties shared across several Schema-related types. Signature: @@ -22,13 +22,13 @@ export interface SchemaShared | Property | Type | Description | | --- | --- | --- | -| [description](./ai.schemashared.md#schemashareddescription) | string | Optional. The description of the property. | -| [enum](./ai.schemashared.md#schemasharedenum) | string\[\] | Optional. The enum of the property. | -| [example](./ai.schemashared.md#schemasharedexample) | unknown | Optional. The example of the property. | -| [format](./ai.schemashared.md#schemasharedformat) | string | Optional. The format of the property. When using the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)), this must be either 'enum' or 'date-time', otherwise requests will fail. | -| [items](./ai.schemashared.md#schemashareditems) | T | Optional. The items of the property. | -| [nullable](./ai.schemashared.md#schemasharednullable) | boolean | Optional. Whether the property is nullable. | -| [properties](./ai.schemashared.md#schemasharedproperties) | { \[k: string\]: T; } | Optional. Map of Schema objects. | +| [description](./vertexai.schemashared.md#schemashareddescription) | string | Optional. The description of the property. | +| [enum](./vertexai.schemashared.md#schemasharedenum) | string\[\] | Optional. The enum of the property. | +| [example](./vertexai.schemashared.md#schemasharedexample) | unknown | Optional. The example of the property. | +| [format](./vertexai.schemashared.md#schemasharedformat) | string | Optional. The format of the property. | +| [items](./vertexai.schemashared.md#schemashareditems) | T | Optional. The items of the property. | +| [nullable](./vertexai.schemashared.md#schemasharednullable) | boolean | Optional. Whether the property is nullable. | +| [properties](./vertexai.schemashared.md#schemasharedproperties) | { \[k: string\]: T; } | Optional. Map of Schema objects. | ## SchemaShared.description @@ -62,7 +62,7 @@ example?: unknown; ## SchemaShared.format -Optional. The format of the property. When using the Gemini Developer API ([GoogleAIBackend](./ai.googleaibackend.md#googleaibackend_class)), this must be either `'enum'` or `'date-time'`, otherwise requests will fail. +Optional. The format of the property. Signature: diff --git a/docs-devsite/ai.segment.md b/docs-devsite/vertexai.segment.md similarity index 77% rename from docs-devsite/ai.segment.md rename to docs-devsite/vertexai.segment.md index 69f4aaf8407..db61f00a149 100644 --- a/docs-devsite/ai.segment.md +++ b/docs-devsite/vertexai.segment.md @@ -21,9 +21,9 @@ export interface Segment | Property | Type | Description | | --- | --- | --- | -| [endIndex](./ai.segment.md#segmentendindex) | number | | -| [partIndex](./ai.segment.md#segmentpartindex) | number | | -| [startIndex](./ai.segment.md#segmentstartindex) | number | | +| [endIndex](./vertexai.segment.md#segmentendindex) | number | | +| [partIndex](./vertexai.segment.md#segmentpartindex) | number | | +| [startIndex](./vertexai.segment.md#segmentstartindex) | number | | ## Segment.endIndex diff --git a/docs-devsite/ai.startchatparams.md b/docs-devsite/vertexai.startchatparams.md similarity index 54% rename from docs-devsite/ai.startchatparams.md rename to docs-devsite/vertexai.startchatparams.md index 2d039bbe868..e07bbd91d82 100644 --- a/docs-devsite/ai.startchatparams.md +++ b/docs-devsite/vertexai.startchatparams.md @@ -10,23 +10,23 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # StartChatParams interface -Params for [GenerativeModel.startChat()](./ai.generativemodel.md#generativemodelstartchat). +Params for [GenerativeModel.startChat()](./vertexai.generativemodel.md#generativemodelstartchat). Signature: ```typescript export interface StartChatParams extends BaseParams ``` -Extends: [BaseParams](./ai.baseparams.md#baseparams_interface) +Extends: [BaseParams](./vertexai.baseparams.md#baseparams_interface) ## Properties | Property | Type | Description | | --- | --- | --- | -| [history](./ai.startchatparams.md#startchatparamshistory) | [Content](./ai.content.md#content_interface)\[\] | | -| [systemInstruction](./ai.startchatparams.md#startchatparamssysteminstruction) | string \| [Part](./ai.md#part) \| [Content](./ai.content.md#content_interface) | | -| [toolConfig](./ai.startchatparams.md#startchatparamstoolconfig) | [ToolConfig](./ai.toolconfig.md#toolconfig_interface) | | -| [tools](./ai.startchatparams.md#startchatparamstools) | [Tool](./ai.md#tool)\[\] | | +| [history](./vertexai.startchatparams.md#startchatparamshistory) | [Content](./vertexai.content.md#content_interface)\[\] | | +| [systemInstruction](./vertexai.startchatparams.md#startchatparamssysteminstruction) | string \| [Part](./vertexai.md#part) \| [Content](./vertexai.content.md#content_interface) | | +| [toolConfig](./vertexai.startchatparams.md#startchatparamstoolconfig) | [ToolConfig](./vertexai.toolconfig.md#toolconfig_interface) | | +| [tools](./vertexai.startchatparams.md#startchatparamstools) | [Tool](./vertexai.md#tool)\[\] | | ## StartChatParams.history diff --git a/docs-devsite/ai.stringschema.md b/docs-devsite/vertexai.stringschema.md similarity index 72% rename from docs-devsite/ai.stringschema.md rename to docs-devsite/vertexai.stringschema.md index c3ab8f13a6f..bfafe0fe9df 100644 --- a/docs-devsite/ai.stringschema.md +++ b/docs-devsite/vertexai.stringschema.md @@ -17,19 +17,19 @@ Schema class for "string" types. Can be used with or without enum values. ```typescript export declare class StringSchema extends Schema ``` -Extends: [Schema](./ai.schema.md#schema_class) +Extends: [Schema](./vertexai.schema.md#schema_class) ## Constructors | Constructor | Modifiers | Description | | --- | --- | --- | -| [(constructor)(schemaParams, enumValues)](./ai.stringschema.md#stringschemaconstructor) | | Constructs a new instance of the StringSchema class | +| [(constructor)(schemaParams, enumValues)](./vertexai.stringschema.md#stringschemaconstructor) | | Constructs a new instance of the StringSchema class | ## Properties | Property | Modifiers | Type | Description | | --- | --- | --- | --- | -| [enum](./ai.stringschema.md#stringschemaenum) | | string\[\] | | +| [enum](./vertexai.stringschema.md#stringschemaenum) | | string\[\] | | ## StringSchema.(constructor) @@ -45,7 +45,7 @@ constructor(schemaParams?: SchemaParams, enumValues?: string[]); | Parameter | Type | Description | | --- | --- | --- | -| schemaParams | [SchemaParams](./ai.schemaparams.md#schemaparams_interface) | | +| schemaParams | [SchemaParams](./vertexai.schemaparams.md#schemaparams_interface) | | | enumValues | string\[\] | | ## StringSchema.enum diff --git a/docs-devsite/ai.textpart.md b/docs-devsite/vertexai.textpart.md similarity index 74% rename from docs-devsite/ai.textpart.md rename to docs-devsite/vertexai.textpart.md index 2057d95d32e..afee40a369d 100644 --- a/docs-devsite/ai.textpart.md +++ b/docs-devsite/vertexai.textpart.md @@ -22,10 +22,10 @@ export interface TextPart | Property | Type | Description | | --- | --- | --- | -| [functionCall](./ai.textpart.md#textpartfunctioncall) | never | | -| [functionResponse](./ai.textpart.md#textpartfunctionresponse) | never | | -| [inlineData](./ai.textpart.md#textpartinlinedata) | never | | -| [text](./ai.textpart.md#textparttext) | string | | +| [functionCall](./vertexai.textpart.md#textpartfunctioncall) | never | | +| [functionResponse](./vertexai.textpart.md#textpartfunctionresponse) | never | | +| [inlineData](./vertexai.textpart.md#textpartinlinedata) | never | | +| [text](./vertexai.textpart.md#textparttext) | string | | ## TextPart.functionCall diff --git a/docs-devsite/ai.toolconfig.md b/docs-devsite/vertexai.toolconfig.md similarity index 78% rename from docs-devsite/ai.toolconfig.md rename to docs-devsite/vertexai.toolconfig.md index 81bd6ccd8fc..30c62c17c01 100644 --- a/docs-devsite/ai.toolconfig.md +++ b/docs-devsite/vertexai.toolconfig.md @@ -22,7 +22,7 @@ export interface ToolConfig | Property | Type | Description | | --- | --- | --- | -| [functionCallingConfig](./ai.toolconfig.md#toolconfigfunctioncallingconfig) | [FunctionCallingConfig](./ai.functioncallingconfig.md#functioncallingconfig_interface) | | +| [functionCallingConfig](./vertexai.toolconfig.md#toolconfigfunctioncallingconfig) | [FunctionCallingConfig](./vertexai.functioncallingconfig.md#functioncallingconfig_interface) | | ## ToolConfig.functionCallingConfig diff --git a/docs-devsite/ai.usagemetadata.md b/docs-devsite/vertexai.usagemetadata.md similarity index 56% rename from docs-devsite/ai.usagemetadata.md rename to docs-devsite/vertexai.usagemetadata.md index 4211fea72b4..176878235d5 100644 --- a/docs-devsite/ai.usagemetadata.md +++ b/docs-devsite/vertexai.usagemetadata.md @@ -10,7 +10,7 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # UsageMetadata interface -Usage metadata about a [GenerateContentResponse](./ai.generatecontentresponse.md#generatecontentresponse_interface). +Usage metadata about a [GenerateContentResponse](./vertexai.generatecontentresponse.md#generatecontentresponse_interface). Signature: @@ -22,11 +22,11 @@ export interface UsageMetadata | Property | Type | Description | | --- | --- | --- | -| [candidatesTokenCount](./ai.usagemetadata.md#usagemetadatacandidatestokencount) | number | | -| [candidatesTokensDetails](./ai.usagemetadata.md#usagemetadatacandidatestokensdetails) | [ModalityTokenCount](./ai.modalitytokencount.md#modalitytokencount_interface)\[\] | | -| [promptTokenCount](./ai.usagemetadata.md#usagemetadataprompttokencount) | number | | -| [promptTokensDetails](./ai.usagemetadata.md#usagemetadataprompttokensdetails) | [ModalityTokenCount](./ai.modalitytokencount.md#modalitytokencount_interface)\[\] | | -| [totalTokenCount](./ai.usagemetadata.md#usagemetadatatotaltokencount) | number | | +| [candidatesTokenCount](./vertexai.usagemetadata.md#usagemetadatacandidatestokencount) | number | | +| [candidatesTokensDetails](./vertexai.usagemetadata.md#usagemetadatacandidatestokensdetails) | [ModalityTokenCount](./vertexai.modalitytokencount.md#modalitytokencount_interface)\[\] | | +| [promptTokenCount](./vertexai.usagemetadata.md#usagemetadataprompttokencount) | number | | +| [promptTokensDetails](./vertexai.usagemetadata.md#usagemetadataprompttokensdetails) | [ModalityTokenCount](./vertexai.modalitytokencount.md#modalitytokencount_interface)\[\] | | +| [totalTokenCount](./vertexai.usagemetadata.md#usagemetadatatotaltokencount) | number | | ## UsageMetadata.candidatesTokenCount diff --git a/docs-devsite/vertexai.vertexai.md b/docs-devsite/vertexai.vertexai.md new file mode 100644 index 00000000000..d30d0f7113e --- /dev/null +++ b/docs-devsite/vertexai.vertexai.md @@ -0,0 +1,44 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# VertexAI interface +An instance of the Vertex AI in Firebase SDK. + +Signature: + +```typescript +export interface VertexAI +``` + +## Properties + +| Property | Type | Description | +| --- | --- | --- | +| [app](./vertexai.vertexai.md#vertexaiapp) | [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) | The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [VertexAI](./vertexai.vertexai.md#vertexai_interface) instance is associated with. | +| [location](./vertexai.vertexai.md#vertexailocation) | string | | + +## VertexAI.app + +The [FirebaseApp](./app.firebaseapp.md#firebaseapp_interface) this [VertexAI](./vertexai.vertexai.md#vertexai_interface) instance is associated with. + +Signature: + +```typescript +app: FirebaseApp; +``` + +## VertexAI.location + +Signature: + +```typescript +location: string; +``` diff --git a/docs-devsite/vertexai.vertexaierror.md b/docs-devsite/vertexai.vertexaierror.md new file mode 100644 index 00000000000..31f527e59b3 --- /dev/null +++ b/docs-devsite/vertexai.vertexaierror.md @@ -0,0 +1,67 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# VertexAIError class +Error class for the Vertex AI in Firebase SDK. + +Signature: + +```typescript +export declare class VertexAIError extends FirebaseError +``` +Extends: [FirebaseError](./util.firebaseerror.md#firebaseerror_class) + +## Constructors + +| Constructor | Modifiers | Description | +| --- | --- | --- | +| [(constructor)(code, message, customErrorData)](./vertexai.vertexaierror.md#vertexaierrorconstructor) | | Constructs a new instance of the VertexAIError class. | + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [code](./vertexai.vertexaierror.md#vertexaierrorcode) | | [VertexAIErrorCode](./vertexai.md#vertexaierrorcode) | | +| [customErrorData](./vertexai.vertexaierror.md#vertexaierrorcustomerrordata) | | [CustomErrorData](./vertexai.customerrordata.md#customerrordata_interface) \| undefined | | + +## VertexAIError.(constructor) + +Constructs a new instance of the `VertexAIError` class. + +Signature: + +```typescript +constructor(code: VertexAIErrorCode, message: string, customErrorData?: CustomErrorData | undefined); +``` + +#### Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| code | [VertexAIErrorCode](./vertexai.md#vertexaierrorcode) | The error code from [VertexAIErrorCode](./vertexai.md#vertexaierrorcode). | +| message | string | A human-readable message describing the error. | +| customErrorData | [CustomErrorData](./vertexai.customerrordata.md#customerrordata_interface) \| undefined | Optional error data. | + +## VertexAIError.code + +Signature: + +```typescript +readonly code: VertexAIErrorCode; +``` + +## VertexAIError.customErrorData + +Signature: + +```typescript +readonly customErrorData?: CustomErrorData | undefined; +``` diff --git a/docs-devsite/vertexai.vertexaimodel.md b/docs-devsite/vertexai.vertexaimodel.md new file mode 100644 index 00000000000..5c3244fe1e5 --- /dev/null +++ b/docs-devsite/vertexai.vertexaimodel.md @@ -0,0 +1,66 @@ +Project: /docs/reference/js/_project.yaml +Book: /docs/reference/_book.yaml +page_type: reference + +{% comment %} +DO NOT EDIT THIS FILE! +This is generated by the JS SDK team, and any local changes will be +overwritten. Changes should be made in the source code at +https://github.com/firebase/firebase-js-sdk +{% endcomment %} + +# VertexAIModel class +Base class for Vertex AI in Firebase model APIs. + +The constructor for this class is marked as internal. Third-party code should not call the constructor directly or create subclasses that extend the `VertexAIModel` class. + +Signature: + +```typescript +export declare abstract class VertexAIModel +``` + +## Properties + +| Property | Modifiers | Type | Description | +| --- | --- | --- | --- | +| [model](./vertexai.vertexaimodel.md#vertexaimodelmodel) | | string | The fully qualified model resource name to use for generating images (for example, publishers/google/models/imagen-3.0-generate-002). | + +## Methods + +| Method | Modifiers | Description | +| --- | --- | --- | +| [normalizeModelName(modelName)](./vertexai.vertexaimodel.md#vertexaimodelnormalizemodelname) | static | Normalizes the given model name to a fully qualified model resource name. | + +## VertexAIModel.model + +The fully qualified model resource name to use for generating images (for example, `publishers/google/models/imagen-3.0-generate-002`). + +Signature: + +```typescript +readonly model: string; +``` + +## VertexAIModel.normalizeModelName() + +Normalizes the given model name to a fully qualified model resource name. + +Signature: + +```typescript +static normalizeModelName(modelName: string): string; +``` + +#### Parameters + +| Parameter | Type | Description | +| --- | --- | --- | +| modelName | string | The model name to normalize. | + +Returns: + +string + +The fully qualified model resource name. + diff --git a/docs-devsite/ai.vertexaioptions.md b/docs-devsite/vertexai.vertexaioptions.md similarity index 80% rename from docs-devsite/ai.vertexaioptions.md rename to docs-devsite/vertexai.vertexaioptions.md index 311fa4785f7..e15b525bfed 100644 --- a/docs-devsite/ai.vertexaioptions.md +++ b/docs-devsite/vertexai.vertexaioptions.md @@ -10,7 +10,7 @@ https://github.com/firebase/firebase-js-sdk {% endcomment %} # VertexAIOptions interface -Options when initializing the Firebase AI SDK. +Options when initializing the Vertex AI in Firebase SDK. Signature: @@ -22,7 +22,7 @@ export interface VertexAIOptions | Property | Type | Description | | --- | --- | --- | -| [location](./ai.vertexaioptions.md#vertexaioptionslocation) | string | | +| [location](./vertexai.vertexaioptions.md#vertexaioptionslocation) | string | | ## VertexAIOptions.location diff --git a/docs-devsite/ai.videometadata.md b/docs-devsite/vertexai.videometadata.md similarity index 75% rename from docs-devsite/ai.videometadata.md rename to docs-devsite/vertexai.videometadata.md index d63447837be..b4f872c4e3d 100644 --- a/docs-devsite/ai.videometadata.md +++ b/docs-devsite/vertexai.videometadata.md @@ -22,8 +22,8 @@ export interface VideoMetadata | Property | Type | Description | | --- | --- | --- | -| [endOffset](./ai.videometadata.md#videometadataendoffset) | string | The end offset of the video in protobuf [Duration](https://cloud.google.com/ruby/docs/reference/google-cloud-workflows-v1/latest/Google-Protobuf-Duration#json-mapping) format. | -| [startOffset](./ai.videometadata.md#videometadatastartoffset) | string | The start offset of the video in protobuf [Duration](https://cloud.google.com/ruby/docs/reference/google-cloud-workflows-v1/latest/Google-Protobuf-Duration#json-mapping) format. | +| [endOffset](./vertexai.videometadata.md#videometadataendoffset) | string | The end offset of the video in protobuf [Duration](https://cloud.google.com/ruby/docs/reference/google-cloud-workflows-v1/latest/Google-Protobuf-Duration#json-mapping) format. | +| [startOffset](./vertexai.videometadata.md#videometadatastartoffset) | string | The start offset of the video in protobuf [Duration](https://cloud.google.com/ruby/docs/reference/google-cloud-workflows-v1/latest/Google-Protobuf-Duration#json-mapping) format. | ## VideoMetadata.endOffset diff --git a/docs-devsite/ai.webattribution.md b/docs-devsite/vertexai.webattribution.md similarity index 81% rename from docs-devsite/ai.webattribution.md rename to docs-devsite/vertexai.webattribution.md index 2040d9eb82a..bb4fecf874d 100644 --- a/docs-devsite/ai.webattribution.md +++ b/docs-devsite/vertexai.webattribution.md @@ -21,8 +21,8 @@ export interface WebAttribution | Property | Type | Description | | --- | --- | --- | -| [title](./ai.webattribution.md#webattributiontitle) | string | | -| [uri](./ai.webattribution.md#webattributionuri) | string | | +| [title](./vertexai.webattribution.md#webattributiontitle) | string | | +| [uri](./vertexai.webattribution.md#webattributionuri) | string | | ## WebAttribution.title diff --git a/packages/ai/src/api.test.ts b/packages/ai/src/api.test.ts deleted file mode 100644 index 27237b4edd3..00000000000 --- a/packages/ai/src/api.test.ts +++ /dev/null @@ -1,169 +0,0 @@ -/** - * @license - * Copyright 2024 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 { ImagenModelParams, ModelParams, AIErrorCode } from './types'; -import { AIError } from './errors'; -import { ImagenModel, getGenerativeModel, getImagenModel } from './api'; -import { expect } from 'chai'; -import { AI } from './public-types'; -import { GenerativeModel } from './models/generative-model'; -import { VertexAIBackend } from './backend'; -import { AI_TYPE } from './constants'; - -const fakeAI: AI = { - app: { - name: 'DEFAULT', - automaticDataCollectionEnabled: true, - options: { - apiKey: 'key', - projectId: 'my-project', - appId: 'my-appid' - } - }, - backend: new VertexAIBackend('us-central1'), - location: 'us-central1' -}; - -describe('Top level API', () => { - it('getGenerativeModel throws if no model is provided', () => { - try { - getGenerativeModel(fakeAI, {} as ModelParams); - } catch (e) { - expect((e as AIError).code).includes(AIErrorCode.NO_MODEL); - expect((e as AIError).message).includes( - `AI: Must provide a model name. Example: ` + - `getGenerativeModel({ model: 'my-model-name' }) (${AI_TYPE}/${AIErrorCode.NO_MODEL})` - ); - } - }); - it('getGenerativeModel throws if no apiKey is provided', () => { - const fakeVertexNoApiKey = { - ...fakeAI, - app: { options: { projectId: 'my-project', appId: 'my-appid' } } - } as AI; - try { - getGenerativeModel(fakeVertexNoApiKey, { model: 'my-model' }); - } catch (e) { - expect((e as AIError).code).includes(AIErrorCode.NO_API_KEY); - expect((e as AIError).message).equals( - `AI: The "apiKey" field is empty in the local ` + - `Firebase config. Firebase AI requires this field to` + - ` contain a valid API key. (${AI_TYPE}/${AIErrorCode.NO_API_KEY})` - ); - } - }); - it('getGenerativeModel throws if no projectId is provided', () => { - const fakeVertexNoProject = { - ...fakeAI, - app: { options: { apiKey: 'my-key', appId: 'my-appid' } } - } as AI; - try { - getGenerativeModel(fakeVertexNoProject, { model: 'my-model' }); - } catch (e) { - expect((e as AIError).code).includes(AIErrorCode.NO_PROJECT_ID); - expect((e as AIError).message).equals( - `AI: The "projectId" field is empty in the local` + - ` Firebase config. Firebase AI requires this field ` + - `to contain a valid project ID. (${AI_TYPE}/${AIErrorCode.NO_PROJECT_ID})` - ); - } - }); - it('getGenerativeModel throws if no appId is provided', () => { - const fakeVertexNoProject = { - ...fakeAI, - app: { options: { apiKey: 'my-key', projectId: 'my-projectid' } } - } as AI; - try { - getGenerativeModel(fakeVertexNoProject, { model: 'my-model' }); - } catch (e) { - expect((e as AIError).code).includes(AIErrorCode.NO_APP_ID); - expect((e as AIError).message).equals( - `AI: The "appId" field is empty in the local` + - ` Firebase config. Firebase AI requires this field ` + - `to contain a valid app ID. (${AI_TYPE}/${AIErrorCode.NO_APP_ID})` - ); - } - }); - it('getGenerativeModel gets a GenerativeModel', () => { - const genModel = getGenerativeModel(fakeAI, { model: 'my-model' }); - expect(genModel).to.be.an.instanceOf(GenerativeModel); - expect(genModel.model).to.equal('publishers/google/models/my-model'); - }); - it('getImagenModel throws if no model is provided', () => { - try { - getImagenModel(fakeAI, {} as ImagenModelParams); - } catch (e) { - expect((e as AIError).code).includes(AIErrorCode.NO_MODEL); - expect((e as AIError).message).includes( - `AI: Must provide a model name. Example: ` + - `getImagenModel({ model: 'my-model-name' }) (${AI_TYPE}/${AIErrorCode.NO_MODEL})` - ); - } - }); - it('getImagenModel throws if no apiKey is provided', () => { - const fakeVertexNoApiKey = { - ...fakeAI, - app: { options: { projectId: 'my-project', appId: 'my-appid' } } - } as AI; - try { - getImagenModel(fakeVertexNoApiKey, { model: 'my-model' }); - } catch (e) { - expect((e as AIError).code).includes(AIErrorCode.NO_API_KEY); - expect((e as AIError).message).equals( - `AI: The "apiKey" field is empty in the local ` + - `Firebase config. Firebase AI requires this field to` + - ` contain a valid API key. (${AI_TYPE}/${AIErrorCode.NO_API_KEY})` - ); - } - }); - it('getImagenModel throws if no projectId is provided', () => { - const fakeVertexNoProject = { - ...fakeAI, - app: { options: { apiKey: 'my-key', appId: 'my-appid' } } - } as AI; - try { - getImagenModel(fakeVertexNoProject, { model: 'my-model' }); - } catch (e) { - expect((e as AIError).code).includes(AIErrorCode.NO_PROJECT_ID); - expect((e as AIError).message).equals( - `AI: The "projectId" field is empty in the local` + - ` Firebase config. Firebase AI requires this field ` + - `to contain a valid project ID. (${AI_TYPE}/${AIErrorCode.NO_PROJECT_ID})` - ); - } - }); - it('getImagenModel throws if no appId is provided', () => { - const fakeVertexNoProject = { - ...fakeAI, - app: { options: { apiKey: 'my-key', projectId: 'my-project' } } - } as AI; - try { - getImagenModel(fakeVertexNoProject, { model: 'my-model' }); - } catch (e) { - expect((e as AIError).code).includes(AIErrorCode.NO_APP_ID); - expect((e as AIError).message).equals( - `AI: The "appId" field is empty in the local` + - ` Firebase config. Firebase AI requires this field ` + - `to contain a valid app ID. (${AI_TYPE}/${AIErrorCode.NO_APP_ID})` - ); - } - }); - it('getImagenModel gets an ImagenModel', () => { - const genModel = getImagenModel(fakeAI, { model: 'my-model' }); - expect(genModel).to.be.an.instanceOf(ImagenModel); - expect(genModel.model).to.equal('publishers/google/models/my-model'); - }); -}); diff --git a/packages/ai/src/api.ts b/packages/ai/src/api.ts deleted file mode 100644 index d2229c067fc..00000000000 --- a/packages/ai/src/api.ts +++ /dev/null @@ -1,188 +0,0 @@ -/** - * @license - * Copyright 2024 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 { FirebaseApp, getApp, _getProvider } from '@firebase/app'; -import { Provider } from '@firebase/component'; -import { getModularInstance } from '@firebase/util'; -import { AI_TYPE } from './constants'; -import { AIService } from './service'; -import { AI, AIOptions, VertexAI, VertexAIOptions } from './public-types'; -import { - ImagenModelParams, - ModelParams, - RequestOptions, - AIErrorCode -} from './types'; -import { AIError } from './errors'; -import { AIModel, GenerativeModel, ImagenModel } from './models'; -import { encodeInstanceIdentifier } from './helpers'; -import { GoogleAIBackend, VertexAIBackend } from './backend'; - -export { ChatSession } from './methods/chat-session'; -export * from './requests/schema-builder'; -export { ImagenImageFormat } from './requests/imagen-image-format'; -export { AIModel, GenerativeModel, ImagenModel, AIError }; -export { Backend, VertexAIBackend, GoogleAIBackend } from './backend'; - -export { AIErrorCode as VertexAIErrorCode }; - -/** - * @deprecated Use the new {@link AIModel} instead. The Vertex AI in Firebase SDK has been - * replaced with the Firebase AI SDK to accommodate the evolving set of supported features and - * services. For migration details, see the {@link https://firebase.google.com/docs/vertex-ai/migrate-to-latest-sdk | migration guide}. - * - * Base class for Firebase AI model APIs. - * - * @public - */ -export const VertexAIModel = AIModel; - -/** - * @deprecated Use the new {@link AIError} instead. The Vertex AI in Firebase SDK has been - * replaced with the Firebase AI SDK to accommodate the evolving set of supported features and - * services. For migration details, see the {@link https://firebase.google.com/docs/vertex-ai/migrate-to-latest-sdk | migration guide}. - * - * Error class for the Firebase AI SDK. - * - * @public - */ -export const VertexAIError = AIError; - -declare module '@firebase/component' { - interface NameServiceMapping { - [AI_TYPE]: AIService; - } -} - -/** - * @deprecated Use the new {@link getAI | getAI()} instead. The Vertex AI in Firebase SDK has been - * replaced with the Firebase AI SDK to accommodate the evolving set of supported features and - * services. For migration details, see the {@link https://firebase.google.com/docs/vertex-ai/migrate-to-latest-sdk | migration guide}. - * - * Returns a {@link VertexAI} instance for the given app, configured to use the - * Vertex AI Gemini API. This instance will be - * configured to use the Vertex AI Gemini API. - * - * @param app - The {@link @firebase/app#FirebaseApp} to use. - * @param options - Options to configure the Vertex AI instance, including the location. - * - * @public - */ -export function getVertexAI( - app: FirebaseApp = getApp(), - options?: VertexAIOptions -): VertexAI { - app = getModularInstance(app); - // Dependencies - const AIProvider: Provider<'AI'> = _getProvider(app, AI_TYPE); - - const backend = new VertexAIBackend(options?.location); - const identifier = encodeInstanceIdentifier(backend); - return AIProvider.getImmediate({ - identifier - }); -} - -/** - * Returns the default {@link AI} instance that is associated with the provided - * {@link @firebase/app#FirebaseApp}. If no instance exists, initializes a new instance with the - * default settings. - * - * @example - * ```javascript - * const ai = getAI(app); - * ``` - * - * @example - * ```javascript - * // Get an AI instance configured to use the Gemini Developer API (via Google AI). - * const ai = getAI(app, { backend: new GoogleAIBackend() }); - * ``` - * - * @example - * ```javascript - * // Get an AI instance configured to use the Vertex AI Gemini API. - * const ai = getAI(app, { backend: new VertexAIBackend() }); - * ``` - * - * @param app - The {@link @firebase/app#FirebaseApp} to use. - * @param options - {@link AIOptions} that configure the AI instance. - * @returns The default {@link AI} instance for the given {@link @firebase/app#FirebaseApp}. - * - * @public - */ -export function getAI( - app: FirebaseApp = getApp(), - options: AIOptions = { backend: new GoogleAIBackend() } -): AI { - app = getModularInstance(app); - // Dependencies - const AIProvider: Provider<'AI'> = _getProvider(app, AI_TYPE); - - const identifier = encodeInstanceIdentifier(options.backend); - return AIProvider.getImmediate({ - identifier - }); -} - -/** - * Returns a {@link GenerativeModel} class with methods for inference - * and other functionality. - * - * @public - */ -export function getGenerativeModel( - ai: AI, - modelParams: ModelParams, - requestOptions?: RequestOptions -): GenerativeModel { - if (!modelParams.model) { - throw new AIError( - AIErrorCode.NO_MODEL, - `Must provide a model name. Example: getGenerativeModel({ model: 'my-model-name' })` - ); - } - return new GenerativeModel(ai, modelParams, requestOptions); -} - -/** - * Returns an {@link ImagenModel} class with methods for using Imagen. - * - * Only Imagen 3 models (named `imagen-3.0-*`) are supported. - * - * @param ai - An {@link AI} instance. - * @param modelParams - Parameters to use when making Imagen requests. - * @param requestOptions - Additional options to use when making requests. - * - * @throws If the `apiKey` or `projectId` fields are missing in your - * Firebase config. - * - * @beta - */ -export function getImagenModel( - ai: AI, - modelParams: ImagenModelParams, - requestOptions?: RequestOptions -): ImagenModel { - if (!modelParams.model) { - throw new AIError( - AIErrorCode.NO_MODEL, - `Must provide a model name. Example: getImagenModel({ model: 'my-model-name' })` - ); - } - return new ImagenModel(ai, modelParams, requestOptions); -} diff --git a/packages/ai/src/backend.test.ts b/packages/ai/src/backend.test.ts deleted file mode 100644 index 0c6609277e3..00000000000 --- a/packages/ai/src/backend.test.ts +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @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 { expect } from 'chai'; -import { GoogleAIBackend, VertexAIBackend } from './backend'; -import { BackendType } from './public-types'; -import { DEFAULT_LOCATION } from './constants'; - -describe('Backend', () => { - describe('GoogleAIBackend', () => { - it('sets backendType to GOOGLE_AI', () => { - const backend = new GoogleAIBackend(); - expect(backend.backendType).to.equal(BackendType.GOOGLE_AI); - }); - }); - describe('VertexAIBackend', () => { - it('set backendType to VERTEX_AI', () => { - const backend = new VertexAIBackend(); - expect(backend.backendType).to.equal(BackendType.VERTEX_AI); - expect(backend.location).to.equal(DEFAULT_LOCATION); - }); - it('sets custom location', () => { - const backend = new VertexAIBackend('test-location'); - expect(backend.backendType).to.equal(BackendType.VERTEX_AI); - expect(backend.location).to.equal('test-location'); - }); - it('uses default location if location is empty string', () => { - const backend = new VertexAIBackend(''); - expect(backend.backendType).to.equal(BackendType.VERTEX_AI); - expect(backend.location).to.equal(DEFAULT_LOCATION); - }); - it('uses default location if location is null', () => { - const backend = new VertexAIBackend(null as any); - expect(backend.backendType).to.equal(BackendType.VERTEX_AI); - expect(backend.location).to.equal(DEFAULT_LOCATION); - }); - }); -}); diff --git a/packages/ai/src/backend.ts b/packages/ai/src/backend.ts deleted file mode 100644 index 7209828122b..00000000000 --- a/packages/ai/src/backend.ts +++ /dev/null @@ -1,92 +0,0 @@ -/** - * @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 { DEFAULT_LOCATION } from './constants'; -import { BackendType } from './public-types'; - -/** - * Abstract base class representing the configuration for an AI service backend. - * This class should not be instantiated directly. Use its subclasses; {@link GoogleAIBackend} for - * the Gemini Developer API (via {@link https://ai.google/ | Google AI}), and - * {@link VertexAIBackend} for the Vertex AI Gemini API. - * - * @public - */ -export abstract class Backend { - /** - * Specifies the backend type. - */ - readonly backendType: BackendType; - - /** - * Protected constructor for use by subclasses. - * @param type - The backend type. - */ - protected constructor(type: BackendType) { - this.backendType = type; - } -} - -/** - * Configuration class for the Gemini Developer API. - * - * Use this with {@link AIOptions} when initializing the AI service via - * {@link getAI | getAI()} to specify the Gemini Developer API as the backend. - * - * @public - */ -export class GoogleAIBackend extends Backend { - /** - * Creates a configuration object for the Gemini Developer API backend. - */ - constructor() { - super(BackendType.GOOGLE_AI); - } -} - -/** - * Configuration class for the Vertex AI Gemini API. - * - * Use this with {@link AIOptions} when initializing the AI service via - * {@link getAI | getAI()} to specify the Vertex AI Gemini API as the backend. - * - * @public - */ -export class VertexAIBackend extends Backend { - /** - * The region identifier. - * See {@link https://firebase.google.com/docs/vertex-ai/locations#available-locations | Vertex AI locations} - * for a list of supported locations. - */ - readonly location: string; - - /** - * Creates a configuration object for the Vertex AI backend. - * - * @param location - The region identifier, defaulting to `us-central1`; - * see {@link https://firebase.google.com/docs/vertex-ai/locations#available-locations | Vertex AI locations} - * for a list of supported locations. - */ - constructor(location: string = DEFAULT_LOCATION) { - super(BackendType.VERTEX_AI); - if (!location) { - this.location = DEFAULT_LOCATION; - } else { - this.location = location; - } - } -} diff --git a/packages/ai/src/backwards-compatbility.test.ts b/packages/ai/src/backwards-compatbility.test.ts deleted file mode 100644 index 62463009b24..00000000000 --- a/packages/ai/src/backwards-compatbility.test.ts +++ /dev/null @@ -1,85 +0,0 @@ -/** - * @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 { expect } from 'chai'; -import { - AIError, - AIModel, - GenerativeModel, - VertexAIError, - VertexAIErrorCode, - VertexAIModel, - getGenerativeModel, - getImagenModel -} from './api'; -import { AI, VertexAI, AIErrorCode } from './public-types'; -import { VertexAIBackend } from './backend'; - -function assertAssignable(): void {} - -const fakeAI: AI = { - app: { - name: 'DEFAULT', - automaticDataCollectionEnabled: true, - options: { - apiKey: 'key', - projectId: 'my-project', - appId: 'app-id' - } - }, - backend: new VertexAIBackend('us-central1'), - location: 'us-central1' -}; - -const fakeVertexAI: VertexAI = fakeAI; - -describe('backwards-compatible types', () => { - it('AI is backwards compatible with VertexAI', () => { - assertAssignable(); - }); - it('AIError is backwards compatible with VertexAIError', () => { - assertAssignable(); - const err = new VertexAIError(VertexAIErrorCode.ERROR, ''); - expect(err).instanceOf(AIError); - expect(err).instanceOf(VertexAIError); - }); - it('AIErrorCode is backwards compatible with VertexAIErrorCode', () => { - assertAssignable(); - const errCode = AIErrorCode.ERROR; - expect(errCode).to.equal(VertexAIErrorCode.ERROR); - }); - it('AIModel is backwards compatible with VertexAIModel', () => { - assertAssignable(); - - const model = new GenerativeModel(fakeAI, { model: 'model-name' }); - expect(model).to.be.instanceOf(AIModel); - expect(model).to.be.instanceOf(VertexAIModel); - }); -}); - -describe('backward-compatible functions', () => { - it('getGenerativeModel', () => { - const model = getGenerativeModel(fakeVertexAI, { model: 'model-name' }); - expect(model).to.be.instanceOf(AIModel); - expect(model).to.be.instanceOf(VertexAIModel); - }); - it('getImagenModel', () => { - const model = getImagenModel(fakeVertexAI, { model: 'model-name' }); - expect(model).to.be.instanceOf(AIModel); - expect(model).to.be.instanceOf(VertexAIModel); - }); -}); diff --git a/packages/ai/src/googleai-mappers.test.ts b/packages/ai/src/googleai-mappers.test.ts deleted file mode 100644 index 12f422625f5..00000000000 --- a/packages/ai/src/googleai-mappers.test.ts +++ /dev/null @@ -1,391 +0,0 @@ -/** - * @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 { expect, use } from 'chai'; -import sinon, { restore, stub } from 'sinon'; -import sinonChai from 'sinon-chai'; -import { - mapCountTokensRequest, - mapGenerateContentCandidates, - mapGenerateContentRequest, - mapGenerateContentResponse, - mapPromptFeedback -} from './googleai-mappers'; -import { - BlockReason, - Content, - CountTokensRequest, - GenerateContentRequest, - HarmBlockMethod, - HarmBlockThreshold, - HarmCategory, - HarmProbability, - HarmSeverity, - SafetyRating, - AIErrorCode, - FinishReason, - PromptFeedback -} from './types'; -import { - GoogleAIGenerateContentResponse, - GoogleAIGenerateContentCandidate, - GoogleAICountTokensRequest -} from './types/googleai'; -import { logger } from './logger'; -import { AIError } from './errors'; -import { getMockResponse } from '../test-utils/mock-response'; - -use(sinonChai); - -const fakeModel = 'models/gemini-pro'; - -const fakeContents: Content[] = [{ role: 'user', parts: [{ text: 'hello' }] }]; - -describe('Google AI Mappers', () => { - let loggerWarnStub: sinon.SinonStub; - - beforeEach(() => { - loggerWarnStub = stub(logger, 'warn'); - }); - - afterEach(() => { - restore(); - }); - - describe('mapGenerateContentRequest', () => { - it('should throw if safetySettings contain method', () => { - const request: GenerateContentRequest = { - contents: fakeContents, - safetySettings: [ - { - category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, - threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, - method: HarmBlockMethod.SEVERITY - } - ] - }; - expect(() => mapGenerateContentRequest(request)) - .to.throw(AIError, /SafetySetting.method is not supported/i) - .with.property('code', AIErrorCode.UNSUPPORTED); - }); - - it('should warn and round topK if present', () => { - const request: GenerateContentRequest = { - contents: fakeContents, - generationConfig: { - topK: 15.7 - } - }; - const mappedRequest = mapGenerateContentRequest(request); - expect(loggerWarnStub).to.have.been.calledOnceWith( - 'topK in GenerationConfig has been rounded to the nearest integer to match the format for requests to the Gemini Developer API.' - ); - expect(mappedRequest.generationConfig?.topK).to.equal(16); - }); - - it('should not modify topK if it is already an integer', () => { - const request: GenerateContentRequest = { - contents: fakeContents, - generationConfig: { - topK: 16 - } - }; - const mappedRequest = mapGenerateContentRequest(request); - expect(loggerWarnStub).to.not.have.been.called; - expect(mappedRequest.generationConfig?.topK).to.equal(16); - }); - - it('should return the request mostly unchanged if valid', () => { - const request: GenerateContentRequest = { - contents: fakeContents, - safetySettings: [ - { - category: HarmCategory.HARM_CATEGORY_HATE_SPEECH, - threshold: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE - } - ], - generationConfig: { - temperature: 0.5 - } - }; - const mappedRequest = mapGenerateContentRequest({ ...request }); - expect(mappedRequest).to.deep.equal(request); - expect(loggerWarnStub).to.not.have.been.called; - }); - }); - - describe('mapGenerateContentResponse', () => { - it('should map a full Google AI response', async () => { - const googleAIMockResponse: GoogleAIGenerateContentResponse = await ( - getMockResponse('googleAI', 'unary-success-citations.json') as Response - ).json(); - const mappedResponse = mapGenerateContentResponse(googleAIMockResponse); - - expect(mappedResponse.candidates).to.exist; - expect(mappedResponse.candidates?.[0].content.parts[0].text).to.contain( - 'quantum mechanics' - ); - - // Mapped citations - expect( - mappedResponse.candidates?.[0].citationMetadata?.citations[0].startIndex - ).to.equal( - googleAIMockResponse.candidates?.[0].citationMetadata - ?.citationSources[0].startIndex - ); - expect( - mappedResponse.candidates?.[0].citationMetadata?.citations[0].endIndex - ).to.equal( - googleAIMockResponse.candidates?.[0].citationMetadata - ?.citationSources[0].endIndex - ); - - // Mapped safety ratings - expect( - mappedResponse.candidates?.[0].safetyRatings?.[0].probabilityScore - ).to.equal(0); - expect( - mappedResponse.candidates?.[0].safetyRatings?.[0].severityScore - ).to.equal(0); - expect( - mappedResponse.candidates?.[0].safetyRatings?.[0].severity - ).to.equal(HarmSeverity.HARM_SEVERITY_UNSUPPORTED); - - expect(mappedResponse.candidates?.[0].finishReason).to.equal( - FinishReason.STOP - ); - - // Check usage metadata passthrough - expect(mappedResponse.usageMetadata).to.deep.equal( - googleAIMockResponse.usageMetadata - ); - }); - - it('should handle missing candidates and promptFeedback', () => { - const googleAIResponse: GoogleAIGenerateContentResponse = { - // No candidates - // No promptFeedback - usageMetadata: { - promptTokenCount: 5, - candidatesTokenCount: 0, - totalTokenCount: 5 - } - }; - const mappedResponse = mapGenerateContentResponse(googleAIResponse); - expect(mappedResponse.candidates).to.be.undefined; - expect(mappedResponse.promptFeedback).to.be.undefined; // Mapped to undefined - expect(mappedResponse.usageMetadata).to.deep.equal( - googleAIResponse.usageMetadata - ); - }); - - it('should handle empty candidates array', () => { - const googleAIResponse: GoogleAIGenerateContentResponse = { - candidates: [], - usageMetadata: { - promptTokenCount: 5, - candidatesTokenCount: 0, - totalTokenCount: 5 - } - }; - const mappedResponse = mapGenerateContentResponse(googleAIResponse); - expect(mappedResponse.candidates).to.deep.equal([]); - expect(mappedResponse.promptFeedback).to.be.undefined; - expect(mappedResponse.usageMetadata).to.deep.equal( - googleAIResponse.usageMetadata - ); - }); - }); - - describe('mapCountTokensRequest', () => { - it('should map a Vertex AI CountTokensRequest to Google AI format', () => { - const vertexRequest: CountTokensRequest = { - contents: fakeContents, - systemInstruction: { role: 'system', parts: [{ text: 'Be nice' }] }, - tools: [ - { functionDeclarations: [{ name: 'foo', description: 'bar' }] } - ], - generationConfig: { temperature: 0.8 } - }; - - const expectedGoogleAIRequest: GoogleAICountTokensRequest = { - generateContentRequest: { - model: fakeModel, - contents: vertexRequest.contents, - systemInstruction: vertexRequest.systemInstruction, - tools: vertexRequest.tools, - generationConfig: vertexRequest.generationConfig - } - }; - - const mappedRequest = mapCountTokensRequest(vertexRequest, fakeModel); - expect(mappedRequest).to.deep.equal(expectedGoogleAIRequest); - }); - - it('should map a minimal Vertex AI CountTokensRequest', () => { - const vertexRequest: CountTokensRequest = { - contents: fakeContents, - systemInstruction: { role: 'system', parts: [{ text: 'Be nice' }] }, - generationConfig: { temperature: 0.8 } - }; - - const expectedGoogleAIRequest: GoogleAICountTokensRequest = { - generateContentRequest: { - model: fakeModel, - contents: vertexRequest.contents, - systemInstruction: { role: 'system', parts: [{ text: 'Be nice' }] }, - generationConfig: { temperature: 0.8 } - } - }; - - const mappedRequest = mapCountTokensRequest(vertexRequest, fakeModel); - expect(mappedRequest).to.deep.equal(expectedGoogleAIRequest); - }); - }); - - describe('mapGenerateContentCandidates', () => { - it('should map citationSources to citationMetadata.citations', () => { - const candidates: GoogleAIGenerateContentCandidate[] = [ - { - index: 0, - content: { role: 'model', parts: [{ text: 'Cited text' }] }, - citationMetadata: { - citationSources: [ - { startIndex: 0, endIndex: 5, uri: 'uri1', license: 'MIT' }, - { startIndex: 6, endIndex: 10, uri: 'uri2' } - ] - } - } - ]; - const mapped = mapGenerateContentCandidates(candidates); - expect(mapped[0].citationMetadata).to.exist; - expect(mapped[0].citationMetadata?.citations).to.deep.equal( - candidates[0].citationMetadata?.citationSources - ); - expect(mapped[0].citationMetadata?.citations[0].title).to.be.undefined; // Not in Google AI - expect(mapped[0].citationMetadata?.citations[0].publicationDate).to.be - .undefined; // Not in Google AI - }); - - it('should add default safety rating properties', () => { - const candidates: GoogleAIGenerateContentCandidate[] = [ - { - index: 0, - content: { role: 'model', parts: [{ text: 'Maybe unsafe' }] }, - safetyRatings: [ - { - category: HarmCategory.HARM_CATEGORY_HARASSMENT, - probability: HarmProbability.MEDIUM, - blocked: false - // Missing severity, probabilityScore, severityScore - } as any - ] - } - ]; - const mapped = mapGenerateContentCandidates(candidates); - expect(mapped[0].safetyRatings).to.exist; - const safetyRating = mapped[0].safetyRatings?.[0] as SafetyRating; // Type assertion - expect(safetyRating.severity).to.equal( - HarmSeverity.HARM_SEVERITY_UNSUPPORTED - ); - expect(safetyRating.probabilityScore).to.equal(0); - expect(safetyRating.severityScore).to.equal(0); - // Existing properties should be preserved - expect(safetyRating.category).to.equal( - HarmCategory.HARM_CATEGORY_HARASSMENT - ); - expect(safetyRating.probability).to.equal(HarmProbability.MEDIUM); - expect(safetyRating.blocked).to.be.false; - }); - - it('should throw if videoMetadata is present in parts', () => { - const candidates: GoogleAIGenerateContentCandidate[] = [ - { - index: 0, - content: { - role: 'model', - parts: [ - { - inlineData: { mimeType: 'video/mp4', data: 'base64==' }, - videoMetadata: { startOffset: '0s', endOffset: '5s' } // Unsupported - } - ] - } - } - ]; - expect(() => mapGenerateContentCandidates(candidates)) - .to.throw(AIError, /Part.videoMetadata is not supported/i) - .with.property('code', AIErrorCode.UNSUPPORTED); - }); - - it('should handle candidates without citation or safety ratings', () => { - const candidates: GoogleAIGenerateContentCandidate[] = [ - { - index: 0, - content: { role: 'model', parts: [{ text: 'Simple text' }] }, - finishReason: FinishReason.STOP - } - ]; - const mapped = mapGenerateContentCandidates(candidates); - expect(mapped[0].citationMetadata).to.be.undefined; - expect(mapped[0].safetyRatings).to.be.undefined; - expect(mapped[0].content.parts[0].text).to.equal('Simple text'); - expect(loggerWarnStub).to.not.have.been.called; - }); - - it('should handle empty candidate array', () => { - const candidates: GoogleAIGenerateContentCandidate[] = []; - const mapped = mapGenerateContentCandidates(candidates); - expect(mapped).to.deep.equal([]); - expect(loggerWarnStub).to.not.have.been.called; - }); - }); - - describe('mapPromptFeedback', () => { - it('should add default safety rating properties', () => { - const feedback: PromptFeedback = { - blockReason: BlockReason.OTHER, - safetyRatings: [ - { - category: HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT, - probability: HarmProbability.HIGH, - blocked: true - // Missing severity, probabilityScore, severityScore - } as any - ] - // Missing blockReasonMessage - }; - const mapped = mapPromptFeedback(feedback); - expect(mapped.safetyRatings).to.exist; - const safetyRating = mapped.safetyRatings[0] as SafetyRating; // Type assertion - expect(safetyRating.severity).to.equal( - HarmSeverity.HARM_SEVERITY_UNSUPPORTED - ); - expect(safetyRating.probabilityScore).to.equal(0); - expect(safetyRating.severityScore).to.equal(0); - // Existing properties should be preserved - expect(safetyRating.category).to.equal( - HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT - ); - expect(safetyRating.probability).to.equal(HarmProbability.HIGH); - expect(safetyRating.blocked).to.be.true; - // Other properties - expect(mapped.blockReason).to.equal(BlockReason.OTHER); - expect(mapped.blockReasonMessage).to.be.undefined; // Not present in input - }); - }); -}); diff --git a/packages/ai/src/googleai-mappers.ts b/packages/ai/src/googleai-mappers.ts deleted file mode 100644 index 23c238c1e3b..00000000000 --- a/packages/ai/src/googleai-mappers.ts +++ /dev/null @@ -1,227 +0,0 @@ -/** - * @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 { AIError } from './errors'; -import { logger } from './logger'; -import { - CitationMetadata, - CountTokensRequest, - GenerateContentCandidate, - GenerateContentRequest, - GenerateContentResponse, - HarmSeverity, - InlineDataPart, - PromptFeedback, - SafetyRating, - AIErrorCode -} from './types'; -import { - GoogleAIGenerateContentResponse, - GoogleAIGenerateContentCandidate, - GoogleAICountTokensRequest -} from './types/googleai'; - -/** - * This SDK supports both the Vertex AI Gemini API and the Gemini Developer API (using Google AI). - * The public API prioritizes the format used by the Vertex AI Gemini API. - * We avoid having two sets of types by translating requests and responses between the two API formats. - * This translation allows developers to switch between the Vertex AI Gemini API and the Gemini Developer API - * with minimal code changes. - * - * In here are functions that map requests and responses between the two API formats. - * Requests in the Vertex AI format are mapped to the Google AI format before being sent. - * Responses from the Google AI backend are mapped back to the Vertex AI format before being returned to the user. - */ - -/** - * Maps a Vertex AI {@link GenerateContentRequest} to a format that can be sent to Google AI. - * - * @param generateContentRequest The {@link GenerateContentRequest} to map. - * @returns A {@link GenerateContentResponse} that conforms to the Google AI format. - * - * @throws If the request contains properties that are unsupported by Google AI. - * - * @internal - */ -export function mapGenerateContentRequest( - generateContentRequest: GenerateContentRequest -): GenerateContentRequest { - generateContentRequest.safetySettings?.forEach(safetySetting => { - if (safetySetting.method) { - throw new AIError( - AIErrorCode.UNSUPPORTED, - 'SafetySetting.method is not supported in the the Gemini Developer API. Please remove this property.' - ); - } - }); - - if (generateContentRequest.generationConfig?.topK) { - const roundedTopK = Math.round( - generateContentRequest.generationConfig.topK - ); - - if (roundedTopK !== generateContentRequest.generationConfig.topK) { - logger.warn( - 'topK in GenerationConfig has been rounded to the nearest integer to match the format for requests to the Gemini Developer API.' - ); - generateContentRequest.generationConfig.topK = roundedTopK; - } - } - - return generateContentRequest; -} - -/** - * Maps a {@link GenerateContentResponse} from Google AI to the format of the - * {@link GenerateContentResponse} that we get from VertexAI that is exposed in the public API. - * - * @param googleAIResponse The {@link GenerateContentResponse} from Google AI. - * @returns A {@link GenerateContentResponse} that conforms to the public API's format. - * - * @internal - */ -export function mapGenerateContentResponse( - googleAIResponse: GoogleAIGenerateContentResponse -): GenerateContentResponse { - const generateContentResponse = { - candidates: googleAIResponse.candidates - ? mapGenerateContentCandidates(googleAIResponse.candidates) - : undefined, - prompt: googleAIResponse.promptFeedback - ? mapPromptFeedback(googleAIResponse.promptFeedback) - : undefined, - usageMetadata: googleAIResponse.usageMetadata - }; - - return generateContentResponse; -} - -/** - * Maps a Vertex AI {@link CountTokensRequest} to a format that can be sent to Google AI. - * - * @param countTokensRequest The {@link CountTokensRequest} to map. - * @param model The model to count tokens with. - * @returns A {@link CountTokensRequest} that conforms to the Google AI format. - * - * @internal - */ -export function mapCountTokensRequest( - countTokensRequest: CountTokensRequest, - model: string -): GoogleAICountTokensRequest { - const mappedCountTokensRequest: GoogleAICountTokensRequest = { - generateContentRequest: { - model, - ...countTokensRequest - } - }; - - return mappedCountTokensRequest; -} - -/** - * Maps a Google AI {@link GoogleAIGenerateContentCandidate} to a format that conforms - * to the Vertex AI API format. - * - * @param candidates The {@link GoogleAIGenerateContentCandidate} to map. - * @returns A {@link GenerateContentCandidate} that conforms to the Vertex AI format. - * - * @throws If any {@link Part} in the candidates has a `videoMetadata` property. - * - * @internal - */ -export function mapGenerateContentCandidates( - candidates: GoogleAIGenerateContentCandidate[] -): GenerateContentCandidate[] { - const mappedCandidates: GenerateContentCandidate[] = []; - let mappedSafetyRatings: SafetyRating[]; - if (mappedCandidates) { - candidates.forEach(candidate => { - // Map citationSources to citations. - let citationMetadata: CitationMetadata | undefined; - if (candidate.citationMetadata) { - citationMetadata = { - citations: candidate.citationMetadata.citationSources - }; - } - - // Assign missing candidate SafetyRatings properties to their defaults if undefined. - if (candidate.safetyRatings) { - mappedSafetyRatings = candidate.safetyRatings.map(safetyRating => { - return { - ...safetyRating, - severity: - safetyRating.severity ?? HarmSeverity.HARM_SEVERITY_UNSUPPORTED, - probabilityScore: safetyRating.probabilityScore ?? 0, - severityScore: safetyRating.severityScore ?? 0 - }; - }); - } - - // videoMetadata is not supported. - // Throw early since developers may send a long video as input and only expect to pay - // for inference on a small portion of the video. - if ( - candidate.content?.parts.some( - part => (part as InlineDataPart)?.videoMetadata - ) - ) { - throw new AIError( - AIErrorCode.UNSUPPORTED, - 'Part.videoMetadata is not supported in the Gemini Developer API. Please remove this property.' - ); - } - - const mappedCandidate = { - index: candidate.index, - content: candidate.content, - finishReason: candidate.finishReason, - finishMessage: candidate.finishMessage, - safetyRatings: mappedSafetyRatings, - citationMetadata, - groundingMetadata: candidate.groundingMetadata - }; - mappedCandidates.push(mappedCandidate); - }); - } - - return mappedCandidates; -} - -export function mapPromptFeedback( - promptFeedback: PromptFeedback -): PromptFeedback { - // Assign missing SafetyRating properties to their defaults if undefined. - const mappedSafetyRatings: SafetyRating[] = []; - promptFeedback.safetyRatings.forEach(safetyRating => { - mappedSafetyRatings.push({ - category: safetyRating.category, - probability: safetyRating.probability, - severity: safetyRating.severity ?? HarmSeverity.HARM_SEVERITY_UNSUPPORTED, - probabilityScore: safetyRating.probabilityScore ?? 0, - severityScore: safetyRating.severityScore ?? 0, - blocked: safetyRating.blocked - }); - }); - - const mappedPromptFeedback: PromptFeedback = { - blockReason: promptFeedback.blockReason, - safetyRatings: mappedSafetyRatings, - blockReasonMessage: promptFeedback.blockReasonMessage - }; - return mappedPromptFeedback; -} diff --git a/packages/ai/src/helpers.test.ts b/packages/ai/src/helpers.test.ts deleted file mode 100644 index 8f5f164d6b8..00000000000 --- a/packages/ai/src/helpers.test.ts +++ /dev/null @@ -1,121 +0,0 @@ -/** - * @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 { expect } from 'chai'; -import { AI_TYPE, DEFAULT_LOCATION } from './constants'; -import { encodeInstanceIdentifier, decodeInstanceIdentifier } from './helpers'; -import { AIError } from './errors'; -import { AIErrorCode } from './types'; -import { GoogleAIBackend, VertexAIBackend } from './backend'; - -describe('Identifier Encoding/Decoding', () => { - describe('encodeInstanceIdentifier', () => { - it('should encode Vertex AI identifier with a specific location', () => { - const backend = new VertexAIBackend('us-east1'); - const expected = `${AI_TYPE}/vertexai/us-east1`; - expect(encodeInstanceIdentifier(backend)).to.equal(expected); - }); - - it('should encode Vertex AI identifier using default location if location is empty string', () => { - const backend = new VertexAIBackend(''); - const expected = `${AI_TYPE}/vertexai/${DEFAULT_LOCATION}`; - expect(encodeInstanceIdentifier(backend)).to.equal(expected); - }); - - it('should encode Google AI identifier', () => { - const backend = new GoogleAIBackend(); - const expected = `${AI_TYPE}/googleai`; - expect(encodeInstanceIdentifier(backend)).to.equal(expected); - }); - - it('should throw AIError for unknown backend type', () => { - expect(() => encodeInstanceIdentifier({} as any)).to.throw(AIError); - - try { - encodeInstanceIdentifier({} as any); - expect.fail('Expected encodeInstanceIdentifier to throw'); - } catch (e) { - expect(e).to.be.instanceOf(AIError); - const error = e as AIError; - expect(error.message).to.contain('Invalid backend'); - expect(error.code).to.equal(AIErrorCode.ERROR); - } - }); - }); - - describe('decodeInstanceIdentifier', () => { - it('should decode Vertex AI identifier with location', () => { - const encoded = `${AI_TYPE}/vertexai/europe-west1`; - const backend = new VertexAIBackend('europe-west1'); - expect(decodeInstanceIdentifier(encoded)).to.deep.equal(backend); - }); - - it('should throw an error if Vertex AI identifier string without explicit location part', () => { - const encoded = `${AI_TYPE}/vertexai`; - expect(() => decodeInstanceIdentifier(encoded)).to.throw(AIError); - - try { - decodeInstanceIdentifier(encoded); - expect.fail('Expected encodeInstanceIdentifier to throw'); - } catch (e) { - expect(e).to.be.instanceOf(AIError); - const error = e as AIError; - expect(error.message).to.contain( - `Invalid instance identifier, unknown location` - ); - expect(error.code).to.equal(AIErrorCode.ERROR); - } - }); - - it('should decode Google AI identifier', () => { - const encoded = `${AI_TYPE}/googleai`; - const backend = new GoogleAIBackend(); - expect(decodeInstanceIdentifier(encoded)).to.deep.equal(backend); - }); - - it('should throw AIError for invalid backend string', () => { - const encoded = `${AI_TYPE}/someotherbackend/location`; - expect(() => decodeInstanceIdentifier(encoded)).to.throw( - AIError, - `Invalid instance identifier string: '${encoded}'` - ); - try { - decodeInstanceIdentifier(encoded); - expect.fail('Expected decodeInstanceIdentifier to throw'); - } catch (e) { - expect(e).to.be.instanceOf(AIError); - expect((e as AIError).code).to.equal(AIErrorCode.ERROR); - } - }); - - it('should throw AIError for malformed identifier string (too few parts)', () => { - const encoded = AI_TYPE; - expect(() => decodeInstanceIdentifier(encoded)).to.throw( - AIError, - `Invalid instance identifier string: '${encoded}'` - ); - }); - - it('should throw AIError for malformed identifier string (incorrect prefix)', () => { - const encoded = 'firebase/AI/location'; - // This will also hit the default case in the switch statement - expect(() => decodeInstanceIdentifier(encoded)).to.throw( - AIError, - `Invalid instance identifier, unknown prefix 'firebase'` - ); - }); - }); -}); diff --git a/packages/ai/src/helpers.ts b/packages/ai/src/helpers.ts deleted file mode 100644 index 709bf4369c5..00000000000 --- a/packages/ai/src/helpers.ts +++ /dev/null @@ -1,74 +0,0 @@ -/** - * @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 { AI_TYPE } from './constants'; -import { AIError } from './errors'; -import { AIErrorCode } from './types'; -import { Backend, GoogleAIBackend, VertexAIBackend } from './backend'; - -/** - * Encodes a {@link Backend} into a string that will be used to uniquely identify {@link AI} - * instances by backend type. - * - * @internal - */ -export function encodeInstanceIdentifier(backend: Backend): string { - if (backend instanceof GoogleAIBackend) { - return `${AI_TYPE}/googleai`; - } else if (backend instanceof VertexAIBackend) { - return `${AI_TYPE}/vertexai/${backend.location}`; - } else { - throw new AIError( - AIErrorCode.ERROR, - `Invalid backend: ${JSON.stringify(backend.backendType)}` - ); - } -} - -/** - * Decodes an instance identifier string into a {@link Backend}. - * - * @internal - */ -export function decodeInstanceIdentifier(instanceIdentifier: string): Backend { - const identifierParts = instanceIdentifier.split('/'); - if (identifierParts[0] !== AI_TYPE) { - throw new AIError( - AIErrorCode.ERROR, - `Invalid instance identifier, unknown prefix '${identifierParts[0]}'` - ); - } - const backendType = identifierParts[1]; - switch (backendType) { - case 'vertexai': - const location: string | undefined = identifierParts[2]; - if (!location) { - throw new AIError( - AIErrorCode.ERROR, - `Invalid instance identifier, unknown location '${instanceIdentifier}'` - ); - } - return new VertexAIBackend(location); - case 'googleai': - return new GoogleAIBackend(); - default: - throw new AIError( - AIErrorCode.ERROR, - `Invalid instance identifier string: '${instanceIdentifier}'` - ); - } -} diff --git a/packages/ai/src/public-types.ts b/packages/ai/src/public-types.ts deleted file mode 100644 index 7a5b7dc3997..00000000000 --- a/packages/ai/src/public-types.ts +++ /dev/null @@ -1,115 +0,0 @@ -/** - * @license - * Copyright 2024 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 { FirebaseApp } from '@firebase/app'; -import { Backend } from './backend'; - -export * from './types'; - -/** - * @deprecated Use the new {@link AI | AI} instead. The Vertex AI in Firebase SDK has been - * replaced with the Firebase AI SDK to accommodate the evolving set of supported features and - * services. For migration details, see the {@link https://firebase.google.com/docs/vertex-ai/migrate-to-latest-sdk | migration guide}. - * - * An instance of the Firebase AI SDK. - * - * @public - */ -export type VertexAI = AI; - -/** - * Options when initializing the Firebase AI SDK. - * - * @public - */ -export interface VertexAIOptions { - location?: string; -} - -/** - * An instance of the Firebase AI SDK. - * - * Do not create this instance directly. Instead, use {@link getAI | getAI()}. - * - * @public - */ -export interface AI { - /** - * The {@link @firebase/app#FirebaseApp} this {@link AI} instance is associated with. - */ - app: FirebaseApp; - /** - * A {@link Backend} instance that specifies the configuration for the target backend, - * either the Gemini Developer API (using {@link GoogleAIBackend}) or the - * Vertex AI Gemini API (using {@link VertexAIBackend}). - */ - backend: Backend; - /** - * @deprecated use `AI.backend.location` instead. - * - * The location configured for this AI service instance, relevant for Vertex AI backends. - */ - location: string; -} - -/** - * An enum-like object containing constants that represent the supported backends - * for the Firebase AI SDK. - * This determines which backend service (Vertex AI Gemini API or Gemini Developer API) - * the SDK will communicate with. - * - * These values are assigned to the `backendType` property within the specific backend - * configuration objects ({@link GoogleAIBackend} or {@link VertexAIBackend}) to identify - * which service to target. - * - * @public - */ -export const BackendType = { - /** - * Identifies the backend service for the Vertex AI Gemini API provided through Google Cloud. - * Use this constant when creating a {@link VertexAIBackend} configuration. - */ - VERTEX_AI: 'VERTEX_AI', - - /** - * Identifies the backend service for the Gemini Developer API ({@link https://ai.google/ | Google AI}). - * Use this constant when creating a {@link GoogleAIBackend} configuration. - */ - GOOGLE_AI: 'GOOGLE_AI' -} as const; // Using 'as const' makes the string values literal types - -/** - * Type alias representing valid backend types. - * It can be either `'VERTEX_AI'` or `'GOOGLE_AI'`. - * - * @public - */ -export type BackendType = (typeof BackendType)[keyof typeof BackendType]; - -/** - * Options for initializing the AI service using {@link getAI | getAI()}. - * This allows specifying which backend to use (Vertex AI Gemini API or Gemini Developer API) - * and configuring its specific options (like location for Vertex AI). - * - * @public - */ -export interface AIOptions { - /** - * The backend configuration to use for the AI service instance. - */ - backend: Backend; -} diff --git a/packages/ai/src/types/googleai.ts b/packages/ai/src/types/googleai.ts deleted file mode 100644 index 38c27b3fe8b..00000000000 --- a/packages/ai/src/types/googleai.ts +++ /dev/null @@ -1,70 +0,0 @@ -/** - * @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 { - Tool, - GenerationConfig, - Citation, - FinishReason, - GroundingMetadata, - PromptFeedback, - SafetyRating, - UsageMetadata -} from '../public-types'; -import { Content, Part } from './content'; - -/** - * @internal - */ -export interface GoogleAICountTokensRequest { - generateContentRequest: { - model: string; // 'models/model-name' - contents: Content[]; - systemInstruction?: string | Part | Content; - tools?: Tool[]; - generationConfig?: GenerationConfig; - }; -} - -/** - * @internal - */ -export interface GoogleAIGenerateContentResponse { - candidates?: GoogleAIGenerateContentCandidate[]; - promptFeedback?: PromptFeedback; - usageMetadata?: UsageMetadata; -} - -/** - * @internal - */ -export interface GoogleAIGenerateContentCandidate { - index: number; - content: Content; - finishReason?: FinishReason; - finishMessage?: string; - safetyRatings?: SafetyRating[]; - citationMetadata?: GoogleAICitationMetadata; - groundingMetadata?: GroundingMetadata; -} - -/** - * @internal - */ -export interface GoogleAICitationMetadata { - citationSources: Citation[]; // Maps to `citations` -} diff --git a/packages/app/src/constants.ts b/packages/app/src/constants.ts index 21ded00529a..8ef4eada39c 100644 --- a/packages/app/src/constants.ts +++ b/packages/app/src/constants.ts @@ -39,7 +39,7 @@ import { name as remoteConfigCompatName } from '../../../packages/remote-config- import { name as storageName } from '../../../packages/storage/package.json'; import { name as storageCompatName } from '../../../packages/storage-compat/package.json'; import { name as firestoreName } from '../../../packages/firestore/package.json'; -import { name as aiName } from '../../../packages/ai/package.json'; +import { name as vertexName } from '../../../packages/vertexai/package.json'; import { name as firestoreCompatName } from '../../../packages/firestore-compat/package.json'; import { name as packageName } from '../../../packages/firebase/package.json'; @@ -76,7 +76,7 @@ export const PLATFORM_LOG_STRING = { [storageCompatName]: 'fire-gcs-compat', [firestoreName]: 'fire-fst', [firestoreCompatName]: 'fire-fst-compat', - [aiName]: 'fire-vertex', + [vertexName]: 'fire-vertex', 'fire-js': 'fire-js', // Platform identifier for JS SDK. [packageName]: 'fire-js-all' } as const; diff --git a/packages/firebase/ai/package.json b/packages/firebase/ai/package.json deleted file mode 100644 index 932f0f8d2a1..00000000000 --- a/packages/firebase/ai/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "firebase/ai", - "main": "dist/index.cjs.js", - "browser": "dist/esm/index.esm.js", - "module": "dist/esm/index.esm.js", - "typings": "dist/ai/index.d.ts" -} diff --git a/packages/firebase/package.json b/packages/firebase/package.json index caaba0fd528..f4fe3bb2d50 100644 --- a/packages/firebase/package.json +++ b/packages/firebase/package.json @@ -227,29 +227,17 @@ }, "default": "./storage/dist/esm/index.esm.js" }, - "./ai": { - "types": "./ai/dist/ai/index.d.ts", - "node": { - "require": "./ai/dist/index.cjs.js", - "import": "./ai/dist/index.mjs" - }, - "browser": { - "require": "./ai/dist/index.cjs.js", - "import": "./ai/dist/esm/index.esm.js" - }, - "default": "./ai/dist/esm/index.esm.js" - }, "./vertexai": { - "types": "./ai/dist/ai/index.d.ts", + "types": "./vertexai/dist/vertexai/index.d.ts", "node": { - "require": "./ai/dist/index.cjs.js", - "import": "./ai/dist/index.mjs" + "require": "./vertexai/dist/index.cjs.js", + "import": "./vertexai/dist/index.mjs" }, "browser": { - "require": "./ai/dist/index.cjs.js", - "import": "./ai/dist/esm/index.esm.js" + "require": "./vertexai/dist/index.cjs.js", + "import": "./vertexai/dist/esm/index.esm.js" }, - "default": "./ai/dist/esm/index.esm.js" + "default": "./vertexai/dist/esm/index.esm.js" }, "./compat/analytics": { "types": "./compat/analytics/dist/compat/analytics/index.d.ts", @@ -411,7 +399,6 @@ "trusted-type-check": "tsec -p tsconfig.json --noEmit" }, "dependencies": { - "@firebase/ai": "1.2.2", "@firebase/app": "0.12.1", "@firebase/app-compat": "0.3.1", "@firebase/app-types": "0.9.3", @@ -438,7 +425,8 @@ "@firebase/analytics-compat": "0.2.19", "@firebase/app-check": "0.9.1", "@firebase/app-check-compat": "0.3.22", - "@firebase/util": "1.11.1" + "@firebase/util": "1.11.1", + "@firebase/vertexai": "1.2.2" }, "devDependencies": { "rollup": "2.79.2", @@ -455,7 +443,6 @@ "rollup-plugin-license": "3.5.3" }, "components": [ - "ai", "analytics", "app", "app-check", diff --git a/packages/firebase/vertexai/index.ts b/packages/firebase/vertexai/index.ts index 530f99162ed..2645fd3004f 100644 --- a/packages/firebase/vertexai/index.ts +++ b/packages/firebase/vertexai/index.ts @@ -15,4 +15,4 @@ * limitations under the License. */ -export * from '@firebase/ai'; +export * from '@firebase/vertexai'; diff --git a/packages/firebase/vertexai/package.json b/packages/firebase/vertexai/package.json index 3da541949dc..20e04a3bbb5 100644 --- a/packages/firebase/vertexai/package.json +++ b/packages/firebase/vertexai/package.json @@ -3,5 +3,5 @@ "main": "dist/index.cjs.js", "browser": "dist/esm/index.esm.js", "module": "dist/esm/index.esm.js", - "typings": "dist/ai/index.d.ts" -} + "typings": "dist/vertexai/index.d.ts" +} \ No newline at end of file diff --git a/packages/ai/.eslintrc.js b/packages/vertexai/.eslintrc.js similarity index 100% rename from packages/ai/.eslintrc.js rename to packages/vertexai/.eslintrc.js diff --git a/packages/ai/CHANGELOG.md b/packages/vertexai/CHANGELOG.md similarity index 99% rename from packages/ai/CHANGELOG.md rename to packages/vertexai/CHANGELOG.md index a49b5dacbd4..8fa9e9d4b4a 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/vertexai/CHANGELOG.md @@ -1,4 +1,4 @@ -# @firebase/ai +# @firebase/vertexai ## 1.2.2 diff --git a/packages/ai/README.md b/packages/vertexai/README.md similarity index 65% rename from packages/ai/README.md rename to packages/vertexai/README.md index 94c95e50b25..b559a1e739e 100644 --- a/packages/ai/README.md +++ b/packages/vertexai/README.md @@ -1,5 +1,5 @@ -# @firebase/ai +# @firebase/vertexai -This is the Firebase AI component of the Firebase JS SDK. +This is the Firebase Vertex AI component of the Firebase JS SDK. **This package is not intended for direct usage, and should only be used via the officially supported [firebase](https://www.npmjs.com/package/firebase) package.** diff --git a/packages/ai/api-extractor.json b/packages/vertexai/api-extractor.json similarity index 100% rename from packages/ai/api-extractor.json rename to packages/vertexai/api-extractor.json diff --git a/packages/ai/karma.conf.js b/packages/vertexai/karma.conf.js similarity index 100% rename from packages/ai/karma.conf.js rename to packages/vertexai/karma.conf.js diff --git a/packages/ai/package.json b/packages/vertexai/package.json similarity index 89% rename from packages/ai/package.json rename to packages/vertexai/package.json index d159793b206..0c6b24fc495 100644 --- a/packages/ai/package.json +++ b/packages/vertexai/package.json @@ -1,7 +1,7 @@ { - "name": "@firebase/ai", + "name": "@firebase/vertexai", "version": "1.2.2", - "description": "The Firebase AI SDK", + "description": "A Firebase SDK for VertexAI", "author": "Firebase (https://firebase.google.com/)", "engines": { "node": ">=18.0.0" @@ -11,7 +11,7 @@ "module": "dist/esm/index.esm2017.js", "exports": { ".": { - "types": "./dist/ai-public.d.ts", + "types": "./dist/vertexai-public.d.ts", "node": { "require": "./dist/index.node.cjs.js", "import": "./dist/index.node.mjs" @@ -31,7 +31,7 @@ "lint": "eslint -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "lint:fix": "eslint --fix -c .eslintrc.js '**/*.ts' --ignore-path '../../.gitignore'", "build": "rollup -c && yarn api-report", - "build:deps": "lerna run --scope @firebase/ai --include-dependencies build", + "build:deps": "lerna run --scope @firebase/vertexai --include-dependencies build", "dev": "rollup -c -w", "update-responses": "../../scripts/update_vertexai_responses.sh", "testsetup": "yarn update-responses && yarn ts-node ./test-utils/convert-mocks.ts", @@ -40,7 +40,7 @@ "test:skip-clone": "karma start", "test:browser": "yarn testsetup && karma start", "api-report": "api-extractor run --local --verbose", - "typings:public": "node ../../scripts/build/use_typings.js ./dist/ai-public.d.ts", + "typings:public": "node ../../scripts/build/use_typings.js ./dist/vertexai-public.d.ts", "trusted-type-check": "tsec -p tsconfig.json --noEmit" }, "peerDependencies": { @@ -64,7 +64,7 @@ "typescript": "5.5.4" }, "repository": { - "directory": "packages/ai", + "directory": "packages/vertexai", "type": "git", "url": "git+https://github.com/firebase/firebase-js-sdk.git" }, diff --git a/packages/ai/rollup.config.js b/packages/vertexai/rollup.config.js similarity index 100% rename from packages/ai/rollup.config.js rename to packages/vertexai/rollup.config.js diff --git a/packages/vertexai/src/api.test.ts b/packages/vertexai/src/api.test.ts new file mode 100644 index 00000000000..4a0b978d858 --- /dev/null +++ b/packages/vertexai/src/api.test.ts @@ -0,0 +1,170 @@ +/** + * @license + * Copyright 2024 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 { ImagenModelParams, ModelParams, VertexAIErrorCode } from './types'; +import { VertexAIError } from './errors'; +import { ImagenModel, getGenerativeModel, getImagenModel } from './api'; +import { expect } from 'chai'; +import { VertexAI } from './public-types'; +import { GenerativeModel } from './models/generative-model'; + +const fakeVertexAI: VertexAI = { + app: { + name: 'DEFAULT', + automaticDataCollectionEnabled: true, + options: { + apiKey: 'key', + projectId: 'my-project', + appId: 'my-appid' + } + }, + location: 'us-central1' +}; + +describe('Top level API', () => { + it('getGenerativeModel throws if no model is provided', () => { + try { + getGenerativeModel(fakeVertexAI, {} as ModelParams); + } catch (e) { + expect((e as VertexAIError).code).includes(VertexAIErrorCode.NO_MODEL); + expect((e as VertexAIError).message).includes( + `VertexAI: Must provide a model name. Example: ` + + `getGenerativeModel({ model: 'my-model-name' }) (vertexAI/${VertexAIErrorCode.NO_MODEL})` + ); + } + }); + it('getGenerativeModel throws if no apiKey is provided', () => { + const fakeVertexNoApiKey = { + ...fakeVertexAI, + app: { options: { projectId: 'my-project', appId: 'my-appid' } } + } as VertexAI; + try { + getGenerativeModel(fakeVertexNoApiKey, { model: 'my-model' }); + } catch (e) { + expect((e as VertexAIError).code).includes(VertexAIErrorCode.NO_API_KEY); + expect((e as VertexAIError).message).equals( + `VertexAI: The "apiKey" field is empty in the local ` + + `Firebase config. Firebase VertexAI requires this field to` + + ` contain a valid API key. (vertexAI/${VertexAIErrorCode.NO_API_KEY})` + ); + } + }); + it('getGenerativeModel throws if no projectId is provided', () => { + const fakeVertexNoProject = { + ...fakeVertexAI, + app: { options: { apiKey: 'my-key', appId: 'my-appid' } } + } as VertexAI; + try { + getGenerativeModel(fakeVertexNoProject, { model: 'my-model' }); + } catch (e) { + expect((e as VertexAIError).code).includes( + VertexAIErrorCode.NO_PROJECT_ID + ); + expect((e as VertexAIError).message).equals( + `VertexAI: The "projectId" field is empty in the local` + + ` Firebase config. Firebase VertexAI requires this field ` + + `to contain a valid project ID. (vertexAI/${VertexAIErrorCode.NO_PROJECT_ID})` + ); + } + }); + it('getGenerativeModel throws if no appId is provided', () => { + const fakeVertexNoProject = { + ...fakeVertexAI, + app: { options: { apiKey: 'my-key', projectId: 'my-projectid' } } + } as VertexAI; + try { + getGenerativeModel(fakeVertexNoProject, { model: 'my-model' }); + } catch (e) { + expect((e as VertexAIError).code).includes(VertexAIErrorCode.NO_APP_ID); + expect((e as VertexAIError).message).equals( + `VertexAI: The "appId" field is empty in the local` + + ` Firebase config. Firebase VertexAI requires this field ` + + `to contain a valid app ID. (vertexAI/${VertexAIErrorCode.NO_APP_ID})` + ); + } + }); + it('getGenerativeModel gets a GenerativeModel', () => { + const genModel = getGenerativeModel(fakeVertexAI, { model: 'my-model' }); + expect(genModel).to.be.an.instanceOf(GenerativeModel); + expect(genModel.model).to.equal('publishers/google/models/my-model'); + }); + it('getImagenModel throws if no model is provided', () => { + try { + getImagenModel(fakeVertexAI, {} as ImagenModelParams); + } catch (e) { + expect((e as VertexAIError).code).includes(VertexAIErrorCode.NO_MODEL); + expect((e as VertexAIError).message).includes( + `VertexAI: Must provide a model name. Example: ` + + `getImagenModel({ model: 'my-model-name' }) (vertexAI/${VertexAIErrorCode.NO_MODEL})` + ); + } + }); + it('getImagenModel throws if no apiKey is provided', () => { + const fakeVertexNoApiKey = { + ...fakeVertexAI, + app: { options: { projectId: 'my-project', appId: 'my-appid' } } + } as VertexAI; + try { + getImagenModel(fakeVertexNoApiKey, { model: 'my-model' }); + } catch (e) { + expect((e as VertexAIError).code).includes(VertexAIErrorCode.NO_API_KEY); + expect((e as VertexAIError).message).equals( + `VertexAI: The "apiKey" field is empty in the local ` + + `Firebase config. Firebase VertexAI requires this field to` + + ` contain a valid API key. (vertexAI/${VertexAIErrorCode.NO_API_KEY})` + ); + } + }); + it('getImagenModel throws if no projectId is provided', () => { + const fakeVertexNoProject = { + ...fakeVertexAI, + app: { options: { apiKey: 'my-key', appId: 'my-appid' } } + } as VertexAI; + try { + getImagenModel(fakeVertexNoProject, { model: 'my-model' }); + } catch (e) { + expect((e as VertexAIError).code).includes( + VertexAIErrorCode.NO_PROJECT_ID + ); + expect((e as VertexAIError).message).equals( + `VertexAI: The "projectId" field is empty in the local` + + ` Firebase config. Firebase VertexAI requires this field ` + + `to contain a valid project ID. (vertexAI/${VertexAIErrorCode.NO_PROJECT_ID})` + ); + } + }); + it('getImagenModel throws if no appId is provided', () => { + const fakeVertexNoProject = { + ...fakeVertexAI, + app: { options: { apiKey: 'my-key', projectId: 'my-project' } } + } as VertexAI; + try { + getImagenModel(fakeVertexNoProject, { model: 'my-model' }); + } catch (e) { + expect((e as VertexAIError).code).includes(VertexAIErrorCode.NO_APP_ID); + expect((e as VertexAIError).message).equals( + `VertexAI: The "appId" field is empty in the local` + + ` Firebase config. Firebase VertexAI requires this field ` + + `to contain a valid app ID. (vertexAI/${VertexAIErrorCode.NO_APP_ID})` + ); + } + }); + it('getImagenModel gets an ImagenModel', () => { + const genModel = getImagenModel(fakeVertexAI, { model: 'my-model' }); + expect(genModel).to.be.an.instanceOf(ImagenModel); + expect(genModel.model).to.equal('publishers/google/models/my-model'); + }); +}); diff --git a/packages/vertexai/src/api.ts b/packages/vertexai/src/api.ts new file mode 100644 index 00000000000..7843a5bdeee --- /dev/null +++ b/packages/vertexai/src/api.ts @@ -0,0 +1,111 @@ +/** + * @license + * Copyright 2024 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 { FirebaseApp, getApp, _getProvider } from '@firebase/app'; +import { Provider } from '@firebase/component'; +import { getModularInstance } from '@firebase/util'; +import { DEFAULT_LOCATION, VERTEX_TYPE } from './constants'; +import { VertexAIService } from './service'; +import { VertexAI, VertexAIOptions } from './public-types'; +import { + ImagenModelParams, + ModelParams, + RequestOptions, + VertexAIErrorCode +} from './types'; +import { VertexAIError } from './errors'; +import { VertexAIModel, GenerativeModel, ImagenModel } from './models'; + +export { ChatSession } from './methods/chat-session'; +export * from './requests/schema-builder'; +export { ImagenImageFormat } from './requests/imagen-image-format'; +export { VertexAIModel, GenerativeModel, ImagenModel }; +export { VertexAIError }; + +declare module '@firebase/component' { + interface NameServiceMapping { + [VERTEX_TYPE]: VertexAIService; + } +} + +/** + * Returns a {@link VertexAI} instance for the given app. + * + * @public + * + * @param app - The {@link @firebase/app#FirebaseApp} to use. + */ +export function getVertexAI( + app: FirebaseApp = getApp(), + options?: VertexAIOptions +): VertexAI { + app = getModularInstance(app); + // Dependencies + const vertexProvider: Provider<'vertexAI'> = _getProvider(app, VERTEX_TYPE); + + return vertexProvider.getImmediate({ + identifier: options?.location || DEFAULT_LOCATION + }); +} + +/** + * Returns a {@link GenerativeModel} class with methods for inference + * and other functionality. + * + * @public + */ +export function getGenerativeModel( + vertexAI: VertexAI, + modelParams: ModelParams, + requestOptions?: RequestOptions +): GenerativeModel { + if (!modelParams.model) { + throw new VertexAIError( + VertexAIErrorCode.NO_MODEL, + `Must provide a model name. Example: getGenerativeModel({ model: 'my-model-name' })` + ); + } + return new GenerativeModel(vertexAI, modelParams, requestOptions); +} + +/** + * Returns an {@link ImagenModel} class with methods for using Imagen. + * + * Only Imagen 3 models (named `imagen-3.0-*`) are supported. + * + * @param vertexAI - An instance of the Vertex AI in Firebase SDK. + * @param modelParams - Parameters to use when making Imagen requests. + * @param requestOptions - Additional options to use when making requests. + * + * @throws If the `apiKey` or `projectId` fields are missing in your + * Firebase config. + * + * @beta + */ +export function getImagenModel( + vertexAI: VertexAI, + modelParams: ImagenModelParams, + requestOptions?: RequestOptions +): ImagenModel { + if (!modelParams.model) { + throw new VertexAIError( + VertexAIErrorCode.NO_MODEL, + `Must provide a model name. Example: getImagenModel({ model: 'my-model-name' })` + ); + } + return new ImagenModel(vertexAI, modelParams, requestOptions); +} diff --git a/packages/ai/src/constants.ts b/packages/vertexai/src/constants.ts similarity index 96% rename from packages/ai/src/constants.ts rename to packages/vertexai/src/constants.ts index cb54567735a..357e6c4e77c 100644 --- a/packages/ai/src/constants.ts +++ b/packages/vertexai/src/constants.ts @@ -17,7 +17,7 @@ import { version } from '../package.json'; -export const AI_TYPE = 'AI'; +export const VERTEX_TYPE = 'vertexAI'; export const DEFAULT_LOCATION = 'us-central1'; diff --git a/packages/ai/src/errors.ts b/packages/vertexai/src/errors.ts similarity index 74% rename from packages/ai/src/errors.ts rename to packages/vertexai/src/errors.ts index 2e9787d0bf2..ad3f9b72f5a 100644 --- a/packages/ai/src/errors.ts +++ b/packages/vertexai/src/errors.ts @@ -16,31 +16,32 @@ */ import { FirebaseError } from '@firebase/util'; -import { AIErrorCode, CustomErrorData } from './types'; -import { AI_TYPE } from './constants'; +import { VertexAIErrorCode, CustomErrorData } from './types'; +import { VERTEX_TYPE } from './constants'; /** - * Error class for the Firebase AI SDK. + * Error class for the Vertex AI in Firebase SDK. * * @public */ -export class AIError extends FirebaseError { +export class VertexAIError extends FirebaseError { /** - * Constructs a new instance of the `AIError` class. + * Constructs a new instance of the `VertexAIError` class. * - * @param code - The error code from {@link AIErrorCode}. + * @param code - The error code from {@link VertexAIErrorCode}. * @param message - A human-readable message describing the error. * @param customErrorData - Optional error data. */ constructor( - readonly code: AIErrorCode, + readonly code: VertexAIErrorCode, message: string, readonly customErrorData?: CustomErrorData ) { // Match error format used by FirebaseError from ErrorFactory - const service = AI_TYPE; + const service = VERTEX_TYPE; + const serviceName = 'VertexAI'; const fullCode = `${service}/${code}`; - const fullMessage = `${service}: ${message} (${fullCode})`; + const fullMessage = `${serviceName}: ${message} (${fullCode})`; super(code, fullMessage); // FirebaseError initializes a stack trace, but it assumes the error is created from the error @@ -50,14 +51,14 @@ export class AIError extends FirebaseError { if (Error.captureStackTrace) { // Allows us to initialize the stack trace without including the constructor itself at the // top level of the stack trace. - Error.captureStackTrace(this, AIError); + Error.captureStackTrace(this, VertexAIError); } - // Allows instanceof AIError in ES5/ES6 + // Allows instanceof VertexAIError in ES5/ES6 // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work // TODO(dlarocque): Replace this with `new.target`: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#support-for-newtarget // which we can now use since we no longer target ES5. - Object.setPrototypeOf(this, AIError.prototype); + Object.setPrototypeOf(this, VertexAIError.prototype); // Since Error is an interface, we don't inherit toString and so we define it ourselves. this.toString = () => fullMessage; diff --git a/packages/ai/src/index.node.ts b/packages/vertexai/src/index.node.ts similarity index 68% rename from packages/ai/src/index.node.ts rename to packages/vertexai/src/index.node.ts index 1908e65b1cd..6a18788141a 100644 --- a/packages/ai/src/index.node.ts +++ b/packages/vertexai/src/index.node.ts @@ -1,5 +1,5 @@ /** - * The Firebase AI Web SDK. + * The Vertex AI in Firebase Web SDK. * * @packageDocumentation */ @@ -22,33 +22,21 @@ */ import { registerVersion, _registerComponent } from '@firebase/app'; -import { AIService } from './service'; -import { AI_TYPE } from './constants'; +import { VertexAIService } from './service'; +import { VERTEX_TYPE } from './constants'; import { Component, ComponentType } from '@firebase/component'; import { name, version } from '../package.json'; -import { decodeInstanceIdentifier } from './helpers'; -import { AIError } from './errors'; -import { AIErrorCode } from './public-types'; -function registerAI(): void { +function registerVertex(): void { _registerComponent( new Component( - AI_TYPE, - (container, { instanceIdentifier }) => { - if (!instanceIdentifier) { - throw new AIError( - AIErrorCode.ERROR, - 'AIService instance identifier is undefined.' - ); - } - - const backend = decodeInstanceIdentifier(instanceIdentifier); - + VERTEX_TYPE, + (container, { instanceIdentifier: location }) => { // getImmediate for FirebaseApp will always succeed const app = container.getProvider('app').getImmediate(); const auth = container.getProvider('auth-internal'); const appCheckProvider = container.getProvider('app-check-internal'); - return new AIService(app, backend, auth, appCheckProvider); + return new VertexAIService(app, auth, appCheckProvider, { location }); }, ComponentType.PUBLIC ).setMultipleInstances(true) @@ -59,7 +47,7 @@ function registerAI(): void { registerVersion(name, version, '__BUILD_TARGET__'); } -registerAI(); +registerVertex(); export * from './api'; export * from './public-types'; diff --git a/packages/ai/src/index.ts b/packages/vertexai/src/index.ts similarity index 68% rename from packages/ai/src/index.ts rename to packages/vertexai/src/index.ts index 8451d68bbf0..5d646e8d9d0 100644 --- a/packages/ai/src/index.ts +++ b/packages/vertexai/src/index.ts @@ -1,12 +1,12 @@ /** - * The Firebase AI Web SDK. + * The Vertex AI in Firebase Web SDK. * * @packageDocumentation */ /** * @license - * Copyright 2025 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,13 +22,10 @@ */ import { registerVersion, _registerComponent } from '@firebase/app'; -import { AIService } from './service'; -import { AI_TYPE } from './constants'; +import { VertexAIService } from './service'; +import { VERTEX_TYPE } from './constants'; import { Component, ComponentType } from '@firebase/component'; import { name, version } from '../package.json'; -import { decodeInstanceIdentifier } from './helpers'; -import { AIError } from './api'; -import { AIErrorCode } from './types'; declare global { interface Window { @@ -36,25 +33,16 @@ declare global { } } -function registerAI(): void { +function registerVertex(): void { _registerComponent( new Component( - AI_TYPE, - (container, { instanceIdentifier }) => { - if (!instanceIdentifier) { - throw new AIError( - AIErrorCode.ERROR, - 'AIService instance identifier is undefined.' - ); - } - - const backend = decodeInstanceIdentifier(instanceIdentifier); - + VERTEX_TYPE, + (container, { instanceIdentifier: location }) => { // getImmediate for FirebaseApp will always succeed const app = container.getProvider('app').getImmediate(); const auth = container.getProvider('auth-internal'); const appCheckProvider = container.getProvider('app-check-internal'); - return new AIService(app, backend, auth, appCheckProvider); + return new VertexAIService(app, auth, appCheckProvider, { location }); }, ComponentType.PUBLIC ).setMultipleInstances(true) @@ -65,7 +53,7 @@ function registerAI(): void { registerVersion(name, version, '__BUILD_TARGET__'); } -registerAI(); +registerVertex(); export * from './api'; export * from './public-types'; diff --git a/packages/ai/src/logger.ts b/packages/vertexai/src/logger.ts similarity index 100% rename from packages/ai/src/logger.ts rename to packages/vertexai/src/logger.ts diff --git a/packages/ai/src/methods/chat-session-helpers.test.ts b/packages/vertexai/src/methods/chat-session-helpers.test.ts similarity index 100% rename from packages/ai/src/methods/chat-session-helpers.test.ts rename to packages/vertexai/src/methods/chat-session-helpers.test.ts diff --git a/packages/ai/src/methods/chat-session-helpers.ts b/packages/vertexai/src/methods/chat-session-helpers.ts similarity index 83% rename from packages/ai/src/methods/chat-session-helpers.ts rename to packages/vertexai/src/methods/chat-session-helpers.ts index 1bb0e2798f2..2106a40b90b 100644 --- a/packages/ai/src/methods/chat-session-helpers.ts +++ b/packages/vertexai/src/methods/chat-session-helpers.ts @@ -15,8 +15,14 @@ * limitations under the License. */ -import { Content, POSSIBLE_ROLES, Part, Role, AIErrorCode } from '../types'; -import { AIError } from '../errors'; +import { + Content, + POSSIBLE_ROLES, + Part, + Role, + VertexAIErrorCode +} from '../types'; +import { VertexAIError } from '../errors'; // https://ai.google.dev/api/rest/v1beta/Content#part @@ -48,14 +54,14 @@ export function validateChatHistory(history: Content[]): void { for (const currContent of history) { const { role, parts } = currContent; if (!prevContent && role !== 'user') { - throw new AIError( - AIErrorCode.INVALID_CONTENT, + throw new VertexAIError( + VertexAIErrorCode.INVALID_CONTENT, `First Content should be with role 'user', got ${role}` ); } if (!POSSIBLE_ROLES.includes(role)) { - throw new AIError( - AIErrorCode.INVALID_CONTENT, + throw new VertexAIError( + VertexAIErrorCode.INVALID_CONTENT, `Each item should include role field. Got ${role} but valid roles are: ${JSON.stringify( POSSIBLE_ROLES )}` @@ -63,15 +69,15 @@ export function validateChatHistory(history: Content[]): void { } if (!Array.isArray(parts)) { - throw new AIError( - AIErrorCode.INVALID_CONTENT, + throw new VertexAIError( + VertexAIErrorCode.INVALID_CONTENT, `Content should have 'parts' but property with an array of Parts` ); } if (parts.length === 0) { - throw new AIError( - AIErrorCode.INVALID_CONTENT, + throw new VertexAIError( + VertexAIErrorCode.INVALID_CONTENT, `Each Content should have at least one part` ); } @@ -93,8 +99,8 @@ export function validateChatHistory(history: Content[]): void { const validParts = VALID_PARTS_PER_ROLE[role]; for (const key of VALID_PART_FIELDS) { if (!validParts.includes(key) && countFields[key] > 0) { - throw new AIError( - AIErrorCode.INVALID_CONTENT, + throw new VertexAIError( + VertexAIErrorCode.INVALID_CONTENT, `Content with role '${role}' can't contain '${key}' part` ); } @@ -103,8 +109,8 @@ export function validateChatHistory(history: Content[]): void { if (prevContent) { const validPreviousContentRoles = VALID_PREVIOUS_CONTENT_ROLES[role]; if (!validPreviousContentRoles.includes(prevContent.role)) { - throw new AIError( - AIErrorCode.INVALID_CONTENT, + throw new VertexAIError( + VertexAIErrorCode.INVALID_CONTENT, `Content with role '${role}' can't follow '${ prevContent.role }'. Valid previous roles: ${JSON.stringify( diff --git a/packages/ai/src/methods/chat-session.test.ts b/packages/vertexai/src/methods/chat-session.test.ts similarity index 96% rename from packages/ai/src/methods/chat-session.test.ts rename to packages/vertexai/src/methods/chat-session.test.ts index 0564aa84ed6..bd389a3d778 100644 --- a/packages/ai/src/methods/chat-session.test.ts +++ b/packages/vertexai/src/methods/chat-session.test.ts @@ -23,7 +23,6 @@ import * as generateContentMethods from './generate-content'; import { GenerateContentStreamResult } from '../types'; import { ChatSession } from './chat-session'; import { ApiSettings } from '../types/internal'; -import { VertexAIBackend } from '../backend'; use(sinonChai); use(chaiAsPromised); @@ -32,8 +31,7 @@ const fakeApiSettings: ApiSettings = { apiKey: 'key', project: 'my-project', appId: 'my-appid', - location: 'us-central1', - backend: new VertexAIBackend() + location: 'us-central1' }; describe('ChatSession', () => { diff --git a/packages/ai/src/methods/chat-session.ts b/packages/vertexai/src/methods/chat-session.ts similarity index 100% rename from packages/ai/src/methods/chat-session.ts rename to packages/vertexai/src/methods/chat-session.ts diff --git a/packages/ai/src/methods/count-tokens.test.ts b/packages/vertexai/src/methods/count-tokens.test.ts similarity index 79% rename from packages/ai/src/methods/count-tokens.test.ts rename to packages/vertexai/src/methods/count-tokens.test.ts index 7e04ddb3561..9eccbf702fe 100644 --- a/packages/ai/src/methods/count-tokens.test.ts +++ b/packages/vertexai/src/methods/count-tokens.test.ts @@ -16,7 +16,7 @@ */ import { expect, use } from 'chai'; -import Sinon, { match, restore, stub } from 'sinon'; +import { match, restore, stub } from 'sinon'; import sinonChai from 'sinon-chai'; import chaiAsPromised from 'chai-as-promised'; import { getMockResponse } from '../../test-utils/mock-response'; @@ -25,8 +25,6 @@ import { countTokens } from './count-tokens'; import { CountTokensRequest } from '../types'; import { ApiSettings } from '../types/internal'; import { Task } from '../requests/request'; -import { mapCountTokensRequest } from '../googleai-mappers'; -import { GoogleAIBackend, VertexAIBackend } from '../backend'; use(sinonChai); use(chaiAsPromised); @@ -35,16 +33,7 @@ const fakeApiSettings: ApiSettings = { apiKey: 'key', project: 'my-project', appId: 'my-appid', - location: 'us-central1', - backend: new VertexAIBackend() -}; - -const fakeGoogleAIApiSettings: ApiSettings = { - apiKey: 'key', - project: 'my-project', - appId: 'my-appid', - location: '', - backend: new GoogleAIBackend() + location: 'us-central1' }; const fakeRequestParams: CountTokensRequest = { @@ -150,30 +139,4 @@ describe('countTokens()', () => { ).to.be.rejectedWith(/404.*not found/); expect(mockFetch).to.be.called; }); - describe('googleAI', () => { - let makeRequestStub: Sinon.SinonStub; - - beforeEach(() => { - makeRequestStub = stub(request, 'makeRequest'); - }); - - afterEach(() => { - restore(); - }); - - it('maps request to GoogleAI format', async () => { - makeRequestStub.resolves({ ok: true, json: () => {} } as Response); // Unused - - await countTokens(fakeGoogleAIApiSettings, 'model', fakeRequestParams); - - expect(makeRequestStub).to.be.calledWith( - 'model', - Task.COUNT_TOKENS, - fakeGoogleAIApiSettings, - false, - JSON.stringify(mapCountTokensRequest(fakeRequestParams, 'model')), - undefined - ); - }); - }); }); diff --git a/packages/ai/src/methods/count-tokens.ts b/packages/vertexai/src/methods/count-tokens.ts similarity index 75% rename from packages/ai/src/methods/count-tokens.ts rename to packages/vertexai/src/methods/count-tokens.ts index b1e60e3a182..c9d43a5b6fd 100644 --- a/packages/ai/src/methods/count-tokens.ts +++ b/packages/vertexai/src/methods/count-tokens.ts @@ -22,8 +22,6 @@ import { } from '../types'; import { Task, makeRequest } from '../requests/request'; import { ApiSettings } from '../types/internal'; -import * as GoogleAIMapper from '../googleai-mappers'; -import { BackendType } from '../public-types'; export async function countTokens( apiSettings: ApiSettings, @@ -31,19 +29,12 @@ export async function countTokens( params: CountTokensRequest, requestOptions?: RequestOptions ): Promise { - let body: string = ''; - if (apiSettings.backend.backendType === BackendType.GOOGLE_AI) { - const mappedParams = GoogleAIMapper.mapCountTokensRequest(params, model); - body = JSON.stringify(mappedParams); - } else { - body = JSON.stringify(params); - } const response = await makeRequest( model, Task.COUNT_TOKENS, apiSettings, false, - body, + JSON.stringify(params), requestOptions ); return response.json(); diff --git a/packages/ai/src/methods/generate-content.test.ts b/packages/vertexai/src/methods/generate-content.test.ts similarity index 75% rename from packages/ai/src/methods/generate-content.test.ts rename to packages/vertexai/src/methods/generate-content.test.ts index 13250fd83dd..1d15632f828 100644 --- a/packages/ai/src/methods/generate-content.test.ts +++ b/packages/vertexai/src/methods/generate-content.test.ts @@ -16,14 +16,13 @@ */ import { expect, use } from 'chai'; -import Sinon, { match, restore, stub } from 'sinon'; +import { match, restore, stub } from 'sinon'; import sinonChai from 'sinon-chai'; import chaiAsPromised from 'chai-as-promised'; import { getMockResponse } from '../../test-utils/mock-response'; import * as request from '../requests/request'; import { generateContent } from './generate-content'; import { - AIErrorCode, GenerateContentRequest, HarmBlockMethod, HarmBlockThreshold, @@ -31,9 +30,6 @@ import { } from '../types'; import { ApiSettings } from '../types/internal'; import { Task } from '../requests/request'; -import { AIError } from '../api'; -import { mapGenerateContentRequest } from '../googleai-mappers'; -import { GoogleAIBackend, VertexAIBackend } from '../backend'; use(sinonChai); use(chaiAsPromised); @@ -42,16 +38,7 @@ const fakeApiSettings: ApiSettings = { apiKey: 'key', project: 'my-project', appId: 'my-appid', - location: 'us-central1', - backend: new VertexAIBackend() -}; - -const fakeGoogleAIApiSettings: ApiSettings = { - apiKey: 'key', - project: 'my-project', - appId: 'my-appid', - location: 'us-central1', - backend: new GoogleAIBackend() + location: 'us-central1' }; const fakeRequestParams: GenerateContentRequest = { @@ -68,19 +55,6 @@ const fakeRequestParams: GenerateContentRequest = { ] }; -const fakeGoogleAIRequestParams: GenerateContentRequest = { - contents: [{ parts: [{ text: 'hello' }], role: 'user' }], - generationConfig: { - topK: 16 - }, - safetySettings: [ - { - category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, - threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE - } - ] -}; - describe('generateContent()', () => { afterEach(() => { restore(); @@ -104,7 +78,9 @@ describe('generateContent()', () => { Task.GENERATE_CONTENT, fakeApiSettings, false, - JSON.stringify(fakeRequestParams), + match((value: string) => { + return value.includes('contents'); + }), undefined ); }); @@ -313,66 +289,4 @@ describe('generateContent()', () => { ); expect(mockFetch).to.be.called; }); - describe('googleAI', () => { - let makeRequestStub: Sinon.SinonStub; - - beforeEach(() => { - makeRequestStub = stub(request, 'makeRequest'); - }); - - afterEach(() => { - restore(); - }); - - it('throws error when method is defined', async () => { - const mockResponse = getMockResponse( - 'googleAI', - 'unary-success-basic-reply-short.txt' - ); - makeRequestStub.resolves(mockResponse as Response); - - const requestParamsWithMethod: GenerateContentRequest = { - contents: [{ parts: [{ text: 'hello' }], role: 'user' }], - safetySettings: [ - { - category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, - threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, - method: HarmBlockMethod.SEVERITY // Unsupported in Google AI. - } - ] - }; - - // Expect generateContent to throw a AIError that method is not supported. - await expect( - generateContent( - fakeGoogleAIApiSettings, - 'model', - requestParamsWithMethod - ) - ).to.be.rejectedWith(AIError, AIErrorCode.UNSUPPORTED); - expect(makeRequestStub).to.not.be.called; - }); - it('maps request to GoogleAI format', async () => { - const mockResponse = getMockResponse( - 'googleAI', - 'unary-success-basic-reply-short.txt' - ); - makeRequestStub.resolves(mockResponse as Response); - - await generateContent( - fakeGoogleAIApiSettings, - 'model', - fakeGoogleAIRequestParams - ); - - expect(makeRequestStub).to.be.calledWith( - 'model', - Task.GENERATE_CONTENT, - fakeGoogleAIApiSettings, - false, - JSON.stringify(mapGenerateContentRequest(fakeGoogleAIRequestParams)), - undefined - ); - }); - }); }); diff --git a/packages/ai/src/methods/generate-content.ts b/packages/vertexai/src/methods/generate-content.ts similarity index 63% rename from packages/ai/src/methods/generate-content.ts rename to packages/vertexai/src/methods/generate-content.ts index 5f7902f5954..0944b38016a 100644 --- a/packages/ai/src/methods/generate-content.ts +++ b/packages/vertexai/src/methods/generate-content.ts @@ -26,8 +26,6 @@ import { Task, makeRequest } from '../requests/request'; import { createEnhancedContentResponse } from '../requests/response-helpers'; import { processStream } from '../requests/stream-reader'; import { ApiSettings } from '../types/internal'; -import * as GoogleAIMapper from '../googleai-mappers'; -import { BackendType } from '../public-types'; export async function generateContentStream( apiSettings: ApiSettings, @@ -35,9 +33,6 @@ export async function generateContentStream( params: GenerateContentRequest, requestOptions?: RequestOptions ): Promise { - if (apiSettings.backend.backendType === BackendType.GOOGLE_AI) { - params = GoogleAIMapper.mapGenerateContentRequest(params); - } const response = await makeRequest( model, Task.STREAM_GENERATE_CONTENT, @@ -46,7 +41,7 @@ export async function generateContentStream( JSON.stringify(params), requestOptions ); - return processStream(response, apiSettings); // TODO: Map streaming responses + return processStream(response); } export async function generateContent( @@ -55,9 +50,6 @@ export async function generateContent( params: GenerateContentRequest, requestOptions?: RequestOptions ): Promise { - if (apiSettings.backend.backendType === BackendType.GOOGLE_AI) { - params = GoogleAIMapper.mapGenerateContentRequest(params); - } const response = await makeRequest( model, Task.GENERATE_CONTENT, @@ -66,26 +58,9 @@ export async function generateContent( JSON.stringify(params), requestOptions ); - const generateContentResponse = await processGenerateContentResponse( - response, - apiSettings - ); - const enhancedResponse = createEnhancedContentResponse( - generateContentResponse - ); + const responseJson: GenerateContentResponse = await response.json(); + const enhancedResponse = createEnhancedContentResponse(responseJson); return { response: enhancedResponse }; } - -async function processGenerateContentResponse( - response: Response, - apiSettings: ApiSettings -): Promise { - const responseJson = await response.json(); - if (apiSettings.backend.backendType === BackendType.GOOGLE_AI) { - return GoogleAIMapper.mapGenerateContentResponse(responseJson); - } else { - return responseJson; - } -} diff --git a/packages/ai/src/models/generative-model.test.ts b/packages/vertexai/src/models/generative-model.test.ts similarity index 87% rename from packages/ai/src/models/generative-model.test.ts rename to packages/vertexai/src/models/generative-model.test.ts index d055b82b1be..51ea8aafead 100644 --- a/packages/ai/src/models/generative-model.test.ts +++ b/packages/vertexai/src/models/generative-model.test.ts @@ -16,16 +16,15 @@ */ import { use, expect } from 'chai'; import { GenerativeModel } from './generative-model'; -import { FunctionCallingMode, AI } from '../public-types'; +import { FunctionCallingMode, VertexAI } from '../public-types'; import * as request from '../requests/request'; import { match, restore, stub } from 'sinon'; import { getMockResponse } from '../../test-utils/mock-response'; import sinonChai from 'sinon-chai'; -import { VertexAIBackend } from '../backend'; use(sinonChai); -const fakeAI: AI = { +const fakeVertexAI: VertexAI = { app: { name: 'DEFAULT', automaticDataCollectionEnabled: true, @@ -35,13 +34,12 @@ const fakeAI: AI = { appId: 'my-appid' } }, - backend: new VertexAIBackend('us-central1'), location: 'us-central1' }; describe('GenerativeModel', () => { it('passes params through to generateContent', async () => { - const genModel = new GenerativeModel(fakeAI, { + const genModel = new GenerativeModel(fakeVertexAI, { model: 'my-model', tools: [ { @@ -86,7 +84,7 @@ describe('GenerativeModel', () => { restore(); }); it('passes text-only systemInstruction through to generateContent', async () => { - const genModel = new GenerativeModel(fakeAI, { + const genModel = new GenerativeModel(fakeVertexAI, { model: 'my-model', systemInstruction: 'be friendly' }); @@ -112,7 +110,7 @@ describe('GenerativeModel', () => { restore(); }); it('generateContent overrides model values', async () => { - const genModel = new GenerativeModel(fakeAI, { + const genModel = new GenerativeModel(fakeVertexAI, { model: 'my-model', tools: [ { @@ -167,37 +165,8 @@ describe('GenerativeModel', () => { ); restore(); }); - it('passes base model params through to ChatSession when there are no startChatParams', async () => { - const genModel = new GenerativeModel(fakeAI, { - model: 'my-model', - generationConfig: { - topK: 1 - } - }); - const chatSession = genModel.startChat(); - expect(chatSession.params?.generationConfig).to.deep.equal({ - topK: 1 - }); - restore(); - }); - it('overrides base model params with startChatParams', () => { - const genModel = new GenerativeModel(fakeAI, { - model: 'my-model', - generationConfig: { - topK: 1 - } - }); - const chatSession = genModel.startChat({ - generationConfig: { - topK: 2 - } - }); - expect(chatSession.params?.generationConfig).to.deep.equal({ - topK: 2 - }); - }); it('passes params through to chat.sendMessage', async () => { - const genModel = new GenerativeModel(fakeAI, { + const genModel = new GenerativeModel(fakeVertexAI, { model: 'my-model', tools: [ { functionDeclarations: [{ name: 'myfunc', description: 'mydesc' }] } @@ -239,7 +208,7 @@ describe('GenerativeModel', () => { restore(); }); it('passes text-only systemInstruction through to chat.sendMessage', async () => { - const genModel = new GenerativeModel(fakeAI, { + const genModel = new GenerativeModel(fakeVertexAI, { model: 'my-model', systemInstruction: 'be friendly' }); @@ -265,7 +234,7 @@ describe('GenerativeModel', () => { restore(); }); it('startChat overrides model values', async () => { - const genModel = new GenerativeModel(fakeAI, { + const genModel = new GenerativeModel(fakeVertexAI, { model: 'my-model', tools: [ { functionDeclarations: [{ name: 'myfunc', description: 'mydesc' }] } @@ -325,7 +294,7 @@ describe('GenerativeModel', () => { restore(); }); it('calls countTokens', async () => { - const genModel = new GenerativeModel(fakeAI, { model: 'my-model' }); + const genModel = new GenerativeModel(fakeVertexAI, { model: 'my-model' }); const mockResponse = getMockResponse( 'vertexAI', 'unary-success-total-tokens.json' diff --git a/packages/ai/src/models/generative-model.ts b/packages/vertexai/src/models/generative-model.ts similarity index 95% rename from packages/ai/src/models/generative-model.ts rename to packages/vertexai/src/models/generative-model.ts index b09a9290aa4..1af1ee700d5 100644 --- a/packages/ai/src/models/generative-model.ts +++ b/packages/vertexai/src/models/generative-model.ts @@ -41,14 +41,14 @@ import { formatGenerateContentInput, formatSystemInstruction } from '../requests/request-helpers'; -import { AI } from '../public-types'; -import { AIModel } from './ai-model'; +import { VertexAI } from '../public-types'; +import { VertexAIModel } from './vertexai-model'; /** * Class for generative model APIs. * @public */ -export class GenerativeModel extends AIModel { +export class GenerativeModel extends VertexAIModel { generationConfig: GenerationConfig; safetySettings: SafetySetting[]; requestOptions?: RequestOptions; @@ -57,11 +57,11 @@ export class GenerativeModel extends AIModel { systemInstruction?: Content; constructor( - ai: AI, + vertexAI: VertexAI, modelParams: ModelParams, requestOptions?: RequestOptions ) { - super(ai, modelParams.model); + super(vertexAI, modelParams.model); this.generationConfig = modelParams.generationConfig || {}; this.safetySettings = modelParams.safetySettings || []; this.tools = modelParams.tools; diff --git a/packages/ai/src/models/imagen-model.test.ts b/packages/vertexai/src/models/imagen-model.test.ts similarity index 90% rename from packages/ai/src/models/imagen-model.test.ts rename to packages/vertexai/src/models/imagen-model.test.ts index f4121e18f2d..9e534f2195a 100644 --- a/packages/ai/src/models/imagen-model.test.ts +++ b/packages/vertexai/src/models/imagen-model.test.ts @@ -20,19 +20,18 @@ import { ImagenAspectRatio, ImagenPersonFilterLevel, ImagenSafetyFilterLevel, - AI, - AIErrorCode + VertexAI, + VertexAIErrorCode } from '../public-types'; import * as request from '../requests/request'; import sinonChai from 'sinon-chai'; -import { AIError } from '../errors'; +import { VertexAIError } from '../errors'; import { getMockResponse } from '../../test-utils/mock-response'; import { match, restore, stub } from 'sinon'; -import { VertexAIBackend } from '../backend'; use(sinonChai); -const fakeAI: AI = { +const fakeVertexAI: VertexAI = { app: { name: 'DEFAULT', automaticDataCollectionEnabled: true, @@ -42,7 +41,6 @@ const fakeAI: AI = { appId: 'my-appid' } }, - backend: new VertexAIBackend('us-central1'), location: 'us-central1' }; @@ -56,7 +54,7 @@ describe('ImagenModel', () => { mockResponse as Response ); - const imagenModel = new ImagenModel(fakeAI, { + const imagenModel = new ImagenModel(fakeVertexAI, { model: 'my-model' }); const prompt = 'A photorealistic image of a toy boat at sea.'; @@ -77,7 +75,7 @@ describe('ImagenModel', () => { restore(); }); it('generateImages makes a request to predict with generation config and safety settings', async () => { - const imagenModel = new ImagenModel(fakeAI, { + const imagenModel = new ImagenModel(fakeVertexAI, { model: 'my-model', generationConfig: { negativePrompt: 'do not hallucinate', @@ -148,15 +146,15 @@ describe('ImagenModel', () => { json: mockResponse.json } as Response); - const imagenModel = new ImagenModel(fakeAI, { + const imagenModel = new ImagenModel(fakeVertexAI, { model: 'my-model' }); try { await imagenModel.generateImages('some inappropriate prompt.'); } catch (e) { - expect((e as AIError).code).to.equal(AIErrorCode.FETCH_ERROR); - expect((e as AIError).message).to.include('400'); - expect((e as AIError).message).to.include( + expect((e as VertexAIError).code).to.equal(VertexAIErrorCode.FETCH_ERROR); + expect((e as VertexAIError).message).to.include('400'); + expect((e as VertexAIError).message).to.include( "Image generation failed with the following error: The prompt could not be submitted. This prompt contains sensitive words that violate Google's Responsible AI practices. Try rephrasing the prompt. If you think this was an error, send feedback." ); } finally { diff --git a/packages/ai/src/models/imagen-model.ts b/packages/vertexai/src/models/imagen-model.ts similarity index 94% rename from packages/ai/src/models/imagen-model.ts rename to packages/vertexai/src/models/imagen-model.ts index 3c76a1c721c..04514ef6ffd 100644 --- a/packages/ai/src/models/imagen-model.ts +++ b/packages/vertexai/src/models/imagen-model.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { AI } from '../public-types'; +import { VertexAI } from '../public-types'; import { Task, makeRequest } from '../requests/request'; import { createPredictRequestBody } from '../requests/request-helpers'; import { handlePredictResponse } from '../requests/response-helpers'; @@ -28,7 +28,7 @@ import { ImagenGenerationResponse, ImagenSafetySettings } from '../types'; -import { AIModel } from './ai-model'; +import { VertexAIModel } from './vertexai-model'; /** * Class for Imagen model APIs. @@ -38,7 +38,7 @@ import { AIModel } from './ai-model'; * @example * ```javascript * const imagen = new ImagenModel( - * ai, + * vertexAI, * { * model: 'imagen-3.0-generate-002' * } @@ -52,7 +52,7 @@ import { AIModel } from './ai-model'; * * @beta */ -export class ImagenModel extends AIModel { +export class ImagenModel extends VertexAIModel { /** * The Imagen generation configuration. */ @@ -65,7 +65,7 @@ export class ImagenModel extends AIModel { /** * Constructs a new instance of the {@link ImagenModel} class. * - * @param ai - an {@link AI} instance. + * @param vertexAI - An instance of the Vertex AI in Firebase SDK. * @param modelParams - Parameters to use when making requests to Imagen. * @param requestOptions - Additional options to use when making requests. * @@ -73,12 +73,12 @@ export class ImagenModel extends AIModel { * Firebase config. */ constructor( - ai: AI, + vertexAI: VertexAI, modelParams: ImagenModelParams, public requestOptions?: RequestOptions ) { const { model, generationConfig, safetySettings } = modelParams; - super(ai, model); + super(vertexAI, model); this.generationConfig = generationConfig; this.safetySettings = safetySettings; } diff --git a/packages/ai/src/models/index.ts b/packages/vertexai/src/models/index.ts similarity index 95% rename from packages/ai/src/models/index.ts rename to packages/vertexai/src/models/index.ts index cb694a5360b..aec06be26fd 100644 --- a/packages/ai/src/models/index.ts +++ b/packages/vertexai/src/models/index.ts @@ -15,6 +15,6 @@ * limitations under the License. */ -export * from './ai-model'; +export * from './vertexai-model'; export * from './generative-model'; export * from './imagen-model'; diff --git a/packages/ai/src/models/ai-model.test.ts b/packages/vertexai/src/models/vertexai-model.test.ts similarity index 66% rename from packages/ai/src/models/ai-model.test.ts rename to packages/vertexai/src/models/vertexai-model.test.ts index 4f23fe9d06f..7aa7f806e7f 100644 --- a/packages/ai/src/models/ai-model.test.ts +++ b/packages/vertexai/src/models/vertexai-model.test.ts @@ -15,25 +15,24 @@ * limitations under the License. */ import { use, expect } from 'chai'; -import { AI, AIErrorCode } from '../public-types'; +import { VertexAI, VertexAIErrorCode } from '../public-types'; import sinonChai from 'sinon-chai'; -import { AIModel } from './ai-model'; -import { AIError } from '../errors'; -import { VertexAIBackend } from '../backend'; +import { VertexAIModel } from './vertexai-model'; +import { VertexAIError } from '../errors'; use(sinonChai); /** - * A class that extends AIModel that allows us to test the protected constructor. + * A class that extends VertexAIModel that allows us to test the protected constructor. */ -class TestModel extends AIModel { +class TestModel extends VertexAIModel { /* eslint-disable @typescript-eslint/no-useless-constructor */ - constructor(ai: AI, modelName: string) { - super(ai, modelName); + constructor(vertexAI: VertexAI, modelName: string) { + super(vertexAI, modelName); } } -const fakeAI: AI = { +const fakeVertexAI: VertexAI = { app: { name: 'DEFAULT', automaticDataCollectionEnabled: true, @@ -43,32 +42,31 @@ const fakeAI: AI = { appId: 'my-appid' } }, - backend: new VertexAIBackend('us-central1'), location: 'us-central1' }; -describe('AIModel', () => { +describe('VertexAIModel', () => { it('handles plain model name', () => { - const testModel = new TestModel(fakeAI, 'my-model'); + const testModel = new TestModel(fakeVertexAI, 'my-model'); expect(testModel.model).to.equal('publishers/google/models/my-model'); }); it('handles models/ prefixed model name', () => { - const testModel = new TestModel(fakeAI, 'models/my-model'); + const testModel = new TestModel(fakeVertexAI, 'models/my-model'); expect(testModel.model).to.equal('publishers/google/models/my-model'); }); it('handles full model name', () => { const testModel = new TestModel( - fakeAI, + fakeVertexAI, 'publishers/google/models/my-model' ); expect(testModel.model).to.equal('publishers/google/models/my-model'); }); it('handles prefixed tuned model name', () => { - const testModel = new TestModel(fakeAI, 'tunedModels/my-model'); + const testModel = new TestModel(fakeVertexAI, 'tunedModels/my-model'); expect(testModel.model).to.equal('tunedModels/my-model'); }); it('throws if not passed an api key', () => { - const fakeAI: AI = { + const fakeVertexAI: VertexAI = { app: { name: 'DEFAULT', automaticDataCollectionEnabled: true, @@ -76,17 +74,16 @@ describe('AIModel', () => { projectId: 'my-project' } }, - backend: new VertexAIBackend('us-central1'), location: 'us-central1' }; try { - new TestModel(fakeAI, 'my-model'); + new TestModel(fakeVertexAI, 'my-model'); } catch (e) { - expect((e as AIError).code).to.equal(AIErrorCode.NO_API_KEY); + expect((e as VertexAIError).code).to.equal(VertexAIErrorCode.NO_API_KEY); } }); it('throws if not passed a project ID', () => { - const fakeAI: AI = { + const fakeVertexAI: VertexAI = { app: { name: 'DEFAULT', automaticDataCollectionEnabled: true, @@ -94,17 +91,18 @@ describe('AIModel', () => { apiKey: 'key' } }, - backend: new VertexAIBackend('us-central1'), location: 'us-central1' }; try { - new TestModel(fakeAI, 'my-model'); + new TestModel(fakeVertexAI, 'my-model'); } catch (e) { - expect((e as AIError).code).to.equal(AIErrorCode.NO_PROJECT_ID); + expect((e as VertexAIError).code).to.equal( + VertexAIErrorCode.NO_PROJECT_ID + ); } }); it('throws if not passed an app ID', () => { - const fakeAI: AI = { + const fakeVertexAI: VertexAI = { app: { name: 'DEFAULT', automaticDataCollectionEnabled: true, @@ -113,13 +111,12 @@ describe('AIModel', () => { projectId: 'my-project' } }, - backend: new VertexAIBackend('us-central1'), location: 'us-central1' }; try { - new TestModel(fakeAI, 'my-model'); + new TestModel(fakeVertexAI, 'my-model'); } catch (e) { - expect((e as AIError).code).to.equal(AIErrorCode.NO_APP_ID); + expect((e as VertexAIError).code).to.equal(VertexAIErrorCode.NO_APP_ID); } }); }); diff --git a/packages/ai/src/models/ai-model.ts b/packages/vertexai/src/models/vertexai-model.ts similarity index 55% rename from packages/ai/src/models/ai-model.ts rename to packages/vertexai/src/models/vertexai-model.ts index 084dbe329cc..cac14845961 100644 --- a/packages/ai/src/models/ai-model.ts +++ b/packages/vertexai/src/models/vertexai-model.ts @@ -15,21 +15,18 @@ * limitations under the License. */ -import { AIError } from '../errors'; -import { AIErrorCode, AI, BackendType } from '../public-types'; -import { AIService } from '../service'; +import { VertexAIError } from '../errors'; +import { VertexAI, VertexAIErrorCode } from '../public-types'; +import { VertexAIService } from '../service'; import { ApiSettings } from '../types/internal'; import { _isFirebaseServerApp } from '@firebase/app'; /** - * Base class for Firebase AI model APIs. - * - * Instances of this class are associated with a specific Firebase AI {@link Backend} - * and provide methods for interacting with the configured generative model. + * Base class for Vertex AI in Firebase model APIs. * * @public */ -export abstract class AIModel { +export abstract class VertexAIModel { /** * The fully qualified model resource name to use for generating images * (for example, `publishers/google/models/imagen-3.0-generate-002`). @@ -42,12 +39,12 @@ export abstract class AIModel { protected _apiSettings: ApiSettings; /** - * Constructs a new instance of the {@link AIModel} class. + * Constructs a new instance of the {@link VertexAIModel} class. * * This constructor should only be called from subclasses that provide * a model API. * - * @param ai - an {@link AI} instance. + * @param vertexAI - An instance of the Vertex AI in Firebase SDK. * @param modelName - The name of the model being used. It can be in one of the following formats: * - `my-model` (short name, will resolve to `publishers/google/models/my-model`) * - `models/my-model` (will resolve to `publishers/google/models/my-model`) @@ -58,51 +55,51 @@ export abstract class AIModel { * * @internal */ - protected constructor(ai: AI, modelName: string) { - if (!ai.app?.options?.apiKey) { - throw new AIError( - AIErrorCode.NO_API_KEY, - `The "apiKey" field is empty in the local Firebase config. Firebase AI requires this field to contain a valid API key.` + protected constructor(vertexAI: VertexAI, modelName: string) { + this.model = VertexAIModel.normalizeModelName(modelName); + + if (!vertexAI.app?.options?.apiKey) { + throw new VertexAIError( + VertexAIErrorCode.NO_API_KEY, + `The "apiKey" field is empty in the local Firebase config. Firebase VertexAI requires this field to contain a valid API key.` ); - } else if (!ai.app?.options?.projectId) { - throw new AIError( - AIErrorCode.NO_PROJECT_ID, - `The "projectId" field is empty in the local Firebase config. Firebase AI requires this field to contain a valid project ID.` + } else if (!vertexAI.app?.options?.projectId) { + throw new VertexAIError( + VertexAIErrorCode.NO_PROJECT_ID, + `The "projectId" field is empty in the local Firebase config. Firebase VertexAI requires this field to contain a valid project ID.` ); - } else if (!ai.app?.options?.appId) { - throw new AIError( - AIErrorCode.NO_APP_ID, - `The "appId" field is empty in the local Firebase config. Firebase AI requires this field to contain a valid app ID.` + } else if (!vertexAI.app?.options?.appId) { + throw new VertexAIError( + VertexAIErrorCode.NO_APP_ID, + `The "appId" field is empty in the local Firebase config. Firebase VertexAI requires this field to contain a valid app ID.` ); } else { this._apiSettings = { - apiKey: ai.app.options.apiKey, - project: ai.app.options.projectId, - appId: ai.app.options.appId, - automaticDataCollectionEnabled: ai.app.automaticDataCollectionEnabled, - location: ai.location, - backend: ai.backend + apiKey: vertexAI.app.options.apiKey, + project: vertexAI.app.options.projectId, + appId: vertexAI.app.options.appId, + automaticDataCollectionEnabled: + vertexAI.app.automaticDataCollectionEnabled, + location: vertexAI.location }; - if (_isFirebaseServerApp(ai.app) && ai.app.settings.appCheckToken) { - const token = ai.app.settings.appCheckToken; + if ( + _isFirebaseServerApp(vertexAI.app) && + vertexAI.app.settings.appCheckToken + ) { + const token = vertexAI.app.settings.appCheckToken; this._apiSettings.getAppCheckToken = () => { return Promise.resolve({ token }); }; - } else if ((ai as AIService).appCheck) { + } else if ((vertexAI as VertexAIService).appCheck) { this._apiSettings.getAppCheckToken = () => - (ai as AIService).appCheck!.getToken(); + (vertexAI as VertexAIService).appCheck!.getToken(); } - if ((ai as AIService).auth) { + if ((vertexAI as VertexAIService).auth) { this._apiSettings.getAuthToken = () => - (ai as AIService).auth!.getToken(); + (vertexAI as VertexAIService).auth!.getToken(); } - - this.model = AIModel.normalizeModelName( - modelName, - this._apiSettings.backend.backendType - ); } } @@ -111,31 +108,8 @@ export abstract class AIModel { * * @param modelName - The model name to normalize. * @returns The fully qualified model resource name. - * - * @internal - */ - static normalizeModelName( - modelName: string, - backendType: BackendType - ): string { - if (backendType === BackendType.GOOGLE_AI) { - return AIModel.normalizeGoogleAIModelName(modelName); - } else { - return AIModel.normalizeVertexAIModelName(modelName); - } - } - - /** - * @internal - */ - private static normalizeGoogleAIModelName(modelName: string): string { - return `models/${modelName}`; - } - - /** - * @internal */ - private static normalizeVertexAIModelName(modelName: string): string { + static normalizeModelName(modelName: string): string { let model: string; if (modelName.includes('/')) { if (modelName.startsWith('models/')) { diff --git a/packages/firebase/ai/index.ts b/packages/vertexai/src/public-types.ts similarity index 54% rename from packages/firebase/ai/index.ts rename to packages/vertexai/src/public-types.ts index ea092d0f6e9..fbc5d51084d 100644 --- a/packages/firebase/ai/index.ts +++ b/packages/vertexai/src/public-types.ts @@ -1,6 +1,6 @@ /** * @license - * Copyright 2025 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,4 +15,26 @@ * limitations under the License. */ -export * from '@firebase/ai'; +import { FirebaseApp } from '@firebase/app'; + +export * from './types'; + +/** + * An instance of the Vertex AI in Firebase SDK. + * @public + */ +export interface VertexAI { + /** + * The {@link @firebase/app#FirebaseApp} this {@link VertexAI} instance is associated with. + */ + app: FirebaseApp; + location: string; +} + +/** + * Options when initializing the Vertex AI in Firebase SDK. + * @public + */ +export interface VertexAIOptions { + location?: string; +} diff --git a/packages/ai/src/requests/imagen-image-format.ts b/packages/vertexai/src/requests/imagen-image-format.ts similarity index 100% rename from packages/ai/src/requests/imagen-image-format.ts rename to packages/vertexai/src/requests/imagen-image-format.ts diff --git a/packages/ai/src/requests/request-helpers.test.ts b/packages/vertexai/src/requests/request-helpers.test.ts similarity index 100% rename from packages/ai/src/requests/request-helpers.test.ts rename to packages/vertexai/src/requests/request-helpers.test.ts diff --git a/packages/ai/src/requests/request-helpers.ts b/packages/vertexai/src/requests/request-helpers.ts similarity index 94% rename from packages/ai/src/requests/request-helpers.ts rename to packages/vertexai/src/requests/request-helpers.ts index c4cc1a20acc..fd2cd04e0fd 100644 --- a/packages/ai/src/requests/request-helpers.ts +++ b/packages/vertexai/src/requests/request-helpers.ts @@ -15,8 +15,13 @@ * limitations under the License. */ -import { Content, GenerateContentRequest, Part, AIErrorCode } from '../types'; -import { AIError } from '../errors'; +import { + Content, + GenerateContentRequest, + Part, + VertexAIErrorCode +} from '../types'; +import { VertexAIError } from '../errors'; import { ImagenGenerationParams, PredictRequestBody } from '../types/internal'; export function formatSystemInstruction( @@ -82,15 +87,15 @@ function assignRoleToPartsAndValidateSendMessageRequest( } if (hasUserContent && hasFunctionContent) { - throw new AIError( - AIErrorCode.INVALID_CONTENT, + throw new VertexAIError( + VertexAIErrorCode.INVALID_CONTENT, 'Within a single message, FunctionResponse cannot be mixed with other type of Part in the request for sending chat message.' ); } if (!hasUserContent && !hasFunctionContent) { - throw new AIError( - AIErrorCode.INVALID_CONTENT, + throw new VertexAIError( + VertexAIErrorCode.INVALID_CONTENT, 'No Content is provided for sending chat message.' ); } diff --git a/packages/ai/src/requests/request.test.ts b/packages/vertexai/src/requests/request.test.ts similarity index 85% rename from packages/ai/src/requests/request.test.ts rename to packages/vertexai/src/requests/request.test.ts index 0d162906fdc..cd39a0f8ae5 100644 --- a/packages/ai/src/requests/request.test.ts +++ b/packages/vertexai/src/requests/request.test.ts @@ -22,10 +22,9 @@ import chaiAsPromised from 'chai-as-promised'; import { RequestUrl, Task, getHeaders, makeRequest } from './request'; import { ApiSettings } from '../types/internal'; import { DEFAULT_API_VERSION } from '../constants'; -import { AIErrorCode } from '../types'; -import { AIError } from '../errors'; +import { VertexAIErrorCode } from '../types'; +import { VertexAIError } from '../errors'; import { getMockResponse } from '../../test-utils/mock-response'; -import { VertexAIBackend } from '../backend'; use(sinonChai); use(chaiAsPromised); @@ -34,8 +33,7 @@ const fakeApiSettings: ApiSettings = { apiKey: 'key', project: 'my-project', appId: 'my-appid', - location: 'us-central1', - backend: new VertexAIBackend() + location: 'us-central1' }; describe('request methods', () => { @@ -108,7 +106,6 @@ describe('request methods', () => { project: 'myproject', appId: 'my-appid', location: 'moon', - backend: new VertexAIBackend(), getAuthToken: () => Promise.resolve({ accessToken: 'authtoken' }), getAppCheckToken: () => Promise.resolve({ token: 'appchecktoken' }) }; @@ -135,7 +132,6 @@ describe('request methods', () => { project: 'myproject', appId: 'my-appid', location: 'moon', - backend: new VertexAIBackend(), automaticDataCollectionEnabled: true, getAuthToken: () => Promise.resolve({ accessToken: 'authtoken' }), getAppCheckToken: () => Promise.resolve({ token: 'appchecktoken' }) @@ -160,7 +156,6 @@ describe('request methods', () => { project: 'myproject', appId: 'my-appid', location: 'moon', - backend: new VertexAIBackend(), automaticDataCollectionEnabled: false, getAuthToken: () => Promise.resolve({ accessToken: 'authtoken' }), getAppCheckToken: () => Promise.resolve({ token: 'appchecktoken' }) @@ -187,8 +182,7 @@ describe('request methods', () => { apiKey: 'key', project: 'myproject', appId: 'my-appid', - location: 'moon', - backend: new VertexAIBackend() + location: 'moon' }, true, {} @@ -222,7 +216,6 @@ describe('request methods', () => { project: 'myproject', appId: 'my-appid', location: 'moon', - backend: new VertexAIBackend(), getAppCheckToken: () => Promise.resolve({ token: 'dummytoken', error: Error('oops') }) }, @@ -249,8 +242,7 @@ describe('request methods', () => { apiKey: 'key', project: 'myproject', appId: 'my-appid', - location: 'moon', - backend: new VertexAIBackend() + location: 'moon' }, true, {} @@ -310,12 +302,14 @@ describe('request methods', () => { } ); } catch (e) { - expect((e as AIError).code).to.equal(AIErrorCode.FETCH_ERROR); - expect((e as AIError).customErrorData?.status).to.equal(500); - expect((e as AIError).customErrorData?.statusText).to.equal( + expect((e as VertexAIError).code).to.equal( + VertexAIErrorCode.FETCH_ERROR + ); + expect((e as VertexAIError).customErrorData?.status).to.equal(500); + expect((e as VertexAIError).customErrorData?.statusText).to.equal( 'AbortError' ); - expect((e as AIError).message).to.include('500 AbortError'); + expect((e as VertexAIError).message).to.include('500 AbortError'); } expect(fetchStub).to.be.calledOnce; @@ -335,12 +329,14 @@ describe('request methods', () => { '' ); } catch (e) { - expect((e as AIError).code).to.equal(AIErrorCode.FETCH_ERROR); - expect((e as AIError).customErrorData?.status).to.equal(500); - expect((e as AIError).customErrorData?.statusText).to.equal( + expect((e as VertexAIError).code).to.equal( + VertexAIErrorCode.FETCH_ERROR + ); + expect((e as VertexAIError).customErrorData?.status).to.equal(500); + expect((e as VertexAIError).customErrorData?.statusText).to.equal( 'Server Error' ); - expect((e as AIError).message).to.include('500 Server Error'); + expect((e as VertexAIError).message).to.include('500 Server Error'); } expect(fetchStub).to.be.calledOnce; }); @@ -360,13 +356,15 @@ describe('request methods', () => { '' ); } catch (e) { - expect((e as AIError).code).to.equal(AIErrorCode.FETCH_ERROR); - expect((e as AIError).customErrorData?.status).to.equal(500); - expect((e as AIError).customErrorData?.statusText).to.equal( + expect((e as VertexAIError).code).to.equal( + VertexAIErrorCode.FETCH_ERROR + ); + expect((e as VertexAIError).customErrorData?.status).to.equal(500); + expect((e as VertexAIError).customErrorData?.statusText).to.equal( 'Server Error' ); - expect((e as AIError).message).to.include('500 Server Error'); - expect((e as AIError).message).to.include('extra info'); + expect((e as VertexAIError).message).to.include('500 Server Error'); + expect((e as VertexAIError).message).to.include('extra info'); } expect(fetchStub).to.be.calledOnce; }); @@ -398,14 +396,18 @@ describe('request methods', () => { '' ); } catch (e) { - expect((e as AIError).code).to.equal(AIErrorCode.FETCH_ERROR); - expect((e as AIError).customErrorData?.status).to.equal(500); - expect((e as AIError).customErrorData?.statusText).to.equal( + expect((e as VertexAIError).code).to.equal( + VertexAIErrorCode.FETCH_ERROR + ); + expect((e as VertexAIError).customErrorData?.status).to.equal(500); + expect((e as VertexAIError).customErrorData?.statusText).to.equal( 'Server Error' ); - expect((e as AIError).message).to.include('500 Server Error'); - expect((e as AIError).message).to.include('extra info'); - expect((e as AIError).message).to.include('generic::invalid_argument'); + expect((e as VertexAIError).message).to.include('500 Server Error'); + expect((e as VertexAIError).message).to.include('extra info'); + expect((e as VertexAIError).message).to.include( + 'generic::invalid_argument' + ); } expect(fetchStub).to.be.calledOnce; }); @@ -427,9 +429,11 @@ describe('request methods', () => { '' ); } catch (e) { - expect((e as AIError).code).to.equal(AIErrorCode.API_NOT_ENABLED); - expect((e as AIError).message).to.include('my-project'); - expect((e as AIError).message).to.include('googleapis.com'); + expect((e as VertexAIError).code).to.equal( + VertexAIErrorCode.API_NOT_ENABLED + ); + expect((e as VertexAIError).message).to.include('my-project'); + expect((e as VertexAIError).message).to.include('googleapis.com'); } expect(fetchStub).to.be.calledOnce; }); diff --git a/packages/ai/src/requests/request.ts b/packages/vertexai/src/requests/request.ts similarity index 78% rename from packages/ai/src/requests/request.ts rename to packages/vertexai/src/requests/request.ts index 31c5e9b8125..47e4c6ab446 100644 --- a/packages/ai/src/requests/request.ts +++ b/packages/vertexai/src/requests/request.ts @@ -15,8 +15,8 @@ * limitations under the License. */ -import { ErrorDetails, RequestOptions, AIErrorCode } from '../types'; -import { AIError } from '../errors'; +import { ErrorDetails, RequestOptions, VertexAIErrorCode } from '../types'; +import { VertexAIError } from '../errors'; import { ApiSettings } from '../types/internal'; import { DEFAULT_API_VERSION, @@ -26,7 +26,6 @@ import { PACKAGE_VERSION } from '../constants'; import { logger } from '../logger'; -import { GoogleAIBackend, VertexAIBackend } from '../backend'; export enum Task { GENERATE_CONTENT = 'generateContent', @@ -44,40 +43,29 @@ export class RequestUrl { public requestOptions?: RequestOptions ) {} toString(): string { - const url = new URL(this.baseUrl); // Throws if the URL is invalid - url.pathname = `/${this.apiVersion}/${this.modelPath}:${this.task}`; - url.search = this.queryParams.toString(); - return url.toString(); - } - - private get baseUrl(): string { - return this.requestOptions?.baseUrl || DEFAULT_BASE_URL; - } - - private get apiVersion(): string { - return DEFAULT_API_VERSION; // TODO: allow user-set options if that feature becomes available - } - - private get modelPath(): string { - if (this.apiSettings.backend instanceof GoogleAIBackend) { - return `projects/${this.apiSettings.project}/${this.model}`; - } else if (this.apiSettings.backend instanceof VertexAIBackend) { - return `projects/${this.apiSettings.project}/locations/${this.apiSettings.backend.location}/${this.model}`; - } else { - throw new AIError( - AIErrorCode.ERROR, - `Invalid backend: ${JSON.stringify(this.apiSettings.backend)}` - ); - } - } - - private get queryParams(): URLSearchParams { - const params = new URLSearchParams(); + // TODO: allow user-set option if that feature becomes available + const apiVersion = DEFAULT_API_VERSION; + const baseUrl = this.requestOptions?.baseUrl || DEFAULT_BASE_URL; + let url = `${baseUrl}/${apiVersion}`; + url += `/projects/${this.apiSettings.project}`; + url += `/locations/${this.apiSettings.location}`; + url += `/${this.model}`; + url += `:${this.task}`; if (this.stream) { - params.set('alt', 'sse'); + url += '?alt=sse'; } + return url; + } - return params; + /** + * If the model needs to be passed to the backend, it needs to + * include project and location path. + */ + get fullModelString(): string { + let modelString = `projects/${this.apiSettings.project}`; + modelString += `/locations/${this.apiSettings.location}`; + modelString += `/${this.model}`; + return modelString; } } @@ -196,9 +184,9 @@ export async function makeRequest( ) ) ) { - throw new AIError( - AIErrorCode.API_NOT_ENABLED, - `The Firebase AI SDK requires the Firebase AI ` + + throw new VertexAIError( + VertexAIErrorCode.API_NOT_ENABLED, + `The Vertex AI in Firebase SDK requires the Vertex AI in Firebase ` + `API ('firebasevertexai.googleapis.com') to be enabled in your ` + `Firebase project. Enable this API by visiting the Firebase Console ` + `at https://console.firebase.google.com/project/${url.apiSettings.project}/genai/ ` + @@ -212,8 +200,8 @@ export async function makeRequest( } ); } - throw new AIError( - AIErrorCode.FETCH_ERROR, + throw new VertexAIError( + VertexAIErrorCode.FETCH_ERROR, `Error fetching from ${url}: [${response.status} ${response.statusText}] ${message}`, { status: response.status, @@ -225,12 +213,12 @@ export async function makeRequest( } catch (e) { let err = e as Error; if ( - (e as AIError).code !== AIErrorCode.FETCH_ERROR && - (e as AIError).code !== AIErrorCode.API_NOT_ENABLED && + (e as VertexAIError).code !== VertexAIErrorCode.FETCH_ERROR && + (e as VertexAIError).code !== VertexAIErrorCode.API_NOT_ENABLED && e instanceof Error ) { - err = new AIError( - AIErrorCode.ERROR, + err = new VertexAIError( + VertexAIErrorCode.ERROR, `Error fetching from ${url.toString()}: ${e.message}` ); err.stack = e.stack; diff --git a/packages/ai/src/requests/response-helpers.test.ts b/packages/vertexai/src/requests/response-helpers.test.ts similarity index 100% rename from packages/ai/src/requests/response-helpers.test.ts rename to packages/vertexai/src/requests/response-helpers.test.ts diff --git a/packages/ai/src/requests/response-helpers.ts b/packages/vertexai/src/requests/response-helpers.ts similarity index 93% rename from packages/ai/src/requests/response-helpers.ts rename to packages/vertexai/src/requests/response-helpers.ts index 20678eeea68..d820f100a50 100644 --- a/packages/ai/src/requests/response-helpers.ts +++ b/packages/vertexai/src/requests/response-helpers.ts @@ -23,10 +23,10 @@ import { GenerateContentResponse, ImagenGCSImage, ImagenInlineImage, - AIErrorCode, - InlineDataPart + InlineDataPart, + VertexAIErrorCode } from '../types'; -import { AIError } from '../errors'; +import { VertexAIError } from '../errors'; import { logger } from '../logger'; import { ImagenResponseInternal } from '../types/internal'; @@ -68,8 +68,8 @@ export function addHelpers( ); } if (hadBadFinishReason(response.candidates[0])) { - throw new AIError( - AIErrorCode.RESPONSE_ERROR, + throw new VertexAIError( + VertexAIErrorCode.RESPONSE_ERROR, `Response error: ${formatBlockErrorMessage( response )}. Response body stored in error.response`, @@ -80,8 +80,8 @@ export function addHelpers( } return getText(response); } else if (response.promptFeedback) { - throw new AIError( - AIErrorCode.RESPONSE_ERROR, + throw new VertexAIError( + VertexAIErrorCode.RESPONSE_ERROR, `Text not available. ${formatBlockErrorMessage(response)}`, { response @@ -102,8 +102,8 @@ export function addHelpers( ); } if (hadBadFinishReason(response.candidates[0])) { - throw new AIError( - AIErrorCode.RESPONSE_ERROR, + throw new VertexAIError( + VertexAIErrorCode.RESPONSE_ERROR, `Response error: ${formatBlockErrorMessage( response )}. Response body stored in error.response`, @@ -114,8 +114,8 @@ export function addHelpers( } return getInlineDataParts(response); } else if (response.promptFeedback) { - throw new AIError( - AIErrorCode.RESPONSE_ERROR, + throw new VertexAIError( + VertexAIErrorCode.RESPONSE_ERROR, `Data not available. ${formatBlockErrorMessage(response)}`, { response @@ -134,8 +134,8 @@ export function addHelpers( ); } if (hadBadFinishReason(response.candidates[0])) { - throw new AIError( - AIErrorCode.RESPONSE_ERROR, + throw new VertexAIError( + VertexAIErrorCode.RESPONSE_ERROR, `Response error: ${formatBlockErrorMessage( response )}. Response body stored in error.response`, @@ -146,8 +146,8 @@ export function addHelpers( } return getFunctionCalls(response); } else if (response.promptFeedback) { - throw new AIError( - AIErrorCode.RESPONSE_ERROR, + throw new VertexAIError( + VertexAIErrorCode.RESPONSE_ERROR, `Function call not available. ${formatBlockErrorMessage(response)}`, { response @@ -277,8 +277,8 @@ export async function handlePredictResponse< // The backend should always send a non-empty array of predictions if the response was successful. if (!responseJson.predictions || responseJson.predictions?.length === 0) { - throw new AIError( - AIErrorCode.RESPONSE_ERROR, + throw new VertexAIError( + VertexAIErrorCode.RESPONSE_ERROR, 'No predictions or filtered reason received from Vertex AI. Please report this issue with the full error details at https://github.com/firebase/firebase-js-sdk/issues.' ); } @@ -297,8 +297,8 @@ export async function handlePredictResponse< gcsURI: prediction.gcsUri } as T); } else { - throw new AIError( - AIErrorCode.RESPONSE_ERROR, + throw new VertexAIError( + VertexAIErrorCode.RESPONSE_ERROR, `Predictions array in response has missing properties. Response: ${JSON.stringify( responseJson )}` diff --git a/packages/ai/src/requests/schema-builder.test.ts b/packages/vertexai/src/requests/schema-builder.test.ts similarity index 98% rename from packages/ai/src/requests/schema-builder.test.ts rename to packages/vertexai/src/requests/schema-builder.test.ts index d05b81381ea..b95acaae9f1 100644 --- a/packages/ai/src/requests/schema-builder.test.ts +++ b/packages/vertexai/src/requests/schema-builder.test.ts @@ -18,7 +18,7 @@ import { expect, use } from 'chai'; import sinonChai from 'sinon-chai'; import { Schema } from './schema-builder'; -import { AIErrorCode } from '../types'; +import { VertexAIErrorCode } from '../types'; use(sinonChai); @@ -243,7 +243,7 @@ describe('Schema builder', () => { }, optionalProperties: ['cat'] }); - expect(() => schema.toJSON()).to.throw(AIErrorCode.INVALID_SCHEMA); + expect(() => schema.toJSON()).to.throw(VertexAIErrorCode.INVALID_SCHEMA); }); }); diff --git a/packages/ai/src/requests/schema-builder.ts b/packages/vertexai/src/requests/schema-builder.ts similarity index 97% rename from packages/ai/src/requests/schema-builder.ts rename to packages/vertexai/src/requests/schema-builder.ts index 524cfdb1c20..3d219d58b13 100644 --- a/packages/ai/src/requests/schema-builder.ts +++ b/packages/vertexai/src/requests/schema-builder.ts @@ -15,8 +15,8 @@ * limitations under the License. */ -import { AIError } from '../errors'; -import { AIErrorCode } from '../types'; +import { VertexAIError } from '../errors'; +import { VertexAIErrorCode } from '../types'; import { SchemaInterface, SchemaType, @@ -266,8 +266,8 @@ export class ObjectSchema extends Schema { if (this.optionalProperties) { for (const propertyKey of this.optionalProperties) { if (!this.properties.hasOwnProperty(propertyKey)) { - throw new AIError( - AIErrorCode.INVALID_SCHEMA, + throw new VertexAIError( + VertexAIErrorCode.INVALID_SCHEMA, `Property "${propertyKey}" specified in "optionalProperties" does not exist.` ); } diff --git a/packages/ai/src/requests/stream-reader.test.ts b/packages/vertexai/src/requests/stream-reader.test.ts similarity index 91% rename from packages/ai/src/requests/stream-reader.test.ts rename to packages/vertexai/src/requests/stream-reader.test.ts index ea832c7816f..bf959276a93 100644 --- a/packages/ai/src/requests/stream-reader.test.ts +++ b/packages/vertexai/src/requests/stream-reader.test.ts @@ -34,19 +34,9 @@ import { HarmCategory, HarmProbability, SafetyRating, - AIErrorCode + VertexAIErrorCode } from '../types'; -import { AIError } from '../errors'; -import { ApiSettings } from '../types/internal'; -import { VertexAIBackend } from '../backend'; - -const fakeApiSettings: ApiSettings = { - apiKey: 'key', - project: 'my-project', - appId: 'my-appid', - location: 'us-central1', - backend: new VertexAIBackend() -}; +import { VertexAIError } from '../errors'; use(sinonChai); @@ -85,7 +75,7 @@ describe('processStream', () => { 'vertexAI', 'streaming-success-basic-reply-short.txt' ); - const result = processStream(fakeResponse as Response, fakeApiSettings); + const result = processStream(fakeResponse as Response); for await (const response of result.stream) { expect(response.text()).to.not.be.empty; } @@ -97,7 +87,7 @@ describe('processStream', () => { 'vertexAI', 'streaming-success-basic-reply-long.txt' ); - const result = processStream(fakeResponse as Response, fakeApiSettings); + const result = processStream(fakeResponse as Response); for await (const response of result.stream) { expect(response.text()).to.not.be.empty; } @@ -111,7 +101,7 @@ describe('processStream', () => { 'streaming-success-basic-reply-long.txt', 1e6 ); - const result = processStream(fakeResponse as Response, fakeApiSettings); + const result = processStream(fakeResponse as Response); for await (const response of result.stream) { expect(response.text()).to.not.be.empty; } @@ -124,7 +114,7 @@ describe('processStream', () => { 'vertexAI', 'streaming-success-utf8.txt' ); - const result = processStream(fakeResponse as Response, fakeApiSettings); + const result = processStream(fakeResponse as Response); for await (const response of result.stream) { expect(response.text()).to.not.be.empty; } @@ -137,7 +127,7 @@ describe('processStream', () => { 'vertexAI', 'streaming-success-function-call-short.txt' ); - const result = processStream(fakeResponse as Response, fakeApiSettings); + const result = processStream(fakeResponse as Response); for await (const response of result.stream) { expect(response.text()).to.be.empty; expect(response.functionCalls()).to.be.deep.equal([ @@ -161,7 +151,7 @@ describe('processStream', () => { 'vertexAI', 'streaming-failure-finish-reason-safety.txt' ); - const result = processStream(fakeResponse as Response, fakeApiSettings); + const result = processStream(fakeResponse as Response); const aggregatedResponse = await result.response; expect(aggregatedResponse.candidates?.[0].finishReason).to.equal('SAFETY'); expect(aggregatedResponse.text).to.throw('SAFETY'); @@ -174,7 +164,7 @@ describe('processStream', () => { 'vertexAI', 'streaming-failure-prompt-blocked-safety.txt' ); - const result = processStream(fakeResponse as Response, fakeApiSettings); + const result = processStream(fakeResponse as Response); const aggregatedResponse = await result.response; expect(aggregatedResponse.text).to.throw('SAFETY'); expect(aggregatedResponse.promptFeedback?.blockReason).to.equal('SAFETY'); @@ -187,7 +177,7 @@ describe('processStream', () => { 'vertexAI', 'streaming-failure-empty-content.txt' ); - const result = processStream(fakeResponse as Response, fakeApiSettings); + const result = processStream(fakeResponse as Response); const aggregatedResponse = await result.response; expect(aggregatedResponse.text()).to.equal(''); for await (const response of result.stream) { @@ -199,7 +189,7 @@ describe('processStream', () => { 'vertexAI', 'streaming-success-unknown-safety-enum.txt' ); - const result = processStream(fakeResponse as Response, fakeApiSettings); + const result = processStream(fakeResponse as Response); const aggregatedResponse = await result.response; expect(aggregatedResponse.text()).to.include('Cats'); for await (const response of result.stream) { @@ -211,7 +201,7 @@ describe('processStream', () => { 'vertexAI', 'streaming-failure-recitation-no-content.txt' ); - const result = processStream(fakeResponse as Response, fakeApiSettings); + const result = processStream(fakeResponse as Response); const aggregatedResponse = await result.response; expect(aggregatedResponse.text).to.throw('RECITATION'); expect(aggregatedResponse.candidates?.[0].content.parts[0].text).to.include( @@ -230,7 +220,7 @@ describe('processStream', () => { 'vertexAI', 'streaming-success-citations.txt' ); - const result = processStream(fakeResponse as Response, fakeApiSettings); + const result = processStream(fakeResponse as Response); const aggregatedResponse = await result.response; expect(aggregatedResponse.text()).to.include('Quantum mechanics is'); expect( @@ -250,7 +240,7 @@ describe('processStream', () => { 'vertexAI', 'streaming-success-empty-text-part.txt' ); - const result = processStream(fakeResponse as Response, fakeApiSettings); + const result = processStream(fakeResponse as Response); const aggregatedResponse = await result.response; expect(aggregatedResponse.text()).to.equal('1'); expect(aggregatedResponse.candidates?.length).to.equal(1); @@ -482,8 +472,10 @@ describe('aggregateResponses', () => { try { aggregateResponses(responsesToAggregate); } catch (e) { - expect((e as AIError).code).includes(AIErrorCode.INVALID_CONTENT); - expect((e as AIError).message).to.include( + expect((e as VertexAIError).code).includes( + VertexAIErrorCode.INVALID_CONTENT + ); + expect((e as VertexAIError).message).to.include( 'Part should have at least one property, but there are none. This is likely caused ' + 'by a malformed response from the backend.' ); diff --git a/packages/ai/src/requests/stream-reader.ts b/packages/vertexai/src/requests/stream-reader.ts similarity index 79% rename from packages/ai/src/requests/stream-reader.ts rename to packages/vertexai/src/requests/stream-reader.ts index 543d1d02266..5c419d114e0 100644 --- a/packages/ai/src/requests/stream-reader.ts +++ b/packages/vertexai/src/requests/stream-reader.ts @@ -21,14 +21,10 @@ import { GenerateContentResponse, GenerateContentStreamResult, Part, - AIErrorCode + VertexAIErrorCode } from '../types'; -import { AIError } from '../errors'; +import { VertexAIError } from '../errors'; import { createEnhancedContentResponse } from './response-helpers'; -import * as GoogleAIMapper from '../googleai-mappers'; -import { GoogleAIGenerateContentResponse } from '../types/googleai'; -import { ApiSettings } from '../types/internal'; -import { BackendType } from '../public-types'; const responseLineRE = /^data\: (.*)(?:\n\n|\r\r|\r\n\r\n)/; @@ -40,10 +36,7 @@ const responseLineRE = /^data\: (.*)(?:\n\n|\r\r|\r\n\r\n)/; * * @param response - Response from a fetch call */ -export function processStream( - response: Response, - apiSettings: ApiSettings -): GenerateContentStreamResult { +export function processStream(response: Response): GenerateContentStreamResult { const inputStream = response.body!.pipeThrough( new TextDecoderStream('utf8', { fatal: true }) ); @@ -51,27 +44,23 @@ export function processStream( getResponseStream(inputStream); const [stream1, stream2] = responseStream.tee(); return { - stream: generateResponseSequence(stream1, apiSettings), - response: getResponsePromise(stream2, apiSettings) + stream: generateResponseSequence(stream1), + response: getResponsePromise(stream2) }; } async function getResponsePromise( - stream: ReadableStream, - apiSettings: ApiSettings + stream: ReadableStream ): Promise { const allResponses: GenerateContentResponse[] = []; const reader = stream.getReader(); while (true) { const { done, value } = await reader.read(); if (done) { - let generateContentResponse = aggregateResponses(allResponses); - if (apiSettings.backend.backendType === BackendType.GOOGLE_AI) { - generateContentResponse = GoogleAIMapper.mapGenerateContentResponse( - generateContentResponse as GoogleAIGenerateContentResponse - ); - } - return createEnhancedContentResponse(generateContentResponse); + const enhancedResponse = createEnhancedContentResponse( + aggregateResponses(allResponses) + ); + return enhancedResponse; } allResponses.push(value); @@ -79,8 +68,7 @@ async function getResponsePromise( } async function* generateResponseSequence( - stream: ReadableStream, - apiSettings: ApiSettings + stream: ReadableStream ): AsyncGenerator { const reader = stream.getReader(); while (true) { @@ -89,17 +77,7 @@ async function* generateResponseSequence( break; } - let enhancedResponse: EnhancedGenerateContentResponse; - if (apiSettings.backend.backendType === BackendType.GOOGLE_AI) { - enhancedResponse = createEnhancedContentResponse( - GoogleAIMapper.mapGenerateContentResponse( - value as GoogleAIGenerateContentResponse - ) - ); - } else { - enhancedResponse = createEnhancedContentResponse(value); - } - + const enhancedResponse = createEnhancedContentResponse(value); yield enhancedResponse; } } @@ -122,7 +100,10 @@ export function getResponseStream( if (done) { if (currentText.trim()) { controller.error( - new AIError(AIErrorCode.PARSE_FAILED, 'Failed to parse stream') + new VertexAIError( + VertexAIErrorCode.PARSE_FAILED, + 'Failed to parse stream' + ) ); return; } @@ -138,8 +119,8 @@ export function getResponseStream( parsedResponse = JSON.parse(match[1]); } catch (e) { controller.error( - new AIError( - AIErrorCode.PARSE_FAILED, + new VertexAIError( + VertexAIErrorCode.PARSE_FAILED, `Error parsing JSON response: "${match[1]}` ) ); @@ -217,8 +198,8 @@ export function aggregateResponses( newPart.functionCall = part.functionCall; } if (Object.keys(newPart).length === 0) { - throw new AIError( - AIErrorCode.INVALID_CONTENT, + throw new VertexAIError( + VertexAIErrorCode.INVALID_CONTENT, 'Part should have at least one property, but there are none. This is likely caused ' + 'by a malformed response from the backend.' ); diff --git a/packages/ai/src/service.test.ts b/packages/vertexai/src/service.test.ts similarity index 69% rename from packages/ai/src/service.test.ts rename to packages/vertexai/src/service.test.ts index ba4c736e810..d3487e9bdd2 100644 --- a/packages/ai/src/service.test.ts +++ b/packages/vertexai/src/service.test.ts @@ -14,9 +14,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { VertexAIBackend } from './backend'; import { DEFAULT_LOCATION } from './constants'; -import { AIService } from './service'; +import { VertexAIService } from './service'; import { expect } from 'chai'; const fakeApp = { @@ -28,19 +27,18 @@ const fakeApp = { } }; -describe('AIService', () => { - // TODO (dlarocque): move some of these tests to helpers.test.ts +describe('VertexAIService', () => { it('uses default location if not specified', () => { - const ai = new AIService(fakeApp, new VertexAIBackend()); - expect(ai.location).to.equal(DEFAULT_LOCATION); + const vertexAI = new VertexAIService(fakeApp); + expect(vertexAI.location).to.equal(DEFAULT_LOCATION); }); it('uses custom location if specified', () => { - const ai = new AIService( + const vertexAI = new VertexAIService( fakeApp, - new VertexAIBackend('somewhere'), /* authProvider */ undefined, - /* appCheckProvider */ undefined + /* appCheckProvider */ undefined, + { location: 'somewhere' } ); - expect(ai.location).to.equal('somewhere'); + expect(vertexAI.location).to.equal('somewhere'); }); }); diff --git a/packages/ai/src/service.ts b/packages/vertexai/src/service.ts similarity index 76% rename from packages/ai/src/service.ts rename to packages/vertexai/src/service.ts index 006cc45a94e..05b2d559e58 100644 --- a/packages/ai/src/service.ts +++ b/packages/vertexai/src/service.ts @@ -16,7 +16,7 @@ */ import { FirebaseApp, _FirebaseService } from '@firebase/app'; -import { AI } from './public-types'; +import { VertexAI, VertexAIOptions } from './public-types'; import { AppCheckInternalComponentName, FirebaseAppCheckInternal @@ -26,29 +26,24 @@ import { FirebaseAuthInternal, FirebaseAuthInternalName } from '@firebase/auth-interop-types'; -import { Backend, VertexAIBackend } from './backend'; +import { DEFAULT_LOCATION } from './constants'; -export class AIService implements AI, _FirebaseService { +export class VertexAIService implements VertexAI, _FirebaseService { auth: FirebaseAuthInternal | null; appCheck: FirebaseAppCheckInternal | null; - location: string; // This is here for backwards-compatibility + location: string; constructor( public app: FirebaseApp, - public backend: Backend, authProvider?: Provider, - appCheckProvider?: Provider + appCheckProvider?: Provider, + public options?: VertexAIOptions ) { const appCheck = appCheckProvider?.getImmediate({ optional: true }); const auth = authProvider?.getImmediate({ optional: true }); this.auth = auth || null; this.appCheck = appCheck || null; - - if (backend instanceof VertexAIBackend) { - this.location = backend.location; - } else { - this.location = ''; - } + this.location = this.options?.location || DEFAULT_LOCATION; } _delete(): Promise { diff --git a/packages/ai/src/types/content.ts b/packages/vertexai/src/types/content.ts similarity index 100% rename from packages/ai/src/types/content.ts rename to packages/vertexai/src/types/content.ts diff --git a/packages/ai/src/types/enums.ts b/packages/vertexai/src/types/enums.ts similarity index 93% rename from packages/ai/src/types/enums.ts rename to packages/vertexai/src/types/enums.ts index 5c6612ce26a..d6702a0f1a8 100644 --- a/packages/ai/src/types/enums.ts +++ b/packages/vertexai/src/types/enums.ts @@ -62,13 +62,11 @@ export enum HarmBlockThreshold { } /** - * This property is not supported in the Gemini Developer API ({@link GoogleAIBackend}). - * * @public */ export enum HarmBlockMethod { /** - * The harm block method uses both probability and severity scores. + * The harm block method uses both probability and severity scores. */ SEVERITY = 'SEVERITY', /** @@ -120,14 +118,7 @@ export enum HarmSeverity { /** * High level of harm severity. */ - HARM_SEVERITY_HIGH = 'HARM_SEVERITY_HIGH', - /** - * Harm severity is not supported. - * - * @remarks - * The GoogleAI backend does not support `HarmSeverity`, so this value is used as a fallback. - */ - HARM_SEVERITY_UNSUPPORTED = 'HARM_SEVERITY_UNSUPPORTED' + HARM_SEVERITY_HIGH = 'HARM_SEVERITY_HIGH' } /** diff --git a/packages/ai/src/types/error.ts b/packages/vertexai/src/types/error.ts similarity index 91% rename from packages/ai/src/types/error.ts rename to packages/vertexai/src/types/error.ts index ef3ad7fc30c..b1f075101a6 100644 --- a/packages/ai/src/types/error.ts +++ b/packages/vertexai/src/types/error.ts @@ -58,11 +58,11 @@ export interface CustomErrorData { } /** - * Standardized error codes that {@link AIError} can have. + * Standardized error codes that {@link VertexAIError} can have. * * @public */ -export const enum AIErrorCode { +export const enum VertexAIErrorCode { /** A generic error occurred. */ ERROR = 'error', @@ -97,8 +97,5 @@ export const enum AIErrorCode { NO_PROJECT_ID = 'no-project-id', /** An error occurred while parsing. */ - PARSE_FAILED = 'parse-failed', - - /** An error occured due an attempt to use an unsupported feature. */ - UNSUPPORTED = 'unsupported' + PARSE_FAILED = 'parse-failed' } diff --git a/packages/ai/src/types/imagen/index.ts b/packages/vertexai/src/types/imagen/index.ts similarity index 100% rename from packages/ai/src/types/imagen/index.ts rename to packages/vertexai/src/types/imagen/index.ts diff --git a/packages/ai/src/types/imagen/internal.ts b/packages/vertexai/src/types/imagen/internal.ts similarity index 100% rename from packages/ai/src/types/imagen/internal.ts rename to packages/vertexai/src/types/imagen/internal.ts diff --git a/packages/ai/src/types/imagen/requests.ts b/packages/vertexai/src/types/imagen/requests.ts similarity index 96% rename from packages/ai/src/types/imagen/requests.ts rename to packages/vertexai/src/types/imagen/requests.ts index 09bd3dedc9b..70ae182238e 100644 --- a/packages/ai/src/types/imagen/requests.ts +++ b/packages/vertexai/src/types/imagen/requests.ts @@ -58,9 +58,6 @@ export interface ImagenGenerationConfig { * Support for negative prompts depends on the Imagen model. * * See the {@link http://firebase.google.com/docs/vertex-ai/model-parameters#imagen | documentation} for more details. - * - * This is no longer supported in the Gemini Developer API ({@link GoogleAIBackend}) in versions - * greater than `imagen-3.0-generate-002`. */ negativePrompt?: string; /** @@ -91,9 +88,6 @@ export interface ImagenGenerationConfig { * * For Imagen 3 models, the default value is `true`; see the addWatermark * documentation for more details. - * - * When using the Gemini Developer API ({@link GoogleAIBackend}), this will default to true, - * and cannot be turned off. */ addWatermark?: boolean; } diff --git a/packages/ai/src/types/imagen/responses.ts b/packages/vertexai/src/types/imagen/responses.ts similarity index 100% rename from packages/ai/src/types/imagen/responses.ts rename to packages/vertexai/src/types/imagen/responses.ts diff --git a/packages/ai/src/types/index.ts b/packages/vertexai/src/types/index.ts similarity index 96% rename from packages/ai/src/types/index.ts rename to packages/vertexai/src/types/index.ts index 01f3e7a701a..f575c5ba8e9 100644 --- a/packages/ai/src/types/index.ts +++ b/packages/vertexai/src/types/index.ts @@ -22,4 +22,3 @@ export * from './responses'; export * from './error'; export * from './schema'; export * from './imagen'; -export * from './googleai'; diff --git a/packages/ai/src/types/internal.ts b/packages/vertexai/src/types/internal.ts similarity index 89% rename from packages/ai/src/types/internal.ts rename to packages/vertexai/src/types/internal.ts index a41ec5652d3..a3476afd028 100644 --- a/packages/ai/src/types/internal.ts +++ b/packages/vertexai/src/types/internal.ts @@ -17,7 +17,6 @@ import { AppCheckTokenResult } from '@firebase/app-check-interop-types'; import { FirebaseAuthTokenData } from '@firebase/auth-interop-types'; -import { Backend } from '../backend'; export * from './imagen/internal'; @@ -25,12 +24,8 @@ export interface ApiSettings { apiKey: string; project: string; appId: string; - automaticDataCollectionEnabled?: boolean; - /** - * @deprecated Use `backend.location` instead. - */ location: string; - backend: Backend; + automaticDataCollectionEnabled?: boolean; getAuthToken?: () => Promise; getAppCheckToken?: () => Promise; } diff --git a/packages/ai/src/types/requests.ts b/packages/vertexai/src/types/requests.ts similarity index 96% rename from packages/ai/src/types/requests.ts rename to packages/vertexai/src/types/requests.ts index 67f45095c2a..ee45b636673 100644 --- a/packages/ai/src/types/requests.ts +++ b/packages/vertexai/src/types/requests.ts @@ -64,13 +64,6 @@ export interface GenerateContentRequest extends BaseParams { export interface SafetySetting { category: HarmCategory; threshold: HarmBlockThreshold; - /** - * The harm block method. - * - * This property is only supported in the Vertex AI Gemini API ({@link VertexAIBackend}). - * When using the Gemini Developer API ({@link GoogleAIBackend}), an {@link AIError} will be - * thrown if this property is defined. - */ method?: HarmBlockMethod; } diff --git a/packages/ai/src/types/responses.ts b/packages/vertexai/src/types/responses.ts similarity index 78% rename from packages/ai/src/types/responses.ts rename to packages/vertexai/src/types/responses.ts index e33b8a86bd3..e4a247bec49 100644 --- a/packages/ai/src/types/responses.ts +++ b/packages/vertexai/src/types/responses.ts @@ -117,11 +117,6 @@ export interface ModalityTokenCount { export interface PromptFeedback { blockReason?: BlockReason; safetyRatings: SafetyRating[]; - /** - * A human-readable description of the `blockReason`. - * - * This property is only supported in the Vertex AI Gemini API ({@link VertexAIBackend}). - */ blockReasonMessage?: string; } @@ -156,17 +151,7 @@ export interface Citation { endIndex?: number; uri?: string; license?: string; - /** - * The title of the cited source, if available. - * - * This property is only supported in the Vertex AI Gemini API ({@link VertexAIBackend}). - */ title?: string; - /** - * The publication date of the cited source, if available. - * - * This property is only supported in the Vertex AI Gemini API ({@link VertexAIBackend}). - */ publicationDate?: Date; } @@ -236,26 +221,8 @@ export interface Date { export interface SafetyRating { category: HarmCategory; probability: HarmProbability; - /** - * The harm severity level. - * - * This property is only supported when using the Vertex AI Gemini API ({@link VertexAIBackend}). - * When using the Gemini Developer API ({@link GoogleAIBackend}), this property is not supported and will default to `HarmSeverity.UNSUPPORTED`. - */ severity: HarmSeverity; - /** - * The probability score of the harm category. - * - * This property is only supported when using the Vertex AI Gemini API ({@link VertexAIBackend}). - * When using the Gemini Developer API ({@link GoogleAIBackend}), this property is not supported and will default to 0. - */ probabilityScore: number; - /** - * The severity score of the harm category. - * - * This property is only supported when using the Vertex AI Gemini API ({@link VertexAIBackend}). - * When using the Gemini Developer API ({@link GoogleAIBackend}), this property is not supported and will default to 0. - */ severityScore: number; blocked: boolean; } @@ -272,9 +239,6 @@ export interface CountTokensResponse { /** * The total number of billable characters counted across all instances * from the request. - * - * This property is only supported when using the Vertex AI Gemini API ({@link VertexAIBackend}). - * When using the Gemini Developer API ({@link GoogleAIBackend}), this property is not supported and will default to 0. */ totalBillableCharacters?: number; /** diff --git a/packages/ai/src/types/schema.ts b/packages/vertexai/src/types/schema.ts similarity index 92% rename from packages/ai/src/types/schema.ts rename to packages/vertexai/src/types/schema.ts index e9fe9286b61..5c23655be0e 100644 --- a/packages/ai/src/types/schema.ts +++ b/packages/vertexai/src/types/schema.ts @@ -42,10 +42,7 @@ export enum SchemaType { * @public */ export interface SchemaShared { - /** Optional. The format of the property. - * When using the Gemini Developer API ({@link GoogleAIBackend}), this must be either `'enum'` or - * `'date-time'`, otherwise requests will fail. - */ + /** Optional. The format of the property. */ format?: string; /** Optional. The description of the property. */ description?: string; diff --git a/packages/ai/test-utils/base64cat.ts b/packages/vertexai/test-utils/base64cat.ts similarity index 100% rename from packages/ai/test-utils/base64cat.ts rename to packages/vertexai/test-utils/base64cat.ts diff --git a/packages/ai/test-utils/cat.jpeg b/packages/vertexai/test-utils/cat.jpeg similarity index 100% rename from packages/ai/test-utils/cat.jpeg rename to packages/vertexai/test-utils/cat.jpeg diff --git a/packages/ai/test-utils/cat.png b/packages/vertexai/test-utils/cat.png similarity index 100% rename from packages/ai/test-utils/cat.png rename to packages/vertexai/test-utils/cat.png diff --git a/packages/ai/test-utils/convert-mocks.ts b/packages/vertexai/test-utils/convert-mocks.ts similarity index 97% rename from packages/ai/test-utils/convert-mocks.ts rename to packages/vertexai/test-utils/convert-mocks.ts index 4bac70d1d10..8690af4ac72 100644 --- a/packages/ai/test-utils/convert-mocks.ts +++ b/packages/vertexai/test-utils/convert-mocks.ts @@ -47,7 +47,7 @@ function generateMockLookupFile(): void { const fileText = ` /** - * DO NOT EDIT - This file was generated by the packages/ai/test-utils/convert-mocks.ts script. + * DO NOT EDIT - This file was generated by the packages/vertexai/test-utils/convert-mocks.ts script. * * These objects map mock response filenames to their JSON contents. * diff --git a/packages/ai/test-utils/mock-response.ts b/packages/vertexai/test-utils/mock-response.ts similarity index 100% rename from packages/ai/test-utils/mock-response.ts rename to packages/vertexai/test-utils/mock-response.ts diff --git a/packages/ai/tsconfig.json b/packages/vertexai/tsconfig.json similarity index 100% rename from packages/ai/tsconfig.json rename to packages/vertexai/tsconfig.json diff --git a/scripts/docgen/docgen.ts b/scripts/docgen/docgen.ts index 811570decd1..113e4a6b339 100644 --- a/scripts/docgen/docgen.ts +++ b/scripts/docgen/docgen.ts @@ -60,7 +60,7 @@ const PREFERRED_PARAMS = [ 'performance', 'remoteConfig', 'storage', - 'ai' + 'vertexAI' ]; let authApiReportOriginal: string; diff --git a/scripts/update_vertexai_responses.sh b/scripts/update_vertexai_responses.sh index 680a71ff776..bf55a645a66 100755 --- a/scripts/update_vertexai_responses.sh +++ b/scripts/update_vertexai_responses.sh @@ -17,11 +17,11 @@ # This script replaces mock response files for Vertex AI unit tests with a fresh # clone of the shared repository of Vertex AI test data. -RESPONSES_VERSION='v11.*' # The major version of mock responses to use +RESPONSES_VERSION='v10.*' # The major version of mock responses to use REPO_NAME="vertexai-sdk-test-data" REPO_LINK="https://github.com/FirebaseExtended/$REPO_NAME.git" -cd "$(dirname "$0")/../packages/ai/test-utils" || exit +cd "$(dirname "$0")/../packages/vertexai/test-utils" || exit rm -rf "$REPO_NAME" git clone "$REPO_LINK" --quiet || exit cd "$REPO_NAME" || exit