UNPKG

eve

Version:

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

1 lines 4.86 kB
import{renderSelectQuestion}from"./setup-panel.js";import{ALL_REASONING_LEVELS}from"#setup/boxes/model-capabilities.js";import{filterOptions,initialSelectState,reduceSelect,selectValueAtCursor}from"#setup/cli/select-state.js";const SPEED_OPTIONS=[{value:`standard`,label:`Standard`,hint:`Normal speed and pricing`},{value:`priority`,label:`Fast`,hint:`Priority processing, higher cost`}],REASONING_COPY={none:{label:`None`,hint:`No reasoning`},minimal:{label:`Minimal`,hint:`The least thinking`},low:{label:`Low`,hint:`Less thinking, quicker answers`},medium:{label:`Medium`,hint:`Balance thinking and response time`},high:{label:`High`,hint:`More thinking for harder tasks`},xhigh:{label:`Extra high`,hint:`The most thinking, slower answers`}},REASONING_OPTIONS=[{value:`default`,label:`Provider default`,hint:`Use the model's default reasoning`},...ALL_REASONING_LEVELS.map(e=>({value:e,...REASONING_COPY[e]}))];function modelOptions(e){if(e.model.kind===`fixed`)return[{value:`fixed`,label:e.model.current??`Configured in agent.ts`}];let{options:t,current:n}=e.model;return n===null||t.some(e=>e.value===n)?t:[{value:n,label:n,hint:`Current model`},...t]}function stepOptions(e,t,n){switch(n){case`model`:return modelOptions(e);case`speed`:return SPEED_OPTIONS;case`reasoning`:{let n=reasoningLevels(e,t);return REASONING_OPTIONS.filter(e=>e.value==="default"||n.includes(e.value))}}}function reasoningLevels(e,t){let n=e.capabilitiesFor(t.model);return n===void 0?t.model===e.model.current&&e.reasoning!==null?[e.reasoning]:[]:n.reasoning?n.reasoningLevels:[]}function nextStep(e,t,n){if(!e.settingsEditable)return;let r=e.capabilitiesFor(t.model);if(n===`model`&&!e.externalRouting&&e.serviceTier.kind!==`custom`&&(r?.fastMode||r===void 0&&t.model===e.model.current&&e.serviceTier.kind===`priority`))return`speed`;if(n!==`reasoning`&&reasoningLevels(e,t).length>0)return`reasoning`}function initialModelPickerState(e){let t={model:e.model.current,speed:e.serviceTier.kind===`priority`?`priority`:`standard`,reasoning:e.reasoning??`default`};return{step:`model`,draft:t,select:initialSelectState({options:modelOptions(e),defaultValue:t.model??void 0}),history:[]}}function selectionDraft(e,t,n){let r={...t.draft};switch(t.step){case`model`:{if(e.model.kind===`fixed`)return r;r.model=n;let t=e.capabilitiesFor(n);return t!==void 0&&(t.fastMode||(r.speed=`standard`),r.reasoning!=="default"&&(!t.reasoning||!t.reasoningLevels.includes(r.reasoning))&&(r.reasoning=`default`)),r}case`speed`:return r.speed=SPEED_OPTIONS.find(e=>e.value===n).value,r;case`reasoning`:return r.reasoning=REASONING_OPTIONS.find(e=>e.value===n).value,r}}function selectionResult(e,t){let n={};if(e.model.kind===`pick`&&t.model!==null&&t.model!==e.model.current&&(n.model=t.model),e.settingsEditable){t.reasoning!==(e.reasoning??`default`)&&(n.reasoning=t.reasoning);let r=e.serviceTier.kind===`priority`?`priority`:`standard`;!e.externalRouting&&e.serviceTier.kind!==`custom`&&t.speed!==r&&(n.serviceTier=t.speed)}return n}function transitionModelPicker(e,t,n){if(t.type===`cancel`)return{kind:`cancel`};if(t.type===`back`){let t=e.history.at(-1);return t===void 0?{kind:`cancel`}:{kind:`render`,state:{...t,draft:e.draft,history:e.history.slice(0,-1)}}}let r=stepOptions(n,e.draft,e.step);if(t.type!==`submit`)return(e.step!==`model`||n.model.kind!==`pick`)&&(t.type===`char`||t.type===`backspace`||t.type===`delete-word-backward`)?{kind:`render`,state:e}:{kind:`render`,state:{...e,select:reduceSelect(e.select,t,{options:r})}};let i=selectValueAtCursor(filterOptions(r,e.select.filter),e.select.cursor);if(i===void 0)return{kind:`render`,state:e};let a=selectionDraft(n,e,i),o=nextStep(n,a,e.step);return o===void 0?{kind:`settle`,result:selectionResult(n,a)}:{kind:`render`,state:{step:o,draft:a,select:initialSelectState({options:stepOptions(n,a,o),defaultValue:a[o]}),history:[...e.history,{step:e.step,select:e.select}]}}}function modelPickerTitle(e){return{model:`Select model`,speed:`Select speed`,reasoning:`Select reasoning`}[e.step]}function renderModelPicker(e,t,n,r){let i=stepOptions(e,t.draft,t.step),a=selectValueAtCursor(filterOptions(i,t.select.filter),t.select.cursor),o=nextStep(e,a===void 0?t.draft:selectionDraft(e,t,a),t.step)===void 0,s=modelOptions(e).find(e=>e.value===t.draft.model)?.label??t.draft.model,c=t.step===`model`?e.model.kind===`fixed`?e.model.reason:void 0:[s,...t.step===`reasoning`&&t.history.some(e=>e.step===`speed`)?[t.draft.speed===`priority`?`Fast`:`Standard`]:[]].filter(Boolean).join(` · `);return renderSelectQuestion({kind:t.step===`model`&&e.model.kind===`pick`?`search`:`single`,message:``,description:c,options:i,select:t.select,footerHints:[`↑/↓ move`,o?`Enter apply`:`Enter next`,t.history.length>0?`Esc/← back`:`Esc cancel`]},n,r)}export{initialModelPickerState,modelPickerTitle,renderModelPicker,transitionModelPicker};