@economic/agents 2.7.0 → 2.7.1
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/README.md +6 -0
- package/dist/providers.d.mts +12 -4
- package/dist/providers.mjs +13 -8
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -83,9 +83,15 @@ const { anthropic, gemini } = createAiGatewayVertexProviders({
|
|
|
83
83
|
cloudflareAiGatewayId: env.AI_GATEWAY_ID,
|
|
84
84
|
cloudflareApiToken: env.CLOUDFLARE_API_TOKEN,
|
|
85
85
|
googleCloudProjectId: env.GOOGLE_CLOUD_PROJECT_ID,
|
|
86
|
+
// Included in cf-aig-metadata on every request, including background calls.
|
|
87
|
+
metadata: { agentId: "support" },
|
|
86
88
|
});
|
|
87
89
|
```
|
|
88
90
|
|
|
91
|
+
Set a stable `agentId` when multiple agents may use the same gateway. AI Gateway
|
|
92
|
+
stores this custom metadata with each request, allowing cost queries to filter
|
|
93
|
+
by agent without copying cost data into another store.
|
|
94
|
+
|
|
89
95
|
## Quick start: an agent
|
|
90
96
|
|
|
91
97
|
Subclass `Agent` and implement `getModel` and `getSystemPrompt`. Add tools with `getTools`, skills with `getSkills`. Expose a `@callable` method to run a turn — `saveMessages` injects a message, runs the turn, and persists the result:
|
package/dist/providers.d.mts
CHANGED
|
@@ -2,6 +2,10 @@ import { AnthropicMessagesLanguageModel } from "@ai-sdk/anthropic/internal";
|
|
|
2
2
|
import { GoogleGenerativeAIProvider } from "@ai-sdk/google";
|
|
3
3
|
import { AnthropicProvider } from "@ai-sdk/anthropic";
|
|
4
4
|
|
|
5
|
+
//#region src/providers/metadata.d.ts
|
|
6
|
+
/** Custom metadata serialized into Cloudflare's `cf-aig-metadata` header. */
|
|
7
|
+
type AiGatewayMetadata = Record<string, unknown>;
|
|
8
|
+
//#endregion
|
|
5
9
|
//#region src/providers/anthropic.d.ts
|
|
6
10
|
type AnthropicVertexModelId = Parameters<AnthropicProvider>[0];
|
|
7
11
|
interface AnthropicVertexProviderOptions {
|
|
@@ -11,8 +15,10 @@ interface AnthropicVertexProviderOptions {
|
|
|
11
15
|
googleCloudProjectId: string;
|
|
12
16
|
location?: string;
|
|
13
17
|
anthropicVersion?: string;
|
|
18
|
+
/** Metadata included on every request sent through AI Gateway. */
|
|
19
|
+
metadata?: AiGatewayMetadata;
|
|
14
20
|
}
|
|
15
|
-
declare function createAnthropicProvider(options: AnthropicVertexProviderOptions): (modelId: AnthropicVertexModelId, metadata?:
|
|
21
|
+
declare function createAnthropicProvider(options: AnthropicVertexProviderOptions): (modelId: AnthropicVertexModelId, metadata?: AiGatewayMetadata) => AnthropicMessagesLanguageModel;
|
|
16
22
|
//#endregion
|
|
17
23
|
//#region src/providers/gemini.d.ts
|
|
18
24
|
type GeminiModelId = Parameters<GoogleGenerativeAIProvider>[0];
|
|
@@ -22,14 +28,16 @@ interface GeminiProviderOptions {
|
|
|
22
28
|
cloudflareApiToken: string;
|
|
23
29
|
googleCloudProjectId: string;
|
|
24
30
|
location?: string;
|
|
31
|
+
/** Metadata included on every request sent through AI Gateway. */
|
|
32
|
+
metadata?: AiGatewayMetadata;
|
|
25
33
|
}
|
|
26
|
-
declare function createGeminiProvider(options: GeminiProviderOptions, metadata?:
|
|
34
|
+
declare function createGeminiProvider(options: GeminiProviderOptions, metadata?: AiGatewayMetadata): GoogleGenerativeAIProvider;
|
|
27
35
|
//#endregion
|
|
28
36
|
//#region src/providers/index.d.ts
|
|
29
37
|
interface AiGatewayVertexProvidersOptions extends AnthropicVertexProviderOptions, GeminiProviderOptions {}
|
|
30
38
|
declare function createAiGatewayVertexProviders(options: AiGatewayVertexProvidersOptions): {
|
|
31
|
-
anthropic: (modelId: AnthropicVertexModelId, metadata?:
|
|
39
|
+
anthropic: (modelId: AnthropicVertexModelId, metadata?: AiGatewayMetadata) => import("@ai-sdk/anthropic/internal").AnthropicMessagesLanguageModel;
|
|
32
40
|
gemini: import("@ai-sdk/google").GoogleGenerativeAIProvider;
|
|
33
41
|
};
|
|
34
42
|
//#endregion
|
|
35
|
-
export { AiGatewayVertexProvidersOptions, type AnthropicVertexModelId, type AnthropicVertexProviderOptions, type GeminiModelId, type GeminiProviderOptions, createAiGatewayVertexProviders, createAnthropicProvider, createGeminiProvider };
|
|
43
|
+
export { type AiGatewayMetadata, AiGatewayVertexProvidersOptions, type AnthropicVertexModelId, type AnthropicVertexProviderOptions, type GeminiModelId, type GeminiProviderOptions, createAiGatewayVertexProviders, createAnthropicProvider, createGeminiProvider };
|
package/dist/providers.mjs
CHANGED
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
import { AnthropicMessagesLanguageModel } from "@ai-sdk/anthropic/internal";
|
|
2
2
|
import { createGoogleGenerativeAI } from "@ai-sdk/google";
|
|
3
|
+
//#region src/providers/metadata.ts
|
|
4
|
+
function createAiGatewayHeaders(cloudflareApiToken, defaultMetadata, requestMetadata) {
|
|
5
|
+
const headers = { "cf-aig-authorization": `Bearer ${cloudflareApiToken}` };
|
|
6
|
+
const metadata = { ...defaultMetadata };
|
|
7
|
+
for (const [key, value] of Object.entries(requestMetadata ?? {})) if (!(key in metadata)) metadata[key] = value;
|
|
8
|
+
if (Object.values(metadata).some((value) => value !== void 0)) headers["cf-aig-metadata"] = JSON.stringify(metadata);
|
|
9
|
+
return headers;
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
3
12
|
//#region src/providers/anthropic.ts
|
|
4
13
|
function createAnthropicProvider(options) {
|
|
5
|
-
const { anthropicVersion = "vertex-2023-10-16", cloudflareAccountId, cloudflareAiGatewayId, cloudflareApiToken, googleCloudProjectId, location = "europe-west1" } = options;
|
|
14
|
+
const { anthropicVersion = "vertex-2023-10-16", cloudflareAccountId, cloudflareAiGatewayId, cloudflareApiToken, googleCloudProjectId, location = "europe-west1", metadata: defaultMetadata } = options;
|
|
6
15
|
const anthropicBaseURL = `${`${`https://gateway.ai.cloudflare.com/v1/${cloudflareAccountId}/${cloudflareAiGatewayId}/`}google-vertex-ai/v1/projects/${googleCloudProjectId}/locations/${location}/publishers/`}anthropic/models/`;
|
|
7
16
|
return function anthropic(modelId, metadata) {
|
|
8
|
-
const headers = { "cf-aig-authorization": `Bearer ${cloudflareApiToken}` };
|
|
9
|
-
if (metadata) headers["cf-aig-metadata"] = JSON.stringify(metadata);
|
|
10
17
|
return new AnthropicMessagesLanguageModel(modelId, {
|
|
11
18
|
provider: "vertex.anthropic.messages",
|
|
12
19
|
baseURL: anthropicBaseURL,
|
|
13
|
-
headers,
|
|
20
|
+
headers: createAiGatewayHeaders(cloudflareApiToken, defaultMetadata, metadata),
|
|
14
21
|
buildRequestUrl: (baseURL, isStreaming) => `${baseURL}${modelId}:${isStreaming ? "streamRawPredict" : "rawPredict"}`,
|
|
15
22
|
transformRequestBody: (args) => {
|
|
16
23
|
const { model, ...rest } = args;
|
|
@@ -28,13 +35,11 @@ function createAnthropicProvider(options) {
|
|
|
28
35
|
//#endregion
|
|
29
36
|
//#region src/providers/gemini.ts
|
|
30
37
|
function createGeminiProvider(options, metadata) {
|
|
31
|
-
const { cloudflareAccountId, cloudflareAiGatewayId, cloudflareApiToken, googleCloudProjectId, location = "europe-west1" } = options;
|
|
32
|
-
const headers = { "cf-aig-authorization": `Bearer ${cloudflareApiToken}` };
|
|
33
|
-
if (metadata) headers["cf-aig-metadata"] = JSON.stringify(metadata);
|
|
38
|
+
const { cloudflareAccountId, cloudflareAiGatewayId, cloudflareApiToken, googleCloudProjectId, location = "europe-west1", metadata: defaultMetadata } = options;
|
|
34
39
|
return createGoogleGenerativeAI({
|
|
35
40
|
apiKey: "unused",
|
|
36
41
|
baseURL: `https://gateway.ai.cloudflare.com/v1/${cloudflareAccountId}/${cloudflareAiGatewayId}/google-vertex-ai/v1/projects/${googleCloudProjectId}/locations/${location}/publishers/google/models`,
|
|
37
|
-
headers,
|
|
42
|
+
headers: createAiGatewayHeaders(cloudflareApiToken, defaultMetadata, metadata),
|
|
38
43
|
name: "gateway.google.vertex-ai"
|
|
39
44
|
});
|
|
40
45
|
}
|