eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 3.17 kB
JavaScript
import{withSpinner}from"../with-spinner.js";import{gatewayModelCapabilities}from"../boxes/model-capabilities.js";import{fetchGatewayCatalog,modelOptionsFromCatalog}from"../boxes/select-model.js";import{changeAgentModelSettings,formatApplyModelSettingsOutcome,readAuthoredModelSelection}from"./model-source-change.js";import{inspectApplication}from"#services/inspect-application.js";import{MODEL_HELPERS,parseModelHelper}from"#shared/model-helper.js";import{readGatewayServiceTier}from"#shared/gateway-service-tier.js";import{availableHelperModels}from"#internal/model-auth/available-models.js";async function runModelFlow(e){let{appRoot:t,prompter:n,signal:r}=e,i={readCurrentModel:readCurrentAgentModel,applySettings:changeAgentModelSettings,...e.deps},[a,o]=await withSpinner(n,`Loading models…`,()=>Promise.all([i.readCurrentModel(t),(i.selectModel?.fetchModels??fetchGatewayCatalog)(r).catch(()=>void 0)])),s=a.helper===void 0?void 0:[a.helper,MODEL_HELPERS[a.helper]],c=s?(await availableHelperModels(s[0],r)).map(e=>({value:s[1].prefix+e,label:e})):modelOptionsFromCatalog(o);if(!i.pickModelSettings)throw Error(`The model picker is unavailable.`);let l=await i.pickModelSettings({model:a.editable?{kind:`pick`,options:c,current:s&&a.id?s[1].prefix+a.id.replace(/^[^/]+\//u,``):a.id}:{kind:`fixed`,current:a.id,reason:`This model is configured in agent.ts.`},reasoning:a.reasoning===`provider-default`?null:a.reasoning,serviceTier:a.serviceTier,settingsEditable:a.settingsEditable,externalRouting:a.routing?.kind===`external`,capabilitiesFor:e=>gatewayModelCapabilities(o,s&&e?`${s[0]===`chatgpt`?`openai`:s[0]}/${e.slice(s[1].prefix.length)}`:e)});if(!l)return{kind:`cancelled`};r?.throwIfAborted();let u=await i.applySettings({appRoot:t,patch:{model:l.model===void 0?{kind:`keep`}:{kind:`set`,value:l.model},reasoning:l.reasoning===void 0?{kind:`keep`}:l.reasoning==="default"?{kind:`remove`}:{kind:`set`,value:l.reasoning},gatewayServiceTier:l.serviceTier===void 0?{kind:`keep`}:l.serviceTier===`standard`?{kind:`remove`}:{kind:`set`,value:`priority`}}});return{kind:`done`,accessChanged:u.kind===`changed`,modelMessage:formatApplyModelSettingsOutcome(u)}}async function readCurrentAgentModel(e){try{let{compiledState:t}=await inspectApplication(e),n=t?.manifest.config,r=n?.model,i=r?.source===void 0?void 0:await readAuthoredModelSelection(e),a=i===void 0?void 0:parseModelHelper(i)?.helper;return{id:a&&r!==void 0?`${MODEL_HELPERS[a].prefix}${r.id}`:r?.id??null,helper:a,routing:r?.routing??null,reasoning:n?.reasoning??null,serviceTier:readGatewayServiceTier(r?.providerOptions),editable:r!==void 0&&(r.source===void 0||a!==void 0),settingsEditable:n?.source!==void 0}}catch{return{id:null,routing:null,reasoning:null,serviceTier:{kind:`standard`},editable:!1,settingsEditable:!1}}}async function modelChangeRefusalForUneditableModel(e){let{editable:t,routing:n}=await readCurrentAgentModel(e);return t?null:`Model is set via ${n?.kind===`external`?`the external provider \`${n.provider}\``:`an SDK model call`} in agent.ts, not a string literal; /model can't rewrite it. Edit \`model\` in agent.ts.`}export{modelChangeRefusalForUneditableModel,runModelFlow};