@hebo-ai/gateway 0.1.2 → 0.2.0

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 (202) hide show
  1. package/README.md +172 -67
  2. package/dist/config.js +2 -12
  3. package/dist/endpoints/chat-completions/converters.d.ts +28 -24
  4. package/dist/endpoints/chat-completions/converters.js +99 -73
  5. package/dist/endpoints/chat-completions/handler.js +36 -30
  6. package/dist/endpoints/chat-completions/schema.d.ts +394 -272
  7. package/dist/endpoints/chat-completions/schema.js +124 -57
  8. package/dist/endpoints/embeddings/converters.d.ts +4 -4
  9. package/dist/endpoints/embeddings/converters.js +8 -9
  10. package/dist/endpoints/embeddings/handler.js +32 -26
  11. package/dist/endpoints/embeddings/schema.d.ts +28 -38
  12. package/dist/endpoints/embeddings/schema.js +10 -10
  13. package/dist/endpoints/models/converters.d.ts +2 -2
  14. package/dist/endpoints/models/converters.js +9 -12
  15. package/dist/endpoints/models/handler.js +8 -9
  16. package/dist/endpoints/models/schema.d.ts +37 -31
  17. package/dist/endpoints/models/schema.js +23 -12
  18. package/dist/gateway.d.ts +8 -9
  19. package/dist/gateway.js +7 -10
  20. package/dist/index.d.ts +2 -0
  21. package/dist/index.js +2 -0
  22. package/dist/lifecycle.d.ts +2 -0
  23. package/dist/{utils/hooks.js → lifecycle.js} +16 -8
  24. package/dist/middleware/common.d.ts +4 -0
  25. package/dist/middleware/common.js +44 -0
  26. package/dist/middleware/matcher.d.ts +18 -0
  27. package/dist/middleware/matcher.js +83 -0
  28. package/dist/models/amazon/index.d.ts +2 -0
  29. package/dist/models/amazon/index.js +2 -0
  30. package/dist/models/amazon/middleware.d.ts +2 -0
  31. package/dist/models/amazon/middleware.js +20 -0
  32. package/dist/models/amazon/presets.d.ts +2390 -0
  33. package/dist/models/amazon/presets.js +80 -0
  34. package/dist/models/anthropic/index.d.ts +2 -0
  35. package/dist/models/anthropic/index.js +2 -0
  36. package/dist/models/anthropic/middleware.d.ts +5 -0
  37. package/dist/models/anthropic/middleware.js +67 -0
  38. package/dist/models/anthropic/presets.d.ts +4106 -0
  39. package/dist/models/anthropic/presets.js +113 -0
  40. package/dist/models/catalog.d.ts +3 -1
  41. package/dist/models/catalog.js +3 -2
  42. package/dist/models/cohere/index.d.ts +2 -0
  43. package/dist/models/cohere/index.js +2 -0
  44. package/dist/models/cohere/middleware.d.ts +2 -0
  45. package/dist/models/cohere/middleware.js +18 -0
  46. package/dist/models/cohere/presets.d.ts +2918 -0
  47. package/dist/models/cohere/presets.js +129 -0
  48. package/dist/models/google/index.d.ts +2 -0
  49. package/dist/models/google/index.js +2 -0
  50. package/dist/models/google/middleware.d.ts +2 -0
  51. package/dist/models/google/middleware.js +20 -0
  52. package/dist/models/{presets/gemini.d.ts → google/presets.d.ts} +400 -174
  53. package/dist/models/{presets/gemini.js → google/presets.js} +20 -5
  54. package/dist/models/meta/index.d.ts +1 -0
  55. package/dist/models/meta/index.js +1 -0
  56. package/dist/models/meta/presets.d.ts +3254 -0
  57. package/dist/models/{presets/llama.js → meta/presets.js} +44 -7
  58. package/dist/models/openai/index.d.ts +2 -0
  59. package/dist/models/openai/index.js +2 -0
  60. package/dist/models/openai/middleware.d.ts +2 -0
  61. package/dist/models/openai/middleware.js +20 -0
  62. package/dist/models/openai/presets.d.ts +6252 -0
  63. package/dist/models/openai/presets.js +206 -0
  64. package/dist/models/types.d.ts +3 -3
  65. package/dist/models/types.js +27 -0
  66. package/dist/models/voyage/index.d.ts +2 -0
  67. package/dist/models/voyage/index.js +2 -0
  68. package/dist/models/voyage/middleware.d.ts +2 -0
  69. package/dist/models/voyage/middleware.js +18 -0
  70. package/dist/models/{presets/voyage.d.ts → voyage/presets.d.ts} +322 -323
  71. package/dist/providers/anthropic/canonical.d.ts +3 -0
  72. package/dist/providers/anthropic/canonical.js +9 -0
  73. package/dist/providers/anthropic/index.d.ts +1 -0
  74. package/dist/providers/anthropic/index.js +1 -0
  75. package/dist/providers/bedrock/canonical.d.ts +15 -0
  76. package/dist/providers/{canonical/bedrock.js → bedrock/canonical.js} +13 -15
  77. package/dist/providers/bedrock/index.d.ts +1 -0
  78. package/dist/providers/bedrock/index.js +1 -0
  79. package/dist/providers/cohere/canonical.d.ts +3 -0
  80. package/dist/providers/{canonical/cohere.js → cohere/canonical.js} +6 -6
  81. package/dist/providers/cohere/index.d.ts +1 -0
  82. package/dist/providers/cohere/index.js +1 -0
  83. package/dist/providers/groq/canonical.d.ts +3 -0
  84. package/dist/providers/groq/canonical.js +12 -0
  85. package/dist/providers/groq/index.d.ts +1 -0
  86. package/dist/providers/groq/index.js +1 -0
  87. package/dist/providers/openai/canonical.d.ts +3 -0
  88. package/dist/providers/openai/canonical.js +8 -0
  89. package/dist/providers/openai/index.d.ts +1 -0
  90. package/dist/providers/openai/index.js +1 -0
  91. package/dist/providers/registry.d.ts +16 -26
  92. package/dist/providers/registry.js +19 -26
  93. package/dist/providers/types.d.ts +1 -1
  94. package/dist/providers/types.js +1 -0
  95. package/dist/providers/vertex/canonical.d.ts +3 -0
  96. package/dist/providers/vertex/canonical.js +8 -0
  97. package/dist/providers/vertex/index.d.ts +1 -0
  98. package/dist/providers/vertex/index.js +1 -0
  99. package/dist/providers/voyage/canonical.d.ts +3 -0
  100. package/dist/providers/voyage/canonical.js +7 -0
  101. package/dist/providers/voyage/index.d.ts +1 -0
  102. package/dist/providers/voyage/index.js +1 -0
  103. package/dist/types.d.ts +60 -30
  104. package/dist/utils/errors.js +2 -0
  105. package/dist/utils/preset.d.ts +1 -7
  106. package/dist/utils/preset.js +1 -1
  107. package/dist/utils/response.d.ts +1 -0
  108. package/dist/utils/response.js +10 -0
  109. package/package.json +79 -70
  110. package/src/config.ts +2 -18
  111. package/src/endpoints/chat-completions/converters.test.ts +39 -0
  112. package/src/endpoints/chat-completions/converters.ts +191 -112
  113. package/src/endpoints/chat-completions/handler.test.ts +47 -18
  114. package/src/endpoints/chat-completions/handler.ts +40 -34
  115. package/src/endpoints/chat-completions/schema.ts +161 -88
  116. package/src/endpoints/embeddings/converters.ts +15 -11
  117. package/src/endpoints/embeddings/handler.test.ts +27 -30
  118. package/src/endpoints/embeddings/handler.ts +34 -28
  119. package/src/endpoints/embeddings/schema.ts +10 -10
  120. package/src/endpoints/models/converters.ts +22 -14
  121. package/src/endpoints/models/handler.test.ts +26 -29
  122. package/src/endpoints/models/handler.ts +10 -12
  123. package/src/endpoints/models/schema.ts +26 -20
  124. package/src/gateway.ts +10 -24
  125. package/src/index.ts +3 -0
  126. package/src/{utils/hooks.ts → lifecycle.ts} +21 -11
  127. package/src/middleware/common.ts +68 -0
  128. package/src/middleware/matcher.ts +117 -0
  129. package/src/models/amazon/index.ts +2 -0
  130. package/src/models/amazon/middleware.ts +25 -0
  131. package/src/models/amazon/presets.ts +104 -0
  132. package/src/models/anthropic/index.ts +2 -0
  133. package/src/models/anthropic/middleware.test.ts +184 -0
  134. package/src/models/anthropic/middleware.ts +75 -0
  135. package/src/models/anthropic/presets.ts +161 -0
  136. package/src/models/catalog.ts +10 -2
  137. package/src/models/cohere/index.ts +2 -0
  138. package/src/models/cohere/middleware.ts +23 -0
  139. package/src/models/cohere/presets.ts +181 -0
  140. package/src/models/google/index.ts +2 -0
  141. package/src/models/google/middleware.ts +25 -0
  142. package/src/models/{presets/gemini.ts → google/presets.ts} +25 -5
  143. package/src/models/meta/index.ts +1 -0
  144. package/src/models/{presets/llama.ts → meta/presets.ts} +68 -7
  145. package/src/models/openai/index.ts +2 -0
  146. package/src/models/openai/middleware.ts +25 -0
  147. package/src/models/openai/presets.ts +269 -0
  148. package/src/models/types.ts +29 -2
  149. package/src/models/voyage/index.ts +2 -0
  150. package/src/models/voyage/middleware.ts +23 -0
  151. package/src/providers/anthropic/canonical.ts +17 -0
  152. package/src/providers/anthropic/index.ts +1 -0
  153. package/src/providers/{canonical/bedrock.ts → bedrock/canonical.ts} +22 -32
  154. package/src/providers/bedrock/index.ts +1 -0
  155. package/src/providers/cohere/canonical.ts +26 -0
  156. package/src/providers/cohere/index.ts +1 -0
  157. package/src/providers/groq/canonical.ts +21 -0
  158. package/src/providers/groq/index.ts +1 -0
  159. package/src/providers/openai/canonical.ts +16 -0
  160. package/src/providers/openai/index.ts +1 -0
  161. package/src/providers/registry.test.ts +12 -10
  162. package/src/providers/registry.ts +43 -43
  163. package/src/providers/types.ts +1 -0
  164. package/src/providers/vertex/canonical.ts +17 -0
  165. package/src/providers/vertex/index.ts +1 -0
  166. package/src/providers/voyage/canonical.ts +16 -0
  167. package/src/providers/voyage/index.ts +1 -0
  168. package/src/types.ts +64 -28
  169. package/src/utils/errors.ts +2 -0
  170. package/src/utils/preset.ts +2 -6
  171. package/src/utils/response.ts +15 -0
  172. package/dist/models/presets/claude.d.ts +0 -1165
  173. package/dist/models/presets/claude.js +0 -40
  174. package/dist/models/presets/cohere.d.ts +0 -383
  175. package/dist/models/presets/cohere.js +0 -26
  176. package/dist/models/presets/gpt-oss.d.ts +0 -779
  177. package/dist/models/presets/gpt-oss.js +0 -40
  178. package/dist/models/presets/llama.d.ts +0 -1400
  179. package/dist/providers/canonical/anthropic.d.ts +0 -25
  180. package/dist/providers/canonical/anthropic.js +0 -14
  181. package/dist/providers/canonical/bedrock.d.ts +0 -26
  182. package/dist/providers/canonical/cohere.d.ts +0 -17
  183. package/dist/providers/canonical/groq.d.ts +0 -17
  184. package/dist/providers/canonical/groq.js +0 -10
  185. package/dist/providers/canonical/openai.d.ts +0 -17
  186. package/dist/providers/canonical/openai.js +0 -8
  187. package/dist/providers/canonical/vertex.d.ts +0 -17
  188. package/dist/providers/canonical/vertex.js +0 -10
  189. package/dist/providers/canonical/voyage.d.ts +0 -17
  190. package/dist/providers/canonical/voyage.js +0 -8
  191. package/dist/utils/hooks.d.ts +0 -2
  192. package/src/models/presets/claude.ts +0 -59
  193. package/src/models/presets/cohere.ts +0 -37
  194. package/src/models/presets/gpt-oss.ts +0 -55
  195. package/src/providers/canonical/anthropic.ts +0 -32
  196. package/src/providers/canonical/cohere.ts +0 -36
  197. package/src/providers/canonical/groq.ts +0 -25
  198. package/src/providers/canonical/openai.ts +0 -16
  199. package/src/providers/canonical/vertex.ts +0 -18
  200. package/src/providers/canonical/voyage.ts +0 -16
  201. package/dist/models/{presets/voyage.js → voyage/presets.js} +10 -10
  202. package/src/models/{presets/voyage.ts → voyage/presets.ts} +10 -10
@@ -0,0 +1,113 @@
1
+ import { presetFor } from "../../utils/preset";
2
+ const CLAUDE_BASE = {
3
+ modalities: {
4
+ input: ["text", "image", "file"],
5
+ output: ["text"],
6
+ },
7
+ capabilities: ["attachments", "tool_call", "structured_output", "temperature"],
8
+ context: 200000,
9
+ providers: ["anthropic", "bedrock", "vertex"],
10
+ };
11
+ const CLAUDE_PDF_MODALITIES = {
12
+ modalities: {
13
+ input: ["text", "image", "pdf", "file"],
14
+ output: ["text"],
15
+ },
16
+ };
17
+ export const claudeHaiku45 = presetFor()("anthropic/claude-haiku-4.5", {
18
+ ...CLAUDE_BASE,
19
+ ...CLAUDE_PDF_MODALITIES,
20
+ name: "Claude Haiku 4.5",
21
+ capabilities: [...CLAUDE_BASE.capabilities, "reasoning"],
22
+ created: "2025-10-01",
23
+ knowledge: "2025-07",
24
+ });
25
+ export const claudeHaiku35 = presetFor()("anthropic/claude-haiku-3.5", {
26
+ ...CLAUDE_BASE,
27
+ ...CLAUDE_PDF_MODALITIES,
28
+ name: "Claude Haiku 3.5",
29
+ created: "2024-10-22",
30
+ knowledge: "2024-07",
31
+ });
32
+ export const claudeHaiku3 = presetFor()("anthropic/claude-haiku-3", {
33
+ ...CLAUDE_BASE,
34
+ name: "Claude Haiku 3",
35
+ created: "2024-03-07",
36
+ knowledge: "2023-08",
37
+ });
38
+ export const claudeSonnet45 = presetFor()("anthropic/claude-sonnet-4.5", {
39
+ ...CLAUDE_BASE,
40
+ ...CLAUDE_PDF_MODALITIES,
41
+ name: "Claude Sonnet 4.5",
42
+ capabilities: [...CLAUDE_BASE.capabilities, "reasoning"],
43
+ created: "2025-09-29",
44
+ knowledge: "2025-07",
45
+ });
46
+ export const claudeSonnet4 = presetFor()("anthropic/claude-sonnet-4", {
47
+ ...CLAUDE_BASE,
48
+ ...CLAUDE_PDF_MODALITIES,
49
+ name: "Claude Sonnet 4",
50
+ capabilities: [...CLAUDE_BASE.capabilities, "reasoning"],
51
+ created: "2025-05-14",
52
+ knowledge: "2025-03",
53
+ });
54
+ export const claudeSonnet37 = presetFor()("anthropic/claude-sonnet-3.7", {
55
+ ...CLAUDE_BASE,
56
+ ...CLAUDE_PDF_MODALITIES,
57
+ name: "Claude Sonnet 3.7",
58
+ capabilities: [...CLAUDE_BASE.capabilities, "reasoning"],
59
+ created: "2025-02-19",
60
+ knowledge: "2024-10",
61
+ });
62
+ export const claudeSonnet35 = presetFor()("anthropic/claude-sonnet-3.5", {
63
+ ...CLAUDE_BASE,
64
+ ...CLAUDE_PDF_MODALITIES,
65
+ name: "Claude Sonnet 3.5",
66
+ created: "2024-10-22",
67
+ knowledge: "2024-04",
68
+ });
69
+ export const claudeOpus45 = presetFor()("anthropic/claude-opus-4.5", {
70
+ ...CLAUDE_BASE,
71
+ ...CLAUDE_PDF_MODALITIES,
72
+ name: "Claude Opus 4.5",
73
+ capabilities: [...CLAUDE_BASE.capabilities, "reasoning"],
74
+ created: "2025-11-01",
75
+ knowledge: "2025-08",
76
+ });
77
+ export const claudeOpus41 = presetFor()("anthropic/claude-opus-4.1", {
78
+ ...CLAUDE_BASE,
79
+ ...CLAUDE_PDF_MODALITIES,
80
+ name: "Claude Opus 4.1",
81
+ capabilities: [...CLAUDE_BASE.capabilities, "reasoning"],
82
+ created: "2025-08-05",
83
+ knowledge: "2025-03",
84
+ });
85
+ export const claudeOpus4 = presetFor()("anthropic/claude-opus-4", {
86
+ ...CLAUDE_BASE,
87
+ ...CLAUDE_PDF_MODALITIES,
88
+ name: "Claude Opus 4",
89
+ capabilities: [...CLAUDE_BASE.capabilities, "reasoning"],
90
+ created: "2025-05-14",
91
+ knowledge: "2025-03",
92
+ });
93
+ const claudeAtomic = {
94
+ "v4.5": [claudeHaiku45, claudeSonnet45, claudeOpus45],
95
+ "v4.1": [claudeOpus41],
96
+ v4: [claudeSonnet4, claudeOpus4],
97
+ "v3.7": [claudeSonnet37],
98
+ "v3.5": [claudeSonnet35, claudeHaiku35],
99
+ v3: [claudeHaiku3],
100
+ haiku: [claudeHaiku45, claudeHaiku35, claudeHaiku3],
101
+ sonnet: [claudeSonnet45, claudeSonnet4, claudeSonnet37, claudeSonnet35],
102
+ opus: [claudeOpus45, claudeOpus41, claudeOpus4],
103
+ };
104
+ const claudeGroups = {
105
+ "v4.x": [...claudeAtomic["v4.5"], ...claudeAtomic["v4.1"], ...claudeAtomic["v4"]],
106
+ "v3.x": [...claudeAtomic["v3.7"], ...claudeAtomic["v3.5"], ...claudeAtomic["v3"]],
107
+ };
108
+ export const claude = {
109
+ ...claudeAtomic,
110
+ ...claudeGroups,
111
+ latest: [...claudeAtomic["v4.5"]],
112
+ all: Object.values(claudeAtomic).flat(),
113
+ };
@@ -1,2 +1,4 @@
1
1
  import type { ModelCatalog } from "./types";
2
- export declare function createModelCatalog(...entries: ModelCatalog[]): ModelCatalog;
2
+ type ModelCatalogInput = ModelCatalog | (() => ModelCatalog) | ModelCatalog[] | (() => ModelCatalog)[];
3
+ export declare function defineModelCatalog(...inputs: ModelCatalogInput[]): ModelCatalog;
4
+ export {};
@@ -1,3 +1,4 @@
1
- export function createModelCatalog(...entries) {
2
- return Object.assign({}, ...entries);
1
+ export function defineModelCatalog(...inputs) {
2
+ const catalogs = inputs.flat().map((input) => (typeof input === "function" ? input() : input));
3
+ return Object.assign({}, ...catalogs);
3
4
  }
@@ -0,0 +1,2 @@
1
+ export * from "./middleware";
2
+ export * from "./presets";
@@ -0,0 +1,2 @@
1
+ export * from "./middleware";
2
+ export * from "./presets";
@@ -0,0 +1,2 @@
1
+ import type { EmbeddingModelMiddleware } from "ai";
2
+ export declare const cohereEmbeddingModelMiddleware: EmbeddingModelMiddleware;
@@ -0,0 +1,18 @@
1
+ import { modelMiddlewareMatcher } from "../../middleware/matcher";
2
+ // Convert `dimensions` (OpenAI) to `outputDimension` (Cohere)
3
+ export const cohereEmbeddingModelMiddleware = {
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
+ let dimensions = unknown["dimensions"];
11
+ if (!dimensions)
12
+ dimensions = 1024;
13
+ (params.providerOptions["cohere"] ??= {})["outputDimension"] = dimensions;
14
+ delete unknown["dimensions"];
15
+ return params;
16
+ },
17
+ };
18
+ modelMiddlewareMatcher.useForModel("cohere/embed-*", { embedding: cohereEmbeddingModelMiddleware });