ai.matey.middleware 0.2.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 (69) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/caching.js +226 -0
  3. package/dist/cjs/caching.js.map +1 -0
  4. package/dist/cjs/conversation-history.js +213 -0
  5. package/dist/cjs/conversation-history.js.map +1 -0
  6. package/dist/cjs/cost-tracking.js +355 -0
  7. package/dist/cjs/cost-tracking.js.map +1 -0
  8. package/dist/cjs/index.js +37 -0
  9. package/dist/cjs/index.js.map +1 -0
  10. package/dist/cjs/logging.js +174 -0
  11. package/dist/cjs/logging.js.map +1 -0
  12. package/dist/cjs/opentelemetry.js +499 -0
  13. package/dist/cjs/opentelemetry.js.map +1 -0
  14. package/dist/cjs/retry.js +205 -0
  15. package/dist/cjs/retry.js.map +1 -0
  16. package/dist/cjs/security.js +175 -0
  17. package/dist/cjs/security.js.map +1 -0
  18. package/dist/cjs/telemetry.js +216 -0
  19. package/dist/cjs/telemetry.js.map +1 -0
  20. package/dist/cjs/transform.js +284 -0
  21. package/dist/cjs/transform.js.map +1 -0
  22. package/dist/cjs/validation.js +506 -0
  23. package/dist/cjs/validation.js.map +1 -0
  24. package/dist/esm/caching.js +221 -0
  25. package/dist/esm/caching.js.map +1 -0
  26. package/dist/esm/conversation-history.js +207 -0
  27. package/dist/esm/conversation-history.js.map +1 -0
  28. package/dist/esm/cost-tracking.js +347 -0
  29. package/dist/esm/cost-tracking.js.map +1 -0
  30. package/dist/esm/index.js +21 -0
  31. package/dist/esm/index.js.map +1 -0
  32. package/dist/esm/logging.js +171 -0
  33. package/dist/esm/logging.js.map +1 -0
  34. package/dist/esm/opentelemetry.js +458 -0
  35. package/dist/esm/opentelemetry.js.map +1 -0
  36. package/dist/esm/retry.js +198 -0
  37. package/dist/esm/retry.js.map +1 -0
  38. package/dist/esm/security.js +169 -0
  39. package/dist/esm/security.js.map +1 -0
  40. package/dist/esm/telemetry.js +210 -0
  41. package/dist/esm/telemetry.js.map +1 -0
  42. package/dist/esm/transform.js +272 -0
  43. package/dist/esm/transform.js.map +1 -0
  44. package/dist/esm/validation.js +494 -0
  45. package/dist/esm/validation.js.map +1 -0
  46. package/dist/types/caching.d.ts +98 -0
  47. package/dist/types/caching.d.ts.map +1 -0
  48. package/dist/types/conversation-history.d.ts +188 -0
  49. package/dist/types/conversation-history.d.ts.map +1 -0
  50. package/dist/types/cost-tracking.d.ts +262 -0
  51. package/dist/types/cost-tracking.d.ts.map +1 -0
  52. package/dist/types/index.d.ts +20 -0
  53. package/dist/types/index.d.ts.map +1 -0
  54. package/dist/types/logging.d.ts +82 -0
  55. package/dist/types/logging.d.ts.map +1 -0
  56. package/dist/types/opentelemetry.d.ts +219 -0
  57. package/dist/types/opentelemetry.d.ts.map +1 -0
  58. package/dist/types/retry.d.ts +86 -0
  59. package/dist/types/retry.d.ts.map +1 -0
  60. package/dist/types/security.d.ts +120 -0
  61. package/dist/types/security.d.ts.map +1 -0
  62. package/dist/types/telemetry.d.ts +120 -0
  63. package/dist/types/telemetry.d.ts.map +1 -0
  64. package/dist/types/transform.d.ts +184 -0
  65. package/dist/types/transform.d.ts.map +1 -0
  66. package/dist/types/validation.d.ts +356 -0
  67. package/dist/types/validation.d.ts.map +1 -0
  68. package/package.json +203 -0
  69. package/readme.md +103 -0
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ /**
3
+ * Transform Middleware
4
+ *
5
+ * Transforms requests and responses with custom functions.
6
+ *
7
+ * @module
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.createTransformMiddleware = createTransformMiddleware;
11
+ exports.createPromptRewriter = createPromptRewriter;
12
+ exports.createParameterModifier = createParameterModifier;
13
+ exports.createResponseFilter = createResponseFilter;
14
+ exports.createSystemMessageInjector = createSystemMessageInjector;
15
+ exports.createMessageFilter = createMessageFilter;
16
+ exports.createContentSanitizer = createContentSanitizer;
17
+ exports.composeRequestTransformers = composeRequestTransformers;
18
+ exports.composeResponseTransformers = composeResponseTransformers;
19
+ exports.composeMessageTransformers = composeMessageTransformers;
20
+ // ============================================================================
21
+ // Middleware Factory
22
+ // ============================================================================
23
+ /**
24
+ * Create transform middleware.
25
+ *
26
+ * Applies custom transformations to requests and responses.
27
+ *
28
+ * @param config Transform configuration
29
+ * @returns Transform middleware
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * // Add system message prefix
34
+ * const transform = createTransformMiddleware({
35
+ * transformRequest: (request) => ({
36
+ * ...request,
37
+ * messages: [
38
+ * { role: 'system', content: 'You are helpful.' },
39
+ * ...request.messages
40
+ * ]
41
+ * })
42
+ * });
43
+ *
44
+ * bridge.use(transform);
45
+ * ```
46
+ */
47
+ function createTransformMiddleware(config = {}) {
48
+ const { transformRequest, transformResponse, transformMessages } = config;
49
+ return async (context, next) => {
50
+ let request = context.request;
51
+ // Apply message transformations
52
+ if (transformMessages) {
53
+ const transformedMessages = await Promise.all(request.messages.map((msg) => Promise.resolve(transformMessages(msg))));
54
+ request = {
55
+ ...request,
56
+ messages: transformedMessages,
57
+ };
58
+ }
59
+ // Apply request transformation
60
+ if (transformRequest) {
61
+ request = await transformRequest(request);
62
+ }
63
+ // Update context with transformed request
64
+ context.request = request;
65
+ // Call next middleware/handler
66
+ let response = await next();
67
+ // Apply response transformation
68
+ if (transformResponse) {
69
+ response = await transformResponse(response);
70
+ }
71
+ return response;
72
+ };
73
+ }
74
+ // ============================================================================
75
+ // Built-in Transformers
76
+ // ============================================================================
77
+ /**
78
+ * Create a prompt rewriting transformer.
79
+ *
80
+ * @param rewriter Function to rewrite prompt text
81
+ * @returns Message transformer
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * const transformer = createPromptRewriter((text) => {
86
+ * return text.replace(/foo/g, 'bar');
87
+ * });
88
+ * ```
89
+ */
90
+ function createPromptRewriter(rewriter) {
91
+ return async (message) => {
92
+ // Only transform text content
93
+ if (typeof message.content === 'string') {
94
+ return {
95
+ ...message,
96
+ content: await rewriter(message.content),
97
+ };
98
+ }
99
+ // Transform text in content blocks
100
+ if (Array.isArray(message.content)) {
101
+ const transformedContent = await Promise.all(message.content.map(async (block) => {
102
+ if (block.type === 'text') {
103
+ return {
104
+ ...block,
105
+ text: await rewriter(block.text),
106
+ };
107
+ }
108
+ return block;
109
+ }));
110
+ return {
111
+ ...message,
112
+ content: transformedContent,
113
+ };
114
+ }
115
+ return message;
116
+ };
117
+ }
118
+ /**
119
+ * Create a parameter modifier transformer.
120
+ *
121
+ * @param modifier Function to modify parameters
122
+ * @returns Request transformer
123
+ *
124
+ * @example
125
+ * ```typescript
126
+ * const transformer = createParameterModifier((params) => ({
127
+ * ...params,
128
+ * temperature: Math.min(params.temperature ?? 0.7, 0.9)
129
+ * }));
130
+ * ```
131
+ */
132
+ function createParameterModifier(modifier) {
133
+ return async (request) => {
134
+ return {
135
+ ...request,
136
+ parameters: await modifier(request.parameters),
137
+ };
138
+ };
139
+ }
140
+ /**
141
+ * Create a response filter transformer.
142
+ *
143
+ * @param filter Function to filter/modify response
144
+ * @returns Response transformer
145
+ *
146
+ * @example
147
+ * ```typescript
148
+ * const transformer = createResponseFilter((response) => {
149
+ * // Remove custom metadata
150
+ * const { custom, ...metadata } = response.metadata;
151
+ * return { ...response, metadata };
152
+ * });
153
+ * ```
154
+ */
155
+ function createResponseFilter(filter) {
156
+ return filter;
157
+ }
158
+ /**
159
+ * Create a system message injector.
160
+ *
161
+ * @param systemMessage System message to inject
162
+ * @param position Where to inject ('start' or 'end')
163
+ * @returns Request transformer
164
+ *
165
+ * @example
166
+ * ```typescript
167
+ * const transformer = createSystemMessageInjector(
168
+ * 'You are a helpful assistant.',
169
+ * 'start'
170
+ * );
171
+ * ```
172
+ */
173
+ function createSystemMessageInjector(systemMessage, position = 'start') {
174
+ return (request) => {
175
+ const systemMsg = {
176
+ role: 'system',
177
+ content: systemMessage,
178
+ };
179
+ const messages = position === 'start' ? [systemMsg, ...request.messages] : [...request.messages, systemMsg];
180
+ return {
181
+ ...request,
182
+ messages,
183
+ };
184
+ };
185
+ }
186
+ /**
187
+ * Create a message filter transformer.
188
+ *
189
+ * @param predicate Function to determine if message should be kept
190
+ * @returns Request transformer
191
+ *
192
+ * @example
193
+ * ```typescript
194
+ * // Remove all system messages
195
+ * const transformer = createMessageFilter(
196
+ * (msg) => msg.role !== 'system'
197
+ * );
198
+ * ```
199
+ */
200
+ function createMessageFilter(predicate) {
201
+ return async (request) => {
202
+ const filteredMessages = [];
203
+ for (const message of request.messages) {
204
+ if (await predicate(message)) {
205
+ filteredMessages.push(message);
206
+ }
207
+ }
208
+ return {
209
+ ...request,
210
+ messages: filteredMessages,
211
+ };
212
+ };
213
+ }
214
+ /**
215
+ * Create a content sanitizer transformer.
216
+ *
217
+ * @param sanitizer Function to sanitize message content
218
+ * @returns Message transformer
219
+ *
220
+ * @example
221
+ * ```typescript
222
+ * // Remove sensitive data
223
+ * const transformer = createContentSanitizer((text) => {
224
+ * return text.replace(/\b\d{3}-\d{2}-\d{4}\b/g, '[SSN]');
225
+ * });
226
+ * ```
227
+ */
228
+ function createContentSanitizer(sanitizer) {
229
+ return createPromptRewriter(sanitizer);
230
+ }
231
+ /**
232
+ * Compose multiple request transformers.
233
+ *
234
+ * @param transformers Request transformers to compose
235
+ * @returns Composed request transformer
236
+ *
237
+ * @example
238
+ * ```typescript
239
+ * const composed = composeRequestTransformers(
240
+ * createSystemMessageInjector('Be helpful'),
241
+ * createParameterModifier(params => ({ ...params, temperature: 0.7 }))
242
+ * );
243
+ * ```
244
+ */
245
+ function composeRequestTransformers(...transformers) {
246
+ return async (request) => {
247
+ let result = request;
248
+ for (const transformer of transformers) {
249
+ result = await transformer(result);
250
+ }
251
+ return result;
252
+ };
253
+ }
254
+ /**
255
+ * Compose multiple response transformers.
256
+ *
257
+ * @param transformers Response transformers to compose
258
+ * @returns Composed response transformer
259
+ */
260
+ function composeResponseTransformers(...transformers) {
261
+ return async (response) => {
262
+ let result = response;
263
+ for (const transformer of transformers) {
264
+ result = await transformer(result);
265
+ }
266
+ return result;
267
+ };
268
+ }
269
+ /**
270
+ * Compose multiple message transformers.
271
+ *
272
+ * @param transformers Message transformers to compose
273
+ * @returns Composed message transformer
274
+ */
275
+ function composeMessageTransformers(...transformers) {
276
+ return async (message) => {
277
+ let result = message;
278
+ for (const transformer of transformers) {
279
+ result = await transformer(result);
280
+ }
281
+ return result;
282
+ };
283
+ }
284
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/transform.ts"],"names":[],"mappings":"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"}