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