@x12i/ai-gateway 11.0.7 → 11.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.
Files changed (77) hide show
  1. package/dist/gateway-config.d.ts +4 -4
  2. package/dist/gateway-config.js +18 -53
  3. package/dist/gateway-log-levels.d.ts +3 -1
  4. package/dist/gateway-log-levels.js +2 -1
  5. package/dist/gateway-retry.d.ts +2 -2
  6. package/dist/gateway-router.d.ts +42 -0
  7. package/dist/gateway-router.js +118 -0
  8. package/dist/gateway-utils.d.ts +2 -2
  9. package/dist/gateway-utils.js +1 -1
  10. package/dist/gateway.d.ts +2 -3
  11. package/dist/gateway.js +4 -16
  12. package/dist/index.d.ts +9 -13
  13. package/dist/index.js +7 -13
  14. package/dist/openrouter-runtime-adapter/index.d.ts +1 -3
  15. package/dist/openrouter-runtime-adapter/index.js +1 -3
  16. package/dist/openrouter-runtime-adapter/map-gateway-request.d.ts +1 -2
  17. package/dist/openrouter-runtime-adapter/map-gateway-request.js +0 -1
  18. package/dist/openrouter-runtime-adapter/map-runtime-errors.d.ts +14 -3
  19. package/dist/openrouter-runtime-adapter/map-runtime-errors.js +13 -3
  20. package/dist/openrouter-runtime-adapter/map-runtime-response.d.ts +2 -2
  21. package/dist/openrouter-runtime-adapter/map-server-tools.d.ts +1 -1
  22. package/dist/openrouter-runtime-adapter/should-use-openrouter-runtime.d.ts +1 -6
  23. package/dist/openrouter-runtime-adapter/should-use-openrouter-runtime.js +1 -6
  24. package/dist/router-errors.d.ts +52 -0
  25. package/dist/router-errors.js +115 -0
  26. package/dist/router-types.d.ts +147 -0
  27. package/dist/router-types.js +4 -0
  28. package/dist/types.d.ts +11 -16
  29. package/dist-cjs/gateway-config.cjs +18 -53
  30. package/dist-cjs/gateway-config.d.ts +4 -4
  31. package/dist-cjs/gateway-log-levels.cjs +2 -1
  32. package/dist-cjs/gateway-log-levels.d.ts +3 -1
  33. package/dist-cjs/gateway-retry.d.ts +2 -2
  34. package/dist-cjs/gateway-router.cjs +118 -0
  35. package/dist-cjs/gateway-router.d.ts +42 -0
  36. package/dist-cjs/gateway-utils.cjs +1 -1
  37. package/dist-cjs/gateway-utils.d.ts +2 -2
  38. package/dist-cjs/gateway.cjs +4 -16
  39. package/dist-cjs/gateway.d.ts +2 -3
  40. package/dist-cjs/index.cjs +7 -13
  41. package/dist-cjs/index.d.ts +9 -13
  42. package/dist-cjs/openrouter-runtime-adapter/index.cjs +1 -3
  43. package/dist-cjs/openrouter-runtime-adapter/index.d.ts +1 -3
  44. package/dist-cjs/openrouter-runtime-adapter/map-gateway-request.cjs +0 -1
  45. package/dist-cjs/openrouter-runtime-adapter/map-gateway-request.d.ts +1 -2
  46. package/dist-cjs/openrouter-runtime-adapter/map-runtime-errors.cjs +13 -3
  47. package/dist-cjs/openrouter-runtime-adapter/map-runtime-errors.d.ts +14 -3
  48. package/dist-cjs/openrouter-runtime-adapter/map-runtime-response.d.ts +2 -2
  49. package/dist-cjs/openrouter-runtime-adapter/map-server-tools.d.ts +1 -1
  50. package/dist-cjs/openrouter-runtime-adapter/should-use-openrouter-runtime.cjs +1 -6
  51. package/dist-cjs/openrouter-runtime-adapter/should-use-openrouter-runtime.d.ts +1 -6
  52. package/dist-cjs/router-errors.cjs +115 -0
  53. package/dist-cjs/router-errors.d.ts +52 -0
  54. package/dist-cjs/router-types.cjs +4 -0
  55. package/dist-cjs/router-types.d.ts +147 -0
  56. package/dist-cjs/types.d.ts +11 -16
  57. package/package.json +5 -6
  58. package/dist/gateway-provider-auto-register.d.ts +0 -17
  59. package/dist/gateway-provider-auto-register.js +0 -159
  60. package/dist/gateway-provider.d.ts +0 -54
  61. package/dist/gateway-provider.js +0 -202
  62. package/dist/openrouter-runtime-adapter/create-openrouter-runtime-adapter.d.ts +0 -23
  63. package/dist/openrouter-runtime-adapter/create-openrouter-runtime-adapter.js +0 -31
  64. package/dist/openrouter-runtime-adapter/create-openrouter-runtime-provider.d.ts +0 -10
  65. package/dist/openrouter-runtime-adapter/create-openrouter-runtime-provider.js +0 -152
  66. package/dist/openrouter-runtime-adapter/register-openrouter-runtime.d.ts +0 -10
  67. package/dist/openrouter-runtime-adapter/register-openrouter-runtime.js +0 -19
  68. package/dist-cjs/gateway-provider-auto-register.cjs +0 -159
  69. package/dist-cjs/gateway-provider-auto-register.d.ts +0 -17
  70. package/dist-cjs/gateway-provider.cjs +0 -202
  71. package/dist-cjs/gateway-provider.d.ts +0 -54
  72. package/dist-cjs/openrouter-runtime-adapter/create-openrouter-runtime-adapter.cjs +0 -31
  73. package/dist-cjs/openrouter-runtime-adapter/create-openrouter-runtime-adapter.d.ts +0 -23
  74. package/dist-cjs/openrouter-runtime-adapter/create-openrouter-runtime-provider.cjs +0 -152
  75. package/dist-cjs/openrouter-runtime-adapter/create-openrouter-runtime-provider.d.ts +0 -10
  76. package/dist-cjs/openrouter-runtime-adapter/register-openrouter-runtime.cjs +0 -19
  77. package/dist-cjs/openrouter-runtime-adapter/register-openrouter-runtime.d.ts +0 -10
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Router error types and enrichment helpers for gateway consumers.
3
+ */
4
+ export declare const PROVIDER_FAILURE_CODES: readonly ["OPENROUTER_API_KEY_MISSING", "PROVIDER_AUTH_FAILED", "PROVIDER_RATE_LIMITED", "PROVIDER_QUOTA_EXCEEDED", "PROVIDER_MODEL_NOT_FOUND", "PROVIDER_GATEWAY_UNREACHABLE", "PROVIDER_NOT_REGISTERED", "PROVIDER_REQUEST_FAILED", "PROVIDER_INVOKE_FAILED"];
5
+ export type ProviderFailureCode = (typeof PROVIDER_FAILURE_CODES)[number];
6
+ export type ProviderAttemptDetail = {
7
+ provider: string;
8
+ modelId?: string;
9
+ httpStatus?: number;
10
+ message: string;
11
+ code: ProviderFailureCode;
12
+ retryable?: boolean;
13
+ };
14
+ export declare function operatorHintForProviderFailureCode(code: ProviderFailureCode): string;
15
+ export type FallbackAttempt = {
16
+ provider: string;
17
+ model?: string;
18
+ httpStatus?: number;
19
+ code?: ProviderFailureCode;
20
+ message?: string;
21
+ error: Error;
22
+ responsePreview?: string;
23
+ };
24
+ export declare class ProviderNotFoundError extends Error {
25
+ constructor(providerName: string);
26
+ }
27
+ export declare class OpenRouterApiKeyMissingError extends Error {
28
+ readonly code: "OPENROUTER_API_KEY_MISSING";
29
+ constructor();
30
+ }
31
+ export declare class FallbackExhaustedError extends Error {
32
+ attempts: FallbackAttempt[];
33
+ code?: ProviderFailureCode;
34
+ operatorHint?: string;
35
+ details?: {
36
+ providerAttempts: ProviderAttemptDetail[];
37
+ };
38
+ constructor(attempts: FallbackAttempt[]);
39
+ }
40
+ export declare function buildProviderAttemptDetail(input: {
41
+ provider: string;
42
+ modelId?: string;
43
+ httpStatus?: number;
44
+ message: string;
45
+ code?: ProviderFailureCode;
46
+ err?: unknown;
47
+ }): ProviderAttemptDetail;
48
+ export declare function providerAttemptsFromFallbackAttempts(attempts: FallbackAttempt[]): ProviderAttemptDetail[];
49
+ export declare function enrichRunTaskError(err: Error, input?: {
50
+ providerAttempts?: ProviderAttemptDetail[];
51
+ code?: ProviderFailureCode;
52
+ }): Error;
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Router-level types for @x12i/ai-gateway (backed by @x12i/ai-router-runtime).
3
+ */
4
+ export {};
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Router-level types for @x12i/ai-gateway (backed by @x12i/ai-router-runtime).
3
+ */
4
+ import type { LogLevel, Logxer, StackLoggingOptions } from '@x12i/logxer';
5
+ import type { ProviderFailureCode } from './router-errors.js';
6
+ export type RouterMode = 'sync' | 'stream' | 'batch';
7
+ export type NormalizedUsage = {
8
+ promptTokens: number;
9
+ completionTokens: number;
10
+ totalTokens: number;
11
+ };
12
+ export type ActivityCostStatus = 'priced' | 'unpriced';
13
+ export type ProviderModelRef = {
14
+ engine?: string;
15
+ provider?: string;
16
+ model?: string;
17
+ };
18
+ export type AttemptErrorSummary = {
19
+ name: string;
20
+ message: string;
21
+ code: ProviderFailureCode;
22
+ httpStatus?: number;
23
+ responsePreview?: string;
24
+ };
25
+ export type DiagnosticsMetadata = {
26
+ provider?: string;
27
+ region?: string;
28
+ modelUsed?: string;
29
+ costUsd?: number;
30
+ cost?: number;
31
+ costStatus?: ActivityCostStatus;
32
+ maxTokensRequested?: number;
33
+ requestIds?: Record<string, string | undefined>;
34
+ timing?: {
35
+ startedAt: number;
36
+ endedAt: number;
37
+ durationMs: number;
38
+ };
39
+ latencyMs?: number;
40
+ attempts?: unknown[];
41
+ failureCode?: ProviderFailureCode;
42
+ providerAttempts?: unknown[];
43
+ operatorHint?: string;
44
+ normalization?: {
45
+ normalizedConfig?: Record<string, unknown>;
46
+ warnings?: string[];
47
+ };
48
+ [key: string]: unknown;
49
+ };
50
+ /**
51
+ * Router configuration shared between gateway init and standalone router factory.
52
+ */
53
+ export interface GatewayRouterConfig {
54
+ usageTracker?: {
55
+ recordRequest(event: {
56
+ provider: string;
57
+ timestamp: number;
58
+ duration: number;
59
+ tokens: {
60
+ input: number;
61
+ output: number;
62
+ total: number;
63
+ };
64
+ cost?: number;
65
+ success: boolean;
66
+ }): void;
67
+ };
68
+ verbose?: boolean;
69
+ logLevel?: LogLevel;
70
+ logging?: StackLoggingOptions;
71
+ logger?: Logxer;
72
+ timeoutMs?: number;
73
+ defaultTimeoutMs?: number;
74
+ preferOpenRouter?: boolean;
75
+ /** @deprecated Use preferOpenRouter. */
76
+ useOpenRouter?: boolean;
77
+ openrouter?: {
78
+ apiKey?: string;
79
+ httpReferer?: string;
80
+ xTitle?: string;
81
+ };
82
+ fallbackChain?: ProviderModelRef[];
83
+ defaultProvider?: string;
84
+ autoDiscover?: boolean;
85
+ }
86
+ export interface AIRouterRequest {
87
+ requestId?: string;
88
+ request: Record<string, unknown>;
89
+ provider?: string;
90
+ mode: RouterMode;
91
+ exec?: {
92
+ timeoutMs?: number;
93
+ retries?: number;
94
+ idempotencyKey?: string;
95
+ signal?: AbortSignal;
96
+ };
97
+ }
98
+ export type NormalizedRouterOutput = {
99
+ parsed?: Record<string, unknown>;
100
+ };
101
+ export interface AIResponse {
102
+ requestId: string;
103
+ provider: string;
104
+ rawResponse: unknown;
105
+ outputText?: string;
106
+ output?: NormalizedRouterOutput;
107
+ usage?: NormalizedUsage;
108
+ reasoning: {
109
+ requested: {
110
+ effort: string;
111
+ visibility: string;
112
+ };
113
+ applied: {
114
+ effort: string;
115
+ visibility: string;
116
+ };
117
+ artifacts: {
118
+ encrypted?: unknown[];
119
+ summary?: {
120
+ text: string;
121
+ format: string;
122
+ };
123
+ trace?: {
124
+ text: string;
125
+ format: string;
126
+ };
127
+ };
128
+ availability: {
129
+ supportsEffort: boolean;
130
+ supportsSummary: boolean;
131
+ supportsTrace: boolean;
132
+ supportsEncrypted: boolean;
133
+ };
134
+ warnings?: unknown[];
135
+ };
136
+ metadata?: DiagnosticsMetadata;
137
+ }
138
+ export interface HealthCheckResult {
139
+ provider: string;
140
+ healthy: boolean;
141
+ latencyMs?: number;
142
+ error?: string;
143
+ }
144
+ /** @deprecated Use {@link GatewayRouterConfig}. */
145
+ export type RouterConfig = GatewayRouterConfig;
146
+ /** Backward-compatible alias for {@link GatewayRouter}. */
147
+ export type LLMProviderRouter = import('./gateway-router.js').GatewayRouter;
@@ -3,7 +3,8 @@
3
3
  *
4
4
  * Extends router types with gateway-specific enhancements
5
5
  */
6
- import { AIResponse, LLMProviderRouter, type RouterConfig } from '@x12i/ai-providers-router';
6
+ import type { AIResponse, GatewayRouterConfig } from './router-types.js';
7
+ import type { GatewayRouter } from './gateway-router.js';
7
8
  type AIProvider = string;
8
9
  type AIModel = string;
9
10
  export type UsageTier = string;
@@ -366,7 +367,7 @@ export type GatewayInvokeRejectionMetadata = {
366
367
  */
367
368
  fallbackAttempts?: GatewayFallbackAttempt[];
368
369
  /**
369
- * Structured per-attempt diagnostics (`@x12i/ai-providers-router` 4.10).
370
+ * Structured per-attempt diagnostics from the gateway fallback chain.
370
371
  * Same attempts as {@link fallbackAttempts} when enriched; prefer this for UIs.
371
372
  */
372
373
  providerAttempts?: Array<{
@@ -399,7 +400,7 @@ export type GatewayFallbackAttempt = {
399
400
  model?: string;
400
401
  httpStatus?: number;
401
402
  error: string;
402
- /** Stable sub-code from `@x12i/ai-providers-router` ≥ 4.10 (`PROVIDER_AUTH_FAILED`, …). */
403
+ /** Stable sub-code (`PROVIDER_AUTH_FAILED`, …). */
403
404
  code?: string;
404
405
  responsePreview?: string;
405
406
  };
@@ -456,18 +457,12 @@ export type ActivityIdentity = {
456
457
  };
457
458
  /** Re-export parser template options for gateway consumers (MUST/optional protocol, subPathSearch, smartInput, etc.). */
458
459
  export type { SmartInputConfig, SmartInputRenderOptions, TemplateRenderOptions } from '@x12i/rendrix';
459
- type LLMRequest = Parameters<LLMProviderRouter['invoke']>[0];
460
- type LLMResponse = Awaited<ReturnType<LLMProviderRouter['invoke']>>;
460
+ type LLMRequest = Parameters<GatewayRouter['invoke']>[0];
461
+ type LLMResponse = Awaited<ReturnType<GatewayRouter['invoke']>>;
461
462
  /**
462
463
  * Gateway configuration extending router configuration
463
464
  *
464
- * RouterConfig already includes:
465
- * - defaultProvider?: LLMProvider (from llm-provider-interface)
466
- * - fallbackChain?: LLMProvider[]
467
- * - autoDiscover?: boolean
468
- * - usageTracker?: UsageTracker
469
- *
470
- * We don't need to redeclare these - they're inherited from RouterConfig
465
+ * GatewayRouterConfig fields (defaultProvider, fallbackChain, usageTracker, …) are inherited below.
471
466
  */
472
467
  /**
473
468
  * Provider + model reference used for defaults and fallbacks
@@ -578,7 +573,7 @@ export interface ModelConfig {
578
573
  }
579
574
  /** Alias for {@link ModelConfig} in gateway documentation. */
580
575
  export type GatewayModelConfig = ModelConfig;
581
- export interface GatewayConfig extends Omit<RouterConfig, 'defaultEngine' | 'logger'> {
576
+ export interface GatewayConfig extends Omit<GatewayRouterConfig, 'logger'> {
582
577
  /**
583
578
  * Default target (engine + model) for routing
584
579
  */
@@ -610,8 +605,8 @@ export interface GatewayConfig extends Omit<RouterConfig, 'defaultEngine' | 'log
610
605
  /**
611
606
  * Process-wide package log level registry (logxer ≥ 4.5).
612
607
  * Merged after `applyPackageLogLevelsFromEnv()` on first gateway init.
613
- * `logging` (from {@link RouterConfig}) is forwarded to the gateway logger and router.
614
- * @example `{ default: 'warn', levels: { AI_GATEWAY: 'info', AI_PROVIDER_ROUTER: 'debug' } }`
608
+ * `logging` is forwarded to the gateway logger and router runtime.
609
+ * @example `{ default: 'warn', levels: { AI_GATEWAY: 'info', AI_ROUTER_RUNTIME: 'debug' } }`
615
610
  */
616
611
  packageLogLevels?: PackageLogLevelsConfig;
617
612
  /**
@@ -627,7 +622,7 @@ export interface GatewayConfig extends Omit<RouterConfig, 'defaultEngine' | 'log
627
622
  packageName?: string;
628
623
  /**
629
624
  * Full payload logging for gateway-owned verbose lines (`AI_GATEWAY_VERBOSE=true`).
630
- * Separate from log threshold (`AI_GATEWAY_LOGS_LEVEL=verbose`). Router I/O payloads use the same flag via `RouterConfig.verbose`.
625
+ * Separate from log threshold (`AI_GATEWAY_LOGS_LEVEL=verbose`). Router I/O payloads use the same flag via `GatewayRouterConfig.verbose`.
631
626
  */
632
627
  verbose?: boolean;
633
628
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x12i/ai-gateway",
3
- "version": "11.0.7",
3
+ "version": "11.1.0",
4
4
  "description": "AI Gateway - Unified interface for LLM provider routing and management",
5
5
  "type": "module",
6
6
  "exports": {
@@ -42,13 +42,12 @@
42
42
  "author": "x12i",
43
43
  "license": "mit",
44
44
  "dependencies": {
45
- "@x12i/activix": "^9.0.3",
46
- "@x12i/ai-profiles": "^4.0.0",
47
- "@x12i/ai-providers-router": "^4.11.1",
48
- "@x12i/ai-tools": "^3.3.5",
45
+ "@x12i/activix": "^9.0.4",
46
+ "@x12i/ai-profiles": "^4.2.1",
47
+ "@x12i/ai-router-runtime": "^1.1.0",
48
+ "@x12i/ai-tools": "^5.0.0",
49
49
  "@x12i/flex-md": "^4.8.0",
50
50
  "@x12i/logxer": "^5.1.0",
51
- "@x12i/openrouter-runtime": "^1.0.5",
52
51
  "@x12i/rendrix": "^4.3.0"
53
52
  },
54
53
  "devDependencies": {
@@ -1,17 +0,0 @@
1
- /**
2
- * Gateway Provider Auto-Registration Module
3
- * Automatically registers providers based on environment variables
4
- */
5
- import type { LLMProviderRouter } from '@x12i/ai-providers-router';
6
- import type { Logxer } from '@x12i/logxer';
7
- /**
8
- * Auto-registers providers based on environment variables
9
- * Only registers providers that:
10
- * 1. Have their API key set in environment variables
11
- * 2. Have their provider package installed
12
- *
13
- * @param router - LLM provider router instance
14
- * @param logger - Logger instance
15
- * @returns Array of provider names that were successfully registered
16
- */
17
- export declare function autoRegisterProviders(router: LLMProviderRouter, logger: Logxer): Promise<string[]>;
@@ -1,159 +0,0 @@
1
- /**
2
- * Gateway Provider Auto-Registration Module
3
- * Automatically registers providers based on environment variables
4
- */
5
- const PROVIDER_CONFIGS = [
6
- {
7
- name: 'openai',
8
- packageName: '@x12i/ai-provider-openai',
9
- className: 'OpenAIProvider',
10
- envVar: 'OPENAI_API_KEY'
11
- },
12
- {
13
- name: 'grok',
14
- packageName: '@x12i/ai-provider-grok',
15
- className: 'GrokProvider',
16
- envVar: 'GROK_API_KEY'
17
- },
18
- {
19
- name: 'anthropic',
20
- packageName: '@x12i/ai-provider-anthropic',
21
- className: 'AnthropicProvider',
22
- envVar: 'ANTHROPIC_API_KEY',
23
- optional: true // Optional - may not be installed
24
- },
25
- {
26
- name: 'google',
27
- packageName: '@x12i/ai-provider-google',
28
- className: 'GoogleProvider',
29
- envVar: 'GOOGLE_API_KEY',
30
- optional: true // Optional - may not be installed
31
- },
32
- {
33
- name: 'cohere',
34
- packageName: '@x12i/ai-provider-cohere',
35
- className: 'CohereProvider',
36
- envVar: 'COHERE_API_KEY',
37
- optional: true // Optional - may not be installed
38
- },
39
- {
40
- name: 'mistral',
41
- packageName: '@x12i/ai-provider-mistral',
42
- className: 'MistralProvider',
43
- envVar: 'MISTRAL_API_KEY',
44
- optional: true // Optional - may not be installed
45
- }
46
- ];
47
- /**
48
- * Auto-registers providers based on environment variables
49
- * Only registers providers that:
50
- * 1. Have their API key set in environment variables
51
- * 2. Have their provider package installed
52
- *
53
- * @param router - LLM provider router instance
54
- * @param logger - Logger instance
55
- * @returns Array of provider names that were successfully registered
56
- */
57
- export async function autoRegisterProviders(router, logger) {
58
- const registeredProviders = [];
59
- logger.debug('Auto-registering providers from environment variables');
60
- for (const providerConfig of PROVIDER_CONFIGS) {
61
- const apiKey = process.env[providerConfig.envVar];
62
- // Skip if API key is not set
63
- if (!apiKey) {
64
- if (!providerConfig.optional) {
65
- logger.debug(`Skipping ${providerConfig.name} provider: ${providerConfig.envVar} not set`);
66
- }
67
- continue;
68
- }
69
- try {
70
- // Dynamically import the provider package
71
- // Use dynamic import() for ES module compatibility
72
- let ProviderClass;
73
- try {
74
- const providerModule = await import(providerConfig.packageName);
75
- ProviderClass = providerModule[providerConfig.className] || providerModule.default;
76
- if (!ProviderClass) {
77
- logger.debug(`Provider class ${providerConfig.className} not found in ${providerConfig.packageName}`);
78
- continue;
79
- }
80
- }
81
- catch (importError) {
82
- if (!providerConfig.optional) {
83
- logger.warn(`Failed to import ${providerConfig.packageName}`, {
84
- error: importError instanceof Error ? importError.message : String(importError),
85
- note: `Install it with: npm install ${providerConfig.packageName}`
86
- });
87
- }
88
- continue;
89
- }
90
- // Instantiate the provider
91
- const provider = new ProviderClass({
92
- apiKey: apiKey
93
- });
94
- // Get provider name for both module creation and logging
95
- const providerName = typeof provider.getProviderName === 'function'
96
- ? provider.getProviderName()
97
- : providerConfig.name;
98
- // Register with router as ProviderModule
99
- const providerModule = {
100
- name: providerName,
101
- capabilities: {
102
- modes: {
103
- sync: true,
104
- stream: false,
105
- batch: false
106
- },
107
- operations: ['invoke'],
108
- maxConcurrency: 10
109
- },
110
- execute: async (request) => {
111
- // Use aiCall if available, otherwise assume invoke
112
- if (typeof provider.aiCall === 'function') {
113
- return await provider.aiCall(request);
114
- }
115
- else if (typeof provider.invoke === 'function') {
116
- return await provider.invoke(request);
117
- }
118
- else {
119
- throw new Error(`Provider ${providerName} has neither aiCall nor invoke method`);
120
- }
121
- }
122
- };
123
- router.registerProvider(providerModule);
124
- registeredProviders.push(providerName);
125
- logger.info(`Auto-registered provider: ${providerName}`, {
126
- provider: providerName,
127
- envVar: providerConfig.envVar,
128
- hasApiKey: !!apiKey
129
- });
130
- }
131
- catch (error) {
132
- logger.error(`Failed to auto-register ${providerConfig.name} provider`, {
133
- provider: providerConfig.name,
134
- package: providerConfig.packageName,
135
- error: error instanceof Error ? error.message : String(error),
136
- stack: error instanceof Error ? error.stack : undefined
137
- });
138
- // Continue with other providers even if one fails
139
- }
140
- }
141
- if (registeredProviders.length === 0) {
142
- logger.warn('No providers were auto-registered. Make sure API keys are set in environment variables:', {
143
- requiredEnvVars: PROVIDER_CONFIGS
144
- .filter(p => !p.optional)
145
- .map(p => p.envVar),
146
- optionalEnvVars: PROVIDER_CONFIGS
147
- .filter(p => p.optional)
148
- .map(p => p.envVar),
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
- note: 'You can still manually register providers using gateway.register(provider)'
151
- });
152
- }
153
- else {
154
- logger.info(`Auto-registered ${registeredProviders.length} provider(s)`, {
155
- providers: registeredProviders
156
- });
157
- }
158
- return registeredProviders;
159
- }
@@ -1,54 +0,0 @@
1
- /**
2
- * Gateway Provider Module
3
- * Handles provider management
4
- */
5
- import type { LLMProviderRouter } from '@x12i/ai-providers-router';
6
- import type { Logxer } from '@x12i/logxer';
7
- /**
8
- * Register a provider with the router
9
- */
10
- export declare function registerProvider(provider: any, router: LLMProviderRouter, logger: Logxer): void;
11
- /**
12
- * Unregister a provider
13
- */
14
- export declare function unregisterProvider(providerName: string, router: LLMProviderRouter, logger: Logxer): void;
15
- /**
16
- * Get a provider module
17
- */
18
- export declare function getProvider(providerName: string, router: LLMProviderRouter): any;
19
- /**
20
- * List all registered providers
21
- */
22
- export declare function listProviders(router: LLMProviderRouter): string[];
23
- /**
24
- * Set default provider
25
- *
26
- * NOTE: Router doesn't support changing default provider after initialization.
27
- * This method is kept for API compatibility but does nothing.
28
- * Default provider must be set in router config during initialization.
29
- */
30
- export declare function setDefaultProvider(provider: string, router: LLMProviderRouter, logger: Logxer): void;
31
- /**
32
- * Set fallback chain
33
- *
34
- * NOTE: Router doesn't support changing fallback chain after initialization.
35
- * This method is kept for API compatibility but does nothing.
36
- * Fallback chain must be set in router config during initialization.
37
- */
38
- export declare function setFallbackChain(chain: string[], router: LLMProviderRouter, logger: Logxer): void;
39
- /**
40
- * Add request interceptor
41
- */
42
- export declare function addRequestInterceptor(interceptor: any, router: LLMProviderRouter): void;
43
- /**
44
- * Add response interceptor
45
- */
46
- export declare function addResponseInterceptor(interceptor: any, router: LLMProviderRouter): void;
47
- /**
48
- * Check health of a provider
49
- */
50
- export declare function checkHealth(provider: string, router: LLMProviderRouter): Promise<import("@x12i/ai-providers-router").HealthCheckResult>;
51
- /**
52
- * Check health of all providers
53
- */
54
- export declare function checkAllHealth(router: LLMProviderRouter): Promise<Record<string, any>>;