@hebo-ai/gateway 0.5.2 → 0.6.0-rc0
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 +32 -1
- package/package.json +17 -12
- package/src/endpoints/chat-completions/converters.test.ts +85 -1
- package/src/endpoints/chat-completions/converters.ts +139 -18
- package/src/endpoints/chat-completions/handler.test.ts +2 -0
- package/src/endpoints/chat-completions/index.ts +1 -0
- package/src/endpoints/chat-completions/otel.ts +1 -0
- package/src/endpoints/chat-completions/schema.ts +38 -4
- package/src/endpoints/embeddings/index.ts +1 -0
- package/src/lifecycle.ts +2 -2
- package/src/models/anthropic/middleware.test.ts +45 -1
- package/src/models/anthropic/middleware.ts +21 -1
- package/src/models/google/middleware.test.ts +30 -1
- package/src/models/google/middleware.ts +20 -1
- package/src/models/openai/middleware.test.ts +32 -1
- package/src/models/openai/middleware.ts +25 -1
- package/src/providers/bedrock/middleware.test.ts +121 -1
- package/src/providers/bedrock/middleware.ts +61 -1
- package/src/telemetry/fetch.ts +31 -4
- package/src/telemetry/index.ts +1 -0
- package/dist/config.d.ts +0 -2
- package/dist/config.js +0 -81
- package/dist/endpoints/chat-completions/converters.d.ts +0 -43
- package/dist/endpoints/chat-completions/converters.js +0 -551
- package/dist/endpoints/chat-completions/handler.d.ts +0 -2
- package/dist/endpoints/chat-completions/handler.js +0 -145
- package/dist/endpoints/chat-completions/index.d.ts +0 -3
- package/dist/endpoints/chat-completions/index.js +0 -3
- package/dist/endpoints/chat-completions/otel.d.ts +0 -6
- package/dist/endpoints/chat-completions/otel.js +0 -134
- package/dist/endpoints/chat-completions/schema.d.ts +0 -946
- package/dist/endpoints/chat-completions/schema.js +0 -257
- package/dist/endpoints/embeddings/converters.d.ts +0 -10
- package/dist/endpoints/embeddings/converters.js +0 -31
- package/dist/endpoints/embeddings/handler.d.ts +0 -2
- package/dist/endpoints/embeddings/handler.js +0 -101
- package/dist/endpoints/embeddings/index.d.ts +0 -3
- package/dist/endpoints/embeddings/index.js +0 -3
- package/dist/endpoints/embeddings/otel.d.ts +0 -6
- package/dist/endpoints/embeddings/otel.js +0 -35
- package/dist/endpoints/embeddings/schema.d.ts +0 -38
- package/dist/endpoints/embeddings/schema.js +0 -26
- package/dist/endpoints/models/converters.d.ts +0 -6
- package/dist/endpoints/models/converters.js +0 -42
- package/dist/endpoints/models/handler.d.ts +0 -2
- package/dist/endpoints/models/handler.js +0 -29
- package/dist/endpoints/models/index.d.ts +0 -3
- package/dist/endpoints/models/index.js +0 -3
- package/dist/endpoints/models/schema.d.ts +0 -42
- package/dist/endpoints/models/schema.js +0 -31
- package/dist/errors/ai-sdk.d.ts +0 -2
- package/dist/errors/ai-sdk.js +0 -52
- package/dist/errors/gateway.d.ts +0 -5
- package/dist/errors/gateway.js +0 -13
- package/dist/errors/openai.d.ts +0 -20
- package/dist/errors/openai.js +0 -40
- package/dist/errors/utils.d.ts +0 -22
- package/dist/errors/utils.js +0 -44
- package/dist/gateway.d.ts +0 -9
- package/dist/gateway.js +0 -34
- package/dist/index.d.ts +0 -14
- package/dist/index.js +0 -13
- package/dist/lifecycle.d.ts +0 -2
- package/dist/lifecycle.js +0 -94
- package/dist/logger/default.d.ts +0 -4
- package/dist/logger/default.js +0 -81
- package/dist/logger/index.d.ts +0 -14
- package/dist/logger/index.js +0 -25
- package/dist/middleware/common.d.ts +0 -12
- package/dist/middleware/common.js +0 -145
- package/dist/middleware/matcher.d.ts +0 -27
- package/dist/middleware/matcher.js +0 -112
- package/dist/middleware/utils.d.ts +0 -2
- package/dist/middleware/utils.js +0 -27
- package/dist/models/amazon/index.d.ts +0 -2
- package/dist/models/amazon/index.js +0 -2
- package/dist/models/amazon/middleware.d.ts +0 -3
- package/dist/models/amazon/middleware.js +0 -65
- package/dist/models/amazon/presets.d.ts +0 -2390
- package/dist/models/amazon/presets.js +0 -80
- package/dist/models/anthropic/index.d.ts +0 -2
- package/dist/models/anthropic/index.js +0 -2
- package/dist/models/anthropic/middleware.d.ts +0 -4
- package/dist/models/anthropic/middleware.js +0 -111
- package/dist/models/anthropic/presets.d.ts +0 -4802
- package/dist/models/anthropic/presets.js +0 -135
- package/dist/models/catalog.d.ts +0 -4
- package/dist/models/catalog.js +0 -4
- package/dist/models/cohere/index.d.ts +0 -2
- package/dist/models/cohere/index.js +0 -2
- package/dist/models/cohere/middleware.d.ts +0 -3
- package/dist/models/cohere/middleware.js +0 -60
- package/dist/models/cohere/presets.d.ts +0 -2918
- package/dist/models/cohere/presets.js +0 -134
- package/dist/models/google/index.d.ts +0 -2
- package/dist/models/google/index.js +0 -2
- package/dist/models/google/middleware.d.ts +0 -7
- package/dist/models/google/middleware.js +0 -103
- package/dist/models/google/presets.d.ts +0 -2553
- package/dist/models/google/presets.js +0 -83
- package/dist/models/meta/index.d.ts +0 -1
- package/dist/models/meta/index.js +0 -1
- package/dist/models/meta/presets.d.ts +0 -3254
- package/dist/models/meta/presets.js +0 -95
- package/dist/models/openai/index.d.ts +0 -2
- package/dist/models/openai/index.js +0 -2
- package/dist/models/openai/middleware.d.ts +0 -3
- package/dist/models/openai/middleware.js +0 -62
- package/dist/models/openai/presets.d.ts +0 -6634
- package/dist/models/openai/presets.js +0 -213
- package/dist/models/types.d.ts +0 -20
- package/dist/models/types.js +0 -84
- package/dist/models/voyage/index.d.ts +0 -2
- package/dist/models/voyage/index.js +0 -2
- package/dist/models/voyage/middleware.d.ts +0 -2
- package/dist/models/voyage/middleware.js +0 -18
- package/dist/models/voyage/presets.d.ts +0 -3471
- package/dist/models/voyage/presets.js +0 -85
- package/dist/providers/anthropic/canonical.d.ts +0 -3
- package/dist/providers/anthropic/canonical.js +0 -9
- package/dist/providers/anthropic/index.d.ts +0 -1
- package/dist/providers/anthropic/index.js +0 -1
- package/dist/providers/bedrock/canonical.d.ts +0 -17
- package/dist/providers/bedrock/canonical.js +0 -61
- package/dist/providers/bedrock/index.d.ts +0 -2
- package/dist/providers/bedrock/index.js +0 -2
- package/dist/providers/bedrock/middleware.d.ts +0 -3
- package/dist/providers/bedrock/middleware.js +0 -55
- package/dist/providers/cohere/canonical.d.ts +0 -3
- package/dist/providers/cohere/canonical.js +0 -17
- package/dist/providers/cohere/index.d.ts +0 -1
- package/dist/providers/cohere/index.js +0 -1
- package/dist/providers/groq/canonical.d.ts +0 -3
- package/dist/providers/groq/canonical.js +0 -12
- package/dist/providers/groq/index.d.ts +0 -1
- package/dist/providers/groq/index.js +0 -1
- package/dist/providers/openai/canonical.d.ts +0 -3
- package/dist/providers/openai/canonical.js +0 -8
- package/dist/providers/openai/index.d.ts +0 -1
- package/dist/providers/openai/index.js +0 -1
- package/dist/providers/registry.d.ts +0 -24
- package/dist/providers/registry.js +0 -100
- package/dist/providers/types.d.ts +0 -7
- package/dist/providers/types.js +0 -11
- package/dist/providers/vertex/canonical.d.ts +0 -3
- package/dist/providers/vertex/canonical.js +0 -8
- package/dist/providers/vertex/index.d.ts +0 -1
- package/dist/providers/vertex/index.js +0 -1
- package/dist/providers/voyage/canonical.d.ts +0 -3
- package/dist/providers/voyage/canonical.js +0 -7
- package/dist/providers/voyage/index.d.ts +0 -1
- package/dist/providers/voyage/index.js +0 -1
- package/dist/telemetry/ai-sdk.d.ts +0 -2
- package/dist/telemetry/ai-sdk.js +0 -31
- package/dist/telemetry/baggage.d.ts +0 -1
- package/dist/telemetry/baggage.js +0 -24
- package/dist/telemetry/fetch.d.ts +0 -2
- package/dist/telemetry/fetch.js +0 -24
- package/dist/telemetry/gen-ai.d.ts +0 -5
- package/dist/telemetry/gen-ai.js +0 -60
- package/dist/telemetry/http.d.ts +0 -3
- package/dist/telemetry/http.js +0 -54
- package/dist/telemetry/memory.d.ts +0 -2
- package/dist/telemetry/memory.js +0 -27
- package/dist/telemetry/span.d.ts +0 -13
- package/dist/telemetry/span.js +0 -60
- package/dist/telemetry/stream.d.ts +0 -3
- package/dist/telemetry/stream.js +0 -51
- package/dist/types.d.ts +0 -176
- package/dist/types.js +0 -1
- package/dist/utils/env.d.ts +0 -2
- package/dist/utils/env.js +0 -5
- package/dist/utils/headers.d.ts +0 -4
- package/dist/utils/headers.js +0 -22
- package/dist/utils/preset.d.ts +0 -9
- package/dist/utils/preset.js +0 -41
- package/dist/utils/request.d.ts +0 -2
- package/dist/utils/request.js +0 -14
- package/dist/utils/response.d.ts +0 -3
- package/dist/utils/response.js +0 -68
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { presetFor } from "../../utils/preset";
|
|
2
|
-
const VOYAGE_BASE = {
|
|
3
|
-
modalities: {
|
|
4
|
-
input: ["text"],
|
|
5
|
-
output: ["embedding"],
|
|
6
|
-
},
|
|
7
|
-
providers: ["voyage"],
|
|
8
|
-
};
|
|
9
|
-
export const voyage2Code = presetFor()("voyage/voyage-2-code", {
|
|
10
|
-
...VOYAGE_BASE,
|
|
11
|
-
name: "Voyage 2 Code",
|
|
12
|
-
created: "2024-01-23",
|
|
13
|
-
context: 16000,
|
|
14
|
-
});
|
|
15
|
-
export const voyage2Finance = presetFor()("voyage/voyage-2-finance", {
|
|
16
|
-
...VOYAGE_BASE,
|
|
17
|
-
name: "Voyage 2 Finance",
|
|
18
|
-
created: "2024-06-03",
|
|
19
|
-
context: 32000,
|
|
20
|
-
});
|
|
21
|
-
export const voyage2Law = presetFor()("voyage/voyage-2-law", {
|
|
22
|
-
...VOYAGE_BASE,
|
|
23
|
-
name: "Voyage 2 Law",
|
|
24
|
-
created: "2024-04-15",
|
|
25
|
-
context: 16000,
|
|
26
|
-
});
|
|
27
|
-
export const voyage3Code = presetFor()("voyage/voyage-3-code", {
|
|
28
|
-
...VOYAGE_BASE,
|
|
29
|
-
name: "Voyage 3 Code",
|
|
30
|
-
created: "2024-12-04",
|
|
31
|
-
context: 32000,
|
|
32
|
-
});
|
|
33
|
-
export const voyage3Large = presetFor()("voyage/voyage-3-large", {
|
|
34
|
-
...VOYAGE_BASE,
|
|
35
|
-
name: "Voyage 3 Large",
|
|
36
|
-
created: "2025-01-07",
|
|
37
|
-
context: 32000,
|
|
38
|
-
});
|
|
39
|
-
export const voyage35 = presetFor()("voyage/voyage-3.5", {
|
|
40
|
-
...VOYAGE_BASE,
|
|
41
|
-
name: "Voyage 3.5",
|
|
42
|
-
created: "2025-05-20",
|
|
43
|
-
context: 32000,
|
|
44
|
-
});
|
|
45
|
-
export const voyage35Lite = presetFor()("voyage/voyage-3.5-lite", {
|
|
46
|
-
...VOYAGE_BASE,
|
|
47
|
-
name: "Voyage 3.5 Lite",
|
|
48
|
-
created: "2025-05-20",
|
|
49
|
-
context: 32000,
|
|
50
|
-
});
|
|
51
|
-
export const voyage4Lite = presetFor()("voyage/voyage-4-lite", {
|
|
52
|
-
...VOYAGE_BASE,
|
|
53
|
-
name: "Voyage 4 Lite",
|
|
54
|
-
created: "2026-01-15",
|
|
55
|
-
context: 32000,
|
|
56
|
-
});
|
|
57
|
-
export const voyage4 = presetFor()("voyage/voyage-4", {
|
|
58
|
-
...VOYAGE_BASE,
|
|
59
|
-
name: "Voyage 4",
|
|
60
|
-
created: "2026-01-15",
|
|
61
|
-
context: 32000,
|
|
62
|
-
});
|
|
63
|
-
export const voyage4Large = presetFor()("voyage/voyage-4-large", {
|
|
64
|
-
...VOYAGE_BASE,
|
|
65
|
-
name: "Voyage 4 Large",
|
|
66
|
-
created: "2026-01-15",
|
|
67
|
-
context: 32000,
|
|
68
|
-
});
|
|
69
|
-
const voyageAtomic = {
|
|
70
|
-
v2: [voyage2Code, voyage2Finance, voyage2Law],
|
|
71
|
-
v3: [voyage3Code, voyage3Large],
|
|
72
|
-
"v3.5": [voyage35, voyage35Lite],
|
|
73
|
-
v4: [voyage4Lite, voyage4, voyage4Large],
|
|
74
|
-
};
|
|
75
|
-
const voyageGroups = {
|
|
76
|
-
"v2.x": [...voyageAtomic["v2"]],
|
|
77
|
-
"v3.x": [...voyageAtomic["v3"], ...voyageAtomic["v3.5"]],
|
|
78
|
-
"v4.x": [...voyageAtomic["v4"]],
|
|
79
|
-
};
|
|
80
|
-
export const voyage = {
|
|
81
|
-
...voyageAtomic,
|
|
82
|
-
...voyageGroups,
|
|
83
|
-
latest: [voyage2Finance, voyage2Law, voyage3Code, voyage4Lite, voyage4, voyage4Large],
|
|
84
|
-
all: Object.values(voyageAtomic).flat(),
|
|
85
|
-
};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import { type AnthropicProvider } from "@ai-sdk/anthropic";
|
|
2
|
-
import type { ModelId } from "../../models/types";
|
|
3
|
-
export declare const withCanonicalIdsForAnthropic: (provider: AnthropicProvider, extraMapping?: Record<ModelId, string>) => import("@ai-sdk/provider").ProviderV3;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import {} from "@ai-sdk/anthropic";
|
|
2
|
-
import { withCanonicalIds } from "../registry";
|
|
3
|
-
export const withCanonicalIdsForAnthropic = (provider, extraMapping) => withCanonicalIds(provider, {
|
|
4
|
-
mapping: extraMapping,
|
|
5
|
-
options: {
|
|
6
|
-
stripNamespace: true,
|
|
7
|
-
normalizeDelimiters: true,
|
|
8
|
-
},
|
|
9
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./canonical";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./canonical";
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { type AmazonBedrockProvider } from "@ai-sdk/amazon-bedrock";
|
|
2
|
-
import type { ModelId } from "../../models/types";
|
|
3
|
-
export type BedrockInferenceProfileOptions = {
|
|
4
|
-
/** @default "preferred" */
|
|
5
|
-
mode?: "preferred" | "avoid";
|
|
6
|
-
/** @default "us" */
|
|
7
|
-
geo?: "global" | "us" | "eu" | "apac" | "au" | "ca" | "jp" | "us-gov" | (string & {});
|
|
8
|
-
arn?: {
|
|
9
|
-
region: string;
|
|
10
|
-
accountId: string;
|
|
11
|
-
};
|
|
12
|
-
};
|
|
13
|
-
export type BedrockCanonicalConfig = {
|
|
14
|
-
inferenceProfile?: BedrockInferenceProfileOptions;
|
|
15
|
-
extraMapping?: Record<ModelId, string>;
|
|
16
|
-
};
|
|
17
|
-
export declare const withCanonicalIdsForBedrock: (provider: AmazonBedrockProvider, config?: BedrockCanonicalConfig) => import("@ai-sdk/provider").ProviderV3;
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import {} from "@ai-sdk/amazon-bedrock";
|
|
2
|
-
import { withCanonicalIds } from "../registry";
|
|
3
|
-
// For a list of all models with their IDs and InferenceTypes check:
|
|
4
|
-
// https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html
|
|
5
|
-
// OR
|
|
6
|
-
// aws bedrock list-foundation-models --region us-east-1 \
|
|
7
|
-
// --query "modelSummaries[].{id:modelId,mode:join(',', inferenceTypesSupported)}" \
|
|
8
|
-
// --output table
|
|
9
|
-
const MAPPING = {
|
|
10
|
-
// Require Inference Profiles and can't be resolved from standard name mapping
|
|
11
|
-
"anthropic/claude-haiku-4.5": "{ip}anthropic.claude-haiku-4-5-20251001-v1:0",
|
|
12
|
-
"anthropic/claude-sonnet-4.6": "{ip}anthropic.claude-sonnet-4-6",
|
|
13
|
-
"anthropic/claude-sonnet-4.5": "{ip}anthropic.claude-sonnet-4-5-20250929-v1:0",
|
|
14
|
-
"anthropic/claude-opus-4.6": "{ip}anthropic.claude-opus-4-6-v1",
|
|
15
|
-
"anthropic/claude-opus-4.5": "{ip}anthropic.claude-opus-4-5-20251101-v1:0",
|
|
16
|
-
"anthropic/claude-opus-4.1": "{ip}anthropic.claude-opus-4-1-20250805-v1:0",
|
|
17
|
-
"anthropic/claude-sonnet-4": "{ip}anthropic.claude-sonnet-4-20250514-v1:0",
|
|
18
|
-
"anthropic/claude-opus-4": "{ip}anthropic.claude-opus-4-20250514-v1:0",
|
|
19
|
-
"anthropic/claude-sonnet-3.7": "{ip}anthropic.claude-3-7-sonnet-20250219-v1:0",
|
|
20
|
-
"anthropic/claude-sonnet-3.5": "{ip}anthropic.claude-3-5-sonnet-20241022-v2:0",
|
|
21
|
-
"anthropic/claude-haiku-3.5": "{ip}anthropic.claude-3-5-haiku-20241022-v1:0",
|
|
22
|
-
"anthropic/claude-haiku-3": "{ip}anthropic.claude-3-haiku-20240307-v1:0",
|
|
23
|
-
"cohere/embed-v4.0": "{ip}cohere.embed-v4:0",
|
|
24
|
-
"meta/llama-3.1-70b": "{ip}meta.llama3-1-70b-instruct-v1:0",
|
|
25
|
-
"meta/llama-3.1-405b": "{ip}meta.llama3-1-405b-instruct-v1:0",
|
|
26
|
-
"meta/llama-3.2-1b": "{ip}meta.llama3-2-1b-instruct-v1:0",
|
|
27
|
-
"meta/llama-3.2-3b": "{ip}meta.llama3-2-3b-instruct-v1:0",
|
|
28
|
-
"meta/llama-3.2-11b": "{ip}meta.llama3-2-11b-instruct-v1:0",
|
|
29
|
-
"meta/llama-3.2-90b": "{ip}meta.llama3-2-90b-instruct-v1:0",
|
|
30
|
-
"meta/llama-4-scout": "{ip}meta.llama4-scout-17b-instruct-v1:0",
|
|
31
|
-
"meta/llama-4-maverick": "{ip}meta.llama4-maverick-17b-instruct-v1:0",
|
|
32
|
-
// On-demand only models, ensure that {ip} is never added
|
|
33
|
-
"amazon/nova-2-multimodal-embeddings": "amazon.nova-2-multimodal-embeddings-v1:0",
|
|
34
|
-
"cohere/embed-english-v3.0": "cohere.embed-english-v3",
|
|
35
|
-
"cohere/embed-multilingual-v3.0": "cohere.embed-multilingual-v3",
|
|
36
|
-
"cohere/command-r": "cohere.command-r-v1:0",
|
|
37
|
-
"cohere/command-r-plus": "cohere.command-r-plus-v1:0",
|
|
38
|
-
"meta/llama-3.3-70b": "meta.llama3-3-70b-instruct-v1:0",
|
|
39
|
-
"meta/llama-3.1-8b": "meta.llama3-1-8b-instruct-v1:0",
|
|
40
|
-
"openai/gpt-oss-20b": "openai.gpt-oss-20b-1:0",
|
|
41
|
-
"openai/gpt-oss-120b": "openai.gpt-oss-120b-1:0",
|
|
42
|
-
};
|
|
43
|
-
const resolveInferenceProfile = ({ geo = "us", arn } = {}) => `${arn ? `arn:aws:bedrock:${arn.region}:${arn.accountId}:inference-profile/` : ""}${geo}.`;
|
|
44
|
-
export const withCanonicalIdsForBedrock = (provider, config = {}) => withCanonicalIds(provider, {
|
|
45
|
-
mapping: {
|
|
46
|
-
...MAPPING,
|
|
47
|
-
...config.extraMapping,
|
|
48
|
-
},
|
|
49
|
-
options: {
|
|
50
|
-
stripNamespace: false,
|
|
51
|
-
namespaceSeparator: ".",
|
|
52
|
-
normalizeDelimiters: true,
|
|
53
|
-
prefix: config.inferenceProfile?.mode === "avoid"
|
|
54
|
-
? ""
|
|
55
|
-
: resolveInferenceProfile(config.inferenceProfile),
|
|
56
|
-
template: {
|
|
57
|
-
ip: resolveInferenceProfile(config.inferenceProfile),
|
|
58
|
-
},
|
|
59
|
-
postfix: config.inferenceProfile?.mode === "avoid" ? "" : "-v1:0",
|
|
60
|
-
},
|
|
61
|
-
});
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { modelMiddlewareMatcher } from "../../middleware/matcher";
|
|
2
|
-
const isClaude46 = (modelId) => modelId.includes("-4-6");
|
|
3
|
-
export const bedrockGptReasoningMiddleware = {
|
|
4
|
-
specificationVersion: "v3",
|
|
5
|
-
// eslint-disable-next-line require-await
|
|
6
|
-
transformParams: async ({ params, model }) => {
|
|
7
|
-
if (!model.modelId.includes("gpt"))
|
|
8
|
-
return params;
|
|
9
|
-
const bedrock = params.providerOptions?.["bedrock"];
|
|
10
|
-
if (!bedrock || typeof bedrock !== "object")
|
|
11
|
-
return params;
|
|
12
|
-
const effort = bedrock["reasoningEffort"];
|
|
13
|
-
if (effort === undefined)
|
|
14
|
-
return params;
|
|
15
|
-
const target = (bedrock["reasoningConfig"] ??= {});
|
|
16
|
-
target["maxReasoningEffort"] = effort;
|
|
17
|
-
delete bedrock["reasoningEffort"];
|
|
18
|
-
return params;
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
export const bedrockClaudeReasoningMiddleware = {
|
|
22
|
-
specificationVersion: "v3",
|
|
23
|
-
// eslint-disable-next-line require-await
|
|
24
|
-
transformParams: async ({ params, model }) => {
|
|
25
|
-
if (!model.modelId.includes("claude"))
|
|
26
|
-
return params;
|
|
27
|
-
const bedrock = params.providerOptions?.["bedrock"];
|
|
28
|
-
if (!bedrock || typeof bedrock !== "object")
|
|
29
|
-
return params;
|
|
30
|
-
const thinking = bedrock["thinking"];
|
|
31
|
-
const effort = bedrock["effort"];
|
|
32
|
-
if (!thinking && effort === undefined)
|
|
33
|
-
return params;
|
|
34
|
-
const target = (bedrock["reasoningConfig"] ??= {});
|
|
35
|
-
if (thinking && typeof thinking === "object") {
|
|
36
|
-
const thinkingOptions = thinking;
|
|
37
|
-
if (thinkingOptions["type"] !== undefined) {
|
|
38
|
-
target["type"] = thinkingOptions["type"];
|
|
39
|
-
}
|
|
40
|
-
if (thinkingOptions["budgetTokens"] !== undefined) {
|
|
41
|
-
target["budgetTokens"] = thinkingOptions["budgetTokens"];
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
// FUTURE: bedrock currently does not support "effort" for other 4.x models
|
|
45
|
-
if (effort !== undefined && isClaude46(model.modelId)) {
|
|
46
|
-
target["maxReasoningEffort"] = effort;
|
|
47
|
-
}
|
|
48
|
-
delete bedrock["thinking"];
|
|
49
|
-
delete bedrock["effort"];
|
|
50
|
-
return params;
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
modelMiddlewareMatcher.useForProvider("amazon-bedrock", {
|
|
54
|
-
language: [bedrockGptReasoningMiddleware, bedrockClaudeReasoningMiddleware],
|
|
55
|
-
});
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import {} from "@ai-sdk/cohere";
|
|
2
|
-
import { withCanonicalIds } from "../registry";
|
|
3
|
-
const MAPPING = {
|
|
4
|
-
"cohere/command-a": "command-a-03-2025",
|
|
5
|
-
"cohere/command-r7b": "command-r7b-12-2024",
|
|
6
|
-
"cohere/command-a-translate": "command-a-translate-08-2025",
|
|
7
|
-
"cohere/command-a-reasoning": "command-a-reasoning-08-2025",
|
|
8
|
-
"cohere/command-a-vision": "command-a-vision-07-2025",
|
|
9
|
-
"cohere/command-r": "command-r-08-2024",
|
|
10
|
-
"cohere/command-r-plus": "command-r-plus-08-2024",
|
|
11
|
-
};
|
|
12
|
-
export const withCanonicalIdsForCohere = (provider, extraMapping) => withCanonicalIds(provider, {
|
|
13
|
-
mapping: { ...MAPPING, ...extraMapping },
|
|
14
|
-
options: {
|
|
15
|
-
stripNamespace: true,
|
|
16
|
-
},
|
|
17
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./canonical";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./canonical";
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import {} from "@ai-sdk/groq";
|
|
2
|
-
import { withCanonicalIds } from "../registry";
|
|
3
|
-
const MAPPING = {
|
|
4
|
-
"meta/llama-3.1-8b": "llama-3.1-8b-instant",
|
|
5
|
-
"meta/llama-3.3-70b": "llama-3.3-70b-versatile",
|
|
6
|
-
"meta/llama-4-scout": "meta-llama/llama-4-scout-17b-16e-instruct",
|
|
7
|
-
"meta/llama-4-maverick": "meta-llama/llama-4-maverick-17b-128e-instruct",
|
|
8
|
-
};
|
|
9
|
-
export const withCanonicalIdsForGroq = (provider, extraMapping) => withCanonicalIds(provider, {
|
|
10
|
-
mapping: { ...MAPPING, ...extraMapping },
|
|
11
|
-
options: { stripNamespace: false },
|
|
12
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./canonical";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./canonical";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./canonical";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./canonical";
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { ProviderV3 } from "@ai-sdk/provider";
|
|
2
|
-
import type { ModelCatalog, ModelId } from "../models/types";
|
|
3
|
-
import type { ProviderRegistry } from "./types";
|
|
4
|
-
export declare const resolveProvider: (args: {
|
|
5
|
-
providers: ProviderRegistry;
|
|
6
|
-
models: ModelCatalog;
|
|
7
|
-
modelId: ModelId;
|
|
8
|
-
operation: "chat" | "embeddings";
|
|
9
|
-
}) => ProviderV3;
|
|
10
|
-
export type CanonicalIdsOptions = {
|
|
11
|
-
mapping?: Partial<Record<ModelId, string>>;
|
|
12
|
-
options?: {
|
|
13
|
-
/** @default true */
|
|
14
|
-
stripNamespace?: boolean;
|
|
15
|
-
/** @default false */
|
|
16
|
-
normalizeDelimiters?: boolean | readonly string[];
|
|
17
|
-
prefix?: string;
|
|
18
|
-
template?: Record<string, string | undefined>;
|
|
19
|
-
postfix?: string;
|
|
20
|
-
/** @default "/" */
|
|
21
|
-
namespaceSeparator?: "/" | "." | ":";
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
|
-
export declare const withCanonicalIds: (provider: ProviderV3, config?: CanonicalIdsOptions) => ProviderV3;
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { customProvider } from "ai";
|
|
2
|
-
import { GatewayError } from "../errors/gateway";
|
|
3
|
-
import { logger } from "../logger";
|
|
4
|
-
export const resolveProvider = (args) => {
|
|
5
|
-
const { providers, models, modelId, operation } = args;
|
|
6
|
-
const catalogModel = models[modelId];
|
|
7
|
-
if (!catalogModel) {
|
|
8
|
-
throw new GatewayError(`Model '${modelId}' not found in catalog`, 422, "MODEL_NOT_FOUND");
|
|
9
|
-
}
|
|
10
|
-
const modality = operation === "embeddings" ? "embedding" : "text";
|
|
11
|
-
if (catalogModel.modalities && !catalogModel.modalities.output.includes(modality)) {
|
|
12
|
-
throw new GatewayError(`Model '${modelId}' does not support '${modality}' output`, 422, "MODEL_UNSUPPORTED_OPERATION");
|
|
13
|
-
}
|
|
14
|
-
// FUTURE: implement fallback logic [e.g. runtime config invalid]
|
|
15
|
-
const resolvedProviderId = catalogModel.providers[0];
|
|
16
|
-
if (!resolvedProviderId) {
|
|
17
|
-
throw new GatewayError(`No providers configured for model '${modelId}'`, 422, "NO_PROVIDERS");
|
|
18
|
-
}
|
|
19
|
-
const provider = providers[resolvedProviderId];
|
|
20
|
-
if (!provider) {
|
|
21
|
-
throw new GatewayError(`Provider '${resolvedProviderId}' not configured`, 422, "PROVIDER_NOT_CONFIGURED");
|
|
22
|
-
}
|
|
23
|
-
return provider;
|
|
24
|
-
};
|
|
25
|
-
export const withCanonicalIds = (provider, config = {}) => {
|
|
26
|
-
const { mapping, options: { stripNamespace = true, normalizeDelimiters = false, template, prefix, postfix, namespaceSeparator = "/", } = {}, } = config;
|
|
27
|
-
const shouldNormalizeDelimiters = (canonicalId) => {
|
|
28
|
-
if (typeof normalizeDelimiters === "boolean")
|
|
29
|
-
return normalizeDelimiters;
|
|
30
|
-
return normalizeDelimiters.some((x) => canonicalId.startsWith(`${x}/`));
|
|
31
|
-
};
|
|
32
|
-
const normalizeId = (canonicalId) => {
|
|
33
|
-
let out = canonicalId;
|
|
34
|
-
if (shouldNormalizeDelimiters(canonicalId)) {
|
|
35
|
-
out = out.replaceAll(".", "-");
|
|
36
|
-
}
|
|
37
|
-
if (stripNamespace) {
|
|
38
|
-
out = out.replace(/^[^/]+\//, "");
|
|
39
|
-
}
|
|
40
|
-
else if (namespaceSeparator !== "/") {
|
|
41
|
-
out = out.replace("/", namespaceSeparator);
|
|
42
|
-
}
|
|
43
|
-
return out;
|
|
44
|
-
};
|
|
45
|
-
const applyTemplate = (input) => {
|
|
46
|
-
if (!template)
|
|
47
|
-
return input;
|
|
48
|
-
return Object.entries(template).reduce((out, [k, v]) => out.replace(`{${k}}`, v ?? ""), input);
|
|
49
|
-
};
|
|
50
|
-
const applyFallbackAffixes = (v) => {
|
|
51
|
-
let out = prefix && !v.startsWith(prefix) ? `${prefix}${v}` : v;
|
|
52
|
-
if (postfix && !out.endsWith(postfix))
|
|
53
|
-
out = `${out}${postfix}`;
|
|
54
|
-
return out;
|
|
55
|
-
};
|
|
56
|
-
const needsFallbackWrap = stripNamespace || normalizeDelimiters || namespaceSeparator !== "/" || !!prefix || !!postfix;
|
|
57
|
-
// FUTURE: use embeddingModel instead of textEmbeddingModel once voyage supports it
|
|
58
|
-
const languageModel = provider.languageModel;
|
|
59
|
-
const embeddingModel = provider.textEmbeddingModel;
|
|
60
|
-
const fallbackProvider = needsFallbackWrap
|
|
61
|
-
? {
|
|
62
|
-
...provider,
|
|
63
|
-
specificationVersion: "v3",
|
|
64
|
-
languageModel: (id) => {
|
|
65
|
-
const mapped = applyFallbackAffixes(normalizeId(id));
|
|
66
|
-
logger.debug(`[canonical] mapped ${id} to ${mapped}`);
|
|
67
|
-
return languageModel(mapped);
|
|
68
|
-
},
|
|
69
|
-
embeddingModel: (id) => {
|
|
70
|
-
const mapped = applyFallbackAffixes(normalizeId(id));
|
|
71
|
-
logger.debug(`[canonical] mapped ${id} to ${mapped}`);
|
|
72
|
-
return embeddingModel(mapped);
|
|
73
|
-
},
|
|
74
|
-
}
|
|
75
|
-
: provider;
|
|
76
|
-
const mapModels = (fn) => {
|
|
77
|
-
const out = {};
|
|
78
|
-
// Some providers don't have languageModel / embeddingModel
|
|
79
|
-
if (fn === undefined)
|
|
80
|
-
return out;
|
|
81
|
-
for (const [k, v] of Object.entries(mapping ?? {})) {
|
|
82
|
-
if (v === undefined)
|
|
83
|
-
continue;
|
|
84
|
-
// This is lazy so that provider is only create once called
|
|
85
|
-
Object.defineProperty(out, k, {
|
|
86
|
-
get: () => {
|
|
87
|
-
const mapped = applyTemplate(v);
|
|
88
|
-
logger.debug(`[canonical] mapped ${k} to ${mapped}`);
|
|
89
|
-
return fn(mapped);
|
|
90
|
-
},
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
return out;
|
|
94
|
-
};
|
|
95
|
-
return customProvider({
|
|
96
|
-
languageModels: mapModels(languageModel),
|
|
97
|
-
embeddingModels: mapModels(embeddingModel),
|
|
98
|
-
fallbackProvider,
|
|
99
|
-
});
|
|
100
|
-
};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { type ProviderV3 } from "@ai-sdk/provider";
|
|
2
|
-
export declare const CANONICAL_PROVIDER_IDS: readonly ["anthropic", "azure", "bedrock", "cohere", "groq", "openai", "vertex", "voyage"];
|
|
3
|
-
export type CanonicalProviderId = (typeof CANONICAL_PROVIDER_IDS)[number];
|
|
4
|
-
export type ProviderId = CanonicalProviderId | (string & {});
|
|
5
|
-
export type ProviderRegistry = {
|
|
6
|
-
[K in ProviderId]?: ProviderV3;
|
|
7
|
-
};
|
package/dist/providers/types.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import type { GoogleVertexProvider } from "@ai-sdk/google-vertex";
|
|
2
|
-
import type { ModelId } from "../../models/types";
|
|
3
|
-
export declare const withCanonicalIdsForVertex: (provider: GoogleVertexProvider, extraMapping?: Record<ModelId, string>) => import("@ai-sdk/provider").ProviderV3;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./canonical";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./canonical";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./canonical";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./canonical";
|
package/dist/telemetry/ai-sdk.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { logger } from "../logger";
|
|
2
|
-
import { addSpanEvent, setSpanAttributes } from "./span";
|
|
3
|
-
export const installAiSdkWarningLogger = (genAiSignalLevel) => {
|
|
4
|
-
const logWarnings = ({ warnings, provider, model }) => {
|
|
5
|
-
if (warnings.length === 0)
|
|
6
|
-
return;
|
|
7
|
-
for (const warning of warnings) {
|
|
8
|
-
logger.warn({
|
|
9
|
-
provider,
|
|
10
|
-
model,
|
|
11
|
-
warning,
|
|
12
|
-
}, `[ai-sdk] ${warning.type}`);
|
|
13
|
-
}
|
|
14
|
-
if (!(genAiSignalLevel === "recommended" || genAiSignalLevel === "full"))
|
|
15
|
-
return;
|
|
16
|
-
setSpanAttributes({
|
|
17
|
-
"gen_ai.response.warning_count": warnings.length,
|
|
18
|
-
});
|
|
19
|
-
for (const warning of warnings) {
|
|
20
|
-
addSpanEvent("gen_ai.warning", {
|
|
21
|
-
"gen_ai.provider.name": provider,
|
|
22
|
-
"gen_ai.response.model": model,
|
|
23
|
-
"gen_ai.warning.type": warning.type,
|
|
24
|
-
"gen_ai.warning.feature": "feature" in warning ? warning.feature : undefined,
|
|
25
|
-
"gen_ai.warning.details": "details" in warning ? warning.details : undefined,
|
|
26
|
-
"gen_ai.warning.message": "message" in warning ? warning.message : undefined,
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
globalThis.AI_SDK_LOG_WARNINGS = logWarnings;
|
|
31
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const getBaggageAttributes: (request?: Request) => Record<string, string>;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
const HEBO_BAGGAGE_PREFIX = "hebo.";
|
|
2
|
-
export const getBaggageAttributes = (request) => {
|
|
3
|
-
const h = request?.headers.get("baggage");
|
|
4
|
-
if (!h)
|
|
5
|
-
return {};
|
|
6
|
-
const attrs = {};
|
|
7
|
-
for (const part of h.split(",")) {
|
|
8
|
-
const [k, v] = part.trim().split("=", 2);
|
|
9
|
-
if (!k || !v)
|
|
10
|
-
continue;
|
|
11
|
-
const [rawValue] = v.split(";", 1);
|
|
12
|
-
if (!rawValue)
|
|
13
|
-
continue;
|
|
14
|
-
let value = rawValue;
|
|
15
|
-
try {
|
|
16
|
-
value = decodeURIComponent(rawValue);
|
|
17
|
-
}
|
|
18
|
-
catch { }
|
|
19
|
-
if (k.startsWith(HEBO_BAGGAGE_PREFIX)) {
|
|
20
|
-
attrs[k.slice(HEBO_BAGGAGE_PREFIX.length)] = value;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
return attrs;
|
|
24
|
-
};
|
package/dist/telemetry/fetch.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { SpanKind } from "@opentelemetry/api";
|
|
2
|
-
import { withSpan } from "./span";
|
|
3
|
-
const ORIGINAL_FETCH_KEY = Symbol.for("@hebo/fetch/original-fetch");
|
|
4
|
-
const g = globalThis;
|
|
5
|
-
let fetchTracingEnabled = false;
|
|
6
|
-
const shouldTraceFetch = (init) => typeof init?.headers?.["user-agent"] === "string" &&
|
|
7
|
-
init.headers["user-agent"].indexOf("ai-sdk/provider-utils") !== -1;
|
|
8
|
-
const otelFetch = (input, init) => {
|
|
9
|
-
const original = g[ORIGINAL_FETCH_KEY];
|
|
10
|
-
if (!fetchTracingEnabled)
|
|
11
|
-
return original(input, init);
|
|
12
|
-
if (!shouldTraceFetch(init))
|
|
13
|
-
return original(input, init);
|
|
14
|
-
return withSpan("fetch", () => original(input, init), { kind: SpanKind.CLIENT });
|
|
15
|
-
};
|
|
16
|
-
export const initFetch = (level) => {
|
|
17
|
-
fetchTracingEnabled = level === "full";
|
|
18
|
-
if (!fetchTracingEnabled)
|
|
19
|
-
return;
|
|
20
|
-
if (g[ORIGINAL_FETCH_KEY])
|
|
21
|
-
return;
|
|
22
|
-
g[ORIGINAL_FETCH_KEY] = globalThis.fetch.bind(globalThis);
|
|
23
|
-
globalThis.fetch = otelFetch;
|
|
24
|
-
};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { type Attributes } from "@opentelemetry/api";
|
|
2
|
-
import type { TelemetrySignalLevel } from "../types";
|
|
3
|
-
export declare const recordRequestDuration: (start: number, attrs: Attributes, signalLevel?: TelemetrySignalLevel) => void;
|
|
4
|
-
export declare const recordTimePerOutputToken: (start: number, tokenAttrs: Attributes, metricAttrs: Attributes, signalLevel?: TelemetrySignalLevel) => void;
|
|
5
|
-
export declare const recordTokenUsage: (tokenAttrs: Attributes, metricAttrs: Attributes, signalLevel?: TelemetrySignalLevel) => void;
|