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.
- package/LICENSE +21 -0
- package/README.md +343 -0
- package/bin/cost-katana.js +20 -0
- package/dist/commands/agent-inspect.d.ts +3 -0
- package/dist/commands/agent-inspect.d.ts.map +1 -0
- package/dist/commands/agent-inspect.js +630 -0
- package/dist/commands/agent-inspect.js.map +1 -0
- package/dist/commands/analytics.d.ts +3 -0
- package/dist/commands/analytics.d.ts.map +1 -0
- package/dist/commands/analytics.js +375 -0
- package/dist/commands/analytics.js.map +1 -0
- package/dist/commands/analyze.d.ts +3 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +286 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/ask.d.ts +3 -0
- package/dist/commands/ask.d.ts.map +1 -0
- package/dist/commands/ask.js +137 -0
- package/dist/commands/ask.js.map +1 -0
- package/dist/commands/audit-firewall.d.ts +3 -0
- package/dist/commands/audit-firewall.d.ts.map +1 -0
- package/dist/commands/audit-firewall.js +737 -0
- package/dist/commands/audit-firewall.js.map +1 -0
- package/dist/commands/budget.d.ts +3 -0
- package/dist/commands/budget.d.ts.map +1 -0
- package/dist/commands/budget.js +283 -0
- package/dist/commands/budget.js.map +1 -0
- package/dist/commands/bulk-optimize.d.ts +3 -0
- package/dist/commands/bulk-optimize.d.ts.map +1 -0
- package/dist/commands/bulk-optimize.js +863 -0
- package/dist/commands/bulk-optimize.js.map +1 -0
- package/dist/commands/chat.d.ts +3 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +292 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/check-cache.d.ts +3 -0
- package/dist/commands/check-cache.d.ts.map +1 -0
- package/dist/commands/check-cache.js +267 -0
- package/dist/commands/check-cache.js.map +1 -0
- package/dist/commands/compare.d.ts +3 -0
- package/dist/commands/compare.d.ts.map +1 -0
- package/dist/commands/compare.js +131 -0
- package/dist/commands/compare.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +421 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/craft-workflow.d.ts +3 -0
- package/dist/commands/craft-workflow.d.ts.map +1 -0
- package/dist/commands/craft-workflow.js +844 -0
- package/dist/commands/craft-workflow.js.map +1 -0
- package/dist/commands/debug-prompt.d.ts +3 -0
- package/dist/commands/debug-prompt.d.ts.map +1 -0
- package/dist/commands/debug-prompt.js +614 -0
- package/dist/commands/debug-prompt.js.map +1 -0
- package/dist/commands/diff-prompts.d.ts +3 -0
- package/dist/commands/diff-prompts.d.ts.map +1 -0
- package/dist/commands/diff-prompts.js +553 -0
- package/dist/commands/diff-prompts.js.map +1 -0
- package/dist/commands/high-cost-prompts.d.ts +3 -0
- package/dist/commands/high-cost-prompts.d.ts.map +1 -0
- package/dist/commands/high-cost-prompts.js +719 -0
- package/dist/commands/high-cost-prompts.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +325 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/key.d.ts +3 -0
- package/dist/commands/key.d.ts.map +1 -0
- package/dist/commands/key.js +574 -0
- package/dist/commands/key.js.map +1 -0
- package/dist/commands/list-models.d.ts +3 -0
- package/dist/commands/list-models.d.ts.map +1 -0
- package/dist/commands/list-models.js +154 -0
- package/dist/commands/list-models.js.map +1 -0
- package/dist/commands/models.d.ts +3 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/models.js +107 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/commands/optimize.d.ts +3 -0
- package/dist/commands/optimize.d.ts.map +1 -0
- package/dist/commands/optimize.js +345 -0
- package/dist/commands/optimize.js.map +1 -0
- package/dist/commands/project.d.ts +3 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +475 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/prompt-metrics.d.ts +3 -0
- package/dist/commands/prompt-metrics.d.ts.map +1 -0
- package/dist/commands/prompt-metrics.js +665 -0
- package/dist/commands/prompt-metrics.js.map +1 -0
- package/dist/commands/replay-session.d.ts +3 -0
- package/dist/commands/replay-session.d.ts.map +1 -0
- package/dist/commands/replay-session.js +615 -0
- package/dist/commands/replay-session.js.map +1 -0
- package/dist/commands/retry-log.d.ts +3 -0
- package/dist/commands/retry-log.d.ts.map +1 -0
- package/dist/commands/retry-log.js +686 -0
- package/dist/commands/retry-log.js.map +1 -0
- package/dist/commands/rewrite-prompt.d.ts +3 -0
- package/dist/commands/rewrite-prompt.d.ts.map +1 -0
- package/dist/commands/rewrite-prompt.js +802 -0
- package/dist/commands/rewrite-prompt.js.map +1 -0
- package/dist/commands/set-budget.d.ts +3 -0
- package/dist/commands/set-budget.d.ts.map +1 -0
- package/dist/commands/set-budget.js +909 -0
- package/dist/commands/set-budget.js.map +1 -0
- package/dist/commands/simulate-cost.d.ts +3 -0
- package/dist/commands/simulate-cost.d.ts.map +1 -0
- package/dist/commands/simulate-cost.js +873 -0
- package/dist/commands/simulate-cost.js.map +1 -0
- package/dist/commands/suggest-models.d.ts +3 -0
- package/dist/commands/suggest-models.d.ts.map +1 -0
- package/dist/commands/suggest-models.js +674 -0
- package/dist/commands/suggest-models.js.map +1 -0
- package/dist/commands/test.d.ts +3 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +187 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/trace-workflow.d.ts +3 -0
- package/dist/commands/trace-workflow.d.ts.map +1 -0
- package/dist/commands/trace-workflow.js +651 -0
- package/dist/commands/trace-workflow.js.map +1 -0
- package/dist/commands/trace.d.ts +3 -0
- package/dist/commands/trace.d.ts.map +1 -0
- package/dist/commands/trace.js +468 -0
- package/dist/commands/trace.js.map +1 -0
- package/dist/commands/track.d.ts +3 -0
- package/dist/commands/track.d.ts.map +1 -0
- package/dist/commands/track.js +404 -0
- package/dist/commands/track.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +169 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/config.d.ts +46 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +321 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logger.d.ts +21 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +101 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/models.d.ts +22 -0
- package/dist/utils/models.d.ts.map +1 -0
- package/dist/utils/models.js +2251 -0
- package/dist/utils/models.js.map +1 -0
- package/package.json +107 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-prompt.js","sourceRoot":"","sources":["../../src/commands/debug-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-prompts.d.ts","sourceRoot":"","sources":["../../src/commands/diff-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,QAqGlD"}
|
|
@@ -0,0 +1,553 @@
|
|
|
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.diffPromptsCommand = diffPromptsCommand;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const logger_1 = require("../utils/logger");
|
|
9
|
+
const config_1 = require("../utils/config");
|
|
10
|
+
const axios_1 = __importDefault(require("axios"));
|
|
11
|
+
function diffPromptsCommand(program) {
|
|
12
|
+
const diffGroup = program
|
|
13
|
+
.command('diff-prompts')
|
|
14
|
+
.description('š Compare multiple prompts for behavioral drift and cost analysis');
|
|
15
|
+
// Main diff-prompts command
|
|
16
|
+
diffGroup
|
|
17
|
+
.option('--format <format>', 'Output format (table, json, csv)', 'table')
|
|
18
|
+
.option('--export <path>', 'Export diff data to file')
|
|
19
|
+
.option('-v, --verbose', 'Show detailed diff information')
|
|
20
|
+
.action(async (options) => {
|
|
21
|
+
try {
|
|
22
|
+
await handleDiffPrompts(options);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
logger_1.logger.error('Diff prompts command failed:', error);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
// Compare prompts by IDs
|
|
30
|
+
diffGroup
|
|
31
|
+
.command('ids')
|
|
32
|
+
.description('š Compare prompts by their IDs')
|
|
33
|
+
.option('-i, --ids <ids>', 'Comma-separated list of prompt IDs')
|
|
34
|
+
.option('--format <format>', 'Output format (table, json, csv)', 'table')
|
|
35
|
+
.option('--export <path>', 'Export diff data to file')
|
|
36
|
+
.option('-v, --verbose', 'Show detailed diff information')
|
|
37
|
+
.option('--include-semantic', 'Include semantic similarity analysis')
|
|
38
|
+
.option('--include-optimization', 'Include optimization suggestions')
|
|
39
|
+
.option('--include-behavioral', 'Include behavioral drift analysis')
|
|
40
|
+
.action(async (options) => {
|
|
41
|
+
try {
|
|
42
|
+
await handleDiffPromptsByIds(options);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
logger_1.logger.error('Diff prompts by IDs failed:', error);
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
// Compare prompts by content
|
|
50
|
+
diffGroup
|
|
51
|
+
.command('content')
|
|
52
|
+
.description('š Compare prompts by their content')
|
|
53
|
+
.option('-p, --prompts <prompts>', 'Comma-separated list of prompts')
|
|
54
|
+
.option('-f, --files <files>', 'Comma-separated list of prompt files')
|
|
55
|
+
.option('--format <format>', 'Output format (table, json, csv)', 'table')
|
|
56
|
+
.option('--export <path>', 'Export diff data to file')
|
|
57
|
+
.option('-v, --verbose', 'Show detailed diff information')
|
|
58
|
+
.option('--include-semantic', 'Include semantic similarity analysis')
|
|
59
|
+
.option('--include-optimization', 'Include optimization suggestions')
|
|
60
|
+
.option('--include-behavioral', 'Include behavioral drift analysis')
|
|
61
|
+
.action(async (options) => {
|
|
62
|
+
try {
|
|
63
|
+
await handleDiffPromptsByContent(options);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
logger_1.logger.error('Diff prompts by content failed:', error);
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
// Compare prompts by model
|
|
71
|
+
diffGroup
|
|
72
|
+
.command('model <modelName>')
|
|
73
|
+
.description('š¤ Compare prompts for a specific model')
|
|
74
|
+
.option('-d, --days <days>', 'Number of days to look back', '7')
|
|
75
|
+
.option('-n, --number <count>', 'Number of prompts to compare', '5')
|
|
76
|
+
.option('--format <format>', 'Output format (table, json, csv)', 'table')
|
|
77
|
+
.option('--export <path>', 'Export diff data to file')
|
|
78
|
+
.option('-v, --verbose', 'Show detailed diff information')
|
|
79
|
+
.option('--include-semantic', 'Include semantic similarity analysis')
|
|
80
|
+
.option('--include-optimization', 'Include optimization suggestions')
|
|
81
|
+
.option('--include-behavioral', 'Include behavioral drift analysis')
|
|
82
|
+
.action(async (modelName, options) => {
|
|
83
|
+
try {
|
|
84
|
+
await handleDiffPromptsByModel(modelName, options);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
logger_1.logger.error('Diff prompts by model failed:', error);
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
// Compare prompts by project
|
|
92
|
+
diffGroup
|
|
93
|
+
.command('project <projectName>')
|
|
94
|
+
.description('š Compare prompts for a specific project')
|
|
95
|
+
.option('-d, --days <days>', 'Number of days to look back', '7')
|
|
96
|
+
.option('-n, --number <count>', 'Number of prompts to compare', '5')
|
|
97
|
+
.option('--format <format>', 'Output format (table, json, csv)', 'table')
|
|
98
|
+
.option('--export <path>', 'Export diff data to file')
|
|
99
|
+
.option('-v, --verbose', 'Show detailed diff information')
|
|
100
|
+
.option('--include-semantic', 'Include semantic similarity analysis')
|
|
101
|
+
.option('--include-optimization', 'Include optimization suggestions')
|
|
102
|
+
.option('--include-behavioral', 'Include behavioral drift analysis')
|
|
103
|
+
.action(async (projectName, options) => {
|
|
104
|
+
try {
|
|
105
|
+
await handleDiffPromptsByProject(projectName, options);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
logger_1.logger.error('Diff prompts by project failed:', error);
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
async function handleDiffPrompts(options) {
|
|
114
|
+
console.log(chalk_1.default.cyan.bold('\nš Prompt Comparison & Behavioral Analysis'));
|
|
115
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
116
|
+
console.log(chalk_1.default.yellow('Available commands:'));
|
|
117
|
+
console.log(chalk_1.default.white(' costkatana diff-prompts ids Compare prompts by IDs'));
|
|
118
|
+
console.log(chalk_1.default.white(' costkatana diff-prompts content Compare prompts by content'));
|
|
119
|
+
console.log(chalk_1.default.white(' costkatana diff-prompts model <name> Compare prompts for a model'));
|
|
120
|
+
console.log(chalk_1.default.white(' costkatana diff-prompts project <name> Compare prompts for a project'));
|
|
121
|
+
console.log(chalk_1.default.gray('\nExamples:'));
|
|
122
|
+
console.log(chalk_1.default.white(' costkatana diff-prompts ids --ids prompt-38271,prompt-38272'));
|
|
123
|
+
console.log(chalk_1.default.white(' costkatana diff-prompts content --prompts "Hello","Hi there"'));
|
|
124
|
+
console.log(chalk_1.default.white(' costkatana diff-prompts model gpt-4 --number 10'));
|
|
125
|
+
console.log(chalk_1.default.white(' costkatana diff-prompts project my-project --verbose'));
|
|
126
|
+
console.log(chalk_1.default.gray('\nComparison Analysis:'));
|
|
127
|
+
console.log(chalk_1.default.white(' ⢠Side-by-side token & cost comparison'));
|
|
128
|
+
console.log(chalk_1.default.white(' ⢠Semantic similarity score'));
|
|
129
|
+
console.log(chalk_1.default.white(' ⢠Latency delta analysis'));
|
|
130
|
+
console.log(chalk_1.default.white(' ⢠Behavioral drift detection'));
|
|
131
|
+
console.log(chalk_1.default.white(' ⢠Optimization suggestions'));
|
|
132
|
+
console.log(chalk_1.default.white(' ⢠Performance trend analysis'));
|
|
133
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
134
|
+
}
|
|
135
|
+
async function handleDiffPromptsByIds(options) {
|
|
136
|
+
logger_1.logger.info('š Comparing prompts by IDs...');
|
|
137
|
+
try {
|
|
138
|
+
if (!options.ids) {
|
|
139
|
+
console.log(chalk_1.default.red.bold('\nā No prompt IDs provided'));
|
|
140
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
141
|
+
console.log(chalk_1.default.yellow('Please provide prompt IDs:'));
|
|
142
|
+
console.log(chalk_1.default.white(' ⢠--ids prompt-38271,prompt-38272'));
|
|
143
|
+
console.log(chalk_1.default.white(' ⢠--ids "prompt-38271, prompt-38272, prompt-38273"'));
|
|
144
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n'));
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const promptIds = options.ids.split(',').map((id) => id.trim());
|
|
148
|
+
if (promptIds.length < 2) {
|
|
149
|
+
console.log(chalk_1.default.red.bold('\nā At least 2 prompt IDs required for comparison'));
|
|
150
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n'));
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const diffData = await getPromptDiffByIds(promptIds, options);
|
|
154
|
+
displayPromptDiffResult(diffData, options);
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
logger_1.logger.error('Failed to compare prompts by IDs:', error);
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
async function getPromptDiffByIds(promptIds, options) {
|
|
162
|
+
const baseUrl = config_1.configManager.get('baseUrl');
|
|
163
|
+
const apiKey = config_1.configManager.get('apiKey');
|
|
164
|
+
if (!baseUrl || !apiKey) {
|
|
165
|
+
console.log(chalk_1.default.red.bold('\nā Configuration Missing'));
|
|
166
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
167
|
+
if (!apiKey) {
|
|
168
|
+
console.log(chalk_1.default.yellow('⢠API Key is not set'));
|
|
169
|
+
}
|
|
170
|
+
if (!baseUrl) {
|
|
171
|
+
console.log(chalk_1.default.yellow('⢠Base URL is not set'));
|
|
172
|
+
}
|
|
173
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
174
|
+
console.log(chalk_1.default.cyan('To set up your configuration, run:'));
|
|
175
|
+
console.log(chalk_1.default.white(' cost-katana init'));
|
|
176
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n'));
|
|
177
|
+
throw new Error('Configuration incomplete. Please run "cost-katana init" to set up your API key and base URL.');
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
const params = new URLSearchParams();
|
|
181
|
+
params.append('ids', promptIds.join(','));
|
|
182
|
+
if (options.includeSemantic)
|
|
183
|
+
params.append('includeSemantic', 'true');
|
|
184
|
+
if (options.includeOptimization)
|
|
185
|
+
params.append('includeOptimization', 'true');
|
|
186
|
+
if (options.includeBehavioral)
|
|
187
|
+
params.append('includeBehavioral', 'true');
|
|
188
|
+
const response = await axios_1.default.get(`${baseUrl}/api/diff/prompts/ids?${params}`, {
|
|
189
|
+
headers: {
|
|
190
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
191
|
+
'Content-Type': 'application/json',
|
|
192
|
+
},
|
|
193
|
+
timeout: 30000,
|
|
194
|
+
});
|
|
195
|
+
if (response.status !== 200) {
|
|
196
|
+
throw new Error(`API returned status ${response.status}`);
|
|
197
|
+
}
|
|
198
|
+
if (response.data.success && response.data.data) {
|
|
199
|
+
return response.data.data;
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
throw new Error(response.data.message || 'Invalid response format');
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
if (error.response) {
|
|
207
|
+
throw new Error(`API Error: ${error.response.status} - ${error.response.data?.message || 'Unknown error'}`);
|
|
208
|
+
}
|
|
209
|
+
else if (error.request) {
|
|
210
|
+
throw new Error('No response received from API');
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
throw new Error(`Request failed: ${error.message}`);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
function displayPromptDiffResult(diff, options) {
|
|
218
|
+
const format = options.format || 'table';
|
|
219
|
+
if (format === 'json') {
|
|
220
|
+
console.log(JSON.stringify(diff, null, 2));
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
else if (format === 'csv') {
|
|
224
|
+
console.log('Prompt ID,Model,Tokens,Cost,Latency,Similarity Score,Behavioral Drift');
|
|
225
|
+
diff.prompts.forEach((prompt) => {
|
|
226
|
+
console.log(`"${prompt.promptId}","${prompt.model}","${prompt.totalTokens}","${prompt.cost}","${prompt.latency}","${prompt.similarityScore || 'N/A'}","${prompt.behavioralDrift || 'N/A'}"`);
|
|
227
|
+
});
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
console.log(chalk_1.default.cyan.bold('\nš Prompt Comparison Analysis'));
|
|
231
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
232
|
+
// Summary Statistics
|
|
233
|
+
console.log(chalk_1.default.yellow.bold('\nš Summary Statistics'));
|
|
234
|
+
console.log(chalk_1.default.gray('ā'.repeat(50)));
|
|
235
|
+
console.log(chalk_1.default.white('Total Prompts:'), chalk_1.default.cyan(diff.prompts.length));
|
|
236
|
+
console.log(chalk_1.default.white('Average Cost:'), chalk_1.default.green(`$${(diff.prompts.reduce((sum, p) => sum + p.cost, 0) / diff.prompts.length).toFixed(4)}`));
|
|
237
|
+
console.log(chalk_1.default.white('Average Tokens:'), chalk_1.default.cyan(Math.round(diff.prompts.reduce((sum, p) => sum + p.totalTokens, 0) / diff.prompts.length)));
|
|
238
|
+
console.log(chalk_1.default.white('Average Latency:'), chalk_1.default.cyan(`${Math.round(diff.prompts.reduce((sum, p) => sum + p.latency, 0) / diff.prompts.length)}ms`));
|
|
239
|
+
// Side-by-side Comparison
|
|
240
|
+
console.log(chalk_1.default.yellow.bold('\nš Side-by-side Comparison'));
|
|
241
|
+
console.log(chalk_1.default.gray('ā'.repeat(50)));
|
|
242
|
+
diff.prompts.forEach((prompt, index) => {
|
|
243
|
+
console.log(chalk_1.default.white(`\n${index + 1}. ${prompt.promptId}`));
|
|
244
|
+
console.log(chalk_1.default.gray(' ā'.repeat(40)));
|
|
245
|
+
console.log(chalk_1.default.white(' š§ Model:'), chalk_1.default.cyan(prompt.model));
|
|
246
|
+
console.log(chalk_1.default.white(' š¢ Tokens:'), chalk_1.default.cyan(prompt.totalTokens));
|
|
247
|
+
console.log(chalk_1.default.white(' š° Cost:'), chalk_1.default.green(`$${prompt.cost.toFixed(4)}`));
|
|
248
|
+
console.log(chalk_1.default.white(' ā±ļø Latency:'), chalk_1.default.cyan(`${prompt.latency}ms`));
|
|
249
|
+
if (prompt.similarityScore !== undefined) {
|
|
250
|
+
const similarityColor = prompt.similarityScore > 0.8 ? chalk_1.default.green : prompt.similarityScore > 0.6 ? chalk_1.default.yellow : chalk_1.default.red;
|
|
251
|
+
console.log(chalk_1.default.white(' šÆ Similarity:'), similarityColor(`${(prompt.similarityScore * 100).toFixed(1)}%`));
|
|
252
|
+
}
|
|
253
|
+
if (prompt.behavioralDrift !== undefined) {
|
|
254
|
+
const driftColor = prompt.behavioralDrift < 0.1 ? chalk_1.default.green : prompt.behavioralDrift < 0.3 ? chalk_1.default.yellow : chalk_1.default.red;
|
|
255
|
+
console.log(chalk_1.default.white(' š Behavioral Drift:'), driftColor(`${(prompt.behavioralDrift * 100).toFixed(1)}%`));
|
|
256
|
+
}
|
|
257
|
+
if (options.verbose && prompt.prompt) {
|
|
258
|
+
console.log(chalk_1.default.white(' š Prompt:'));
|
|
259
|
+
console.log(chalk_1.default.gray(` ${prompt.prompt.substring(0, 150)}${prompt.prompt.length > 150 ? '...' : ''}`));
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
// Cost Analysis
|
|
263
|
+
if (diff.costAnalysis) {
|
|
264
|
+
console.log(chalk_1.default.yellow.bold('\nš° Cost Analysis'));
|
|
265
|
+
console.log(chalk_1.default.gray('ā'.repeat(50)));
|
|
266
|
+
console.log(chalk_1.default.white('Cost Range:'), chalk_1.default.cyan(`$${diff.costAnalysis.min.toFixed(4)} - $${diff.costAnalysis.max.toFixed(4)}`));
|
|
267
|
+
console.log(chalk_1.default.white('Cost Variance:'), chalk_1.default.cyan(`$${diff.costAnalysis.variance.toFixed(4)}`));
|
|
268
|
+
console.log(chalk_1.default.white('Cost Trend:'), chalk_1.default.cyan(diff.costAnalysis.trend));
|
|
269
|
+
if (diff.costAnalysis.optimizationPotential) {
|
|
270
|
+
console.log(chalk_1.default.white('Optimization Potential:'), chalk_1.default.green(`${(diff.costAnalysis.optimizationPotential * 100).toFixed(1)}%`));
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// Latency Analysis
|
|
274
|
+
if (diff.latencyAnalysis) {
|
|
275
|
+
console.log(chalk_1.default.yellow.bold('\nā±ļø Latency Analysis'));
|
|
276
|
+
console.log(chalk_1.default.gray('ā'.repeat(50)));
|
|
277
|
+
console.log(chalk_1.default.white('Latency Range:'), chalk_1.default.cyan(`${diff.latencyAnalysis.min}ms - ${diff.latencyAnalysis.max}ms`));
|
|
278
|
+
console.log(chalk_1.default.white('Latency Variance:'), chalk_1.default.cyan(`${diff.latencyAnalysis.variance.toFixed(0)}ms`));
|
|
279
|
+
console.log(chalk_1.default.white('Latency Trend:'), chalk_1.default.cyan(diff.latencyAnalysis.trend));
|
|
280
|
+
}
|
|
281
|
+
// Semantic Similarity Analysis
|
|
282
|
+
if (options.includeSemantic && diff.semanticAnalysis) {
|
|
283
|
+
console.log(chalk_1.default.yellow.bold('\nš§ Semantic Similarity Analysis'));
|
|
284
|
+
console.log(chalk_1.default.gray('ā'.repeat(50)));
|
|
285
|
+
console.log(chalk_1.default.white('Average Similarity:'), chalk_1.default.cyan(`${(diff.semanticAnalysis.averageSimilarity * 100).toFixed(1)}%`));
|
|
286
|
+
console.log(chalk_1.default.white('Similarity Range:'), chalk_1.default.cyan(`${(diff.semanticAnalysis.minSimilarity * 100).toFixed(1)}% - ${(diff.semanticAnalysis.maxSimilarity * 100).toFixed(1)}%`));
|
|
287
|
+
console.log(chalk_1.default.white('Clustering:'), chalk_1.default.cyan(diff.semanticAnalysis.clustering || 'N/A'));
|
|
288
|
+
}
|
|
289
|
+
// Behavioral Drift Analysis
|
|
290
|
+
if (options.includeBehavioral && diff.behavioralAnalysis) {
|
|
291
|
+
console.log(chalk_1.default.yellow.bold('\nš Behavioral Drift Analysis'));
|
|
292
|
+
console.log(chalk_1.default.gray('ā'.repeat(50)));
|
|
293
|
+
console.log(chalk_1.default.white('Average Drift:'), chalk_1.default.cyan(`${(diff.behavioralAnalysis.averageDrift * 100).toFixed(1)}%`));
|
|
294
|
+
console.log(chalk_1.default.white('Drift Trend:'), chalk_1.default.cyan(diff.behavioralAnalysis.trend));
|
|
295
|
+
console.log(chalk_1.default.white('Anomaly Detection:'), chalk_1.default.cyan(diff.behavioralAnalysis.anomalies?.length || 0, 'anomalies detected'));
|
|
296
|
+
if (diff.behavioralAnalysis.recommendations) {
|
|
297
|
+
console.log(chalk_1.default.white('Recommendations:'));
|
|
298
|
+
diff.behavioralAnalysis.recommendations.forEach((rec, index) => {
|
|
299
|
+
console.log(chalk_1.default.gray(` ${index + 1}. ${rec}`));
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// Optimization Suggestions
|
|
304
|
+
if (options.includeOptimization && diff.optimizationSuggestions) {
|
|
305
|
+
console.log(chalk_1.default.yellow.bold('\nš§ Optimization Suggestions'));
|
|
306
|
+
console.log(chalk_1.default.gray('ā'.repeat(50)));
|
|
307
|
+
diff.optimizationSuggestions.forEach((suggestion, index) => {
|
|
308
|
+
console.log(chalk_1.default.white(`${index + 1}. ${suggestion.type}:`));
|
|
309
|
+
console.log(chalk_1.default.gray(` ${suggestion.description}`));
|
|
310
|
+
if (suggestion.estimatedSavings) {
|
|
311
|
+
console.log(chalk_1.default.gray(` Estimated Savings: ${suggestion.estimatedSavings}`));
|
|
312
|
+
}
|
|
313
|
+
if (suggestion.implementation) {
|
|
314
|
+
console.log(chalk_1.default.gray(` Implementation: ${suggestion.implementation}`));
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
319
|
+
}
|
|
320
|
+
async function handleDiffPromptsByContent(options) {
|
|
321
|
+
logger_1.logger.info('š Comparing prompts by content...');
|
|
322
|
+
try {
|
|
323
|
+
let prompts = [];
|
|
324
|
+
if (options.prompts) {
|
|
325
|
+
prompts = options.prompts.split(',').map((p) => p.trim());
|
|
326
|
+
}
|
|
327
|
+
else if (options.files) {
|
|
328
|
+
const fs = require('fs');
|
|
329
|
+
const files = options.files.split(',').map((f) => f.trim());
|
|
330
|
+
prompts = files.map((file) => fs.readFileSync(file, 'utf8'));
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
console.log(chalk_1.default.red.bold('\nā No prompt content provided'));
|
|
334
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
335
|
+
console.log(chalk_1.default.yellow('Please provide either:'));
|
|
336
|
+
console.log(chalk_1.default.white(' ⢠--prompts "prompt1,prompt2,prompt3"'));
|
|
337
|
+
console.log(chalk_1.default.white(' ⢠--files "file1.txt,file2.txt,file3.txt"'));
|
|
338
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n'));
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
if (prompts.length < 2) {
|
|
342
|
+
console.log(chalk_1.default.red.bold('\nā At least 2 prompts required for comparison'));
|
|
343
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n'));
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
const diffData = await getPromptDiffByContent(prompts, options);
|
|
347
|
+
displayPromptDiffResult(diffData, options);
|
|
348
|
+
}
|
|
349
|
+
catch (error) {
|
|
350
|
+
logger_1.logger.error('Failed to compare prompts by content:', error);
|
|
351
|
+
process.exit(1);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
async function getPromptDiffByContent(prompts, options) {
|
|
355
|
+
const baseUrl = config_1.configManager.get('baseUrl');
|
|
356
|
+
const apiKey = config_1.configManager.get('apiKey');
|
|
357
|
+
if (!baseUrl || !apiKey) {
|
|
358
|
+
console.log(chalk_1.default.red.bold('\nā Configuration Missing'));
|
|
359
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
360
|
+
if (!apiKey) {
|
|
361
|
+
console.log(chalk_1.default.yellow('⢠API Key is not set'));
|
|
362
|
+
}
|
|
363
|
+
if (!baseUrl) {
|
|
364
|
+
console.log(chalk_1.default.yellow('⢠Base URL is not set'));
|
|
365
|
+
}
|
|
366
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
367
|
+
console.log(chalk_1.default.cyan('To set up your configuration, run:'));
|
|
368
|
+
console.log(chalk_1.default.white(' cost-katana init'));
|
|
369
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n'));
|
|
370
|
+
throw new Error('Configuration incomplete. Please run "cost-katana init" to set up your API key and base URL.');
|
|
371
|
+
}
|
|
372
|
+
try {
|
|
373
|
+
const params = new URLSearchParams();
|
|
374
|
+
if (options.includeSemantic)
|
|
375
|
+
params.append('includeSemantic', 'true');
|
|
376
|
+
if (options.includeOptimization)
|
|
377
|
+
params.append('includeOptimization', 'true');
|
|
378
|
+
if (options.includeBehavioral)
|
|
379
|
+
params.append('includeBehavioral', 'true');
|
|
380
|
+
const response = await axios_1.default.post(`${baseUrl}/api/diff/prompts/content?${params}`, {
|
|
381
|
+
prompts: prompts
|
|
382
|
+
}, {
|
|
383
|
+
headers: {
|
|
384
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
385
|
+
'Content-Type': 'application/json',
|
|
386
|
+
},
|
|
387
|
+
timeout: 30000,
|
|
388
|
+
});
|
|
389
|
+
if (response.status !== 200) {
|
|
390
|
+
throw new Error(`API returned status ${response.status}`);
|
|
391
|
+
}
|
|
392
|
+
if (response.data.success && response.data.data) {
|
|
393
|
+
return response.data.data;
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
throw new Error(response.data.message || 'Invalid response format');
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
catch (error) {
|
|
400
|
+
if (error.response) {
|
|
401
|
+
throw new Error(`API Error: ${error.response.status} - ${error.response.data?.message || 'Unknown error'}`);
|
|
402
|
+
}
|
|
403
|
+
else if (error.request) {
|
|
404
|
+
throw new Error('No response received from API');
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
throw new Error(`Request failed: ${error.message}`);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
async function handleDiffPromptsByModel(modelName, options) {
|
|
412
|
+
logger_1.logger.info(`š¤ Comparing prompts for model: ${modelName}`);
|
|
413
|
+
try {
|
|
414
|
+
const days = parseInt(options.days) || 7;
|
|
415
|
+
const count = parseInt(options.number) || 5;
|
|
416
|
+
const diffData = await getPromptDiffByModel(modelName, days, count, options);
|
|
417
|
+
displayPromptDiffResult(diffData, options);
|
|
418
|
+
}
|
|
419
|
+
catch (error) {
|
|
420
|
+
logger_1.logger.error('Failed to compare model prompts:', error);
|
|
421
|
+
process.exit(1);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
async function getPromptDiffByModel(modelName, days, count, options) {
|
|
425
|
+
const baseUrl = config_1.configManager.get('baseUrl');
|
|
426
|
+
const apiKey = config_1.configManager.get('apiKey');
|
|
427
|
+
if (!baseUrl || !apiKey) {
|
|
428
|
+
console.log(chalk_1.default.red.bold('\nā Configuration Missing'));
|
|
429
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
430
|
+
if (!apiKey) {
|
|
431
|
+
console.log(chalk_1.default.yellow('⢠API Key is not set'));
|
|
432
|
+
}
|
|
433
|
+
if (!baseUrl) {
|
|
434
|
+
console.log(chalk_1.default.yellow('⢠Base URL is not set'));
|
|
435
|
+
}
|
|
436
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
437
|
+
console.log(chalk_1.default.cyan('To set up your configuration, run:'));
|
|
438
|
+
console.log(chalk_1.default.white(' cost-katana init'));
|
|
439
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n'));
|
|
440
|
+
throw new Error('Configuration incomplete. Please run "cost-katana init" to set up your API key and base URL.');
|
|
441
|
+
}
|
|
442
|
+
try {
|
|
443
|
+
const params = new URLSearchParams();
|
|
444
|
+
params.append('model', modelName);
|
|
445
|
+
params.append('days', days.toString());
|
|
446
|
+
params.append('count', count.toString());
|
|
447
|
+
if (options.includeSemantic)
|
|
448
|
+
params.append('includeSemantic', 'true');
|
|
449
|
+
if (options.includeOptimization)
|
|
450
|
+
params.append('includeOptimization', 'true');
|
|
451
|
+
if (options.includeBehavioral)
|
|
452
|
+
params.append('includeBehavioral', 'true');
|
|
453
|
+
const response = await axios_1.default.get(`${baseUrl}/api/diff/prompts/model?${params}`, {
|
|
454
|
+
headers: {
|
|
455
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
456
|
+
'Content-Type': 'application/json',
|
|
457
|
+
},
|
|
458
|
+
timeout: 30000,
|
|
459
|
+
});
|
|
460
|
+
if (response.status !== 200) {
|
|
461
|
+
throw new Error(`API returned status ${response.status}`);
|
|
462
|
+
}
|
|
463
|
+
if (response.data.success && response.data.data) {
|
|
464
|
+
return response.data.data;
|
|
465
|
+
}
|
|
466
|
+
else {
|
|
467
|
+
throw new Error(response.data.message || 'Invalid response format');
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
catch (error) {
|
|
471
|
+
if (error.response) {
|
|
472
|
+
throw new Error(`API Error: ${error.response.status} - ${error.response.data?.message || 'Unknown error'}`);
|
|
473
|
+
}
|
|
474
|
+
else if (error.request) {
|
|
475
|
+
throw new Error('No response received from API');
|
|
476
|
+
}
|
|
477
|
+
else {
|
|
478
|
+
throw new Error(`Request failed: ${error.message}`);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
async function handleDiffPromptsByProject(projectName, options) {
|
|
483
|
+
logger_1.logger.info(`š Comparing prompts for project: ${projectName}`);
|
|
484
|
+
try {
|
|
485
|
+
const days = parseInt(options.days) || 7;
|
|
486
|
+
const count = parseInt(options.number) || 5;
|
|
487
|
+
const diffData = await getPromptDiffByProject(projectName, days, count, options);
|
|
488
|
+
displayPromptDiffResult(diffData, options);
|
|
489
|
+
}
|
|
490
|
+
catch (error) {
|
|
491
|
+
logger_1.logger.error('Failed to compare project prompts:', error);
|
|
492
|
+
process.exit(1);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
async function getPromptDiffByProject(projectName, days, count, options) {
|
|
496
|
+
const baseUrl = config_1.configManager.get('baseUrl');
|
|
497
|
+
const apiKey = config_1.configManager.get('apiKey');
|
|
498
|
+
if (!baseUrl || !apiKey) {
|
|
499
|
+
console.log(chalk_1.default.red.bold('\nā Configuration Missing'));
|
|
500
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
501
|
+
if (!apiKey) {
|
|
502
|
+
console.log(chalk_1.default.yellow('⢠API Key is not set'));
|
|
503
|
+
}
|
|
504
|
+
if (!baseUrl) {
|
|
505
|
+
console.log(chalk_1.default.yellow('⢠Base URL is not set'));
|
|
506
|
+
}
|
|
507
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā'));
|
|
508
|
+
console.log(chalk_1.default.cyan('To set up your configuration, run:'));
|
|
509
|
+
console.log(chalk_1.default.white(' cost-katana init'));
|
|
510
|
+
console.log(chalk_1.default.gray('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n'));
|
|
511
|
+
throw new Error('Configuration incomplete. Please run "cost-katana init" to set up your API key and base URL.');
|
|
512
|
+
}
|
|
513
|
+
try {
|
|
514
|
+
const params = new URLSearchParams();
|
|
515
|
+
params.append('project', projectName);
|
|
516
|
+
params.append('days', days.toString());
|
|
517
|
+
params.append('count', count.toString());
|
|
518
|
+
if (options.includeSemantic)
|
|
519
|
+
params.append('includeSemantic', 'true');
|
|
520
|
+
if (options.includeOptimization)
|
|
521
|
+
params.append('includeOptimization', 'true');
|
|
522
|
+
if (options.includeBehavioral)
|
|
523
|
+
params.append('includeBehavioral', 'true');
|
|
524
|
+
const response = await axios_1.default.get(`${baseUrl}/api/diff/prompts/project?${params}`, {
|
|
525
|
+
headers: {
|
|
526
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
527
|
+
'Content-Type': 'application/json',
|
|
528
|
+
},
|
|
529
|
+
timeout: 30000,
|
|
530
|
+
});
|
|
531
|
+
if (response.status !== 200) {
|
|
532
|
+
throw new Error(`API returned status ${response.status}`);
|
|
533
|
+
}
|
|
534
|
+
if (response.data.success && response.data.data) {
|
|
535
|
+
return response.data.data;
|
|
536
|
+
}
|
|
537
|
+
else {
|
|
538
|
+
throw new Error(response.data.message || 'Invalid response format');
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
catch (error) {
|
|
542
|
+
if (error.response) {
|
|
543
|
+
throw new Error(`API Error: ${error.response.status} - ${error.response.data?.message || 'Unknown error'}`);
|
|
544
|
+
}
|
|
545
|
+
else if (error.request) {
|
|
546
|
+
throw new Error('No response received from API');
|
|
547
|
+
}
|
|
548
|
+
else {
|
|
549
|
+
throw new Error(`Request failed: ${error.message}`);
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
//# sourceMappingURL=diff-prompts.js.map
|