eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 2.45 kB
JavaScript
import{createLogger}from"#internal/logging.js";import{LiveStepDynamicModelSelectionKey,SessionDynamicModelReferenceKey,TurnDynamicModelReferenceKey}from"#context/keys.js";import{toErrorMessage}from"#shared/errors.js";import{buildResolveContext}from"#context/dynamic-resolve-context.js";import{loadDynamicRuntimeModelDefinition,normalizeDynamicRuntimeModelResult,shouldMockAuthoredRuntimeModels}from"#runtime/agent/resolve-model.js";const log=createLogger(`dynamic-models`),ALLOWED_DYNAMIC_MODEL_EVENTS=new Set([`session.started`,`turn.started`,`step.started`]);function isDynamicModelEventName(e){return ALLOWED_DYNAMIC_MODEL_EVENTS.has(e)}function durableKeyForEvent(e){switch(e){case`session.started`:return SessionDynamicModelReferenceKey;case`turn.started`:return TurnDynamicModelReferenceKey;case`step.started`:return}}function getActiveDynamicModelSelection(e){let i=e.get(LiveStepDynamicModelSelectionKey);if(i!=null)return i;let a=e.get(TurnDynamicModelReferenceKey);if(a!=null)return{reference:a};let o=e.get(SessionDynamicModelReferenceKey);return o==null?null:{reference:o}}async function dispatchDynamicModelEvent(e){if(e.dynamicModel!==void 0&&isDynamicModelEventName(e.event.type)&&e.dynamicModel.eventNames.includes(e.event.type))try{let t=(await loadDynamicRuntimeModelDefinition({dynamicModel:e.dynamicModel,scope:e.scope})).events[e.event.type];if(t===void 0){setSelectionForEvent(e.ctx,e.event.type,null);return}let n=await t(e.event,buildResolveContext(e.ctx,e.messages)),r=n==null?null:normalizeDynamicRuntimeModelResult({fallback:e.fallback,result:n});if(r!==null&&e.event.type!==`step.started`&&r.model!==void 0){log.error(`Dynamic model resolver (${e.event.type}) returned a provider object, but session- and turn-scoped model selections must be serializable. Return a model id string for this scope, or use "step.started".`),setSelectionForEvent(e.ctx,e.event.type,null);return}setSelectionForEvent(e.ctx,e.event.type,r)}catch(t){log.error(`Dynamic model resolver (${e.event.type}) threw - skipping.`,{error:toErrorMessage(t)}),setSelectionForEvent(e.ctx,e.event.type,null)}}function setSelectionForEvent(e,n,r){if(n===`step.started`){let n=r!==null&&r.model!==void 0&&shouldMockAuthoredRuntimeModels()?{reference:r.reference}:r;e.setVirtualContext(LiveStepDynamicModelSelectionKey,n);return}let i=durableKeyForEvent(n);i!==void 0&&e.set(i,r?.reference??null)}export{dispatchDynamicModelEvent,getActiveDynamicModelSelection};