Diego Souza · AI Engineer

Todos os projetos

Foundation e evals live

Os contratos que todo projeto compartilha, e a avaliação que me disse que meu agente não estava pronto.

reprovado provisoriamente, publicadoÚltima verificação: 2026-10-30 · Commit 0725025

Resumo

Problema
Serviços independentes precisam de um vocabulário só para tickets, faturas e ferramentas, e de um jeito honesto de testar um modelo contra ele.
Meu papel
Escrevi os contratos, o testkit e o runner de campanha, e rodei a avaliação.
Stack
Python, Pydantic, uv, pytest
Resultado
27 of 36 trials com modelo real aprovados, e 9 of 12 casos únicos passaram nos três trials (intervalo de confiança 0.47 to 0.91 (Wilson, 95%)). Veredito `FAIL_PROVISIONAL`.

Modelos de domínio, dataset com semente, testkit e um só ledger de orçamento entre fake, replay e live. Depois vem a parte honesta: uma campanha com modelo real, publicada com taxa de acerto, intervalo de confiança e as famílias que falharam. O veredito foi `FAIL_PROVISIONAL`, e mantive o orçamento de holdout intacto em vez de ajustar até o número ficar bonito.

Veja rodando

O demo ao vivo roda este sistema contra um modelo real e mostra cada passo.

Demo ao vivo

Como funciona

Do dataset ao vereditoFluxo: Dataset com semente, Uma fábrica de clientes, Fake, Replay, Live com orçamento, Campanha, VereditoDataset com sementeUma fábrica de clientesFakeReplayLive com orçamentoCampanhaVereditoDo dataset ao vereditoFluxo: Dataset com semente, Uma fábrica de clientes, Fake, Replay, Live com orçamento, Campanha, VereditoDataset com sementeUma fábrica de clientesFakeReplayLive com orçamentoCampanhaVeredito

O fluxo inteiro. Aperte tocar ou próximo para percorrer.

Versão em texto deste diagrama
  1. Dataset com semente P00. Dados determinísticos com digest, então uma mudança fica visível.
    • depois Uma fábrica de clientes
  2. Uma fábrica de clientes P00. Uma interface escolhe fake, replay ou live.
    • depois Fake
    • depois Replay
    • depois Live com orçamento
  3. Fake P00. Determinístico, o padrão em testes e CI.
  4. Replay P00. Lê cassettes gravados e falha se algo divergir.
  5. Live com orçamento P00. O orçamento é reservado antes do transporte.
    • depois Campanha
  6. Campanha P00. Trials em blocos que nunca repetem um concluído ou incerto.
    • depois Veredito
  7. Veredito P00. O relatório traz a taxa, o intervalo e as famílias que falharam.

Decisões

Campos desconhecidos são erros

Os modelos rejeitam campos desconhecidos e exigem fuso horário, então uma mudança de contrato aparece nos testes de um consumidor antes de aparecer em produção.

Código: supportops_foundation/domain/models.py

Descartado: Dicionários soltos passados entre serviços.

Uma interface para fake, replay e live

Uma fábrica escolhe o modo, e o modo live reserva orçamento antes de qualquer transporte. A lógica de controle é testável sem provedor.

Código: supportops_foundation/llm/factory.py

Descartado: Um caminho de código separado para avaliação.

Publicar a falha e proteger o holdout

Quando a campanha falhou, não a rodei de novo contra o orçamento protegido. O relatório traz as famílias que falharam e para. 84 held-out calls and 60 confirmation calls stayed reserved.

Código: scripts/run_live_campaign.py

Descartado: Ajustar o prompt contra os casos de holdout até o número passar.

Resultados

Medido

Medido
MétricaValorModoFonte
Trials com modelo real aprovados (conjunto de desenvolvimento) Conjunto de desenvolvimento, não holdout. Status FAIL_PROVISIONAL; o exit code segue esse status, como o README do P00 define.27 of 36modelo realartifacts/evals/live/free-dev-c2r1/report.jsonCommit 09d8c1e · 2026-10-28 · Exit code 1
Casos únicos aprovados nos três trials Mesma campanha, mesmo status.9 of 12modelo realartifacts/evals/live/free-dev-c2r1/report.jsonCommit 09d8c1e · 2026-10-28 · Exit code 1
Intervalo de Wilson 95% da taxa de aprovação nos três trials Arredondado para duas casas a partir do relatório.0.47 to 0.91 (Wilson, 95%)modelo realartifacts/evals/live/free-dev-c2r1/report.jsonCommit 09d8c1e · 2026-10-28 · Exit code 1
Falhas por família na campanha de desenvolvimento Contagem de erros, não de trials reprovados; um trial pode ter mais de um.classification 3, routing 6, tool selection 3modelo realartifacts/evals/live/free-dev-c2r1/report.jsonCommit 09d8c1e · 2026-10-28 · Exit code 1
Orçamento de avaliação protegido84 held-out calls and 60 confirmation calls stayed reservedmodelo realdocs/harness/progress.mdCommit 6b84f9a · 2026-10-30 · Exit code 0

Não medido, então não afirmado

  • Desempenho em holdout e confirmação. Esses orçamentos não foram gastos.
  • Revisão humana das respostas. Está pendente.
  • Latência do provedor sob carga.

Galeria de falhas

O que aconteceu
Uma campanha retomada podia iniciar um cliente de provedor depois de um erro anterior do provedor.
Causa
Um resultado de erro já concluído não bloqueava a inicialização na retomada.
O que mudou
A retomada agora recusa antes de criar qualquer cliente e exige revisão.
O que aconteceu
Dois casos de desenvolvimento discordavam do prompt genérico.
Causa
O prompt incentiva uma consulta em casos concretos, enquanto um caso espera uma pergunta de esclarecimento primeiro.
O que mudou
Registrado como tensão de contrato para uma pessoa resolver. O dataset não foi editado para passar.

Valide você mesmo

git clone https://github.com/DiegoVSouza/supportops-foundation.git
cd supportops-foundation
uv sync --locked && uv run --locked python scripts/check_fast.py

Esperado: O gate rápido passa. Comandos live exigem uma campanha com orçamento e não fazem parte dele.

O que eu faria diferente

Eu separaria o contrato do prompt antes da campanha, não depois de ela falhar, para os dois casos em desacordo nunca contarem contra o modelo.

Próximo projeto

Orquestração multiagente