{"version":3,"file":"tool-call-engine/BaseToolCallEngine.mjs","sources":["webpack://@multimodal/agent/./src/tool-call-engine/BaseToolCallEngine.ts"],"sourcesContent":["/*\n * Copyright (c) 2025 Bytedance, Inc. and its affiliates.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n  Tool,\n  ToolCallEngine,\n  StreamProcessingState,\n  StreamChunkResult,\n  ParsedModelResponse,\n  MultimodalToolCallResult,\n  ChatCompletionMessageParam,\n  ChatCompletionChunk,\n  AgentSingleLoopReponse,\n} from '@multimodal/agent-interface';\nimport { buildToolCallResultMessages } from './utils';\n\n/**\n * Abstract base class for tool call engines that provides common functionality\n * and enforces consistent behavior across different engine implementations.\n */\nexport abstract class BaseToolCallEngine implements ToolCallEngine {\n  protected readonly useNativeToolCalls: boolean;\n\n  constructor(useNativeToolCalls = false) {\n    this.useNativeToolCalls = useNativeToolCalls;\n  }\n\n  /**\n   * Abstract method to prepare the system prompt with tool information\n   */\n  abstract preparePrompt(instructions: string, tools: Tool[]): string;\n\n  /**\n   * Abstract method to prepare the request parameters\n   */\n  abstract prepareRequest(context: any): any;\n\n  /**\n   * Initialize stream processing state with common defaults\n   */\n  initStreamProcessingState(): StreamProcessingState {\n    return {\n      contentBuffer: '',\n      toolCalls: [],\n      reasoningBuffer: '',\n      finishReason: null,\n    };\n  }\n\n  /**\n   * Abstract method to process streaming chunks\n   */\n  abstract processStreamingChunk(\n    chunk: ChatCompletionChunk,\n    state: StreamProcessingState,\n  ): StreamChunkResult;\n\n  /**\n   * Finalize stream processing with common logic\n   */\n  finalizeStreamProcessing(state: StreamProcessingState): ParsedModelResponse {\n    const finishReason = state.toolCalls.length > 0 ? 'tool_calls' : state.finishReason || 'stop';\n\n    return {\n      content: state.contentBuffer,\n      reasoningContent: state.reasoningBuffer || undefined,\n      toolCalls: state.toolCalls.length > 0 ? state.toolCalls : undefined,\n      finishReason,\n    };\n  }\n\n  /**\n   * Build historical assistant message with common logic\n   */\n  buildHistoricalAssistantMessage(response: AgentSingleLoopReponse): ChatCompletionMessageParam {\n    const message: ChatCompletionMessageParam = {\n      role: 'assistant',\n      content: response.content || '',\n    };\n\n    // Only add tool_calls for native engines\n    if (this.useNativeToolCalls && response.toolCalls?.length) {\n      message.tool_calls = response.toolCalls;\n    }\n\n    return message;\n  }\n\n  /**\n   * Build historical tool call result messages using shared utility\n   */\n  buildHistoricalToolCallResultMessages(\n    toolCallResults: MultimodalToolCallResult[],\n  ): ChatCompletionMessageParam[] {\n    return buildToolCallResultMessages(toolCallResults, this.useNativeToolCalls);\n  }\n\n  /**\n   * Common helper to process reasoning content in chunks\n   */\n  protected processReasoningContent(\n    chunk: ChatCompletionChunk,\n    state: StreamProcessingState,\n  ): string {\n    const delta = chunk.choices[0]?.delta;\n    let reasoningContent = '';\n\n    // @ts-expect-error Not in OpenAI types but present in compatible LLMs\n    if (delta?.reasoning_content) {\n      // @ts-expect-error\n      reasoningContent = delta.reasoning_content;\n      state.reasoningBuffer += reasoningContent;\n    }\n\n    return reasoningContent;\n  }\n\n  /**\n   * Common helper to process finish reason in chunks\n   */\n  protected processFinishReason(chunk: ChatCompletionChunk, state: StreamProcessingState): void {\n    if (chunk.choices[0]?.finish_reason) {\n      state.finishReason = chunk.choices[0].finish_reason;\n    }\n  }\n}\n"],"names":["BaseToolCallEngine","state","finishReason","undefined","response","_response_toolCalls","message","toolCallResults","buildToolCallResultMessages","chunk","_chunk_choices_","delta","reasoningContent","useNativeToolCalls"],"mappings":";;;;;AAGC;;;;;;;;;;AAmBM,MAAeA;IAoBpB,4BAAmD;QACjD,OAAO;YACL,eAAe;YACf,WAAW,EAAE;YACb,iBAAiB;YACjB,cAAc;QAChB;IACF;IAaA,yBAAyBC,KAA4B,EAAuB;QAC1E,MAAMC,eAAeD,MAAM,SAAS,CAAC,MAAM,GAAG,IAAI,eAAeA,MAAM,YAAY,IAAI;QAEvF,OAAO;YACL,SAASA,MAAM,aAAa;YAC5B,kBAAkBA,MAAM,eAAe,IAAIE;YAC3C,WAAWF,MAAM,SAAS,CAAC,MAAM,GAAG,IAAIA,MAAM,SAAS,GAAGE;YAC1DD;QACF;IACF;IAKA,gCAAgCE,QAAgC,EAA8B;YAO7DC;QAN/B,MAAMC,UAAsC;YAC1C,MAAM;YACN,SAASF,SAAS,OAAO,IAAI;QAC/B;QAGA,IAAI,IAAI,CAAC,kBAAkB,aAAIC,CAAAA,sBAAAA,SAAS,SAAS,AAAD,IAAjBA,KAAAA,IAAAA,oBAAoB,MAAM,AAAD,GACtDC,QAAQ,UAAU,GAAGF,SAAS,SAAS;QAGzC,OAAOE;IACT;IAKA,sCACEC,eAA2C,EACb;QAC9B,OAAOC,4BAA4BD,iBAAiB,IAAI,CAAC,kBAAkB;IAC7E;IAKU,wBACRE,KAA0B,EAC1BR,KAA4B,EACpB;YACMS;QAAd,MAAMC,QAAQ,QAAAD,CAAAA,kBAAAA,MAAM,OAAO,CAAC,EAAE,AAAD,IAAfA,KAAAA,IAAAA,gBAAkB,KAAK;QACrC,IAAIE,mBAAmB;QAGvB,IAAID,QAAAA,QAAAA,KAAAA,IAAAA,MAAO,iBAAiB,EAAE;YAE5BC,mBAAmBD,MAAM,iBAAiB;YAC1CV,MAAM,eAAe,IAAIW;QAC3B;QAEA,OAAOA;IACT;IAKU,oBAAoBH,KAA0B,EAAER,KAA4B,EAAQ;YACxFS;QAAJ,IAAI,QAAAA,CAAAA,kBAAAA,MAAM,OAAO,CAAC,EAAE,AAAD,IAAfA,KAAAA,IAAAA,gBAAkB,aAAa,EACjCT,MAAM,YAAY,GAAGQ,MAAM,OAAO,CAAC,EAAE,CAAC,aAAa;IAEvD;IArGA,YAAYI,qBAAqB,KAAK,CAAE;QAFxC,uBAAmB,sBAAnB;QAGE,IAAI,CAAC,kBAAkB,GAAGA;IAC5B;AAoGF"}