Executor de avaliação, métricas e .gitignore para metadados de modelos

- harness/evaluate.py: partição congelada com SHA-256, amostra com seed,
  lote 1, truncamento comum, contagem de tokens, latência (sem aquecimento),
  pico de RAM e GPU; teste bloqueado até o congelamento da configuração.
- analysis/metrics.py: acurácia, macro F1, Brier, NLL, ECE, acurácia seletiva.
- Diagnósticos por resposta (metadata.diagnostics); Laya informa opções
  colapsadas pelo orçamento de cabeçalho; head_max_len via DMB_LAYA_HEAD_MAX_LEN.
- infra/ds/collect.py e gpu_queue --env para pilotos e rodadas.
- .gitignore: de models/ só metadados (cards, configs, licenças, índices);
  pesos, tokenizadores grandes, runtimes, fontes clonados e caches ignorados.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Marcos Lohmann
2026-10-07 15:06:57 -03:00
parent 344d1582fe
commit 328ccd1c2e
26 changed files with 5369 additions and 6 deletions

View File

@@ -13,7 +13,9 @@ class Adapter(ABC):
"""
name: str
adapter_version = "0.1.0"
adapter_version = "0.2.0"
# Diagnósticos da última decisão (ex.: opções truncadas pelo modelo); vão para metadata.diagnostics.
last_diagnostics: dict = {}
probabilities_source = "native"
def __init__(self, model_dir: str | Path, revision: str, device: str = "auto",

View File

@@ -41,6 +41,8 @@ def build_response(adapter: Adapter, request: dict, answers: dict, input_tokens:
"probabilities_source": adapter.probabilities_source,
},
}
if adapter.last_diagnostics:
response["metadata"]["diagnostics"] = adapter.last_diagnostics
errors = response_errors(response)
if errors:
raise UnknownOption("resposta fora do contrato: " + "; ".join(errors[:3]))
@@ -54,6 +56,7 @@ def systemone(adapter: Adapter, request: dict) -> dict:
if not isinstance(state, str):
# Todo adaptador recebe texto; estados estruturados viram JSON canônico.
state = json.dumps(state, ensure_ascii=False, sort_keys=True)
adapter.last_diagnostics = {}
started = time.perf_counter()
answers, input_tokens = adapter.decide(state, request["questions"])
latency_ms = (time.perf_counter() - started) * 1000