@leaperone/cli 0.1.8 → 0.1.10
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/dist/commands/credit.js +63 -1
- package/dist/commands/credit.js.map +1 -1
- package/dist/commands/endpoints.js +5 -1
- package/dist/commands/endpoints.js.map +1 -1
- package/dist/lib/output.d.ts +7 -0
- package/dist/lib/output.js +18 -0
- package/dist/lib/output.js.map +1 -1
- package/dist/types.d.ts +23 -0
- package/package.json +1 -1
package/dist/commands/credit.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { request } from "../lib/api.js";
|
|
2
|
-
import { jsonOutput, keyValue, table, error } from "../lib/output.js";
|
|
2
|
+
import { jsonOutput, keyValue, table, barChart, error } from "../lib/output.js";
|
|
3
3
|
import { spin } from "../lib/spinner.js";
|
|
4
4
|
export function registerCreditCommand(program) {
|
|
5
5
|
const credit = program.command("credit").description("View credits and usage");
|
|
@@ -69,5 +69,67 @@ export function registerCreditCommand(program) {
|
|
|
69
69
|
process.exit(1);
|
|
70
70
|
}
|
|
71
71
|
});
|
|
72
|
+
credit
|
|
73
|
+
.command("analytics")
|
|
74
|
+
.description("Show usage analytics and trends")
|
|
75
|
+
.option("-d, --days <n>", "Number of days to analyze", "7")
|
|
76
|
+
.action(async (opts) => {
|
|
77
|
+
const json = program.opts().json;
|
|
78
|
+
const days = Math.min(Math.max(1, Number(opts.days) || 7), 90);
|
|
79
|
+
try {
|
|
80
|
+
const s = json ? null : spin("Fetching analytics...");
|
|
81
|
+
const data = await request("/credits/analytics", {
|
|
82
|
+
query: { days: String(days) },
|
|
83
|
+
});
|
|
84
|
+
s?.stop();
|
|
85
|
+
if (json) {
|
|
86
|
+
jsonOutput(data);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const { summary, dailySpend, topModels, topEndpoints } = data;
|
|
90
|
+
console.log(`Usage Analytics (last ${days} days)\n`);
|
|
91
|
+
keyValue([
|
|
92
|
+
["Total spend", `$${summary.totalSpend.toFixed(4)}`],
|
|
93
|
+
["This month", `$${summary.thisMonthSpend.toFixed(4)}`],
|
|
94
|
+
["Last month", `$${summary.lastMonthSpend.toFixed(4)}`],
|
|
95
|
+
["Total calls", summary.totalCalls.toLocaleString()],
|
|
96
|
+
]);
|
|
97
|
+
barChart("Daily Spend", dailySpend
|
|
98
|
+
.filter((d) => d.amount > 0 || dailySpend.length <= 14)
|
|
99
|
+
.map((d) => ({
|
|
100
|
+
label: d.date.slice(5), // MM-DD
|
|
101
|
+
value: d.amount,
|
|
102
|
+
display: `$${d.amount.toFixed(4)} (${d.calls})`,
|
|
103
|
+
})));
|
|
104
|
+
barChart("Top Models", topModels.map((m) => ({
|
|
105
|
+
label: m.model,
|
|
106
|
+
value: m.amount,
|
|
107
|
+
display: `$${m.amount.toFixed(4)} (${m.calls})`,
|
|
108
|
+
})));
|
|
109
|
+
const ENDPOINT_LABELS = {
|
|
110
|
+
CHAT_COMPLETION_API: "Chat",
|
|
111
|
+
RESPONSES_API: "Responses",
|
|
112
|
+
IMAGE_GENERATION: "Image",
|
|
113
|
+
AUDIO_TRANSCRIPTION: "Audio",
|
|
114
|
+
EMBEDDING: "Embedding",
|
|
115
|
+
ADDRESS_PURIFICATION: "Address",
|
|
116
|
+
VIDEO_EXTRACT: "Video",
|
|
117
|
+
SOCIAL_MEDIA_DATA: "Social Media",
|
|
118
|
+
};
|
|
119
|
+
barChart("Top Endpoints", topEndpoints.map((e) => ({
|
|
120
|
+
label: ENDPOINT_LABELS[e.endpoint] ?? e.endpoint,
|
|
121
|
+
value: e.amount,
|
|
122
|
+
display: `$${e.amount.toFixed(4)} (${e.calls})`,
|
|
123
|
+
})));
|
|
124
|
+
console.log("");
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
if (json)
|
|
128
|
+
jsonOutput({ error: err.message });
|
|
129
|
+
else
|
|
130
|
+
error(err.message);
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
72
134
|
}
|
|
73
135
|
//# sourceMappingURL=credit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credit.js","sourceRoot":"","sources":["../../src/commands/credit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"credit.js","sourceRoot":"","sources":["../../src/commands/credit.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,14 +9,18 @@ function formatPricing(endpoint) {
|
|
|
9
9
|
switch (first.type) {
|
|
10
10
|
case "token": {
|
|
11
11
|
const prices = endpoint.pricing
|
|
12
|
+
.filter((p) => p.type === "token")
|
|
12
13
|
.map((p) => `$${p.inputPer1M}/$${p.outputPer1M}`)
|
|
13
14
|
.join(", ");
|
|
14
|
-
|
|
15
|
+
const passThrough = endpoint.pricing.some((p) => p.type === "pass-through");
|
|
16
|
+
return prices + (passThrough ? " + pass-through" : "") + " /1M tokens";
|
|
15
17
|
}
|
|
16
18
|
case "duration":
|
|
17
19
|
return `$${first.perMinute} /min`;
|
|
18
20
|
case "fixed":
|
|
19
21
|
return `$${first.perUnit} /${first.unit}`;
|
|
22
|
+
case "pass-through":
|
|
23
|
+
return "pass-through";
|
|
20
24
|
default:
|
|
21
25
|
return "-";
|
|
22
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../src/commands/endpoints.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAmCzC,SAAS,aAAa,CAAC,QAAsB;IAC3C,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAE9C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO;iBAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;iBAChD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,
|
|
1
|
+
{"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../src/commands/endpoints.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/output.d.ts
CHANGED
|
@@ -4,3 +4,10 @@ export declare function keyValue(pairs: [string, string][]): void;
|
|
|
4
4
|
export declare function success(msg: string): void;
|
|
5
5
|
export declare function error(msg: string): void;
|
|
6
6
|
export declare function warn(msg: string): void;
|
|
7
|
+
export declare function barChart(title: string, items: Array<{
|
|
8
|
+
label: string;
|
|
9
|
+
value: number;
|
|
10
|
+
display?: string;
|
|
11
|
+
}>, options?: {
|
|
12
|
+
maxBarWidth?: number;
|
|
13
|
+
}): void;
|
package/dist/lib/output.js
CHANGED
|
@@ -32,4 +32,22 @@ export function error(msg) {
|
|
|
32
32
|
export function warn(msg) {
|
|
33
33
|
console.warn(`${chalk.yellow("!")} ${msg}`);
|
|
34
34
|
}
|
|
35
|
+
export function barChart(title, items, options) {
|
|
36
|
+
if (items.length === 0) {
|
|
37
|
+
console.log(`\n${chalk.bold(title)}`);
|
|
38
|
+
console.log(chalk.dim(" No data"));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const maxBar = options?.maxBarWidth ?? 30;
|
|
42
|
+
const maxVal = Math.max(...items.map((i) => i.value));
|
|
43
|
+
const maxLabelLen = Math.max(...items.map((i) => i.label.length));
|
|
44
|
+
console.log(`\n${chalk.bold(title)}`);
|
|
45
|
+
for (const item of items) {
|
|
46
|
+
const barLen = maxVal > 0 ? Math.round((item.value / maxVal) * maxBar) : 0;
|
|
47
|
+
const bar = chalk.green("█".repeat(barLen));
|
|
48
|
+
const label = chalk.dim(item.label.padEnd(maxLabelLen));
|
|
49
|
+
const display = item.display ?? `$${item.value.toFixed(4)}`;
|
|
50
|
+
console.log(` ${label} ${bar} ${display}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
35
53
|
//# sourceMappingURL=output.js.map
|
package/dist/lib/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,KAAK,CACnB,OAAiB,EACjB,IAAgB;IAEhB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACrC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAC5D,CAAC;IAEF,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1F,MAAM,SAAS,GAAG,CAAC,GAAa,EAAE,QAAQ,GAAG,KAAK,EAAE,EAAE,CACpD,GAAG;SACA,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACxD,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAChD,CAAC,CAAC;SACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAE1B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAyB;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AAC9C,CAAC"}
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -70,6 +70,29 @@ export interface TicketDetail {
|
|
|
70
70
|
resolvedAt: string | null;
|
|
71
71
|
messages: TicketMessage[];
|
|
72
72
|
}
|
|
73
|
+
export interface AnalyticsData {
|
|
74
|
+
summary: {
|
|
75
|
+
totalSpend: number;
|
|
76
|
+
thisMonthSpend: number;
|
|
77
|
+
lastMonthSpend: number;
|
|
78
|
+
totalCalls: number;
|
|
79
|
+
};
|
|
80
|
+
dailySpend: Array<{
|
|
81
|
+
date: string;
|
|
82
|
+
amount: number;
|
|
83
|
+
calls: number;
|
|
84
|
+
}>;
|
|
85
|
+
topModels: Array<{
|
|
86
|
+
model: string;
|
|
87
|
+
amount: number;
|
|
88
|
+
calls: number;
|
|
89
|
+
}>;
|
|
90
|
+
topEndpoints: Array<{
|
|
91
|
+
endpoint: string;
|
|
92
|
+
amount: number;
|
|
93
|
+
calls: number;
|
|
94
|
+
}>;
|
|
95
|
+
}
|
|
73
96
|
export interface ApiResponse<T> {
|
|
74
97
|
success: boolean;
|
|
75
98
|
data?: T;
|