@x12i/ai-gateway 9.6.9 → 9.7.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/dist/gateway-config.js +1 -1
- package/dist/gateway-provider-auto-register.js +1 -1
- package/dist/openrouter-routing.d.ts +8 -3
- package/dist/openrouter-routing.js +28 -7
- package/dist/types.d.ts +2 -2
- package/dist-cjs/gateway-config.cjs +1 -1
- package/dist-cjs/gateway-provider-auto-register.cjs +1 -1
- package/dist-cjs/openrouter-routing.cjs +28 -7
- package/dist-cjs/openrouter-routing.d.ts +8 -3
- package/dist-cjs/types.d.ts +2 -2
- package/package.json +4 -4
package/dist/gateway-config.js
CHANGED
|
@@ -204,7 +204,7 @@ export function initializeGatewayComponents(config) {
|
|
|
204
204
|
if (config.logging !== undefined)
|
|
205
205
|
routerConfig.logging = config.logging;
|
|
206
206
|
// OpenRouter: always pass apiKey when set (fallback for providers without direct keys).
|
|
207
|
-
//
|
|
207
|
+
// PREFER_OPENROUTER=false only disables *preferring* OpenRouter when direct provider keys exist.
|
|
208
208
|
const openRouterKey = resolveOpenRouterApiKey(config);
|
|
209
209
|
const preferOpenRouter = resolvePreferOpenRouter(config);
|
|
210
210
|
if (openRouterKey) {
|
|
@@ -146,7 +146,7 @@ export async function autoRegisterProviders(router, logger) {
|
|
|
146
146
|
optionalEnvVars: PROVIDER_CONFIGS
|
|
147
147
|
.filter(p => p.optional)
|
|
148
148
|
.map(p => p.envVar),
|
|
149
|
-
openRouter: 'Set OPENROUTER_API_KEY for OpenRouter (default route when set).
|
|
149
|
+
openRouter: 'Set OPENROUTER_API_KEY for OpenRouter (default route when set). PREFER_OPENROUTER=false prefers direct provider keys when present; OpenRouter is still used when a requested provider has no key.',
|
|
150
150
|
note: 'You can still manually register providers using gateway.register(provider)'
|
|
151
151
|
});
|
|
152
152
|
}
|
|
@@ -5,8 +5,13 @@
|
|
|
5
5
|
import type { GatewayConfig } from './types.js';
|
|
6
6
|
export declare function resolveOpenRouterApiKey(config?: GatewayConfig): string | undefined;
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
|
|
8
|
+
* Read operator preference from env: `PREFER_OPENROUTER` (current), then deprecated `USE_OPENROUTER`.
|
|
9
|
+
* Returns undefined when neither is set.
|
|
10
|
+
*/
|
|
11
|
+
export declare function readPreferOpenRouterFromEnv(): boolean | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* When true, pass `routeViaOpenRouter: true` into ai-tools resolveModel (prefer OpenRouter when a key exists).
|
|
14
|
+
* Default: true. `PREFER_OPENROUTER=false` (or deprecated `USE_OPENROUTER=false`) forces vendor-direct when keys exist;
|
|
15
|
+
* ai-tools still falls back to OpenRouter when the requested provider has no direct key.
|
|
11
16
|
*/
|
|
12
17
|
export declare function resolvePreferOpenRouter(config?: GatewayConfig): boolean;
|
|
@@ -11,17 +11,38 @@ export function resolveOpenRouterApiKey(config = {}) {
|
|
|
11
11
|
return env || undefined;
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
|
|
14
|
+
* Read operator preference from env: `PREFER_OPENROUTER` (current), then deprecated `USE_OPENROUTER`.
|
|
15
|
+
* Returns undefined when neither is set.
|
|
16
|
+
*/
|
|
17
|
+
export function readPreferOpenRouterFromEnv() {
|
|
18
|
+
const prefer = process.env.PREFER_OPENROUTER?.trim();
|
|
19
|
+
if (prefer === 'false' || prefer === '0')
|
|
20
|
+
return false;
|
|
21
|
+
if (prefer === 'true' || prefer === '1')
|
|
22
|
+
return true;
|
|
23
|
+
const legacy = process.env.USE_OPENROUTER?.trim();
|
|
24
|
+
if (legacy === 'false' || legacy === '0')
|
|
25
|
+
return false;
|
|
26
|
+
if (legacy === 'true' || legacy === '1')
|
|
27
|
+
return true;
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* When true, pass `routeViaOpenRouter: true` into ai-tools resolveModel (prefer OpenRouter when a key exists).
|
|
32
|
+
* Default: true. `PREFER_OPENROUTER=false` (or deprecated `USE_OPENROUTER=false`) forces vendor-direct when keys exist;
|
|
33
|
+
* ai-tools still falls back to OpenRouter when the requested provider has no direct key.
|
|
17
34
|
*/
|
|
18
35
|
export function resolvePreferOpenRouter(config = {}) {
|
|
36
|
+
if (config.openRouter?.prefer === true)
|
|
37
|
+
return true;
|
|
38
|
+
if (config.openRouter?.prefer === false)
|
|
39
|
+
return false;
|
|
19
40
|
if (config.openRouter?.enabled === true)
|
|
20
41
|
return true;
|
|
21
42
|
if (config.openRouter?.enabled === false)
|
|
22
43
|
return false;
|
|
23
|
-
const
|
|
24
|
-
if (
|
|
25
|
-
return
|
|
26
|
-
return
|
|
44
|
+
const fromEnv = readPreferOpenRouterFromEnv();
|
|
45
|
+
if (fromEnv !== undefined)
|
|
46
|
+
return fromEnv;
|
|
47
|
+
return true;
|
|
27
48
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -383,8 +383,8 @@ export interface GatewayConfig extends Omit<RouterConfig, 'defaultEngine' | 'log
|
|
|
383
383
|
};
|
|
384
384
|
/**
|
|
385
385
|
* OpenRouter preference (not a hard off-switch when {@link openrouter}.apiKey or OPENROUTER_API_KEY is set).
|
|
386
|
-
* - `enabled: true` or omitted
|
|
387
|
-
* - `enabled: false` or
|
|
386
|
+
* - `prefer: true` / `enabled: true` or omitted env (default true): prefer OpenRouter when OPENROUTER_API_KEY is present.
|
|
387
|
+
* - `prefer: false` / `enabled: false` or PREFER_OPENROUTER=false: use direct providers when their API keys exist; OpenRouter still used as fallback when a requested provider has no key.
|
|
388
388
|
*/
|
|
389
389
|
openRouter?: {
|
|
390
390
|
enabled?: boolean;
|
|
@@ -204,7 +204,7 @@ export function initializeGatewayComponents(config) {
|
|
|
204
204
|
if (config.logging !== undefined)
|
|
205
205
|
routerConfig.logging = config.logging;
|
|
206
206
|
// OpenRouter: always pass apiKey when set (fallback for providers without direct keys).
|
|
207
|
-
//
|
|
207
|
+
// PREFER_OPENROUTER=false only disables *preferring* OpenRouter when direct provider keys exist.
|
|
208
208
|
const openRouterKey = resolveOpenRouterApiKey(config);
|
|
209
209
|
const preferOpenRouter = resolvePreferOpenRouter(config);
|
|
210
210
|
if (openRouterKey) {
|
|
@@ -146,7 +146,7 @@ export async function autoRegisterProviders(router, logger) {
|
|
|
146
146
|
optionalEnvVars: PROVIDER_CONFIGS
|
|
147
147
|
.filter(p => p.optional)
|
|
148
148
|
.map(p => p.envVar),
|
|
149
|
-
openRouter: 'Set OPENROUTER_API_KEY for OpenRouter (default route when set).
|
|
149
|
+
openRouter: 'Set OPENROUTER_API_KEY for OpenRouter (default route when set). PREFER_OPENROUTER=false prefers direct provider keys when present; OpenRouter is still used when a requested provider has no key.',
|
|
150
150
|
note: 'You can still manually register providers using gateway.register(provider)'
|
|
151
151
|
});
|
|
152
152
|
}
|
|
@@ -11,17 +11,38 @@ export function resolveOpenRouterApiKey(config = {}) {
|
|
|
11
11
|
return env || undefined;
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
|
|
14
|
+
* Read operator preference from env: `PREFER_OPENROUTER` (current), then deprecated `USE_OPENROUTER`.
|
|
15
|
+
* Returns undefined when neither is set.
|
|
16
|
+
*/
|
|
17
|
+
export function readPreferOpenRouterFromEnv() {
|
|
18
|
+
const prefer = process.env.PREFER_OPENROUTER?.trim();
|
|
19
|
+
if (prefer === 'false' || prefer === '0')
|
|
20
|
+
return false;
|
|
21
|
+
if (prefer === 'true' || prefer === '1')
|
|
22
|
+
return true;
|
|
23
|
+
const legacy = process.env.USE_OPENROUTER?.trim();
|
|
24
|
+
if (legacy === 'false' || legacy === '0')
|
|
25
|
+
return false;
|
|
26
|
+
if (legacy === 'true' || legacy === '1')
|
|
27
|
+
return true;
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* When true, pass `routeViaOpenRouter: true` into ai-tools resolveModel (prefer OpenRouter when a key exists).
|
|
32
|
+
* Default: true. `PREFER_OPENROUTER=false` (or deprecated `USE_OPENROUTER=false`) forces vendor-direct when keys exist;
|
|
33
|
+
* ai-tools still falls back to OpenRouter when the requested provider has no direct key.
|
|
17
34
|
*/
|
|
18
35
|
export function resolvePreferOpenRouter(config = {}) {
|
|
36
|
+
if (config.openRouter?.prefer === true)
|
|
37
|
+
return true;
|
|
38
|
+
if (config.openRouter?.prefer === false)
|
|
39
|
+
return false;
|
|
19
40
|
if (config.openRouter?.enabled === true)
|
|
20
41
|
return true;
|
|
21
42
|
if (config.openRouter?.enabled === false)
|
|
22
43
|
return false;
|
|
23
|
-
const
|
|
24
|
-
if (
|
|
25
|
-
return
|
|
26
|
-
return
|
|
44
|
+
const fromEnv = readPreferOpenRouterFromEnv();
|
|
45
|
+
if (fromEnv !== undefined)
|
|
46
|
+
return fromEnv;
|
|
47
|
+
return true;
|
|
27
48
|
}
|
|
@@ -5,8 +5,13 @@
|
|
|
5
5
|
import type { GatewayConfig } from './types.js';
|
|
6
6
|
export declare function resolveOpenRouterApiKey(config?: GatewayConfig): string | undefined;
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
|
|
8
|
+
* Read operator preference from env: `PREFER_OPENROUTER` (current), then deprecated `USE_OPENROUTER`.
|
|
9
|
+
* Returns undefined when neither is set.
|
|
10
|
+
*/
|
|
11
|
+
export declare function readPreferOpenRouterFromEnv(): boolean | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* When true, pass `routeViaOpenRouter: true` into ai-tools resolveModel (prefer OpenRouter when a key exists).
|
|
14
|
+
* Default: true. `PREFER_OPENROUTER=false` (or deprecated `USE_OPENROUTER=false`) forces vendor-direct when keys exist;
|
|
15
|
+
* ai-tools still falls back to OpenRouter when the requested provider has no direct key.
|
|
11
16
|
*/
|
|
12
17
|
export declare function resolvePreferOpenRouter(config?: GatewayConfig): boolean;
|
package/dist-cjs/types.d.ts
CHANGED
|
@@ -383,8 +383,8 @@ export interface GatewayConfig extends Omit<RouterConfig, 'defaultEngine' | 'log
|
|
|
383
383
|
};
|
|
384
384
|
/**
|
|
385
385
|
* OpenRouter preference (not a hard off-switch when {@link openrouter}.apiKey or OPENROUTER_API_KEY is set).
|
|
386
|
-
* - `enabled: true` or omitted
|
|
387
|
-
* - `enabled: false` or
|
|
386
|
+
* - `prefer: true` / `enabled: true` or omitted env (default true): prefer OpenRouter when OPENROUTER_API_KEY is present.
|
|
387
|
+
* - `prefer: false` / `enabled: false` or PREFER_OPENROUTER=false: use direct providers when their API keys exist; OpenRouter still used as fallback when a requested provider has no key.
|
|
388
388
|
*/
|
|
389
389
|
openRouter?: {
|
|
390
390
|
enabled?: boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@x12i/ai-gateway",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.7.0",
|
|
4
4
|
"description": "AI Gateway - Unified interface for LLM provider routing and management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -42,10 +42,10 @@
|
|
|
42
42
|
"license": "mit",
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@x12i/activix": "^8.3.1",
|
|
45
|
-
"@x12i/ai-providers-router": "^4.
|
|
46
|
-
"@x12i/ai-tools": "^2.1.
|
|
45
|
+
"@x12i/ai-providers-router": "^4.9.0",
|
|
46
|
+
"@x12i/ai-tools": "^2.1.3",
|
|
47
47
|
"@x12i/flex-md": "^4.8.0",
|
|
48
|
-
"@x12i/logxer": "^4.
|
|
48
|
+
"@x12i/logxer": "^4.6.0",
|
|
49
49
|
"@x12i/optimixer": "^2.4.4",
|
|
50
50
|
"@x12i/rendrix": "^4.3.0"
|
|
51
51
|
},
|