cost-katana-cli 2.0.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 (148) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +343 -0
  3. package/bin/cost-katana.js +20 -0
  4. package/dist/commands/agent-inspect.d.ts +3 -0
  5. package/dist/commands/agent-inspect.d.ts.map +1 -0
  6. package/dist/commands/agent-inspect.js +630 -0
  7. package/dist/commands/agent-inspect.js.map +1 -0
  8. package/dist/commands/analytics.d.ts +3 -0
  9. package/dist/commands/analytics.d.ts.map +1 -0
  10. package/dist/commands/analytics.js +375 -0
  11. package/dist/commands/analytics.js.map +1 -0
  12. package/dist/commands/analyze.d.ts +3 -0
  13. package/dist/commands/analyze.d.ts.map +1 -0
  14. package/dist/commands/analyze.js +286 -0
  15. package/dist/commands/analyze.js.map +1 -0
  16. package/dist/commands/ask.d.ts +3 -0
  17. package/dist/commands/ask.d.ts.map +1 -0
  18. package/dist/commands/ask.js +137 -0
  19. package/dist/commands/ask.js.map +1 -0
  20. package/dist/commands/audit-firewall.d.ts +3 -0
  21. package/dist/commands/audit-firewall.d.ts.map +1 -0
  22. package/dist/commands/audit-firewall.js +737 -0
  23. package/dist/commands/audit-firewall.js.map +1 -0
  24. package/dist/commands/budget.d.ts +3 -0
  25. package/dist/commands/budget.d.ts.map +1 -0
  26. package/dist/commands/budget.js +283 -0
  27. package/dist/commands/budget.js.map +1 -0
  28. package/dist/commands/bulk-optimize.d.ts +3 -0
  29. package/dist/commands/bulk-optimize.d.ts.map +1 -0
  30. package/dist/commands/bulk-optimize.js +863 -0
  31. package/dist/commands/bulk-optimize.js.map +1 -0
  32. package/dist/commands/chat.d.ts +3 -0
  33. package/dist/commands/chat.d.ts.map +1 -0
  34. package/dist/commands/chat.js +292 -0
  35. package/dist/commands/chat.js.map +1 -0
  36. package/dist/commands/check-cache.d.ts +3 -0
  37. package/dist/commands/check-cache.d.ts.map +1 -0
  38. package/dist/commands/check-cache.js +267 -0
  39. package/dist/commands/check-cache.js.map +1 -0
  40. package/dist/commands/compare.d.ts +3 -0
  41. package/dist/commands/compare.d.ts.map +1 -0
  42. package/dist/commands/compare.js +131 -0
  43. package/dist/commands/compare.js.map +1 -0
  44. package/dist/commands/config.d.ts +3 -0
  45. package/dist/commands/config.d.ts.map +1 -0
  46. package/dist/commands/config.js +421 -0
  47. package/dist/commands/config.js.map +1 -0
  48. package/dist/commands/craft-workflow.d.ts +3 -0
  49. package/dist/commands/craft-workflow.d.ts.map +1 -0
  50. package/dist/commands/craft-workflow.js +844 -0
  51. package/dist/commands/craft-workflow.js.map +1 -0
  52. package/dist/commands/debug-prompt.d.ts +3 -0
  53. package/dist/commands/debug-prompt.d.ts.map +1 -0
  54. package/dist/commands/debug-prompt.js +614 -0
  55. package/dist/commands/debug-prompt.js.map +1 -0
  56. package/dist/commands/diff-prompts.d.ts +3 -0
  57. package/dist/commands/diff-prompts.d.ts.map +1 -0
  58. package/dist/commands/diff-prompts.js +553 -0
  59. package/dist/commands/diff-prompts.js.map +1 -0
  60. package/dist/commands/high-cost-prompts.d.ts +3 -0
  61. package/dist/commands/high-cost-prompts.d.ts.map +1 -0
  62. package/dist/commands/high-cost-prompts.js +719 -0
  63. package/dist/commands/high-cost-prompts.js.map +1 -0
  64. package/dist/commands/init.d.ts +3 -0
  65. package/dist/commands/init.d.ts.map +1 -0
  66. package/dist/commands/init.js +325 -0
  67. package/dist/commands/init.js.map +1 -0
  68. package/dist/commands/key.d.ts +3 -0
  69. package/dist/commands/key.d.ts.map +1 -0
  70. package/dist/commands/key.js +574 -0
  71. package/dist/commands/key.js.map +1 -0
  72. package/dist/commands/list-models.d.ts +3 -0
  73. package/dist/commands/list-models.d.ts.map +1 -0
  74. package/dist/commands/list-models.js +154 -0
  75. package/dist/commands/list-models.js.map +1 -0
  76. package/dist/commands/models.d.ts +3 -0
  77. package/dist/commands/models.d.ts.map +1 -0
  78. package/dist/commands/models.js +107 -0
  79. package/dist/commands/models.js.map +1 -0
  80. package/dist/commands/optimize.d.ts +3 -0
  81. package/dist/commands/optimize.d.ts.map +1 -0
  82. package/dist/commands/optimize.js +345 -0
  83. package/dist/commands/optimize.js.map +1 -0
  84. package/dist/commands/project.d.ts +3 -0
  85. package/dist/commands/project.d.ts.map +1 -0
  86. package/dist/commands/project.js +475 -0
  87. package/dist/commands/project.js.map +1 -0
  88. package/dist/commands/prompt-metrics.d.ts +3 -0
  89. package/dist/commands/prompt-metrics.d.ts.map +1 -0
  90. package/dist/commands/prompt-metrics.js +665 -0
  91. package/dist/commands/prompt-metrics.js.map +1 -0
  92. package/dist/commands/replay-session.d.ts +3 -0
  93. package/dist/commands/replay-session.d.ts.map +1 -0
  94. package/dist/commands/replay-session.js +615 -0
  95. package/dist/commands/replay-session.js.map +1 -0
  96. package/dist/commands/retry-log.d.ts +3 -0
  97. package/dist/commands/retry-log.d.ts.map +1 -0
  98. package/dist/commands/retry-log.js +686 -0
  99. package/dist/commands/retry-log.js.map +1 -0
  100. package/dist/commands/rewrite-prompt.d.ts +3 -0
  101. package/dist/commands/rewrite-prompt.d.ts.map +1 -0
  102. package/dist/commands/rewrite-prompt.js +802 -0
  103. package/dist/commands/rewrite-prompt.js.map +1 -0
  104. package/dist/commands/set-budget.d.ts +3 -0
  105. package/dist/commands/set-budget.d.ts.map +1 -0
  106. package/dist/commands/set-budget.js +909 -0
  107. package/dist/commands/set-budget.js.map +1 -0
  108. package/dist/commands/simulate-cost.d.ts +3 -0
  109. package/dist/commands/simulate-cost.d.ts.map +1 -0
  110. package/dist/commands/simulate-cost.js +873 -0
  111. package/dist/commands/simulate-cost.js.map +1 -0
  112. package/dist/commands/suggest-models.d.ts +3 -0
  113. package/dist/commands/suggest-models.d.ts.map +1 -0
  114. package/dist/commands/suggest-models.js +674 -0
  115. package/dist/commands/suggest-models.js.map +1 -0
  116. package/dist/commands/test.d.ts +3 -0
  117. package/dist/commands/test.d.ts.map +1 -0
  118. package/dist/commands/test.js +187 -0
  119. package/dist/commands/test.js.map +1 -0
  120. package/dist/commands/trace-workflow.d.ts +3 -0
  121. package/dist/commands/trace-workflow.d.ts.map +1 -0
  122. package/dist/commands/trace-workflow.js +651 -0
  123. package/dist/commands/trace-workflow.js.map +1 -0
  124. package/dist/commands/trace.d.ts +3 -0
  125. package/dist/commands/trace.d.ts.map +1 -0
  126. package/dist/commands/trace.js +468 -0
  127. package/dist/commands/trace.js.map +1 -0
  128. package/dist/commands/track.d.ts +3 -0
  129. package/dist/commands/track.d.ts.map +1 -0
  130. package/dist/commands/track.js +404 -0
  131. package/dist/commands/track.js.map +1 -0
  132. package/dist/index.d.ts +4 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +169 -0
  135. package/dist/index.js.map +1 -0
  136. package/dist/utils/config.d.ts +46 -0
  137. package/dist/utils/config.d.ts.map +1 -0
  138. package/dist/utils/config.js +321 -0
  139. package/dist/utils/config.js.map +1 -0
  140. package/dist/utils/logger.d.ts +21 -0
  141. package/dist/utils/logger.d.ts.map +1 -0
  142. package/dist/utils/logger.js +101 -0
  143. package/dist/utils/logger.js.map +1 -0
  144. package/dist/utils/models.d.ts +22 -0
  145. package/dist/utils/models.d.ts.map +1 -0
  146. package/dist/utils/models.js +2251 -0
  147. package/dist/utils/models.js.map +1 -0
  148. package/package.json +107 -0
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.checkCacheCommand = checkCacheCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const inquirer_1 = __importDefault(require("inquirer"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const logger_1 = require("../utils/logger");
11
+ const config_1 = require("../utils/config");
12
+ const axios_1 = __importDefault(require("axios"));
13
+ function checkCacheCommand(program) {
14
+ program
15
+ .command('check-cache')
16
+ .description('šŸ” Check cache status and fallback routes for prompts')
17
+ .argument('[prompt]', 'Prompt to check cache for')
18
+ .option('-f, --file <path>', 'File containing prompt to check')
19
+ .option('-m, --model <model>', 'Target model for cache check')
20
+ .option('-p, --provider <provider>', 'AI provider to check')
21
+ .option('--format <format>', 'Output format (table, json, csv)', 'table')
22
+ .option('-v, --verbose', 'Show detailed cache information')
23
+ .option('--export <path>', 'Export cache check results to file')
24
+ .action(async (prompt, options) => {
25
+ try {
26
+ await handleCheckCache(prompt, options);
27
+ }
28
+ catch (error) {
29
+ logger_1.logger.error('Cache check failed:', error);
30
+ process.exit(1);
31
+ }
32
+ });
33
+ }
34
+ async function handleCheckCache(promptArg, options) {
35
+ logger_1.logger.info('šŸ” Checking cache status...');
36
+ try {
37
+ const prompt = await getPrompt(promptArg, options);
38
+ if (!prompt) {
39
+ logger_1.logger.error('No prompt provided. Use a prompt argument or --file option.');
40
+ return;
41
+ }
42
+ const cacheResult = await checkCache(prompt, options);
43
+ displayCacheResults(cacheResult, options);
44
+ }
45
+ catch (error) {
46
+ logger_1.logger.error('Failed to check cache:', error);
47
+ process.exit(1);
48
+ }
49
+ }
50
+ async function getPrompt(promptArg, options) {
51
+ if (promptArg) {
52
+ return promptArg;
53
+ }
54
+ if (options.file) {
55
+ try {
56
+ const fullPath = require('path').resolve(options.file);
57
+ const fs = require('fs');
58
+ if (!fs.existsSync(fullPath)) {
59
+ logger_1.logger.error(`File not found: ${fullPath}`);
60
+ return null;
61
+ }
62
+ return fs.readFileSync(fullPath, 'utf8');
63
+ }
64
+ catch (error) {
65
+ logger_1.logger.error('Failed to read file:', error);
66
+ return null;
67
+ }
68
+ }
69
+ // Interactive prompt input
70
+ const { prompt } = await inquirer_1.default.prompt([
71
+ {
72
+ type: 'editor',
73
+ name: 'prompt',
74
+ message: 'Enter the prompt to check cache for:',
75
+ validate: (input) => {
76
+ if (!input.trim()) {
77
+ return 'Prompt cannot be empty';
78
+ }
79
+ return true;
80
+ },
81
+ },
82
+ ]);
83
+ return prompt.trim();
84
+ }
85
+ async function checkCache(prompt, options) {
86
+ const baseUrl = config_1.configManager.get('baseUrl');
87
+ const apiKey = config_1.configManager.get('apiKey');
88
+ if (!baseUrl || !apiKey) {
89
+ console.log(chalk_1.default.red.bold('\nāŒ Configuration Missing'));
90
+ console.log(chalk_1.default.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
91
+ if (!apiKey) {
92
+ console.log(chalk_1.default.yellow('• API Key is not set'));
93
+ }
94
+ if (!baseUrl) {
95
+ console.log(chalk_1.default.yellow('• Base URL is not set'));
96
+ }
97
+ console.log(chalk_1.default.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
98
+ console.log(chalk_1.default.cyan('To set up your configuration, run:'));
99
+ console.log(chalk_1.default.white(' cost-katana init'));
100
+ console.log(chalk_1.default.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'));
101
+ throw new Error('Configuration incomplete. Please run "cost-katana init" to set up your API key and base URL.');
102
+ }
103
+ const spinner = (0, ora_1.default)('Checking cache status...').start();
104
+ try {
105
+ const requestData = {
106
+ prompt,
107
+ model: options.model || 'gpt-4o-mini',
108
+ provider: options.provider || 'openai',
109
+ includeFallbacks: true,
110
+ includeCacheDetails: options.verbose || false,
111
+ };
112
+ const response = await axios_1.default.post(`${baseUrl}/api/cache/check`, requestData, {
113
+ headers: {
114
+ 'Authorization': `Bearer ${apiKey}`,
115
+ 'Content-Type': 'application/json',
116
+ },
117
+ timeout: 30000,
118
+ });
119
+ if (response.status !== 200) {
120
+ throw new Error(`API returned status ${response.status}`);
121
+ }
122
+ spinner.succeed('Cache check completed');
123
+ if (response.data.success && response.data.data) {
124
+ return response.data.data;
125
+ }
126
+ else {
127
+ throw new Error(response.data.message || 'Invalid response format');
128
+ }
129
+ }
130
+ catch (error) {
131
+ spinner.fail('Cache check failed');
132
+ if (error.response) {
133
+ throw new Error(`API Error: ${error.response.status} - ${error.response.data?.message || 'Unknown error'}`);
134
+ }
135
+ else if (error.request) {
136
+ throw new Error('No response received from API');
137
+ }
138
+ else {
139
+ throw new Error(`Request failed: ${error.message}`);
140
+ }
141
+ }
142
+ }
143
+ function displayCacheResults(cacheResult, options) {
144
+ const format = options.format || 'table';
145
+ if (format === 'json') {
146
+ displayCacheJson(cacheResult);
147
+ return;
148
+ }
149
+ else if (format === 'csv') {
150
+ displayCacheCsv(cacheResult);
151
+ return;
152
+ }
153
+ console.log(chalk_1.default.cyan.bold('\nšŸ” Cache Check Results'));
154
+ console.log(chalk_1.default.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
155
+ // 1. Cache Status
156
+ if (cacheResult.cacheStatus) {
157
+ console.log(chalk_1.default.yellow.bold('\nšŸ“‹ Cache Status'));
158
+ console.log(chalk_1.default.gray('─'.repeat(30)));
159
+ const status = cacheResult.cacheStatus;
160
+ const isHit = status === 'HIT';
161
+ const statusColor = isHit ? chalk_1.default.green : chalk_1.default.red;
162
+ const statusIcon = isHit ? 'āœ…' : 'āŒ';
163
+ console.log(`${statusIcon} Status: ${statusColor(status)}`);
164
+ if (cacheResult.cacheDetails) {
165
+ console.log(chalk_1.default.white('Cache Key:'), chalk_1.default.cyan(cacheResult.cacheDetails.key || 'N/A'));
166
+ console.log(chalk_1.default.white('Cache Age:'), chalk_1.default.cyan(cacheResult.cacheDetails.age || 'N/A'));
167
+ console.log(chalk_1.default.white('Cache Size:'), chalk_1.default.cyan(cacheResult.cacheDetails.size || 'N/A'));
168
+ }
169
+ }
170
+ // 2. Suggested Reuse or Retry
171
+ if (cacheResult.suggestions) {
172
+ console.log(chalk_1.default.yellow.bold('\nšŸ’” Suggestions'));
173
+ console.log(chalk_1.default.gray('─'.repeat(30)));
174
+ cacheResult.suggestions.forEach((suggestion, index) => {
175
+ const type = suggestion.type || 'general';
176
+ const action = suggestion.action || 'N/A';
177
+ const reason = suggestion.reason || '';
178
+ const confidence = suggestion.confidence || 0;
179
+ console.log(chalk_1.default.white(`${index + 1}. ${type.toUpperCase()}:`), chalk_1.default.cyan(action));
180
+ if (reason) {
181
+ console.log(chalk_1.default.gray(` Reason: ${reason}`));
182
+ }
183
+ if (confidence > 0) {
184
+ console.log(chalk_1.default.gray(` Confidence: ${confidence}%`));
185
+ }
186
+ console.log('');
187
+ });
188
+ }
189
+ // 3. Fallback Routes
190
+ if (cacheResult.fallbackRoutes) {
191
+ console.log(chalk_1.default.yellow.bold('\nšŸ”„ Fallback Routes'));
192
+ console.log(chalk_1.default.gray('─'.repeat(30)));
193
+ cacheResult.fallbackRoutes.forEach((route, index) => {
194
+ const provider = route.provider || 'Unknown';
195
+ const model = route.model || 'Unknown';
196
+ const priority = route.priority || 1;
197
+ const status = route.status || 'available';
198
+ const cost = route.estimatedCost || 'N/A';
199
+ const statusColor = status === 'available' ? chalk_1.default.green : chalk_1.default.red;
200
+ const statusIcon = status === 'available' ? 'āœ…' : 'āŒ';
201
+ console.log(chalk_1.default.white(`${index + 1}. ${provider}/${model}`));
202
+ console.log(chalk_1.default.gray(` Priority: ${priority}`));
203
+ console.log(chalk_1.default.gray(` Status: ${statusIcon} ${statusColor(status)}`));
204
+ console.log(chalk_1.default.gray(` Estimated Cost: $${cost}`));
205
+ if (route.reason) {
206
+ console.log(chalk_1.default.gray(` Reason: ${route.reason}`));
207
+ }
208
+ console.log('');
209
+ });
210
+ }
211
+ // 4. Cache Performance Metrics
212
+ if (cacheResult.performance) {
213
+ console.log(chalk_1.default.yellow.bold('\nšŸ“Š Performance Metrics'));
214
+ console.log(chalk_1.default.gray('─'.repeat(30)));
215
+ const perf = cacheResult.performance;
216
+ console.log(chalk_1.default.white('Response Time:'), chalk_1.default.cyan(`${perf.responseTime || 0}ms`));
217
+ console.log(chalk_1.default.white('Cache Hit Rate:'), chalk_1.default.cyan(`${perf.hitRate || 0}%`));
218
+ console.log(chalk_1.default.white('Cost Savings:'), chalk_1.default.green(`$${perf.costSavings || 0}`));
219
+ console.log(chalk_1.default.white('Bandwidth Saved:'), chalk_1.default.cyan(`${perf.bandwidthSaved || 0}KB`));
220
+ }
221
+ // Export if requested
222
+ if (options.export) {
223
+ exportCacheResults(cacheResult, options.export);
224
+ }
225
+ console.log(chalk_1.default.gray('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
226
+ }
227
+ function displayCacheJson(cacheResult) {
228
+ const output = {
229
+ cacheStatus: cacheResult.cacheStatus,
230
+ cacheDetails: cacheResult.cacheDetails,
231
+ suggestions: cacheResult.suggestions,
232
+ fallbackRoutes: cacheResult.fallbackRoutes,
233
+ performance: cacheResult.performance
234
+ };
235
+ console.log(JSON.stringify(output, null, 2));
236
+ }
237
+ function displayCacheCsv(cacheResult) {
238
+ console.log('Cache Status,Cache Key,Cache Age,Response Time,Hit Rate,Cost Savings,Primary Provider,Fallback Provider,Status');
239
+ const status = cacheResult.cacheStatus || 'UNKNOWN';
240
+ const key = cacheResult.cacheDetails?.key || 'N/A';
241
+ const age = cacheResult.cacheDetails?.age || 'N/A';
242
+ const responseTime = cacheResult.performance?.responseTime || 0;
243
+ const hitRate = cacheResult.performance?.hitRate || 0;
244
+ const costSavings = cacheResult.performance?.costSavings || 0;
245
+ const primaryProvider = cacheResult.fallbackRoutes?.[0]?.provider || 'N/A';
246
+ const fallbackProvider = cacheResult.fallbackRoutes?.[1]?.provider || 'N/A';
247
+ const routeStatus = cacheResult.fallbackRoutes?.[0]?.status || 'N/A';
248
+ console.log(`"${status}","${key}","${age}",${responseTime},${hitRate},${costSavings},"${primaryProvider}","${fallbackProvider}","${routeStatus}"`);
249
+ }
250
+ function exportCacheResults(cacheResult, filePath) {
251
+ try {
252
+ const fullPath = require('path').resolve(filePath);
253
+ const fs = require('fs');
254
+ const content = JSON.stringify(cacheResult, null, 2);
255
+ // Ensure directory exists
256
+ const dir = require('path').dirname(fullPath);
257
+ if (!fs.existsSync(dir)) {
258
+ fs.mkdirSync(dir, { recursive: true });
259
+ }
260
+ fs.writeFileSync(fullPath, content);
261
+ logger_1.logger.success(`Cache check results exported to: ${fullPath}`);
262
+ }
263
+ catch (error) {
264
+ logger_1.logger.error('Failed to export cache check results:', error);
265
+ }
266
+ }
267
+ //# sourceMappingURL=check-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-cache.js","sourceRoot":"","sources":["../../src/commands/check-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function compareCommand(program: Command): void;
3
+ //# sourceMappingURL=compare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../src/commands/compare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,QAe9C"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.compareCommand = compareCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const ora_1 = __importDefault(require("ora"));
9
+ const table_1 = require("table");
10
+ const logger_1 = require("../utils/logger");
11
+ const cost_katana_1 = require("cost-katana");
12
+ function compareCommand(program) {
13
+ program
14
+ .command('compare <question>')
15
+ .description('Compare costs and responses across different AI models')
16
+ .option('-m, --models <models>', 'Comma-separated list of models', 'gpt-4,gpt-3.5-turbo,claude-3-sonnet')
17
+ .option('--max-tokens <tokens>', 'Maximum tokens per response', '200')
18
+ .option('--show-responses', 'Show full responses (not just summaries)')
19
+ .action(async (question, options) => {
20
+ try {
21
+ await handleCompare(question, options);
22
+ }
23
+ catch (error) {
24
+ logger_1.logger.error('Compare command failed:', error);
25
+ process.exit(1);
26
+ }
27
+ });
28
+ }
29
+ async function handleCompare(question, options) {
30
+ const models = options.models.split(',').map((m) => m.trim());
31
+ const maxTokens = parseInt(options.maxTokens);
32
+ console.log(chalk_1.default.cyan.bold('\nšŸ” Comparing AI Models'));
33
+ console.log(chalk_1.default.gray('━'.repeat(60)));
34
+ console.log(chalk_1.default.white(`Question: "${question}"`));
35
+ console.log(chalk_1.default.gray(`Testing: ${models.join(', ')}`));
36
+ console.log(chalk_1.default.gray('━'.repeat(60) + '\n'));
37
+ const results = [];
38
+ for (const model of models) {
39
+ const spinner = (0, ora_1.default)({
40
+ text: chalk_1.default.cyan(`Testing ${model}...`),
41
+ color: 'cyan'
42
+ }).start();
43
+ try {
44
+ const startTime = Date.now();
45
+ const response = await (0, cost_katana_1.ai)(model, question, {
46
+ maxTokens,
47
+ temperature: 0.7
48
+ });
49
+ const responseTime = Date.now() - startTime;
50
+ spinner.succeed(chalk_1.default.green(`${model} completed`));
51
+ results.push({
52
+ model,
53
+ cost: response.cost,
54
+ tokens: response.tokens,
55
+ responseTime,
56
+ response: response.text,
57
+ provider: response.provider
58
+ });
59
+ // Show response if requested
60
+ if (options.showResponses) {
61
+ console.log(chalk_1.default.gray('\nResponse:'));
62
+ console.log(chalk_1.default.white(response.text.substring(0, 200) + '...'));
63
+ console.log();
64
+ }
65
+ }
66
+ catch (error) {
67
+ spinner.fail(chalk_1.default.red(`${model} failed`));
68
+ console.log(chalk_1.default.gray(` Error: ${error.message}\n`));
69
+ }
70
+ }
71
+ if (results.length === 0) {
72
+ console.log(chalk_1.default.red('āŒ No models succeeded'));
73
+ return;
74
+ }
75
+ // Display comparison table
76
+ console.log(chalk_1.default.cyan.bold('\nšŸ“Š Comparison Results'));
77
+ console.log(chalk_1.default.gray('━'.repeat(60)));
78
+ const tableData = [
79
+ [
80
+ chalk_1.default.bold('Model'),
81
+ chalk_1.default.bold('Cost'),
82
+ chalk_1.default.bold('Tokens'),
83
+ chalk_1.default.bold('Time (ms)'),
84
+ chalk_1.default.bold('Provider')
85
+ ]
86
+ ];
87
+ // Sort by cost
88
+ results.sort((a, b) => a.cost - b.cost);
89
+ for (const result of results) {
90
+ const costColor = result === results[0] ? chalk_1.default.green : chalk_1.default.white;
91
+ tableData.push([
92
+ result.model,
93
+ costColor(`$${result.cost.toFixed(6)}`),
94
+ result.tokens.toString(),
95
+ result.responseTime.toString(),
96
+ result.provider
97
+ ]);
98
+ }
99
+ console.log((0, table_1.table)(tableData, {
100
+ border: {
101
+ topBody: chalk_1.default.gray('─'),
102
+ topJoin: chalk_1.default.gray('┬'),
103
+ topLeft: chalk_1.default.gray('ā”Œ'),
104
+ topRight: chalk_1.default.gray('┐'),
105
+ bottomBody: chalk_1.default.gray('─'),
106
+ bottomJoin: chalk_1.default.gray('┓'),
107
+ bottomLeft: chalk_1.default.gray('ā””'),
108
+ bottomRight: chalk_1.default.gray('ā”˜'),
109
+ bodyLeft: chalk_1.default.gray('│'),
110
+ bodyRight: chalk_1.default.gray('│'),
111
+ bodyJoin: chalk_1.default.gray('│'),
112
+ joinBody: chalk_1.default.gray('─'),
113
+ joinLeft: chalk_1.default.gray('ā”œ'),
114
+ joinRight: chalk_1.default.gray('┤'),
115
+ joinJoin: chalk_1.default.gray('┼')
116
+ }
117
+ }));
118
+ // Show recommendations
119
+ const cheapest = results[0];
120
+ const fastest = results.reduce((min, r) => r.responseTime < min.responseTime ? r : min);
121
+ console.log(chalk_1.default.cyan.bold('šŸ’” Recommendations:'));
122
+ console.log(chalk_1.default.green(` Cheapest: ${cheapest.model} ($${cheapest.cost.toFixed(6)})`));
123
+ console.log(chalk_1.default.blue(` Fastest: ${fastest.model} (${fastest.responseTime}ms)`));
124
+ if (results.length > 1) {
125
+ const mostExpensive = results[results.length - 1];
126
+ const savings = ((mostExpensive.cost - cheapest.cost) / mostExpensive.cost * 100);
127
+ console.log(chalk_1.default.yellow(` Savings: ${savings.toFixed(1)}% by choosing ${cheapest.model}`));
128
+ }
129
+ console.log();
130
+ }
131
+ //# sourceMappingURL=compare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../src/commands/compare.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function configCommand(program: Command): void;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,QAmB7C"}