@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.
- package/README.md +82 -4
- package/package.json +34 -34
- package/dist/config.d.ts +0 -2
- package/dist/config.js +0 -111
- package/dist/endpoints/chat-completions/converters.d.ts +0 -26
- package/dist/endpoints/chat-completions/converters.js +0 -524
- package/dist/endpoints/chat-completions/handler.d.ts +0 -2
- package/dist/endpoints/chat-completions/handler.js +0 -149
- package/dist/endpoints/chat-completions/index.d.ts +0 -4
- package/dist/endpoints/chat-completions/index.js +0 -4
- package/dist/endpoints/chat-completions/otel.d.ts +0 -5
- package/dist/endpoints/chat-completions/otel.js +0 -175
- package/dist/endpoints/chat-completions/schema.d.ts +0 -1170
- package/dist/endpoints/chat-completions/schema.js +0 -252
- package/dist/endpoints/conversations/converters.d.ts +0 -8
- package/dist/endpoints/conversations/converters.js +0 -29
- package/dist/endpoints/conversations/handler.d.ts +0 -2
- package/dist/endpoints/conversations/handler.js +0 -276
- package/dist/endpoints/conversations/index.d.ts +0 -3
- package/dist/endpoints/conversations/index.js +0 -3
- package/dist/endpoints/conversations/schema.d.ts +0 -1511
- package/dist/endpoints/conversations/schema.js +0 -74
- package/dist/endpoints/conversations/storage/dialects/greptime.d.ts +0 -10
- package/dist/endpoints/conversations/storage/dialects/greptime.js +0 -75
- package/dist/endpoints/conversations/storage/dialects/mysql.d.ts +0 -12
- package/dist/endpoints/conversations/storage/dialects/mysql.js +0 -118
- package/dist/endpoints/conversations/storage/dialects/postgres.d.ts +0 -16
- package/dist/endpoints/conversations/storage/dialects/postgres.js +0 -185
- package/dist/endpoints/conversations/storage/dialects/sqlite.d.ts +0 -11
- package/dist/endpoints/conversations/storage/dialects/sqlite.js +0 -176
- package/dist/endpoints/conversations/storage/dialects/types.d.ts +0 -42
- package/dist/endpoints/conversations/storage/dialects/types.js +0 -0
- package/dist/endpoints/conversations/storage/dialects/utils.d.ts +0 -25
- package/dist/endpoints/conversations/storage/dialects/utils.js +0 -80
- package/dist/endpoints/conversations/storage/memory.d.ts +0 -25
- package/dist/endpoints/conversations/storage/memory.js +0 -200
- package/dist/endpoints/conversations/storage/sql.d.ts +0 -33
- package/dist/endpoints/conversations/storage/sql.js +0 -278
- package/dist/endpoints/conversations/storage/types.d.ts +0 -39
- package/dist/endpoints/conversations/storage/types.js +0 -0
- package/dist/endpoints/embeddings/converters.d.ts +0 -10
- package/dist/endpoints/embeddings/converters.js +0 -31
- package/dist/endpoints/embeddings/handler.d.ts +0 -2
- package/dist/endpoints/embeddings/handler.js +0 -104
- package/dist/endpoints/embeddings/index.d.ts +0 -4
- package/dist/endpoints/embeddings/index.js +0 -4
- package/dist/endpoints/embeddings/otel.d.ts +0 -5
- package/dist/endpoints/embeddings/otel.js +0 -29
- package/dist/endpoints/embeddings/schema.d.ts +0 -44
- package/dist/endpoints/embeddings/schema.js +0 -29
- package/dist/endpoints/models/converters.d.ts +0 -6
- package/dist/endpoints/models/converters.js +0 -42
- package/dist/endpoints/models/handler.d.ts +0 -2
- package/dist/endpoints/models/handler.js +0 -29
- package/dist/endpoints/models/index.d.ts +0 -3
- package/dist/endpoints/models/index.js +0 -3
- package/dist/endpoints/models/schema.d.ts +0 -42
- package/dist/endpoints/models/schema.js +0 -31
- package/dist/endpoints/responses/converters.d.ts +0 -17
- package/dist/endpoints/responses/converters.js +0 -1034
- package/dist/endpoints/responses/handler.d.ts +0 -2
- package/dist/endpoints/responses/handler.js +0 -137
- package/dist/endpoints/responses/index.d.ts +0 -4
- package/dist/endpoints/responses/index.js +0 -4
- package/dist/endpoints/responses/otel.d.ts +0 -6
- package/dist/endpoints/responses/otel.js +0 -221
- package/dist/endpoints/responses/schema.d.ts +0 -2109
- package/dist/endpoints/responses/schema.js +0 -314
- package/dist/endpoints/shared/converters.d.ts +0 -55
- package/dist/endpoints/shared/converters.js +0 -179
- package/dist/endpoints/shared/schema.d.ts +0 -70
- package/dist/endpoints/shared/schema.js +0 -46
- package/dist/errors/ai-sdk.d.ts +0 -2
- package/dist/errors/ai-sdk.js +0 -52
- package/dist/errors/gateway.d.ts +0 -5
- package/dist/errors/gateway.js +0 -13
- package/dist/errors/openai.d.ts +0 -15
- package/dist/errors/openai.js +0 -40
- package/dist/errors/utils.d.ts +0 -22
- package/dist/errors/utils.js +0 -44
- package/dist/gateway.d.ts +0 -11
- package/dist/gateway.js +0 -44
- package/dist/index.d.ts +0 -11
- package/dist/index.js +0 -10
- package/dist/lifecycle.d.ts +0 -3
- package/dist/lifecycle.js +0 -113
- package/dist/logger/default.d.ts +0 -4
- package/dist/logger/default.js +0 -81
- package/dist/logger/index.d.ts +0 -11
- package/dist/logger/index.js +0 -25
- package/dist/middleware/common.d.ts +0 -12
- package/dist/middleware/common.js +0 -146
- package/dist/middleware/debug.d.ts +0 -3
- package/dist/middleware/debug.js +0 -27
- package/dist/middleware/matcher.d.ts +0 -28
- package/dist/middleware/matcher.js +0 -118
- package/dist/middleware/utils.d.ts +0 -2
- package/dist/middleware/utils.js +0 -24
- package/dist/models/amazon/index.d.ts +0 -2
- package/dist/models/amazon/index.js +0 -2
- package/dist/models/amazon/middleware.d.ts +0 -3
- package/dist/models/amazon/middleware.js +0 -68
- package/dist/models/amazon/presets.d.ts +0 -345
- package/dist/models/amazon/presets.js +0 -80
- package/dist/models/anthropic/index.d.ts +0 -2
- package/dist/models/anthropic/index.js +0 -2
- package/dist/models/anthropic/middleware.d.ts +0 -5
- package/dist/models/anthropic/middleware.js +0 -127
- package/dist/models/anthropic/presets.d.ts +0 -711
- package/dist/models/anthropic/presets.js +0 -135
- package/dist/models/catalog.d.ts +0 -4
- package/dist/models/catalog.js +0 -8
- package/dist/models/cohere/index.d.ts +0 -2
- package/dist/models/cohere/index.js +0 -2
- package/dist/models/cohere/middleware.d.ts +0 -3
- package/dist/models/cohere/middleware.js +0 -62
- package/dist/models/cohere/presets.d.ts +0 -411
- package/dist/models/cohere/presets.js +0 -134
- package/dist/models/google/index.d.ts +0 -2
- package/dist/models/google/index.js +0 -2
- package/dist/models/google/middleware.d.ts +0 -8
- package/dist/models/google/middleware.js +0 -111
- package/dist/models/google/presets.d.ts +0 -403
- package/dist/models/google/presets.js +0 -88
- package/dist/models/meta/index.d.ts +0 -1
- package/dist/models/meta/index.js +0 -1
- package/dist/models/meta/presets.d.ts +0 -483
- package/dist/models/meta/presets.js +0 -95
- package/dist/models/openai/index.d.ts +0 -2
- package/dist/models/openai/index.js +0 -2
- package/dist/models/openai/middleware.d.ts +0 -4
- package/dist/models/openai/middleware.js +0 -88
- package/dist/models/openai/presets.d.ts +0 -1319
- package/dist/models/openai/presets.js +0 -277
- package/dist/models/types.d.ts +0 -20
- package/dist/models/types.js +0 -92
- package/dist/models/voyage/index.d.ts +0 -2
- package/dist/models/voyage/index.js +0 -2
- package/dist/models/voyage/middleware.d.ts +0 -2
- package/dist/models/voyage/middleware.js +0 -19
- package/dist/models/voyage/presets.d.ts +0 -436
- package/dist/models/voyage/presets.js +0 -85
- package/dist/providers/anthropic/canonical.d.ts +0 -3
- package/dist/providers/anthropic/canonical.js +0 -9
- package/dist/providers/anthropic/index.d.ts +0 -1
- package/dist/providers/anthropic/index.js +0 -1
- package/dist/providers/bedrock/canonical.d.ts +0 -17
- package/dist/providers/bedrock/canonical.js +0 -61
- package/dist/providers/bedrock/index.d.ts +0 -2
- package/dist/providers/bedrock/index.js +0 -2
- package/dist/providers/bedrock/middleware.d.ts +0 -5
- package/dist/providers/bedrock/middleware.js +0 -137
- package/dist/providers/cohere/canonical.d.ts +0 -3
- package/dist/providers/cohere/canonical.js +0 -17
- package/dist/providers/cohere/index.d.ts +0 -1
- package/dist/providers/cohere/index.js +0 -1
- package/dist/providers/groq/canonical.d.ts +0 -3
- package/dist/providers/groq/canonical.js +0 -12
- package/dist/providers/groq/index.d.ts +0 -2
- package/dist/providers/groq/index.js +0 -2
- package/dist/providers/groq/middleware.d.ts +0 -2
- package/dist/providers/groq/middleware.js +0 -31
- package/dist/providers/openai/canonical.d.ts +0 -3
- package/dist/providers/openai/canonical.js +0 -8
- package/dist/providers/openai/index.d.ts +0 -1
- package/dist/providers/openai/index.js +0 -1
- package/dist/providers/registry.d.ts +0 -24
- package/dist/providers/registry.js +0 -103
- package/dist/providers/types.d.ts +0 -7
- package/dist/providers/types.js +0 -11
- package/dist/providers/vertex/canonical.d.ts +0 -3
- package/dist/providers/vertex/canonical.js +0 -8
- package/dist/providers/vertex/index.d.ts +0 -2
- package/dist/providers/vertex/index.js +0 -2
- package/dist/providers/vertex/middleware.d.ts +0 -2
- package/dist/providers/vertex/middleware.js +0 -47
- package/dist/providers/voyage/canonical.d.ts +0 -3
- package/dist/providers/voyage/canonical.js +0 -7
- package/dist/providers/voyage/index.d.ts +0 -1
- package/dist/providers/voyage/index.js +0 -1
- package/dist/telemetry/ai-sdk.d.ts +0 -2
- package/dist/telemetry/ai-sdk.js +0 -31
- package/dist/telemetry/baggage.d.ts +0 -1
- package/dist/telemetry/baggage.js +0 -24
- package/dist/telemetry/fetch.d.ts +0 -2
- package/dist/telemetry/fetch.js +0 -49
- package/dist/telemetry/gen-ai.d.ts +0 -6
- package/dist/telemetry/gen-ai.js +0 -78
- package/dist/telemetry/http.d.ts +0 -3
- package/dist/telemetry/http.js +0 -54
- package/dist/telemetry/index.d.ts +0 -1
- package/dist/telemetry/index.js +0 -1
- package/dist/telemetry/memory.d.ts +0 -2
- package/dist/telemetry/memory.js +0 -43
- package/dist/telemetry/span.d.ts +0 -13
- package/dist/telemetry/span.js +0 -60
- package/dist/types.d.ts +0 -216
- package/dist/types.js +0 -2
- package/dist/utils/env.d.ts +0 -2
- package/dist/utils/env.js +0 -7
- package/dist/utils/headers.d.ts +0 -4
- package/dist/utils/headers.js +0 -22
- package/dist/utils/preset.d.ts +0 -10
- package/dist/utils/preset.js +0 -41
- package/dist/utils/request.d.ts +0 -2
- package/dist/utils/request.js +0 -43
- package/dist/utils/response.d.ts +0 -6
- package/dist/utils/response.js +0 -55
- package/dist/utils/stream.d.ts +0 -9
- package/dist/utils/stream.js +0 -100
- package/dist/utils/url.d.ts +0 -4
- package/dist/utils/url.js +0 -21
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ bun install @hebo-ai/gateway
|
|
|
42
42
|
- Endpoints
|
|
43
43
|
- [/chat/completions](#chatcompletions) | [/embeddings](#embeddings) | [/models](#models) | [/responses](#responses) | [/conversations](#conversations)
|
|
44
44
|
- OpenAI Extensions
|
|
45
|
-
- [Reasoning](#reasoning) | [Service Tier](#service-tier) | [Prompt Caching](#prompt-caching)
|
|
45
|
+
- [Reasoning](#reasoning) | [Service Tier](#service-tier) | [Prompt Caching](#prompt-caching) | [Compressed Requests](#compressed-requests)
|
|
46
46
|
- Advanced Usage
|
|
47
47
|
- [Passing Framework State to Hooks](#passing-framework-state-to-hooks) | [Selective Route Mounting](#selective-route-mounting) | [Low-level Schemas & Converters](#low-level-schemas--converters)
|
|
48
48
|
|
|
@@ -792,6 +792,36 @@ Provider behavior:
|
|
|
792
792
|
- **Google Gemini**: maps `cached_content` to Gemini `cachedContent`.
|
|
793
793
|
- **Amazon Nova (Bedrock)**: maps `cache_control` to Bedrock `cachePoints` and inserts an automatic cache point on a stable prefix when none is provided.
|
|
794
794
|
|
|
795
|
+
|
|
796
|
+
### Compressed Requests
|
|
797
|
+
|
|
798
|
+
The gateway supports gzip and deflate compressed request bodies via the Web Compression Streams API. The `maxBodySize` option controls the maximum *decompressed* body size for these compressed requests, protecting against gzip bombs and oversized payloads.
|
|
799
|
+
|
|
800
|
+
```ts
|
|
801
|
+
import { gateway } from "@hebo-ai/gateway";
|
|
802
|
+
|
|
803
|
+
const gw = gateway({
|
|
804
|
+
// ...
|
|
805
|
+
// Maximum decompressed body size in bytes (default: 10 MB).
|
|
806
|
+
// Set to 0 to disable the decompressed size limit.
|
|
807
|
+
maxBodySize: 10 * 1024 * 1024,
|
|
808
|
+
});
|
|
809
|
+
```
|
|
810
|
+
|
|
811
|
+
Compressed requests that exceed this limit after decompression receive an HTTP `413 Payload Too Large` response. Unsupported `Content-Encoding` values return HTTP `415 Unsupported Media Type`.
|
|
812
|
+
|
|
813
|
+
> [!IMPORTANT]
|
|
814
|
+
> **Plain (uncompressed) request body size limits** are *not* enforced by the gateway — they should be configured at the framework or server level. The gateway only enforces `maxBodySize` on decompressed output, since the framework cannot know the decompressed size ahead of time.
|
|
815
|
+
>
|
|
816
|
+
> Framework-level configuration examples:
|
|
817
|
+
>
|
|
818
|
+
> - **Bun** — [`Bun.serve({ maxRequestBodySize: 10_485_760 })`](https://bun.sh/docs/api/http#bun-serve)
|
|
819
|
+
> - **Elysia** — inherits from Bun's `maxRequestBodySize`
|
|
820
|
+
> - **Hono** — [`bodyLimit` middleware](https://hono.dev/docs/middleware/builtin/body-limit): `app.use(bodyLimit({ maxSize: 10 * 1024 * 1024 }))`
|
|
821
|
+
> - **Express** — [`express.json({ limit: '10mb' })`](https://expressjs.com/en/api.html#express.json)
|
|
822
|
+
> - **Fastify** — [`fastify({ bodyLimit: 10485760 })`](https://fastify.dev/docs/latest/Reference/Server/#bodylimit)
|
|
823
|
+
> - **Node.js `http`** — [`server.maxRequestSize`](https://nodejs.org/api/http.html) (v22.6+), or use a reverse proxy like nginx (`client_max_body_size 10m`)
|
|
824
|
+
|
|
795
825
|
## 🧪 Advanced Usage
|
|
796
826
|
|
|
797
827
|
### Logger Settings
|
|
@@ -863,19 +893,37 @@ Attribute names and span & metrics semantics follow OpenTelemetry GenAI semantic
|
|
|
863
893
|
https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-spans/
|
|
864
894
|
https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-metrics/
|
|
865
895
|
|
|
896
|
+
For observability integration that is not otel compliant, you can disable built-in telemetry and manually instrument requests during `before` / `after` hooks.
|
|
897
|
+
|
|
898
|
+
#### Custom Telemetry Attributes
|
|
899
|
+
|
|
900
|
+
Use `ctx.otel` in any hook to attach attributes to both spans and metrics:
|
|
901
|
+
|
|
902
|
+
```ts
|
|
903
|
+
hooks: {
|
|
904
|
+
onRequest: (ctx) => {
|
|
905
|
+
ctx.otel["app.tenant.id"] = tenantId;
|
|
906
|
+
ctx.otel["app.user.id"] = userId;
|
|
907
|
+
},
|
|
908
|
+
}
|
|
909
|
+
```
|
|
910
|
+
|
|
911
|
+
These attributes appear on the active span and on all metric instruments (request duration, token usage, TPOT, TTFT).
|
|
912
|
+
|
|
866
913
|
> [!TIP]
|
|
867
914
|
> To populate custom span attributes, the inbound W3C `baggage` header is supported. Keys in the `hebo.` namespace are mapped to span attributes, with the namespace stripped. For example: `baggage: hebo.user_id=u-123` becomes span attribute `user_id=u-123`.
|
|
868
915
|
> For `/chat/completions` and `/embeddings`, request `metadata` (`Record<string, string>`, key 1-64 chars, value up to 512 chars) is also forwarded to spans as `gen_ai.request.metadata.<key>`.
|
|
869
916
|
|
|
870
|
-
For observability integration that is not otel compliant, you can disable built-in telemetry and manually instrument requests during `before` / `after` hooks.
|
|
871
|
-
|
|
872
917
|
#### Metrics
|
|
873
918
|
|
|
874
919
|
The Gateway also emits `gen_ai` metrics:
|
|
875
920
|
|
|
876
921
|
- `gen_ai.server.request.duration` (histogram, seconds)
|
|
877
922
|
- `gen_ai.server.time_per_output_token` (histogram, seconds)
|
|
878
|
-
- `gen_ai.
|
|
923
|
+
- `gen_ai.server.time_to_first_token` (histogram, seconds)
|
|
924
|
+
- `gen_ai.client.token.usage` (histogram, tokens; tagged with `gen_ai.token.type=input|output|cached|reasoning`)
|
|
925
|
+
|
|
926
|
+
Metric names and attributes follow OpenTelemetry GenAI semantic conventions. Histogram bucket boundaries are tuned for practical dashboards and alerting rather than copied verbatim from upstream recommendations.
|
|
879
927
|
|
|
880
928
|
To capture them, configure a global `MeterProvider` before creating the gateway:
|
|
881
929
|
|
|
@@ -1073,3 +1121,33 @@ Non-streaming versions are available via `toChatCompletionsResponse`. Equivalent
|
|
|
1073
1121
|
|
|
1074
1122
|
> [!TIP]
|
|
1075
1123
|
> 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.
|
|
1124
|
+
|
|
1125
|
+
|
|
1126
|
+
### Request Body Size
|
|
1127
|
+
|
|
1128
|
+
The gateway supports gzip and deflate compressed request bodies via the Web Compression Streams API. The `maxBodySize` option controls the maximum *decompressed* body size for these compressed requests, protecting against gzip bombs and oversized payloads.
|
|
1129
|
+
|
|
1130
|
+
```ts
|
|
1131
|
+
import { gateway } from "@hebo-ai/gateway";
|
|
1132
|
+
|
|
1133
|
+
const gw = gateway({
|
|
1134
|
+
// ...
|
|
1135
|
+
// Maximum decompressed body size in bytes (default: 10 MB).
|
|
1136
|
+
// Set to 0 to disable the decompressed size limit.
|
|
1137
|
+
maxBodySize: 10 * 1024 * 1024,
|
|
1138
|
+
});
|
|
1139
|
+
```
|
|
1140
|
+
|
|
1141
|
+
Compressed requests that exceed this limit after decompression receive an HTTP `413 Payload Too Large` response. Unsupported `Content-Encoding` values return HTTP `415 Unsupported Media Type`.
|
|
1142
|
+
|
|
1143
|
+
> [!IMPORTANT]
|
|
1144
|
+
> **Plain (uncompressed) request body size limits** are *not* enforced by the gateway — they should be configured at the framework or server level. The gateway only enforces `maxBodySize` on decompressed output, since the framework cannot know the decompressed size ahead of time.
|
|
1145
|
+
>
|
|
1146
|
+
> Framework-level configuration examples:
|
|
1147
|
+
>
|
|
1148
|
+
> - **Bun** — [`Bun.serve({ maxRequestBodySize: 10_485_760 })`](https://bun.sh/docs/api/http#bun-serve)
|
|
1149
|
+
> - **Elysia** — inherits from Bun's `maxRequestBodySize`
|
|
1150
|
+
> - **Hono** — [`bodyLimit` middleware](https://hono.dev/docs/middleware/builtin/body-limit): `app.use(bodyLimit({ maxSize: 10 * 1024 * 1024 }))`
|
|
1151
|
+
> - **Express** — [`express.json({ limit: '10mb' })`](https://expressjs.com/en/api.html#express.json)
|
|
1152
|
+
> - **Fastify** — [`fastify({ bodyLimit: 10485760 })`](https://fastify.dev/docs/latest/Reference/Server/#bodylimit)
|
|
1153
|
+
> - **Node.js `http`** — [`server.maxRequestSize`](https://nodejs.org/api/http.html) (v22.6+), or use a reverse proxy like nginx (`client_max_body_size 10m`)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hebo-ai/gateway",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.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",
|
|
@@ -160,51 +160,51 @@
|
|
|
160
160
|
"typecheck": "oxlint --type-check",
|
|
161
161
|
"test": "bun test",
|
|
162
162
|
"check": "bun lint && bun typecheck",
|
|
163
|
-
"fix": "bun lint:staged && bun
|
|
163
|
+
"fix": "bun lint:staged && bun format:staged"
|
|
164
164
|
},
|
|
165
165
|
"dependencies": {
|
|
166
166
|
"@ai-sdk/provider": "^3.0.8",
|
|
167
|
-
"ai": "^6.0.
|
|
168
|
-
"lru-cache": "^11.
|
|
167
|
+
"ai": "^6.0.154",
|
|
168
|
+
"lru-cache": "^11.3.3",
|
|
169
169
|
"uuid": "^13.0.0",
|
|
170
170
|
"zod": "^4.3.6"
|
|
171
171
|
},
|
|
172
172
|
"devDependencies": {
|
|
173
|
-
"@ai-sdk/amazon-bedrock": "^4.0.
|
|
174
|
-
"@ai-sdk/anthropic": "^3.0.
|
|
175
|
-
"@ai-sdk/cohere": "^3.0.
|
|
176
|
-
"@ai-sdk/google-vertex": "^4.0.
|
|
177
|
-
"@ai-sdk/groq": "^3.0.
|
|
178
|
-
"@ai-sdk/openai": "^3.0.
|
|
179
|
-
"@aws-sdk/credential-providers": "^3.
|
|
180
|
-
"@langfuse/otel": "^
|
|
181
|
-
"@libsql/client": "^0.17.
|
|
173
|
+
"@ai-sdk/amazon-bedrock": "^4.0.92",
|
|
174
|
+
"@ai-sdk/anthropic": "^3.0.68",
|
|
175
|
+
"@ai-sdk/cohere": "^3.0.30",
|
|
176
|
+
"@ai-sdk/google-vertex": "^4.0.105",
|
|
177
|
+
"@ai-sdk/groq": "^3.0.35",
|
|
178
|
+
"@ai-sdk/openai": "^3.0.52",
|
|
179
|
+
"@aws-sdk/credential-providers": "^3.1027.0",
|
|
180
|
+
"@langfuse/otel": "^5.0.2",
|
|
181
|
+
"@libsql/client": "^0.17.2",
|
|
182
182
|
"@mjackson/node-fetch-server": "^0.7.0",
|
|
183
|
-
"@opentelemetry/api": "^1.9.
|
|
184
|
-
"@opentelemetry/context-async-hooks": "^2.6.
|
|
185
|
-
"@opentelemetry/sdk-trace-base": "^2.6.
|
|
186
|
-
"@tanstack/react-router": "^1.
|
|
187
|
-
"@tanstack/react-start": "^1.
|
|
183
|
+
"@opentelemetry/api": "^1.9.1",
|
|
184
|
+
"@opentelemetry/context-async-hooks": "^2.6.1",
|
|
185
|
+
"@opentelemetry/sdk-trace-base": "^2.6.1",
|
|
186
|
+
"@tanstack/react-router": "^1.168.10",
|
|
187
|
+
"@tanstack/react-start": "^1.167.16",
|
|
188
188
|
"@types/better-sqlite3": "^7.6.13",
|
|
189
|
-
"@types/bun": "
|
|
190
|
-
"@types/pg": "^8.
|
|
189
|
+
"@types/bun": "1.3.11",
|
|
190
|
+
"@types/pg": "^8.20.0",
|
|
191
191
|
"@types/react": "^19.2.14",
|
|
192
192
|
"@types/react-dom": "^19.2.3",
|
|
193
193
|
"@types/uuid": "^11.0.0",
|
|
194
|
-
"better-sqlite3": "^12.
|
|
195
|
-
"elysia": "^1.4.
|
|
196
|
-
"hono": "^4.12.
|
|
197
|
-
"lefthook": "^2.1.
|
|
198
|
-
"mysql2": "^3.
|
|
199
|
-
"next": "^16.
|
|
200
|
-
"oxfmt": "^0.
|
|
201
|
-
"oxlint": "^1.
|
|
202
|
-
"oxlint-tsgolint": "^0.
|
|
194
|
+
"better-sqlite3": "^12.8.0",
|
|
195
|
+
"elysia": "^1.4.28",
|
|
196
|
+
"hono": "^4.12.12",
|
|
197
|
+
"lefthook": "^2.1.5",
|
|
198
|
+
"mysql2": "^3.21.0",
|
|
199
|
+
"next": "^16.2.3",
|
|
200
|
+
"oxfmt": "^0.44.0",
|
|
201
|
+
"oxlint": "^1.59.0",
|
|
202
|
+
"oxlint-tsgolint": "^0.20.0",
|
|
203
203
|
"pg": "^8.19.0",
|
|
204
204
|
"pino": "^10.3.1",
|
|
205
|
-
"postgres": "^3.4.
|
|
206
|
-
"typescript": "^
|
|
207
|
-
"vite": "^7.3.
|
|
205
|
+
"postgres": "^3.4.9",
|
|
206
|
+
"typescript": "^6.0.2",
|
|
207
|
+
"vite": "^7.3.2",
|
|
208
208
|
"vite-tsconfig-paths": "^6.1.1",
|
|
209
209
|
"voyage-ai-provider": "^3.0.0"
|
|
210
210
|
},
|
|
@@ -217,12 +217,12 @@
|
|
|
217
217
|
"@ai-sdk/groq": "^3.0.29",
|
|
218
218
|
"@ai-sdk/openai": "^3.0.41",
|
|
219
219
|
"@libsql/client": "^0.14.0",
|
|
220
|
-
"@opentelemetry/api": "^1.9.
|
|
220
|
+
"@opentelemetry/api": "^1.9.1",
|
|
221
221
|
"better-sqlite3": "^11.0.0",
|
|
222
222
|
"mysql2": "^3.11.0",
|
|
223
223
|
"pg": "^8.13.0",
|
|
224
224
|
"postgres": "^3.4.0",
|
|
225
|
-
"typescript": "
|
|
225
|
+
"typescript": ">=5.9.3",
|
|
226
226
|
"voyage-ai-provider": "^3.0.0"
|
|
227
227
|
},
|
|
228
228
|
"peerDependenciesMeta": {
|
package/dist/config.d.ts
DELETED
package/dist/config.js
DELETED
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { InMemoryStorage } from "./endpoints/conversations/storage/memory";
|
|
2
|
-
import { isLogger, logger, setLoggerInstance } from "./logger";
|
|
3
|
-
import { createDefaultLogger } from "./logger/default";
|
|
4
|
-
import { installAiSdkWarningLogger } from "./telemetry/ai-sdk";
|
|
5
|
-
import { DEFAULT_CHAT_TIMEOUT_MS, kParsed, } from "./types";
|
|
6
|
-
export const parseConfig = (config) => {
|
|
7
|
-
// If it has been parsed before, just return.
|
|
8
|
-
if (kParsed in config)
|
|
9
|
-
return config;
|
|
10
|
-
const providers = config.providers ?? {};
|
|
11
|
-
const parsedProviders = {};
|
|
12
|
-
const models = config.models ?? {};
|
|
13
|
-
const storage = config.storage ?? new InMemoryStorage();
|
|
14
|
-
// Set the global logger instance.
|
|
15
|
-
if (config.logger === undefined) {
|
|
16
|
-
setLoggerInstance(createDefaultLogger({}));
|
|
17
|
-
}
|
|
18
|
-
else if (config.logger !== null) {
|
|
19
|
-
setLoggerInstance(isLogger(config.logger) ? config.logger : createDefaultLogger(config.logger));
|
|
20
|
-
logger.info(isLogger(config.logger)
|
|
21
|
-
? `[logger] custom logger configured`
|
|
22
|
-
: `[logger] logger configured: level=${config.logger.level}`);
|
|
23
|
-
}
|
|
24
|
-
// Strip providers that are not configured.
|
|
25
|
-
for (const id in providers) {
|
|
26
|
-
const provider = providers[id];
|
|
27
|
-
if (provider === undefined) {
|
|
28
|
-
logger.warn(`[config] ${id} provider removed (undefined)`);
|
|
29
|
-
continue;
|
|
30
|
-
}
|
|
31
|
-
parsedProviders[id] = provider;
|
|
32
|
-
}
|
|
33
|
-
if (Object.keys(parsedProviders).length === 0) {
|
|
34
|
-
throw new Error("No providers configured (config.providers is empty)");
|
|
35
|
-
}
|
|
36
|
-
// Strip providers that are not configured from models.
|
|
37
|
-
const parsedModels = {};
|
|
38
|
-
const warnings = new Set();
|
|
39
|
-
for (const id in models) {
|
|
40
|
-
const model = models[id];
|
|
41
|
-
const kept = [];
|
|
42
|
-
for (const p of model.providers) {
|
|
43
|
-
if (p in parsedProviders)
|
|
44
|
-
kept.push(p);
|
|
45
|
-
else
|
|
46
|
-
warnings.add(p);
|
|
47
|
-
}
|
|
48
|
-
if (kept.length > 0)
|
|
49
|
-
parsedModels[id] = { ...model, providers: kept };
|
|
50
|
-
}
|
|
51
|
-
for (const warning of warnings) {
|
|
52
|
-
logger.warn(`[config] ${warning} provider removed (not configured)`);
|
|
53
|
-
}
|
|
54
|
-
if (Object.keys(parsedModels).length === 0) {
|
|
55
|
-
throw new Error("No models configured (config.models is empty)");
|
|
56
|
-
}
|
|
57
|
-
// Default for the telemetry settings.
|
|
58
|
-
const telemetryEnabled = config.telemetry?.enabled ?? false;
|
|
59
|
-
const telemetrySignals = telemetryEnabled
|
|
60
|
-
? {
|
|
61
|
-
http: config.telemetry?.signals?.http ?? "recommended",
|
|
62
|
-
gen_ai: config.telemetry?.signals?.gen_ai ?? "full",
|
|
63
|
-
hebo: config.telemetry?.signals?.hebo ?? "off",
|
|
64
|
-
}
|
|
65
|
-
: {
|
|
66
|
-
http: "off",
|
|
67
|
-
gen_ai: "off",
|
|
68
|
-
hebo: "off",
|
|
69
|
-
};
|
|
70
|
-
installAiSdkWarningLogger(telemetrySignals.gen_ai);
|
|
71
|
-
// Default timeouts
|
|
72
|
-
let normal;
|
|
73
|
-
let flex;
|
|
74
|
-
const t = config.timeouts;
|
|
75
|
-
if (t === null) {
|
|
76
|
-
normal = flex = undefined;
|
|
77
|
-
}
|
|
78
|
-
else if (typeof t === "number") {
|
|
79
|
-
normal = t;
|
|
80
|
-
flex = t * 3;
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
if (t?.normal === null)
|
|
84
|
-
normal = undefined;
|
|
85
|
-
else if (t?.normal === undefined)
|
|
86
|
-
normal = DEFAULT_CHAT_TIMEOUT_MS;
|
|
87
|
-
else
|
|
88
|
-
normal = t.normal;
|
|
89
|
-
if (t?.flex === null)
|
|
90
|
-
flex = undefined;
|
|
91
|
-
else if (t?.flex === undefined)
|
|
92
|
-
flex = normal === undefined ? undefined : normal * 3;
|
|
93
|
-
else
|
|
94
|
-
flex = t.flex;
|
|
95
|
-
}
|
|
96
|
-
const parsedTimeouts = { normal, flex };
|
|
97
|
-
// Return parsed config.
|
|
98
|
-
return {
|
|
99
|
-
...config,
|
|
100
|
-
timeouts: parsedTimeouts,
|
|
101
|
-
telemetry: {
|
|
102
|
-
...config.telemetry,
|
|
103
|
-
enabled: telemetryEnabled,
|
|
104
|
-
signals: telemetrySignals,
|
|
105
|
-
},
|
|
106
|
-
providers: parsedProviders,
|
|
107
|
-
models: parsedModels,
|
|
108
|
-
storage,
|
|
109
|
-
[kParsed]: true,
|
|
110
|
-
};
|
|
111
|
-
};
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { SharedV3ProviderMetadata } from "@ai-sdk/provider";
|
|
2
|
-
import type { GenerateTextResult, StreamTextResult, FinishReason, 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
|
-
import { type TextCallOptions, type ToolChoiceOptions } from "../shared/converters";
|
|
7
|
-
export declare function convertToTextCallOptions(params: ChatCompletionsInputs): TextCallOptions;
|
|
8
|
-
export declare function convertToModelMessages(messages: ChatCompletionsMessage[]): ModelMessage[];
|
|
9
|
-
export declare function fromChatCompletionsUserMessage(message: ChatCompletionsUserMessage): UserModelMessage;
|
|
10
|
-
export declare function fromChatCompletionsAssistantMessage(message: ChatCompletionsAssistantMessage): AssistantModelMessage;
|
|
11
|
-
export declare function fromChatCompletionsToolResultMessage(message: ChatCompletionsAssistantMessage, toolById: Map<string, ChatCompletionsToolMessage>): ToolModelMessage | undefined;
|
|
12
|
-
export declare function fromChatCompletionsContent(content: ChatCompletionsContentPart[]): UserContent;
|
|
13
|
-
export declare const convertToToolSet: (tools: ChatCompletionsTool[] | undefined) => ToolSet | undefined;
|
|
14
|
-
export declare const convertToToolChoiceOptions: (toolChoice: ChatCompletionsToolChoice | undefined) => ToolChoiceOptions;
|
|
15
|
-
export declare function toChatCompletions(result: GenerateTextResult<ToolSet, Output.Output>, model: string): ChatCompletions;
|
|
16
|
-
export declare function toChatCompletionsResponse(result: GenerateTextResult<ToolSet, Output.Output>, model: string, responseInit?: ResponseInit): Response;
|
|
17
|
-
export declare function toChatCompletionsStream(result: StreamTextResult<ToolSet, Output.Output>, model: string): ChatCompletionsStream;
|
|
18
|
-
export declare function toChatCompletionsStreamResponse(result: StreamTextResult<ToolSet, Output.Output>, model: string, responseInit?: ResponseInit): Response;
|
|
19
|
-
export declare class ChatCompletionsTransformStream extends TransformStream<TextStreamPart<ToolSet>, SseFrame<ChatCompletionsChunk> | SseErrorFrame> {
|
|
20
|
-
constructor(model: string);
|
|
21
|
-
}
|
|
22
|
-
export declare const toChatCompletionsAssistantMessage: (result: GenerateTextResult<ToolSet, Output.Output>) => ChatCompletionsAssistantMessage;
|
|
23
|
-
export declare function toReasoningDetail(reasoning: ReasoningOutput, id: string, index: number): ChatCompletionsReasoningDetail;
|
|
24
|
-
export declare function toChatCompletionsUsage(usage: LanguageModelUsage): ChatCompletionsUsage;
|
|
25
|
-
export declare function toChatCompletionsToolCall(id: string, name: string, args: unknown, providerMetadata?: SharedV3ProviderMetadata): ChatCompletionsToolCall;
|
|
26
|
-
export declare const toChatCompletionsFinishReason: (finishReason: FinishReason) => ChatCompletionsFinishReason;
|