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,343 @@
1
+ /**
2
+ * Capability Inference
3
+ *
4
+ * Infers model capabilities from model names and metadata when explicit
5
+ * capability data is not available.
6
+ *
7
+ * @module
8
+ */
9
+ import { getModelCapabilities } from './model-pricing.js';
10
+ /**
11
+ * Infer capabilities for a model based on its name and optional metadata.
12
+ *
13
+ * Uses pattern matching on model names to determine likely capabilities.
14
+ * Falls back to pricing database if available.
15
+ *
16
+ * @param modelName - The model name/ID
17
+ * @param metadata - Optional metadata to aid inference
18
+ * @returns Inferred capabilities
19
+ */
20
+ export function inferCapabilities(modelName, metadata) {
21
+ // Try pricing database first
22
+ const dbCapabilities = getModelCapabilities(modelName);
23
+ if (dbCapabilities) {
24
+ return dbCapabilities;
25
+ }
26
+ // Infer from model name patterns
27
+ const normalized = modelName.toLowerCase();
28
+ // Detect model family
29
+ const modelFamily = detectModelFamily(normalized);
30
+ // Infer capabilities by family
31
+ const familyCapabilities = modelFamily ? getDefaultCapabilitiesByFamily(modelFamily) : {};
32
+ // Override with pattern-specific capabilities
33
+ const patternCapabilities = inferFromPatterns(normalized);
34
+ // Apply metadata if provided
35
+ const metadataCapabilities = metadata ? inferFromMetadata(metadata) : {};
36
+ // Merge all sources
37
+ return {
38
+ ...familyCapabilities,
39
+ ...patternCapabilities,
40
+ ...metadataCapabilities,
41
+ };
42
+ }
43
+ /**
44
+ * Detect model family from model name.
45
+ */
46
+ function detectModelFamily(normalizedName) {
47
+ // GPT family
48
+ if (normalizedName.includes('gpt-4o')) {
49
+ return 'gpt-4';
50
+ }
51
+ if (normalizedName.includes('gpt-4')) {
52
+ return 'gpt-4';
53
+ }
54
+ if (normalizedName.includes('gpt-3.5')) {
55
+ return 'gpt-3.5';
56
+ }
57
+ if (normalizedName.includes('gpt-3')) {
58
+ return 'gpt-3';
59
+ }
60
+ // Claude family
61
+ if (normalizedName.includes('claude-3.5')) {
62
+ return 'claude-3';
63
+ }
64
+ if (normalizedName.includes('claude-3')) {
65
+ return 'claude-3';
66
+ }
67
+ if (normalizedName.includes('claude-2')) {
68
+ return 'claude-2';
69
+ }
70
+ // Gemini family
71
+ if (normalizedName.includes('gemini-1.5')) {
72
+ return 'gemini-1.5';
73
+ }
74
+ if (normalizedName.includes('gemini-1.0')) {
75
+ return 'gemini-1.0';
76
+ }
77
+ if (normalizedName.includes('gemini')) {
78
+ return 'gemini-1.5';
79
+ }
80
+ // Mistral family
81
+ if (normalizedName.includes('mistral')) {
82
+ return 'mistral';
83
+ }
84
+ // Llama family
85
+ if (normalizedName.includes('llama-3')) {
86
+ return 'llama-3';
87
+ }
88
+ if (normalizedName.includes('llama-2')) {
89
+ return 'llama-2';
90
+ }
91
+ if (normalizedName.includes('llama')) {
92
+ return 'llama-2';
93
+ }
94
+ // Other families
95
+ if (normalizedName.includes('deepseek')) {
96
+ return 'deepseek';
97
+ }
98
+ if (normalizedName.includes('qwen')) {
99
+ return 'qwen';
100
+ }
101
+ if (normalizedName.includes('phi')) {
102
+ return 'phi';
103
+ }
104
+ if (normalizedName.includes('mixtral')) {
105
+ return 'mixtral';
106
+ }
107
+ return undefined;
108
+ }
109
+ /**
110
+ * Get default capabilities for a model family.
111
+ */
112
+ function getDefaultCapabilitiesByFamily(family) {
113
+ const defaults = {
114
+ 'gpt-4': {
115
+ contextWindow: 8192,
116
+ maxTokens: 4096,
117
+ supportsStreaming: true,
118
+ supportsTools: true,
119
+ supportsJSON: true,
120
+ qualityScore: 90,
121
+ },
122
+ 'gpt-3.5': {
123
+ contextWindow: 16385,
124
+ maxTokens: 4096,
125
+ supportsStreaming: true,
126
+ supportsTools: true,
127
+ supportsJSON: true,
128
+ qualityScore: 75,
129
+ },
130
+ 'claude-3': {
131
+ contextWindow: 200000,
132
+ maxTokens: 4096,
133
+ supportsStreaming: true,
134
+ supportsTools: true,
135
+ supportsJSON: false,
136
+ qualityScore: 92,
137
+ },
138
+ 'claude-2': {
139
+ contextWindow: 100000,
140
+ maxTokens: 4096,
141
+ supportsStreaming: true,
142
+ supportsTools: false,
143
+ supportsJSON: false,
144
+ qualityScore: 85,
145
+ },
146
+ 'gemini-1.5': {
147
+ contextWindow: 1000000,
148
+ maxTokens: 8192,
149
+ supportsStreaming: true,
150
+ supportsVision: true,
151
+ supportsTools: true,
152
+ supportsJSON: true,
153
+ qualityScore: 88,
154
+ },
155
+ mistral: {
156
+ contextWindow: 32000,
157
+ maxTokens: 4096,
158
+ supportsStreaming: true,
159
+ supportsTools: true,
160
+ supportsJSON: true,
161
+ qualityScore: 82,
162
+ },
163
+ 'llama-3': {
164
+ contextWindow: 8192,
165
+ maxTokens: 2048,
166
+ supportsStreaming: true,
167
+ supportsTools: false,
168
+ supportsJSON: false,
169
+ qualityScore: 78,
170
+ },
171
+ 'llama-2': {
172
+ contextWindow: 4096,
173
+ maxTokens: 2048,
174
+ supportsStreaming: true,
175
+ supportsTools: false,
176
+ supportsJSON: false,
177
+ qualityScore: 70,
178
+ },
179
+ deepseek: {
180
+ contextWindow: 64000,
181
+ maxTokens: 4096,
182
+ supportsStreaming: true,
183
+ supportsTools: true,
184
+ supportsJSON: true,
185
+ qualityScore: 82,
186
+ },
187
+ };
188
+ return defaults[family] ?? {};
189
+ }
190
+ /**
191
+ * Infer capabilities from specific patterns in the model name.
192
+ */
193
+ function inferFromPatterns(normalizedName) {
194
+ const capabilities = {};
195
+ // Vision support
196
+ if (normalizedName.includes('vision') ||
197
+ normalizedName.includes('gpt-4o') ||
198
+ normalizedName.includes('gpt-4-turbo') ||
199
+ normalizedName.includes('gemini')) {
200
+ capabilities.supportsVision = true;
201
+ }
202
+ // Extended context windows
203
+ if (normalizedName.includes('turbo') && normalizedName.includes('gpt-4')) {
204
+ capabilities.contextWindow = 128000;
205
+ }
206
+ if (normalizedName.includes('128k')) {
207
+ capabilities.contextWindow = 128000;
208
+ }
209
+ if (normalizedName.includes('32k')) {
210
+ capabilities.contextWindow = 32000;
211
+ }
212
+ // Speed indicators
213
+ if (normalizedName.includes('flash') || normalizedName.includes('haiku')) {
214
+ capabilities.latency = { p50: 500, p95: 1000 };
215
+ }
216
+ if (normalizedName.includes('turbo')) {
217
+ capabilities.latency = { p50: 1000, p95: 2000 };
218
+ }
219
+ return capabilities;
220
+ }
221
+ /**
222
+ * Infer capabilities from model metadata.
223
+ */
224
+ function inferFromMetadata(metadata) {
225
+ const capabilities = {};
226
+ // Check for explicit capability flags
227
+ if (typeof metadata.supportsVision === 'boolean') {
228
+ capabilities.supportsVision = metadata.supportsVision;
229
+ }
230
+ if (typeof metadata.supportsTools === 'boolean') {
231
+ capabilities.supportsTools = metadata.supportsTools;
232
+ }
233
+ if (typeof metadata.supportsJSON === 'boolean') {
234
+ capabilities.supportsJSON = metadata.supportsJSON;
235
+ }
236
+ if (typeof metadata.supportsStreaming === 'boolean') {
237
+ capabilities.supportsStreaming = metadata.supportsStreaming;
238
+ }
239
+ // Extract context window
240
+ if (typeof metadata.contextWindow === 'number') {
241
+ capabilities.contextWindow = metadata.contextWindow;
242
+ }
243
+ else if (typeof metadata.context_window === 'number') {
244
+ capabilities.contextWindow = metadata.context_window;
245
+ }
246
+ else if (typeof metadata.max_context_length === 'number') {
247
+ capabilities.contextWindow = metadata.max_context_length;
248
+ }
249
+ // Extract max tokens
250
+ if (typeof metadata.maxTokens === 'number') {
251
+ capabilities.maxTokens = metadata.maxTokens;
252
+ }
253
+ else if (typeof metadata.max_tokens === 'number') {
254
+ capabilities.maxTokens = metadata.max_tokens;
255
+ }
256
+ return capabilities;
257
+ }
258
+ /**
259
+ * Merge multiple capability sources with priority.
260
+ * Later sources override earlier ones.
261
+ */
262
+ export function mergeCapabilities(...sources) {
263
+ const merged = {};
264
+ for (const source of sources) {
265
+ if (!source) {
266
+ continue;
267
+ }
268
+ Object.assign(merged, source);
269
+ }
270
+ return merged;
271
+ }
272
+ /**
273
+ * Check if a model meets minimum capability requirements.
274
+ */
275
+ export function meetsRequirements(capabilities, requirements) {
276
+ // Check boolean capabilities
277
+ if (requirements.supportsStreaming && !capabilities.supportsStreaming) {
278
+ return false;
279
+ }
280
+ if (requirements.supportsVision && !capabilities.supportsVision) {
281
+ return false;
282
+ }
283
+ if (requirements.supportsTools && !capabilities.supportsTools) {
284
+ return false;
285
+ }
286
+ if (requirements.supportsJSON && !capabilities.supportsJSON) {
287
+ return false;
288
+ }
289
+ // Check numeric capabilities (minimums)
290
+ if (requirements.contextWindow &&
291
+ (!capabilities.contextWindow || capabilities.contextWindow < requirements.contextWindow)) {
292
+ return false;
293
+ }
294
+ if (requirements.maxTokens &&
295
+ (!capabilities.maxTokens || capabilities.maxTokens < requirements.maxTokens)) {
296
+ return false;
297
+ }
298
+ return true;
299
+ }
300
+ /**
301
+ * Calculate similarity score between two capability sets.
302
+ * Returns a score from 0-100.
303
+ */
304
+ export function calculateCapabilitySimilarity(caps1, caps2) {
305
+ let matches = 0;
306
+ let total = 0;
307
+ // Compare boolean capabilities
308
+ const booleanFields = [
309
+ 'supportsStreaming',
310
+ 'supportsVision',
311
+ 'supportsTools',
312
+ 'supportsJSON',
313
+ ];
314
+ for (const field of booleanFields) {
315
+ if (caps1[field] !== undefined || caps2[field] !== undefined) {
316
+ total++;
317
+ if (caps1[field] === caps2[field]) {
318
+ matches++;
319
+ }
320
+ }
321
+ }
322
+ // Compare model family
323
+ if (caps1.modelFamily || caps2.modelFamily) {
324
+ total++;
325
+ if (caps1.modelFamily === caps2.modelFamily) {
326
+ matches++;
327
+ }
328
+ }
329
+ // Compare numeric ranges (within 20% = similar)
330
+ if (caps1.contextWindow && caps2.contextWindow) {
331
+ total++;
332
+ const ratio = Math.min(caps1.contextWindow, caps2.contextWindow) /
333
+ Math.max(caps1.contextWindow, caps2.contextWindow);
334
+ if (ratio >= 0.8) {
335
+ matches++;
336
+ }
337
+ }
338
+ if (total === 0) {
339
+ return 0;
340
+ }
341
+ return (matches / total) * 100;
342
+ }
343
+ //# sourceMappingURL=capability-inference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-inference.js","sourceRoot":"","sources":["../../src/capability-inference.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Capability Matcher
3
+ *
4
+ * Intelligent model matching based on capability requirements.
5
+ * Scores and ranks models to find the best match for user needs.
6
+ *
7
+ * @module
8
+ */
9
+ import { inferCapabilities, meetsRequirements } from './capability-inference.js';
10
+ /**
11
+ * Default scoring weights by optimization strategy.
12
+ */
13
+ const OPTIMIZATION_WEIGHTS = {
14
+ cost: { cost: 0.6, speed: 0.2, quality: 0.2 },
15
+ speed: { cost: 0.2, speed: 0.6, quality: 0.2 },
16
+ quality: { cost: 0.2, speed: 0.2, quality: 0.6 },
17
+ balanced: { cost: 0.33, speed: 0.33, quality: 0.34 },
18
+ };
19
+ /**
20
+ * Match and score models based on capability requirements.
21
+ *
22
+ * @param requirements - Capability requirements to match
23
+ * @param availableModels - Available models with their backends
24
+ * @returns Sorted array of scored models (best matches first)
25
+ */
26
+ export function matchModels(requirements, availableModels) {
27
+ const scoredModels = [];
28
+ for (const { model, backend } of availableModels) {
29
+ // Get or infer capabilities
30
+ const capabilities = model.capabilities ?? inferCapabilities(model.id, model.metadata);
31
+ // Check hard requirements
32
+ const meetsHardRequirements = requirements.required
33
+ ? meetsRequirements(capabilities, requirements.required)
34
+ : true;
35
+ // Score the model
36
+ const scored = scoreModel(model, backend, capabilities, requirements);
37
+ scored.meetsRequirements = meetsHardRequirements;
38
+ scoredModels.push(scored);
39
+ }
40
+ // Sort by score (descending), then by whether requirements are met
41
+ return scoredModels.sort((a, b) => {
42
+ // Prioritize models that meet requirements
43
+ if (a.meetsRequirements !== b.meetsRequirements) {
44
+ return a.meetsRequirements ? -1 : 1;
45
+ }
46
+ // Then by score
47
+ return b.score - a.score;
48
+ });
49
+ }
50
+ /**
51
+ * Score a single model based on requirements.
52
+ */
53
+ function scoreModel(model, backend, capabilities, requirements) {
54
+ // Get scoring weights
55
+ const weights = requirements.weights ?? OPTIMIZATION_WEIGHTS[requirements.optimization ?? 'balanced'];
56
+ // Calculate individual scores
57
+ const costScore = scoreCost(capabilities, requirements.preferred);
58
+ const speedScore = scoreSpeed(capabilities, requirements.preferred);
59
+ const qualityScore = scoreQuality(capabilities, requirements.preferred);
60
+ // Calculate weighted total
61
+ const totalScore = Math.round(costScore * weights.cost + speedScore * weights.speed + qualityScore * weights.quality);
62
+ // Determine match reason
63
+ const matchReason = determineMatchReason({ costScore, speedScore, qualityScore }, weights, requirements.optimization ?? 'balanced');
64
+ return {
65
+ model,
66
+ backend,
67
+ score: totalScore,
68
+ breakdown: {
69
+ costScore,
70
+ speedScore,
71
+ qualityScore,
72
+ },
73
+ matchReason,
74
+ meetsRequirements: true, // Will be set correctly by matchModels
75
+ };
76
+ }
77
+ /**
78
+ * Score cost (lower cost = higher score).
79
+ */
80
+ function scoreCost(capabilities, preferred) {
81
+ if (!capabilities.pricing) {
82
+ return 50; // Neutral score if no pricing data
83
+ }
84
+ // Calculate average cost per 1k tokens (assuming 50/50 input/output ratio)
85
+ const avgCost = (capabilities.pricing.input + capabilities.pricing.output) / 2;
86
+ // If max cost specified, score based on how far below it is
87
+ if (preferred?.maxCostPer1kTokens) {
88
+ if (avgCost > preferred.maxCostPer1kTokens) {
89
+ return 0; // Exceeds max cost
90
+ }
91
+ // Score: 100 at free, 0 at maxCost
92
+ return Math.round(100 * (1 - avgCost / preferred.maxCostPer1kTokens));
93
+ }
94
+ // Otherwise, score based on absolute cost (cheaper = better)
95
+ // Assume $0.10/1k tokens is expensive (score=0), free is perfect (score=100)
96
+ const maxExpensiveCost = 0.1;
97
+ const score = Math.max(0, 100 * (1 - avgCost / maxExpensiveCost));
98
+ return Math.round(score);
99
+ }
100
+ /**
101
+ * Score speed (lower latency = higher score).
102
+ */
103
+ function scoreSpeed(capabilities, preferred) {
104
+ const latency = capabilities.latency?.p95 ?? capabilities.latency?.p50;
105
+ if (!latency) {
106
+ return 50; // Neutral score if no latency data
107
+ }
108
+ // If max latency specified, score based on how far below it is
109
+ if (preferred?.maxLatencyMs) {
110
+ if (latency > preferred.maxLatencyMs) {
111
+ return 0; // Exceeds max latency
112
+ }
113
+ // Score: 100 at instant, 0 at maxLatency
114
+ return Math.round(100 * (1 - latency / preferred.maxLatencyMs));
115
+ }
116
+ // Otherwise, score based on absolute latency (faster = better)
117
+ // Assume 5000ms is slow (score=0), instant is perfect (score=100)
118
+ const maxSlowLatency = 5000;
119
+ const score = Math.max(0, 100 * (1 - latency / maxSlowLatency));
120
+ return Math.round(score);
121
+ }
122
+ /**
123
+ * Score quality (higher quality = higher score).
124
+ */
125
+ function scoreQuality(capabilities, preferred) {
126
+ const quality = capabilities.qualityScore;
127
+ if (!quality) {
128
+ return 50; // Neutral score if no quality data
129
+ }
130
+ // If min quality specified, check threshold
131
+ if (preferred?.minQualityScore) {
132
+ if (quality < preferred.minQualityScore) {
133
+ return 0; // Below minimum quality
134
+ }
135
+ }
136
+ // Quality score is already 0-100, return as-is
137
+ return Math.round(quality);
138
+ }
139
+ /**
140
+ * Determine human-readable match reason.
141
+ */
142
+ function determineMatchReason(breakdown, _weights, optimization) {
143
+ const { costScore, speedScore, qualityScore } = breakdown;
144
+ // Determine which metric is prioritized
145
+ if (optimization === 'cost') {
146
+ if (costScore >= 80) {
147
+ return 'Best cost efficiency';
148
+ }
149
+ if (costScore >= 60) {
150
+ return 'Good cost/quality balance';
151
+ }
152
+ return 'Meets cost requirements';
153
+ }
154
+ if (optimization === 'speed') {
155
+ if (speedScore >= 80) {
156
+ return 'Fastest response time';
157
+ }
158
+ if (speedScore >= 60) {
159
+ return 'Good speed/quality balance';
160
+ }
161
+ return 'Meets speed requirements';
162
+ }
163
+ if (optimization === 'quality') {
164
+ if (qualityScore >= 90) {
165
+ return 'Highest quality';
166
+ }
167
+ if (qualityScore >= 80) {
168
+ return 'Excellent quality';
169
+ }
170
+ return 'Good quality';
171
+ }
172
+ // Balanced strategy
173
+ const avgScore = (costScore + speedScore + qualityScore) / 3;
174
+ if (avgScore >= 80) {
175
+ return 'Best overall balance';
176
+ }
177
+ if (avgScore >= 60) {
178
+ return 'Good balance of cost/speed/quality';
179
+ }
180
+ return 'Meets requirements';
181
+ }
182
+ /**
183
+ * Filter models by hard requirements only.
184
+ */
185
+ export function filterByRequirements(availableModels, requirements) {
186
+ if (!requirements) {
187
+ return availableModels;
188
+ }
189
+ return availableModels.filter(({ model }) => {
190
+ const capabilities = model.capabilities ?? inferCapabilities(model.id, model.metadata);
191
+ return meetsRequirements(capabilities, requirements);
192
+ });
193
+ }
194
+ /**
195
+ * Find the best model match for requirements.
196
+ * Returns null if no models meet requirements.
197
+ */
198
+ export function findBestModel(requirements, availableModels) {
199
+ const scored = matchModels(requirements, availableModels);
200
+ const best = scored.find((m) => m.meetsRequirements);
201
+ return best ?? null;
202
+ }
203
+ /**
204
+ * Get top N model matches.
205
+ */
206
+ export function getTopMatches(requirements, availableModels, count = 3) {
207
+ const scored = matchModels(requirements, availableModels);
208
+ return scored.filter((m) => m.meetsRequirements).slice(0, count);
209
+ }
210
+ //# sourceMappingURL=capability-matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-matcher.js","sourceRoot":"","sources":["../../src/capability-matcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Core Components
3
+ *
4
+ * Export core bridge, router, and middleware stack.
5
+ *
6
+ * @module
7
+ */
8
+ export * from './bridge.js';
9
+ export * from './router.js';
10
+ export * from './middleware-stack.js';
11
+ export * from './model-pricing.js';
12
+ export * from './capability-matcher.js';
13
+ export * from './capability-inference.js';
14
+ export * from './model-translation.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC"}