eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 1.25 kB
JavaScript
function normalizeProviderToolHistory(e){let t=findUnmarkedProviderToolCalls(e);if(e.providerExecutedOutcomeIds.size===0)return{messages:[...e.messages],outcomeEndsResponse:!1};let n=[],r=-1,i=-1,a=0;for(let o of e.messages){if(o.role!==`assistant`||!Array.isArray(o.content)){n.push(o),o.role===`assistant`&&typeof o.content==`string`&&o.content.trim().length>0&&(i=a),a+=1;continue}let s=[],c=[],flushAssistant=()=>{s.length!==0&&(n.push({...o,content:s}),s=[])},flushTool=()=>{c.length!==0&&(n.push({role:`tool`,content:c}),c=[])};for(let n of o.content)n.type===`tool-result`&&t.has(n.toolCallId)?(flushAssistant(),c.push(n)):(flushTool(),s.push(n.type===`tool-call`&&t.has(n.toolCallId)?{...n,providerExecuted:!1}:n)),n.type===`tool-result`&&e.providerExecutedOutcomeIds.has(n.toolCallId)?r=a:n.type===`text`&&n.text.trim().length>0&&(i=a),a+=1;flushAssistant(),flushTool()}return{messages:n,outcomeEndsResponse:r>=0&&r>i}}function findUnmarkedProviderToolCalls(e){let t=new Set;for(let n of e.messages)if(!(n.role!==`assistant`||!Array.isArray(n.content)))for(let r of n.content)r.type===`tool-call`&&r.providerExecuted!==!0&&e.providerExecutedOutcomeIds.has(r.toolCallId)&&t.add(r.toolCallId);return t}export{normalizeProviderToolHistory};