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,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":"AAAA;;;;;;;GAOG;AA0BH;;;GAGG;AACH,MAAM,sBAAsB,GAAuD;IACjF,gBAAgB;IAChB,OAAO,EAAE;QACP,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QACtC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;QACjC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,IAAI;QACnB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;KACnB;IACD,aAAa,EAAE;QACb,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QACtC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;QACjC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,MAAM;QACrB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;KACnB;IACD,qBAAqB,EAAE;QACrB,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QACtC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;QACjC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,MAAM;QACrB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;KACnB;IACD,eAAe,EAAE;QACf,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;QAC1C,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;QAChC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,SAAS;QACtB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;KACnB;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;QACxC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;QACjC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,MAAM;QACrB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;KACnB;IACD,aAAa,EAAE;QACb,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;QAC3C,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;QAChC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,MAAM;QACrB,SAAS,EAAE,KAAK;QAChB,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;KACnB;IAED,mBAAmB;IACnB,4BAA4B,EAAE;QAC5B,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;QACxC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;QACjC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,MAAM;QACrB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,KAAK;KACpB;IACD,wBAAwB,EAAE;QACxB,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;QACxC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;QACjC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,MAAM;QACrB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,KAAK;KACpB;IACD,0BAA0B,EAAE;QAC1B,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;QACxC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;QACjC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,MAAM;QACrB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,KAAK;KACpB;IACD,yBAAyB,EAAE;QACzB,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAC5C,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;QAC/B,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,MAAM;QACrB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,KAAK;KACpB;IACD,2BAA2B,EAAE;QAC3B,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;QACxC,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;QAChC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,MAAM;QACrB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,KAAK;KACpB;IAED,uBAAuB;IACvB,gBAAgB,EAAE;QAChB,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;QAC1C,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;QACjC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,OAAO;QACtB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;KACnB;IACD,kBAAkB,EAAE;QAClB,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE;QAC5C,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;QAChC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,OAAO;QACtB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;KACnB;IACD,qBAAqB,EAAE;QACrB,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;QAC9C,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;QAC/B,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,YAAY;QACzB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,OAAO;QACtB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;KACnB;IAED,oBAAoB;IACpB,sBAAsB,EAAE;QACtB,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;QACxC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;QACjC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,SAAS;QACtB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,MAAM;QACrB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;KACnB;IACD,uBAAuB,EAAE;QACvB,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;QAC1C,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;QACjC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,SAAS;QACtB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;KACnB;IACD,sBAAsB,EAAE;QACtB,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;QACxC,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;QAChC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,SAAS;QACtB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;KACnB;IAED,kBAAkB;IAClB,eAAe,EAAE;QACf,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAC5C,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;QAChC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;KACnB;IACD,gBAAgB,EAAE;QAChB,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;QAC5C,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;QAChC,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,IAAI;QACf,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;KACnB;CACF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,OAAO,sBAAsB,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAC/C,CAAC,OAAO,EAAE,EAAE,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,WAAW,KAAK,MAAM,CACrE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAwB,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,OAAqB;IACvE,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,OAAO,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;AACnE,CAAC"}
|