mirror of
https://github.com/mcloh/decision-models-benchmark.git
synced 2026-11-05 22:04:12 +00:00
- 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>
53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
"""Interface comum dos adaptadores JEV locais (tarefas 42–47)."""
|
||
from __future__ import annotations
|
||
|
||
from abc import ABC, abstractmethod
|
||
from pathlib import Path
|
||
|
||
|
||
class Adapter(ABC):
|
||
"""Um candidato servido atrás de POST /v1/systemone.
|
||
|
||
`decide` recebe o estado já serializado (texto) e as perguntas no formato JEV e
|
||
devolve as respostas JEV de cada pergunta, mais o total de tokens de entrada.
|
||
"""
|
||
|
||
name: str
|
||
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",
|
||
context_limit: int | None = None):
|
||
self.model_dir = Path(model_dir)
|
||
self.revision = revision
|
||
self.device = device
|
||
self._context_limit = context_limit
|
||
|
||
@property
|
||
def model_id(self) -> str:
|
||
return f"{self.name}@{self.revision[:12]}"
|
||
|
||
@property
|
||
def context_limit(self) -> int:
|
||
return self._context_limit or self.native_context_limit()
|
||
|
||
@abstractmethod
|
||
def load(self) -> None: ...
|
||
|
||
@abstractmethod
|
||
def native_context_limit(self) -> int: ...
|
||
|
||
@abstractmethod
|
||
def count_tokens(self, text: str) -> int: ...
|
||
|
||
@abstractmethod
|
||
def decide(self, state: str, questions: dict) -> tuple[dict, int]: ...
|
||
|
||
def describe(self) -> dict:
|
||
return {"name": self.name, "model_id": self.model_id, "revision": self.revision,
|
||
"adapter_version": self.adapter_version, "device": self.device,
|
||
"context_limit": self.context_limit,
|
||
"probabilities_source": self.probabilities_source}
|