Files
decision-models-benchmark/dmb/adapter.py
Marcos Lohmann 328ccd1c2e 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>
2026-10-07 15:06:57 -03:00

53 lines
1.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""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}