ollama/format/bytes.go

64 lines
1.2 KiB
Go
Raw Normal View History

2023-10-11 17:55:07 +00:00
package format
import (
"fmt"
"math"
)
2023-10-11 17:55:07 +00:00
2023-10-12 16:34:16 +00:00
const (
Byte = 1
2023-10-12 16:34:16 +00:00
KiloByte = Byte * 1000
MegaByte = KiloByte * 1000
GigaByte = MegaByte * 1000
2023-11-15 00:33:09 +00:00
TeraByte = GigaByte * 1000
KibiByte = Byte * 1024
MebiByte = KibiByte * 1024
GibiByte = MebiByte * 1024
2023-10-12 16:34:16 +00:00
)
2023-10-11 17:55:07 +00:00
func HumanBytes(b int64) string {
var value float64
var unit string
2023-10-11 17:55:07 +00:00
switch {
case b >= TeraByte:
value = float64(b) / TeraByte
unit = "TB"
case b >= GigaByte:
value = float64(b) / GigaByte
unit = "GB"
case b >= MegaByte:
value = float64(b) / MegaByte
unit = "MB"
case b >= KiloByte:
value = float64(b) / KiloByte
unit = "KB"
2023-10-11 17:55:07 +00:00
default:
return fmt.Sprintf("%d B", b)
}
switch {
case value >= 100:
return fmt.Sprintf("%d %s", int(value), unit)
2023-11-19 00:23:03 +00:00
case value >= 10:
return fmt.Sprintf("%d %s", int(value), unit)
case value != math.Trunc(value):
return fmt.Sprintf("%.1f %s", value, unit)
default:
return fmt.Sprintf("%d %s", int(value), unit)
}
2023-10-11 17:55:07 +00:00
}
2024-04-05 21:50:38 +00:00
func HumanBytes2(b uint64) string {
switch {
case b >= MebiByte:
return fmt.Sprintf("%.1f MiB", float64(b)/MebiByte)
case b >= KibiByte:
return fmt.Sprintf("%.1f KiB", float64(b)/KibiByte)
default:
return fmt.Sprintf("%d B", b)
}
}