@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,80 +0,0 @@
1
- import { presetFor } from "../../utils/preset";
2
- const NOVA_TEXT_BASE = {
3
- modalities: {
4
- input: ["text"],
5
- output: ["text"],
6
- },
7
- capabilities: ["tool_call", "temperature"],
8
- providers: ["bedrock"],
9
- };
10
- const NOVA_MULTIMODAL_BASE = {
11
- modalities: {
12
- input: ["text", "image", "video", "pdf"],
13
- output: ["text"],
14
- },
15
- capabilities: ["attachments", "tool_call", "temperature"],
16
- providers: ["bedrock"],
17
- };
18
- const NOVA_EMBEDDINGS_BASE = {
19
- modalities: {
20
- input: ["text", "image", "audio", "video", "pdf"],
21
- output: ["embedding"],
22
- },
23
- providers: ["bedrock"],
24
- };
25
- export const novaMicro = presetFor()("amazon/nova-micro", {
26
- ...NOVA_TEXT_BASE,
27
- name: "Amazon Nova Micro",
28
- created: "2024-12-03",
29
- knowledge: "2024-10",
30
- context: 128000,
31
- });
32
- export const novaLite = presetFor()("amazon/nova-lite", {
33
- ...NOVA_MULTIMODAL_BASE,
34
- name: "Amazon Nova Lite",
35
- created: "2024-12-03",
36
- knowledge: "2024-10",
37
- context: 300000,
38
- });
39
- export const novaPro = presetFor()("amazon/nova-pro", {
40
- ...NOVA_MULTIMODAL_BASE,
41
- name: "Amazon Nova Pro",
42
- created: "2024-12-03",
43
- knowledge: "2024-10",
44
- context: 300000,
45
- });
46
- export const novaPremier = presetFor()("amazon/nova-premier", {
47
- ...NOVA_MULTIMODAL_BASE,
48
- name: "Amazon Nova Premier",
49
- created: "2024-12-03",
50
- knowledge: "2024-10",
51
- context: 1000000,
52
- });
53
- export const nova2Lite = presetFor()("amazon/nova-2-lite", {
54
- ...NOVA_TEXT_BASE,
55
- name: "Amazon Nova 2 Lite",
56
- created: "2025-12-01",
57
- knowledge: "2024-10",
58
- context: 128000,
59
- });
60
- export const nova2MultimodalEmbeddings = presetFor()("amazon/nova-2-multimodal-embeddings", {
61
- ...NOVA_EMBEDDINGS_BASE,
62
- name: "Amazon Nova Multimodal Embeddings",
63
- created: "2025-10-28",
64
- context: 8000,
65
- });
66
- const novaAtomic = {
67
- v1: [novaMicro, novaLite, novaPro, novaPremier],
68
- v2: [nova2Lite, nova2MultimodalEmbeddings],
69
- };
70
- const novaGroups = {
71
- "v1.x": [...novaAtomic["v1"]],
72
- "v2.x": [...novaAtomic["v2"]],
73
- };
74
- export const nova = {
75
- ...novaAtomic,
76
- ...novaGroups,
77
- latest: [...novaAtomic["v1"], ...novaAtomic["v2"]],
78
- embeddings: [nova2MultimodalEmbeddings],
79
- all: Object.values(novaAtomic).flat(),
80
- };
@@ -1,2 +0,0 @@
1
- export * from "./presets";
2
- export * from "./middleware";
@@ -1,2 +0,0 @@
1
- export * from "./presets";
2
- export * from "./middleware";
@@ -1,4 +0,0 @@
1
- import type { LanguageModelMiddleware } from "ai";
2
- import type { ChatCompletionsReasoningEffort } from "../../endpoints/chat-completions/schema";
3
- export declare function mapClaudeReasoningEffort(effort: ChatCompletionsReasoningEffort, modelId: string): "low" | "high" | "medium" | "max";
4
- export declare const claudeReasoningMiddleware: LanguageModelMiddleware;
@@ -1,111 +0,0 @@
1
- import { modelMiddlewareMatcher } from "../../middleware/matcher";
2
- import { calculateReasoningBudgetFromEffort } from "../../middleware/utils";
3
- const isClaude = (family, version) => {
4
- const dashed = version.replace(".", "-");
5
- return (modelId) => modelId.includes(`claude-${family}-${version}`) ||
6
- modelId.includes(`claude-${family}-${dashed}`);
7
- };
8
- const isClaude4 = (modelId) => modelId.includes("claude-") && modelId.includes("-4");
9
- const isOpus46 = isClaude("opus", "4.6");
10
- const isOpus45 = isClaude("opus", "4.5");
11
- const isOpus4 = isClaude("opus", "4");
12
- const isSonnet46 = isClaude("sonnet", "4.6");
13
- export function mapClaudeReasoningEffort(effort, modelId) {
14
- if (isOpus46(modelId)) {
15
- switch (effort) {
16
- case "none":
17
- case "minimal":
18
- case "low":
19
- return "low";
20
- case "medium":
21
- return "medium";
22
- case "high":
23
- return "high";
24
- case "xhigh":
25
- case "max":
26
- return "max";
27
- }
28
- }
29
- switch (effort) {
30
- case "none":
31
- case "minimal":
32
- case "low":
33
- return "low";
34
- case "medium":
35
- return "medium";
36
- case "high":
37
- case "xhigh":
38
- case "max":
39
- return "high";
40
- }
41
- }
42
- function getMaxOutputTokens(modelId) {
43
- if (isOpus46(modelId))
44
- return 128_000;
45
- if (isOpus45(modelId))
46
- return 64_000;
47
- if (isOpus4(modelId))
48
- return 32_000;
49
- return 64_000;
50
- }
51
- // Documentation:
52
- // https://platform.claude.com/docs/en/build-with-claude/effort
53
- // https://platform.claude.com/docs/en/build-with-claude/extended-thinking
54
- // https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking
55
- export const claudeReasoningMiddleware = {
56
- specificationVersion: "v3",
57
- // eslint-disable-next-line require-await
58
- transformParams: async ({ params, model }) => {
59
- const unknown = params.providerOptions?.["unknown"];
60
- if (!unknown)
61
- return params;
62
- const reasoning = unknown["reasoning"];
63
- if (!reasoning)
64
- return params;
65
- const target = (params.providerOptions["anthropic"] ??= {});
66
- const modelId = model.modelId;
67
- const clampedMaxTokens = reasoning.max_tokens && Math.min(reasoning.max_tokens, getMaxOutputTokens(modelId));
68
- if (!reasoning.enabled) {
69
- target["thinking"] = { type: "disabled" };
70
- }
71
- else if (reasoning.effort) {
72
- if (isClaude4(modelId)) {
73
- target["effort"] = mapClaudeReasoningEffort(reasoning.effort, modelId);
74
- }
75
- if (isOpus46(modelId)) {
76
- target["thinking"] = clampedMaxTokens
77
- ? { type: "adaptive", budgetTokens: clampedMaxTokens }
78
- : { type: "adaptive" };
79
- }
80
- else if (isSonnet46(modelId)) {
81
- target["thinking"] = clampedMaxTokens
82
- ? { type: "enabled", budgetTokens: clampedMaxTokens }
83
- : { type: "adaptive" };
84
- }
85
- else {
86
- target["thinking"] = { type: "enabled" };
87
- if (clampedMaxTokens) {
88
- target["thinking"]["budgetTokens"] = clampedMaxTokens;
89
- }
90
- else {
91
- // FUTURE: warn that reasoning.max_tokens was computed
92
- target["thinking"]["budgetTokens"] = calculateReasoningBudgetFromEffort(reasoning.effort, params.maxOutputTokens ?? getMaxOutputTokens(modelId), 1024);
93
- }
94
- }
95
- }
96
- else if (clampedMaxTokens) {
97
- target["thinking"] = {
98
- type: "enabled",
99
- budgetTokens: clampedMaxTokens,
100
- };
101
- }
102
- else {
103
- target["thinking"] = { type: "enabled" };
104
- }
105
- delete unknown["reasoning"];
106
- return params;
107
- },
108
- };
109
- modelMiddlewareMatcher.useForModel(["anthropic/claude-*3*7*", "anthropic/claude-*4*"], {
110
- language: [claudeReasoningMiddleware],
111
- });