Summary
The executor has no error handling around evaluator calls. One network blip during a long run kills everything. Already-ingested scores survive, but the rest of the run is lost with no partial result.
Problem
executor/client.py:174-180 calls await evaluator.evaluate(params) with no try/except. asyncio.gather without return_exceptions=True means one failure propagates and aborts the whole run.
Kibana evaluators propagate exceptions. The executor has no safety net.
Fix
Wrap evaluator calls in the executor. Catch exceptions, convert to EvaluationResult(label="error", explanation=...), log at error level, and continue the run.
kbn-evals wraps every evaluator call in try/catch and converts exceptions to a {status: "error"} entry without aborting the run. The SDK should mirror that.
Done when
Summary
The executor has no error handling around evaluator calls. One network blip during a long run kills everything. Already-ingested scores survive, but the rest of the run is lost with no partial result.
Problem
executor/client.py:174-180callsawait evaluator.evaluate(params)with no try/except.asyncio.gatherwithoutreturn_exceptions=Truemeans one failure propagates and aborts the whole run.Kibana evaluators propagate exceptions. The executor has no safety net.
Fix
Wrap evaluator calls in the executor. Catch exceptions, convert to
EvaluationResult(label="error", explanation=...), log at error level, and continue the run.kbn-evals wraps every evaluator call in try/catch and converts exceptions to a
{status: "error"}entry without aborting the run. The SDK should mirror that.Done when
label="error"and an explanationtest_kibana_evaluators_propagate_request_errorsis updated to match the new policy