@firebase/ai 2.1.0-canary.44d8d742f → 2.1.0-canary.84b8bed35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,10 +3,13 @@
3
3
  *
4
4
  * @packageDocumentation
5
5
  */
6
+ import { AIService } from './service';
7
+ import { ComponentContainer, InstanceFactoryOptions } from '@firebase/component';
6
8
  declare global {
7
9
  interface Window {
8
10
  [key: string]: unknown;
9
11
  }
10
12
  }
13
+ export declare function factory(container: ComponentContainer, { instanceIdentifier }: InstanceFactoryOptions): AIService;
11
14
  export * from './api';
12
15
  export * from './public-types';
@@ -34,24 +34,25 @@ export declare class ChromeAdapterImpl implements ChromeAdapter {
34
34
  /**
35
35
  * Checks if a given request can be made on-device.
36
36
  *
37
- * <ol>Encapsulates a few concerns:
38
- * <li>the mode</li>
39
- * <li>API existence</li>
40
- * <li>prompt formatting</li>
41
- * <li>model availability, including triggering download if necessary</li>
42
- * </ol>
37
+ * Encapsulates a few concerns:
38
+ * the mode
39
+ * API existence
40
+ * prompt formatting
41
+ * model availability, including triggering download if necessary
43
42
  *
44
- * <p>Pros: callers needn't be concerned with details of on-device availability.</p>
45
- * <p>Cons: this method spans a few concerns and splits request validation from usage.
43
+ *
44
+ * Pros: callers needn't be concerned with details of on-device availability.</p>
45
+ * Cons: this method spans a few concerns and splits request validation from usage.
46
46
  * If instance variables weren't already part of the API, we could consider a better
47
- * separation of concerns.</p>
47
+ * separation of concerns.
48
48
  */
49
49
  isAvailable(request: GenerateContentRequest): Promise<boolean>;
50
50
  /**
51
51
  * Generates content on device.
52
52
  *
53
- * <p>This is comparable to {@link GenerativeModel.generateContent} for generating content in
54
- * Cloud.</p>
53
+ * @remarks
54
+ * This is comparable to {@link GenerativeModel.generateContent} for generating content in
55
+ * Cloud.
55
56
  * @param request - a standard Firebase AI {@link GenerateContentRequest}
56
57
  * @returns {@link Response}, so we can reuse common response formatting.
57
58
  */
@@ -59,8 +60,9 @@ export declare class ChromeAdapterImpl implements ChromeAdapter {
59
60
  /**
60
61
  * Generates content stream on device.
61
62
  *
62
- * <p>This is comparable to {@link GenerativeModel.generateContentStream} for generating content in
63
- * Cloud.</p>
63
+ * @remarks
64
+ * This is comparable to {@link GenerativeModel.generateContentStream} for generating content in
65
+ * Cloud.
64
66
  * @param request - a standard Firebase AI {@link GenerateContentRequest}
65
67
  * @returns {@link Response}, so we can reuse common response formatting.
66
68
  */
@@ -77,11 +79,11 @@ export declare class ChromeAdapterImpl implements ChromeAdapter {
77
79
  /**
78
80
  * Triggers out-of-band download of an on-device model.
79
81
  *
80
- * <p>Chrome only downloads models as needed. Chrome knows a model is needed when code calls
81
- * LanguageModel.create.</p>
82
+ * Chrome only downloads models as needed. Chrome knows a model is needed when code calls
83
+ * LanguageModel.create.
82
84
  *
83
- * <p>Since Chrome manages the download, the SDK can only avoid redundant download requests by
84
- * tracking if a download has previously been requested.</p>
85
+ * Since Chrome manages the download, the SDK can only avoid redundant download requests by
86
+ * tracking if a download has previously been requested.
85
87
  */
86
88
  private download;
87
89
  /**
@@ -99,12 +101,12 @@ export declare class ChromeAdapterImpl implements ChromeAdapter {
99
101
  /**
100
102
  * Abstracts Chrome session creation.
101
103
  *
102
- * <p>Chrome uses a multi-turn session for all inference. Firebase AI uses single-turn for all
104
+ * Chrome uses a multi-turn session for all inference. Firebase AI uses single-turn for all
103
105
  * inference. To map the Firebase AI API to Chrome's API, the SDK creates a new session for all
104
- * inference.</p>
106
+ * inference.
105
107
  *
106
- * <p>Chrome will remove a model from memory if it's no longer in use, so this method ensures a
107
- * new session is created before an old session is destroyed.</p>
108
+ * Chrome will remove a model from memory if it's no longer in use, so this method ensures a
109
+ * new session is created before an old session is destroyed.
108
110
  */
109
111
  private createSession;
110
112
  /**
@@ -33,7 +33,7 @@ export declare abstract class AIModel {
33
33
  /**
34
34
  * @internal
35
35
  */
36
- protected _apiSettings: ApiSettings;
36
+ _apiSettings: ApiSettings;
37
37
  /**
38
38
  * Constructs a new instance of the {@link AIModel} class.
39
39
  *
@@ -35,6 +35,10 @@ export interface AI {
35
35
  * Vertex AI Gemini API (using {@link VertexAIBackend}).
36
36
  */
37
37
  backend: Backend;
38
+ /**
39
+ * Options applied to this {@link AI} instance.
40
+ */
41
+ options?: AIOptions;
38
42
  /**
39
43
  * @deprecated use `AI.backend.location` instead.
40
44
  *
@@ -83,6 +87,11 @@ export type BackendType = (typeof BackendType)[keyof typeof BackendType];
83
87
  export interface AIOptions {
84
88
  /**
85
89
  * The backend configuration to use for the AI service instance.
90
+ * Defaults to the Gemini Developer API backend ({@link GoogleAIBackend}).
86
91
  */
87
- backend: Backend;
92
+ backend?: Backend;
93
+ /**
94
+ * Whether to use App Check limited use tokens. Defaults to false.
95
+ */
96
+ useLimitedUseAppCheckTokens?: boolean;
88
97
  }
@@ -14,7 +14,7 @@
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
16
  */
17
- import { EnhancedGenerateContentResponse, FunctionCall, GenerateContentResponse, ImagenGCSImage, ImagenInlineImage, InlineDataPart } from '../types';
17
+ import { EnhancedGenerateContentResponse, FunctionCall, GenerateContentResponse, ImagenGCSImage, ImagenInlineImage, InlineDataPart, Part } from '../types';
18
18
  /**
19
19
  * Creates an EnhancedGenerateContentResponse object that has helper functions and
20
20
  * other modifications that improve usability.
@@ -26,15 +26,19 @@ export declare function createEnhancedContentResponse(response: GenerateContentR
26
26
  */
27
27
  export declare function addHelpers(response: GenerateContentResponse): EnhancedGenerateContentResponse;
28
28
  /**
29
- * Returns all text found in all parts of first candidate.
29
+ * Returns all text from the first candidate's parts, filtering by whether
30
+ * `partFilter()` returns true.
31
+ *
32
+ * @param response - The `GenerateContentResponse` from which to extract text.
33
+ * @param partFilter - Only return `Part`s for which this returns true
30
34
  */
31
- export declare function getText(response: GenerateContentResponse): string;
35
+ export declare function getText(response: GenerateContentResponse, partFilter: (part: Part) => boolean): string;
32
36
  /**
33
- * Returns {@link FunctionCall}s associated with first candidate.
37
+ * Returns every {@link FunctionCall} associated with first candidate.
34
38
  */
35
39
  export declare function getFunctionCalls(response: GenerateContentResponse): FunctionCall[] | undefined;
36
40
  /**
37
- * Returns {@link InlineDataPart}s in the first candidate if present.
41
+ * Returns every {@link InlineDataPart} in the first candidate if present.
38
42
  *
39
43
  * @internal
40
44
  */
@@ -15,7 +15,7 @@
15
15
  * limitations under the License.
16
16
  */
17
17
  import { FirebaseApp, _FirebaseService } from '@firebase/app';
18
- import { AI } from './public-types';
18
+ import { AI, AIOptions } from './public-types';
19
19
  import { AppCheckInternalComponentName, FirebaseAppCheckInternal } from '@firebase/app-check-interop-types';
20
20
  import { Provider } from '@firebase/component';
21
21
  import { FirebaseAuthInternal, FirebaseAuthInternalName } from '@firebase/auth-interop-types';
@@ -25,7 +25,10 @@ export declare class AIService implements AI, _FirebaseService {
25
25
  backend: Backend;
26
26
  auth: FirebaseAuthInternal | null;
27
27
  appCheck: FirebaseAppCheckInternal | null;
28
+ _options?: Omit<AIOptions, 'backend'>;
28
29
  location: string;
29
30
  constructor(app: FirebaseApp, backend: Backend, authProvider?: Provider<FirebaseAuthInternalName>, appCheckProvider?: Provider<AppCheckInternalComponentName>);
30
31
  _delete(): Promise<void>;
32
+ set options(optionsToSet: AIOptions);
33
+ get options(): AIOptions | undefined;
31
34
  }
@@ -34,16 +34,18 @@ export interface ChromeAdapter {
34
34
  /**
35
35
  * Generates content using on-device inference.
36
36
  *
37
- * <p>This is comparable to {@link GenerativeModel.generateContent} for generating
38
- * content using in-cloud inference.</p>
37
+ * @remarks
38
+ * This is comparable to {@link GenerativeModel.generateContent} for generating
39
+ * content using in-cloud inference.
39
40
  * @param request - a standard Firebase AI {@link GenerateContentRequest}
40
41
  */
41
42
  generateContent(request: GenerateContentRequest): Promise<Response>;
42
43
  /**
43
44
  * Generates a content stream using on-device inference.
44
45
  *
45
- * <p>This is comparable to {@link GenerativeModel.generateContentStream} for generating
46
- * a content stream using in-cloud inference.</p>
46
+ * @remarks
47
+ * This is comparable to {@link GenerativeModel.generateContentStream} for generating
48
+ * a content stream using in-cloud inference.
47
49
  * @param request - a standard Firebase AI {@link GenerateContentRequest}
48
50
  */
49
51
  generateContentStream(request: GenerateContentRequest): Promise<Response>;
@@ -38,6 +38,11 @@ export interface TextPart {
38
38
  inlineData?: never;
39
39
  functionCall?: never;
40
40
  functionResponse?: never;
41
+ thought?: boolean;
42
+ /**
43
+ * @internal
44
+ */
45
+ thoughtSignature?: string;
41
46
  }
42
47
  /**
43
48
  * Content part interface if the part represents an image.
@@ -52,6 +57,11 @@ export interface InlineDataPart {
52
57
  * Applicable if `inlineData` is a video.
53
58
  */
54
59
  videoMetadata?: VideoMetadata;
60
+ thought?: boolean;
61
+ /**
62
+ * @internal
63
+ */
64
+ thoughtSignature?: never;
55
65
  }
56
66
  /**
57
67
  * Describes the input video content.
@@ -78,6 +88,11 @@ export interface FunctionCallPart {
78
88
  inlineData?: never;
79
89
  functionCall: FunctionCall;
80
90
  functionResponse?: never;
91
+ thought?: boolean;
92
+ /**
93
+ * @internal
94
+ */
95
+ thoughtSignature?: never;
81
96
  }
82
97
  /**
83
98
  * Content part interface if the part represents {@link FunctionResponse}.
@@ -88,6 +103,11 @@ export interface FunctionResponsePart {
88
103
  inlineData?: never;
89
104
  functionCall?: never;
90
105
  functionResponse: FunctionResponse;
106
+ thought?: boolean;
107
+ /**
108
+ * @internal
109
+ */
110
+ thoughtSignature?: never;
91
111
  }
92
112
  /**
93
113
  * Content part interface if the part represents {@link FileData}
@@ -99,6 +119,11 @@ export interface FileDataPart {
99
119
  functionCall?: never;
100
120
  functionResponse?: never;
101
121
  fileData: FileData;
122
+ thought?: boolean;
123
+ /**
124
+ * @internal
125
+ */
126
+ thoughtSignature?: never;
102
127
  }
103
128
  /**
104
129
  * A predicted {@link FunctionCall} returned from the model
@@ -146,7 +146,10 @@ export interface RequestOptions {
146
146
  */
147
147
  timeout?: number;
148
148
  /**
149
- * Base url for endpoint. Defaults to https://firebasevertexai.googleapis.com
149
+ * Base url for endpoint. Defaults to
150
+ * https://firebasevertexai.googleapis.com, which is the
151
+ * {@link https://console.cloud.google.com/apis/library/firebasevertexai.googleapis.com?project=_ | Firebase AI Logic API}
152
+ * (used regardless of your chosen Gemini API provider).
150
153
  */
151
154
  baseUrl?: string;
152
155
  }
@@ -302,4 +305,13 @@ export interface ThinkingConfig {
302
305
  * feature or if the specified budget is not within the model's supported range.
303
306
  */
304
307
  thinkingBudget?: number;
308
+ /**
309
+ * Whether to include "thought summaries" in the model's response.
310
+ *
311
+ * @remarks
312
+ * Thought summaries provide a brief overview of the model's internal thinking process,
313
+ * offering insight into how it arrived at the final answer. This can be useful for
314
+ * debugging, understanding the model's reasoning, and verifying its accuracy.
315
+ */
316
+ includeThoughts?: boolean;
305
317
  }
@@ -48,15 +48,34 @@ export interface EnhancedGenerateContentResponse extends GenerateContentResponse
48
48
  */
49
49
  text: () => string;
50
50
  /**
51
- * Aggregates and returns all {@link InlineDataPart}s from the {@link GenerateContentResponse}'s
52
- * first candidate.
53
- *
54
- * @returns An array of {@link InlineDataPart}s containing data from the response, if available.
51
+ * Aggregates and returns every {@link InlineDataPart} from the first candidate of
52
+ * {@link GenerateContentResponse}.
55
53
  *
56
54
  * @throws If the prompt or candidate was blocked.
57
55
  */
58
56
  inlineDataParts: () => InlineDataPart[] | undefined;
57
+ /**
58
+ * Aggregates and returns every {@link FunctionCall} from the first candidate of
59
+ * {@link GenerateContentResponse}.
60
+ *
61
+ * @throws If the prompt or candidate was blocked.
62
+ */
59
63
  functionCalls: () => FunctionCall[] | undefined;
64
+ /**
65
+ * Aggregates and returns every {@link TextPart} with their `thought` property set
66
+ * to `true` from the first candidate of {@link GenerateContentResponse}.
67
+ *
68
+ * @throws If the prompt or candidate was blocked.
69
+ *
70
+ * @remarks
71
+ * Thought summaries provide a brief overview of the model's internal thinking process,
72
+ * offering insight into how it arrived at the final answer. This can be useful for
73
+ * debugging, understanding the model's reasoning, and verifying its accuracy.
74
+ *
75
+ * Thoughts will only be included if {@link ThinkingConfig.includeThoughts} is
76
+ * set to `true`.
77
+ */
78
+ thoughtSummary: () => string | undefined;
60
79
  }
61
80
  /**
62
81
  * Individual response from {@link GenerativeModel.generateContent} and