UNPKG

eve

Version:

Filesystem-first framework for durable backend AI agents that run anywhere.

1 lines • 2.12 kB
import{toErrorMessage}from"#shared/errors.js";import{formatAssertionName}from"#evals/diagnostics.js";var AssertionCollector=class{#e=[];#t=[];get hasEntries(){return this.#e.length>0}recordScoped(e,t,n=`gate`){let r={baseName:e.name,name:e.name,severity:n,threshold:void 0,kind:`deferred`,spec:e,selectSubject:t,score:0,errored:!1};return this.#e.push(r),makeHandle(r)}recordValue(e){let t={baseName:e.name,name:e.name,severity:e.severity,threshold:e.threshold,kind:`resolved`,score:0,errored:!1};this.#e.push(t);let n=settleEntry(t,e.score);return this.#t.push(n),makeHandle(t)}recordOutcome(e){let t={baseName:e.name,name:e.name,severity:`gate`,threshold:void 0,kind:`resolved`,score:e.outcome.score,message:e.outcome.message,metadata:e.outcome.metadata,errored:!1};return this.#e.push(t),computePassed(t.severity,t.threshold,t.score,t.errored)}async recordRequirement(e){let t={baseName:e.name,name:e.name,severity:`gate`,threshold:e.threshold,kind:`resolved`,score:0,errored:!1};return this.#e.push(t),await settleEntry(t,e.score),computePassed(t.severity,t.threshold,t.score,t.errored)}async finalize(e){await Promise.all(this.#t);let t=[];for(let n of this.#e){if(n.kind===`deferred`&&n.spec!==void 0){let t=await n.spec.evaluate(n.selectSubject?.(e)??e);n.score=t.score,n.message=t.message,n.metadata=t.metadata}t.push({name:n.name,score:n.score,severity:n.severity,threshold:n.threshold,passed:computePassed(n.severity,n.threshold,n.score,n.errored),errored:n.errored,message:n.message,metadata:n.metadata})}return t}};function computePassed(e,t,n,r){if(r)return!1;let i=t??(e===`gate`?1:void 0);return i===void 0||n>=i}async function settleEntry(e,t){try{let n=await t();e.score=n.score,e.message=n.message,e.metadata=n.metadata}catch(t){e.score=0,e.severity=`gate`,e.threshold=void 0,e.message=toErrorMessage(t),e.errored=!0}}function makeHandle(e){let t={gate(n){return e.severity=`gate`,e.threshold=n,t},soft(n){return e.severity=`soft`,e.threshold=n,t},atLeast(n){return e.severity=`soft`,e.threshold=n,t},label(n){return e.name=formatAssertionName(e.baseName,n),t}};return t}export{AssertionCollector};