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