hermes-agent / apps /shared /src /format.ts
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
f76c374 verified
Raw History Blame Contribute Delete
1.05 kB
// THE compact-number formatter β€” every user-facing count/token figure goes
// through here. 999 β†’ "999", 1000 β†’ "1k", 1230 β†’ "1.2k", 10000 β†’ "10k",
// 1_500_000 β†’ "1.5M". `M` is the top rung by design: token and cost figures
// this renders stay well under a billion, so 1e9 reads "1000M" rather than
// growing a `B` rung that no surface needs (and that would collide with the
// "bytes" reading in size labels). Do not hand-roll `/ 1000` display math elsewhere.
export function compactNumber(value: null | number | undefined): string {
const num = Number(value ?? 0)
if (!Number.isFinite(num) || num <= 0) {
return '0'
}
const scaled = (v: number, suffix: string) => `${v.toFixed(1).replace(/\.0$/, '')}${suffix}`
// Thresholds sit just under the unit boundary so rounding can't produce
// "1000k" or "1000" β€” those promote to the next unit instead.
if (num >= 999_950) {
return scaled(num / 1_000_000, 'M')
}
if (num >= 999.5) {
return scaled(num / 1_000, 'k')
}
return `${Math.round(num)}`
}