{"version":3,"file":"fake.cjs","sources":["../../../src/llm/fake.ts"],"sourcesContent":["import { ChatGenerationChunk } from '@langchain/core/outputs';\nimport { AIMessageChunk } from '@langchain/core/messages';\nimport type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport { FakeListChatModel } from '@langchain/core/utils/testing';\nimport { ToolCall, ToolCallChunk } from '@langchain/core/messages/tool';\n\ntype SplitStrategy = {\n  type: 'regex' | 'fixed';\n  value: RegExp | number;\n};\n\nexport class FakeChatModel extends FakeListChatModel {\n  private splitStrategy: SplitStrategy;\n  private toolCalls: ToolCall[] = [];\n  private addedToolCalls: boolean = false;\n\n  constructor({\n    responses,\n    sleep,\n    emitCustomEvent,\n    splitStrategy = { type: 'regex', value: /(?<=\\s+)|(?=\\s+)/ },\n    toolCalls = []\n  }: {\n    responses: string[];\n    sleep?: number;\n    emitCustomEvent?: boolean;\n    splitStrategy?: SplitStrategy;\n    toolCalls?: ToolCall[];\n  }) {\n    super({ responses, sleep, emitCustomEvent });\n    this.splitStrategy = splitStrategy;\n    this.toolCalls = toolCalls;\n  }\n\n  private splitText(text: string): string[] {\n    if (this.splitStrategy.type === 'regex') {\n      return text.split(this.splitStrategy.value as RegExp);\n    } else {\n      const chunkSize = this.splitStrategy.value as number;\n      const chunks: string[] = [];\n      for (let i = 0; i < text.length; i += chunkSize) {\n        chunks.push(text.slice(i, i + chunkSize));\n      }\n      return chunks;\n    }\n  }\n  _createResponseChunk(text: string, tool_call_chunks?: ToolCallChunk[]): ChatGenerationChunk {\n    return new ChatGenerationChunk({\n      text,\n      generationInfo: {},\n      message: new AIMessageChunk({\n        content: text,\n        tool_call_chunks,\n        additional_kwargs: tool_call_chunks ? {\n          tool_calls: tool_call_chunks.map((toolCall) => ({\n            index: toolCall.index ?? 0,\n            id: toolCall.id ?? '',\n            type: 'function',\n            function: {\n              name: toolCall.name ?? '',\n              arguments: toolCall.args ?? '',\n            },\n          })),\n        } : undefined,\n      })});\n  }\n\n  async *_streamResponseChunks(\n    _messages: BaseMessage[],\n    options: this['ParsedCallOptions'],\n    runManager?: CallbackManagerForLLMRun\n  ): AsyncGenerator<ChatGenerationChunk> {\n    const response = this._currentResponse();\n    this._incrementResponse();\n\n    if (this.emitCustomEvent) {\n      await runManager?.handleCustomEvent('some_test_event', {\n        someval: true,\n      });\n    }\n\n    const chunks = this.splitText(response);\n    for await (const chunk of chunks) {\n      await this._sleepIfRequested();\n\n      if (options.thrownErrorString != null && options.thrownErrorString) {\n        throw new Error(options.thrownErrorString);\n      }\n\n      const responseChunk = super._createResponseChunk(chunk);\n      yield responseChunk;\n      void runManager?.handleLLMNewToken(chunk);\n    }\n\n    await this._sleepIfRequested();\n    if (this.toolCalls.length > 0 && !this.addedToolCalls) {\n      this.addedToolCalls = true;\n      const toolCallChunks = this.toolCalls.map((toolCall) => {;\n        return {\n          name: toolCall.name,\n          args: JSON.stringify(toolCall.args),\n          id: toolCall.id,\n          type: 'tool_call_chunk',\n        } as ToolCallChunk;\n      });\n      const responseChunk = this._createResponseChunk('', toolCallChunks);\n      yield responseChunk;\n      void runManager?.handleLLMNewToken('');\n    }\n  }\n}\n\nexport function createFakeStreamingLLM({\n  responses,\n  sleep,\n  splitStrategy,\n  toolCalls,\n} : {\n  responses: string[],\n  sleep?: number,\n  splitStrategy?: SplitStrategy,\n  toolCalls?: ToolCall[]\n}\n): FakeChatModel {\n  return new FakeChatModel({\n    sleep,\n    responses,\n    emitCustomEvent: true,\n    splitStrategy,\n    toolCalls,\n  });\n}\n"],"names":["FakeListChatModel","ChatGenerationChunk","AIMessageChunk"],"mappings":"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"}