@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.
@@ -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
- // USE_OPENROUTER=false only disables *preferring* OpenRouter when direct provider keys exist.
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). USE_OPENROUTER=false prefers direct provider keys when present; OpenRouter is still used when a requested provider has no key.',
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
- * When true, pass `routeViaOpenRouter: true` into ai-tools resolveModel (prefer OpenRouter even with direct keys).
9
- * Default: true when OPENROUTER_API_KEY is set. `USE_OPENROUTER=false` turns this off; ai-tools still falls back
10
- * when a vendor API key is missing.
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
- * When true, pass `routeViaOpenRouter: true` into ai-tools resolveModel (prefer OpenRouter even with direct keys).
15
- * Default: true when OPENROUTER_API_KEY is set. `USE_OPENROUTER=false` turns this off; ai-tools still falls back
16
- * when a vendor API key is missing.
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 env = process.env.USE_OPENROUTER;
24
- if (env === 'false' || env === '0')
25
- return false;
26
- return !!resolveOpenRouterApiKey(config);
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 with OPENROUTER_API_KEY: prefer OpenRouter even when direct provider keys exist.
387
- * - `enabled: false` or USE_OPENROUTER=false: use direct providers when their API keys exist; OpenRouter still used as fallback when a requested provider has no key.
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
- // USE_OPENROUTER=false only disables *preferring* OpenRouter when direct provider keys exist.
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). USE_OPENROUTER=false prefers direct provider keys when present; OpenRouter is still used when a requested provider has no key.',
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
- * When true, pass `routeViaOpenRouter: true` into ai-tools resolveModel (prefer OpenRouter even with direct keys).
15
- * Default: true when OPENROUTER_API_KEY is set. `USE_OPENROUTER=false` turns this off; ai-tools still falls back
16
- * when a vendor API key is missing.
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 env = process.env.USE_OPENROUTER;
24
- if (env === 'false' || env === '0')
25
- return false;
26
- return !!resolveOpenRouterApiKey(config);
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
- * When true, pass `routeViaOpenRouter: true` into ai-tools resolveModel (prefer OpenRouter even with direct keys).
9
- * Default: true when OPENROUTER_API_KEY is set. `USE_OPENROUTER=false` turns this off; ai-tools still falls back
10
- * when a vendor API key is missing.
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;
@@ -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 with OPENROUTER_API_KEY: prefer OpenRouter even when direct provider keys exist.
387
- * - `enabled: false` or USE_OPENROUTER=false: use direct providers when their API keys exist; OpenRouter still used as fallback when a requested provider has no key.
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.6.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.8.12",
46
- "@x12i/ai-tools": "^2.1.2",
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.5.1",
48
+ "@x12i/logxer": "^4.6.0",
49
49
  "@x12i/optimixer": "^2.4.4",
50
50
  "@x12i/rendrix": "^4.3.0"
51
51
  },