@firebase/ai 2.4.0-canary.b7e18d0ff → 2.4.0-canary.c8263c471
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.
- package/dist/ai-public.d.ts +23 -0
- package/dist/ai.d.ts +23 -0
- package/dist/esm/index.esm.js +54 -23
- package/dist/esm/index.esm.js.map +1 -1
- package/dist/esm/src/requests/hybrid-helpers.d.ts +7 -2
- package/dist/esm/src/requests/response-helpers.d.ts +2 -2
- package/dist/esm/src/requests/stream-reader.d.ts +2 -1
- package/dist/esm/src/types/enums.d.ts +15 -0
- package/dist/esm/src/types/responses.d.ts +7 -1
- package/dist/index.cjs.js +54 -22
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.node.cjs.js +54 -22
- package/dist/index.node.cjs.js.map +1 -1
- package/dist/index.node.mjs +54 -23
- package/dist/index.node.mjs.map +1 -1
- package/dist/src/requests/hybrid-helpers.d.ts +7 -2
- package/dist/src/requests/response-helpers.d.ts +2 -2
- package/dist/src/requests/stream-reader.d.ts +2 -1
- package/dist/src/types/enums.d.ts +15 -0
- package/dist/src/types/responses.d.ts +7 -1
- package/package.json +8 -8
package/dist/index.node.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.4.0-canary.
|
|
11
|
+
var version = "2.4.0-canary.c8263c471";
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* @license
|
|
@@ -327,6 +327,15 @@ const InferenceMode = {
|
|
|
327
327
|
'ONLY_IN_CLOUD': 'only_in_cloud',
|
|
328
328
|
'PREFER_IN_CLOUD': 'prefer_in_cloud'
|
|
329
329
|
};
|
|
330
|
+
/**
|
|
331
|
+
* Indicates whether inference happened on-device or in-cloud.
|
|
332
|
+
*
|
|
333
|
+
* @beta
|
|
334
|
+
*/
|
|
335
|
+
const InferenceSource = {
|
|
336
|
+
'ON_DEVICE': 'on_device',
|
|
337
|
+
'IN_CLOUD': 'in_cloud'
|
|
338
|
+
};
|
|
330
339
|
/**
|
|
331
340
|
* Represents the result of the code execution.
|
|
332
341
|
*
|
|
@@ -1273,7 +1282,7 @@ function hasValidCandidates(response) {
|
|
|
1273
1282
|
* Creates an EnhancedGenerateContentResponse object that has helper functions and
|
|
1274
1283
|
* other modifications that improve usability.
|
|
1275
1284
|
*/
|
|
1276
|
-
function createEnhancedContentResponse(response) {
|
|
1285
|
+
function createEnhancedContentResponse(response, inferenceSource = InferenceSource.IN_CLOUD) {
|
|
1277
1286
|
/**
|
|
1278
1287
|
* The Vertex AI backend omits default values.
|
|
1279
1288
|
* This causes the `index` property to be omitted from the first candidate in the
|
|
@@ -1284,6 +1293,7 @@ function createEnhancedContentResponse(response) {
|
|
|
1284
1293
|
response.candidates[0].index = 0;
|
|
1285
1294
|
}
|
|
1286
1295
|
const responseWithHelpers = addHelpers(response);
|
|
1296
|
+
responseWithHelpers.inferenceSource = inferenceSource;
|
|
1287
1297
|
return responseWithHelpers;
|
|
1288
1298
|
}
|
|
1289
1299
|
/**
|
|
@@ -1660,16 +1670,16 @@ const responseLineRE = /^data\: (.*)(?:\n\n|\r\r|\r\n\r\n)/;
|
|
|
1660
1670
|
*
|
|
1661
1671
|
* @param response - Response from a fetch call
|
|
1662
1672
|
*/
|
|
1663
|
-
function processStream(response, apiSettings) {
|
|
1673
|
+
function processStream(response, apiSettings, inferenceSource) {
|
|
1664
1674
|
const inputStream = response.body.pipeThrough(new TextDecoderStream('utf8', { fatal: true }));
|
|
1665
1675
|
const responseStream = getResponseStream(inputStream);
|
|
1666
1676
|
const [stream1, stream2] = responseStream.tee();
|
|
1667
1677
|
return {
|
|
1668
|
-
stream: generateResponseSequence(stream1, apiSettings),
|
|
1669
|
-
response: getResponsePromise(stream2, apiSettings)
|
|
1678
|
+
stream: generateResponseSequence(stream1, apiSettings, inferenceSource),
|
|
1679
|
+
response: getResponsePromise(stream2, apiSettings, inferenceSource)
|
|
1670
1680
|
};
|
|
1671
1681
|
}
|
|
1672
|
-
async function getResponsePromise(stream, apiSettings) {
|
|
1682
|
+
async function getResponsePromise(stream, apiSettings, inferenceSource) {
|
|
1673
1683
|
const allResponses = [];
|
|
1674
1684
|
const reader = stream.getReader();
|
|
1675
1685
|
while (true) {
|
|
@@ -1679,12 +1689,12 @@ async function getResponsePromise(stream, apiSettings) {
|
|
|
1679
1689
|
if (apiSettings.backend.backendType === BackendType.GOOGLE_AI) {
|
|
1680
1690
|
generateContentResponse = mapGenerateContentResponse(generateContentResponse);
|
|
1681
1691
|
}
|
|
1682
|
-
return createEnhancedContentResponse(generateContentResponse);
|
|
1692
|
+
return createEnhancedContentResponse(generateContentResponse, inferenceSource);
|
|
1683
1693
|
}
|
|
1684
1694
|
allResponses.push(value);
|
|
1685
1695
|
}
|
|
1686
1696
|
}
|
|
1687
|
-
async function* generateResponseSequence(stream, apiSettings) {
|
|
1697
|
+
async function* generateResponseSequence(stream, apiSettings, inferenceSource) {
|
|
1688
1698
|
const reader = stream.getReader();
|
|
1689
1699
|
while (true) {
|
|
1690
1700
|
const { value, done } = await reader.read();
|
|
@@ -1693,10 +1703,10 @@ async function* generateResponseSequence(stream, apiSettings) {
|
|
|
1693
1703
|
}
|
|
1694
1704
|
let enhancedResponse;
|
|
1695
1705
|
if (apiSettings.backend.backendType === BackendType.GOOGLE_AI) {
|
|
1696
|
-
enhancedResponse = createEnhancedContentResponse(mapGenerateContentResponse(value));
|
|
1706
|
+
enhancedResponse = createEnhancedContentResponse(mapGenerateContentResponse(value), inferenceSource);
|
|
1697
1707
|
}
|
|
1698
1708
|
else {
|
|
1699
|
-
enhancedResponse = createEnhancedContentResponse(value);
|
|
1709
|
+
enhancedResponse = createEnhancedContentResponse(value, inferenceSource);
|
|
1700
1710
|
}
|
|
1701
1711
|
const firstCandidate = enhancedResponse.candidates?.[0];
|
|
1702
1712
|
// Don't yield a response with no useful data for the developer.
|
|
@@ -1866,31 +1876,52 @@ const errorsCausingFallback = [
|
|
|
1866
1876
|
*/
|
|
1867
1877
|
async function callCloudOrDevice(request, chromeAdapter, onDeviceCall, inCloudCall) {
|
|
1868
1878
|
if (!chromeAdapter) {
|
|
1869
|
-
return
|
|
1879
|
+
return {
|
|
1880
|
+
response: await inCloudCall(),
|
|
1881
|
+
inferenceSource: InferenceSource.IN_CLOUD
|
|
1882
|
+
};
|
|
1870
1883
|
}
|
|
1871
1884
|
switch (chromeAdapter.mode) {
|
|
1872
1885
|
case InferenceMode.ONLY_ON_DEVICE:
|
|
1873
1886
|
if (await chromeAdapter.isAvailable(request)) {
|
|
1874
|
-
return
|
|
1887
|
+
return {
|
|
1888
|
+
response: await onDeviceCall(),
|
|
1889
|
+
inferenceSource: InferenceSource.ON_DEVICE
|
|
1890
|
+
};
|
|
1875
1891
|
}
|
|
1876
1892
|
throw new AIError(AIErrorCode.UNSUPPORTED, 'Inference mode is ONLY_ON_DEVICE, but an on-device model is not available.');
|
|
1877
1893
|
case InferenceMode.ONLY_IN_CLOUD:
|
|
1878
|
-
return
|
|
1894
|
+
return {
|
|
1895
|
+
response: await inCloudCall(),
|
|
1896
|
+
inferenceSource: InferenceSource.IN_CLOUD
|
|
1897
|
+
};
|
|
1879
1898
|
case InferenceMode.PREFER_IN_CLOUD:
|
|
1880
1899
|
try {
|
|
1881
|
-
return
|
|
1900
|
+
return {
|
|
1901
|
+
response: await inCloudCall(),
|
|
1902
|
+
inferenceSource: InferenceSource.IN_CLOUD
|
|
1903
|
+
};
|
|
1882
1904
|
}
|
|
1883
1905
|
catch (e) {
|
|
1884
1906
|
if (e instanceof AIError && errorsCausingFallback.includes(e.code)) {
|
|
1885
|
-
return
|
|
1907
|
+
return {
|
|
1908
|
+
response: await onDeviceCall(),
|
|
1909
|
+
inferenceSource: InferenceSource.ON_DEVICE
|
|
1910
|
+
};
|
|
1886
1911
|
}
|
|
1887
1912
|
throw e;
|
|
1888
1913
|
}
|
|
1889
1914
|
case InferenceMode.PREFER_ON_DEVICE:
|
|
1890
1915
|
if (await chromeAdapter.isAvailable(request)) {
|
|
1891
|
-
return
|
|
1916
|
+
return {
|
|
1917
|
+
response: await onDeviceCall(),
|
|
1918
|
+
inferenceSource: InferenceSource.ON_DEVICE
|
|
1919
|
+
};
|
|
1892
1920
|
}
|
|
1893
|
-
return
|
|
1921
|
+
return {
|
|
1922
|
+
response: await inCloudCall(),
|
|
1923
|
+
inferenceSource: InferenceSource.IN_CLOUD
|
|
1924
|
+
};
|
|
1894
1925
|
default:
|
|
1895
1926
|
throw new AIError(AIErrorCode.ERROR, `Unexpected infererence mode: ${chromeAdapter.mode}`);
|
|
1896
1927
|
}
|
|
@@ -1920,8 +1951,8 @@ async function generateContentStreamOnCloud(apiSettings, model, params, requestO
|
|
|
1920
1951
|
/* stream */ true, JSON.stringify(params), requestOptions);
|
|
1921
1952
|
}
|
|
1922
1953
|
async function generateContentStream(apiSettings, model, params, chromeAdapter, requestOptions) {
|
|
1923
|
-
const
|
|
1924
|
-
return processStream(response, apiSettings); // TODO: Map streaming responses
|
|
1954
|
+
const callResult = await callCloudOrDevice(params, chromeAdapter, () => chromeAdapter.generateContentStream(params), () => generateContentStreamOnCloud(apiSettings, model, params, requestOptions));
|
|
1955
|
+
return processStream(callResult.response, apiSettings); // TODO: Map streaming responses
|
|
1925
1956
|
}
|
|
1926
1957
|
async function generateContentOnCloud(apiSettings, model, params, requestOptions) {
|
|
1927
1958
|
if (apiSettings.backend.backendType === BackendType.GOOGLE_AI) {
|
|
@@ -1931,9 +1962,9 @@ async function generateContentOnCloud(apiSettings, model, params, requestOptions
|
|
|
1931
1962
|
/* stream */ false, JSON.stringify(params), requestOptions);
|
|
1932
1963
|
}
|
|
1933
1964
|
async function generateContent(apiSettings, model, params, chromeAdapter, requestOptions) {
|
|
1934
|
-
const
|
|
1935
|
-
const generateContentResponse = await processGenerateContentResponse(response, apiSettings);
|
|
1936
|
-
const enhancedResponse = createEnhancedContentResponse(generateContentResponse);
|
|
1965
|
+
const callResult = await callCloudOrDevice(params, chromeAdapter, () => chromeAdapter.generateContent(params), () => generateContentOnCloud(apiSettings, model, params, requestOptions));
|
|
1966
|
+
const generateContentResponse = await processGenerateContentResponse(callResult.response, apiSettings);
|
|
1967
|
+
const enhancedResponse = createEnhancedContentResponse(generateContentResponse, callResult.inferenceSource);
|
|
1937
1968
|
return {
|
|
1938
1969
|
response: enhancedResponse
|
|
1939
1970
|
};
|
|
@@ -3825,6 +3856,7 @@ exports.ImagenModel = ImagenModel;
|
|
|
3825
3856
|
exports.ImagenPersonFilterLevel = ImagenPersonFilterLevel;
|
|
3826
3857
|
exports.ImagenSafetyFilterLevel = ImagenSafetyFilterLevel;
|
|
3827
3858
|
exports.InferenceMode = InferenceMode;
|
|
3859
|
+
exports.InferenceSource = InferenceSource;
|
|
3828
3860
|
exports.IntegerSchema = IntegerSchema;
|
|
3829
3861
|
exports.Language = Language;
|
|
3830
3862
|
exports.LiveGenerativeModel = LiveGenerativeModel;
|