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,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Core Model Translation
|
|
4
|
+
*
|
|
5
|
+
* Backend-agnostic model translation utilities for converting model names
|
|
6
|
+
* between different AI providers. Works in any environment (Node.js, Browser, Deno, etc.).
|
|
7
|
+
*
|
|
8
|
+
* @module core/model-translation
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.translateModel = translateModel;
|
|
12
|
+
exports.createModelTranslator = createModelTranslator;
|
|
13
|
+
exports.reverseMapping = reverseMapping;
|
|
14
|
+
exports.hasTranslation = hasTranslation;
|
|
15
|
+
exports.mergeMappings = mergeMappings;
|
|
16
|
+
exports.validateMapping = validateMapping;
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Core Translation Functions
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Translate a model name using exact mapping.
|
|
22
|
+
*
|
|
23
|
+
* @param modelName - Original model name
|
|
24
|
+
* @param options - Translation options
|
|
25
|
+
* @returns Translation result
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const result = translateModel('gpt-4', {
|
|
30
|
+
* mapping: { 'gpt-4': 'claude-3-5-sonnet-20241022' }
|
|
31
|
+
* });
|
|
32
|
+
* // → { translated: 'claude-3-5-sonnet-20241022', source: 'exact', wasTranslated: true }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
function translateModel(modelName, options = {}) {
|
|
36
|
+
const { mapping, defaultModel, strategy = 'exact', strictMode = false } = options;
|
|
37
|
+
// 1. Try exact match (all strategies except 'none')
|
|
38
|
+
if (strategy !== 'none' && mapping?.[modelName]) {
|
|
39
|
+
return {
|
|
40
|
+
translated: mapping[modelName],
|
|
41
|
+
source: 'exact',
|
|
42
|
+
wasTranslated: true,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// 2. Try backend default (only for hybrid strategy)
|
|
46
|
+
if (strategy === 'hybrid' && defaultModel) {
|
|
47
|
+
return {
|
|
48
|
+
translated: defaultModel,
|
|
49
|
+
source: 'default',
|
|
50
|
+
wasTranslated: true,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
// 3. No translation found
|
|
54
|
+
if (strictMode) {
|
|
55
|
+
throw new Error(`No translation found for model: ${modelName}`);
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
translated: modelName,
|
|
59
|
+
source: 'none',
|
|
60
|
+
wasTranslated: false,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Create a model translator with pre-configured options.
|
|
65
|
+
*
|
|
66
|
+
* @param options - Default translation options
|
|
67
|
+
* @returns Translator function
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const translator = createModelTranslator({
|
|
72
|
+
* mapping: { 'gpt-4': 'claude-3-5-sonnet-20241022' },
|
|
73
|
+
* strategy: 'hybrid',
|
|
74
|
+
* defaultModel: 'claude-3-5-haiku-20241022'
|
|
75
|
+
* });
|
|
76
|
+
*
|
|
77
|
+
* const result = translator('gpt-4');
|
|
78
|
+
* // → { translated: 'claude-3-5-sonnet-20241022', source: 'exact', wasTranslated: true }
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
function createModelTranslator(defaultOptions) {
|
|
82
|
+
return (modelName, overrides) => {
|
|
83
|
+
return translateModel(modelName, { ...defaultOptions, ...overrides });
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get reverse mapping (target model → source model).
|
|
88
|
+
*
|
|
89
|
+
* @param mapping - Forward mapping
|
|
90
|
+
* @returns Reverse mapping
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* const forward = { 'gpt-4': 'claude-3-5-sonnet' };
|
|
95
|
+
* const reverse = reverseMapping(forward);
|
|
96
|
+
* // → { 'claude-3-5-sonnet': 'gpt-4' }
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
function reverseMapping(mapping) {
|
|
100
|
+
const reversed = {};
|
|
101
|
+
for (const [key, value] of Object.entries(mapping)) {
|
|
102
|
+
reversed[value] = key;
|
|
103
|
+
}
|
|
104
|
+
return reversed;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if a model name has an exact translation.
|
|
108
|
+
*
|
|
109
|
+
* @param modelName - Model name to check
|
|
110
|
+
* @param mapping - Model mapping
|
|
111
|
+
* @returns True if exact translation exists
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```typescript
|
|
115
|
+
* const mapping = { 'gpt-4': 'claude-3-5-sonnet' };
|
|
116
|
+
* hasTranslation('gpt-4', mapping); // → true
|
|
117
|
+
* hasTranslation('gpt-3.5', mapping); // → false
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
function hasTranslation(modelName, mapping) {
|
|
121
|
+
return modelName in mapping;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Merge multiple model mappings into one.
|
|
125
|
+
*
|
|
126
|
+
* Later mappings take precedence over earlier ones.
|
|
127
|
+
*
|
|
128
|
+
* @param mappings - Array of mappings to merge
|
|
129
|
+
* @returns Merged mapping
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```typescript
|
|
133
|
+
* const mapping1 = { 'gpt-4': 'claude-3-opus' };
|
|
134
|
+
* const mapping2 = { 'gpt-4': 'claude-3-5-sonnet' }; // Override
|
|
135
|
+
* const merged = mergeMappings(mapping1, mapping2);
|
|
136
|
+
* // → { 'gpt-4': 'claude-3-5-sonnet' }
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
function mergeMappings(...mappings) {
|
|
140
|
+
const result = {};
|
|
141
|
+
for (const mapping of mappings) {
|
|
142
|
+
Object.assign(result, mapping);
|
|
143
|
+
}
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Validate that a model mapping is well-formed.
|
|
148
|
+
*
|
|
149
|
+
* @param mapping - Mapping to validate
|
|
150
|
+
* @throws Error if mapping is invalid
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* ```typescript
|
|
154
|
+
* validateMapping({ 'gpt-4': 'claude-3-5-sonnet' }); // OK
|
|
155
|
+
* validateMapping({ 'gpt-4': '' }); // Throws: empty target model
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
function validateMapping(mapping) {
|
|
159
|
+
if (typeof mapping !== 'object' || mapping === null) {
|
|
160
|
+
throw new Error('Model mapping must be an object');
|
|
161
|
+
}
|
|
162
|
+
for (const [source, target] of Object.entries(mapping)) {
|
|
163
|
+
if (typeof source !== 'string' || source.length === 0) {
|
|
164
|
+
throw new Error(`Invalid source model: ${source}`);
|
|
165
|
+
}
|
|
166
|
+
if (typeof target !== 'string' || target.length === 0) {
|
|
167
|
+
throw new Error(`Invalid target model for "${source}": ${target}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=model-translation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-translation.js","sourceRoot":"","sources":["../../src/model-translation.ts"],"names":[],"mappings":"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"}
|