src / router.ts
export interface SkillPick {
name: string;
p: number;
}
type RouterSettings = { threshold: number; maxSkills: number };
/** Threshold, sort by probability desc then name asc, cap at maxSkills. Pure. */
export function pickSkills(probabilities: Record<string, number>, settings: RouterSettings): SkillPick[] {
if (settings.maxSkills <= 0) return [];
return Object.entries(probabilities)
.filter(([, p]) => Number.isFinite(p) && p >= settings.threshold)
.map(([name, p]) => ({ name, p }))
.sort((a, b) => b.p - a.p || a.name.localeCompare(b.name))
.slice(0, settings.maxSkills);
}
src / router.ts
export interface SkillPick {
name: string;
p: number;
}
type RouterSettings = { threshold: number; maxSkills: number };
/** Threshold, sort by probability desc then name asc, cap at maxSkills. Pure. */
export function pickSkills(probabilities: Record<string, number>, settings: RouterSettings): SkillPick[] {
if (settings.maxSkills <= 0) return [];
return Object.entries(probabilities)
.filter(([, p]) => Number.isFinite(p) && p >= settings.threshold)
.map(([name, p]) => ({ name, p }))
.sort((a, b) => b.p - a.p || a.name.localeCompare(b.name))
.slice(0, settings.maxSkills);
}