@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.
Files changed (180) hide show
  1. package/README.md +32 -1
  2. package/package.json +17 -12
  3. package/src/endpoints/chat-completions/converters.test.ts +85 -1
  4. package/src/endpoints/chat-completions/converters.ts +139 -18
  5. package/src/endpoints/chat-completions/handler.test.ts +2 -0
  6. package/src/endpoints/chat-completions/index.ts +1 -0
  7. package/src/endpoints/chat-completions/otel.ts +1 -0
  8. package/src/endpoints/chat-completions/schema.ts +38 -4
  9. package/src/endpoints/embeddings/index.ts +1 -0
  10. package/src/lifecycle.ts +2 -2
  11. package/src/models/anthropic/middleware.test.ts +45 -1
  12. package/src/models/anthropic/middleware.ts +21 -1
  13. package/src/models/google/middleware.test.ts +30 -1
  14. package/src/models/google/middleware.ts +20 -1
  15. package/src/models/openai/middleware.test.ts +32 -1
  16. package/src/models/openai/middleware.ts +25 -1
  17. package/src/providers/bedrock/middleware.test.ts +121 -1
  18. package/src/providers/bedrock/middleware.ts +61 -1
  19. package/src/telemetry/fetch.ts +31 -4
  20. package/src/telemetry/index.ts +1 -0
  21. package/dist/config.d.ts +0 -2
  22. package/dist/config.js +0 -81
  23. package/dist/endpoints/chat-completions/converters.d.ts +0 -43
  24. package/dist/endpoints/chat-completions/converters.js +0 -551
  25. package/dist/endpoints/chat-completions/handler.d.ts +0 -2
  26. package/dist/endpoints/chat-completions/handler.js +0 -145
  27. package/dist/endpoints/chat-completions/index.d.ts +0 -3
  28. package/dist/endpoints/chat-completions/index.js +0 -3
  29. package/dist/endpoints/chat-completions/otel.d.ts +0 -6
  30. package/dist/endpoints/chat-completions/otel.js +0 -134
  31. package/dist/endpoints/chat-completions/schema.d.ts +0 -946
  32. package/dist/endpoints/chat-completions/schema.js +0 -257
  33. package/dist/endpoints/embeddings/converters.d.ts +0 -10
  34. package/dist/endpoints/embeddings/converters.js +0 -31
  35. package/dist/endpoints/embeddings/handler.d.ts +0 -2
  36. package/dist/endpoints/embeddings/handler.js +0 -101
  37. package/dist/endpoints/embeddings/index.d.ts +0 -3
  38. package/dist/endpoints/embeddings/index.js +0 -3
  39. package/dist/endpoints/embeddings/otel.d.ts +0 -6
  40. package/dist/endpoints/embeddings/otel.js +0 -35
  41. package/dist/endpoints/embeddings/schema.d.ts +0 -38
  42. package/dist/endpoints/embeddings/schema.js +0 -26
  43. package/dist/endpoints/models/converters.d.ts +0 -6
  44. package/dist/endpoints/models/converters.js +0 -42
  45. package/dist/endpoints/models/handler.d.ts +0 -2
  46. package/dist/endpoints/models/handler.js +0 -29
  47. package/dist/endpoints/models/index.d.ts +0 -3
  48. package/dist/endpoints/models/index.js +0 -3
  49. package/dist/endpoints/models/schema.d.ts +0 -42
  50. package/dist/endpoints/models/schema.js +0 -31
  51. package/dist/errors/ai-sdk.d.ts +0 -2
  52. package/dist/errors/ai-sdk.js +0 -52
  53. package/dist/errors/gateway.d.ts +0 -5
  54. package/dist/errors/gateway.js +0 -13
  55. package/dist/errors/openai.d.ts +0 -20
  56. package/dist/errors/openai.js +0 -40
  57. package/dist/errors/utils.d.ts +0 -22
  58. package/dist/errors/utils.js +0 -44
  59. package/dist/gateway.d.ts +0 -9
  60. package/dist/gateway.js +0 -34
  61. package/dist/index.d.ts +0 -14
  62. package/dist/index.js +0 -13
  63. package/dist/lifecycle.d.ts +0 -2
  64. package/dist/lifecycle.js +0 -94
  65. package/dist/logger/default.d.ts +0 -4
  66. package/dist/logger/default.js +0 -81
  67. package/dist/logger/index.d.ts +0 -14
  68. package/dist/logger/index.js +0 -25
  69. package/dist/middleware/common.d.ts +0 -12
  70. package/dist/middleware/common.js +0 -145
  71. package/dist/middleware/matcher.d.ts +0 -27
  72. package/dist/middleware/matcher.js +0 -112
  73. package/dist/middleware/utils.d.ts +0 -2
  74. package/dist/middleware/utils.js +0 -27
  75. package/dist/models/amazon/index.d.ts +0 -2
  76. package/dist/models/amazon/index.js +0 -2
  77. package/dist/models/amazon/middleware.d.ts +0 -3
  78. package/dist/models/amazon/middleware.js +0 -65
  79. package/dist/models/amazon/presets.d.ts +0 -2390
  80. package/dist/models/amazon/presets.js +0 -80
  81. package/dist/models/anthropic/index.d.ts +0 -2
  82. package/dist/models/anthropic/index.js +0 -2
  83. package/dist/models/anthropic/middleware.d.ts +0 -4
  84. package/dist/models/anthropic/middleware.js +0 -111
  85. package/dist/models/anthropic/presets.d.ts +0 -4802
  86. package/dist/models/anthropic/presets.js +0 -135
  87. package/dist/models/catalog.d.ts +0 -4
  88. package/dist/models/catalog.js +0 -4
  89. package/dist/models/cohere/index.d.ts +0 -2
  90. package/dist/models/cohere/index.js +0 -2
  91. package/dist/models/cohere/middleware.d.ts +0 -3
  92. package/dist/models/cohere/middleware.js +0 -60
  93. package/dist/models/cohere/presets.d.ts +0 -2918
  94. package/dist/models/cohere/presets.js +0 -134
  95. package/dist/models/google/index.d.ts +0 -2
  96. package/dist/models/google/index.js +0 -2
  97. package/dist/models/google/middleware.d.ts +0 -7
  98. package/dist/models/google/middleware.js +0 -103
  99. package/dist/models/google/presets.d.ts +0 -2553
  100. package/dist/models/google/presets.js +0 -83
  101. package/dist/models/meta/index.d.ts +0 -1
  102. package/dist/models/meta/index.js +0 -1
  103. package/dist/models/meta/presets.d.ts +0 -3254
  104. package/dist/models/meta/presets.js +0 -95
  105. package/dist/models/openai/index.d.ts +0 -2
  106. package/dist/models/openai/index.js +0 -2
  107. package/dist/models/openai/middleware.d.ts +0 -3
  108. package/dist/models/openai/middleware.js +0 -62
  109. package/dist/models/openai/presets.d.ts +0 -6634
  110. package/dist/models/openai/presets.js +0 -213
  111. package/dist/models/types.d.ts +0 -20
  112. package/dist/models/types.js +0 -84
  113. package/dist/models/voyage/index.d.ts +0 -2
  114. package/dist/models/voyage/index.js +0 -2
  115. package/dist/models/voyage/middleware.d.ts +0 -2
  116. package/dist/models/voyage/middleware.js +0 -18
  117. package/dist/models/voyage/presets.d.ts +0 -3471
  118. package/dist/models/voyage/presets.js +0 -85
  119. package/dist/providers/anthropic/canonical.d.ts +0 -3
  120. package/dist/providers/anthropic/canonical.js +0 -9
  121. package/dist/providers/anthropic/index.d.ts +0 -1
  122. package/dist/providers/anthropic/index.js +0 -1
  123. package/dist/providers/bedrock/canonical.d.ts +0 -17
  124. package/dist/providers/bedrock/canonical.js +0 -61
  125. package/dist/providers/bedrock/index.d.ts +0 -2
  126. package/dist/providers/bedrock/index.js +0 -2
  127. package/dist/providers/bedrock/middleware.d.ts +0 -3
  128. package/dist/providers/bedrock/middleware.js +0 -55
  129. package/dist/providers/cohere/canonical.d.ts +0 -3
  130. package/dist/providers/cohere/canonical.js +0 -17
  131. package/dist/providers/cohere/index.d.ts +0 -1
  132. package/dist/providers/cohere/index.js +0 -1
  133. package/dist/providers/groq/canonical.d.ts +0 -3
  134. package/dist/providers/groq/canonical.js +0 -12
  135. package/dist/providers/groq/index.d.ts +0 -1
  136. package/dist/providers/groq/index.js +0 -1
  137. package/dist/providers/openai/canonical.d.ts +0 -3
  138. package/dist/providers/openai/canonical.js +0 -8
  139. package/dist/providers/openai/index.d.ts +0 -1
  140. package/dist/providers/openai/index.js +0 -1
  141. package/dist/providers/registry.d.ts +0 -24
  142. package/dist/providers/registry.js +0 -100
  143. package/dist/providers/types.d.ts +0 -7
  144. package/dist/providers/types.js +0 -11
  145. package/dist/providers/vertex/canonical.d.ts +0 -3
  146. package/dist/providers/vertex/canonical.js +0 -8
  147. package/dist/providers/vertex/index.d.ts +0 -1
  148. package/dist/providers/vertex/index.js +0 -1
  149. package/dist/providers/voyage/canonical.d.ts +0 -3
  150. package/dist/providers/voyage/canonical.js +0 -7
  151. package/dist/providers/voyage/index.d.ts +0 -1
  152. package/dist/providers/voyage/index.js +0 -1
  153. package/dist/telemetry/ai-sdk.d.ts +0 -2
  154. package/dist/telemetry/ai-sdk.js +0 -31
  155. package/dist/telemetry/baggage.d.ts +0 -1
  156. package/dist/telemetry/baggage.js +0 -24
  157. package/dist/telemetry/fetch.d.ts +0 -2
  158. package/dist/telemetry/fetch.js +0 -24
  159. package/dist/telemetry/gen-ai.d.ts +0 -5
  160. package/dist/telemetry/gen-ai.js +0 -60
  161. package/dist/telemetry/http.d.ts +0 -3
  162. package/dist/telemetry/http.js +0 -54
  163. package/dist/telemetry/memory.d.ts +0 -2
  164. package/dist/telemetry/memory.js +0 -27
  165. package/dist/telemetry/span.d.ts +0 -13
  166. package/dist/telemetry/span.js +0 -60
  167. package/dist/telemetry/stream.d.ts +0 -3
  168. package/dist/telemetry/stream.js +0 -51
  169. package/dist/types.d.ts +0 -176
  170. package/dist/types.js +0 -1
  171. package/dist/utils/env.d.ts +0 -2
  172. package/dist/utils/env.js +0 -5
  173. package/dist/utils/headers.d.ts +0 -4
  174. package/dist/utils/headers.js +0 -22
  175. package/dist/utils/preset.d.ts +0 -9
  176. package/dist/utils/preset.js +0 -41
  177. package/dist/utils/request.d.ts +0 -2
  178. package/dist/utils/request.js +0 -14
  179. package/dist/utils/response.d.ts +0 -3
  180. package/dist/utils/response.js +0 -68
@@ -1,145 +0,0 @@
1
- function snakeToCamel(key) {
2
- if (key.indexOf("_") === -1)
3
- return key;
4
- let out = "";
5
- for (let i = 0; i < key.length; i++) {
6
- const c = key[i];
7
- if (c === "_" && i + 1 < key.length) {
8
- const next = key[i + 1];
9
- if (next >= "a" && next <= "z") {
10
- out += next.toUpperCase();
11
- i++;
12
- continue;
13
- }
14
- }
15
- out += c;
16
- }
17
- return out;
18
- }
19
- function hasUppercase(s) {
20
- for (let i = 0; i < s.length; i++) {
21
- const c = s[i];
22
- if (c >= "A" && c <= "Z")
23
- return true;
24
- }
25
- return false;
26
- }
27
- function camelToSnake(key) {
28
- if (!hasUppercase(key))
29
- return key;
30
- let out = "";
31
- for (let i = 0; i < key.length; i++) {
32
- const c = key[i];
33
- out += c >= "A" && c <= "Z" ? "_" + c.toLowerCase() : c;
34
- }
35
- return out;
36
- }
37
- function remapDeep(value, mapKey) {
38
- if (value === null || typeof value !== "object")
39
- return value;
40
- if (Array.isArray(value)) {
41
- return value.map((v) => remapDeep(v, mapKey));
42
- }
43
- const out = {};
44
- for (const key of Object.keys(value)) {
45
- out[mapKey(key)] = remapDeep(value[key], mapKey);
46
- }
47
- return out;
48
- }
49
- function processOptions(options, providerName) {
50
- const target = (options[providerName] = remapDeep(options[providerName] ?? {}, snakeToCamel));
51
- for (const namespace in options) {
52
- if (namespace === providerName)
53
- continue;
54
- Object.assign(target, remapDeep(options[namespace], snakeToCamel));
55
- if (namespace === "unknown")
56
- delete options[namespace];
57
- }
58
- }
59
- function processMetadata(metadata) {
60
- for (const namespace in metadata) {
61
- metadata[namespace] = remapDeep(metadata[namespace], camelToSnake);
62
- }
63
- }
64
- /**
65
- * Converts snake_case params in providerOptions to camelCase
66
- * and moves all of them into providerOptions[providerName].
67
- * Also snakizes values in providerMetadata for OpenAI compatibility.
68
- */
69
- export function forwardLanguageParams(providerName) {
70
- return {
71
- specificationVersion: "v3",
72
- // eslint-disable-next-line require-await
73
- transformParams: async ({ params }) => {
74
- if (params.providerOptions)
75
- processOptions(params.providerOptions, providerName);
76
- for (const message of params.prompt) {
77
- if (message.providerOptions) {
78
- processOptions(message.providerOptions, providerName);
79
- }
80
- if (message.content && Array.isArray(message.content)) {
81
- for (const part of message.content) {
82
- if ("providerOptions" in part && part.providerOptions) {
83
- processOptions(part.providerOptions, providerName);
84
- }
85
- }
86
- }
87
- }
88
- return params;
89
- },
90
- wrapGenerate: async ({ doGenerate }) => {
91
- const result = await doGenerate();
92
- if (result.providerMetadata)
93
- processMetadata(result.providerMetadata);
94
- result.content?.forEach((part) => {
95
- if (part.providerMetadata)
96
- processMetadata(part.providerMetadata);
97
- });
98
- return result;
99
- },
100
- wrapStream: async ({ doStream }) => {
101
- const result = await doStream();
102
- result.stream = result.stream.pipeThrough(new TransformStream({
103
- transform(part, controller) {
104
- if ("providerMetadata" in part && part.providerMetadata) {
105
- processMetadata(part.providerMetadata);
106
- }
107
- controller.enqueue(part);
108
- },
109
- }));
110
- return result;
111
- },
112
- };
113
- }
114
- export function forwardEmbeddingParams(providerName) {
115
- return {
116
- specificationVersion: "v3",
117
- // eslint-disable-next-line require-await
118
- transformParams: async ({ params }) => {
119
- if (params.providerOptions)
120
- processOptions(params.providerOptions, providerName);
121
- return params;
122
- },
123
- wrapEmbed: async ({ doEmbed }) => {
124
- const result = await doEmbed();
125
- if (result.providerMetadata)
126
- processMetadata(result.providerMetadata);
127
- return result;
128
- },
129
- };
130
- }
131
- export function extractProviderNamespace(id) {
132
- if (id === "amazon-bedrock")
133
- return "bedrock";
134
- const [first, second] = id.split(".");
135
- // FUTURE: map vertex to google once AI SDK support per-message level provider options
136
- if (first === "vertex" || second === "vertex")
137
- return "vertex";
138
- return first;
139
- }
140
- export function forwardParamsMiddleware(provider) {
141
- return forwardLanguageParams(extractProviderNamespace(provider));
142
- }
143
- export function forwardParamsEmbeddingMiddleware(provider) {
144
- return forwardEmbeddingParams(extractProviderNamespace(provider));
145
- }
@@ -1,27 +0,0 @@
1
- import type { EmbeddingModelMiddleware, LanguageModelMiddleware } from "ai";
2
- import type { ModelId } from "../models/types";
3
- import type { ProviderId } from "../providers/types";
4
- type MiddlewareEntries = {
5
- language?: LanguageModelMiddleware[];
6
- embedding?: EmbeddingModelMiddleware[];
7
- };
8
- type ModelMiddleware = LanguageModelMiddleware | EmbeddingModelMiddleware;
9
- declare class ModelMiddlewareMatcher {
10
- private model;
11
- private provider;
12
- private static readonly MAX_CACHE;
13
- private cache;
14
- useForModel(patterns: ModelId | readonly ModelId[], entry: MiddlewareEntries): void;
15
- useForProvider(patterns: ProviderId | readonly ProviderId[], entry: MiddlewareEntries): void;
16
- for(modelId: ModelId, providerId: ProviderId): LanguageModelMiddleware[];
17
- forEmbedding(modelId: ModelId, providerId: ProviderId): EmbeddingModelMiddleware[];
18
- resolve(options: {
19
- kind: "text" | "embedding";
20
- modelId?: ModelId;
21
- providerId?: ProviderId;
22
- forward?: ModelMiddleware | (() => ModelMiddleware);
23
- }): ModelMiddleware[];
24
- private collect;
25
- }
26
- export declare const modelMiddlewareMatcher: ModelMiddlewareMatcher;
27
- export type { ModelMiddlewareMatcher };
@@ -1,112 +0,0 @@
1
- import { logger } from "../logger";
2
- import { addSpanEvent } from "../telemetry/span";
3
- import { forwardParamsEmbeddingMiddleware, forwardParamsMiddleware } from "./common";
4
- class SimpleMatcher {
5
- rules = [];
6
- use(pattern, entry) {
7
- const stored = {
8
- language: entry.language ? [...entry.language] : undefined,
9
- embedding: entry.embedding ? [...entry.embedding] : undefined,
10
- };
11
- this.rules.push({ pattern, test: compilePattern(pattern), stored });
12
- }
13
- match(key) {
14
- const out = [];
15
- const matched = [];
16
- for (const r of this.rules) {
17
- if (!r.test(key))
18
- continue;
19
- out.push(r.stored);
20
- matched.push(r.pattern);
21
- }
22
- const matchedSummary = matched.length > 0 ? matched.join(",") : "none";
23
- logger.debug(`[middleware] matched ${key} to [${matchedSummary}]`);
24
- return out;
25
- }
26
- }
27
- class ModelMiddlewareMatcher {
28
- model = new SimpleMatcher();
29
- provider = new SimpleMatcher();
30
- static MAX_CACHE = 500;
31
- cache = new Map();
32
- useForModel(patterns, entry) {
33
- this.cache.clear();
34
- for (const pattern of toArray(patterns)) {
35
- this.model.use(pattern, entry);
36
- }
37
- }
38
- useForProvider(patterns, entry) {
39
- this.cache.clear();
40
- for (const pattern of toArray(patterns)) {
41
- this.provider.use(pattern, entry);
42
- }
43
- }
44
- for(modelId, providerId) {
45
- return this.resolve({
46
- kind: "text",
47
- modelId,
48
- providerId,
49
- forward: () => forwardParamsMiddleware(providerId),
50
- });
51
- }
52
- forEmbedding(modelId, providerId) {
53
- return this.resolve({
54
- kind: "embedding",
55
- modelId,
56
- providerId,
57
- forward: () => forwardParamsEmbeddingMiddleware(providerId),
58
- });
59
- }
60
- resolve(options) {
61
- const { kind, modelId, providerId, forward } = options;
62
- const key = `${kind}-${modelId}:${providerId}`;
63
- const cached = this.cache.get(key);
64
- if (cached) {
65
- logger.debug(`[middleware] cache hit for ${modelId}:${providerId}`);
66
- return cached;
67
- }
68
- const out = [];
69
- if (modelId) {
70
- out.push(...this.collect(this.model.match(modelId), kind));
71
- }
72
- if (forward) {
73
- out.push(typeof forward === "function" ? forward() : forward);
74
- }
75
- if (providerId) {
76
- out.push(...this.collect(this.provider.match(providerId), kind));
77
- }
78
- if (this.cache.size >= ModelMiddlewareMatcher.MAX_CACHE) {
79
- let n = Math.ceil(ModelMiddlewareMatcher.MAX_CACHE * 0.2);
80
- for (const cacheKey of this.cache.keys()) {
81
- this.cache.delete(cacheKey);
82
- if (--n === 0)
83
- break;
84
- }
85
- logger.warn(`[middleware] cache eviction`);
86
- addSpanEvent("hebo.middleware.cache.evicted");
87
- }
88
- this.cache.set(key, out);
89
- return out;
90
- }
91
- collect(entries, kind) {
92
- const out = [];
93
- for (const s of entries) {
94
- if (kind === "text")
95
- out.push(...(s.language ?? []));
96
- else
97
- out.push(...(s.embedding ?? []));
98
- }
99
- return out;
100
- }
101
- }
102
- export const modelMiddlewareMatcher = new ModelMiddlewareMatcher();
103
- const toArray = (v) => (Array.isArray(v) ? v : [v]);
104
- function compilePattern(pattern) {
105
- if (!pattern.includes("*"))
106
- return (key) => key === pattern;
107
- const re = new RegExp(`^${pattern
108
- .split("*")
109
- .map((p) => p.replaceAll(/[-\\^$+?.()|[\]{}]/g, "\\$&"))
110
- .join(".*")}$`);
111
- return (key) => re.test(key);
112
- }
@@ -1,2 +0,0 @@
1
- import type { ChatCompletionsReasoningEffort } from "../endpoints/chat-completions/schema";
2
- export declare function calculateReasoningBudgetFromEffort(effort: ChatCompletionsReasoningEffort, maxTokens: number, minTokens?: number): number;
@@ -1,27 +0,0 @@
1
- export function calculateReasoningBudgetFromEffort(effort, maxTokens, minTokens = 1024) {
2
- let percentage = 0;
3
- switch (effort) {
4
- case "none":
5
- percentage = 0;
6
- break;
7
- case "minimal":
8
- percentage = 0.1;
9
- break;
10
- case "low":
11
- percentage = 0.2;
12
- break;
13
- case "medium":
14
- percentage = 0.5;
15
- break;
16
- case "high":
17
- percentage = 0.8;
18
- break;
19
- case "xhigh":
20
- case "max":
21
- percentage = 0.95;
22
- break;
23
- default:
24
- return 0;
25
- }
26
- return Math.max(minTokens, Math.floor(maxTokens * percentage));
27
- }
@@ -1,2 +0,0 @@
1
- export * from "./middleware";
2
- export * from "./presets";
@@ -1,2 +0,0 @@
1
- export * from "./middleware";
2
- export * from "./presets";
@@ -1,3 +0,0 @@
1
- import type { EmbeddingModelMiddleware, LanguageModelMiddleware } from "ai";
2
- export declare const novaDimensionsMiddleware: EmbeddingModelMiddleware;
3
- export declare const novaReasoningMiddleware: LanguageModelMiddleware;
@@ -1,65 +0,0 @@
1
- import { modelMiddlewareMatcher } from "../../middleware/matcher";
2
- // Convert `dimensions` (OpenAI) to `embeddingDimension` (Nova)
3
- export const novaDimensionsMiddleware = {
4
- specificationVersion: "v3",
5
- // eslint-disable-next-line require-await
6
- transformParams: async ({ params }) => {
7
- const unknown = params.providerOptions?.["unknown"];
8
- if (!unknown)
9
- return params;
10
- const dimensions = unknown["dimensions"];
11
- if (!dimensions)
12
- return params;
13
- (params.providerOptions["nova"] ??= {})["embeddingDimension"] = dimensions;
14
- delete unknown["dimensions"];
15
- return params;
16
- },
17
- };
18
- function mapNovaEffort(effort) {
19
- switch (effort) {
20
- case "minimal":
21
- case "low":
22
- return "low";
23
- case "medium":
24
- return "medium";
25
- case "high":
26
- case "xhigh":
27
- case "max":
28
- return "high";
29
- }
30
- }
31
- export const novaReasoningMiddleware = {
32
- specificationVersion: "v3",
33
- // eslint-disable-next-line require-await
34
- transformParams: async ({ params }) => {
35
- const unknown = params.providerOptions?.["unknown"];
36
- if (!unknown)
37
- return params;
38
- const reasoning = unknown["reasoning"];
39
- if (!reasoning)
40
- return params;
41
- const target = (params.providerOptions["amazon"] ??= {});
42
- if (!reasoning.enabled) {
43
- target["reasoningConfig"] = { type: "disabled" };
44
- }
45
- else if (reasoning.effort) {
46
- // FUTURE: warn if mapNovaEffort modified the effort
47
- target["reasoningConfig"] = {
48
- type: "enabled",
49
- maxReasoningEffort: mapNovaEffort(reasoning.effort),
50
- };
51
- }
52
- else {
53
- // FUTURE: warn if reasoning.max_tokens (unsupported) was ignored
54
- target["reasoningConfig"] = { type: "enabled" };
55
- }
56
- delete unknown["reasoning"];
57
- return params;
58
- },
59
- };
60
- modelMiddlewareMatcher.useForModel("amazon/nova-*embeddings*", {
61
- embedding: [novaDimensionsMiddleware],
62
- });
63
- modelMiddlewareMatcher.useForModel("amazon/nova-2-*", {
64
- language: [novaReasoningMiddleware],
65
- });