35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
/** Seuil Memory Echo (prod) — connexions sous ce score ne sont pas proposées. */
|
||
export const SEMANTIC_SIMILARITY_FLOOR = 0.60
|
||
export const SEMANTIC_SIMILARITY_FLOOR_DEMO = 0.5
|
||
/** Seuil assoupli pour notes clippées / RTL (persan, arabe) — bruit HTML réduit la similarité. */
|
||
export const SEMANTIC_SIMILARITY_FLOOR_CLIP = 0.58
|
||
|
||
/** Ratio 0 (seuil) → 1 (identique), pour étaler l’affichage au-dessus du seuil. */
|
||
export function semanticProximityRatio(
|
||
similarity: number,
|
||
floor = SEMANTIC_SIMILARITY_FLOOR,
|
||
): number {
|
||
const clamped = Math.max(floor, Math.min(1, similarity))
|
||
if (floor >= 1) return 1
|
||
return (clamped - floor) / (1 - floor)
|
||
}
|
||
|
||
/** Pourcentage « proximité » affiché (0–100), étalé entre le seuil et 100 %. */
|
||
export function semanticProximityPercent(
|
||
similarity: number,
|
||
floor = SEMANTIC_SIMILARITY_FLOOR,
|
||
): number {
|
||
return Math.round(semanticProximityRatio(similarity, floor) * 100)
|
||
}
|
||
|
||
/** Rayon orbite : plus la proximité est forte, plus le nœud est proche du centre. */
|
||
export function semanticOrbitRadius(
|
||
similarity: number,
|
||
floor = SEMANTIC_SIMILARITY_FLOOR,
|
||
): number {
|
||
const MIN_R = 34
|
||
const MAX_R = 94
|
||
const t = semanticProximityRatio(similarity, floor)
|
||
return MAX_R - t * (MAX_R - MIN_R)
|
||
}
|