MCPcopy Create free account
hub / github.com/Superflows-AI/superflows / getAssistantFnMessagePairs

Function getAssistantFnMessagePairs

lib/edge-runtime/angelaUtils.ts:183–218  ·  view source on GitHub ↗
(
  responseMessages: (FunctionMessage | AssistantMessage)[],
)

Source from the content-addressed store, hash-verified

181}
182
183export function getAssistantFnMessagePairs(
184 responseMessages: (FunctionMessage | AssistantMessage)[],
185): (AssistantMessage & {
186 functionMessages: FunctionMessage[];
187})[] {
188 /** Split responseMessages into an array of objects, each with an assistant
189 * message and sequence of function messages that follow it
190 **/
191 // TODO: known bug that if the LLM outputs identical assistant messages then this will include
192 // too many function messages in the functionMessages arrays of later repetitions of the repeated
193 // assistant message
194 // Get the assistant messages
195 const assistantMessages = responseMessages.filter(
196 (m) => m.role === "assistant",
197 ) as AssistantMessage[];
198
199 return assistantMessages.map((assistMsg: AssistantMessage, idx: number) => {
200 const currentAssistantMessageIdx = responseMessages.findIndex((m) =>
201 _.isEqual(m, assistMsg),
202 );
203 const nextAssistantMessage = assistantMessages[idx + 1];
204 const nextAssistantMessageIdx = nextAssistantMessage
205 ? responseMessages.findIndex((m) => _.isEqual(m, nextAssistantMessage))
206 : responseMessages.length + 1;
207 const functionMessages = responseMessages.filter(
208 (m, mi) =>
209 m.role === "function" &&
210 currentAssistantMessageIdx < mi &&
211 mi < nextAssistantMessageIdx,
212 ) as FunctionMessage[];
213 return {
214 ...assistMsg,
215 functionMessages,
216 };
217 });
218}

Callers 2

runDataAnalysisFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected