Files
cluster-knaster/core/src/knaster/calibration.py
T

40 lines
1.2 KiB
Python

"""Kalibrierung des effektiven Kontexts aus beobachteten Pass-Rates nach Prompt-Länge."""
from __future__ import annotations
from collections.abc import Iterable
DEFAULT_BUCKETS = (2048, 4096, 8192, 16384, 32768, 65536, 131072)
def effective_context(
observations: Iterable[tuple[int, bool]],
*,
target: float = 0.9,
min_n: int = 20,
buckets: tuple[int, ...] = DEFAULT_BUCKETS,
) -> int | None:
"""observations: (prompt_tokens, bestanden).
Liefert die Obergrenze des größten Buckets, bis zu dem alle Buckets mit genug Daten
die Ziel-Pass-Rate erreichen. Buckets ohne genug Daten unterbrechen die Kette nicht,
zählen aber auch nicht als Nachweis. Ohne Nachweis: None.
"""
counts = {b: [0, 0] for b in buckets} # [n, passed]
for tokens, passed in observations:
for b in buckets:
if tokens <= b:
counts[b][0] += 1
counts[b][1] += int(passed)
break
result = None
for b in buckets:
n, ok = counts[b]
if n < min_n:
continue
if ok / n >= target:
result = b
else:
break
return result