eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 2.36 kB
JavaScript
import"#evals/assertions/collector.js";import"#evals/session.js";import{createScopedAssertions}from"#evals/assertions/scoped.js";import{buildJudgeContext}from"#evals/judge.js";import{EvalRequirementFailed,EvalSkipped}from"#evals/control-flow.js";function createEvalContext(e){let t=e.collector,n=``,primary=()=>e.manager.primary,replyMessage=()=>e.manager.lastTurnSession()?.lastTurn?.message??null,r=buildJudgeContext({collector:t,getReply:replyMessage,getInput:()=>n,judge:e.judge});return{context:{get events(){return primary().events},get transcript(){return primary().transcript},get pendingInputRequests(){return primary().pendingInputRequests},get state(){return primary().state},get sessionId(){return primary().sessionId},cancel:()=>primary().cancel(),requireInputRequest:e=>primary().requireInputRequest(e),respond:(e,t)=>primary().respond(e,t),startRespond:(e,t)=>primary().startRespond(e,t),respondAll:e=>primary().respondAll(e),send:(e,t)=>(n=typeof e==`string`?e:``,primary().send(e,t)),start:(e,t)=>(n=e,primary().start(e,t)),sendFile:(e,t,r)=>(n=e,primary().sendFile(e,t,r)),signal:e.signal,target:e.target,get reply(){return replyMessage()},log:e.log,sleep:t=>sleep(t,e.signal),newSession:()=>e.manager.newSession(),...createScopedAssertions(t,{timing:`final`,select:e=>e}),check:(e,n)=>recordCheck(t,e,n),require:(e,n)=>requireCheck(t,e,n),skip:n=>{throw n.trim().length===0?Error(`skip() requires a non-empty reason.`):t.hasEntries||e.manager.hasActivity()?Error(`skip() must be called before sending messages or recording assertions.`):new EvalSkipped(n)},judge:r},collector:t}}async function requireCheck(e,t,n){let r=n.gate(n.threshold);if(!await e.recordRequirement({name:r.name,threshold:r.threshold,score:()=>evaluateAssertion(r,t)}))throw new EvalRequirementFailed;return t}function recordCheck(e,t,n){return e.recordValue({name:n.name,severity:n.severity,threshold:n.threshold,score:()=>evaluateAssertion(n,t)})}async function evaluateAssertion(e,t){return e.evaluate===void 0?{score:await e.score(t)}:await e.evaluate(t)}function sleep(e=1e3,t){if(!Number.isFinite(e)||e<0)throw Error(`sleep() duration must be a non-negative finite number.`);return t?.aborted?Promise.reject(t.reason):new Promise((n,r)=>{let i=setTimeout(n,e);t?.addEventListener(`abort`,()=>{clearTimeout(i),r(t.reason)},{once:!0})})}export{createEvalContext};