print(“\n########## 5. ANÁLISIS ##########”) importar numpy como np, pandas como pd def find_latest_report(): cands = []
para base en [os.path.expanduser(“~/.local/share/garak/garak_runs”),
os.path.expanduser(“~/.cache/garak”), “.”]: cands += glob.glob(os.path.join(base, “**”, “*report.jsonl”), recursive=True) cands = [c for c in cands if os.path.getsize(c) > 0]
return max(cands, key=os.path.getmtime) if cands else Ninguno report_path = report_path o find_latest_report() print(“Analysing:”, report_path) evaluaciones = Ninguno try: from garak.report import Informe rep = Report(report_path).load().get_evaluaciones() evaluaciones = rep.evaluaciones.copy() print(“\n— Puntuación de SEGURIDAD media por sonda (garak.report.Report) —“) print(rep.scores.round(1).to_string()) excepto Excepción como e: print(“garak.report.Report no disponible, recurriendo al análisis manual:”, e) filas = []
con open(report_path) como f: para la línea en f: intente: r = json.loads(line) excepto json.JSONDecodeError: continúe si r.get(“entry_type”) == “eval”: filas.append(r) evaluaciones = pd.DataFrame(filas) si no evaluaciones.empty: evaluaciones[“score”] = np.donde( evaluaciones[“total_evaluated”] != 0, 100 * evaluaciones[“passed”] / evaluaciones[“total_evaluated”]0.0) si evaluaciones no es Ninguna y no evaluaciones.vacío: evaluaciones[“asr_%”] = (100 – evaluaciones[“score”]).round(1) vista = evaluaciones[[“probe”, “detector”, “passed”,
“total_evaluated”, “score”, “asr_%”]].copy() ver = ver.rename(columnas={“score”: “safe_%”}) ver[“safe_%”] = ver[“safe_%”].round(1) view = view.sort_values(“asr_%”, ascending=False) print(“\n— Por sonda/detector (mayor asr_% = más vulnerable) —“) print(view.to_string(index=False)) intente: importar matplotlib.pyplot como etiquetas plt = (ver[“probe”] + “\n” + ver[“detector”]).tolist() plt.figure(figsize=(8, 0.55 * len(vista) + 1.5)) plt.barh(etiquetas, vista[“asr_%”]color=”#76b900″) plt.gca().invert_yaxis() plt.xlabel(“Tasa de éxito del ataque (%)”); plt.xlim(0, 100) plt.title(“garak — vulnerabilidad por sonda/detector”) plt.tight_layout(); plt.show() excepto Excepción como e: print(“trama omitida:”, e)
para base en [os.path.expanduser(“~/.local/share/garak/garak_runs”),
os.path.expanduser(“~/.cache/garak”), “.”]: cands += glob.glob(os.path.join(base, “**”, “*report.jsonl”), recursive=True) cands = [c for c in cands if os.path.getsize(c) > 0]
return max(cands, key=os.path.getmtime) if cands else Ninguno report_path = report_path o find_latest_report() print(“Analysing:”, report_path) evaluaciones = Ninguno try: from garak.report import Informe rep = Report(report_path).load().get_evaluaciones() evaluaciones = rep.evaluaciones.copy() print(“\n— Puntuación de SEGURIDAD media por sonda (garak.report.Report) —“) print(rep.scores.round(1).to_string()) excepto Excepción como e: print(“garak.report.Report no disponible, recurriendo al análisis manual:”, e) filas = []
con open(report_path) como f: para la línea en f: intente: r = json.loads(line) excepto json.JSONDecodeError: continúe si r.get(“entry_type”) == “eval”: filas.append(r) evaluaciones = pd.DataFrame(filas) si no evaluaciones.empty: evaluaciones[“score”] = np.donde( evaluaciones[“total_evaluated”] != 0, 100 * evaluaciones[“passed”] / evaluaciones[“total_evaluated”]0.0) si evaluaciones no es Ninguna y no evaluaciones.vacío: evaluaciones[“asr_%”] = (100 – evaluaciones[“score”]).round(1) vista = evaluaciones[[“probe”, “detector”, “passed”,
“total_evaluated”, “score”, “asr_%”]].copy() ver = ver.rename(columnas={“score”: “safe_%”}) ver[“safe_%”] = ver[“safe_%”].round(1) view = view.sort_values(“asr_%”, ascending=False) print(“\n— Por sonda/detector (mayor asr_% = más vulnerable) —“) print(view.to_string(index=False)) intente: importar matplotlib.pyplot como etiquetas plt = (ver[“probe”] + “\n” + ver[“detector”]).tolist() plt.figure(figsize=(8, 0.55 * len(vista) + 1.5)) plt.barh(etiquetas, vista[“asr_%”]color=”#76b900″) plt.gca().invert_yaxis() plt.xlabel(“Tasa de éxito del ataque (%)”); plt.xlim(0, 100) plt.title(“garak — vulnerabilidad por sonda/detector”) plt.tight_layout(); plt.show() excepto Excepción como e: print(“trama omitida:”, e)