ai.matey.core 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 (51) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/bridge.js +657 -0
  3. package/dist/cjs/bridge.js.map +1 -0
  4. package/dist/cjs/capability-inference.js +349 -0
  5. package/dist/cjs/capability-inference.js.map +1 -0
  6. package/dist/cjs/capability-matcher.js +216 -0
  7. package/dist/cjs/capability-matcher.js.map +1 -0
  8. package/dist/cjs/index.js +31 -0
  9. package/dist/cjs/index.js.map +1 -0
  10. package/dist/cjs/middleware-stack.js +256 -0
  11. package/dist/cjs/middleware-stack.js.map +1 -0
  12. package/dist/cjs/model-pricing.js +350 -0
  13. package/dist/cjs/model-pricing.js.map +1 -0
  14. package/dist/cjs/model-translation.js +171 -0
  15. package/dist/cjs/model-translation.js.map +1 -0
  16. package/dist/cjs/router.js +1388 -0
  17. package/dist/cjs/router.js.map +1 -0
  18. package/dist/esm/bridge.js +652 -0
  19. package/dist/esm/bridge.js.map +1 -0
  20. package/dist/esm/capability-inference.js +343 -0
  21. package/dist/esm/capability-inference.js.map +1 -0
  22. package/dist/esm/capability-matcher.js +210 -0
  23. package/dist/esm/capability-matcher.js.map +1 -0
  24. package/dist/esm/index.js +15 -0
  25. package/dist/esm/index.js.map +1 -0
  26. package/dist/esm/middleware-stack.js +250 -0
  27. package/dist/esm/middleware-stack.js.map +1 -0
  28. package/dist/esm/model-pricing.js +340 -0
  29. package/dist/esm/model-pricing.js.map +1 -0
  30. package/dist/esm/model-translation.js +163 -0
  31. package/dist/esm/model-translation.js.map +1 -0
  32. package/dist/esm/router.js +1383 -0
  33. package/dist/esm/router.js.map +1 -0
  34. package/dist/types/bridge.d.ts +254 -0
  35. package/dist/types/bridge.d.ts.map +1 -0
  36. package/dist/types/capability-inference.d.ts +35 -0
  37. package/dist/types/capability-inference.d.ts.map +1 -0
  38. package/dist/types/capability-matcher.d.ts +104 -0
  39. package/dist/types/capability-matcher.d.ts.map +1 -0
  40. package/dist/types/index.d.ts +15 -0
  41. package/dist/types/index.d.ts.map +1 -0
  42. package/dist/types/middleware-stack.d.ts +102 -0
  43. package/dist/types/middleware-stack.d.ts.map +1 -0
  44. package/dist/types/model-pricing.d.ts +81 -0
  45. package/dist/types/model-pricing.d.ts.map +1 -0
  46. package/dist/types/model-translation.d.ts +171 -0
  47. package/dist/types/model-translation.d.ts.map +1 -0
  48. package/dist/types/router.d.ts +287 -0
  49. package/dist/types/router.d.ts.map +1 -0
  50. package/package.json +70 -0
  51. package/readme.md +34 -0
@@ -0,0 +1,250 @@
1
+ /**
2
+ * Middleware Stack Implementation
3
+ *
4
+ * Composable middleware system for request/response transformation.
5
+ * Middleware executes in order with "onion" pattern - each middleware
6
+ * can execute code before and after calling next().
7
+ *
8
+ * @module
9
+ */
10
+ import { MiddlewareError } from 'ai.matey.errors';
11
+ // ============================================================================
12
+ // Middleware Stack
13
+ // ============================================================================
14
+ /**
15
+ * Middleware stack for composing middleware functions.
16
+ *
17
+ * Executes middleware in order with proper error handling and context management.
18
+ */
19
+ export class MiddlewareStack {
20
+ middleware = [];
21
+ streamingMiddleware = [];
22
+ locked = false;
23
+ /**
24
+ * Add middleware to the stack.
25
+ *
26
+ * @param middleware Middleware function to add
27
+ * @throws {MiddlewareError} If stack is locked
28
+ */
29
+ use(middleware) {
30
+ if (this.locked) {
31
+ throw new MiddlewareError({
32
+ message: 'Cannot add middleware after stack is locked',
33
+ middlewareName: 'unknown',
34
+ });
35
+ }
36
+ this.middleware.push(middleware);
37
+ }
38
+ /**
39
+ * Remove middleware from the stack.
40
+ *
41
+ * @param middleware Middleware function to remove
42
+ * @returns true if middleware was found and removed, false otherwise
43
+ * @throws {MiddlewareError} If stack is locked
44
+ */
45
+ remove(middleware) {
46
+ if (this.locked) {
47
+ throw new MiddlewareError({
48
+ message: 'Cannot remove middleware after stack is locked',
49
+ middlewareName: 'unknown',
50
+ });
51
+ }
52
+ const index = this.middleware.indexOf(middleware);
53
+ if (index !== -1) {
54
+ this.middleware.splice(index, 1);
55
+ return true;
56
+ }
57
+ return false;
58
+ }
59
+ /**
60
+ * Add streaming middleware to the stack.
61
+ *
62
+ * @param middleware Streaming middleware function to add
63
+ * @throws {MiddlewareError} If stack is locked
64
+ */
65
+ useStreaming(middleware) {
66
+ if (this.locked) {
67
+ throw new MiddlewareError({
68
+ message: 'Cannot add streaming middleware after stack is locked',
69
+ middlewareName: 'unknown',
70
+ });
71
+ }
72
+ this.streamingMiddleware.push(middleware);
73
+ }
74
+ /**
75
+ * Lock the stack to prevent further modifications.
76
+ *
77
+ * Called automatically on first request execution.
78
+ */
79
+ lock() {
80
+ this.locked = true;
81
+ }
82
+ /**
83
+ * Get all middleware in the stack.
84
+ */
85
+ getMiddleware() {
86
+ return [...this.middleware];
87
+ }
88
+ /**
89
+ * Get all streaming middleware in the stack.
90
+ */
91
+ getStreamingMiddleware() {
92
+ return [...this.streamingMiddleware];
93
+ }
94
+ /**
95
+ * Check if stack is locked.
96
+ */
97
+ isLocked() {
98
+ return this.locked;
99
+ }
100
+ /**
101
+ * Execute middleware stack for non-streaming requests.
102
+ *
103
+ * @param context Middleware context
104
+ * @param finalHandler Final handler function (backend.execute)
105
+ * @returns Response after middleware chain
106
+ */
107
+ async execute(context, finalHandler) {
108
+ // Lock stack on first execution
109
+ if (!this.locked) {
110
+ this.lock();
111
+ }
112
+ // If no middleware, call handler directly
113
+ if (this.middleware.length === 0) {
114
+ return finalHandler();
115
+ }
116
+ // Compose middleware chain
117
+ let index = 0;
118
+ const next = async () => {
119
+ if (index >= this.middleware.length) {
120
+ // End of middleware chain, call final handler
121
+ return finalHandler();
122
+ }
123
+ const middlewareFn = this.middleware[index];
124
+ if (!middlewareFn) {
125
+ // End of middleware chain, call final handler
126
+ return finalHandler();
127
+ }
128
+ index++;
129
+ try {
130
+ return await middlewareFn(context, next);
131
+ }
132
+ catch (error) {
133
+ // Re-throw as MiddlewareError if not already
134
+ if (error instanceof MiddlewareError) {
135
+ throw error;
136
+ }
137
+ throw new MiddlewareError({
138
+ message: `Middleware execution failed: ${error instanceof Error ? error.message : String(error)}`,
139
+ cause: error instanceof Error ? error : undefined,
140
+ irState: {
141
+ request: context.request,
142
+ },
143
+ });
144
+ }
145
+ };
146
+ return next();
147
+ }
148
+ /**
149
+ * Execute middleware stack for streaming requests.
150
+ *
151
+ * @param context Streaming middleware context
152
+ * @param finalHandler Final handler function (backend.executeStream)
153
+ * @returns Stream after middleware chain
154
+ */
155
+ async executeStream(context, finalHandler) {
156
+ // Lock stack on first execution
157
+ if (!this.locked) {
158
+ this.lock();
159
+ }
160
+ // If no streaming middleware, call handler directly
161
+ if (this.streamingMiddleware.length === 0) {
162
+ return finalHandler();
163
+ }
164
+ // Compose streaming middleware chain
165
+ let index = 0;
166
+ const next = async () => {
167
+ if (index >= this.streamingMiddleware.length) {
168
+ // End of middleware chain, call final handler
169
+ return finalHandler();
170
+ }
171
+ const middlewareFn = this.streamingMiddleware[index];
172
+ if (!middlewareFn) {
173
+ // End of middleware chain, call final handler
174
+ return finalHandler();
175
+ }
176
+ index++;
177
+ try {
178
+ return await middlewareFn(context, next);
179
+ }
180
+ catch (error) {
181
+ // Re-throw as MiddlewareError if not already
182
+ if (error instanceof MiddlewareError) {
183
+ throw error;
184
+ }
185
+ throw new MiddlewareError({
186
+ message: `Streaming middleware execution failed: ${error instanceof Error ? error.message : String(error)}`,
187
+ cause: error instanceof Error ? error : undefined,
188
+ irState: {
189
+ request: context.request,
190
+ },
191
+ });
192
+ }
193
+ };
194
+ return next();
195
+ }
196
+ /**
197
+ * Clear all middleware from the stack.
198
+ *
199
+ * @throws {MiddlewareError} If stack is locked
200
+ */
201
+ clear() {
202
+ if (this.locked) {
203
+ throw new MiddlewareError({
204
+ message: 'Cannot clear middleware after stack is locked',
205
+ });
206
+ }
207
+ this.middleware = [];
208
+ this.streamingMiddleware = [];
209
+ }
210
+ }
211
+ // ============================================================================
212
+ // Helper Functions
213
+ // ============================================================================
214
+ /**
215
+ * Create middleware context from request and config.
216
+ *
217
+ * @param request IR request
218
+ * @param config Bridge configuration
219
+ * @param signal Optional abort signal
220
+ * @returns Middleware context
221
+ */
222
+ export function createMiddlewareContext(request, config, signal) {
223
+ return {
224
+ request,
225
+ isStreaming: request.stream ?? false,
226
+ state: {},
227
+ config,
228
+ signal,
229
+ };
230
+ }
231
+ /**
232
+ * Create streaming middleware context from request and config.
233
+ *
234
+ * @param request IR request
235
+ * @param config Bridge configuration
236
+ * @param signal Optional abort signal
237
+ * @returns Streaming middleware context
238
+ */
239
+ export function createStreamingMiddlewareContext(request, config, signal) {
240
+ return {
241
+ request,
242
+ isStreaming: true,
243
+ state: {},
244
+ config,
245
+ signal,
246
+ chunksProcessed: 0,
247
+ streamComplete: false,
248
+ };
249
+ }
250
+ //# sourceMappingURL=middleware-stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-stack.js","sourceRoot":"","sources":["../../src/middleware-stack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,340 @@
1
+ /**
2
+ * Model Pricing Registry
3
+ *
4
+ * Centralized pricing database for AI models across providers.
5
+ * Prices are in USD per 1,000 tokens.
6
+ *
7
+ * @module
8
+ */
9
+ /**
10
+ * Static pricing database for major AI models.
11
+ * Data sourced from provider APIs and community benchmarks (as of October 2024).
12
+ */
13
+ const MODEL_PRICING_DATABASE = {
14
+ // OpenAI Models
15
+ 'gpt-4': {
16
+ pricing: { input: 0.03, output: 0.06 },
17
+ latency: { p50: 2000, p95: 4000 },
18
+ qualityScore: 95,
19
+ modelFamily: 'gpt-4',
20
+ releaseDate: '2023-03-14',
21
+ contextWindow: 8192,
22
+ maxTokens: 4096,
23
+ supportsStreaming: true,
24
+ supportsVision: false,
25
+ supportsTools: true,
26
+ supportsJSON: true,
27
+ },
28
+ 'gpt-4-turbo': {
29
+ pricing: { input: 0.01, output: 0.03 },
30
+ latency: { p50: 1800, p95: 3500 },
31
+ qualityScore: 95,
32
+ modelFamily: 'gpt-4',
33
+ releaseDate: '2024-04-09',
34
+ contextWindow: 128000,
35
+ maxTokens: 4096,
36
+ supportsStreaming: true,
37
+ supportsVision: true,
38
+ supportsTools: true,
39
+ supportsJSON: true,
40
+ },
41
+ 'gpt-4-turbo-preview': {
42
+ pricing: { input: 0.01, output: 0.03 },
43
+ latency: { p50: 1800, p95: 3500 },
44
+ qualityScore: 94,
45
+ modelFamily: 'gpt-4',
46
+ releaseDate: '2024-01-25',
47
+ contextWindow: 128000,
48
+ maxTokens: 4096,
49
+ supportsStreaming: true,
50
+ supportsVision: true,
51
+ supportsTools: true,
52
+ supportsJSON: true,
53
+ },
54
+ 'gpt-3.5-turbo': {
55
+ pricing: { input: 0.0005, output: 0.0015 },
56
+ latency: { p50: 800, p95: 1500 },
57
+ qualityScore: 75,
58
+ modelFamily: 'gpt-3.5',
59
+ releaseDate: '2023-03-01',
60
+ contextWindow: 16385,
61
+ maxTokens: 4096,
62
+ supportsStreaming: true,
63
+ supportsVision: false,
64
+ supportsTools: true,
65
+ supportsJSON: true,
66
+ },
67
+ 'gpt-4o': {
68
+ pricing: { input: 0.005, output: 0.015 },
69
+ latency: { p50: 1200, p95: 2500 },
70
+ qualityScore: 96,
71
+ modelFamily: 'gpt-4',
72
+ releaseDate: '2024-05-13',
73
+ contextWindow: 128000,
74
+ maxTokens: 4096,
75
+ supportsStreaming: true,
76
+ supportsVision: true,
77
+ supportsTools: true,
78
+ supportsJSON: true,
79
+ },
80
+ 'gpt-4o-mini': {
81
+ pricing: { input: 0.00015, output: 0.0006 },
82
+ latency: { p50: 600, p95: 1200 },
83
+ qualityScore: 80,
84
+ modelFamily: 'gpt-4',
85
+ releaseDate: '2024-07-18',
86
+ contextWindow: 128000,
87
+ maxTokens: 16384,
88
+ supportsStreaming: true,
89
+ supportsVision: true,
90
+ supportsTools: true,
91
+ supportsJSON: true,
92
+ },
93
+ // Anthropic Models
94
+ 'claude-3-5-sonnet-20241022': {
95
+ pricing: { input: 0.003, output: 0.015 },
96
+ latency: { p50: 1500, p95: 3000 },
97
+ qualityScore: 97,
98
+ modelFamily: 'claude-3',
99
+ releaseDate: '2024-10-22',
100
+ contextWindow: 200000,
101
+ maxTokens: 8192,
102
+ supportsStreaming: true,
103
+ supportsVision: true,
104
+ supportsTools: true,
105
+ supportsJSON: false,
106
+ },
107
+ 'claude-3-opus-20240229': {
108
+ pricing: { input: 0.015, output: 0.075 },
109
+ latency: { p50: 2200, p95: 4500 },
110
+ qualityScore: 96,
111
+ modelFamily: 'claude-3',
112
+ releaseDate: '2024-02-29',
113
+ contextWindow: 200000,
114
+ maxTokens: 4096,
115
+ supportsStreaming: true,
116
+ supportsVision: true,
117
+ supportsTools: true,
118
+ supportsJSON: false,
119
+ },
120
+ 'claude-3-sonnet-20240229': {
121
+ pricing: { input: 0.003, output: 0.015 },
122
+ latency: { p50: 1600, p95: 3200 },
123
+ qualityScore: 92,
124
+ modelFamily: 'claude-3',
125
+ releaseDate: '2024-02-29',
126
+ contextWindow: 200000,
127
+ maxTokens: 4096,
128
+ supportsStreaming: true,
129
+ supportsVision: true,
130
+ supportsTools: true,
131
+ supportsJSON: false,
132
+ },
133
+ 'claude-3-haiku-20240307': {
134
+ pricing: { input: 0.00025, output: 0.00125 },
135
+ latency: { p50: 400, p95: 800 },
136
+ qualityScore: 78,
137
+ modelFamily: 'claude-3',
138
+ releaseDate: '2024-03-07',
139
+ contextWindow: 200000,
140
+ maxTokens: 4096,
141
+ supportsStreaming: true,
142
+ supportsVision: true,
143
+ supportsTools: true,
144
+ supportsJSON: false,
145
+ },
146
+ 'claude-3-5-haiku-20241022': {
147
+ pricing: { input: 0.001, output: 0.005 },
148
+ latency: { p50: 500, p95: 1000 },
149
+ qualityScore: 82,
150
+ modelFamily: 'claude-3',
151
+ releaseDate: '2024-10-22',
152
+ contextWindow: 200000,
153
+ maxTokens: 8192,
154
+ supportsStreaming: true,
155
+ supportsVision: false,
156
+ supportsTools: true,
157
+ supportsJSON: false,
158
+ },
159
+ // Google Gemini Models
160
+ 'gemini-1.5-pro': {
161
+ pricing: { input: 0.00125, output: 0.005 },
162
+ latency: { p50: 1400, p95: 2800 },
163
+ qualityScore: 93,
164
+ modelFamily: 'gemini-1.5',
165
+ releaseDate: '2024-02-15',
166
+ contextWindow: 1000000,
167
+ maxTokens: 8192,
168
+ supportsStreaming: true,
169
+ supportsVision: true,
170
+ supportsTools: true,
171
+ supportsJSON: true,
172
+ },
173
+ 'gemini-1.5-flash': {
174
+ pricing: { input: 0.000075, output: 0.0003 },
175
+ latency: { p50: 600, p95: 1200 },
176
+ qualityScore: 80,
177
+ modelFamily: 'gemini-1.5',
178
+ releaseDate: '2024-05-14',
179
+ contextWindow: 1000000,
180
+ maxTokens: 8192,
181
+ supportsStreaming: true,
182
+ supportsVision: true,
183
+ supportsTools: true,
184
+ supportsJSON: true,
185
+ },
186
+ 'gemini-1.5-flash-8b': {
187
+ pricing: { input: 0.0000375, output: 0.00015 },
188
+ latency: { p50: 400, p95: 800 },
189
+ qualityScore: 70,
190
+ modelFamily: 'gemini-1.5',
191
+ releaseDate: '2024-10-03',
192
+ contextWindow: 1000000,
193
+ maxTokens: 8192,
194
+ supportsStreaming: true,
195
+ supportsVision: true,
196
+ supportsTools: true,
197
+ supportsJSON: true,
198
+ },
199
+ // Mistral AI Models
200
+ 'mistral-large-latest': {
201
+ pricing: { input: 0.002, output: 0.006 },
202
+ latency: { p50: 1300, p95: 2600 },
203
+ qualityScore: 90,
204
+ modelFamily: 'mistral',
205
+ releaseDate: '2024-07-24',
206
+ contextWindow: 128000,
207
+ maxTokens: 4096,
208
+ supportsStreaming: true,
209
+ supportsVision: false,
210
+ supportsTools: true,
211
+ supportsJSON: true,
212
+ },
213
+ 'mistral-medium-latest': {
214
+ pricing: { input: 0.0027, output: 0.0081 },
215
+ latency: { p50: 1100, p95: 2200 },
216
+ qualityScore: 85,
217
+ modelFamily: 'mistral',
218
+ releaseDate: '2023-12-11',
219
+ contextWindow: 32000,
220
+ maxTokens: 4096,
221
+ supportsStreaming: true,
222
+ supportsVision: false,
223
+ supportsTools: true,
224
+ supportsJSON: true,
225
+ },
226
+ 'mistral-small-latest': {
227
+ pricing: { input: 0.001, output: 0.003 },
228
+ latency: { p50: 700, p95: 1400 },
229
+ qualityScore: 78,
230
+ modelFamily: 'mistral',
231
+ releaseDate: '2024-02-26',
232
+ contextWindow: 32000,
233
+ maxTokens: 4096,
234
+ supportsStreaming: true,
235
+ supportsVision: false,
236
+ supportsTools: true,
237
+ supportsJSON: true,
238
+ },
239
+ // DeepSeek Models
240
+ 'deepseek-chat': {
241
+ pricing: { input: 0.00014, output: 0.00028 },
242
+ latency: { p50: 900, p95: 1800 },
243
+ qualityScore: 82,
244
+ modelFamily: 'deepseek',
245
+ releaseDate: '2024-01-01',
246
+ contextWindow: 64000,
247
+ maxTokens: 4096,
248
+ supportsStreaming: true,
249
+ supportsVision: false,
250
+ supportsTools: true,
251
+ supportsJSON: true,
252
+ },
253
+ 'deepseek-coder': {
254
+ pricing: { input: 0.00014, output: 0.00028 },
255
+ latency: { p50: 900, p95: 1800 },
256
+ qualityScore: 88,
257
+ modelFamily: 'deepseek',
258
+ releaseDate: '2024-01-01',
259
+ contextWindow: 64000,
260
+ maxTokens: 4096,
261
+ supportsStreaming: true,
262
+ supportsVision: false,
263
+ supportsTools: true,
264
+ supportsJSON: true,
265
+ },
266
+ };
267
+ /**
268
+ * Get pricing information for a specific model.
269
+ *
270
+ * @param modelId - The model identifier (e.g., "gpt-4", "claude-3-opus-20240229")
271
+ * @returns Pricing data or null if not found
272
+ */
273
+ export function getModelPricing(modelId) {
274
+ const data = MODEL_PRICING_DATABASE[modelId];
275
+ return data?.pricing ?? null;
276
+ }
277
+ /**
278
+ * Get extended capabilities for a specific model.
279
+ *
280
+ * @param modelId - The model identifier
281
+ * @returns Extended capabilities or null if not found
282
+ */
283
+ export function getModelCapabilities(modelId) {
284
+ return MODEL_PRICING_DATABASE[modelId] ?? null;
285
+ }
286
+ /**
287
+ * Get all models with pricing data.
288
+ *
289
+ * @returns Array of model IDs with pricing information
290
+ */
291
+ export function getAllPricedModels() {
292
+ return Object.keys(MODEL_PRICING_DATABASE);
293
+ }
294
+ /**
295
+ * Find models by model family.
296
+ *
297
+ * @param family - The model family (e.g., "gpt-4", "claude-3")
298
+ * @returns Array of model IDs in the family
299
+ */
300
+ export function getModelsByFamily(family) {
301
+ return Object.keys(MODEL_PRICING_DATABASE).filter((modelId) => MODEL_PRICING_DATABASE[modelId]?.modelFamily === family);
302
+ }
303
+ /**
304
+ * User-defined pricing overrides.
305
+ * Allows users to specify custom pricing for models.
306
+ */
307
+ const pricingOverrides = new Map();
308
+ /**
309
+ * Set custom pricing for a model (overrides static database).
310
+ *
311
+ * @param modelId - The model identifier
312
+ * @param pricing - Custom pricing data
313
+ */
314
+ export function setPricingOverride(modelId, pricing) {
315
+ pricingOverrides.set(modelId, pricing);
316
+ }
317
+ /**
318
+ * Clear pricing override for a model.
319
+ *
320
+ * @param modelId - The model identifier
321
+ */
322
+ export function clearPricingOverride(modelId) {
323
+ pricingOverrides.delete(modelId);
324
+ }
325
+ /**
326
+ * Clear all pricing overrides.
327
+ */
328
+ export function clearAllPricingOverrides() {
329
+ pricingOverrides.clear();
330
+ }
331
+ /**
332
+ * Get pricing with user overrides applied.
333
+ *
334
+ * @param modelId - The model identifier
335
+ * @returns Pricing data (override if set, else from database)
336
+ */
337
+ export function getPricingWithOverrides(modelId) {
338
+ return pricingOverrides.get(modelId) ?? getModelPricing(modelId);
339
+ }
340
+ //# sourceMappingURL=model-pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-pricing.js","sourceRoot":"","sources":["../../src/model-pricing.ts"],"names":[],"mappings":"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"}