MCPcopy Index your code
hub / github.com/Effect-TS/effect / resolveToolCalls

Function resolveToolCalls

packages/ai/ai/src/LanguageModel.ts:992–1037  ·  view source on GitHub ↗
(
  content: ReadonlyArray<Response.AllPartsEncoded>,
  toolkit: Toolkit.WithHandler<Tools>,
  concurrency: Concurrency | undefined
)

Source from the content-addressed store, hash-verified

990// =============================================================================
991
992const resolveToolCalls = <Tools extends Record<string, Tool.Any>>(
993 content: ReadonlyArray<Response.AllPartsEncoded>,
994 toolkit: Toolkit.WithHandler<Tools>,
995 concurrency: Concurrency | undefined
996): Effect.Effect<
997 ReadonlyArray<
998 Response.ToolResultPart<
999 Tool.Name<Tools[keyof Tools]>,
1000 Tool.Success<Tools[keyof Tools]>,
1001 Tool.Failure<Tools[keyof Tools]>
1002 >
1003 >,
1004 Tool.HandlerError<Tools[keyof Tools]>,
1005 Tool.Requirements<Tools[keyof Tools]>
1006> => {
1007 const toolNames: Array<string> = []
1008 const toolCalls: Array<Response.ToolCallPartEncoded> = []
1009
1010 for (const part of content) {
1011 if (part.type === "tool-call") {
1012 toolNames.push(part.name)
1013 if (part.providerExecuted === true) {
1014 continue
1015 }
1016 toolCalls.push(part)
1017 }
1018 }
1019
1020 return Effect.forEach(toolCalls, (toolCall) => {
1021 return toolkit.handle(toolCall.name, toolCall.params as any).pipe(
1022 Effect.map(({ encodedResult, isFailure, result }) =>
1023 Response.makePart("tool-result", {
1024 id: toolCall.id,
1025 name: toolCall.name,
1026 result,
1027 encodedResult,
1028 isFailure,
1029 providerExecuted: false,
1030 ...(toolCall.providerName !== undefined
1031 ? { providerName: toolCall.providerName }
1032 : {})
1033 })
1034 )
1035 )
1036 }, { concurrency })
1037}
1038
1039// =============================================================================
1040// Utilities

Callers 1

LanguageModel.tsFile · 0.85

Calls 3

pipeMethod · 0.65
handleMethod · 0.65
mapMethod · 0.65

Tested by

no test coverage detected