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