eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 1.14 kB
JavaScript
import{serializeInputSchema}from"#tools/schema.js";import{estimateTokens}from"#harness/token-estimate.js";async function estimateRequestEnvelope(e){let t=await Promise.all(Object.entries(e.tools).map(async([e,t])=>{let n=typeof t.inputSchema==`function`?t.inputSchema():t.inputSchema,r=n===void 0?void 0:`jsonSchema`in n?await n.jsonSchema:serializeInputSchema(n);return{name:e,description:t.description,inputSchema:r,id:t.type===`provider`?t.id:void 0,args:t.type===`provider`?t.args:void 0}}));return Math.max(0,estimateTokens({instructions:e.instructions,messages:e.messages,tools:t})-estimateTokens(e.history))}const REQUEST_ENVELOPE_STATE_KEY=`eve.harness.requestEnvelopeTokens`;function getRequestEnvelopeTokens(e){let t=e.state?.[REQUEST_ENVELOPE_STATE_KEY];return typeof t==`number`&&Number.isFinite(t)&&t>=0?t:void 0}function setRequestEnvelopeTokens(e,t){if(t===void 0&&e.state?.[REQUEST_ENVELOPE_STATE_KEY]===void 0)return e;let n={...e.state};return t===void 0?delete n[REQUEST_ENVELOPE_STATE_KEY]:n[REQUEST_ENVELOPE_STATE_KEY]=t,{...e,state:n}}export{estimateRequestEnvelope,getRequestEnvelopeTokens,setRequestEnvelopeTokens};