@firebase/ai 2.3.0-canary.ea8512812 → 2.4.0-20251007135320

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.
@@ -81,7 +81,7 @@ export declare function getGenerativeModel(ai: AI, modelParams: ModelParams | Hy
81
81
  * @throws If the `apiKey` or `projectId` fields are missing in your
82
82
  * Firebase config.
83
83
  *
84
- * @beta
84
+ * @public
85
85
  */
86
86
  export declare function getImagenModel(ai: AI, modelParams: ImagenModelParams, requestOptions?: RequestOptions): ImagenModel;
87
87
  /**
@@ -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 { LiveServerToolCall, Part } from '../types';
17
+ import { FunctionCall, FunctionResponse } from '../types';
18
18
  import { LiveSession } from './live-session';
19
19
  /**
20
20
  * A controller for managing an active audio conversation.
@@ -39,7 +39,7 @@ export interface StartAudioConversationOptions {
39
39
  * The handler should perform the function call and return the result as a `Part`,
40
40
  * which will then be sent back to the model.
41
41
  */
42
- functionCallingHandler?: (functionCalls: LiveServerToolCall['functionCalls']) => Promise<Part>;
42
+ functionCallingHandler?: (functionCalls: FunctionCall[]) => Promise<FunctionResponse>;
43
43
  }
44
44
  /**
45
45
  * Dependencies needed by the {@link AudioConversationRunner}.
@@ -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 { GenerativeContentBlob, LiveServerContent, LiveServerToolCall, LiveServerToolCallCancellation, Part } from '../public-types';
17
+ import { FunctionResponse, GenerativeContentBlob, LiveServerContent, LiveServerToolCall, LiveServerToolCallCancellation, Part } from '../public-types';
18
18
  import { WebSocketHandler } from '../websocket';
19
19
  /**
20
20
  * Represents an active, real-time, bidirectional conversation with the model.
@@ -61,6 +61,15 @@ export declare class LiveSession {
61
61
  * @beta
62
62
  */
63
63
  sendMediaChunks(mediaChunks: GenerativeContentBlob[]): Promise<void>;
64
+ /**
65
+ * Sends function responses to the server.
66
+ *
67
+ * @param functionResponses - The function responses to send.
68
+ * @throws If this session has been closed.
69
+ *
70
+ * @beta
71
+ */
72
+ sendFunctionResponses(functionResponses: FunctionResponse[]): Promise<void>;
64
73
  /**
65
74
  * Sends a stream of {@link GenerativeContentBlob}.
66
75
  *
@@ -37,7 +37,7 @@ import { AIModel } from './ai-model';
37
37
  * }
38
38
  * ```
39
39
  *
40
- * @beta
40
+ * @public
41
41
  */
42
42
  export declare class ImagenModel extends AIModel {
43
43
  requestOptions?: RequestOptions | undefined;
@@ -76,7 +76,7 @@ export declare class ImagenModel extends AIModel {
76
76
  * returned object will have a `filteredReason` property.
77
77
  * If all images are filtered, the `images` array will be empty.
78
78
  *
79
- * @beta
79
+ * @public
80
80
  */
81
81
  generateImages(prompt: string): Promise<ImagenGenerationResponse<ImagenInlineImage>>;
82
82
  /**
@@ -29,7 +29,7 @@
29
29
  * }
30
30
  * ```
31
31
  *
32
- * @beta
32
+ * @public
33
33
  */
34
34
  export declare class ImagenImageFormat {
35
35
  /**
@@ -47,7 +47,7 @@ export declare class ImagenImageFormat {
47
47
  * @param compressionQuality - The level of compression (a number between 0 and 100).
48
48
  * @returns An {@link ImagenImageFormat} object for a JPEG image.
49
49
  *
50
- * @beta
50
+ * @public
51
51
  */
52
52
  static jpeg(compressionQuality?: number): ImagenImageFormat;
53
53
  /**
@@ -55,7 +55,7 @@ export declare class ImagenImageFormat {
55
55
  *
56
56
  * @returns An {@link ImagenImageFormat} object for a PNG image.
57
57
  *
58
- * @beta
58
+ * @public
59
59
  */
60
60
  static png(): ImagenImageFormat;
61
61
  }
@@ -18,7 +18,7 @@ import { ImagenImageFormat } from '../../requests/imagen-image-format';
18
18
  /**
19
19
  * Parameters for configuring an {@link ImagenModel}.
20
20
  *
21
- * @beta
21
+ * @public
22
22
  */
23
23
  export interface ImagenModelParams {
24
24
  /**
@@ -46,7 +46,7 @@ export interface ImagenModelParams {
46
46
  * See the {@link http://firebase.google.com/docs/vertex-ai/generate-images-imagen | documentation} for
47
47
  * more details.
48
48
  *
49
- * @beta
49
+ * @public
50
50
  */
51
51
  export interface ImagenGenerationConfig {
52
52
  /**
@@ -104,7 +104,7 @@ export interface ImagenGenerationConfig {
104
104
  * and the {@link https://cloud.google.com/vertex-ai/generative-ai/docs/image/responsible-ai-imagen#safety-filters | Responsible AI and usage guidelines}
105
105
  * for more details.
106
106
  *
107
- * @beta
107
+ * @public
108
108
  */
109
109
  export declare const ImagenSafetyFilterLevel: {
110
110
  /**
@@ -137,7 +137,7 @@ export declare const ImagenSafetyFilterLevel: {
137
137
  * and the {@link https://cloud.google.com/vertex-ai/generative-ai/docs/image/responsible-ai-imagen#safety-filters | Responsible AI and usage guidelines}
138
138
  * for more details.
139
139
  *
140
- * @beta
140
+ * @public
141
141
  */
142
142
  export type ImagenSafetyFilterLevel = (typeof ImagenSafetyFilterLevel)[keyof typeof ImagenSafetyFilterLevel];
143
143
  /**
@@ -146,7 +146,7 @@ export type ImagenSafetyFilterLevel = (typeof ImagenSafetyFilterLevel)[keyof typ
146
146
  * See the <a href="http://firebase.google.com/docs/vertex-ai/generate-images">personGeneration</a>
147
147
  * documentation for more details.
148
148
  *
149
- * @beta
149
+ * @public
150
150
  */
151
151
  export declare const ImagenPersonFilterLevel: {
152
152
  /**
@@ -176,7 +176,7 @@ export declare const ImagenPersonFilterLevel: {
176
176
  * See the <a href="http://firebase.google.com/docs/vertex-ai/generate-images">personGeneration</a>
177
177
  * documentation for more details.
178
178
  *
179
- * @beta
179
+ * @public
180
180
  */
181
181
  export type ImagenPersonFilterLevel = (typeof ImagenPersonFilterLevel)[keyof typeof ImagenPersonFilterLevel];
182
182
  /**
@@ -185,7 +185,7 @@ export type ImagenPersonFilterLevel = (typeof ImagenPersonFilterLevel)[keyof typ
185
185
  * See the {@link http://firebase.google.com/docs/vertex-ai/generate-images | documentation }
186
186
  * for more details.
187
187
  *
188
- * @beta
188
+ * @public
189
189
  */
190
190
  export interface ImagenSafetySettings {
191
191
  /**
@@ -207,7 +207,7 @@ export interface ImagenSafetySettings {
207
207
  * See the {@link http://firebase.google.com/docs/vertex-ai/generate-images | documentation }
208
208
  * for more details and examples of the supported aspect ratios.
209
209
  *
210
- * @beta
210
+ * @public
211
211
  */
212
212
  export declare const ImagenAspectRatio: {
213
213
  /**
@@ -240,6 +240,6 @@ export declare const ImagenAspectRatio: {
240
240
  * See the {@link http://firebase.google.com/docs/vertex-ai/generate-images | documentation }
241
241
  * for more details and examples of the supported aspect ratios.
242
242
  *
243
- * @beta
243
+ * @public
244
244
  */
245
245
  export type ImagenAspectRatio = (typeof ImagenAspectRatio)[keyof typeof ImagenAspectRatio];
@@ -17,7 +17,7 @@
17
17
  /**
18
18
  * An image generated by Imagen, represented as inline data.
19
19
  *
20
- * @beta
20
+ * @public
21
21
  */
22
22
  export interface ImagenInlineImage {
23
23
  /**
@@ -35,7 +35,7 @@ export interface ImagenInlineImage {
35
35
  * An image generated by Imagen, stored in a Cloud Storage for Firebase bucket.
36
36
  *
37
37
  * This feature is not available yet.
38
- * @beta
38
+ * @public
39
39
  */
40
40
  export interface ImagenGCSImage {
41
41
  /**
@@ -54,7 +54,7 @@ export interface ImagenGCSImage {
54
54
  /**
55
55
  * The response from a request to generate images with Imagen.
56
56
  *
57
- * @beta
57
+ * @public
58
58
  */
59
59
  export interface ImagenGenerationResponse<T extends ImagenInlineImage | ImagenGCSImage> {
60
60
  /**
@@ -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 { Content, GenerativeContentBlob, Part } from './content';
17
+ import { Content, FunctionResponse, GenerativeContentBlob, Part } from './content';
18
18
  import { LiveGenerationConfig, Tool, ToolConfig } from './requests';
19
19
  /**
20
20
  * User input that is sent to the model.
@@ -37,6 +37,14 @@ export interface _LiveClientRealtimeInput {
37
37
  mediaChunks: GenerativeContentBlob[];
38
38
  };
39
39
  }
40
+ /**
41
+ * Function responses that are sent to the model in real time.
42
+ */
43
+ export interface _LiveClientToolResponse {
44
+ toolResponse: {
45
+ functionResponses: FunctionResponse[];
46
+ };
47
+ }
40
48
  /**
41
49
  * The first message in a Live session, used to configure generation options.
42
50
  *
package/dist/index.cjs.js CHANGED
@@ -8,7 +8,7 @@ var util = require('@firebase/util');
8
8
  var logger$1 = require('@firebase/logger');
9
9
 
10
10
  var name = "@firebase/ai";
11
- var version = "2.3.0-canary.ea8512812";
11
+ var version = "2.4.0-20251007135320";
12
12
 
13
13
  /**
14
14
  * @license
@@ -585,7 +585,7 @@ const SchemaType = {
585
585
  * and the {@link https://cloud.google.com/vertex-ai/generative-ai/docs/image/responsible-ai-imagen#safety-filters | Responsible AI and usage guidelines}
586
586
  * for more details.
587
587
  *
588
- * @beta
588
+ * @public
589
589
  */
590
590
  const ImagenSafetyFilterLevel = {
591
591
  /**
@@ -614,7 +614,7 @@ const ImagenSafetyFilterLevel = {
614
614
  * See the <a href="http://firebase.google.com/docs/vertex-ai/generate-images">personGeneration</a>
615
615
  * documentation for more details.
616
616
  *
617
- * @beta
617
+ * @public
618
618
  */
619
619
  const ImagenPersonFilterLevel = {
620
620
  /**
@@ -647,7 +647,7 @@ const ImagenPersonFilterLevel = {
647
647
  * See the {@link http://firebase.google.com/docs/vertex-ai/generate-images | documentation }
648
648
  * for more details and examples of the supported aspect ratios.
649
649
  *
650
- * @beta
650
+ * @public
651
651
  */
652
652
  const ImagenAspectRatio = {
653
653
  /**
@@ -2850,6 +2850,25 @@ class LiveSession {
2850
2850
  this.webSocketHandler.send(JSON.stringify(message));
2851
2851
  });
2852
2852
  }
2853
+ /**
2854
+ * Sends function responses to the server.
2855
+ *
2856
+ * @param functionResponses - The function responses to send.
2857
+ * @throws If this session has been closed.
2858
+ *
2859
+ * @beta
2860
+ */
2861
+ async sendFunctionResponses(functionResponses) {
2862
+ if (this.isClosed) {
2863
+ throw new AIError(AIErrorCode.REQUEST_ERROR, 'This LiveSession has been closed and cannot be used.');
2864
+ }
2865
+ const message = {
2866
+ toolResponse: {
2867
+ functionResponses
2868
+ }
2869
+ };
2870
+ this.webSocketHandler.send(JSON.stringify(message));
2871
+ }
2853
2872
  /**
2854
2873
  * Sends a stream of {@link GenerativeContentBlob}.
2855
2874
  *
@@ -3064,7 +3083,7 @@ class LiveGenerativeModel extends AIModel {
3064
3083
  * }
3065
3084
  * ```
3066
3085
  *
3067
- * @beta
3086
+ * @public
3068
3087
  */
3069
3088
  class ImagenModel extends AIModel {
3070
3089
  /**
@@ -3100,7 +3119,7 @@ class ImagenModel extends AIModel {
3100
3119
  * returned object will have a `filteredReason` property.
3101
3120
  * If all images are filtered, the `images` array will be empty.
3102
3121
  *
3103
- * @beta
3122
+ * @public
3104
3123
  */
3105
3124
  async generateImages(prompt) {
3106
3125
  const body = createPredictRequestBody(prompt, {
@@ -3563,7 +3582,7 @@ class AnyOfSchema extends Schema {
3563
3582
  * }
3564
3583
  * ```
3565
3584
  *
3566
- * @beta
3585
+ * @public
3567
3586
  */
3568
3587
  class ImagenImageFormat {
3569
3588
  constructor() {
@@ -3575,7 +3594,7 @@ class ImagenImageFormat {
3575
3594
  * @param compressionQuality - The level of compression (a number between 0 and 100).
3576
3595
  * @returns An {@link ImagenImageFormat} object for a JPEG image.
3577
3596
  *
3578
- * @beta
3597
+ * @public
3579
3598
  */
3580
3599
  static jpeg(compressionQuality) {
3581
3600
  if (compressionQuality &&
@@ -3589,7 +3608,7 @@ class ImagenImageFormat {
3589
3608
  *
3590
3609
  * @returns An {@link ImagenImageFormat} object for a PNG image.
3591
3610
  *
3592
- * @beta
3611
+ * @public
3593
3612
  */
3594
3613
  static png() {
3595
3614
  return { mimeType: 'image/png' };
@@ -3831,9 +3850,9 @@ class AudioConversationRunner {
3831
3850
  }
3832
3851
  else {
3833
3852
  try {
3834
- const resultPart = await this.options.functionCallingHandler(message.functionCalls);
3853
+ const functionResponse = await this.options.functionCallingHandler(message.functionCalls);
3835
3854
  if (!this.isStopped) {
3836
- void this.liveSession.send([resultPart]);
3855
+ void this.liveSession.sendFunctionResponses([functionResponse]);
3837
3856
  }
3838
3857
  }
3839
3858
  catch (e) {
@@ -4053,7 +4072,7 @@ function getGenerativeModel(ai, modelParams, requestOptions) {
4053
4072
  * @throws If the `apiKey` or `projectId` fields are missing in your
4054
4073
  * Firebase config.
4055
4074
  *
4056
- * @beta
4075
+ * @public
4057
4076
  */
4058
4077
  function getImagenModel(ai, modelParams, requestOptions) {
4059
4078
  if (!modelParams.model) {