cloudassist-ai-provider 0.0.1 → 0.0.2
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/index.d.ts +326 -9
- package/dist/index.js +2187 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +86 -34
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.d.ts +262 -4
- package/dist/internal/index.js +1850 -2
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/index.mjs +79 -29
- package/dist/internal/index.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/convert-json-schema-to-openapi-schema.d.ts +0 -6
- package/dist/convert-json-schema-to-openapi-schema.d.ts.map +0 -1
- package/dist/convert-json-schema-to-openapi-schema.js +0 -108
- package/dist/convert-json-schema-to-openapi-schema.test.d.ts +0 -2
- package/dist/convert-json-schema-to-openapi-schema.test.d.ts.map +0 -1
- package/dist/convert-json-schema-to-openapi-schema.test.js +0 -630
- package/dist/convert-to-google-generative-ai-messages.d.ts +0 -7
- package/dist/convert-to-google-generative-ai-messages.d.ts.map +0 -1
- package/dist/convert-to-google-generative-ai-messages.js +0 -195
- package/dist/convert-to-google-generative-ai-messages.test.d.ts +0 -2
- package/dist/convert-to-google-generative-ai-messages.test.d.ts.map +0 -1
- package/dist/convert-to-google-generative-ai-messages.test.js +0 -456
- package/dist/get-model-path.d.ts +0 -2
- package/dist/get-model-path.d.ts.map +0 -1
- package/dist/get-model-path.js +0 -3
- package/dist/get-model-path.test.d.ts +0 -2
- package/dist/get-model-path.test.d.ts.map +0 -1
- package/dist/get-model-path.test.js +0 -11
- package/dist/google-error.d.ts +0 -12
- package/dist/google-error.d.ts.map +0 -1
- package/dist/google-error.js +0 -13
- package/dist/google-generative-ai-embedding-model.d.ts +0 -21
- package/dist/google-generative-ai-embedding-model.d.ts.map +0 -1
- package/dist/google-generative-ai-embedding-model.js +0 -88
- package/dist/google-generative-ai-embedding-model.test.d.ts +0 -2
- package/dist/google-generative-ai-embedding-model.test.d.ts.map +0 -1
- package/dist/google-generative-ai-embedding-model.test.js +0 -148
- package/dist/google-generative-ai-embedding-options.d.ts +0 -8
- package/dist/google-generative-ai-embedding-options.d.ts.map +0 -1
- package/dist/google-generative-ai-embedding-options.js +0 -33
- package/dist/google-generative-ai-image-model.d.ts +0 -31
- package/dist/google-generative-ai-image-model.d.ts.map +0 -1
- package/dist/google-generative-ai-image-model.js +0 -96
- package/dist/google-generative-ai-image-model.test.d.ts +0 -2
- package/dist/google-generative-ai-image-model.test.d.ts.map +0 -1
- package/dist/google-generative-ai-image-model.test.js +0 -252
- package/dist/google-generative-ai-image-settings.d.ts +0 -8
- package/dist/google-generative-ai-image-settings.d.ts.map +0 -1
- package/dist/google-generative-ai-image-settings.js +0 -1
- package/dist/google-generative-ai-language-model.d.ts +0 -183
- package/dist/google-generative-ai-language-model.d.ts.map +0 -1
- package/dist/google-generative-ai-language-model.js +0 -1001
- package/dist/google-generative-ai-language-model.test.d.ts +0 -2
- package/dist/google-generative-ai-language-model.test.d.ts.map +0 -1
- package/dist/google-generative-ai-language-model.test.js +0 -3463
- package/dist/google-generative-ai-options.d.ts +0 -37
- package/dist/google-generative-ai-options.d.ts.map +0 -1
- package/dist/google-generative-ai-options.js +0 -149
- package/dist/google-generative-ai-prompt.d.ts +0 -52
- package/dist/google-generative-ai-prompt.d.ts.map +0 -1
- package/dist/google-generative-ai-prompt.js +0 -1
- package/dist/google-prepare-tools.d.ts +0 -27
- package/dist/google-prepare-tools.d.ts.map +0 -1
- package/dist/google-prepare-tools.js +0 -219
- package/dist/google-prepare-tools.test.d.ts +0 -2
- package/dist/google-prepare-tools.test.d.ts.map +0 -1
- package/dist/google-prepare-tools.test.js +0 -447
- package/dist/google-provider.d.ts +0 -65
- package/dist/google-provider.d.ts.map +0 -1
- package/dist/google-provider.js +0 -74
- package/dist/google-provider.test.d.ts +0 -2
- package/dist/google-provider.test.d.ts.map +0 -1
- package/dist/google-provider.test.js +0 -234
- package/dist/google-supported-file-url.d.ts +0 -2
- package/dist/google-supported-file-url.d.ts.map +0 -1
- package/dist/google-supported-file-url.js +0 -13
- package/dist/google-supported-file-url.test.d.ts +0 -2
- package/dist/google-supported-file-url.test.d.ts.map +0 -1
- package/dist/google-supported-file-url.test.js +0 -45
- package/dist/google-tools.d.ts +0 -76
- package/dist/google-tools.d.ts.map +0 -1
- package/dist/google-tools.js +0 -65
- package/dist/index.d.ts.map +0 -1
- package/dist/internal/index.d.ts.map +0 -1
- package/dist/map-google-generative-ai-finish-reason.d.ts +0 -6
- package/dist/map-google-generative-ai-finish-reason.d.ts.map +0 -1
- package/dist/map-google-generative-ai-finish-reason.js +0 -22
- package/dist/tool/code-execution.d.ts +0 -17
- package/dist/tool/code-execution.d.ts.map +0 -1
- package/dist/tool/code-execution.js +0 -25
- package/dist/tool/enterprise-web-search.d.ts +0 -2
- package/dist/tool/enterprise-web-search.d.ts.map +0 -1
- package/dist/tool/enterprise-web-search.js +0 -8
- package/dist/tool/file-search.d.ts +0 -16
- package/dist/tool/file-search.d.ts.map +0 -1
- package/dist/tool/file-search.js +0 -33
- package/dist/tool/google-maps.d.ts +0 -2
- package/dist/tool/google-maps.d.ts.map +0 -1
- package/dist/tool/google-maps.js +0 -9
- package/dist/tool/google-search.d.ts +0 -14
- package/dist/tool/google-search.d.ts.map +0 -1
- package/dist/tool/google-search.js +0 -15
- package/dist/tool/url-context.d.ts +0 -2
- package/dist/tool/url-context.d.ts.map +0 -1
- package/dist/tool/url-context.js +0 -7
- package/dist/tool/vertex-rag-store.d.ts +0 -16
- package/dist/tool/vertex-rag-store.d.ts.map +0 -1
- package/dist/tool/vertex-rag-store.js +0 -17
- package/dist/version.d.ts +0 -2
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -3
package/dist/google-error.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { type InferValidator } from '@ai-sdk/provider-utils';
|
|
2
|
-
declare const googleErrorDataSchema: import("@ai-sdk/provider-utils").LazySchema<{
|
|
3
|
-
error: {
|
|
4
|
-
code: number | null;
|
|
5
|
-
message: string;
|
|
6
|
-
status: string;
|
|
7
|
-
};
|
|
8
|
-
}>;
|
|
9
|
-
export type GoogleErrorData = InferValidator<typeof googleErrorDataSchema>;
|
|
10
|
-
export declare const googleFailedResponseHandler: import("@ai-sdk/provider-utils").ResponseHandler<import("@ai-sdk/provider").APICallError>;
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=google-error.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"google-error.d.ts","sourceRoot":"","sources":["../src/google-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAGpB,MAAM,wBAAwB,CAAC;AAGhC,QAAA,MAAM,qBAAqB;;;;;;EAU1B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE3E,eAAO,MAAM,2BAA2B,2FAGtC,CAAC"}
|
package/dist/google-error.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { createJsonErrorResponseHandler, lazySchema, zodSchema, } from '@ai-sdk/provider-utils';
|
|
2
|
-
import { z } from 'zod/v4';
|
|
3
|
-
const googleErrorDataSchema = lazySchema(() => zodSchema(z.object({
|
|
4
|
-
error: z.object({
|
|
5
|
-
code: z.number().nullable(),
|
|
6
|
-
message: z.string(),
|
|
7
|
-
status: z.string(),
|
|
8
|
-
}),
|
|
9
|
-
})));
|
|
10
|
-
export const googleFailedResponseHandler = createJsonErrorResponseHandler({
|
|
11
|
-
errorSchema: googleErrorDataSchema,
|
|
12
|
-
errorToMessage: data => data.error.message,
|
|
13
|
-
});
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { EmbeddingModelV2 } from '@ai-sdk/provider';
|
|
2
|
-
import { FetchFunction } from '@ai-sdk/provider-utils';
|
|
3
|
-
import { GoogleGenerativeAIEmbeddingModelId } from './google-generative-ai-embedding-options';
|
|
4
|
-
type GoogleGenerativeAIEmbeddingConfig = {
|
|
5
|
-
provider: string;
|
|
6
|
-
baseURL: string;
|
|
7
|
-
headers: () => Record<string, string | undefined>;
|
|
8
|
-
fetch?: FetchFunction;
|
|
9
|
-
};
|
|
10
|
-
export declare class GoogleGenerativeAIEmbeddingModel implements EmbeddingModelV2<string> {
|
|
11
|
-
readonly specificationVersion = "v2";
|
|
12
|
-
readonly modelId: GoogleGenerativeAIEmbeddingModelId;
|
|
13
|
-
readonly maxEmbeddingsPerCall = 2048;
|
|
14
|
-
readonly supportsParallelCalls = true;
|
|
15
|
-
private readonly config;
|
|
16
|
-
get provider(): string;
|
|
17
|
-
constructor(modelId: GoogleGenerativeAIEmbeddingModelId, config: GoogleGenerativeAIEmbeddingConfig);
|
|
18
|
-
doEmbed({ values, headers, abortSignal, providerOptions, }: Parameters<EmbeddingModelV2<string>['doEmbed']>[0]): Promise<Awaited<ReturnType<EmbeddingModelV2<string>['doEmbed']>>>;
|
|
19
|
-
}
|
|
20
|
-
export {};
|
|
21
|
-
//# sourceMappingURL=google-generative-ai-embedding-model.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"google-generative-ai-embedding-model.d.ts","sourceRoot":"","sources":["../src/google-generative-ai-embedding-model.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAEjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGL,aAAa,EAMd,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,kCAAkC,EAEnC,MAAM,0CAA0C,CAAC;AAElD,KAAK,iCAAiC,GAAG;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAClD,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,qBAAa,gCACX,YAAW,gBAAgB,CAAC,MAAM,CAAC;IAEnC,QAAQ,CAAC,oBAAoB,QAAQ;IACrC,QAAQ,CAAC,OAAO,EAAE,kCAAkC,CAAC;IACrD,QAAQ,CAAC,oBAAoB,QAAQ;IACrC,QAAQ,CAAC,qBAAqB,QAAQ;IAEtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAE3D,IAAI,QAAQ,IAAI,MAAM,CAErB;gBAEC,OAAO,EAAE,kCAAkC,EAC3C,MAAM,EAAE,iCAAiC;IAMrC,OAAO,CAAC,EACZ,MAAM,EACN,OAAO,EACP,WAAW,EACX,eAAe,GAChB,EAAE,UAAU,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAC7D,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CACzD;CAmFF"}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { TooManyEmbeddingValuesForCallError, } from '@ai-sdk/provider';
|
|
2
|
-
import { combineHeaders, createJsonResponseHandler, lazySchema, parseProviderOptions, postJsonToApi, resolve, zodSchema, } from '@ai-sdk/provider-utils';
|
|
3
|
-
import { z } from 'zod/v4';
|
|
4
|
-
import { googleFailedResponseHandler } from './google-error';
|
|
5
|
-
import { googleGenerativeAIEmbeddingProviderOptions, } from './google-generative-ai-embedding-options';
|
|
6
|
-
export class GoogleGenerativeAIEmbeddingModel {
|
|
7
|
-
get provider() {
|
|
8
|
-
return this.config.provider;
|
|
9
|
-
}
|
|
10
|
-
constructor(modelId, config) {
|
|
11
|
-
this.specificationVersion = 'v2';
|
|
12
|
-
this.maxEmbeddingsPerCall = 2048;
|
|
13
|
-
this.supportsParallelCalls = true;
|
|
14
|
-
this.modelId = modelId;
|
|
15
|
-
this.config = config;
|
|
16
|
-
}
|
|
17
|
-
async doEmbed({ values, headers, abortSignal, providerOptions, }) {
|
|
18
|
-
// Parse provider options
|
|
19
|
-
const googleOptions = await parseProviderOptions({
|
|
20
|
-
provider: 'google',
|
|
21
|
-
providerOptions,
|
|
22
|
-
schema: googleGenerativeAIEmbeddingProviderOptions,
|
|
23
|
-
});
|
|
24
|
-
if (values.length > this.maxEmbeddingsPerCall) {
|
|
25
|
-
throw new TooManyEmbeddingValuesForCallError({
|
|
26
|
-
provider: this.provider,
|
|
27
|
-
modelId: this.modelId,
|
|
28
|
-
maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,
|
|
29
|
-
values,
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
const mergedHeaders = combineHeaders(await resolve(this.config.headers), headers);
|
|
33
|
-
// For single embeddings, use the single endpoint (ratelimits, etc.)
|
|
34
|
-
if (values.length === 1) {
|
|
35
|
-
const { responseHeaders, value: response, rawValue, } = await postJsonToApi({
|
|
36
|
-
url: `${this.config.baseURL}/models/${this.modelId}:embedContent`,
|
|
37
|
-
headers: mergedHeaders,
|
|
38
|
-
body: {
|
|
39
|
-
model: `models/${this.modelId}`,
|
|
40
|
-
content: {
|
|
41
|
-
parts: [{ text: values[0] }],
|
|
42
|
-
},
|
|
43
|
-
outputDimensionality: googleOptions === null || googleOptions === void 0 ? void 0 : googleOptions.outputDimensionality,
|
|
44
|
-
taskType: googleOptions === null || googleOptions === void 0 ? void 0 : googleOptions.taskType,
|
|
45
|
-
},
|
|
46
|
-
failedResponseHandler: googleFailedResponseHandler,
|
|
47
|
-
successfulResponseHandler: createJsonResponseHandler(googleGenerativeAISingleEmbeddingResponseSchema),
|
|
48
|
-
abortSignal,
|
|
49
|
-
fetch: this.config.fetch,
|
|
50
|
-
});
|
|
51
|
-
return {
|
|
52
|
-
embeddings: [response.embedding.values],
|
|
53
|
-
usage: undefined,
|
|
54
|
-
response: { headers: responseHeaders, body: rawValue },
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
const { responseHeaders, value: response, rawValue, } = await postJsonToApi({
|
|
58
|
-
url: `${this.config.baseURL}/models/${this.modelId}:batchEmbedContents`,
|
|
59
|
-
headers: mergedHeaders,
|
|
60
|
-
body: {
|
|
61
|
-
requests: values.map(value => ({
|
|
62
|
-
model: `models/${this.modelId}`,
|
|
63
|
-
content: { role: 'user', parts: [{ text: value }] },
|
|
64
|
-
outputDimensionality: googleOptions === null || googleOptions === void 0 ? void 0 : googleOptions.outputDimensionality,
|
|
65
|
-
taskType: googleOptions === null || googleOptions === void 0 ? void 0 : googleOptions.taskType,
|
|
66
|
-
})),
|
|
67
|
-
},
|
|
68
|
-
failedResponseHandler: googleFailedResponseHandler,
|
|
69
|
-
successfulResponseHandler: createJsonResponseHandler(googleGenerativeAITextEmbeddingResponseSchema),
|
|
70
|
-
abortSignal,
|
|
71
|
-
fetch: this.config.fetch,
|
|
72
|
-
});
|
|
73
|
-
return {
|
|
74
|
-
embeddings: response.embeddings.map(item => item.values),
|
|
75
|
-
usage: undefined,
|
|
76
|
-
response: { headers: responseHeaders, body: rawValue },
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
// minimal version of the schema, focussed on what is needed for the implementation
|
|
81
|
-
// this approach limits breakages when the API changes and increases efficiency
|
|
82
|
-
const googleGenerativeAITextEmbeddingResponseSchema = lazySchema(() => zodSchema(z.object({
|
|
83
|
-
embeddings: z.array(z.object({ values: z.array(z.number()) })),
|
|
84
|
-
})));
|
|
85
|
-
// Schema for single embedding response
|
|
86
|
-
const googleGenerativeAISingleEmbeddingResponseSchema = lazySchema(() => zodSchema(z.object({
|
|
87
|
-
embedding: z.object({ values: z.array(z.number()) }),
|
|
88
|
-
})));
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"google-generative-ai-embedding-model.test.d.ts","sourceRoot":"","sources":["../src/google-generative-ai-embedding-model.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { createTestServer } from '@ai-sdk/test-server/with-vitest';
|
|
2
|
-
import { GoogleGenerativeAIEmbeddingModel } from './google-generative-ai-embedding-model';
|
|
3
|
-
import { createGoogleGenerativeAI } from './google-provider';
|
|
4
|
-
import { describe, it, expect, vi } from 'vitest';
|
|
5
|
-
vi.mock('./version', () => ({
|
|
6
|
-
VERSION: '0.0.0-test',
|
|
7
|
-
}));
|
|
8
|
-
const dummyEmbeddings = [
|
|
9
|
-
[0.1, 0.2, 0.3, 0.4, 0.5],
|
|
10
|
-
[0.6, 0.7, 0.8, 0.9, 1.0],
|
|
11
|
-
];
|
|
12
|
-
const testValues = ['sunny day at the beach', 'rainy day in the city'];
|
|
13
|
-
const provider = createGoogleGenerativeAI({ apiKey: 'test-api-key' });
|
|
14
|
-
const model = provider.textEmbeddingModel('gemini-embedding-001');
|
|
15
|
-
const BATCH_URL = 'https://cloudcode-pa.googleapis.com/models/gemini-embedding-001\\:batchEmbedContents';
|
|
16
|
-
const SINGLE_URL = 'https://cloudcode-pa.googleapis.com/models/gemini-embedding-001\\:embedContent';
|
|
17
|
-
const server = createTestServer({
|
|
18
|
-
[SINGLE_URL]: {},
|
|
19
|
-
[BATCH_URL]: {},
|
|
20
|
-
});
|
|
21
|
-
describe('GoogleGenerativeAIEmbeddingModel', () => {
|
|
22
|
-
function prepareBatchJsonResponse({ embeddings = dummyEmbeddings, headers, } = {}) {
|
|
23
|
-
server.urls[BATCH_URL].response = {
|
|
24
|
-
type: 'json-value',
|
|
25
|
-
headers,
|
|
26
|
-
body: {
|
|
27
|
-
embeddings: embeddings.map(embedding => ({ values: embedding })),
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
function prepareSingleJsonResponse({ embeddings = dummyEmbeddings, headers, } = {}) {
|
|
32
|
-
server.urls[SINGLE_URL].response = {
|
|
33
|
-
type: 'json-value',
|
|
34
|
-
headers,
|
|
35
|
-
body: {
|
|
36
|
-
embedding: { values: embeddings[0] },
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
it('should extract embedding', async () => {
|
|
41
|
-
prepareBatchJsonResponse();
|
|
42
|
-
const { embeddings } = await model.doEmbed({ values: testValues });
|
|
43
|
-
expect(embeddings).toStrictEqual(dummyEmbeddings);
|
|
44
|
-
});
|
|
45
|
-
it('should expose the raw response', async () => {
|
|
46
|
-
prepareBatchJsonResponse({
|
|
47
|
-
headers: {
|
|
48
|
-
'test-header': 'test-value',
|
|
49
|
-
},
|
|
50
|
-
});
|
|
51
|
-
const { response } = await model.doEmbed({ values: testValues });
|
|
52
|
-
expect(response === null || response === void 0 ? void 0 : response.headers).toStrictEqual({
|
|
53
|
-
// default headers:
|
|
54
|
-
'content-length': '80',
|
|
55
|
-
'content-type': 'application/json',
|
|
56
|
-
// custom header
|
|
57
|
-
'test-header': 'test-value',
|
|
58
|
-
});
|
|
59
|
-
expect(response).toMatchSnapshot();
|
|
60
|
-
});
|
|
61
|
-
it('should pass the model and the values', async () => {
|
|
62
|
-
prepareBatchJsonResponse();
|
|
63
|
-
await model.doEmbed({ values: testValues });
|
|
64
|
-
expect(await server.calls[0].requestBodyJson).toStrictEqual({
|
|
65
|
-
requests: testValues.map(value => ({
|
|
66
|
-
model: 'models/gemini-embedding-001',
|
|
67
|
-
content: { role: 'user', parts: [{ text: value }] },
|
|
68
|
-
})),
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
it('should pass the outputDimensionality setting', async () => {
|
|
72
|
-
prepareBatchJsonResponse();
|
|
73
|
-
await provider.embedding('gemini-embedding-001').doEmbed({
|
|
74
|
-
values: testValues,
|
|
75
|
-
providerOptions: {
|
|
76
|
-
google: { outputDimensionality: 64 },
|
|
77
|
-
},
|
|
78
|
-
});
|
|
79
|
-
expect(await server.calls[0].requestBodyJson).toStrictEqual({
|
|
80
|
-
requests: testValues.map(value => ({
|
|
81
|
-
model: 'models/gemini-embedding-001',
|
|
82
|
-
content: { role: 'user', parts: [{ text: value }] },
|
|
83
|
-
outputDimensionality: 64,
|
|
84
|
-
})),
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
it('should pass the taskType setting', async () => {
|
|
88
|
-
prepareBatchJsonResponse();
|
|
89
|
-
await provider.embedding('gemini-embedding-001').doEmbed({
|
|
90
|
-
values: testValues,
|
|
91
|
-
providerOptions: { google: { taskType: 'SEMANTIC_SIMILARITY' } },
|
|
92
|
-
});
|
|
93
|
-
expect(await server.calls[0].requestBodyJson).toStrictEqual({
|
|
94
|
-
requests: testValues.map(value => ({
|
|
95
|
-
model: 'models/gemini-embedding-001',
|
|
96
|
-
content: { role: 'user', parts: [{ text: value }] },
|
|
97
|
-
taskType: 'SEMANTIC_SIMILARITY',
|
|
98
|
-
})),
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
it('should pass headers', async () => {
|
|
102
|
-
prepareBatchJsonResponse();
|
|
103
|
-
const provider = createGoogleGenerativeAI({
|
|
104
|
-
apiKey: 'test-api-key',
|
|
105
|
-
headers: {
|
|
106
|
-
'Custom-Provider-Header': 'provider-header-value',
|
|
107
|
-
},
|
|
108
|
-
});
|
|
109
|
-
await provider.embedding('gemini-embedding-001').doEmbed({
|
|
110
|
-
values: testValues,
|
|
111
|
-
headers: {
|
|
112
|
-
'Custom-Request-Header': 'request-header-value',
|
|
113
|
-
},
|
|
114
|
-
});
|
|
115
|
-
expect(server.calls[0].requestHeaders).toStrictEqual({
|
|
116
|
-
'authorization': 'Bearer test-api-key',
|
|
117
|
-
'content-type': 'application/json',
|
|
118
|
-
'custom-provider-header': 'provider-header-value',
|
|
119
|
-
'custom-request-header': 'request-header-value',
|
|
120
|
-
});
|
|
121
|
-
expect(server.calls[0].requestUserAgent).toContain(`ai-sdk/google-cloudassist/0.0.0-test`);
|
|
122
|
-
});
|
|
123
|
-
it('should throw an error if too many values are provided', async () => {
|
|
124
|
-
const model = new GoogleGenerativeAIEmbeddingModel('gemini-embedding-001', {
|
|
125
|
-
provider: 'google.generative-ai',
|
|
126
|
-
baseURL: 'https://generativelanguage.googleapis.com/v1beta',
|
|
127
|
-
headers: () => ({}),
|
|
128
|
-
});
|
|
129
|
-
const tooManyValues = Array(2049).fill('test');
|
|
130
|
-
await expect(model.doEmbed({ values: tooManyValues })).rejects.toThrow('Too many values for a single embedding call. The google.generative-ai model "gemini-embedding-001" can only embed up to 2048 values per call, but 2049 values were provided.');
|
|
131
|
-
});
|
|
132
|
-
it('should use the batch embeddings endpoint', async () => {
|
|
133
|
-
prepareBatchJsonResponse();
|
|
134
|
-
const model = provider.textEmbeddingModel('gemini-embedding-001');
|
|
135
|
-
await model.doEmbed({
|
|
136
|
-
values: testValues,
|
|
137
|
-
});
|
|
138
|
-
expect(server.calls[0].requestUrl).toBe('https://cloudcode-pa.googleapis.com/models/gemini-embedding-001:batchEmbedContents');
|
|
139
|
-
});
|
|
140
|
-
it('should use the single embeddings endpoint', async () => {
|
|
141
|
-
prepareSingleJsonResponse();
|
|
142
|
-
const model = provider.textEmbeddingModel('gemini-embedding-001');
|
|
143
|
-
await model.doEmbed({
|
|
144
|
-
values: [testValues[0]],
|
|
145
|
-
});
|
|
146
|
-
expect(server.calls[0].requestUrl).toBe('https://cloudcode-pa.googleapis.com/models/gemini-embedding-001:embedContent');
|
|
147
|
-
});
|
|
148
|
-
});
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { type InferValidator } from '@ai-sdk/provider-utils';
|
|
2
|
-
export type GoogleGenerativeAIEmbeddingModelId = 'gemini-embedding-001' | 'text-embedding-004' | (string & {});
|
|
3
|
-
export declare const googleGenerativeAIEmbeddingProviderOptions: import("@ai-sdk/provider-utils").LazySchema<{
|
|
4
|
-
outputDimensionality?: number | undefined;
|
|
5
|
-
taskType?: "SEMANTIC_SIMILARITY" | "CLASSIFICATION" | "CLUSTERING" | "RETRIEVAL_DOCUMENT" | "RETRIEVAL_QUERY" | "QUESTION_ANSWERING" | "FACT_VERIFICATION" | "CODE_RETRIEVAL_QUERY" | undefined;
|
|
6
|
-
}>;
|
|
7
|
-
export type GoogleGenerativeAIEmbeddingProviderOptions = InferValidator<typeof googleGenerativeAIEmbeddingProviderOptions>;
|
|
8
|
-
//# sourceMappingURL=google-generative-ai-embedding-options.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"google-generative-ai-embedding-options.d.ts","sourceRoot":"","sources":["../src/google-generative-ai-embedding-options.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,wBAAwB,CAAC;AAGhC,MAAM,MAAM,kCAAkC,GAC1C,sBAAsB,GACtB,oBAAoB,GACpB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,eAAO,MAAM,0CAA0C;;;EAmCtD,CAAC;AAEF,MAAM,MAAM,0CAA0C,GAAG,cAAc,CACrE,OAAO,0CAA0C,CAClD,CAAC"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { lazySchema, zodSchema, } from '@ai-sdk/provider-utils';
|
|
2
|
-
import { z } from 'zod/v4';
|
|
3
|
-
export const googleGenerativeAIEmbeddingProviderOptions = lazySchema(() => zodSchema(z.object({
|
|
4
|
-
/**
|
|
5
|
-
* Optional. Optional reduced dimension for the output embedding.
|
|
6
|
-
* If set, excessive values in the output embedding are truncated from the end.
|
|
7
|
-
*/
|
|
8
|
-
outputDimensionality: z.number().optional(),
|
|
9
|
-
/**
|
|
10
|
-
* Optional. Specifies the task type for generating embeddings.
|
|
11
|
-
* Supported task types:
|
|
12
|
-
* - SEMANTIC_SIMILARITY: Optimized for text similarity.
|
|
13
|
-
* - CLASSIFICATION: Optimized for text classification.
|
|
14
|
-
* - CLUSTERING: Optimized for clustering texts based on similarity.
|
|
15
|
-
* - RETRIEVAL_DOCUMENT: Optimized for document retrieval.
|
|
16
|
-
* - RETRIEVAL_QUERY: Optimized for query-based retrieval.
|
|
17
|
-
* - QUESTION_ANSWERING: Optimized for answering questions.
|
|
18
|
-
* - FACT_VERIFICATION: Optimized for verifying factual information.
|
|
19
|
-
* - CODE_RETRIEVAL_QUERY: Optimized for retrieving code blocks based on natural language queries.
|
|
20
|
-
*/
|
|
21
|
-
taskType: z
|
|
22
|
-
.enum([
|
|
23
|
-
'SEMANTIC_SIMILARITY',
|
|
24
|
-
'CLASSIFICATION',
|
|
25
|
-
'CLUSTERING',
|
|
26
|
-
'RETRIEVAL_DOCUMENT',
|
|
27
|
-
'RETRIEVAL_QUERY',
|
|
28
|
-
'QUESTION_ANSWERING',
|
|
29
|
-
'FACT_VERIFICATION',
|
|
30
|
-
'CODE_RETRIEVAL_QUERY',
|
|
31
|
-
])
|
|
32
|
-
.optional(),
|
|
33
|
-
})));
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { ImageModelV2 } from '@ai-sdk/provider';
|
|
2
|
-
import { type InferValidator } from '@ai-sdk/provider-utils';
|
|
3
|
-
import { GoogleGenerativeAIImageModelId, GoogleGenerativeAIImageSettings } from './google-generative-ai-image-settings';
|
|
4
|
-
import { FetchFunction, Resolvable } from '@ai-sdk/provider-utils';
|
|
5
|
-
interface GoogleGenerativeAIImageModelConfig {
|
|
6
|
-
provider: string;
|
|
7
|
-
baseURL: string;
|
|
8
|
-
headers?: Resolvable<Record<string, string | undefined>>;
|
|
9
|
-
fetch?: FetchFunction;
|
|
10
|
-
generateId?: () => string;
|
|
11
|
-
_internal?: {
|
|
12
|
-
currentDate?: () => Date;
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
export declare class GoogleGenerativeAIImageModel implements ImageModelV2 {
|
|
16
|
-
readonly modelId: GoogleGenerativeAIImageModelId;
|
|
17
|
-
private readonly settings;
|
|
18
|
-
private readonly config;
|
|
19
|
-
readonly specificationVersion = "v2";
|
|
20
|
-
get maxImagesPerCall(): number;
|
|
21
|
-
get provider(): string;
|
|
22
|
-
constructor(modelId: GoogleGenerativeAIImageModelId, settings: GoogleGenerativeAIImageSettings, config: GoogleGenerativeAIImageModelConfig);
|
|
23
|
-
doGenerate(options: Parameters<ImageModelV2['doGenerate']>[0]): Promise<Awaited<ReturnType<ImageModelV2['doGenerate']>>>;
|
|
24
|
-
}
|
|
25
|
-
declare const googleImageProviderOptionsSchema: import("@ai-sdk/provider-utils").LazySchema<{
|
|
26
|
-
personGeneration?: "dont_allow" | "allow_adult" | "allow_all" | null | undefined;
|
|
27
|
-
aspectRatio?: "1:1" | "3:4" | "4:3" | "9:16" | "16:9" | null | undefined;
|
|
28
|
-
}>;
|
|
29
|
-
export type GoogleGenerativeAIImageProviderOptions = InferValidator<typeof googleImageProviderOptionsSchema>;
|
|
30
|
-
export {};
|
|
31
|
-
//# sourceMappingURL=google-generative-ai-image-model.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"google-generative-ai-image-model.d.ts","sourceRoot":"","sources":["../src/google-generative-ai-image-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA2B,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAGL,KAAK,cAAc,EAMpB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,8BAA8B,EAC9B,+BAA+B,EAChC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEnE,UAAU,kCAAkC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IACzD,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE;QACV,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;KAC1B,CAAC;CACH;AAED,qBAAa,4BAA6B,YAAW,YAAY;IAa7D,QAAQ,CAAC,OAAO,EAAE,8BAA8B;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAdzB,QAAQ,CAAC,oBAAoB,QAAQ;IAErC,IAAI,gBAAgB,IAAI,MAAM,CAG7B;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;gBAGU,OAAO,EAAE,8BAA8B,EAC/B,QAAQ,EAAE,+BAA+B,EACzC,MAAM,EAAE,kCAAkC;IAGvD,UAAU,CACd,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GACjD,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAwF5D;AAeD,QAAA,MAAM,gCAAgC;;;EASrC,CAAC;AAEF,MAAM,MAAM,sCAAsC,GAAG,cAAc,CACjE,OAAO,gCAAgC,CACxC,CAAC"}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { combineHeaders, createJsonResponseHandler, lazySchema, parseProviderOptions, postJsonToApi, resolve, zodSchema, } from '@ai-sdk/provider-utils';
|
|
2
|
-
import { z } from 'zod/v4';
|
|
3
|
-
import { googleFailedResponseHandler } from './google-error';
|
|
4
|
-
export class GoogleGenerativeAIImageModel {
|
|
5
|
-
get maxImagesPerCall() {
|
|
6
|
-
var _a;
|
|
7
|
-
// https://ai.google.dev/gemini-api/docs/imagen#imagen-model
|
|
8
|
-
return (_a = this.settings.maxImagesPerCall) !== null && _a !== void 0 ? _a : 4;
|
|
9
|
-
}
|
|
10
|
-
get provider() {
|
|
11
|
-
return this.config.provider;
|
|
12
|
-
}
|
|
13
|
-
constructor(modelId, settings, config) {
|
|
14
|
-
this.modelId = modelId;
|
|
15
|
-
this.settings = settings;
|
|
16
|
-
this.config = config;
|
|
17
|
-
this.specificationVersion = 'v2';
|
|
18
|
-
}
|
|
19
|
-
async doGenerate(options) {
|
|
20
|
-
var _a, _b, _c;
|
|
21
|
-
const { prompt, n = 1, size = '1024x1024', aspectRatio = '1:1', seed, providerOptions, headers, abortSignal, } = options;
|
|
22
|
-
const warnings = [];
|
|
23
|
-
if (size != null) {
|
|
24
|
-
warnings.push({
|
|
25
|
-
type: 'unsupported-setting',
|
|
26
|
-
setting: 'size',
|
|
27
|
-
details: 'This model does not support the `size` option. Use `aspectRatio` instead.',
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
if (seed != null) {
|
|
31
|
-
warnings.push({
|
|
32
|
-
type: 'unsupported-setting',
|
|
33
|
-
setting: 'seed',
|
|
34
|
-
details: 'This model does not support the `seed` option through this provider.',
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
const googleOptions = await parseProviderOptions({
|
|
38
|
-
provider: 'google',
|
|
39
|
-
providerOptions,
|
|
40
|
-
schema: googleImageProviderOptionsSchema,
|
|
41
|
-
});
|
|
42
|
-
const currentDate = (_c = (_b = (_a = this.config._internal) === null || _a === void 0 ? void 0 : _a.currentDate) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : new Date();
|
|
43
|
-
const parameters = {
|
|
44
|
-
sampleCount: n,
|
|
45
|
-
};
|
|
46
|
-
if (aspectRatio != null) {
|
|
47
|
-
parameters.aspectRatio = aspectRatio;
|
|
48
|
-
}
|
|
49
|
-
if (googleOptions) {
|
|
50
|
-
Object.assign(parameters, googleOptions);
|
|
51
|
-
}
|
|
52
|
-
const body = {
|
|
53
|
-
instances: [{ prompt }],
|
|
54
|
-
parameters,
|
|
55
|
-
};
|
|
56
|
-
const { responseHeaders, value: response } = await postJsonToApi({
|
|
57
|
-
url: `${this.config.baseURL}/models/${this.modelId}:predict`,
|
|
58
|
-
headers: combineHeaders(await resolve(this.config.headers), headers),
|
|
59
|
-
body,
|
|
60
|
-
failedResponseHandler: googleFailedResponseHandler,
|
|
61
|
-
successfulResponseHandler: createJsonResponseHandler(googleImageResponseSchema),
|
|
62
|
-
abortSignal,
|
|
63
|
-
fetch: this.config.fetch,
|
|
64
|
-
});
|
|
65
|
-
return {
|
|
66
|
-
images: response.predictions.map((p) => p.bytesBase64Encoded),
|
|
67
|
-
warnings: warnings !== null && warnings !== void 0 ? warnings : [],
|
|
68
|
-
providerMetadata: {
|
|
69
|
-
google: {
|
|
70
|
-
images: response.predictions.map(prediction => ({
|
|
71
|
-
// Add any prediction-specific metadata here
|
|
72
|
-
})),
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
response: {
|
|
76
|
-
timestamp: currentDate,
|
|
77
|
-
modelId: this.modelId,
|
|
78
|
-
headers: responseHeaders,
|
|
79
|
-
},
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
// minimal version of the schema
|
|
84
|
-
const googleImageResponseSchema = lazySchema(() => zodSchema(z.object({
|
|
85
|
-
predictions: z
|
|
86
|
-
.array(z.object({ bytesBase64Encoded: z.string() }))
|
|
87
|
-
.default([]),
|
|
88
|
-
})));
|
|
89
|
-
// Note: For the initial GA launch of Imagen 3, safety filters are not configurable.
|
|
90
|
-
// https://ai.google.dev/gemini-api/docs/imagen#imagen-model
|
|
91
|
-
const googleImageProviderOptionsSchema = lazySchema(() => zodSchema(z.object({
|
|
92
|
-
personGeneration: z
|
|
93
|
-
.enum(['dont_allow', 'allow_adult', 'allow_all'])
|
|
94
|
-
.nullish(),
|
|
95
|
-
aspectRatio: z.enum(['1:1', '3:4', '4:3', '9:16', '16:9']).nullish(),
|
|
96
|
-
})));
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"google-generative-ai-image-model.test.d.ts","sourceRoot":"","sources":["../src/google-generative-ai-image-model.test.ts"],"names":[],"mappings":""}
|