File size: 975 Bytes
03e5649
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""fallback_utils.py — Funzioni di utilità per il loop di fallback.
Estratto da unified_loop_fallback.py (split 2026-06-30).
"""
import re

def _is_refusal(text: str) -> bool:
    """Verifica se la risposta del modello è un rifiuto (S129)."""
    if not text: return False
    refusals = ["mi dispiace", "non posso", "i apologize", "i cannot", "unauthorized", "access denied"]
    t = text.lower()
    return any(r in t for r in refusals)

def _s759_bjac(a: str, b: str) -> float:
    """Calcola la somiglianza di Jaccard tra due stringhe (S759)."""
    if not a or not b: return 0.0
    set_a = set(a.lower().split())
    set_b = set(b.lower().split())
    intersection = len(set_a.intersection(set_b))
    union = len(set_a.union(set_b))
    return intersection / union if union > 0 else 0.0

def _avg10(lst: list) -> float:
    """Calcola la media degli ultimi 10 elementi di una lista."""
    if not lst: return 0.0
    sub = lst[-10:]
    return sum(sub) / len(sub)