File size: 1,265 Bytes
c6afb12
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import type { GuardModel } from '$lib/types/leaderboard';

export function isNumber(value: unknown): value is number {
	return typeof value === 'number' && Number.isFinite(value);
}

export function average(values: (number | null)[]) {
	const present = values.filter(isNumber);
	if (!present.length) return null;

	return present.reduce((total, value) => total + value, 0) / present.length;
}

export function geometricMean(values: number[]) {
	const present = values.filter((value) => value > 0);
	if (!present.length) return null;

	const logSum = present.reduce((total, value) => total + Math.log(value), 0);
	return Math.exp(logSum / present.length);
}

export function sizeNumber(size: string) {
	const parsed = Number.parseFloat(size);
	return Number.isFinite(parsed) ? parsed : Number.NaN;
}

export function formatIsoDate(value: string, locale: string) {
	const date = new Date(`${value}T00:00:00.000Z`);
	if (Number.isNaN(date.getTime()) || date.toISOString().slice(0, 10) !== value) return value;

	return new Intl.DateTimeFormat(locale, {
		day: 'numeric',
		month: 'short',
		year: 'numeric',
		timeZone: 'UTC'
	}).format(date);
}

export function modelRepositoryUrl(model: GuardModel) {
	return model.hfUrl ?? `https://huggingface.co/${model.name}`;
}