@juspay/neurolink 7.28.0 → 7.29.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/CHANGELOG.md +13 -0
- package/dist/cli/commands/ollama.d.ts +3 -0
- package/dist/cli/commands/ollama.js +288 -0
- package/dist/cli/factories/ollamaCommandFactory.d.ts +4 -0
- package/dist/cli/factories/ollamaCommandFactory.js +86 -93
- package/dist/cli/utils/ollamaUtils.d.ts +24 -0
- package/dist/cli/utils/ollamaUtils.js +161 -0
- package/dist/core/baseProvider.js +4 -2
- package/dist/index.d.ts +2 -3
- package/dist/index.js +1 -2
- package/dist/lib/core/baseProvider.js +4 -2
- package/dist/lib/core/dynamicModels.d.ts +6 -6
- package/dist/lib/index.d.ts +2 -3
- package/dist/lib/index.js +1 -2
- package/dist/lib/middleware/builtin/analytics.js +13 -14
- package/dist/lib/middleware/builtin/guardrails.d.ts +20 -0
- package/dist/lib/middleware/builtin/guardrails.js +87 -0
- package/dist/lib/middleware/factory.d.ts +29 -14
- package/dist/lib/middleware/factory.js +136 -110
- package/dist/lib/middleware/index.d.ts +3 -49
- package/dist/lib/middleware/index.js +4 -58
- package/dist/lib/middleware/registry.d.ts +1 -3
- package/dist/lib/middleware/registry.js +4 -5
- package/dist/lib/middleware/types.d.ts +3 -1
- package/dist/middleware/builtin/analytics.js +13 -14
- package/dist/middleware/builtin/guardrails.d.ts +20 -0
- package/dist/middleware/builtin/guardrails.js +87 -0
- package/dist/middleware/factory.d.ts +29 -14
- package/dist/middleware/factory.js +136 -110
- package/dist/middleware/index.d.ts +3 -49
- package/dist/middleware/index.js +4 -58
- package/dist/middleware/registry.d.ts +1 -3
- package/dist/middleware/registry.js +4 -5
- package/dist/middleware/types.d.ts +3 -1
- package/package.json +1 -1
|
@@ -1,36 +1,51 @@
|
|
|
1
1
|
import type { LanguageModelV1 } from "ai";
|
|
2
|
-
import type { MiddlewareContext, MiddlewareConfig, MiddlewareFactoryOptions, MiddlewareChainStats } from "./types.js";
|
|
2
|
+
import type { MiddlewareContext, MiddlewareConfig, MiddlewareFactoryOptions, MiddlewareChainStats, MiddlewarePreset, NeuroLinkMiddleware, MiddlewareRegistrationOptions } from "./types.js";
|
|
3
|
+
import { MiddlewareRegistry } from "./registry.js";
|
|
3
4
|
/**
|
|
4
|
-
* Middleware factory for creating and applying middleware chains
|
|
5
|
+
* Middleware factory for creating and applying middleware chains.
|
|
6
|
+
* Each factory instance manages its own registry and configuration.
|
|
5
7
|
*/
|
|
6
8
|
export declare class MiddlewareFactory {
|
|
9
|
+
registry: MiddlewareRegistry;
|
|
10
|
+
presets: Map<string, MiddlewarePreset>;
|
|
11
|
+
private options;
|
|
12
|
+
constructor(options?: MiddlewareFactoryOptions);
|
|
13
|
+
/**
|
|
14
|
+
* Initialize the factory with built-in middleware and presets
|
|
15
|
+
*/
|
|
16
|
+
private initialize;
|
|
17
|
+
/**
|
|
18
|
+
* Register a custom preset
|
|
19
|
+
*/
|
|
20
|
+
registerPreset(preset: MiddlewarePreset, replace?: boolean): void;
|
|
21
|
+
/**
|
|
22
|
+
* Register a custom middleware
|
|
23
|
+
*/
|
|
24
|
+
register(middleware: NeuroLinkMiddleware, options?: MiddlewareRegistrationOptions): void;
|
|
7
25
|
/**
|
|
8
26
|
* Apply middleware to a language model
|
|
9
27
|
*/
|
|
10
|
-
|
|
28
|
+
applyMiddleware(model: LanguageModelV1, context: MiddlewareContext, options?: MiddlewareFactoryOptions): LanguageModelV1;
|
|
29
|
+
private getCreator;
|
|
11
30
|
/**
|
|
12
31
|
* Build middleware configuration from factory options
|
|
13
32
|
*/
|
|
14
|
-
private
|
|
33
|
+
private buildMiddlewareConfig;
|
|
15
34
|
/**
|
|
16
35
|
* Get preset configuration
|
|
17
36
|
*/
|
|
18
|
-
private
|
|
19
|
-
/**
|
|
20
|
-
* Get built-in preset configurations
|
|
21
|
-
*/
|
|
22
|
-
private static getBuiltInPresets;
|
|
37
|
+
private getPresetConfig;
|
|
23
38
|
/**
|
|
24
39
|
* Create middleware context from provider and options
|
|
25
40
|
*/
|
|
26
|
-
|
|
41
|
+
createContext(provider: string, model: string, options?: Record<string, unknown>, session?: {
|
|
27
42
|
sessionId?: string;
|
|
28
43
|
userId?: string;
|
|
29
44
|
}): MiddlewareContext;
|
|
30
45
|
/**
|
|
31
46
|
* Validate middleware configuration
|
|
32
47
|
*/
|
|
33
|
-
|
|
48
|
+
validateConfig(config: Record<string, MiddlewareConfig>): {
|
|
34
49
|
isValid: boolean;
|
|
35
50
|
errors: string[];
|
|
36
51
|
warnings: string[];
|
|
@@ -38,7 +53,7 @@ export declare class MiddlewareFactory {
|
|
|
38
53
|
/**
|
|
39
54
|
* Get available presets
|
|
40
55
|
*/
|
|
41
|
-
|
|
56
|
+
getAvailablePresets(): Array<{
|
|
42
57
|
name: string;
|
|
43
58
|
description: string;
|
|
44
59
|
middleware: string[];
|
|
@@ -46,9 +61,9 @@ export declare class MiddlewareFactory {
|
|
|
46
61
|
/**
|
|
47
62
|
* Get middleware chain statistics
|
|
48
63
|
*/
|
|
49
|
-
|
|
64
|
+
getChainStats(context: MiddlewareContext, config: Record<string, MiddlewareConfig>): MiddlewareChainStats;
|
|
50
65
|
/**
|
|
51
66
|
* Create a middleware-enabled model factory function
|
|
52
67
|
*/
|
|
53
|
-
|
|
68
|
+
createModelFactory(baseModelFactory: () => Promise<LanguageModelV1>, defaultOptions?: MiddlewareFactoryOptions): (context: MiddlewareContext, options?: MiddlewareFactoryOptions) => Promise<LanguageModelV1>;
|
|
54
69
|
}
|
|
@@ -1,20 +1,104 @@
|
|
|
1
1
|
import { wrapLanguageModel } from "ai";
|
|
2
|
-
import {
|
|
2
|
+
import { MiddlewareRegistry } from "./registry.js";
|
|
3
|
+
import { createAnalyticsMiddleware } from "./builtin/analytics.js";
|
|
4
|
+
import { createGuardrailsMiddleware } from "./builtin/guardrails.js";
|
|
3
5
|
import { logger } from "../utils/logger.js";
|
|
4
6
|
/**
|
|
5
|
-
* Middleware factory for creating and applying middleware chains
|
|
7
|
+
* Middleware factory for creating and applying middleware chains.
|
|
8
|
+
* Each factory instance manages its own registry and configuration.
|
|
6
9
|
*/
|
|
7
10
|
export class MiddlewareFactory {
|
|
11
|
+
registry;
|
|
12
|
+
presets = new Map();
|
|
13
|
+
options;
|
|
14
|
+
constructor(options = {}) {
|
|
15
|
+
this.options = options;
|
|
16
|
+
this.registry = new MiddlewareRegistry();
|
|
17
|
+
this.initialize(options);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Initialize the factory with built-in middleware and presets
|
|
21
|
+
*/
|
|
22
|
+
initialize(options) {
|
|
23
|
+
// Register built-in middleware creators
|
|
24
|
+
const builtInMiddlewareCreators = {
|
|
25
|
+
analytics: createAnalyticsMiddleware,
|
|
26
|
+
guardrails: createGuardrailsMiddleware,
|
|
27
|
+
};
|
|
28
|
+
// Register built-in presets
|
|
29
|
+
this.registerPreset({
|
|
30
|
+
name: "default",
|
|
31
|
+
description: "Default preset with analytics enabled.",
|
|
32
|
+
config: { analytics: { enabled: true } },
|
|
33
|
+
});
|
|
34
|
+
this.registerPreset({
|
|
35
|
+
name: "all",
|
|
36
|
+
description: "Enables all available middleware.",
|
|
37
|
+
config: { analytics: { enabled: true }, guardrails: { enabled: true } },
|
|
38
|
+
});
|
|
39
|
+
this.registerPreset({
|
|
40
|
+
name: "security",
|
|
41
|
+
description: "Focuses on security with guardrails.",
|
|
42
|
+
config: { guardrails: { enabled: true } },
|
|
43
|
+
});
|
|
44
|
+
// Register custom middleware if provided
|
|
45
|
+
if (options.middleware) {
|
|
46
|
+
for (const customMiddleware of options.middleware) {
|
|
47
|
+
this.register(customMiddleware);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Register all built-in middleware so they are available to be configured
|
|
51
|
+
for (const middlewareId in builtInMiddlewareCreators) {
|
|
52
|
+
if (!this.registry.has(middlewareId)) {
|
|
53
|
+
const creator = builtInMiddlewareCreators[middlewareId];
|
|
54
|
+
const config = options.middlewareConfig?.[middlewareId]?.config;
|
|
55
|
+
this.registry.register(creator(config));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Register a custom preset
|
|
61
|
+
*/
|
|
62
|
+
registerPreset(preset, replace = false) {
|
|
63
|
+
if (this.presets.has(preset.name) && !replace) {
|
|
64
|
+
throw new Error(`Preset with name '${preset.name}' already exists. Use replace: true to override.`);
|
|
65
|
+
}
|
|
66
|
+
this.presets.set(preset.name, preset);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Register a custom middleware
|
|
70
|
+
*/
|
|
71
|
+
register(middleware, options) {
|
|
72
|
+
this.registry.register(middleware, options);
|
|
73
|
+
}
|
|
8
74
|
/**
|
|
9
75
|
* Apply middleware to a language model
|
|
10
76
|
*/
|
|
11
|
-
|
|
77
|
+
applyMiddleware(model, context, options = {}) {
|
|
12
78
|
const startTime = Date.now();
|
|
13
79
|
try {
|
|
80
|
+
// Merge constructor options with call-time options
|
|
81
|
+
const mergedOptions = {
|
|
82
|
+
...this.options,
|
|
83
|
+
...options,
|
|
84
|
+
middlewareConfig: {
|
|
85
|
+
...this.options.middlewareConfig,
|
|
86
|
+
...options.middlewareConfig,
|
|
87
|
+
},
|
|
88
|
+
};
|
|
14
89
|
// Build middleware configuration
|
|
15
|
-
const middlewareConfig = this.buildMiddlewareConfig(
|
|
90
|
+
const middlewareConfig = this.buildMiddlewareConfig(mergedOptions);
|
|
91
|
+
// Re-register middleware with the correct configuration for this call
|
|
92
|
+
for (const [id, config] of Object.entries(middlewareConfig)) {
|
|
93
|
+
if (config.enabled && this.registry.has(id)) {
|
|
94
|
+
const creator = this.getCreator(id);
|
|
95
|
+
if (creator) {
|
|
96
|
+
this.registry.register(creator(config.config), { replace: true });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
16
100
|
// Build middleware chain
|
|
17
|
-
const middlewareChain =
|
|
101
|
+
const middlewareChain = this.registry.buildChain(context, middlewareConfig);
|
|
18
102
|
if (middlewareChain.length === 0) {
|
|
19
103
|
logger.debug("No middleware to apply", { provider: context.provider });
|
|
20
104
|
return model;
|
|
@@ -47,25 +131,47 @@ export class MiddlewareFactory {
|
|
|
47
131
|
return model;
|
|
48
132
|
}
|
|
49
133
|
}
|
|
134
|
+
getCreator(id) {
|
|
135
|
+
const builtInMiddlewareCreators = {
|
|
136
|
+
analytics: createAnalyticsMiddleware,
|
|
137
|
+
guardrails: createGuardrailsMiddleware,
|
|
138
|
+
};
|
|
139
|
+
return builtInMiddlewareCreators[id];
|
|
140
|
+
}
|
|
50
141
|
/**
|
|
51
142
|
* Build middleware configuration from factory options
|
|
52
143
|
*/
|
|
53
|
-
|
|
144
|
+
buildMiddlewareConfig(options) {
|
|
54
145
|
const config = {};
|
|
55
|
-
|
|
56
|
-
|
|
146
|
+
const allMiddleware = this.registry.list();
|
|
147
|
+
// Initialize all middleware as disabled. Configuration will enable them.
|
|
57
148
|
for (const middleware of allMiddleware) {
|
|
58
|
-
// Default configuration
|
|
59
149
|
config[middleware.metadata.id] = {
|
|
60
|
-
enabled:
|
|
150
|
+
enabled: false,
|
|
61
151
|
config: {},
|
|
62
152
|
};
|
|
63
153
|
}
|
|
64
|
-
//
|
|
65
|
-
|
|
66
|
-
|
|
154
|
+
// Determine which preset to use.
|
|
155
|
+
let presetName = options.preset;
|
|
156
|
+
// If no preset is given, and no other specific middleware config is provided, use the default.
|
|
157
|
+
if (!presetName &&
|
|
158
|
+
(!options.middlewareConfig ||
|
|
159
|
+
Object.keys(options.middlewareConfig).length === 0) &&
|
|
160
|
+
(!options.enabledMiddleware || options.enabledMiddleware.length === 0)) {
|
|
161
|
+
presetName = "default";
|
|
162
|
+
}
|
|
163
|
+
// Apply preset configuration
|
|
164
|
+
if (presetName) {
|
|
165
|
+
const presetConfig = this.getPresetConfig(presetName);
|
|
67
166
|
if (presetConfig) {
|
|
68
|
-
Object.
|
|
167
|
+
for (const [middlewareId, middlewareConfig] of Object.entries(presetConfig)) {
|
|
168
|
+
if (config[middlewareId]) {
|
|
169
|
+
config[middlewareId] = {
|
|
170
|
+
...config[middlewareId],
|
|
171
|
+
...middlewareConfig,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
}
|
|
69
175
|
}
|
|
70
176
|
}
|
|
71
177
|
// Apply explicit middleware configurations
|
|
@@ -98,59 +204,14 @@ export class MiddlewareFactory {
|
|
|
98
204
|
/**
|
|
99
205
|
* Get preset configuration
|
|
100
206
|
*/
|
|
101
|
-
|
|
102
|
-
const
|
|
103
|
-
return
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Get built-in preset configurations
|
|
107
|
-
*/
|
|
108
|
-
static getBuiltInPresets() {
|
|
109
|
-
return {
|
|
110
|
-
// Development preset - logging and basic analytics
|
|
111
|
-
development: {
|
|
112
|
-
logging: { enabled: true },
|
|
113
|
-
analytics: { enabled: true },
|
|
114
|
-
},
|
|
115
|
-
// Production preset - analytics, caching, rate limiting
|
|
116
|
-
production: {
|
|
117
|
-
analytics: { enabled: true },
|
|
118
|
-
caching: { enabled: true },
|
|
119
|
-
rateLimit: { enabled: true },
|
|
120
|
-
retry: { enabled: true },
|
|
121
|
-
},
|
|
122
|
-
// Security preset - guardrails and content filtering
|
|
123
|
-
security: {
|
|
124
|
-
guardrails: { enabled: true },
|
|
125
|
-
logging: { enabled: true },
|
|
126
|
-
rateLimit: { enabled: true },
|
|
127
|
-
},
|
|
128
|
-
// Performance preset - caching and optimization
|
|
129
|
-
performance: {
|
|
130
|
-
caching: { enabled: true },
|
|
131
|
-
retry: { enabled: true },
|
|
132
|
-
timeout: { enabled: true },
|
|
133
|
-
},
|
|
134
|
-
// Enterprise preset - all middleware enabled
|
|
135
|
-
enterprise: {
|
|
136
|
-
analytics: { enabled: true },
|
|
137
|
-
guardrails: { enabled: true },
|
|
138
|
-
logging: { enabled: true },
|
|
139
|
-
caching: { enabled: true },
|
|
140
|
-
rateLimit: { enabled: true },
|
|
141
|
-
retry: { enabled: true },
|
|
142
|
-
timeout: { enabled: true },
|
|
143
|
-
},
|
|
144
|
-
// Minimal preset - only essential middleware
|
|
145
|
-
minimal: {
|
|
146
|
-
analytics: { enabled: true },
|
|
147
|
-
},
|
|
148
|
-
};
|
|
207
|
+
getPresetConfig(presetName) {
|
|
208
|
+
const preset = this.presets.get(presetName);
|
|
209
|
+
return preset ? preset.config : null;
|
|
149
210
|
}
|
|
150
211
|
/**
|
|
151
212
|
* Create middleware context from provider and options
|
|
152
213
|
*/
|
|
153
|
-
|
|
214
|
+
createContext(provider, model, options = {}, session) {
|
|
154
215
|
return {
|
|
155
216
|
provider,
|
|
156
217
|
model,
|
|
@@ -165,12 +226,12 @@ export class MiddlewareFactory {
|
|
|
165
226
|
/**
|
|
166
227
|
* Validate middleware configuration
|
|
167
228
|
*/
|
|
168
|
-
|
|
229
|
+
validateConfig(config) {
|
|
169
230
|
const errors = [];
|
|
170
231
|
const warnings = [];
|
|
171
232
|
for (const [middlewareId, middlewareConfig] of Object.entries(config)) {
|
|
172
233
|
// Check if middleware is registered
|
|
173
|
-
if (!
|
|
234
|
+
if (!this.registry.has(middlewareId)) {
|
|
174
235
|
errors.push(`Middleware '${middlewareId}' is not registered`);
|
|
175
236
|
continue;
|
|
176
237
|
}
|
|
@@ -198,54 +259,19 @@ export class MiddlewareFactory {
|
|
|
198
259
|
/**
|
|
199
260
|
* Get available presets
|
|
200
261
|
*/
|
|
201
|
-
|
|
202
|
-
return
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
},
|
|
208
|
-
{
|
|
209
|
-
name: "production",
|
|
210
|
-
description: "Optimized for production with caching and rate limiting",
|
|
211
|
-
middleware: ["analytics", "caching", "rateLimit", "retry"],
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
name: "security",
|
|
215
|
-
description: "Enhanced security with guardrails and monitoring",
|
|
216
|
-
middleware: ["guardrails", "logging", "rateLimit"],
|
|
217
|
-
},
|
|
218
|
-
{
|
|
219
|
-
name: "performance",
|
|
220
|
-
description: "Optimized for performance with caching and retries",
|
|
221
|
-
middleware: ["caching", "retry", "timeout"],
|
|
222
|
-
},
|
|
223
|
-
{
|
|
224
|
-
name: "enterprise",
|
|
225
|
-
description: "Full enterprise feature set with all middleware",
|
|
226
|
-
middleware: [
|
|
227
|
-
"analytics",
|
|
228
|
-
"guardrails",
|
|
229
|
-
"logging",
|
|
230
|
-
"caching",
|
|
231
|
-
"rateLimit",
|
|
232
|
-
"retry",
|
|
233
|
-
"timeout",
|
|
234
|
-
],
|
|
235
|
-
},
|
|
236
|
-
{
|
|
237
|
-
name: "minimal",
|
|
238
|
-
description: "Minimal overhead with only essential features",
|
|
239
|
-
middleware: ["analytics"],
|
|
240
|
-
},
|
|
241
|
-
];
|
|
262
|
+
getAvailablePresets() {
|
|
263
|
+
return Array.from(this.presets.values()).map((preset) => ({
|
|
264
|
+
name: preset.name,
|
|
265
|
+
description: preset.description,
|
|
266
|
+
middleware: Object.keys(preset.config),
|
|
267
|
+
}));
|
|
242
268
|
}
|
|
243
269
|
/**
|
|
244
270
|
* Get middleware chain statistics
|
|
245
271
|
*/
|
|
246
|
-
|
|
247
|
-
const chain =
|
|
248
|
-
const stats =
|
|
272
|
+
getChainStats(context, config) {
|
|
273
|
+
const chain = this.registry.buildChain(context, config);
|
|
274
|
+
const stats = this.registry.getAggregatedStats();
|
|
249
275
|
const results = {};
|
|
250
276
|
let totalExecutionTime = 0;
|
|
251
277
|
let appliedMiddleware = 0;
|
|
@@ -269,7 +295,7 @@ export class MiddlewareFactory {
|
|
|
269
295
|
/**
|
|
270
296
|
* Create a middleware-enabled model factory function
|
|
271
297
|
*/
|
|
272
|
-
|
|
298
|
+
createModelFactory(baseModelFactory, defaultOptions = {}) {
|
|
273
299
|
return async (context, options = {}) => {
|
|
274
300
|
// Get base model
|
|
275
301
|
const baseModel = await baseModelFactory();
|
|
@@ -5,54 +5,8 @@
|
|
|
5
5
|
* with the AI SDK's wrapLanguageModel functionality. It allows for modular enhancement
|
|
6
6
|
* of language models with features like analytics, guardrails, caching, and more.
|
|
7
7
|
*/
|
|
8
|
-
import
|
|
8
|
+
import { MiddlewareFactory } from "./factory.js";
|
|
9
9
|
export type { NeuroLinkMiddleware, MiddlewareConfig, MiddlewareContext, MiddlewareConditions, MiddlewareRegistrationOptions, MiddlewareExecutionResult, MiddlewareChainStats, MiddlewarePreset, MiddlewareFactoryOptions, BuiltInMiddlewareType, } from "./types.js";
|
|
10
10
|
export type { LanguageModelV1Middleware } from "ai";
|
|
11
|
-
export {
|
|
12
|
-
export
|
|
13
|
-
/**
|
|
14
|
-
* Convenience function to register a middleware
|
|
15
|
-
*/
|
|
16
|
-
export declare function registerMiddleware(middleware: NeuroLinkMiddleware, options?: MiddlewareRegistrationOptions): void;
|
|
17
|
-
/**
|
|
18
|
-
* Convenience function to unregister a middleware
|
|
19
|
-
*/
|
|
20
|
-
export declare function unregisterMiddleware(middlewareId: string): boolean;
|
|
21
|
-
/**
|
|
22
|
-
* Convenience function to get all registered middleware
|
|
23
|
-
*/
|
|
24
|
-
export declare function listMiddleware(): NeuroLinkMiddleware[];
|
|
25
|
-
/**
|
|
26
|
-
* Convenience function to check if a middleware is registered
|
|
27
|
-
*/
|
|
28
|
-
export declare function hasMiddleware(middlewareId: string): boolean;
|
|
29
|
-
/**
|
|
30
|
-
* Convenience function to get middleware execution statistics
|
|
31
|
-
*/
|
|
32
|
-
export declare function getMiddlewareStats(): Record<string, {
|
|
33
|
-
totalExecutions: number;
|
|
34
|
-
successfulExecutions: number;
|
|
35
|
-
failedExecutions: number;
|
|
36
|
-
averageExecutionTime: number;
|
|
37
|
-
lastExecutionTime: number;
|
|
38
|
-
}>;
|
|
39
|
-
/**
|
|
40
|
-
* Convenience function to clear middleware execution statistics
|
|
41
|
-
*/
|
|
42
|
-
export declare function clearMiddlewareStats(middlewareId?: string): void;
|
|
43
|
-
/**
|
|
44
|
-
* Convenience function to get available middleware presets
|
|
45
|
-
*/
|
|
46
|
-
export declare function getAvailablePresets(): Array<{
|
|
47
|
-
name: string;
|
|
48
|
-
description: string;
|
|
49
|
-
middleware: string[];
|
|
50
|
-
}>;
|
|
51
|
-
/**
|
|
52
|
-
* Convenience function to validate middleware configuration
|
|
53
|
-
*/
|
|
54
|
-
export declare function validateMiddlewareConfig(config: Record<string, MiddlewareConfig>): {
|
|
55
|
-
isValid: boolean;
|
|
56
|
-
errors: string[];
|
|
57
|
-
warnings: string[];
|
|
58
|
-
};
|
|
11
|
+
export { MiddlewareFactory };
|
|
12
|
+
export default MiddlewareFactory;
|
package/dist/middleware/index.js
CHANGED
|
@@ -5,63 +5,9 @@
|
|
|
5
5
|
* with the AI SDK's wrapLanguageModel functionality. It allows for modular enhancement
|
|
6
6
|
* of language models with features like analytics, guardrails, caching, and more.
|
|
7
7
|
*/
|
|
8
|
-
|
|
8
|
+
// Import types and classes
|
|
9
9
|
import { MiddlewareFactory } from "./factory.js";
|
|
10
|
-
// Registry for managing middleware
|
|
11
|
-
export { MiddlewareRegistry, middlewareRegistry } from "./registry.js";
|
|
12
10
|
// Factory for creating and applying middleware chains
|
|
13
|
-
export { MiddlewareFactory }
|
|
14
|
-
//
|
|
15
|
-
|
|
16
|
-
// export { guardrailsMiddleware } from './built-in/guardrails.js';
|
|
17
|
-
// export { loggingMiddleware } from './built-in/logging.js';
|
|
18
|
-
// export { cachingMiddleware } from './built-in/caching.js';
|
|
19
|
-
// export { rateLimitMiddleware } from './built-in/rateLimit.js';
|
|
20
|
-
/**
|
|
21
|
-
* Convenience function to register a middleware
|
|
22
|
-
*/
|
|
23
|
-
export function registerMiddleware(middleware, options) {
|
|
24
|
-
middlewareRegistry.register(middleware, options);
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Convenience function to unregister a middleware
|
|
28
|
-
*/
|
|
29
|
-
export function unregisterMiddleware(middlewareId) {
|
|
30
|
-
return middlewareRegistry.unregister(middlewareId);
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Convenience function to get all registered middleware
|
|
34
|
-
*/
|
|
35
|
-
export function listMiddleware() {
|
|
36
|
-
return middlewareRegistry.list();
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Convenience function to check if a middleware is registered
|
|
40
|
-
*/
|
|
41
|
-
export function hasMiddleware(middlewareId) {
|
|
42
|
-
return middlewareRegistry.has(middlewareId);
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Convenience function to get middleware execution statistics
|
|
46
|
-
*/
|
|
47
|
-
export function getMiddlewareStats() {
|
|
48
|
-
return middlewareRegistry.getAggregatedStats();
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Convenience function to clear middleware execution statistics
|
|
52
|
-
*/
|
|
53
|
-
export function clearMiddlewareStats(middlewareId) {
|
|
54
|
-
middlewareRegistry.clearStats(middlewareId);
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Convenience function to get available middleware presets
|
|
58
|
-
*/
|
|
59
|
-
export function getAvailablePresets() {
|
|
60
|
-
return MiddlewareFactory.getAvailablePresets();
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Convenience function to validate middleware configuration
|
|
64
|
-
*/
|
|
65
|
-
export function validateMiddlewareConfig(config) {
|
|
66
|
-
return MiddlewareFactory.validateConfig(config);
|
|
67
|
-
}
|
|
11
|
+
export { MiddlewareFactory };
|
|
12
|
+
// Export the factory as the default export for clean, direct usage
|
|
13
|
+
export default MiddlewareFactory;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { LanguageModelV1Middleware } from "ai";
|
|
2
2
|
import type { NeuroLinkMiddleware, MiddlewareConfig, MiddlewareContext, MiddlewareRegistrationOptions, MiddlewareExecutionResult } from "./types.js";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* Manages registration, configuration, and execution of middleware
|
|
4
|
+
* Manages the registration, configuration, and execution of middleware for a single factory instance.
|
|
6
5
|
*/
|
|
7
6
|
export declare class MiddlewareRegistry {
|
|
8
7
|
private middleware;
|
|
@@ -75,4 +74,3 @@ export declare class MiddlewareRegistry {
|
|
|
75
74
|
*/
|
|
76
75
|
clear(): void;
|
|
77
76
|
}
|
|
78
|
-
export declare const middlewareRegistry: MiddlewareRegistry;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { logger } from "../utils/logger.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* Manages registration, configuration, and execution of middleware
|
|
3
|
+
* Manages the registration, configuration, and execution of middleware for a single factory instance.
|
|
5
4
|
*/
|
|
6
5
|
export class MiddlewareRegistry {
|
|
7
6
|
middleware = new Map();
|
|
@@ -143,7 +142,9 @@ export class MiddlewareRegistry {
|
|
|
143
142
|
...config?.config,
|
|
144
143
|
};
|
|
145
144
|
// Create wrapper that tracks execution
|
|
146
|
-
const wrappedMiddleware = {
|
|
145
|
+
const wrappedMiddleware = {
|
|
146
|
+
metadata: middleware.metadata,
|
|
147
|
+
};
|
|
147
148
|
if (middleware.transformParams) {
|
|
148
149
|
wrappedMiddleware.transformParams = async (args) => {
|
|
149
150
|
const startTime = Date.now();
|
|
@@ -279,5 +280,3 @@ export class MiddlewareRegistry {
|
|
|
279
280
|
logger.debug("All middleware cleared from registry");
|
|
280
281
|
}
|
|
281
282
|
}
|
|
282
|
-
// Global middleware registry instance
|
|
283
|
-
export const middlewareRegistry = new MiddlewareRegistry();
|
|
@@ -118,12 +118,14 @@ export interface MiddlewarePreset {
|
|
|
118
118
|
/** Description of the preset */
|
|
119
119
|
description: string;
|
|
120
120
|
/** Middleware configurations in the preset */
|
|
121
|
-
|
|
121
|
+
config: Record<string, MiddlewareConfig>;
|
|
122
122
|
}
|
|
123
123
|
/**
|
|
124
124
|
* Factory options for middleware
|
|
125
125
|
*/
|
|
126
126
|
export interface MiddlewareFactoryOptions {
|
|
127
|
+
/** Custom middleware to register on initialization */
|
|
128
|
+
middleware?: NeuroLinkMiddleware[];
|
|
127
129
|
/** Enable specific middleware */
|
|
128
130
|
enabledMiddleware?: string[];
|
|
129
131
|
/** Disable specific middleware */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juspay/neurolink",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.29.0",
|
|
4
4
|
"description": "Universal AI Development Platform with working MCP integration, multi-provider support, and professional CLI. Built-in tools operational, 58+ external MCP servers discoverable. Connect to filesystem, GitHub, database operations, and more. Build, test, and deploy AI applications with 9 major providers: OpenAI, Anthropic, Google AI, AWS Bedrock, Azure, Hugging Face, Ollama, and Mistral AI.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Juspay Technologies",
|