SotuHire v1.9.7 — AI Evaluation, Tracing, Human Feedback & Outcome Learning¶
A v1.9.7 torna a camada de IA mensurável e auditável sem transformar métricas em decisões automáticas. A release adiciona 16 tarefas registradas, AiRunStore 2.0, golden datasets multiárea, benchmark reprodutível, feedback humano, Outcome Learning e o painel /ai-quality.
Destaques¶
- traces seguros com provider/modelo solicitado e usado, prompt, fallback, schema, latência, tokens e custo quando disponíveis;
- retenção configurável, sem inputs/outputs completos por padrão;
- 12 fixtures fictícias cobrindo 12 domínios e 17 categorias adversariais;
- métricas de estrutura, extração, evidência, calibração, utilidade, operação e dedupe;
- comparação de providers com regra explícita de tamanho de amostra;
- feedback criável/removível e extensão 0.9.3 com payload mínimo;
- outcomes manuais e associações exploratórias, sempre sem causalidade;
- defesa em camadas contra prompt injection;
- fallback local preservado.
Dados e migration¶
A migration 4 amplia ai_runs e cria ai_feedback, ai_benchmarks, ai_benchmark_results, outcome_events e outcome_metrics. A migração continua idempotente e deve seguir dry-run/backup/apply. Nenhuma base pessoal foi migrada automaticamente durante a preparação da release.
Segurança¶
Chaves antigas não foram usadas. Testes externos aceitam somente variáveis temporárias específicas e fixtures fictícias. Nenhuma chave deve entrar em Git, frontend, extensão empacotada, SQLite, logs, screenshots ou assets da release. Os fluxos de authenticated-browser permanecem inalterados.
Resultados de validação¶
O benchmark local executou 12 casos fictícios: schema validity 1,00, evidence precision 1,00 nos casos com referências mensuráveis, unsupported claim/hallucination rate 0,00, p50 1 ms e p95 26 ms. Required field completion foi 0,1667; o número é informativo e não bloqueante porque oito tarefas locais retornam defaults vazios seguros quando a extração específica não é suportada pela fixture.
O release-smoke real registrou 12 casos por provider:
| Provider/modelo | Schema | Provider errors | Unsupported claims | Latência p50/p95 | Tokens in/out | Custo |
|---|---|---|---|---|---|---|
| local/local | 1,00 | 0,00 | 0,00 | 1/21 ms | não aplicável | não aplicável |
| Gemini/gemini-2.5-flash | 0,75 | 0,25 | 0,00476 | 7.374/12.998 ms | 2.620/4.950 | não estimado |
| OpenAI/gpt-4.1-mini | 0,00 | 1,00 | 0,00 sem outputs válidos | 6.302/6.726 ms | não disponível | não estimado |
Gemini produziu structured output válido no teste opt-in e em 9/12 casos do smoke. OpenAI foi realmente chamada, mas a conta/credencial temporária retornou HTTP 429; os testes foram marcados como xfail explícito e nenhum baseline OpenAI foi criado. O baseline Gemini é indicativo e permanece abaixo do alvo de schema 0,98. Custo não foi inventado: ficou null porque o runtime não possui tabela confiável de preço.
Confidence calibration está implementada e coberta por testes determinísticos, mas não foi agregada no smoke externo porque as saídas comparáveis não forneceram labels de confiança suficientes. O teste A/B local de política cobre os cenários sem Perfil, Perfil confirmado, Perfil+RAG e itens não confirmados; o cenário D mantém taxa de promoção de item não confirmado em 0,00 na fixture controlada.
Assets capturados com dados fictícios incluem resumo, providers, prompts, benchmarks, feedback, outcomes, privacidade e feedback da extensão. A suíte Python final passou com 505 testes, 4 skips opt-in e cobertura total de 85% (17.286 statements); Ruff, Pyright, MkDocs strict, compileall, frontend unit/lint/typecheck/build, E2E padrão e cross-browser também passaram. O health check de uma base temporária migrada ao schema 4 ficou verde; a base pessoal permaneceu intencionalmente no schema 3 e não foi alterada automaticamente.
Limites e pendências¶
- custo permanece ausente quando o provider não informa uso suficiente ou não há tabela confiável configurada;
- qualidade por domínio precisa de amostras humanas reais antes de comparação conclusiva;
- Ollama/LM Studio/OpenAI-compatible local permanece preparado como evolução futura, sem adapter novo nesta release;
- LLM-as-a-judge não é requisito e não decide release.