@hebo-ai/gateway 0.6.2-rc0 → 0.6.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 (134) hide show
  1. package/README.md +3 -3
  2. package/dist/endpoints/chat-completions/converters.js +26 -21
  3. package/dist/endpoints/chat-completions/handler.js +2 -0
  4. package/dist/endpoints/chat-completions/otel.js +1 -1
  5. package/dist/endpoints/chat-completions/schema.d.ts +4 -18
  6. package/dist/endpoints/chat-completions/schema.js +14 -17
  7. package/dist/endpoints/embeddings/handler.js +2 -0
  8. package/dist/endpoints/embeddings/otel.js +5 -0
  9. package/dist/endpoints/embeddings/schema.d.ts +6 -0
  10. package/dist/endpoints/embeddings/schema.js +4 -1
  11. package/dist/endpoints/models/converters.js +3 -3
  12. package/dist/lifecycle.js +2 -2
  13. package/dist/logger/default.js +3 -3
  14. package/dist/logger/index.d.ts +2 -5
  15. package/dist/middleware/common.js +1 -0
  16. package/dist/middleware/utils.js +0 -3
  17. package/dist/models/amazon/middleware.js +8 -5
  18. package/dist/models/anthropic/middleware.js +13 -13
  19. package/dist/models/catalog.js +5 -1
  20. package/dist/models/cohere/middleware.js +7 -5
  21. package/dist/models/google/middleware.d.ts +1 -1
  22. package/dist/models/google/middleware.js +29 -25
  23. package/dist/models/openai/middleware.js +13 -9
  24. package/dist/models/voyage/middleware.js +2 -1
  25. package/dist/providers/bedrock/middleware.js +21 -23
  26. package/dist/providers/registry.js +3 -0
  27. package/dist/telemetry/fetch.js +7 -2
  28. package/dist/telemetry/gen-ai.js +15 -12
  29. package/dist/telemetry/memory.d.ts +1 -1
  30. package/dist/telemetry/memory.js +30 -14
  31. package/dist/telemetry/span.js +1 -1
  32. package/dist/telemetry/stream.js +30 -23
  33. package/dist/utils/env.js +4 -2
  34. package/dist/utils/preset.js +1 -0
  35. package/dist/utils/response.js +3 -1
  36. package/package.json +36 -50
  37. package/src/config.ts +0 -98
  38. package/src/endpoints/chat-completions/converters.test.ts +0 -631
  39. package/src/endpoints/chat-completions/converters.ts +0 -899
  40. package/src/endpoints/chat-completions/handler.test.ts +0 -391
  41. package/src/endpoints/chat-completions/handler.ts +0 -201
  42. package/src/endpoints/chat-completions/index.ts +0 -4
  43. package/src/endpoints/chat-completions/otel.test.ts +0 -315
  44. package/src/endpoints/chat-completions/otel.ts +0 -214
  45. package/src/endpoints/chat-completions/schema.ts +0 -364
  46. package/src/endpoints/embeddings/converters.ts +0 -51
  47. package/src/endpoints/embeddings/handler.test.ts +0 -133
  48. package/src/endpoints/embeddings/handler.ts +0 -137
  49. package/src/endpoints/embeddings/index.ts +0 -4
  50. package/src/endpoints/embeddings/otel.ts +0 -40
  51. package/src/endpoints/embeddings/schema.ts +0 -36
  52. package/src/endpoints/models/converters.ts +0 -56
  53. package/src/endpoints/models/handler.test.ts +0 -122
  54. package/src/endpoints/models/handler.ts +0 -37
  55. package/src/endpoints/models/index.ts +0 -3
  56. package/src/endpoints/models/schema.ts +0 -37
  57. package/src/errors/ai-sdk.ts +0 -99
  58. package/src/errors/gateway.ts +0 -17
  59. package/src/errors/openai.ts +0 -57
  60. package/src/errors/utils.ts +0 -47
  61. package/src/gateway.ts +0 -50
  62. package/src/index.ts +0 -19
  63. package/src/lifecycle.ts +0 -135
  64. package/src/logger/default.ts +0 -105
  65. package/src/logger/index.ts +0 -42
  66. package/src/middleware/common.test.ts +0 -215
  67. package/src/middleware/common.ts +0 -163
  68. package/src/middleware/debug.ts +0 -37
  69. package/src/middleware/matcher.ts +0 -161
  70. package/src/middleware/utils.ts +0 -34
  71. package/src/models/amazon/index.ts +0 -2
  72. package/src/models/amazon/middleware.test.ts +0 -133
  73. package/src/models/amazon/middleware.ts +0 -79
  74. package/src/models/amazon/presets.ts +0 -104
  75. package/src/models/anthropic/index.ts +0 -2
  76. package/src/models/anthropic/middleware.test.ts +0 -643
  77. package/src/models/anthropic/middleware.ts +0 -148
  78. package/src/models/anthropic/presets.ts +0 -191
  79. package/src/models/catalog.ts +0 -13
  80. package/src/models/cohere/index.ts +0 -2
  81. package/src/models/cohere/middleware.test.ts +0 -138
  82. package/src/models/cohere/middleware.ts +0 -76
  83. package/src/models/cohere/presets.ts +0 -186
  84. package/src/models/google/index.ts +0 -2
  85. package/src/models/google/middleware.test.ts +0 -298
  86. package/src/models/google/middleware.ts +0 -137
  87. package/src/models/google/presets.ts +0 -118
  88. package/src/models/meta/index.ts +0 -1
  89. package/src/models/meta/presets.ts +0 -143
  90. package/src/models/openai/index.ts +0 -2
  91. package/src/models/openai/middleware.test.ts +0 -189
  92. package/src/models/openai/middleware.ts +0 -103
  93. package/src/models/openai/presets.ts +0 -280
  94. package/src/models/types.ts +0 -114
  95. package/src/models/voyage/index.ts +0 -2
  96. package/src/models/voyage/middleware.test.ts +0 -28
  97. package/src/models/voyage/middleware.ts +0 -23
  98. package/src/models/voyage/presets.ts +0 -126
  99. package/src/providers/anthropic/canonical.ts +0 -17
  100. package/src/providers/anthropic/index.ts +0 -1
  101. package/src/providers/bedrock/canonical.ts +0 -87
  102. package/src/providers/bedrock/index.ts +0 -2
  103. package/src/providers/bedrock/middleware.test.ts +0 -303
  104. package/src/providers/bedrock/middleware.ts +0 -128
  105. package/src/providers/cohere/canonical.ts +0 -26
  106. package/src/providers/cohere/index.ts +0 -1
  107. package/src/providers/groq/canonical.ts +0 -21
  108. package/src/providers/groq/index.ts +0 -1
  109. package/src/providers/openai/canonical.ts +0 -16
  110. package/src/providers/openai/index.ts +0 -1
  111. package/src/providers/registry.test.ts +0 -44
  112. package/src/providers/registry.ts +0 -165
  113. package/src/providers/types.ts +0 -20
  114. package/src/providers/vertex/canonical.ts +0 -17
  115. package/src/providers/vertex/index.ts +0 -1
  116. package/src/providers/voyage/canonical.ts +0 -16
  117. package/src/providers/voyage/index.ts +0 -1
  118. package/src/telemetry/ai-sdk.ts +0 -46
  119. package/src/telemetry/baggage.ts +0 -27
  120. package/src/telemetry/fetch.ts +0 -62
  121. package/src/telemetry/gen-ai.ts +0 -113
  122. package/src/telemetry/http.ts +0 -62
  123. package/src/telemetry/index.ts +0 -1
  124. package/src/telemetry/memory.ts +0 -36
  125. package/src/telemetry/span.ts +0 -85
  126. package/src/telemetry/stream.ts +0 -64
  127. package/src/types.ts +0 -223
  128. package/src/utils/env.ts +0 -7
  129. package/src/utils/headers.ts +0 -27
  130. package/src/utils/preset.ts +0 -65
  131. package/src/utils/request.test.ts +0 -75
  132. package/src/utils/request.ts +0 -52
  133. package/src/utils/response.ts +0 -84
  134. package/src/utils/url.ts +0 -26
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hebo-ai/gateway",
3
- "version": "0.6.2-rc0",
3
+ "version": "0.6.2",
4
4
  "description": "AI gateway as a framework. For full control over models, routing & lifecycle. OpenAI-compatible /chat/completions, /embeddings & /models.",
5
5
  "keywords": [
6
6
  "ai",
@@ -33,8 +33,7 @@
33
33
  "files": [
34
34
  "dist",
35
35
  "LICENSE",
36
- "README.md",
37
- "src"
36
+ "README.md"
38
37
  ],
39
38
  "type": "module",
40
39
  "sideEffects": [
@@ -48,115 +47,97 @@
48
47
  "exports": {
49
48
  ".": {
50
49
  "types": "./dist/index.d.ts",
51
- "import": "./dist/index.js",
52
- "dev-source": "./src/index.ts"
50
+ "import": "./dist/index.js"
53
51
  },
54
52
  "./endpoints/chat-completions": {
55
53
  "types": "./dist/endpoints/chat-completions/index.d.ts",
56
- "import": "./dist/endpoints/chat-completions/index.js",
57
- "dev-source": "./src/endpoints/chat-completions/index.ts"
54
+ "import": "./dist/endpoints/chat-completions/index.js"
58
55
  },
59
56
  "./endpoints/embeddings": {
60
57
  "types": "./dist/endpoints/embeddings/index.d.ts",
61
- "import": "./dist/endpoints/embeddings/index.js",
62
- "dev-source": "./src/endpoints/embeddings/index.ts"
58
+ "import": "./dist/endpoints/embeddings/index.js"
63
59
  },
64
60
  "./endpoints/models": {
65
61
  "types": "./dist/endpoints/models/index.d.ts",
66
- "import": "./dist/endpoints/models/index.js",
67
- "dev-source": "./src/endpoints/models/index.ts"
62
+ "import": "./dist/endpoints/models/index.js"
68
63
  },
69
64
  "./errors/openai": {
70
65
  "types": "./dist/errors/openai.d.ts",
71
- "import": "./dist/errors/openai.js",
72
- "dev-source": "./src/errors/openai.ts"
66
+ "import": "./dist/errors/openai.js"
73
67
  },
74
68
  "./middleware/common": {
75
69
  "types": "./dist/middleware/common.d.ts",
76
- "import": "./dist/middleware/common.js",
77
- "dev-source": "./src/middleware/common.ts"
70
+ "import": "./dist/middleware/common.js"
78
71
  },
79
72
  "./models/anthropic": {
80
73
  "types": "./dist/models/anthropic/index.d.ts",
81
- "import": "./dist/models/anthropic/index.js",
82
- "dev-source": "./src/models/anthropic/index.ts"
74
+ "import": "./dist/models/anthropic/index.js"
83
75
  },
84
76
  "./models/cohere": {
85
77
  "types": "./dist/models/cohere/index.d.ts",
86
- "import": "./dist/models/cohere/index.js",
87
- "dev-source": "./src/models/cohere/index.ts"
78
+ "import": "./dist/models/cohere/index.js"
88
79
  },
89
80
  "./models/google": {
90
81
  "types": "./dist/models/google/index.d.ts",
91
- "import": "./dist/models/google/index.js",
92
- "dev-source": "./src/models/google/index.ts"
82
+ "import": "./dist/models/google/index.js"
93
83
  },
94
84
  "./models/openai": {
95
85
  "types": "./dist/models/openai/index.d.ts",
96
- "import": "./dist/models/openai/index.js",
97
- "dev-source": "./src/models/openai/index.ts"
86
+ "import": "./dist/models/openai/index.js"
98
87
  },
99
88
  "./models/meta": {
100
89
  "types": "./dist/models/meta/index.d.ts",
101
- "import": "./dist/models/meta/index.js",
102
- "dev-source": "./src/models/meta/index.ts"
90
+ "import": "./dist/models/meta/index.js"
103
91
  },
104
92
  "./models/voyage": {
105
93
  "types": "./dist/models/voyage/index.d.ts",
106
- "import": "./dist/models/voyage/index.js",
107
- "dev-source": "./src/models/voyage/index.ts"
94
+ "import": "./dist/models/voyage/index.js"
108
95
  },
109
96
  "./providers/anthropic": {
110
97
  "types": "./dist/providers/anthropic/index.d.ts",
111
- "import": "./dist/providers/anthropic/index.js",
112
- "dev-source": "./src/providers/anthropic/index.ts"
98
+ "import": "./dist/providers/anthropic/index.js"
113
99
  },
114
100
  "./providers/bedrock": {
115
101
  "types": "./dist/providers/bedrock/index.d.ts",
116
- "import": "./dist/providers/bedrock/index.js",
117
- "dev-source": "./src/providers/bedrock/index.ts"
102
+ "import": "./dist/providers/bedrock/index.js"
118
103
  },
119
104
  "./providers/cohere": {
120
105
  "types": "./dist/providers/cohere/index.d.ts",
121
- "import": "./dist/providers/cohere/index.js",
122
- "dev-source": "./src/providers/cohere/index.ts"
106
+ "import": "./dist/providers/cohere/index.js"
123
107
  },
124
108
  "./providers/groq": {
125
109
  "types": "./dist/providers/groq/index.d.ts",
126
- "import": "./dist/providers/groq/index.js",
127
- "dev-source": "./src/providers/groq/index.ts"
110
+ "import": "./dist/providers/groq/index.js"
128
111
  },
129
112
  "./providers/openai": {
130
113
  "types": "./dist/providers/openai/index.d.ts",
131
- "import": "./dist/providers/openai/index.js",
132
- "dev-source": "./src/providers/openai/index.ts"
114
+ "import": "./dist/providers/openai/index.js"
133
115
  },
134
116
  "./providers/vertex": {
135
117
  "types": "./dist/providers/vertex/index.d.ts",
136
- "import": "./dist/providers/vertex/index.js",
137
- "dev-source": "./src/providers/vertex/index.ts"
118
+ "import": "./dist/providers/vertex/index.js"
138
119
  },
139
120
  "./providers/voyage": {
140
121
  "types": "./dist/providers/voyage/index.d.ts",
141
- "import": "./dist/providers/voyage/index.js",
142
- "dev-source": "./src/providers/voyage/index.ts"
122
+ "import": "./dist/providers/voyage/index.js"
143
123
  },
144
124
  "./telemetry": {
145
125
  "types": "./dist/telemetry/index.d.ts",
146
- "import": "./dist/telemetry/index.js",
147
- "dev-source": "./src/telemetry/index.ts"
126
+ "import": "./dist/telemetry/index.js"
148
127
  }
149
128
  },
150
129
  "scripts": {
151
- "build": "tsc",
130
+ "build": "tsc -p tsconfig.build.json",
152
131
  "dev": "bun --hot src/index.ts",
153
132
  "clean": "git clean -fdx -e '.env*' .",
154
133
  "format": "oxfmt .",
155
134
  "format:staged": "oxfmt --no-error-on-unmatched-pattern",
156
135
  "lint": "oxlint",
157
136
  "lint:staged": "oxlint --fix",
158
- "type-check": "tsc --noEmit",
159
- "test": "bun test"
137
+ "typecheck": "oxlint --type-check",
138
+ "test": "bun test",
139
+ "check": "bun lint && bun typecheck",
140
+ "fix": "bun lint:staged && bun fmt:staged"
160
141
  },
161
142
  "dependencies": {
162
143
  "@ai-sdk/provider": "^3.0.8",
@@ -170,23 +151,24 @@
170
151
  "@ai-sdk/google-vertex": "^4.0.80",
171
152
  "@ai-sdk/groq": "^3.0.29",
172
153
  "@ai-sdk/openai": "^3.0.41",
173
- "@aws-sdk/credential-providers": "^3.1003.0",
154
+ "@aws-sdk/credential-providers": "^3.1004.0",
174
155
  "@langfuse/otel": "^4.6.1",
175
156
  "@mjackson/node-fetch-server": "^0.7.0",
176
157
  "@opentelemetry/api": "^1.9.0",
177
158
  "@opentelemetry/context-async-hooks": "^2.6.0",
178
159
  "@opentelemetry/sdk-trace-base": "^2.6.0",
179
- "@tanstack/react-router": "^1.166.2",
180
- "@tanstack/react-start": "^1.166.2",
160
+ "@tanstack/react-router": "^1.166.3",
161
+ "@tanstack/react-start": "^1.166.3",
181
162
  "@types/bun": "latest",
182
163
  "@types/react": "^19.2.14",
183
164
  "@types/react-dom": "^19.2.3",
184
165
  "elysia": "^1.4.27",
185
166
  "hono": "^4.12.5",
186
- "lefthook": "^2.1.2",
167
+ "lefthook": "^2.1.3",
187
168
  "next": "^16.1.6",
188
169
  "oxfmt": "^0.24.0",
189
170
  "oxlint": "^1.51.0",
171
+ "oxlint-tsgolint": "^0.16.0",
190
172
  "pino": "^10.3.1",
191
173
  "typescript": "^5.9.3",
192
174
  "vite": "^7.3.1",
@@ -197,6 +179,7 @@
197
179
  "@ai-sdk/amazon-bedrock": "^4.0.77",
198
180
  "@ai-sdk/anthropic": "^3.0.58",
199
181
  "@ai-sdk/cohere": "^3.0.25",
182
+ "@ai-sdk/google": "^3.0.43",
200
183
  "@ai-sdk/google-vertex": "^4.0.80",
201
184
  "@ai-sdk/groq": "^3.0.29",
202
185
  "@ai-sdk/openai": "^3.0.41",
@@ -214,6 +197,9 @@
214
197
  "@ai-sdk/cohere": {
215
198
  "optional": true
216
199
  },
200
+ "@ai-sdk/google": {
201
+ "optional": true
202
+ },
217
203
  "@ai-sdk/google-vertex": {
218
204
  "optional": true
219
205
  },
package/src/config.ts DELETED
@@ -1,98 +0,0 @@
1
- import { isLogger, logger, setLoggerInstance } from "./logger";
2
- import { createDefaultLogger } from "./logger/default";
3
- import { installAiSdkWarningLogger } from "./telemetry/ai-sdk";
4
- import {
5
- kParsed,
6
- type GatewayConfig,
7
- type GatewayConfigParsed,
8
- type TelemetrySignalLevel,
9
- } from "./types";
10
-
11
- export const parseConfig = (config: GatewayConfig): GatewayConfigParsed => {
12
- // If it has been parsed before, just return.
13
- if (kParsed in config) return config as GatewayConfigParsed;
14
-
15
- const providers = config.providers ?? {};
16
- const parsedProviders = {} as typeof providers;
17
- const models = config.models ?? {};
18
-
19
- // Set the global logger instance.
20
- if (config.logger === undefined) {
21
- setLoggerInstance(createDefaultLogger({}));
22
- } else if (config.logger !== null) {
23
- setLoggerInstance(isLogger(config.logger) ? config.logger : createDefaultLogger(config.logger));
24
-
25
- logger.info(
26
- isLogger(config.logger)
27
- ? `[logger] custom logger configured`
28
- : `[logger] logger configured: level=${config.logger.level}`,
29
- );
30
- }
31
-
32
- // Strip providers that are not configured.
33
- for (const id in providers) {
34
- const provider = providers[id];
35
- if (provider === undefined) {
36
- logger.warn(`[config] ${id} provider removed (undefined)`);
37
- continue;
38
- }
39
- parsedProviders[id] = provider;
40
- }
41
-
42
- if (Object.keys(parsedProviders).length === 0) {
43
- throw new Error("No providers configured (config.providers is empty)");
44
- }
45
-
46
- // Strip providers that are not configured from models.
47
- const parsedModels = {} as typeof models;
48
- const warnings = new Set<string>();
49
- for (const id in models) {
50
- const model = models[id]!;
51
-
52
- const kept: string[] = [];
53
-
54
- for (const p of model.providers) {
55
- if (p in parsedProviders) kept.push(p);
56
- else warnings.add(p);
57
- }
58
-
59
- if (kept.length > 0) parsedModels[id] = { ...model, providers: kept };
60
- }
61
- for (const warning of warnings) {
62
- logger.warn(`[config] ${warning} provider removed (not configured)`);
63
- }
64
-
65
- if (Object.keys(parsedModels).length === 0) {
66
- throw new Error("No models configured (config.models is empty)");
67
- }
68
-
69
- // Default for the telemetry settings.
70
- const telemetryEnabled = config.telemetry?.enabled ?? false;
71
- const telemetrySignals: Record<"http" | "gen_ai" | "hebo", TelemetrySignalLevel> =
72
- telemetryEnabled
73
- ? {
74
- http: config.telemetry?.signals?.http ?? "recommended",
75
- gen_ai: config.telemetry?.signals?.gen_ai ?? "full",
76
- hebo: config.telemetry?.signals?.hebo ?? "off",
77
- }
78
- : {
79
- http: "off",
80
- gen_ai: "off",
81
- hebo: "off",
82
- };
83
-
84
- installAiSdkWarningLogger(telemetrySignals.gen_ai);
85
-
86
- // Return parsed config.
87
- return {
88
- ...config,
89
- telemetry: {
90
- ...config.telemetry,
91
- enabled: telemetryEnabled,
92
- signals: telemetrySignals,
93
- },
94
- providers: parsedProviders,
95
- models: parsedModels,
96
- [kParsed]: true,
97
- };
98
- };