@hebo-ai/gateway 0.7.0 → 0.8.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 (172) hide show
  1. package/README.md +82 -5
  2. package/package.json +46 -1
  3. package/dist/config.d.ts +0 -2
  4. package/dist/config.js +0 -108
  5. package/dist/endpoints/chat-completions/converters.d.ts +0 -43
  6. package/dist/endpoints/chat-completions/converters.js +0 -661
  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 -173
  13. package/dist/endpoints/chat-completions/schema.d.ts +0 -1226
  14. package/dist/endpoints/chat-completions/schema.js +0 -308
  15. package/dist/endpoints/embeddings/converters.d.ts +0 -10
  16. package/dist/endpoints/embeddings/converters.js +0 -31
  17. package/dist/endpoints/embeddings/handler.d.ts +0 -2
  18. package/dist/endpoints/embeddings/handler.js +0 -104
  19. package/dist/endpoints/embeddings/index.d.ts +0 -4
  20. package/dist/endpoints/embeddings/index.js +0 -4
  21. package/dist/endpoints/embeddings/otel.d.ts +0 -5
  22. package/dist/endpoints/embeddings/otel.js +0 -29
  23. package/dist/endpoints/embeddings/schema.d.ts +0 -44
  24. package/dist/endpoints/embeddings/schema.js +0 -29
  25. package/dist/endpoints/models/converters.d.ts +0 -6
  26. package/dist/endpoints/models/converters.js +0 -42
  27. package/dist/endpoints/models/handler.d.ts +0 -2
  28. package/dist/endpoints/models/handler.js +0 -29
  29. package/dist/endpoints/models/index.d.ts +0 -3
  30. package/dist/endpoints/models/index.js +0 -3
  31. package/dist/endpoints/models/schema.d.ts +0 -42
  32. package/dist/endpoints/models/schema.js +0 -31
  33. package/dist/errors/ai-sdk.d.ts +0 -2
  34. package/dist/errors/ai-sdk.js +0 -52
  35. package/dist/errors/gateway.d.ts +0 -5
  36. package/dist/errors/gateway.js +0 -13
  37. package/dist/errors/openai.d.ts +0 -15
  38. package/dist/errors/openai.js +0 -40
  39. package/dist/errors/utils.d.ts +0 -22
  40. package/dist/errors/utils.js +0 -44
  41. package/dist/gateway.d.ts +0 -9
  42. package/dist/gateway.js +0 -40
  43. package/dist/index.d.ts +0 -14
  44. package/dist/index.js +0 -13
  45. package/dist/lifecycle.d.ts +0 -3
  46. package/dist/lifecycle.js +0 -96
  47. package/dist/logger/default.d.ts +0 -4
  48. package/dist/logger/default.js +0 -81
  49. package/dist/logger/index.d.ts +0 -11
  50. package/dist/logger/index.js +0 -25
  51. package/dist/middleware/common.d.ts +0 -12
  52. package/dist/middleware/common.js +0 -146
  53. package/dist/middleware/debug.d.ts +0 -3
  54. package/dist/middleware/debug.js +0 -27
  55. package/dist/middleware/matcher.d.ts +0 -28
  56. package/dist/middleware/matcher.js +0 -118
  57. package/dist/middleware/utils.d.ts +0 -2
  58. package/dist/middleware/utils.js +0 -24
  59. package/dist/models/amazon/index.d.ts +0 -2
  60. package/dist/models/amazon/index.js +0 -2
  61. package/dist/models/amazon/middleware.d.ts +0 -3
  62. package/dist/models/amazon/middleware.js +0 -68
  63. package/dist/models/amazon/presets.d.ts +0 -345
  64. package/dist/models/amazon/presets.js +0 -80
  65. package/dist/models/anthropic/index.d.ts +0 -2
  66. package/dist/models/anthropic/index.js +0 -2
  67. package/dist/models/anthropic/middleware.d.ts +0 -5
  68. package/dist/models/anthropic/middleware.js +0 -127
  69. package/dist/models/anthropic/presets.d.ts +0 -711
  70. package/dist/models/anthropic/presets.js +0 -135
  71. package/dist/models/catalog.d.ts +0 -4
  72. package/dist/models/catalog.js +0 -8
  73. package/dist/models/cohere/index.d.ts +0 -2
  74. package/dist/models/cohere/index.js +0 -2
  75. package/dist/models/cohere/middleware.d.ts +0 -3
  76. package/dist/models/cohere/middleware.js +0 -62
  77. package/dist/models/cohere/presets.d.ts +0 -411
  78. package/dist/models/cohere/presets.js +0 -134
  79. package/dist/models/google/index.d.ts +0 -2
  80. package/dist/models/google/index.js +0 -2
  81. package/dist/models/google/middleware.d.ts +0 -8
  82. package/dist/models/google/middleware.js +0 -111
  83. package/dist/models/google/presets.d.ts +0 -403
  84. package/dist/models/google/presets.js +0 -88
  85. package/dist/models/meta/index.d.ts +0 -1
  86. package/dist/models/meta/index.js +0 -1
  87. package/dist/models/meta/presets.d.ts +0 -483
  88. package/dist/models/meta/presets.js +0 -95
  89. package/dist/models/openai/index.d.ts +0 -2
  90. package/dist/models/openai/index.js +0 -2
  91. package/dist/models/openai/middleware.d.ts +0 -4
  92. package/dist/models/openai/middleware.js +0 -88
  93. package/dist/models/openai/presets.d.ts +0 -959
  94. package/dist/models/openai/presets.js +0 -213
  95. package/dist/models/types.d.ts +0 -20
  96. package/dist/models/types.js +0 -85
  97. package/dist/models/voyage/index.d.ts +0 -2
  98. package/dist/models/voyage/index.js +0 -2
  99. package/dist/models/voyage/middleware.d.ts +0 -2
  100. package/dist/models/voyage/middleware.js +0 -19
  101. package/dist/models/voyage/presets.d.ts +0 -436
  102. package/dist/models/voyage/presets.js +0 -85
  103. package/dist/providers/anthropic/canonical.d.ts +0 -3
  104. package/dist/providers/anthropic/canonical.js +0 -9
  105. package/dist/providers/anthropic/index.d.ts +0 -1
  106. package/dist/providers/anthropic/index.js +0 -1
  107. package/dist/providers/bedrock/canonical.d.ts +0 -17
  108. package/dist/providers/bedrock/canonical.js +0 -61
  109. package/dist/providers/bedrock/index.d.ts +0 -2
  110. package/dist/providers/bedrock/index.js +0 -2
  111. package/dist/providers/bedrock/middleware.d.ts +0 -5
  112. package/dist/providers/bedrock/middleware.js +0 -137
  113. package/dist/providers/cohere/canonical.d.ts +0 -3
  114. package/dist/providers/cohere/canonical.js +0 -17
  115. package/dist/providers/cohere/index.d.ts +0 -1
  116. package/dist/providers/cohere/index.js +0 -1
  117. package/dist/providers/groq/canonical.d.ts +0 -3
  118. package/dist/providers/groq/canonical.js +0 -12
  119. package/dist/providers/groq/index.d.ts +0 -2
  120. package/dist/providers/groq/index.js +0 -2
  121. package/dist/providers/groq/middleware.d.ts +0 -2
  122. package/dist/providers/groq/middleware.js +0 -31
  123. package/dist/providers/openai/canonical.d.ts +0 -3
  124. package/dist/providers/openai/canonical.js +0 -8
  125. package/dist/providers/openai/index.d.ts +0 -1
  126. package/dist/providers/openai/index.js +0 -1
  127. package/dist/providers/registry.d.ts +0 -24
  128. package/dist/providers/registry.js +0 -103
  129. package/dist/providers/types.d.ts +0 -7
  130. package/dist/providers/types.js +0 -11
  131. package/dist/providers/vertex/canonical.d.ts +0 -3
  132. package/dist/providers/vertex/canonical.js +0 -8
  133. package/dist/providers/vertex/index.d.ts +0 -2
  134. package/dist/providers/vertex/index.js +0 -2
  135. package/dist/providers/vertex/middleware.d.ts +0 -2
  136. package/dist/providers/vertex/middleware.js +0 -47
  137. package/dist/providers/voyage/canonical.d.ts +0 -3
  138. package/dist/providers/voyage/canonical.js +0 -7
  139. package/dist/providers/voyage/index.d.ts +0 -1
  140. package/dist/providers/voyage/index.js +0 -1
  141. package/dist/telemetry/ai-sdk.d.ts +0 -2
  142. package/dist/telemetry/ai-sdk.js +0 -31
  143. package/dist/telemetry/baggage.d.ts +0 -1
  144. package/dist/telemetry/baggage.js +0 -24
  145. package/dist/telemetry/fetch.d.ts +0 -2
  146. package/dist/telemetry/fetch.js +0 -49
  147. package/dist/telemetry/gen-ai.d.ts +0 -6
  148. package/dist/telemetry/gen-ai.js +0 -78
  149. package/dist/telemetry/http.d.ts +0 -3
  150. package/dist/telemetry/http.js +0 -54
  151. package/dist/telemetry/index.d.ts +0 -1
  152. package/dist/telemetry/index.js +0 -1
  153. package/dist/telemetry/memory.d.ts +0 -2
  154. package/dist/telemetry/memory.js +0 -43
  155. package/dist/telemetry/span.d.ts +0 -13
  156. package/dist/telemetry/span.js +0 -60
  157. package/dist/types.d.ts +0 -197
  158. package/dist/types.js +0 -2
  159. package/dist/utils/env.d.ts +0 -2
  160. package/dist/utils/env.js +0 -7
  161. package/dist/utils/headers.d.ts +0 -4
  162. package/dist/utils/headers.js +0 -22
  163. package/dist/utils/preset.d.ts +0 -10
  164. package/dist/utils/preset.js +0 -42
  165. package/dist/utils/request.d.ts +0 -2
  166. package/dist/utils/request.js +0 -43
  167. package/dist/utils/response.d.ts +0 -6
  168. package/dist/utils/response.js +0 -55
  169. package/dist/utils/stream.d.ts +0 -9
  170. package/dist/utils/stream.js +0 -100
  171. package/dist/utils/url.d.ts +0 -4
  172. package/dist/utils/url.js +0 -21
package/README.md CHANGED
@@ -13,6 +13,7 @@ Learn more in our blog post: [Yet Another AI Gateway?](https://hebo.ai/blog/2601
13
13
  ## 🍌 Features
14
14
 
15
15
  - 🌐 OpenAI-compatible /chat/completions, /embeddings & /models endpoints.
16
+ - 💬 /conversations endpoint built on top of the Responses API.
16
17
  - 🔌 Integrate into your existing Hono, Elysia, Next.js & TanStack apps.
17
18
  - 🧩 Provider registry compatible with Vercel AI SDK providers.
18
19
  - 🧭 Canonical model IDs and parameter naming across providers.
@@ -32,7 +33,7 @@ bun install @hebo-ai/gateway
32
33
  - Quickstart
33
34
  - [Setup A Gateway Instance](#setup-a-gateway-instance) | [Mount Route Handlers](#mount-route-handlers) | [Call the Gateway](#call-the-gateway)
34
35
  - Configuration Reference
35
- - [Providers](#providers) | [Models](#models) | [Hooks](#hooks) | [Logger](#logger-settings) | [Observability](#observability) | [Timeouts](#timeout-settings)
36
+ - [Providers](#providers) | [Models](#models) | [Hooks](#hooks) | [Storage](#storage) | [Logger](#logger-settings) | [Observability](#observability) | [Timeouts](#timeout-settings)
36
37
  - Framework Support
37
38
  - [ElysiaJS](#elysiajs) | [Hono](#hono) | [Next.js](#nextjs) | [TanStack Start](#tanstack-start)
38
39
  - Runtime Support
@@ -343,9 +344,7 @@ const gw = gateway({
343
344
  */
344
345
  after: async (ctx: {
345
346
  result: ChatCompletions | ChatCompletionsStream | Embeddings;
346
- }): Promise<
347
- ChatCompletions | ChatCompletionsStream | Embeddings | void
348
- > => {
347
+ }): Promise<ChatCompletions | ChatCompletionsStream | Embeddings | void> => {
349
348
  // Example Use Cases:
350
349
  // - Transform result
351
350
  // - Result logging
@@ -371,6 +370,52 @@ The `ctx` object is **readonly for core fields**. Use return values to override
371
370
  > [!TIP]
372
371
  > To pass data between hooks, use `ctx.state`. It’s a per-request mutable bag in which you can stash things like auth info, routing decisions, timers, or trace IDs and read them later again in any of the other hooks.
373
372
 
373
+ ### Storage
374
+
375
+ The `/conversations` endpoint stores conversation history and associated items. By default, the gateway uses an in-memory storage, which is suitable for development but not for production as data is lost when the server restarts.
376
+
377
+ #### In-Memory Storage
378
+
379
+ You can configure the size of the in-memory storage (default is 256MB).
380
+
381
+ ```ts
382
+ import { gateway } from "@hebo-ai/gateway";
383
+ import { InMemoryStorage } from "@hebo-ai/gateway/storage/memory";
384
+
385
+ const gw = gateway({
386
+ // ...
387
+ storage: new InMemoryStorage({
388
+ maxSize: 512 * 1024 * 1024, // 512MB
389
+ }),
390
+ });
391
+ ```
392
+
393
+ #### SQL Storage
394
+
395
+ Hebo Gateway provides high-performance SQL adapters for **PostgreSQL**, **SQLite**, **MySQL**, and **GrepTimeDB**. It supports common drivers like `pg`, `postgres.js`, `mysql2`, `better-sqlite3`, `@libsql/client`, and `Bun.SQL`.
396
+
397
+ ```ts
398
+ import { gateway } from "@hebo-ai/gateway";
399
+ import { SqlStorage, PostgresDialect } from "@hebo-ai/gateway/storage/sql";
400
+ import { Pool } from "pg";
401
+
402
+ // 1. Setup dialect-specific client (e.g. pg, mysql2, sqlite, bun)
403
+ const client = new Pool({ connectionString: process.env.DATABASE_URL });
404
+
405
+ // 2. Setup storage with matching dialect (PostgresDialect, SqliteDialect, MysqlDialect, ...)
406
+ const storage = new SqlStorage({
407
+ dialect: new PostgresDialect({ client }),
408
+ });
409
+
410
+ // 3. Run migrations
411
+ await storage.migrate();
412
+
413
+ const gw = gateway({ storage });
414
+ ```
415
+
416
+ > [!TIP]
417
+ > The `PostgresDialect` includes optimized `JSONB` storage and high-performance `BRIN` indexing for time-ordered data by default.
418
+
374
419
  ## 🧩 Framework Support
375
420
 
376
421
  Hebo Gateway exposes **WinterCG-compatible** handlers that integrate with almost any existing framework.
@@ -580,6 +625,38 @@ Provider-specific mapping:
580
625
 
581
626
  When available, the resolved value is echoed back on response as `service_tier`.
582
627
 
628
+ ### Conversations
629
+
630
+ Hebo Gateway provides a dedicated `/conversations` endpoint for managing persistent conversation state. It is designed as an extension of the [OpenAI Conversations API](https://developers.openai.com/api/reference/typescript/resources/conversations) and supports standard CRUD operations alongside advanced listing with metadata filtering.
631
+
632
+ #### List & Filter Conversations
633
+
634
+ You can list conversations with standard cursor-based pagination and filter by any metadata key using the `metadata.KEY=VALUE` pattern.
635
+
636
+ ```bash
637
+ # List conversations for a specific user
638
+ curl "https://api.gateway.com/conversations?limit=10&metadata.user_id=123"
639
+ ```
640
+
641
+ The response follows the standard OpenAI list object:
642
+
643
+ ```json
644
+ {
645
+ "object": "list",
646
+ "data": [
647
+ {
648
+ "id": "conv_abc123",
649
+ "object": "conversation",
650
+ "created_at": 1678531200,
651
+ "metadata": { "user_id": "123" }
652
+ }
653
+ ],
654
+ "first_id": "conv_abc123",
655
+ "last_id": "conv_abc123",
656
+ "has_more": false
657
+ }
658
+ ```
659
+
583
660
  ### Prompt Caching
584
661
 
585
662
  The chat completions endpoint supports both implicit (provider-managed) and explicit prompt caching across OpenAI-compatible providers.
@@ -888,7 +965,7 @@ export async function handler(req: Request): Promise<Response> {
888
965
  }
889
966
  ```
890
967
 
891
- Non-streaming versions are available via `toChatCompletionsResponse`. Equivalent schemas and helpers are available in the `embeddings` and `models` endpoints.
968
+ Non-streaming versions are available via `toChatCompletionsResponse`. Equivalent schemas and helpers are available in the `conversations`, `embeddings` and `models` endpoints.
892
969
 
893
970
  > [!TIP]
894
971
  > Since Zod v4.3 you can generate a JSON Schema from any zod object by calling `z.toJSONSchema(...)`. This is useful for producing OpenAPI documentation from the same source of truth.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hebo-ai/gateway",
3
- "version": "0.7.0",
3
+ "version": "0.8.0-rc0",
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",
@@ -53,6 +53,11 @@
53
53
  "types": "./dist/endpoints/chat-completions/index.d.ts",
54
54
  "import": "./dist/endpoints/chat-completions/index.js"
55
55
  },
56
+ "./endpoints/conversations": {
57
+ "types": "./dist/endpoints/conversations/index.d.ts",
58
+ "import": "./dist/endpoints/conversations/index.js",
59
+ "dev-source": "./src/endpoints/conversations/index.ts"
60
+ },
56
61
  "./endpoints/embeddings": {
57
62
  "types": "./dist/endpoints/embeddings/index.d.ts",
58
63
  "import": "./dist/endpoints/embeddings/index.js"
@@ -61,6 +66,16 @@
61
66
  "types": "./dist/endpoints/models/index.d.ts",
62
67
  "import": "./dist/endpoints/models/index.js"
63
68
  },
69
+ "./storage/memory": {
70
+ "types": "./dist/endpoints/conversations/storage/memory.d.ts",
71
+ "import": "./dist/endpoints/conversations/storage/memory.js",
72
+ "dev-source": "./src/endpoints/conversations/storage/memory.ts"
73
+ },
74
+ "./storage/sql": {
75
+ "types": "./dist/endpoints/conversations/storage/sql.d.ts",
76
+ "import": "./dist/endpoints/conversations/storage/sql.js",
77
+ "dev-source": "./src/endpoints/conversations/storage/sql.ts"
78
+ },
64
79
  "./errors/openai": {
65
80
  "types": "./dist/errors/openai.d.ts",
66
81
  "import": "./dist/errors/openai.js"
@@ -142,6 +157,8 @@
142
157
  "dependencies": {
143
158
  "@ai-sdk/provider": "^3.0.8",
144
159
  "ai": "^6.0.116",
160
+ "lru-cache": "^11.2.6",
161
+ "uuid": "^13.0.0",
145
162
  "zod": "^4.3.6"
146
163
  },
147
164
  "devDependencies": {
@@ -153,23 +170,31 @@
153
170
  "@ai-sdk/openai": "^3.0.41",
154
171
  "@aws-sdk/credential-providers": "^3.1004.0",
155
172
  "@langfuse/otel": "^4.6.1",
173
+ "@libsql/client": "^0.17.0",
156
174
  "@mjackson/node-fetch-server": "^0.7.0",
157
175
  "@opentelemetry/api": "^1.9.0",
158
176
  "@opentelemetry/context-async-hooks": "^2.6.0",
159
177
  "@opentelemetry/sdk-trace-base": "^2.6.0",
160
178
  "@tanstack/react-router": "^1.166.3",
161
179
  "@tanstack/react-start": "^1.166.3",
180
+ "@types/better-sqlite3": "^7.6.13",
162
181
  "@types/bun": "latest",
182
+ "@types/pg": "^8.18.0",
163
183
  "@types/react": "^19.2.14",
164
184
  "@types/react-dom": "^19.2.3",
185
+ "@types/uuid": "^11.0.0",
186
+ "better-sqlite3": "^12.6.2",
165
187
  "elysia": "^1.4.27",
166
188
  "hono": "^4.12.5",
167
189
  "lefthook": "^2.1.3",
190
+ "mysql2": "^3.18.2",
168
191
  "next": "^16.1.6",
169
192
  "oxfmt": "^0.24.0",
170
193
  "oxlint": "^1.51.0",
171
194
  "oxlint-tsgolint": "^0.16.0",
195
+ "pg": "^8.19.0",
172
196
  "pino": "^10.3.1",
197
+ "postgres": "^3.4.8",
173
198
  "typescript": "^5.9.3",
174
199
  "vite": "^7.3.1",
175
200
  "vite-tsconfig-paths": "^6.1.1",
@@ -183,7 +208,12 @@
183
208
  "@ai-sdk/google-vertex": "^4.0.80",
184
209
  "@ai-sdk/groq": "^3.0.29",
185
210
  "@ai-sdk/openai": "^3.0.41",
211
+ "@libsql/client": "^0.14.0",
186
212
  "@opentelemetry/api": "^1.9.0",
213
+ "better-sqlite3": "^11.0.0",
214
+ "mysql2": "^3.11.0",
215
+ "pg": "^8.13.0",
216
+ "postgres": "^3.4.0",
187
217
  "typescript": "^5.9.3",
188
218
  "voyage-ai-provider": "^3.0.0"
189
219
  },
@@ -211,6 +241,21 @@
211
241
  },
212
242
  "voyage-ai-provider": {
213
243
  "optional": true
244
+ },
245
+ "pg": {
246
+ "optional": true
247
+ },
248
+ "postgres": {
249
+ "optional": true
250
+ },
251
+ "mysql2": {
252
+ "optional": true
253
+ },
254
+ "better-sqlite3": {
255
+ "optional": true
256
+ },
257
+ "@libsql/client": {
258
+ "optional": true
214
259
  }
215
260
  }
216
261
  }
package/dist/config.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import { type GatewayConfig, type GatewayConfigParsed } from "./types";
2
- export declare const parseConfig: (config: GatewayConfig) => GatewayConfigParsed;
package/dist/config.js DELETED
@@ -1,108 +0,0 @@
1
- import { isLogger, logger, setLoggerInstance } from "./logger";
2
- import { createDefaultLogger } from "./logger/default";
3
- import { installAiSdkWarningLogger } from "./telemetry/ai-sdk";
4
- import { DEFAULT_CHAT_TIMEOUT_MS, kParsed, } from "./types";
5
- export const parseConfig = (config) => {
6
- // If it has been parsed before, just return.
7
- if (kParsed in config)
8
- return config;
9
- const providers = config.providers ?? {};
10
- const parsedProviders = {};
11
- const models = config.models ?? {};
12
- // Set the global logger instance.
13
- if (config.logger === undefined) {
14
- setLoggerInstance(createDefaultLogger({}));
15
- }
16
- else if (config.logger !== null) {
17
- setLoggerInstance(isLogger(config.logger) ? config.logger : createDefaultLogger(config.logger));
18
- logger.info(isLogger(config.logger)
19
- ? `[logger] custom logger configured`
20
- : `[logger] logger configured: level=${config.logger.level}`);
21
- }
22
- // Strip providers that are not configured.
23
- for (const id in providers) {
24
- const provider = providers[id];
25
- if (provider === undefined) {
26
- logger.warn(`[config] ${id} provider removed (undefined)`);
27
- continue;
28
- }
29
- parsedProviders[id] = provider;
30
- }
31
- if (Object.keys(parsedProviders).length === 0) {
32
- throw new Error("No providers configured (config.providers is empty)");
33
- }
34
- // Strip providers that are not configured from models.
35
- const parsedModels = {};
36
- const warnings = new Set();
37
- for (const id in models) {
38
- const model = models[id];
39
- const kept = [];
40
- for (const p of model.providers) {
41
- if (p in parsedProviders)
42
- kept.push(p);
43
- else
44
- warnings.add(p);
45
- }
46
- if (kept.length > 0)
47
- parsedModels[id] = { ...model, providers: kept };
48
- }
49
- for (const warning of warnings) {
50
- logger.warn(`[config] ${warning} provider removed (not configured)`);
51
- }
52
- if (Object.keys(parsedModels).length === 0) {
53
- throw new Error("No models configured (config.models is empty)");
54
- }
55
- // Default for the telemetry settings.
56
- const telemetryEnabled = config.telemetry?.enabled ?? false;
57
- const telemetrySignals = telemetryEnabled
58
- ? {
59
- http: config.telemetry?.signals?.http ?? "recommended",
60
- gen_ai: config.telemetry?.signals?.gen_ai ?? "full",
61
- hebo: config.telemetry?.signals?.hebo ?? "off",
62
- }
63
- : {
64
- http: "off",
65
- gen_ai: "off",
66
- hebo: "off",
67
- };
68
- installAiSdkWarningLogger(telemetrySignals.gen_ai);
69
- // Default timeouts
70
- let normal;
71
- let flex;
72
- const t = config.timeouts;
73
- if (t === null) {
74
- normal = flex = undefined;
75
- }
76
- else if (typeof t === "number") {
77
- normal = t;
78
- flex = t * 3;
79
- }
80
- else {
81
- if (t?.normal === null)
82
- normal = undefined;
83
- else if (t?.normal === undefined)
84
- normal = DEFAULT_CHAT_TIMEOUT_MS;
85
- else
86
- normal = t.normal;
87
- if (t?.flex === null)
88
- flex = undefined;
89
- else if (t?.flex === undefined)
90
- flex = normal === undefined ? undefined : normal * 3;
91
- else
92
- flex = t.flex;
93
- }
94
- const parsedTimeouts = { normal, flex };
95
- // Return parsed config.
96
- return {
97
- ...config,
98
- timeouts: parsedTimeouts,
99
- telemetry: {
100
- ...config.telemetry,
101
- enabled: telemetryEnabled,
102
- signals: telemetrySignals,
103
- },
104
- providers: parsedProviders,
105
- models: parsedModels,
106
- [kParsed]: true,
107
- };
108
- };
@@ -1,43 +0,0 @@
1
- import type { SharedV3ProviderOptions, SharedV3ProviderMetadata } from "@ai-sdk/provider";
2
- import type { GenerateTextResult, StreamTextResult, FinishReason, ToolChoice, ToolSet, ModelMessage, UserContent, LanguageModelUsage, TextStreamPart, ReasoningOutput, AssistantModelMessage, ToolModelMessage, UserModelMessage } from "ai";
3
- import { Output } from "ai";
4
- import type { ChatCompletionsToolCall, ChatCompletionsTool, ChatCompletionsToolChoice, ChatCompletionsStream, ChatCompletionsContentPart, ChatCompletionsMessage, ChatCompletionsUserMessage, ChatCompletionsAssistantMessage, ChatCompletionsToolMessage, ChatCompletionsFinishReason, ChatCompletionsUsage, ChatCompletionsInputs, ChatCompletions, ChatCompletionsChunk, ChatCompletionsReasoningDetail } from "./schema";
5
- import type { SseErrorFrame, SseFrame } from "../../utils/stream";
6
- export type TextCallOptions = {
7
- messages: ModelMessage[];
8
- tools?: ToolSet;
9
- toolChoice?: ToolChoice<ToolSet>;
10
- activeTools?: Array<keyof ToolSet>;
11
- output?: Output.Output;
12
- temperature?: number;
13
- maxOutputTokens?: number;
14
- frequencyPenalty?: number;
15
- presencePenalty?: number;
16
- seed?: number;
17
- stopSequences?: string[];
18
- topP?: number;
19
- providerOptions: SharedV3ProviderOptions;
20
- };
21
- export declare function convertToTextCallOptions(params: ChatCompletionsInputs): TextCallOptions;
22
- export declare function convertToModelMessages(messages: ChatCompletionsMessage[]): ModelMessage[];
23
- export declare function fromChatCompletionsUserMessage(message: ChatCompletionsUserMessage): UserModelMessage;
24
- export declare function fromChatCompletionsAssistantMessage(message: ChatCompletionsAssistantMessage): AssistantModelMessage;
25
- export declare function fromChatCompletionsToolResultMessage(message: ChatCompletionsAssistantMessage, toolById: Map<string, ChatCompletionsToolMessage>): ToolModelMessage | undefined;
26
- export declare function fromChatCompletionsContent(content: ChatCompletionsContentPart[]): UserContent;
27
- export declare const convertToToolSet: (tools: ChatCompletionsTool[] | undefined) => ToolSet | undefined;
28
- export declare const convertToToolChoiceOptions: (toolChoice: ChatCompletionsToolChoice | undefined) => {
29
- toolChoice?: ToolChoice<ToolSet>;
30
- activeTools?: Array<keyof ToolSet>;
31
- };
32
- export declare function toChatCompletions(result: GenerateTextResult<ToolSet, Output.Output>, model: string): ChatCompletions;
33
- export declare function toChatCompletionsResponse(result: GenerateTextResult<ToolSet, Output.Output>, model: string, responseInit?: ResponseInit): Response;
34
- export declare function toChatCompletionsStream(result: StreamTextResult<ToolSet, Output.Output>, model: string): ChatCompletionsStream;
35
- export declare function toChatCompletionsStreamResponse(result: StreamTextResult<ToolSet, Output.Output>, model: string, responseInit?: ResponseInit): Response;
36
- export declare class ChatCompletionsTransformStream extends TransformStream<TextStreamPart<ToolSet>, SseFrame<ChatCompletionsChunk> | SseErrorFrame> {
37
- constructor(model: string);
38
- }
39
- export declare const toChatCompletionsAssistantMessage: (result: GenerateTextResult<ToolSet, Output.Output>) => ChatCompletionsAssistantMessage;
40
- export declare function toReasoningDetail(reasoning: ReasoningOutput, id: string, index: number): ChatCompletionsReasoningDetail;
41
- export declare function toChatCompletionsUsage(usage: LanguageModelUsage): ChatCompletionsUsage;
42
- export declare function toChatCompletionsToolCall(id: string, name: string, args: unknown, providerMetadata?: SharedV3ProviderMetadata): ChatCompletionsToolCall;
43
- export declare const toChatCompletionsFinishReason: (finishReason: FinishReason) => ChatCompletionsFinishReason;