47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
import { i18n } from "@mariozechner/mini-lit";
|
|
export function formatCost(cost) {
|
|
return `$${cost.toFixed(4)}`;
|
|
}
|
|
export function formatModelCost(cost) {
|
|
if (!cost)
|
|
return i18n("Free");
|
|
const input = cost.input || 0;
|
|
const output = cost.output || 0;
|
|
if (input === 0 && output === 0)
|
|
return i18n("Free");
|
|
// Format numbers with appropriate precision
|
|
const formatNum = (num) => {
|
|
if (num >= 100)
|
|
return num.toFixed(0);
|
|
if (num >= 10)
|
|
return num.toFixed(1).replace(/\.0$/, "");
|
|
if (num >= 1)
|
|
return num.toFixed(2).replace(/\.?0+$/, "");
|
|
return num.toFixed(3).replace(/\.?0+$/, "");
|
|
};
|
|
return `$${formatNum(input)}/$${formatNum(output)}`;
|
|
}
|
|
export function formatUsage(usage) {
|
|
if (!usage)
|
|
return "";
|
|
const parts = [];
|
|
if (usage.input)
|
|
parts.push(`↑${formatTokenCount(usage.input)}`);
|
|
if (usage.output)
|
|
parts.push(`↓${formatTokenCount(usage.output)}`);
|
|
if (usage.cacheRead)
|
|
parts.push(`R${formatTokenCount(usage.cacheRead)}`);
|
|
if (usage.cacheWrite)
|
|
parts.push(`W${formatTokenCount(usage.cacheWrite)}`);
|
|
if (usage.cost?.total)
|
|
parts.push(formatCost(usage.cost.total));
|
|
return parts.join(" ");
|
|
}
|
|
export function formatTokenCount(count) {
|
|
if (count < 1000)
|
|
return count.toString();
|
|
if (count < 10000)
|
|
return (count / 1000).toFixed(1) + "k";
|
|
return Math.round(count / 1000) + "k";
|
|
}
|
|
//# sourceMappingURL=format.js.map
|