@x12i/ai-gateway 7.9.1
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 +4259 -0
- package/config.defaults.json +31 -0
- package/dist/activity-manager.d.ts +206 -0
- package/dist/activity-manager.js +1051 -0
- package/dist/config/activity-tracking-config.d.ts +11 -0
- package/dist/config/activity-tracking-config.js +15 -0
- package/dist/config.defaults.json +31 -0
- package/dist/content-normalizer/content-normalizer.d.ts +46 -0
- package/dist/content-normalizer/content-normalizer.js +393 -0
- package/dist/content-normalizer/index.d.ts +7 -0
- package/dist/content-normalizer/index.js +6 -0
- package/dist/content-normalizer/types.d.ts +33 -0
- package/dist/content-normalizer/types.js +4 -0
- package/dist/defaults/instructions-blocks.json +61 -0
- package/dist/defaults/model-config.json +16 -0
- package/dist/defaults/template-rendering.json +6 -0
- package/dist/flex-md-loader.d.ts +109 -0
- package/dist/flex-md-loader.js +940 -0
- package/dist/gateway-config.d.ts +49 -0
- package/dist/gateway-config.js +292 -0
- package/dist/gateway-conversion.d.ts +29 -0
- package/dist/gateway-conversion.js +174 -0
- package/dist/gateway-instructions.d.ts +30 -0
- package/dist/gateway-instructions.js +62 -0
- package/dist/gateway-memory.d.ts +51 -0
- package/dist/gateway-memory.js +207 -0
- package/dist/gateway-messages.d.ts +23 -0
- package/dist/gateway-messages.js +83 -0
- package/dist/gateway-meta.d.ts +25 -0
- package/dist/gateway-meta.js +87 -0
- package/dist/gateway-provider-auto-register.d.ts +17 -0
- package/dist/gateway-provider-auto-register.js +159 -0
- package/dist/gateway-provider.d.ts +54 -0
- package/dist/gateway-provider.js +202 -0
- package/dist/gateway-rate-limiter-constants.d.ts +16 -0
- package/dist/gateway-rate-limiter-constants.js +16 -0
- package/dist/gateway-rate-limiter.d.ts +56 -0
- package/dist/gateway-rate-limiter.js +107 -0
- package/dist/gateway-retry.d.ts +49 -0
- package/dist/gateway-retry.js +204 -0
- package/dist/gateway-utils.d.ts +21 -0
- package/dist/gateway-utils.js +181 -0
- package/dist/gateway-validation.d.ts +13 -0
- package/dist/gateway-validation.js +50 -0
- package/dist/gateway.d.ts +39 -0
- package/dist/gateway.js +430 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.js +55 -0
- package/dist/instruction-errors.d.ts +16 -0
- package/dist/instruction-errors.js +29 -0
- package/dist/instruction-optimizer.d.ts +113 -0
- package/dist/instruction-optimizer.js +293 -0
- package/dist/instructions-parser.d.ts +31 -0
- package/dist/instructions-parser.js +56 -0
- package/dist/logger-factory.d.ts +17 -0
- package/dist/logger-factory.js +42 -0
- package/dist/message-builder.d.ts +41 -0
- package/dist/message-builder.js +522 -0
- package/dist/object-types-library-integration.d.ts +22 -0
- package/dist/object-types-library-integration.js +27 -0
- package/dist/object-types-library.d.ts +351 -0
- package/dist/object-types-library.js +210 -0
- package/dist/output-auditor.d.ts +44 -0
- package/dist/output-auditor.js +49 -0
- package/dist/request-report-generator.d.ts +60 -0
- package/dist/request-report-generator.js +169 -0
- package/dist/response-analyzer/format-type-detector.d.ts +35 -0
- package/dist/response-analyzer/format-type-detector.js +115 -0
- package/dist/response-analyzer/index.d.ts +9 -0
- package/dist/response-analyzer/index.js +8 -0
- package/dist/response-analyzer/object-type-detector.d.ts +42 -0
- package/dist/response-analyzer/object-type-detector.js +95 -0
- package/dist/response-analyzer/response-analyzer.d.ts +38 -0
- package/dist/response-analyzer/response-analyzer.js +97 -0
- package/dist/response-analyzer/types.d.ts +97 -0
- package/dist/response-analyzer/types.js +4 -0
- package/dist/response-fallback-fixer.d.ts +11 -0
- package/dist/response-fallback-fixer.js +123 -0
- package/dist/runtime-objects.d.ts +52 -0
- package/dist/runtime-objects.js +46 -0
- package/dist/template-parser.d.ts +58 -0
- package/dist/template-parser.js +99 -0
- package/dist/template-render-merge.d.ts +9 -0
- package/dist/template-render-merge.js +40 -0
- package/dist/troubleshooting-helper.d.ts +123 -0
- package/dist/troubleshooting-helper.js +596 -0
- package/dist/types.d.ts +1173 -0
- package/dist/types.js +6 -0
- package/dist/usage-tracker.d.ts +78 -0
- package/dist/usage-tracker.js +79 -0
- package/dist-cjs/activity-manager.cjs +1056 -0
- package/dist-cjs/activity-manager.d.ts +206 -0
- package/dist-cjs/config/activity-tracking-config.cjs +18 -0
- package/dist-cjs/config/activity-tracking-config.d.ts +11 -0
- package/dist-cjs/config.defaults.json +31 -0
- package/dist-cjs/content-normalizer/content-normalizer.cjs +398 -0
- package/dist-cjs/content-normalizer/content-normalizer.d.ts +46 -0
- package/dist-cjs/content-normalizer/index.cjs +12 -0
- package/dist-cjs/content-normalizer/index.d.ts +7 -0
- package/dist-cjs/content-normalizer/types.cjs +5 -0
- package/dist-cjs/content-normalizer/types.d.ts +33 -0
- package/dist-cjs/defaults/instructions-blocks.json +61 -0
- package/dist-cjs/defaults/model-config.json +16 -0
- package/dist-cjs/defaults/template-rendering.json +6 -0
- package/dist-cjs/flex-md-loader.cjs +986 -0
- package/dist-cjs/flex-md-loader.d.ts +109 -0
- package/dist-cjs/gateway-config.cjs +331 -0
- package/dist-cjs/gateway-config.d.ts +49 -0
- package/dist-cjs/gateway-conversion.cjs +212 -0
- package/dist-cjs/gateway-conversion.d.ts +29 -0
- package/dist-cjs/gateway-instructions.cjs +67 -0
- package/dist-cjs/gateway-instructions.d.ts +30 -0
- package/dist-cjs/gateway-memory.cjs +211 -0
- package/dist-cjs/gateway-memory.d.ts +51 -0
- package/dist-cjs/gateway-messages.cjs +86 -0
- package/dist-cjs/gateway-messages.d.ts +23 -0
- package/dist-cjs/gateway-meta.cjs +90 -0
- package/dist-cjs/gateway-meta.d.ts +25 -0
- package/dist-cjs/gateway-provider-auto-register.cjs +195 -0
- package/dist-cjs/gateway-provider-auto-register.d.ts +17 -0
- package/dist-cjs/gateway-provider.cjs +214 -0
- package/dist-cjs/gateway-provider.d.ts +54 -0
- package/dist-cjs/gateway-rate-limiter-constants.cjs +19 -0
- package/dist-cjs/gateway-rate-limiter-constants.d.ts +16 -0
- package/dist-cjs/gateway-rate-limiter.cjs +111 -0
- package/dist-cjs/gateway-rate-limiter.d.ts +56 -0
- package/dist-cjs/gateway-retry.cjs +212 -0
- package/dist-cjs/gateway-retry.d.ts +49 -0
- package/dist-cjs/gateway-utils.cjs +219 -0
- package/dist-cjs/gateway-utils.d.ts +21 -0
- package/dist-cjs/gateway-validation.cjs +54 -0
- package/dist-cjs/gateway-validation.d.ts +13 -0
- package/dist-cjs/gateway.cjs +434 -0
- package/dist-cjs/gateway.d.ts +39 -0
- package/dist-cjs/index.cjs +108 -0
- package/dist-cjs/index.d.ts +36 -0
- package/dist-cjs/instruction-errors.cjs +34 -0
- package/dist-cjs/instruction-errors.d.ts +16 -0
- package/dist-cjs/instruction-optimizer.cjs +299 -0
- package/dist-cjs/instruction-optimizer.d.ts +113 -0
- package/dist-cjs/instructions-parser.cjs +61 -0
- package/dist-cjs/instructions-parser.d.ts +31 -0
- package/dist-cjs/logger-factory.cjs +45 -0
- package/dist-cjs/logger-factory.d.ts +17 -0
- package/dist-cjs/message-builder.cjs +558 -0
- package/dist-cjs/message-builder.d.ts +41 -0
- package/dist-cjs/object-types-library-integration.cjs +32 -0
- package/dist-cjs/object-types-library-integration.d.ts +22 -0
- package/dist-cjs/object-types-library.cjs +215 -0
- package/dist-cjs/object-types-library.d.ts +351 -0
- package/dist-cjs/output-auditor.cjs +52 -0
- package/dist-cjs/output-auditor.d.ts +44 -0
- package/dist-cjs/request-report-generator.cjs +172 -0
- package/dist-cjs/request-report-generator.d.ts +60 -0
- package/dist-cjs/response-analyzer/format-type-detector.cjs +119 -0
- package/dist-cjs/response-analyzer/format-type-detector.d.ts +35 -0
- package/dist-cjs/response-analyzer/index.cjs +14 -0
- package/dist-cjs/response-analyzer/index.d.ts +9 -0
- package/dist-cjs/response-analyzer/object-type-detector.cjs +99 -0
- package/dist-cjs/response-analyzer/object-type-detector.d.ts +42 -0
- package/dist-cjs/response-analyzer/response-analyzer.cjs +101 -0
- package/dist-cjs/response-analyzer/response-analyzer.d.ts +38 -0
- package/dist-cjs/response-analyzer/types.cjs +5 -0
- package/dist-cjs/response-analyzer/types.d.ts +97 -0
- package/dist-cjs/response-fallback-fixer.cjs +126 -0
- package/dist-cjs/response-fallback-fixer.d.ts +11 -0
- package/dist-cjs/runtime-objects.cjs +52 -0
- package/dist-cjs/runtime-objects.d.ts +52 -0
- package/dist-cjs/template-parser.cjs +136 -0
- package/dist-cjs/template-parser.d.ts +58 -0
- package/dist-cjs/template-render-merge.cjs +43 -0
- package/dist-cjs/template-render-merge.d.ts +9 -0
- package/dist-cjs/troubleshooting-helper.cjs +611 -0
- package/dist-cjs/troubleshooting-helper.d.ts +123 -0
- package/dist-cjs/types.cjs +7 -0
- package/dist-cjs/types.d.ts +1173 -0
- package/dist-cjs/usage-tracker.cjs +83 -0
- package/dist-cjs/usage-tracker.d.ts +78 -0
- package/package.json +91 -0
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @x12i/ai-gateway
|
|
4
|
+
*
|
|
5
|
+
* Simplified AI Gateway - Clean proxy implementation
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.AIGateway = void 0;
|
|
9
|
+
const gateway_validation_js_1 = require("./gateway-validation.cjs");
|
|
10
|
+
const activity_manager_js_1 = require("./activity-manager.cjs");
|
|
11
|
+
const gateway_config_js_1 = require("./gateway-config.cjs");
|
|
12
|
+
const message_builder_js_1 = require("./message-builder.cjs");
|
|
13
|
+
const flex_md_loader_js_1 = require("./flex-md-loader.cjs");
|
|
14
|
+
const gateway_utils_js_1 = require("./gateway-utils.cjs");
|
|
15
|
+
const gateway_provider_auto_register_js_1 = require("./gateway-provider-auto-register.cjs");
|
|
16
|
+
const runtime_objects_js_1 = require("./runtime-objects.cjs");
|
|
17
|
+
/** Error message thrown by the router when no provider is registered or specified */
|
|
18
|
+
const NO_PROVIDER_ERROR = 'No provider specified and no providers registered';
|
|
19
|
+
const NO_PROVIDER_HINT = ' Set OPEN_ROUTER_KEY (or OPENROUTER_API_KEY) in the environment to use OpenRouter, or register a provider with the router (e.g. via autoRegisterProviders or gateway config).';
|
|
20
|
+
/**
|
|
21
|
+
* Simplified AI Gateway - Clean proxy implementation
|
|
22
|
+
*/
|
|
23
|
+
class AIGateway {
|
|
24
|
+
router;
|
|
25
|
+
config;
|
|
26
|
+
logger;
|
|
27
|
+
activityManager;
|
|
28
|
+
messageBuilderConfig;
|
|
29
|
+
_autoRegisterDone = false;
|
|
30
|
+
constructor(config = {}, activityManager) {
|
|
31
|
+
this.config = config;
|
|
32
|
+
this.activityManager = activityManager;
|
|
33
|
+
// Load configuration and initialize components
|
|
34
|
+
const { defaultModelConfig, defaultInstructionsBlocks, defaultTemplateRendering } = (0, gateway_config_js_1.loadConfig)();
|
|
35
|
+
const components = (0, gateway_config_js_1.initializeGatewayComponents)(config, defaultModelConfig, defaultInstructionsBlocks, defaultTemplateRendering);
|
|
36
|
+
this.logger = components.logger;
|
|
37
|
+
this.router = components.router;
|
|
38
|
+
this.activityManager = components.activityManager;
|
|
39
|
+
this.messageBuilderConfig = components.messageBuilderConfig;
|
|
40
|
+
(0, runtime_objects_js_1.setGatewayRuntimeClients)({
|
|
41
|
+
activix: this.activityManager?.getTracker(),
|
|
42
|
+
logger: this.logger
|
|
43
|
+
});
|
|
44
|
+
this.logger.info('AI Gateway initialized with full component stack', {
|
|
45
|
+
hasActivityManager: !!this.activityManager,
|
|
46
|
+
hasMessageBuilder: !!this.messageBuilderConfig
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Invoke chat request (without structured output requirements)
|
|
51
|
+
*/
|
|
52
|
+
async invokeChat(request) {
|
|
53
|
+
const startTime = Date.now();
|
|
54
|
+
// Basic validation
|
|
55
|
+
(0, gateway_validation_js_1.validateChatRequest)(request);
|
|
56
|
+
if (!this.activityManager) {
|
|
57
|
+
(0, activity_manager_js_1.ensureGatewayRequestIdentity)(request);
|
|
58
|
+
}
|
|
59
|
+
(0, runtime_objects_js_1.setGatewayLastJobId)(resolveRuntimeJobId(request));
|
|
60
|
+
// Generate simple task type ID
|
|
61
|
+
const taskTypeId = request.taskTypeId || `task-${Date.now()}`;
|
|
62
|
+
// Simple message construction
|
|
63
|
+
const messages = this.buildSimpleMessages(request);
|
|
64
|
+
// Merge config (modelConfig > request.config > gateway defaults)
|
|
65
|
+
const mergedConfig = await (0, gateway_utils_js_1.mergeConfig)(request, this.config, this.logger);
|
|
66
|
+
// Lazy auto-register providers from env (OPENAI_API_KEY, etc.) so consumers don't have to call init
|
|
67
|
+
if (!this._autoRegisterDone) {
|
|
68
|
+
await (0, gateway_provider_auto_register_js_1.autoRegisterProviders)(this.router, this.logger);
|
|
69
|
+
this._autoRegisterDone = true;
|
|
70
|
+
}
|
|
71
|
+
// Start activity tracking if available
|
|
72
|
+
let activity = undefined;
|
|
73
|
+
if (this.activityManager) {
|
|
74
|
+
try {
|
|
75
|
+
activity = await this.activityManager.startActivity(request, startTime);
|
|
76
|
+
}
|
|
77
|
+
catch (activityError) {
|
|
78
|
+
// Log activity tracking error but don't fail the request
|
|
79
|
+
this.logger.warn('Failed to start activity tracking', {
|
|
80
|
+
aiRequestId: request.aiRequestId,
|
|
81
|
+
error: activityError instanceof Error ? activityError.message : String(activityError)
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
// Call router directly with merged config
|
|
87
|
+
const response = await this.router.invoke({
|
|
88
|
+
request: {
|
|
89
|
+
messages,
|
|
90
|
+
config: mergedConfig,
|
|
91
|
+
identity: request.identity
|
|
92
|
+
},
|
|
93
|
+
mode: 'sync'
|
|
94
|
+
});
|
|
95
|
+
// Create enhanced response
|
|
96
|
+
const enhancedResponse = {
|
|
97
|
+
content: response.content || '',
|
|
98
|
+
metadata: {
|
|
99
|
+
aiRequestId: request.aiRequestId,
|
|
100
|
+
identity: request.identity,
|
|
101
|
+
latencyMs: Date.now() - startTime,
|
|
102
|
+
tokens: response.usage || { prompt: 0, completion: 0, total: 0 },
|
|
103
|
+
taskTypeId,
|
|
104
|
+
agentType: 'chat'
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
// Track activity success if activity was started
|
|
108
|
+
if (activity) {
|
|
109
|
+
try {
|
|
110
|
+
await this.activityManager.logSuccess(activity, {
|
|
111
|
+
response: enhancedResponse,
|
|
112
|
+
endTime: Date.now(),
|
|
113
|
+
duration: Date.now() - startTime
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
catch (activityError) {
|
|
117
|
+
// Log activity tracking error but don't fail the request
|
|
118
|
+
this.logger.warn('Failed to track activity success', {
|
|
119
|
+
aiRequestId: request.aiRequestId,
|
|
120
|
+
error: activityError instanceof Error ? activityError.message : String(activityError)
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return enhancedResponse;
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
128
|
+
if (err.message.includes(NO_PROVIDER_ERROR)) {
|
|
129
|
+
throw new Error(err.message + NO_PROVIDER_HINT);
|
|
130
|
+
}
|
|
131
|
+
throw err;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Invoke AI request (with structured output support)
|
|
136
|
+
*/
|
|
137
|
+
async invoke(request) {
|
|
138
|
+
const startTime = Date.now();
|
|
139
|
+
// Basic validation
|
|
140
|
+
(0, gateway_validation_js_1.validateAIRequest)(request);
|
|
141
|
+
if (!this.activityManager) {
|
|
142
|
+
(0, activity_manager_js_1.ensureGatewayRequestIdentity)(request);
|
|
143
|
+
}
|
|
144
|
+
(0, runtime_objects_js_1.setGatewayLastJobId)(resolveRuntimeJobId(request));
|
|
145
|
+
// Generate simple task type ID
|
|
146
|
+
const taskTypeId = request.taskTypeId || `task-${Date.now()}`;
|
|
147
|
+
// Resolve instructions and build messages using proper components
|
|
148
|
+
let resolvedRequest = request;
|
|
149
|
+
let messages = [];
|
|
150
|
+
// Create parsedSnapshot to store parsed request data and messages
|
|
151
|
+
const parsedSnapshot = {};
|
|
152
|
+
// Use proper instruction resolution and message building
|
|
153
|
+
let builtMessages;
|
|
154
|
+
try {
|
|
155
|
+
builtMessages = await (0, message_builder_js_1.buildMessages)(request, this.messageBuilderConfig, {
|
|
156
|
+
parsedSnapshot
|
|
157
|
+
});
|
|
158
|
+
messages = builtMessages.messages;
|
|
159
|
+
resolvedRequest = request;
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
// If message building fails (e.g., prompt/instruction resolution error), log as bad request
|
|
163
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
164
|
+
const endTime = Date.now();
|
|
165
|
+
const duration = endTime - startTime;
|
|
166
|
+
// Determine if this is a prompt/instruction resolution error
|
|
167
|
+
// If a key was provided but couldn't be resolved to content, it's a bad request
|
|
168
|
+
const errWithCode = err; // Type assertion for error with optional code property
|
|
169
|
+
const isResolutionError = err.name === 'InstructionNotFoundError' ||
|
|
170
|
+
err.name === 'InstructionBackendError' ||
|
|
171
|
+
err.name === 'TemplateResolutionError' ||
|
|
172
|
+
errWithCode.code === 'PROMPT_NOT_FOUND' ||
|
|
173
|
+
errWithCode.code === 'PROMPT_RESOLUTION_ERROR' ||
|
|
174
|
+
errWithCode.code === 'PROMPT_RENDERED_EMPTY' ||
|
|
175
|
+
errWithCode.code === 'TEMPLATE_RESOLUTION_ERROR' ||
|
|
176
|
+
errWithCode.code === 'TEMPLATE_VARIABLE_MISSING' ||
|
|
177
|
+
err.message.includes('Failed to resolve') ||
|
|
178
|
+
err.message.includes('Failed to render prompt template') ||
|
|
179
|
+
err.message.includes('not found') ||
|
|
180
|
+
err.message.includes('Instruction not found') ||
|
|
181
|
+
err.message.includes('Prompt not found');
|
|
182
|
+
if (isResolutionError && this.activityManager) {
|
|
183
|
+
// Log to bad requests collection
|
|
184
|
+
await this.activityManager.logBadRequest(request, err, {
|
|
185
|
+
endTime,
|
|
186
|
+
duration,
|
|
187
|
+
error: err.message,
|
|
188
|
+
errorType: errWithCode.code || 'MessageBuildError',
|
|
189
|
+
diagnosticInfo: {
|
|
190
|
+
errorCode: errWithCode.code,
|
|
191
|
+
errorName: err.name,
|
|
192
|
+
failureType: 'validation-failure',
|
|
193
|
+
stage: 'message-building',
|
|
194
|
+
prompt: request.prompt,
|
|
195
|
+
instructions: typeof request.instructions === 'string' ? request.instructions.substring(0, 100) : '(object)'
|
|
196
|
+
},
|
|
197
|
+
failureType: 'validation-failure'
|
|
198
|
+
}, startTime);
|
|
199
|
+
}
|
|
200
|
+
// Re-throw the error so it propagates to the caller
|
|
201
|
+
throw err;
|
|
202
|
+
}
|
|
203
|
+
// Store messages in parsedSnapshot for activity tracking
|
|
204
|
+
parsedSnapshot.messages = messages;
|
|
205
|
+
// parsed.instructions and parsed.prompt are set by buildMessages to the resolved/rendered content
|
|
206
|
+
// (after key resolution and Rendrix). Do not overwrite with raw request keys.
|
|
207
|
+
if (parsedSnapshot.context === undefined) {
|
|
208
|
+
parsedSnapshot.context = request.context;
|
|
209
|
+
}
|
|
210
|
+
// Attach parsedSnapshot to request for activity tracking
|
|
211
|
+
request._parsedRequest = parsedSnapshot;
|
|
212
|
+
// Merge config (modelConfig > request.config > gateway defaults)
|
|
213
|
+
const mergedConfig = await (0, gateway_utils_js_1.mergeConfig)(request, this.config, this.logger);
|
|
214
|
+
// Lazy auto-register providers from env (OPENAI_API_KEY, etc.) so consumers don't have to call init
|
|
215
|
+
if (!this._autoRegisterDone) {
|
|
216
|
+
await (0, gateway_provider_auto_register_js_1.autoRegisterProviders)(this.router, this.logger);
|
|
217
|
+
this._autoRegisterDone = true;
|
|
218
|
+
}
|
|
219
|
+
// Start activity tracking if available
|
|
220
|
+
let activity = undefined;
|
|
221
|
+
if (this.activityManager) {
|
|
222
|
+
try {
|
|
223
|
+
activity = await this.activityManager.startActivity(request, startTime);
|
|
224
|
+
}
|
|
225
|
+
catch (activityError) {
|
|
226
|
+
// Log activity tracking error but don't fail the request
|
|
227
|
+
this.logger.warn('Failed to start activity tracking', {
|
|
228
|
+
aiRequestId: request.aiRequestId,
|
|
229
|
+
error: activityError instanceof Error ? activityError.message : String(activityError)
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
try {
|
|
234
|
+
// Call router directly with merged config
|
|
235
|
+
const response = await this.router.invoke({
|
|
236
|
+
request: {
|
|
237
|
+
messages,
|
|
238
|
+
config: mergedConfig,
|
|
239
|
+
identity: request.identity
|
|
240
|
+
},
|
|
241
|
+
mode: 'sync'
|
|
242
|
+
});
|
|
243
|
+
// Contract output processing removed - expectedSchema no longer supported
|
|
244
|
+
// Create enhanced response - extract content properly from router response
|
|
245
|
+
const routerResponse = response;
|
|
246
|
+
// Extract content from router response - router returns outputText, not content
|
|
247
|
+
let content = routerResponse.content || routerResponse.outputText || '';
|
|
248
|
+
// If content is still empty, try to extract from ai-activities metadata
|
|
249
|
+
if (!content && routerResponse.metadata?.['ai-activities-response']?.outputText) {
|
|
250
|
+
content = routerResponse.metadata['ai-activities-response'].outputText;
|
|
251
|
+
}
|
|
252
|
+
// Parse content using available parsers (flex-md, content normalizer, etc.)
|
|
253
|
+
let parsedContent = undefined;
|
|
254
|
+
let contentType = undefined;
|
|
255
|
+
let parsingMethod = undefined;
|
|
256
|
+
// Actually use flex-md parsing - extract structured data from markdown
|
|
257
|
+
try {
|
|
258
|
+
this.logger.debug('Attempting flex-md extraction', {
|
|
259
|
+
aiRequestId: request.aiRequestId,
|
|
260
|
+
contentLength: content.length,
|
|
261
|
+
hasInstructions: !!resolvedRequest.instructions
|
|
262
|
+
});
|
|
263
|
+
// Let flex-md extract structured data from the response content
|
|
264
|
+
const extractionResult = await (0, flex_md_loader_js_1.extractJsonFromFlexMd)(content);
|
|
265
|
+
this.logger.debug('Flex-md extraction result', {
|
|
266
|
+
aiRequestId: request.aiRequestId,
|
|
267
|
+
hasResult: !!extractionResult,
|
|
268
|
+
hasJson: !!(extractionResult && extractionResult.json),
|
|
269
|
+
method: extractionResult?.method,
|
|
270
|
+
jsonType: extractionResult?.json ? typeof extractionResult.json : 'none'
|
|
271
|
+
});
|
|
272
|
+
if (extractionResult && extractionResult.json) {
|
|
273
|
+
// Successfully extracted structured data
|
|
274
|
+
parsedContent = extractionResult.json;
|
|
275
|
+
this.logger.info('Flex-md extraction successful - parsed into structured object', {
|
|
276
|
+
aiRequestId: request.aiRequestId,
|
|
277
|
+
method: extractionResult.method,
|
|
278
|
+
extractedKeys: Object.keys(extractionResult.json)
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
// Extraction failed, fall back to raw text wrapper
|
|
283
|
+
this.logger.warn('Flex-md extraction failed - no structured data extracted', {
|
|
284
|
+
aiRequestId: request.aiRequestId,
|
|
285
|
+
hasResult: !!extractionResult,
|
|
286
|
+
method: extractionResult?.method || 'none'
|
|
287
|
+
});
|
|
288
|
+
parsedContent = { rawText: content };
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
catch (extractionError) {
|
|
292
|
+
// Extraction failed, fall back to raw text wrapper
|
|
293
|
+
const errorMessage = extractionError instanceof Error ? extractionError.message : String(extractionError);
|
|
294
|
+
this.logger.warn('Flex-md extraction failed - flex-md library compatibility issue', {
|
|
295
|
+
aiRequestId: request.aiRequestId,
|
|
296
|
+
error: errorMessage,
|
|
297
|
+
issue: 'flex-md uses require() in ES module context - needs fixing in flex-md-loader.ts',
|
|
298
|
+
fallback: 'using rawText wrapper'
|
|
299
|
+
});
|
|
300
|
+
parsedContent = { rawText: content };
|
|
301
|
+
}
|
|
302
|
+
contentType = 'structured';
|
|
303
|
+
parsingMethod = 'flex-md';
|
|
304
|
+
// Extract token usage properly
|
|
305
|
+
let tokens = { prompt: 0, completion: 0, total: 0 };
|
|
306
|
+
if (routerResponse.usage) {
|
|
307
|
+
tokens = {
|
|
308
|
+
prompt: routerResponse.usage.promptTokens || routerResponse.usage.inputTokens || 0,
|
|
309
|
+
completion: routerResponse.usage.completionTokens || routerResponse.usage.outputTokens || 0,
|
|
310
|
+
total: routerResponse.usage.totalTokens || 0
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
else if (routerResponse.metadata?.['ai-activities-response']?.usage) {
|
|
314
|
+
const usage = routerResponse.metadata['ai-activities-response'].usage;
|
|
315
|
+
tokens = {
|
|
316
|
+
prompt: usage.promptTokens || usage.inputTokens || 0,
|
|
317
|
+
completion: usage.completionTokens || usage.outputTokens || 0,
|
|
318
|
+
total: usage.totalTokens || 0
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
const enhancedResponse = {
|
|
322
|
+
content: content,
|
|
323
|
+
parsedContent: parsedContent,
|
|
324
|
+
metadata: {
|
|
325
|
+
aiRequestId: request.aiRequestId,
|
|
326
|
+
identity: request.identity,
|
|
327
|
+
latencyMs: Date.now() - startTime,
|
|
328
|
+
tokens: tokens,
|
|
329
|
+
taskTypeId,
|
|
330
|
+
agentType: 'ai',
|
|
331
|
+
contentType,
|
|
332
|
+
parsingMethod
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
// Track activity success if activity was started
|
|
336
|
+
if (activity) {
|
|
337
|
+
try {
|
|
338
|
+
// Create activity response with proper structure for ActivityTracker
|
|
339
|
+
const activityResponse = {
|
|
340
|
+
content: {
|
|
341
|
+
rawContent: content, // Store the actual response content as rawContent
|
|
342
|
+
fullResponse: routerResponse.rawResponse || routerResponse // Include full router response
|
|
343
|
+
},
|
|
344
|
+
parsed: parsedContent, // Include parsed content in activity record
|
|
345
|
+
metadata: enhancedResponse.metadata,
|
|
346
|
+
status: 'success',
|
|
347
|
+
error: null,
|
|
348
|
+
usage: tokens
|
|
349
|
+
};
|
|
350
|
+
await this.activityManager.logSuccess(activity, {
|
|
351
|
+
response: activityResponse,
|
|
352
|
+
endTime: Date.now(),
|
|
353
|
+
duration: Date.now() - startTime
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
catch (activityError) {
|
|
357
|
+
// Log activity tracking error but don't fail the request
|
|
358
|
+
this.logger.warn('Failed to track activity success', {
|
|
359
|
+
aiRequestId: request.aiRequestId,
|
|
360
|
+
error: activityError instanceof Error ? activityError.message : String(activityError)
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
console.debug('gateway: enhancedResponse:', enhancedResponse);
|
|
365
|
+
return enhancedResponse;
|
|
366
|
+
}
|
|
367
|
+
catch (error) {
|
|
368
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
369
|
+
if (err.message.includes(NO_PROVIDER_ERROR)) {
|
|
370
|
+
throw new Error(err.message + NO_PROVIDER_HINT);
|
|
371
|
+
}
|
|
372
|
+
throw err;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Build simple messages from request (instructions and prompt as literal template text; no registry).
|
|
377
|
+
*/
|
|
378
|
+
buildSimpleMessages(request) {
|
|
379
|
+
const messages = [];
|
|
380
|
+
// Add instructions as system message if present
|
|
381
|
+
if (request.instructions) {
|
|
382
|
+
const instructions = typeof request.instructions === 'string'
|
|
383
|
+
? request.instructions
|
|
384
|
+
: 'Default instructions';
|
|
385
|
+
messages.push({ role: 'system', content: instructions });
|
|
386
|
+
}
|
|
387
|
+
// Add context as assistant message if present
|
|
388
|
+
if (request.context) {
|
|
389
|
+
const context = typeof request.context === 'string'
|
|
390
|
+
? request.context
|
|
391
|
+
: JSON.stringify(request.context);
|
|
392
|
+
messages.push({ role: 'assistant', content: context });
|
|
393
|
+
}
|
|
394
|
+
// Add prompt/input as user message
|
|
395
|
+
// Input field has been removed - prompt template should contain {{input}} which resolves from workingMemory.input
|
|
396
|
+
const userContent = request.prompt || '';
|
|
397
|
+
if (userContent) {
|
|
398
|
+
messages.push({ role: 'user', content: userContent });
|
|
399
|
+
}
|
|
400
|
+
// Add direct messages if present
|
|
401
|
+
if (request.messages) {
|
|
402
|
+
messages.push(...request.messages);
|
|
403
|
+
}
|
|
404
|
+
return messages;
|
|
405
|
+
}
|
|
406
|
+
// Provider management methods
|
|
407
|
+
register(provider) {
|
|
408
|
+
this.router.registerProvider(provider);
|
|
409
|
+
}
|
|
410
|
+
listProviders() {
|
|
411
|
+
return this.router.listProviders ? this.router.listProviders() : [];
|
|
412
|
+
}
|
|
413
|
+
// Utility methods
|
|
414
|
+
getRouter() {
|
|
415
|
+
return this.router;
|
|
416
|
+
}
|
|
417
|
+
getLogger() {
|
|
418
|
+
return this.logger;
|
|
419
|
+
}
|
|
420
|
+
getActivityManager() {
|
|
421
|
+
return this.activityManager;
|
|
422
|
+
}
|
|
423
|
+
setActivityManager(activityManager) {
|
|
424
|
+
this.activityManager = activityManager;
|
|
425
|
+
(0, runtime_objects_js_1.setGatewayRuntimeClients)({
|
|
426
|
+
activix: this.activityManager.getTracker(),
|
|
427
|
+
logger: this.logger
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
exports.AIGateway = AIGateway;
|
|
432
|
+
function resolveRuntimeJobId(request) {
|
|
433
|
+
return request.identity?.jobId ?? request.jobId ?? request.identity?.sessionId ?? request.aiRequestId;
|
|
434
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @x12i/ai-gateway
|
|
3
|
+
*
|
|
4
|
+
* Simplified AI Gateway - Clean proxy implementation
|
|
5
|
+
*/
|
|
6
|
+
import { LLMProviderRouter } from '@x12i/ai-providers-router';
|
|
7
|
+
import type { GatewayConfig, ChatRequest, AIRequest, EnhancedLLMResponse } from './types.js';
|
|
8
|
+
import type { Logxer } from '@x12i/logxer';
|
|
9
|
+
import { ActivityManager } from './activity-manager.js';
|
|
10
|
+
/**
|
|
11
|
+
* Simplified AI Gateway - Clean proxy implementation
|
|
12
|
+
*/
|
|
13
|
+
export declare class AIGateway {
|
|
14
|
+
private router;
|
|
15
|
+
private config;
|
|
16
|
+
private logger;
|
|
17
|
+
private activityManager?;
|
|
18
|
+
private messageBuilderConfig?;
|
|
19
|
+
private _autoRegisterDone;
|
|
20
|
+
constructor(config?: GatewayConfig, activityManager?: ActivityManager);
|
|
21
|
+
/**
|
|
22
|
+
* Invoke chat request (without structured output requirements)
|
|
23
|
+
*/
|
|
24
|
+
invokeChat<TContent = unknown>(request: ChatRequest): Promise<EnhancedLLMResponse<TContent>>;
|
|
25
|
+
/**
|
|
26
|
+
* Invoke AI request (with structured output support)
|
|
27
|
+
*/
|
|
28
|
+
invoke<TContent = unknown>(request: AIRequest): Promise<EnhancedLLMResponse<TContent>>;
|
|
29
|
+
/**
|
|
30
|
+
* Build simple messages from request (instructions and prompt as literal template text; no registry).
|
|
31
|
+
*/
|
|
32
|
+
private buildSimpleMessages;
|
|
33
|
+
register(provider: any): void;
|
|
34
|
+
listProviders(): string[];
|
|
35
|
+
getRouter(): LLMProviderRouter;
|
|
36
|
+
getLogger(): Logxer;
|
|
37
|
+
getActivityManager(): ActivityManager | undefined;
|
|
38
|
+
setActivityManager(activityManager: ActivityManager): void;
|
|
39
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @x12i/ai-gateway
|
|
4
|
+
*
|
|
5
|
+
* Unified gateway for LLM provider routing and management.
|
|
6
|
+
* This package exposes all functionality from @x12i/ai-providers-router
|
|
7
|
+
* with enhanced features: context propagation, usage tier tracking, and comprehensive metadata.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
21
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
22
|
+
};
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.resetObjectTypesLibrary = exports.getObjectTypesLibrary = exports.initializeObjectTypesLibrary = exports.getObjectTypesForAgent = exports.getObjectType = exports.OBJECT_TYPES_LIBRARY = exports.assertValidAIRequest = exports.formatDiagnostic = exports.runValidationTests = exports.createValidationTestCases = exports.createTestAIRequest = exports.supportsJSONMode = exports.diagnoseResponse = exports.diagnoseRequest = exports.validateResponse = exports.extractJSON = exports.validateJSON = exports.validateAIRequest = exports.DEFAULT_RATE_LIMIT_ENABLED = exports.DEFAULT_RATE_LIMIT_MIN_INTERVAL_MS = exports.GatewayRateLimiter = exports.runtimeObjects = exports.createLogxer = exports.ensureGatewayRequestIdentity = exports.ActivityManager = exports.Activix = exports.mergeTemplateRenderOptions = exports.autoRegisterProviders = exports.InstructionBackendError = exports.InstructionNotFoundError = exports.AIGateway = exports.FallbackExhaustedError = exports.ProviderNotFoundError = exports.createRouterFromConfig = exports.createRouter = exports.LLMProviderRouter = void 0;
|
|
25
|
+
// Re-export router class and types (base functionality)
|
|
26
|
+
var ai_providers_router_1 = require("@x12i/ai-providers-router");
|
|
27
|
+
Object.defineProperty(exports, "LLMProviderRouter", { enumerable: true, get: function () { return ai_providers_router_1.LLMProviderRouter; } });
|
|
28
|
+
// Re-export factory functions
|
|
29
|
+
var ai_providers_router_2 = require("@x12i/ai-providers-router");
|
|
30
|
+
Object.defineProperty(exports, "createRouter", { enumerable: true, get: function () { return ai_providers_router_2.createRouter; } });
|
|
31
|
+
Object.defineProperty(exports, "createRouterFromConfig", { enumerable: true, get: function () { return ai_providers_router_2.createRouterFromConfig; } });
|
|
32
|
+
// Re-export error classes
|
|
33
|
+
var ai_providers_router_3 = require("@x12i/ai-providers-router");
|
|
34
|
+
Object.defineProperty(exports, "ProviderNotFoundError", { enumerable: true, get: function () { return ai_providers_router_3.ProviderNotFoundError; } });
|
|
35
|
+
Object.defineProperty(exports, "FallbackExhaustedError", { enumerable: true, get: function () { return ai_providers_router_3.FallbackExhaustedError; } });
|
|
36
|
+
// Re-export all from router (includes everything it exports)
|
|
37
|
+
__exportStar(require("@x12i/ai-providers-router"), exports);
|
|
38
|
+
// Export enhanced gateway
|
|
39
|
+
var gateway_js_1 = require("./gateway.cjs");
|
|
40
|
+
Object.defineProperty(exports, "AIGateway", { enumerable: true, get: function () { return gateway_js_1.AIGateway; } });
|
|
41
|
+
var instruction_errors_js_1 = require("./instruction-errors.cjs");
|
|
42
|
+
Object.defineProperty(exports, "InstructionNotFoundError", { enumerable: true, get: function () { return instruction_errors_js_1.InstructionNotFoundError; } });
|
|
43
|
+
Object.defineProperty(exports, "InstructionBackendError", { enumerable: true, get: function () { return instruction_errors_js_1.InstructionBackendError; } });
|
|
44
|
+
var gateway_provider_auto_register_js_1 = require("./gateway-provider-auto-register.cjs");
|
|
45
|
+
Object.defineProperty(exports, "autoRegisterProviders", { enumerable: true, get: function () { return gateway_provider_auto_register_js_1.autoRegisterProviders; } });
|
|
46
|
+
var template_render_merge_js_1 = require("./template-render-merge.cjs");
|
|
47
|
+
Object.defineProperty(exports, "mergeTemplateRenderOptions", { enumerable: true, get: function () { return template_render_merge_js_1.mergeTemplateRenderOptions; } });
|
|
48
|
+
// Usage tracking: UsageTracker class methods are available but consumption calculation is disabled
|
|
49
|
+
// (x-models was previously used for RPM/TPM tracking but is no longer integrated)
|
|
50
|
+
// Re-export activity tracking primitives (Activix)
|
|
51
|
+
var activix_1 = require("@x12i/activix");
|
|
52
|
+
Object.defineProperty(exports, "Activix", { enumerable: true, get: function () { return activix_1.Activix; } });
|
|
53
|
+
var activity_manager_js_1 = require("./activity-manager.cjs");
|
|
54
|
+
Object.defineProperty(exports, "ActivityManager", { enumerable: true, get: function () { return activity_manager_js_1.ActivityManager; } });
|
|
55
|
+
Object.defineProperty(exports, "ensureGatewayRequestIdentity", { enumerable: true, get: function () { return activity_manager_js_1.ensureGatewayRequestIdentity; } });
|
|
56
|
+
// Re-export logging (@x12i/logxer)
|
|
57
|
+
var logxer_1 = require("@x12i/logxer");
|
|
58
|
+
Object.defineProperty(exports, "createLogxer", { enumerable: true, get: function () { return logxer_1.createLogxer; } });
|
|
59
|
+
// Runtime observability surface (leaf package: no downstream runtime objects)
|
|
60
|
+
var runtime_objects_js_1 = require("./runtime-objects.cjs");
|
|
61
|
+
Object.defineProperty(exports, "runtimeObjects", { enumerable: true, get: function () { return runtime_objects_js_1.runtimeObjects; } });
|
|
62
|
+
// Export rate limiter
|
|
63
|
+
var gateway_rate_limiter_js_1 = require("./gateway-rate-limiter.cjs");
|
|
64
|
+
Object.defineProperty(exports, "GatewayRateLimiter", { enumerable: true, get: function () { return gateway_rate_limiter_js_1.GatewayRateLimiter; } });
|
|
65
|
+
var gateway_rate_limiter_constants_js_1 = require("./gateway-rate-limiter-constants.cjs");
|
|
66
|
+
Object.defineProperty(exports, "DEFAULT_RATE_LIMIT_MIN_INTERVAL_MS", { enumerable: true, get: function () { return gateway_rate_limiter_constants_js_1.DEFAULT_RATE_LIMIT_MIN_INTERVAL_MS; } });
|
|
67
|
+
Object.defineProperty(exports, "DEFAULT_RATE_LIMIT_ENABLED", { enumerable: true, get: function () { return gateway_rate_limiter_constants_js_1.DEFAULT_RATE_LIMIT_ENABLED; } });
|
|
68
|
+
// Export troubleshooting helpers
|
|
69
|
+
var troubleshooting_helper_js_1 = require("./troubleshooting-helper.cjs");
|
|
70
|
+
Object.defineProperty(exports, "validateAIRequest", { enumerable: true, get: function () { return troubleshooting_helper_js_1.validateAIRequest; } });
|
|
71
|
+
Object.defineProperty(exports, "validateJSON", { enumerable: true, get: function () { return troubleshooting_helper_js_1.validateJSON; } });
|
|
72
|
+
Object.defineProperty(exports, "extractJSON", { enumerable: true, get: function () { return troubleshooting_helper_js_1.extractJSON; } });
|
|
73
|
+
Object.defineProperty(exports, "validateResponse", { enumerable: true, get: function () { return troubleshooting_helper_js_1.validateResponse; } });
|
|
74
|
+
Object.defineProperty(exports, "diagnoseRequest", { enumerable: true, get: function () { return troubleshooting_helper_js_1.diagnoseRequest; } });
|
|
75
|
+
Object.defineProperty(exports, "diagnoseResponse", { enumerable: true, get: function () { return troubleshooting_helper_js_1.diagnoseResponse; } });
|
|
76
|
+
Object.defineProperty(exports, "supportsJSONMode", { enumerable: true, get: function () { return troubleshooting_helper_js_1.supportsJSONMode; } });
|
|
77
|
+
Object.defineProperty(exports, "createTestAIRequest", { enumerable: true, get: function () { return troubleshooting_helper_js_1.createTestAIRequest; } });
|
|
78
|
+
Object.defineProperty(exports, "createValidationTestCases", { enumerable: true, get: function () { return troubleshooting_helper_js_1.createValidationTestCases; } });
|
|
79
|
+
Object.defineProperty(exports, "runValidationTests", { enumerable: true, get: function () { return troubleshooting_helper_js_1.runValidationTests; } });
|
|
80
|
+
Object.defineProperty(exports, "formatDiagnostic", { enumerable: true, get: function () { return troubleshooting_helper_js_1.formatDiagnostic; } });
|
|
81
|
+
Object.defineProperty(exports, "assertValidAIRequest", { enumerable: true, get: function () { return troubleshooting_helper_js_1.assertValidAIRequest; } });
|
|
82
|
+
// Export object types library
|
|
83
|
+
var object_types_library_js_1 = require("./object-types-library.cjs");
|
|
84
|
+
Object.defineProperty(exports, "OBJECT_TYPES_LIBRARY", { enumerable: true, get: function () { return object_types_library_js_1.OBJECT_TYPES_LIBRARY; } });
|
|
85
|
+
Object.defineProperty(exports, "getObjectType", { enumerable: true, get: function () { return object_types_library_js_1.getObjectType; } });
|
|
86
|
+
Object.defineProperty(exports, "getObjectTypesForAgent", { enumerable: true, get: function () { return object_types_library_js_1.getObjectTypesForAgent; } });
|
|
87
|
+
// Re-export outputs library integration functions
|
|
88
|
+
var object_types_library_integration_js_1 = require("./object-types-library-integration.cjs");
|
|
89
|
+
Object.defineProperty(exports, "initializeObjectTypesLibrary", { enumerable: true, get: function () { return object_types_library_integration_js_1.initializeObjectTypesLibrary; } });
|
|
90
|
+
Object.defineProperty(exports, "getObjectTypesLibrary", { enumerable: true, get: function () { return object_types_library_integration_js_1.getObjectTypesLibrary; } });
|
|
91
|
+
Object.defineProperty(exports, "resetObjectTypesLibrary", { enumerable: true, get: function () { return object_types_library_integration_js_1.resetObjectTypesLibrary; } });
|
|
92
|
+
// Re-export outputs library types and utilities for convenience
|
|
93
|
+
// Note: Since we use dynamic imports for the outputs library, these types may not be available
|
|
94
|
+
// at compile time if the package isn't installed. Users can import directly from
|
|
95
|
+
// @x12i/outputs-library if they need these types or utilities.
|
|
96
|
+
//
|
|
97
|
+
// Recommended: Import types and utilities directly from @x12i/outputs-library:
|
|
98
|
+
// import type { ClassificationOutput } from '@x12i/outputs-library/types';
|
|
99
|
+
// import { ResponseParser } from '@x12i/outputs-library/parsers';
|
|
100
|
+
// import type { ObjectTypesLibrary, FlexMdSupport } from '@x12i/outputs-library';
|
|
101
|
+
//
|
|
102
|
+
// The gateway integrates with the outputs library internally via dynamic imports,
|
|
103
|
+
// so these re-exports are optional and mainly for convenience.
|
|
104
|
+
//
|
|
105
|
+
// For outputs-library v3.3.1+ with flex-md support:
|
|
106
|
+
// - ObjectTypesLibrary class with flex-md methods (getFlexMdTemplate, getFlexMdFormatSpec, etc.)
|
|
107
|
+
// - FlexMdSupport type for object type definitions
|
|
108
|
+
// - All flex-md methods are available on the library instance returned by getObjectTypesLibrary()
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @x12i/ai-gateway
|
|
3
|
+
*
|
|
4
|
+
* Unified gateway for LLM provider routing and management.
|
|
5
|
+
* This package exposes all functionality from @x12i/ai-providers-router
|
|
6
|
+
* with enhanced features: context propagation, usage tier tracking, and comprehensive metadata.
|
|
7
|
+
*/
|
|
8
|
+
export { LLMProviderRouter } from '@x12i/ai-providers-router';
|
|
9
|
+
export type { RouterConfig, HealthCheckResult } from '@x12i/ai-providers-router';
|
|
10
|
+
export { createRouter, createRouterFromConfig } from '@x12i/ai-providers-router';
|
|
11
|
+
export type { CreateRouterConfig } from '@x12i/ai-providers-router';
|
|
12
|
+
export { ProviderNotFoundError, FallbackExhaustedError } from '@x12i/ai-providers-router';
|
|
13
|
+
export type { RequestInterceptor, ResponseInterceptor } from '@x12i/ai-providers-router';
|
|
14
|
+
export type { UsageTracker } from '@x12i/ai-providers-router';
|
|
15
|
+
export * from '@x12i/ai-providers-router';
|
|
16
|
+
export { AIGateway } from './gateway.js';
|
|
17
|
+
export { InstructionNotFoundError, InstructionBackendError } from './instruction-errors.js';
|
|
18
|
+
export { autoRegisterProviders } from './gateway-provider-auto-register.js';
|
|
19
|
+
export type { GatewayConfig, ProviderModelRef, ModelConfig, RetryConfig, ChatRequest, AIRequest, EnhancedLLMResponse, InstructionMetadata, ValidationRule, ResponseTransformationConfig, TemplateRenderOptions } from './types.js';
|
|
20
|
+
export { mergeTemplateRenderOptions } from './template-render-merge.js';
|
|
21
|
+
export type { UsageTier } from './types.js';
|
|
22
|
+
export { Activix } from '@x12i/activix';
|
|
23
|
+
export type { ActivixRunContext, FindByRunContextCriteria } from '@x12i/activix';
|
|
24
|
+
export { ActivityManager, ensureGatewayRequestIdentity } from './activity-manager.js';
|
|
25
|
+
export type { ActivityIdentity } from './types.js';
|
|
26
|
+
export { createLogxer } from '@x12i/logxer';
|
|
27
|
+
export type { Logxer } from '@x12i/logxer';
|
|
28
|
+
export { runtimeObjects } from './runtime-objects.js';
|
|
29
|
+
export type { ActivixQueryableClient, LogxerQueryableClient, PackageRuntimeObjects, RuntimeObjects } from './runtime-objects.js';
|
|
30
|
+
export { GatewayRateLimiter } from './gateway-rate-limiter.js';
|
|
31
|
+
export { DEFAULT_RATE_LIMIT_MIN_INTERVAL_MS, DEFAULT_RATE_LIMIT_ENABLED } from './gateway-rate-limiter-constants.js';
|
|
32
|
+
export { validateAIRequest, validateJSON, extractJSON, validateResponse, diagnoseRequest, diagnoseResponse, supportsJSONMode, createTestAIRequest, createValidationTestCases, runValidationTests, formatDiagnostic, assertValidAIRequest } from './troubleshooting-helper.js';
|
|
33
|
+
export type { ValidationResult, DiagnosticInfo } from './troubleshooting-helper.js';
|
|
34
|
+
export { OBJECT_TYPES_LIBRARY, getObjectType, getObjectTypesForAgent } from './object-types-library.js';
|
|
35
|
+
export type { ReasoningResult, AuditReport, ScopeDefinition, DiscoveryFindings, ActionPlan, ExecutionResult } from './object-types-library.js';
|
|
36
|
+
export { initializeObjectTypesLibrary, getObjectTypesLibrary, resetObjectTypesLibrary } from './object-types-library-integration.js';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Errors for instruction / prompt template and instructions-block resolution.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.InstructionBackendError = exports.InstructionNotFoundError = void 0;
|
|
7
|
+
class InstructionNotFoundError extends Error {
|
|
8
|
+
key;
|
|
9
|
+
backend;
|
|
10
|
+
originalKey;
|
|
11
|
+
constructor(key, backend, message, originalKey) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.key = key;
|
|
14
|
+
this.backend = backend;
|
|
15
|
+
this.originalKey = originalKey;
|
|
16
|
+
this.name = 'InstructionNotFoundError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.InstructionNotFoundError = InstructionNotFoundError;
|
|
20
|
+
class InstructionBackendError extends Error {
|
|
21
|
+
key;
|
|
22
|
+
backend;
|
|
23
|
+
isRetryable;
|
|
24
|
+
originalError;
|
|
25
|
+
constructor(key, backend, message, isRetryable, originalError) {
|
|
26
|
+
super(message);
|
|
27
|
+
this.key = key;
|
|
28
|
+
this.backend = backend;
|
|
29
|
+
this.isRetryable = isRetryable;
|
|
30
|
+
this.originalError = originalError;
|
|
31
|
+
this.name = 'InstructionBackendError';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.InstructionBackendError = InstructionBackendError;
|