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,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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"}