Pular para o conteúdo

Guias

Referência de resultados e execução

O que uma execução envia a um sistema HTTP e o que espera de volta, como cada caso entra no denominador de uma métrica, os estados de decisão e os códigos de motivo que os explicam, os códigos de saída, e quais dados ficam locais ou vão para um espaço de trabalho hospedado. Para as ideias por trás deles leia Conceitos; para os campos da política leia a Referência de configuração.

O contrato do sistema HTTP

Um sistema HTTP (system.http em oloproof.yaml) é chamado uma vez por caso, e uma vez por réplica.

AspectoComportamento
RequisiçãoPOST por padrão (GET e PUT são aceitos). O corpo é o valor input do caso em JSON.
Cabeçalhos e autenticaçãoNenhum pode ser configurado. A requisição leva só os padrões do cliente HTTP. Um endpoint que precisa de uma chave deve ficar atrás de um sistema Python callable que a acrescente.
RespostaDeve ser JSON. output_path seleciona a saída por um caminho com pontos, como result.answer; sem ele, a saída é o corpo inteiro. Um campo de output_path ausente é registrado como erro de execução para aquele caso.
ArtefatosCada entrada de http.artifacts lê um caminho com pontos da resposta. Um campo declarado que falta em uma resposta é um erro de contrato, e a execução para com saída 2.
Timeouthttp.timeout_s por requisição, 30 segundos por padrão.
Novas tentativasTimeouts, falhas de conexão e HTTP 408, 429 e 5xx são tentados de novo, até quatro tentativas no total, com backoff exponencial com jitter que respeita Retry-After. Outras respostas 4xx não são tentadas de novo.
Depois da última tentativaA execução do caso é registrada como erro e o caso conta como faltante (ou como falha, com on_execution_error: fail). A execução continua.
ConcorrênciaNo máximo concurrency.system requisições em andamento, 8 por padrão.

A URL, o método, o caminho da saída e o mapeamento de artefatos entram na versão do sistema, mas o que o servidor faz não entra. Mude system.version sempre que o comportamento do servidor mudar; a Referência de configuração explica por quê.

Três vocabulários diferentes

Um resultado tem três tipos de estado, e um nunca substitui o outro.

TipoValoresResponde
Estado de decisãoPASS, FAIL, INSUFFICIENT_EVIDENCE, MANUAL_REVIEWO que a evidência diz sobre uma regra.
Estado de execuçãoStatus da execução RUN_ERROR ou CANCELLED; completude da execução PARTIAL; execução do caso ERROR ou TIMEOUTO que aconteceu com a execução ou com a chamada de um caso. Não é um resultado de qualidade.
Ação de lançamentoALLOW, WARN, BLOCKO que a sua política faz com cada decisão: estados em block_on bloqueiam, estados em warn_on alertam, os demais liberam.

Uma execução que termina normalmente é DECIDED, ou DECIDED_EARLY quando a parada antecipada a encerrou. Uma execução interrompida por Ctrl-C ou pelo cancelamento da tarefa é CANCELLED; uma cujo harness lançou uma exceção é RUN_ERROR. Nos dois casos a execução fica PARTIAL, mantém os casos que terminaram e deixa a próxima execução reaproveitar os registros em cache deles. Veja Erros.

Para um limiar mínimo T e um intervalo [L, U], uma regra é PASS quando L >= T, FAIL quando U < T, e INSUFFICIENT_EVIDENCE caso contrário. Um limiar máximo é simétrico. Antes de ler o intervalo, uma regra verifica se deve decidir: primeiro os motivos para MANUAL_REVIEW, depois os de INSUFFICIENT_EVIDENCE. O primeiro nível com um motivo decide, e lista todos os motivos que encontrou.

Códigos de motivo

Toda decisão traz um ou mais códigos de motivo.

MANUAL_REVIEW

CódigoSignificado
policy_requires_reviewA regra define requires_manual_review: true.
unsupported_methodNão existe intervalo admitido para esta métrica nesta situação. Veja abaixo.
unsupported_dependence_structureA suíte declara clusters (group_id) e nenhum método admitido os trata para esta métrica.
approximate_method_not_permittedO único intervalo é aproximado, e a política não define allow_approximate_methods: true.
evaluator_retiredUm avaliador por trás da métrica foi aposentado.

INSUFFICIENT_EVIDENCE

CódigoSignificado
no_observationsNenhum caso foi observado para esta métrica.
missingness_exceeds_policyFaltam mais casos elegíveis do que o max_missing_fraction da regra permite.
missingness_unboundedO método descarta os casos faltantes em vez de limitá-los, e a regra não declara max_missing_fraction.
evaluator_not_validatedUm juiz baseado em modelo por trás da métrica não foi validado contra rótulos humanos, e require_validated_evaluators está ativo (o padrão).
evaluator_recalibration_requiredO juiz foi validado em um modelo servido de onde os veredictos desta execução não vieram.
interval_unavailableA métrica não tem intervalo para ler.
insufficient_clustersMenos clusters do que o min_clusters da política.
interval_monte_carlo_uncertainO limiar cai dentro da incerteza de simulação de um limite por clusters.
interval_overlaps_thresholdO intervalo contém o limiar. Mais casos o estreitariam.
interval_unboundedO intervalo não tem limite do lado que a regra lê.
missing_could_change_outcomeUma regra observed_count: os casos faltantes poderiam levar as falhas além de max_failures.
interval_overlaps_zero, interval_overlaps_margin, interval_overlaps_marginsUma comparação cujo intervalo da diferença atravessa o zero ou uma margem.
insufficient_supportUma regra de comparação por segmento cujo segmento tem menos casos do que o seu min_support.
family_correction_withheldUma regra em uma entrada de families: antes da qual a correção de Holm parou.

PASS e FAIL

CódigoEstado
lower_bound_meets_minimum, upper_bound_meets_maximumPASS
upper_bound_below_minimum, lower_bound_above_maximumFAIL
observed_failures_within_limitPASS
observed_failures_exceed_limitFAIL
difference_above_zero, lower_bound_above_margin, interval_within_marginsPASS (comparação)
difference_below_zero, upper_bound_below_margin, interval_outside_marginsFAIL (comparação)
cost_ceiling_exceededIndicado ao lado do estado de uma regra de custo cujo teto declarado foi excedido por uma execução registrada

Apenas espaço de trabalho hospedado

Um espaço de trabalho que decide por conta própria uma execução recebida por push pode reter uma decisão com ppi_not_verified (não verificou o intervalo em que a decisão se apoia), execution_not_verified (as saídas não vieram de um runner registrado) ou workspace_cannot_decide (não tem cópia da política, ou não conseguiu ler a evidência). Veja Gate.

Como cada caso entra no denominador

Toda métrica informa quatro contagens: n_total (casos na suíte), n_eligible, n_observed e n_missing, com n_eligible = n_observed + n_missing. Os casos fora de n_eligible são listados em exclusions com um motivo.

O que aconteceu com o casoConta comoNo denominador
O avaliador retornou aprovação ou reprovaçãoobservado, sucesso ou falhasim
O avaliador se declarou não aplicável (por exemplo, nenhum valor esperado para comparar)excluído, com o motivonão
A chamada ao sistema deu erro ou timeoutfaltante, ou falha com on_execution_error: failsim
O avaliador lançou uma exceção, ou a resposta de um juiz não pôde ser lidafaltantesim
O caso nunca rodou porque a execução foi interrompidafaltante, e a execução é PARTIALsim

Um caso faltante é limitado, não descartado. Para uma taxa de aprovação, o limite inferior do intervalo trata cada caso faltante como falha e o limite superior como sucesso, então uma execução com muitos casos faltantes tem um intervalo largo que não pode passar em uma regra exigente; uma média limitada substitui da mesma forma os extremos da sua faixa declarada. Um método que não consegue limitar os casos faltantes (uma estatística de ranking, por exemplo) os descarta e registra a suposição, e uma regra sobre ele mostra missingness_unbounded até declarar max_missing_fraction.

Uma regra observed_count conta as falhas sobre a suíte executada e não lê nenhum intervalo. Ela só passa quando as falhas observadas mais todos os casos faltantes ainda cabem em max_failures.

Métricas sem intervalo admitido

Uma regra só decide sobre um intervalo cujo método foi admitido por auditoria. Onde não existe nenhum, a métrica ainda é calculada e mostrada, e uma regra sobre ela não toma emprestado um método não validado:

SituaçãoO que uma regra sobre ela mostra
Uma métrica de pontuação (média) sem faixa declarada, como um avaliador de pontuação personalizado sem score_rangeMANUAL_REVIEW, unsupported_method
Uma métrica de média, quantil, ranking ou custo em uma suíte que declara group_idMANUAL_REVIEW, unsupported_dependence_structure
Uma taxa de aprovação em uma suíte com clustersum intervalo aproximado: MANUAL_REVIEW a menos que allow_approximate_methods: true, e então as verificações de clusters acima
Uma métrica de quantil ou ranking com replicates acima de 1MANUAL_REVIEW, unsupported_method
Qualquer métrica em uma suíte com group_id e réplicas ao mesmo tempoMANUAL_REVIEW, unsupported_dependence_structure
Uma comparação em uma suíte com clustersMANUAL_REVIEW
Um segmento abaixo de min_slice_supportnenhum intervalo, mas segmentos nunca chegam ao gate
Métricas human_score, human_preference ou cost_per_acceptedrecusadas quando o arquivo é lido, saída 2

Códigos de saída

oloproof gate, oloproof run com uma política e os outros comandos que decidem usam todos os mesmos códigos.

CódigoSignificado
0Nada em que a política bloqueia: todas as regras passaram, ou as que não passaram estão fora de block_on.
1Uma regra em block_on falhou.
2A configuração ou a invocação estava errada, ou um sistema quebrou o seu contrato; nada foi decidido.
3Uma regra em block_on mostrou INSUFFICIENT_EVIDENCE.
4Uma regra em block_on mostrou MANUAL_REVIEW.
5A execução não terminou e block_on_partial_run está ativo (o padrão).

Quando vários se aplicam, o código informado é o primeiro entre 1, 5, 4, 3. Um estado deixado fora de block_on não pode mudar o código de saída: com block_on: [FAIL] e warn_on: [INSUFFICIENT_EVIDENCE], uma regra indecisa alerta e o gate sai com 0. A saída 0 significa, portanto, apenas que nada em que a sua política bloqueia ocorreu, não que todas as regras passaram. Veja Gate.

Onde o trabalho roda e para onde vão os dados

Local, o padrão

oloproof run, oloproof gate e o SDK rodam na sua máquina. Todo registro (casos, saídas, artefatos, julgamentos, métricas e decisões) é gravado em .oloproof/store.sqlite ao lado de oloproof.yaml, ou em OLOPROOF_HOME quando definida. Nada é enviado ao Oloproof. O único tráfego de rede é o que a sua configuração causa: chamadas à URL do seu sistema HTTP, e chamadas que um juiz baseado em modelo ou um classificador baseado em modelo faz ao seu provedor, que recebe o conteúdo dos casos que julga e cobra você por isso.

Push para um espaço de trabalho hospedado

oloproof push envia a evidência de uma execução ao espaço de trabalho que você conectou com oloproof login. Por padrão envia métricas, intervalos, decisões e segmentos agregados, e a identidade, o status, os tempos e o uso de cada registro, mas não o seu conteúdo. O conteúdo bruto é ocultado campo a campo antes que qualquer coisa saia da máquina, e um registro ocultado diz quais categorias foram retidas. Uma categoria só vai quando egress: em oloproof.yaml a lista:

CategoriaO que cobre
raw_inputsEntradas dos cenários, valores esperados e metadados dos casos: as linhas do dataset
raw_outputsO que o sistema em teste retornou para cada caso
judge_rationalesO texto que um juiz escreveu explicando um veredicto, que cita a saída
artifactsContexto de recuperação, citações e trajetórias registrados durante uma execução
error_detailMensagens e detalhes de exceções, que muitas vezes trazem a entrada literalmente
system_configA configuração declarada do sistema em teste e dos seus avaliadores
label_notesA nota que uma pessoa escreveu ao lado de um rótulo, que muitas vezes cita a saída
span_namesNomes de traces, spans, ferramentas e agentes que uma instrumentação registrou

Os digests dos registros não são recalculados depois da ocultação, então um registro hospedado ainda nomeia a evidência original, que fica na sua máquina. Ocultação não é criptografia, e uma métrica sobre um segmento muito pequeno ainda pode identificar os casos por trás dela.

Quando revisores rotulam casos na fila de revisão hospedada, o navegador deles busca o conteúdo dos casos em oloproof collect rodando do seu lado; ele não passa pelo espaço de trabalho. As chaves de provedor que um espaço de trabalho usa são armazenadas com oloproof credentials set, e oloproof credentials list mostra os nomes delas, nunca os valores. Um job gerenciado roda em um worker operado pelo Oloproof, que não executa o seu código Python; oloproof job informa o resultado e sai conforme o seu gate.

Em um espaço de trabalho hospedado o engine nunca reaproveita execuções, julgamentos ou análises em cache, porque um push pode gravar esses caches; ele os recalcula.