@careob/llm-gateway 1.0.1 → 1.1.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.
- package/README.md +41 -5
- package/dist/gateway.d.ts +3 -7
- package/dist/gateway.d.ts.map +1 -1
- package/dist/gateway.js +242 -64
- package/dist/gateway.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/key-pool.d.ts +2 -1
- package/dist/key-pool.d.ts.map +1 -1
- package/dist/key-pool.js +7 -2
- package/dist/key-pool.js.map +1 -1
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +6 -4
- package/dist/middleware.js.map +1 -1
- package/dist/registry.d.ts +21 -2
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +200 -9
- package/dist/registry.js.map +1 -1
- package/dist/types.d.ts +18 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +27 -8
package/README.md
CHANGED
|
@@ -4,12 +4,15 @@ Lightweight LLM gateway for Node.js with multi-key rotation, rate-limit handling
|
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
- **
|
|
7
|
+
- **12+ providers** — OpenAI, Anthropic, Gemini, OpenRouter, DeepSeek, Groq, Mistral, Together, Qwen, Zhipu, Moonshot, Yi
|
|
8
8
|
- **Key rotation** — round-robin across multiple API keys per provider
|
|
9
|
-
- **Rate-limit handling** — automatic cooldown
|
|
10
|
-
- **
|
|
9
|
+
- **Rate-limit handling** — automatic cooldown, exponential backoff with jitter on 429s
|
|
10
|
+
- **Retry classification** — 400s fail fast, 401/403 quarantine keys, 429/5xx retry with backoff
|
|
11
|
+
- **Provider failover** — capability-aware fallback to alternate providers
|
|
12
|
+
- **Safe errors** — API keys and raw provider bodies are never exposed in error messages
|
|
13
|
+
- **AbortSignal** — cancel requests with a caller-provided `AbortSignal`
|
|
11
14
|
- **Spend tracking** — per-request cost estimation and usage logging
|
|
12
|
-
- **Streaming** — SSE streaming
|
|
15
|
+
- **Streaming** — SSE streaming with stream-idle timeout detection
|
|
13
16
|
- **Express middleware** — drop-in proxy for Express apps
|
|
14
17
|
- **Auto-discovery** — detects API keys from environment variables
|
|
15
18
|
- **Zero dependencies** — only uses `express` as an optional peer dependency
|
|
@@ -75,6 +78,27 @@ for await (const chunk of gateway.chatStream({
|
|
|
75
78
|
}
|
|
76
79
|
```
|
|
77
80
|
|
|
81
|
+
## OpenRouter
|
|
82
|
+
|
|
83
|
+
Access 200+ models through a single API key via [OpenRouter](https://openrouter.ai):
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
const gateway = new LLMGateway({
|
|
87
|
+
keys: ['sk-or-v1-your-openrouter-key'],
|
|
88
|
+
defaultModel: 'openai/gpt-4o',
|
|
89
|
+
openRouterReferer: 'https://your-app.com',
|
|
90
|
+
openRouterTitle: 'Your App Name',
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
// Use namespaced model identifiers
|
|
94
|
+
const response = await gateway.chat({
|
|
95
|
+
model: 'anthropic/claude-sonnet-4',
|
|
96
|
+
messages: [{ role: 'user', content: 'Hello!' }],
|
|
97
|
+
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
OpenRouter keys (`sk-or-*`) are auto-detected. Models use namespaced identifiers like `openai/gpt-4o`, `anthropic/claude-sonnet-4`, `google/gemini-2.5-flash`, etc.
|
|
101
|
+
|
|
78
102
|
## Express Proxy
|
|
79
103
|
|
|
80
104
|
Mount the gateway as an API endpoint in your Express app:
|
|
@@ -122,9 +146,12 @@ const gateway = new LLMGateway({
|
|
|
122
146
|
| `defaultModel` | — | Model to use when not specified in request |
|
|
123
147
|
| `maxRetries` | `3` | Retries across keys before failing |
|
|
124
148
|
| `cooldownMs` | `60000` | Cooldown duration for rate-limited keys (ms) |
|
|
125
|
-
| `timeoutMs` | `30000` |
|
|
149
|
+
| `timeoutMs` | `30000` | Connection timeout (ms) |
|
|
150
|
+
| `streamTimeoutMs` | `15000` | Stream idle timeout — no data received (ms) |
|
|
126
151
|
| `onUsage` | — | Callback for usage/spend logging |
|
|
127
152
|
| `onAllKeysExhausted` | — | Callback when all keys for a provider are exhausted |
|
|
153
|
+
| `openRouterReferer` | — | Your site URL for OpenRouter rankings (sent as `HTTP-Referer`) |
|
|
154
|
+
| `openRouterTitle` | — | Your app name for OpenRouter rankings (sent as `X-Title`) |
|
|
128
155
|
|
|
129
156
|
### KeyInput
|
|
130
157
|
|
|
@@ -145,6 +172,7 @@ const gateway = new LLMGateway({
|
|
|
145
172
|
| OpenAI | openai | gpt-4o, gpt-4o-mini, o1, o3-mini, o4-mini, ... |
|
|
146
173
|
| Anthropic | anthropic | claude-opus-4, claude-sonnet-4, claude-haiku-3.5 |
|
|
147
174
|
| Google Gemini | gemini | gemini-2.5-pro, gemini-2.5-flash, ... |
|
|
175
|
+
| OpenRouter | openai | openai/gpt-4o, anthropic/claude-sonnet-4, google/gemini-2.5-flash, ... |
|
|
148
176
|
| DeepSeek | openai | deepseek-chat, deepseek-coder, deepseek-reasoner |
|
|
149
177
|
| Groq | openai | llama-3.3-70b, mixtral-8x7b, ... |
|
|
150
178
|
| Mistral | openai | mistral-large, mistral-small, codestral |
|
|
@@ -161,6 +189,14 @@ const stats = gateway.getStats();
|
|
|
161
189
|
// [{ provider: 'openai', label: 'prod-1', healthy: true, requestsThisMinute: 12, ... }]
|
|
162
190
|
```
|
|
163
191
|
|
|
192
|
+
## Development
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
npm test # run tests
|
|
196
|
+
npm run test:coverage # run tests with coverage report
|
|
197
|
+
npm run ci # typecheck + build + test
|
|
198
|
+
```
|
|
199
|
+
|
|
164
200
|
## License
|
|
165
201
|
|
|
166
202
|
MIT
|
package/dist/gateway.d.ts
CHANGED
|
@@ -3,15 +3,11 @@ export declare class LLMGateway {
|
|
|
3
3
|
private pool;
|
|
4
4
|
private config;
|
|
5
5
|
private providersByKey;
|
|
6
|
+
private openRouterDef;
|
|
6
7
|
constructor(config: GatewayConfig);
|
|
7
|
-
/**
|
|
8
|
-
* Auto-discover keys from environment variables.
|
|
9
|
-
* Scans for OPENAI_API_KEY, ANTHROPIC_KEY, GEMINI_API_KEY_1, DEEPSEEK_KEY, etc.
|
|
10
|
-
*/
|
|
11
8
|
static fromEnv(overrides?: Omit<GatewayConfig, 'keys'>, env?: Record<string, string | undefined>): LLMGateway;
|
|
12
9
|
chat(request: ChatRequest): Promise<ChatResponse>;
|
|
13
10
|
chatStream(request: ChatRequest): AsyncGenerator<StreamChunk, void, unknown>;
|
|
14
|
-
/** Get health/stats for all registered keys */
|
|
15
11
|
getStats(): {
|
|
16
12
|
provider: string;
|
|
17
13
|
label: string;
|
|
@@ -21,10 +17,10 @@ export declare class LLMGateway {
|
|
|
21
17
|
totalErrors: number;
|
|
22
18
|
cooldownUntil: number;
|
|
23
19
|
}[];
|
|
24
|
-
/** List all registered providers */
|
|
25
20
|
getProviders(): string[];
|
|
26
21
|
private registerKeys;
|
|
27
|
-
private
|
|
22
|
+
private getProviderDef;
|
|
23
|
+
private resolveTargets;
|
|
28
24
|
private logUsage;
|
|
29
25
|
}
|
|
30
26
|
export type GatewayErrorCode = 'CONFIG_ERROR' | 'PROVIDER_ERROR' | 'NETWORK_ERROR' | 'TIMEOUT' | 'ALL_EXHAUSTED' | 'UNSUPPORTED';
|
package/dist/gateway.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,aAAa,EAEb,WAAW,EACX,YAAY,EACZ,WAAW,EAIZ,MAAM,YAAY,CAAC;AAEpB,qBAAa,UAAU;IACrB,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,MAAM,CAAyG;IACvH,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,aAAa,CAA4B;gBAErC,MAAM,EAAE,aAAa;IAYjC,MAAM,CAAC,OAAO,CACZ,SAAS,GAAE,IAAI,CAAC,aAAa,EAAE,MAAM,CAAM,EAC3C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACvC,UAAU;IAWP,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAkGhD,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC;IAuInF,QAAQ;;;;;;;;;IAIR,YAAY;IAMZ,OAAO,CAAC,YAAY;IAqCpB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,cAAc;IA4CtB,OAAO,CAAC,QAAQ;CAoCjB;AA6FD,MAAM,MAAM,gBAAgB,GACxB,cAAc,GACd,gBAAgB,GAChB,eAAe,GACf,SAAS,GACT,eAAe,GACf,aAAa,CAAC;AAElB,qBAAa,YAAa,SAAQ,KAAK;IAG5B,IAAI,EAAE,gBAAgB;IACtB,UAAU,CAAC,EAAE,MAAM;gBAF1B,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,gBAAgB,EACtB,UAAU,CAAC,EAAE,MAAM,YAAA;CAK7B"}
|
package/dist/gateway.js
CHANGED
|
@@ -1,23 +1,21 @@
|
|
|
1
1
|
import { KeyPool } from './key-pool.js';
|
|
2
|
-
import { PROVIDERS, detectProvider, discoverKeysFromEnv, findProviderForModel, buildRequest, parseResponse,
|
|
2
|
+
import { PROVIDERS, detectProvider, discoverKeysFromEnv, findProviderForModel, buildRequest, parseResponse, createStreamParser, estimateCost, checkCapabilities, inferRequiredCapabilities, } from './registry.js';
|
|
3
3
|
export class LLMGateway {
|
|
4
4
|
pool;
|
|
5
5
|
config;
|
|
6
6
|
providersByKey = new Map();
|
|
7
|
+
openRouterDef = null;
|
|
7
8
|
constructor(config) {
|
|
8
9
|
this.config = {
|
|
9
10
|
...config,
|
|
10
11
|
maxRetries: config.maxRetries ?? 3,
|
|
11
12
|
cooldownMs: config.cooldownMs ?? 60_000,
|
|
12
13
|
timeoutMs: config.timeoutMs ?? 30_000,
|
|
14
|
+
streamTimeoutMs: config.streamTimeoutMs ?? 15_000,
|
|
13
15
|
};
|
|
14
16
|
this.pool = new KeyPool(this.config.cooldownMs);
|
|
15
17
|
this.registerKeys(config.keys);
|
|
16
18
|
}
|
|
17
|
-
/**
|
|
18
|
-
* Auto-discover keys from environment variables.
|
|
19
|
-
* Scans for OPENAI_API_KEY, ANTHROPIC_KEY, GEMINI_API_KEY_1, DEEPSEEK_KEY, etc.
|
|
20
|
-
*/
|
|
21
19
|
static fromEnv(overrides = {}, env) {
|
|
22
20
|
const discovered = discoverKeysFromEnv(env);
|
|
23
21
|
if (discovered.length === 0) {
|
|
@@ -32,11 +30,12 @@ export class LLMGateway {
|
|
|
32
30
|
const model = request.model ?? this.config.defaultModel;
|
|
33
31
|
if (!model)
|
|
34
32
|
throw new GatewayError('No model specified and no defaultModel configured', 'CONFIG_ERROR');
|
|
35
|
-
const
|
|
36
|
-
const providers = this.resolveProviders(fullRequest);
|
|
33
|
+
const targets = this.resolveTargets({ ...request, model });
|
|
37
34
|
let lastError = null;
|
|
38
35
|
let attempt = 0;
|
|
39
|
-
for (const
|
|
36
|
+
for (const target of targets) {
|
|
37
|
+
const providerDef = target.provider;
|
|
38
|
+
const targetRequest = { ...request, model: target.model, stream: false };
|
|
40
39
|
for (let retry = 0; retry < this.config.maxRetries; retry++) {
|
|
41
40
|
const key = this.pool.getNextKey(providerDef.id);
|
|
42
41
|
if (!key)
|
|
@@ -45,22 +44,35 @@ export class LLMGateway {
|
|
|
45
44
|
const requestId = `req_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
46
45
|
const start = Date.now();
|
|
47
46
|
try {
|
|
48
|
-
const { url, init } = buildRequest(providerDef,
|
|
47
|
+
const { url, init } = buildRequest(providerDef, targetRequest, key.key);
|
|
49
48
|
const controller = new AbortController();
|
|
50
49
|
const timeout = setTimeout(() => controller.abort(), this.config.timeoutMs);
|
|
51
|
-
init.signal = controller.signal;
|
|
50
|
+
init.signal = linkSignals(controller, request.signal);
|
|
52
51
|
const res = await fetch(url, init);
|
|
53
52
|
clearTimeout(timeout);
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
this.
|
|
53
|
+
const classification = classifyStatus(res.status);
|
|
54
|
+
if (classification === 'rate_limited') {
|
|
55
|
+
this.pool.recordRateLimit(key, parseRetryAfterMs(res));
|
|
56
|
+
this.logUsage(requestId, providerDef.id, key, target.model, start, 'rate_limited', undefined, 'Rate limited');
|
|
57
|
+
await backoff(retry);
|
|
57
58
|
continue;
|
|
58
59
|
}
|
|
59
|
-
if (
|
|
60
|
-
|
|
60
|
+
if (classification === 'auth_error') {
|
|
61
|
+
this.pool.quarantineKey(key);
|
|
62
|
+
lastError = new GatewayError(safeErrorMessage(providerDef, res.status), 'PROVIDER_ERROR', res.status);
|
|
63
|
+
this.logUsage(requestId, providerDef.id, key, target.model, start, 'error', undefined, `HTTP ${res.status}`);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
if (classification === 'bad_request') {
|
|
67
|
+
const errorText = await res.text().catch(() => '');
|
|
68
|
+
this.pool.recordError(key);
|
|
69
|
+
throw new GatewayError(safeErrorMessage(providerDef, res.status, errorText), 'PROVIDER_ERROR', res.status);
|
|
70
|
+
}
|
|
71
|
+
if (classification === 'server_error') {
|
|
61
72
|
this.pool.recordError(key);
|
|
62
|
-
lastError = new GatewayError(
|
|
63
|
-
this.logUsage(requestId, providerDef.id, key, model, start, 'error', undefined,
|
|
73
|
+
lastError = new GatewayError(safeErrorMessage(providerDef, res.status), 'PROVIDER_ERROR', res.status);
|
|
74
|
+
this.logUsage(requestId, providerDef.id, key, target.model, start, 'error', undefined, `HTTP ${res.status}`);
|
|
75
|
+
await backoff(retry);
|
|
64
76
|
continue;
|
|
65
77
|
}
|
|
66
78
|
const data = await res.json();
|
|
@@ -72,19 +84,29 @@ export class LLMGateway {
|
|
|
72
84
|
attempt,
|
|
73
85
|
};
|
|
74
86
|
this.pool.recordSuccess(key, parsed.usage.total_tokens);
|
|
75
|
-
this.logUsage(requestId, providerDef.id, key, model, start, 'success', parsed.usage, undefined, request.metadata);
|
|
87
|
+
this.logUsage(requestId, providerDef.id, key, target.model, start, 'success', parsed.usage, undefined, request.metadata);
|
|
76
88
|
return parsed;
|
|
77
89
|
}
|
|
78
90
|
catch (err) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
lastError =
|
|
91
|
+
if (err instanceof GatewayError) {
|
|
92
|
+
if (err.code === 'PROVIDER_ERROR' && !isRetryableCode(err.statusCode))
|
|
93
|
+
throw err;
|
|
94
|
+
lastError = err;
|
|
83
95
|
}
|
|
84
96
|
else {
|
|
85
|
-
|
|
97
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
98
|
+
this.pool.recordError(key);
|
|
99
|
+
if (request.signal?.aborted) {
|
|
100
|
+
throw new GatewayError('Request cancelled', 'TIMEOUT');
|
|
101
|
+
}
|
|
102
|
+
if (msg.includes('abort')) {
|
|
103
|
+
lastError = new GatewayError(`${providerDef.label}: timeout`, 'TIMEOUT');
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
lastError = new GatewayError(`${providerDef.label}: network error`, 'NETWORK_ERROR');
|
|
107
|
+
}
|
|
86
108
|
}
|
|
87
|
-
this.logUsage(requestId, providerDef.id, key, model, start, 'error', undefined,
|
|
109
|
+
this.logUsage(requestId, providerDef.id, key, target.model, start, 'error', undefined, lastError.message);
|
|
88
110
|
}
|
|
89
111
|
}
|
|
90
112
|
this.config.onAllKeysExhausted?.(providerDef.id);
|
|
@@ -95,83 +117,123 @@ export class LLMGateway {
|
|
|
95
117
|
const model = request.model ?? this.config.defaultModel;
|
|
96
118
|
if (!model)
|
|
97
119
|
throw new GatewayError('No model specified and no defaultModel configured', 'CONFIG_ERROR');
|
|
98
|
-
const
|
|
99
|
-
const providers = this.resolveProviders(fullRequest);
|
|
120
|
+
const targets = this.resolveTargets({ ...request, model });
|
|
100
121
|
let lastError = null;
|
|
101
|
-
for (const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
122
|
+
for (const target of targets) {
|
|
123
|
+
const providerDef = target.provider;
|
|
124
|
+
const targetRequest = { ...request, model: target.model, stream: true };
|
|
105
125
|
for (let retry = 0; retry < this.config.maxRetries; retry++) {
|
|
106
126
|
const key = this.pool.getNextKey(providerDef.id);
|
|
107
127
|
if (!key)
|
|
108
128
|
break;
|
|
109
129
|
const requestId = `req_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
110
130
|
const start = Date.now();
|
|
131
|
+
let yieldedAny = false;
|
|
111
132
|
try {
|
|
112
|
-
const { url, init } = buildRequest(providerDef,
|
|
133
|
+
const { url, init } = buildRequest(providerDef, targetRequest, key.key);
|
|
113
134
|
const controller = new AbortController();
|
|
114
|
-
const timeout = setTimeout(() => controller.abort(), this.config.timeoutMs
|
|
115
|
-
init.signal = controller.signal;
|
|
135
|
+
const timeout = setTimeout(() => controller.abort(), this.config.timeoutMs);
|
|
136
|
+
init.signal = linkSignals(controller, request.signal);
|
|
116
137
|
const res = await fetch(url, init);
|
|
117
138
|
clearTimeout(timeout);
|
|
118
|
-
|
|
119
|
-
|
|
139
|
+
const classification = classifyStatus(res.status);
|
|
140
|
+
if (classification === 'rate_limited') {
|
|
141
|
+
this.pool.recordRateLimit(key, parseRetryAfterMs(res));
|
|
142
|
+
this.logUsage(requestId, providerDef.id, key, target.model, start, 'rate_limited', undefined, 'Rate limited');
|
|
143
|
+
await backoff(retry);
|
|
120
144
|
continue;
|
|
121
145
|
}
|
|
122
|
-
if (
|
|
146
|
+
if (classification === 'auth_error') {
|
|
147
|
+
this.pool.quarantineKey(key);
|
|
148
|
+
lastError = new GatewayError(safeErrorMessage(providerDef, res.status), 'PROVIDER_ERROR', res.status);
|
|
149
|
+
this.logUsage(requestId, providerDef.id, key, target.model, start, 'error', undefined, `HTTP ${res.status}`);
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
if (classification === 'bad_request') {
|
|
153
|
+
this.pool.recordError(key);
|
|
154
|
+
throw new GatewayError(safeErrorMessage(providerDef, res.status), 'PROVIDER_ERROR', res.status);
|
|
155
|
+
}
|
|
156
|
+
if (classification === 'server_error') {
|
|
123
157
|
this.pool.recordError(key);
|
|
124
|
-
lastError = new GatewayError(
|
|
158
|
+
lastError = new GatewayError(safeErrorMessage(providerDef, res.status), 'PROVIDER_ERROR', res.status);
|
|
159
|
+
this.logUsage(requestId, providerDef.id, key, target.model, start, 'error', undefined, `HTTP ${res.status}`);
|
|
160
|
+
await backoff(retry);
|
|
125
161
|
continue;
|
|
126
162
|
}
|
|
127
163
|
if (!res.body)
|
|
128
164
|
throw new GatewayError('No response body for stream', 'PROVIDER_ERROR');
|
|
165
|
+
const parseLine = createStreamParser(providerDef);
|
|
129
166
|
const reader = res.body.getReader();
|
|
130
167
|
const decoder = new TextDecoder();
|
|
131
168
|
let buffer = '';
|
|
132
|
-
let
|
|
169
|
+
let usage = { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 };
|
|
133
170
|
try {
|
|
134
171
|
while (true) {
|
|
135
|
-
const
|
|
172
|
+
const readPromise = reader.read();
|
|
173
|
+
const idleTimeout = this.config.streamTimeoutMs;
|
|
174
|
+
const { done, value } = await (idleTimeout > 0
|
|
175
|
+
? Promise.race([
|
|
176
|
+
readPromise,
|
|
177
|
+
new Promise((_, reject) => setTimeout(() => reject(new GatewayError(`${providerDef.label}: stream idle timeout`, 'TIMEOUT')), idleTimeout)),
|
|
178
|
+
])
|
|
179
|
+
: readPromise);
|
|
136
180
|
if (done)
|
|
137
181
|
break;
|
|
138
182
|
buffer += decoder.decode(value, { stream: true });
|
|
139
183
|
const lines = buffer.split('\n');
|
|
140
184
|
buffer = lines.pop() ?? '';
|
|
141
185
|
for (const line of lines) {
|
|
142
|
-
const chunk =
|
|
186
|
+
const chunk = parseLine(line);
|
|
143
187
|
if (chunk) {
|
|
144
188
|
if (chunk.usage)
|
|
145
|
-
|
|
189
|
+
usage = chunk.usage;
|
|
190
|
+
yieldedAny = true;
|
|
146
191
|
yield chunk;
|
|
147
192
|
}
|
|
148
193
|
}
|
|
149
194
|
}
|
|
195
|
+
if (buffer.trim()) {
|
|
196
|
+
const chunk = parseLine(buffer);
|
|
197
|
+
if (chunk) {
|
|
198
|
+
if (chunk.usage)
|
|
199
|
+
usage = chunk.usage;
|
|
200
|
+
yieldedAny = true;
|
|
201
|
+
yield chunk;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
150
204
|
}
|
|
151
205
|
finally {
|
|
152
206
|
reader.releaseLock();
|
|
153
207
|
}
|
|
154
|
-
this.pool.recordSuccess(key,
|
|
155
|
-
this.logUsage(requestId, providerDef.id, key, model, start, 'success',
|
|
156
|
-
prompt_tokens: 0, completion_tokens: 0, total_tokens: totalTokens,
|
|
157
|
-
}, undefined, request.metadata);
|
|
208
|
+
this.pool.recordSuccess(key, usage.total_tokens);
|
|
209
|
+
this.logUsage(requestId, providerDef.id, key, target.model, start, 'success', usage, undefined, request.metadata);
|
|
158
210
|
return;
|
|
159
211
|
}
|
|
160
212
|
catch (err) {
|
|
161
|
-
if (err instanceof GatewayError)
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
213
|
+
if (err instanceof GatewayError) {
|
|
214
|
+
if (yieldedAny)
|
|
215
|
+
throw err;
|
|
216
|
+
lastError = err;
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
this.pool.recordError(key);
|
|
220
|
+
if (request.signal?.aborted) {
|
|
221
|
+
throw new GatewayError('Request cancelled', 'TIMEOUT');
|
|
222
|
+
}
|
|
223
|
+
lastError = new GatewayError(`${providerDef.label}: ${err instanceof Error && err.message.includes('abort') ? 'timeout' : 'network error'}`, err instanceof Error && err.message.includes('abort') ? 'TIMEOUT' : 'NETWORK_ERROR');
|
|
224
|
+
if (yieldedAny)
|
|
225
|
+
throw lastError;
|
|
226
|
+
}
|
|
227
|
+
this.logUsage(requestId, providerDef.id, key, target.model, start, 'error', undefined, lastError.message);
|
|
165
228
|
}
|
|
166
229
|
}
|
|
230
|
+
this.config.onAllKeysExhausted?.(providerDef.id);
|
|
167
231
|
}
|
|
168
232
|
throw lastError ?? new GatewayError('All providers exhausted for streaming', 'ALL_EXHAUSTED');
|
|
169
233
|
}
|
|
170
|
-
/** Get health/stats for all registered keys */
|
|
171
234
|
getStats() {
|
|
172
235
|
return this.pool.getStats();
|
|
173
236
|
}
|
|
174
|
-
/** List all registered providers */
|
|
175
237
|
getProviders() {
|
|
176
238
|
return this.pool.getProviders();
|
|
177
239
|
}
|
|
@@ -193,27 +255,59 @@ export class LLMGateway {
|
|
|
193
255
|
const label = normalized.label ?? `${providerId}-${autoIndex}`;
|
|
194
256
|
const rpm = normalized.rpm ?? providerDef.defaultRpm;
|
|
195
257
|
const tpm = normalized.tpm ?? 0;
|
|
258
|
+
if (providerId === 'openrouter' && !this.openRouterDef) {
|
|
259
|
+
const extra = { ...(providerDef.extraHeaders ?? {}) };
|
|
260
|
+
if (this.config.openRouterReferer)
|
|
261
|
+
extra['HTTP-Referer'] = this.config.openRouterReferer;
|
|
262
|
+
if (this.config.openRouterTitle)
|
|
263
|
+
extra['X-Title'] = this.config.openRouterTitle;
|
|
264
|
+
this.openRouterDef = { ...providerDef, extraHeaders: extra };
|
|
265
|
+
}
|
|
196
266
|
this.pool.addKey(normalized.key, providerId, label, rpm, tpm);
|
|
197
|
-
this.providersByKey.set(normalized.key, providerDef);
|
|
267
|
+
this.providersByKey.set(normalized.key, providerId === 'openrouter' && this.openRouterDef ? this.openRouterDef : providerDef);
|
|
198
268
|
}
|
|
199
269
|
}
|
|
200
|
-
|
|
270
|
+
getProviderDef(id) {
|
|
271
|
+
if (id === 'openrouter' && this.openRouterDef)
|
|
272
|
+
return this.openRouterDef;
|
|
273
|
+
return PROVIDERS[id];
|
|
274
|
+
}
|
|
275
|
+
resolveTargets(request) {
|
|
276
|
+
const model = request.model;
|
|
277
|
+
const requiredCaps = inferRequiredCapabilities(request);
|
|
201
278
|
if (request.provider) {
|
|
202
|
-
const def =
|
|
279
|
+
const def = this.getProviderDef(request.provider);
|
|
203
280
|
if (!def)
|
|
204
281
|
throw new GatewayError(`Provider "${request.provider}" not found`, 'CONFIG_ERROR');
|
|
205
|
-
|
|
282
|
+
const missing = checkCapabilities(def, requiredCaps);
|
|
283
|
+
if (missing) {
|
|
284
|
+
throw new GatewayError(`Provider "${request.provider}" does not support "${missing}" required by this request`, 'UNSUPPORTED');
|
|
285
|
+
}
|
|
286
|
+
return [{ provider: def, model }];
|
|
206
287
|
}
|
|
207
|
-
const
|
|
208
|
-
const
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
288
|
+
const registered = new Set(this.pool.getProviders());
|
|
289
|
+
const modelChain = [model, ...(request.fallbackModels ?? this.config.fallbackModels?.[model] ?? [])];
|
|
290
|
+
const targets = [];
|
|
291
|
+
const seen = new Set();
|
|
292
|
+
for (const m of modelChain) {
|
|
293
|
+
const def = findProviderForModel(m);
|
|
294
|
+
if (def && registered.has(def.id) && !seen.has(`${def.id}:${m}`)) {
|
|
295
|
+
const resolved = this.getProviderDef(def.id) ?? def;
|
|
296
|
+
if (checkCapabilities(resolved, requiredCaps))
|
|
297
|
+
continue;
|
|
298
|
+
seen.add(`${def.id}:${m}`);
|
|
299
|
+
targets.push({ provider: resolved, model: m });
|
|
300
|
+
}
|
|
215
301
|
}
|
|
216
|
-
|
|
302
|
+
if (targets.length === 0) {
|
|
303
|
+
for (const id of registered) {
|
|
304
|
+
const def = this.getProviderDef(id);
|
|
305
|
+
if (def && !checkCapabilities(def, requiredCaps)) {
|
|
306
|
+
targets.push({ provider: def, model });
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return targets;
|
|
217
311
|
}
|
|
218
312
|
logUsage(requestId, provider, key, model, startMs, status, usage, error, metadata) {
|
|
219
313
|
if (!this.config.onUsage)
|
|
@@ -243,6 +337,90 @@ export class LLMGateway {
|
|
|
243
337
|
}
|
|
244
338
|
}
|
|
245
339
|
}
|
|
340
|
+
function classifyStatus(status) {
|
|
341
|
+
if (status >= 200 && status < 300)
|
|
342
|
+
return 'ok';
|
|
343
|
+
if (status === 401 || status === 403)
|
|
344
|
+
return 'auth_error';
|
|
345
|
+
if (status === 429 || status === 408)
|
|
346
|
+
return 'rate_limited';
|
|
347
|
+
if (status >= 400 && status < 500)
|
|
348
|
+
return 'bad_request';
|
|
349
|
+
return 'server_error';
|
|
350
|
+
}
|
|
351
|
+
function isRetryableCode(statusCode) {
|
|
352
|
+
if (!statusCode)
|
|
353
|
+
return false;
|
|
354
|
+
return statusCode === 408 || statusCode === 429 || statusCode >= 500;
|
|
355
|
+
}
|
|
356
|
+
// ── Safe Error Messages ──────────────────────────────────────
|
|
357
|
+
function safeErrorMessage(provider, status, rawBody) {
|
|
358
|
+
const base = `${provider.label} returned HTTP ${status}`;
|
|
359
|
+
if (!rawBody)
|
|
360
|
+
return base;
|
|
361
|
+
const safe = extractSafeDetail(rawBody);
|
|
362
|
+
return safe ? `${base}: ${safe}` : base;
|
|
363
|
+
}
|
|
364
|
+
function extractSafeDetail(raw) {
|
|
365
|
+
try {
|
|
366
|
+
const parsed = JSON.parse(raw);
|
|
367
|
+
const msg = parsed?.error?.message ?? parsed?.error?.msg ?? parsed?.message;
|
|
368
|
+
if (typeof msg === 'string')
|
|
369
|
+
return sanitizeMessage(msg);
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
// not JSON
|
|
373
|
+
}
|
|
374
|
+
return null;
|
|
375
|
+
}
|
|
376
|
+
function sanitizeMessage(msg) {
|
|
377
|
+
return msg
|
|
378
|
+
.replace(/sk-[a-zA-Z0-9_-]{8,}/g, 'sk-****')
|
|
379
|
+
.replace(/AIza[a-zA-Z0-9_-]{8,}/g, 'AIza****')
|
|
380
|
+
.replace(/gsk_[a-zA-Z0-9_-]{8,}/g, 'gsk_****')
|
|
381
|
+
.slice(0, 200);
|
|
382
|
+
}
|
|
383
|
+
// ── Backoff ──────────────────────────────────────────────────
|
|
384
|
+
function backoff(attempt) {
|
|
385
|
+
const base = Math.min(1000 * 2 ** attempt, 10_000);
|
|
386
|
+
const jitter = Math.random() * base * 0.5;
|
|
387
|
+
return new Promise((r) => setTimeout(r, base + jitter));
|
|
388
|
+
}
|
|
389
|
+
// ── AbortSignal Linking ──────────────────────────────────────
|
|
390
|
+
function linkSignals(controller, callerSignal) {
|
|
391
|
+
if (!callerSignal)
|
|
392
|
+
return controller.signal;
|
|
393
|
+
if (callerSignal.aborted) {
|
|
394
|
+
controller.abort();
|
|
395
|
+
return controller.signal;
|
|
396
|
+
}
|
|
397
|
+
const onAbort = () => controller.abort();
|
|
398
|
+
callerSignal.addEventListener('abort', onAbort, { once: true });
|
|
399
|
+
controller.signal.addEventListener('abort', () => {
|
|
400
|
+
callerSignal.removeEventListener('abort', onAbort);
|
|
401
|
+
}, { once: true });
|
|
402
|
+
return controller.signal;
|
|
403
|
+
}
|
|
404
|
+
// ── Retry-After Parsing ──────────────────────────────────────
|
|
405
|
+
function parseRetryAfterMs(res) {
|
|
406
|
+
const header = res.headers.get('retry-after');
|
|
407
|
+
if (!header)
|
|
408
|
+
return undefined;
|
|
409
|
+
const seconds = Number(header);
|
|
410
|
+
let ms;
|
|
411
|
+
if (Number.isFinite(seconds)) {
|
|
412
|
+
ms = seconds * 1000;
|
|
413
|
+
}
|
|
414
|
+
else {
|
|
415
|
+
const date = Date.parse(header);
|
|
416
|
+
if (Number.isNaN(date))
|
|
417
|
+
return undefined;
|
|
418
|
+
ms = date - Date.now();
|
|
419
|
+
}
|
|
420
|
+
if (ms <= 0)
|
|
421
|
+
return undefined;
|
|
422
|
+
return Math.min(ms, 5 * 60_000);
|
|
423
|
+
}
|
|
246
424
|
export class GatewayError extends Error {
|
|
247
425
|
code;
|
|
248
426
|
statusCode;
|
package/dist/gateway.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export type { GatewayErrorCode } from './gateway.js';
|
|
|
3
3
|
export { KeyPool } from './key-pool.js';
|
|
4
4
|
export { createExpressProxy } from './middleware.js';
|
|
5
5
|
export type { ProxyOptions } from './middleware.js';
|
|
6
|
-
export { PROVIDERS, detectProvider, discoverKeysFromEnv, findProviderForModel, estimateCost, } from './registry.js';
|
|
7
|
-
export type { ProviderDef, ApiFormat, AuthStyle } from './registry.js';
|
|
6
|
+
export { PROVIDERS, detectProvider, discoverKeysFromEnv, findProviderForModel, estimateCost, createStreamParser, checkCapabilities, inferRequiredCapabilities, } from './registry.js';
|
|
7
|
+
export type { ProviderDef, ProviderCapabilities, ApiFormat, AuthStyle, StreamChunkResult, RequiredCapability } from './registry.js';
|
|
8
8
|
export type { KeyInput, GatewayConfig, ChatMessage, ChatRequest, ChatResponse, StreamChunk, TokenUsage, UsageLog, KeyState, } from './types.js';
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|