@langchain/openai 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/azure/chat_models/completions.d.cts +1 -1
  3. package/dist/azure/chat_models/index.cjs +1 -1
  4. package/dist/azure/chat_models/index.d.cts +2 -2
  5. package/dist/azure/chat_models/index.js +1 -1
  6. package/dist/azure/chat_models/responses.cjs +1 -1
  7. package/dist/azure/chat_models/responses.d.cts +1 -1
  8. package/dist/azure/chat_models/responses.js +1 -1
  9. package/dist/azure/embeddings.cjs +1 -1
  10. package/dist/azure/embeddings.js +1 -1
  11. package/dist/chat_models/base.cjs +24 -3
  12. package/dist/chat_models/base.cjs.map +1 -1
  13. package/dist/chat_models/base.d.cts +20 -1
  14. package/dist/chat_models/base.d.cts.map +1 -1
  15. package/dist/chat_models/base.d.ts +23 -4
  16. package/dist/chat_models/base.d.ts.map +1 -1
  17. package/dist/chat_models/base.js +24 -3
  18. package/dist/chat_models/base.js.map +1 -1
  19. package/dist/chat_models/completions.cjs +36 -106
  20. package/dist/chat_models/completions.cjs.map +1 -1
  21. package/dist/chat_models/completions.d.cts +18 -7
  22. package/dist/chat_models/completions.d.cts.map +1 -1
  23. package/dist/chat_models/completions.d.ts +17 -6
  24. package/dist/chat_models/completions.d.ts.map +1 -1
  25. package/dist/chat_models/completions.js +37 -107
  26. package/dist/chat_models/completions.js.map +1 -1
  27. package/dist/chat_models/index.cjs +1 -1
  28. package/dist/chat_models/index.cjs.map +1 -1
  29. package/dist/chat_models/index.d.cts +3 -3
  30. package/dist/chat_models/index.d.ts +4 -4
  31. package/dist/chat_models/index.js +1 -1
  32. package/dist/chat_models/index.js.map +1 -1
  33. package/dist/chat_models/profiles.cjs +567 -0
  34. package/dist/chat_models/profiles.cjs.map +1 -0
  35. package/dist/chat_models/profiles.js +566 -0
  36. package/dist/chat_models/profiles.js.map +1 -0
  37. package/dist/chat_models/responses.cjs +14 -375
  38. package/dist/chat_models/responses.cjs.map +1 -1
  39. package/dist/chat_models/responses.d.cts +2 -17
  40. package/dist/chat_models/responses.d.cts.map +1 -1
  41. package/dist/chat_models/responses.d.ts +1 -16
  42. package/dist/chat_models/responses.d.ts.map +1 -1
  43. package/dist/chat_models/responses.js +15 -376
  44. package/dist/chat_models/responses.js.map +1 -1
  45. package/dist/converters/completions.cjs +605 -0
  46. package/dist/converters/completions.cjs.map +1 -0
  47. package/dist/converters/completions.d.cts +319 -0
  48. package/dist/converters/completions.d.cts.map +1 -0
  49. package/dist/converters/completions.d.ts +319 -0
  50. package/dist/converters/completions.d.ts.map +1 -0
  51. package/dist/converters/completions.js +599 -0
  52. package/dist/converters/completions.js.map +1 -0
  53. package/dist/converters/index.cjs +2 -0
  54. package/dist/converters/index.js +2 -0
  55. package/dist/converters/responses.cjs +895 -0
  56. package/dist/converters/responses.cjs.map +1 -0
  57. package/dist/converters/responses.d.cts +310 -0
  58. package/dist/converters/responses.d.cts.map +1 -0
  59. package/dist/converters/responses.d.ts +310 -0
  60. package/dist/converters/responses.d.ts.map +1 -0
  61. package/dist/converters/responses.js +889 -0
  62. package/dist/converters/responses.js.map +1 -0
  63. package/dist/embeddings.cjs +1 -1
  64. package/dist/embeddings.js +1 -1
  65. package/dist/index.cjs +24 -11
  66. package/dist/index.d.cts +4 -3
  67. package/dist/index.d.ts +4 -3
  68. package/dist/index.js +7 -5
  69. package/dist/llms.cjs +2 -2
  70. package/dist/llms.d.cts +1 -1
  71. package/dist/llms.js +2 -2
  72. package/dist/types.d.cts +2 -2
  73. package/dist/types.d.ts +2 -2
  74. package/dist/utils/errors.cjs +1 -1
  75. package/dist/utils/errors.cjs.map +1 -1
  76. package/dist/utils/errors.js +1 -1
  77. package/dist/utils/errors.js.map +1 -1
  78. package/dist/utils/misc.js +2 -2
  79. package/dist/utils/misc.js.map +1 -1
  80. package/dist/utils/output.cjs +0 -12
  81. package/dist/utils/output.cjs.map +1 -1
  82. package/dist/utils/output.js +1 -12
  83. package/dist/utils/output.js.map +1 -1
  84. package/dist/utils/prompts.cjs +2 -2
  85. package/dist/utils/prompts.cjs.map +1 -1
  86. package/dist/utils/prompts.d.cts +1 -0
  87. package/dist/utils/prompts.d.cts.map +1 -1
  88. package/dist/utils/prompts.d.ts +1 -0
  89. package/dist/utils/prompts.d.ts.map +1 -1
  90. package/dist/utils/prompts.js +2 -2
  91. package/dist/utils/prompts.js.map +1 -1
  92. package/dist/utils/tools.cjs +1 -1
  93. package/dist/utils/tools.js +1 -1
  94. package/package.json +9 -6
  95. package/dist/utils/message_inputs.cjs +0 -139
  96. package/dist/utils/message_inputs.cjs.map +0 -1
  97. package/dist/utils/message_inputs.d.cts +0 -9
  98. package/dist/utils/message_inputs.d.cts.map +0 -1
  99. package/dist/utils/message_inputs.d.ts +0 -9
  100. package/dist/utils/message_inputs.d.ts.map +0 -1
  101. package/dist/utils/message_inputs.js +0 -137
  102. package/dist/utils/message_inputs.js.map +0 -1
  103. package/dist/utils/standard.cjs +0 -315
  104. package/dist/utils/standard.cjs.map +0 -1
  105. package/dist/utils/standard.js +0 -313
  106. package/dist/utils/standard.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"completions.cjs","names":["BaseChatOpenAI","options?: this[\"ParsedCallOptions\"]","extra?: { streaming?: boolean }","strict: boolean | undefined","params: Partial<ChatCompletionsInvocationParams>","formatToOpenAIToolChoice","isReasoningModel","messages: BaseMessage[]","options: this[\"ParsedCallOptions\"]","runManager?: CallbackManagerForLLMRun","messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[]","_convertMessagesToOpenAIParams","finalChunks: Record<number, ChatGenerationChunk>","generations: ChatGeneration[]","generation: ChatGeneration","AIMessage","defaultRole: OpenAIClient.Chat.ChatCompletionRole | undefined","usage: OpenAIClient.Completions.CompletionUsage | undefined","generationInfo: Record<string, any>","ChatGenerationChunk","AIMessageChunk","request: OpenAIClient.Chat.ChatCompletionCreateParams","requestOptions?: OpenAIClient.RequestOptions","wrapOpenAIClientError","message: OpenAIClient.Chat.Completions.ChatCompletionMessage","rawResponse: OpenAIClient.Chat.Completions.ChatCompletion","rawToolCalls: OpenAIToolCall[] | undefined","e: any","additional_kwargs: Record<string, unknown>","response_metadata: Record<string, unknown> | undefined","handleMultiModalOutput","ChatMessage","delta: Record<string, any>","rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk","defaultRole?: OpenAIClient.Chat.ChatCompletionRole","HumanMessageChunk","toolCallChunks: ToolCallChunk[]","SystemMessageChunk","FunctionMessageChunk","ToolMessageChunk","ChatMessageChunk"],"sources":["../../src/chat_models/completions.ts"],"sourcesContent":["import { OpenAI as OpenAIClient } from \"openai\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport {\n AIMessage,\n AIMessageChunk,\n type BaseMessage,\n ChatMessage,\n ChatMessageChunk,\n FunctionMessageChunk,\n HumanMessageChunk,\n SystemMessageChunk,\n ToolMessageChunk,\n OpenAIToolCall,\n isAIMessage,\n type UsageMetadata,\n type BaseMessageFields,\n} from \"@langchain/core/messages\";\nimport {\n ChatGenerationChunk,\n type ChatGeneration,\n type ChatResult,\n} from \"@langchain/core/outputs\";\nimport { NewTokenIndices } from \"@langchain/core/callbacks/base\";\nimport {\n makeInvalidToolCall,\n parseToolCall,\n} from \"@langchain/core/output_parsers/openai_tools\";\nimport type { ToolCallChunk } from \"@langchain/core/messages/tool\";\nimport { wrapOpenAIClientError } from \"../utils/client.js\";\nimport {\n OpenAIToolChoice,\n formatToOpenAIToolChoice,\n _convertToOpenAITool,\n} from \"../utils/tools.js\";\nimport {\n handleMultiModalOutput,\n _convertOpenAIResponsesUsageToLangChainUsage,\n} from \"../utils/output.js\";\nimport { _convertMessagesToOpenAIParams } from \"../utils/message_inputs.js\";\nimport { _convertToResponsesMessageFromV1 } from \"../utils/standard.js\";\nimport { isReasoningModel } from \"../utils/misc.js\";\nimport { BaseChatOpenAICallOptions } from \"./base.js\";\nimport { BaseChatOpenAI } from \"./base.js\";\n\nexport interface ChatOpenAICompletionsCallOptions\n extends BaseChatOpenAICallOptions {}\n\ntype ChatCompletionsInvocationParams = Omit<\n OpenAIClient.Chat.Completions.ChatCompletionCreateParams,\n \"messages\"\n>;\n\n/**\n * OpenAI Completions API implementation.\n * @internal\n */\nexport class ChatOpenAICompletions<\n CallOptions extends ChatOpenAICompletionsCallOptions = ChatOpenAICompletionsCallOptions\n> extends BaseChatOpenAI<CallOptions> {\n /** @internal */\n override invocationParams(\n options?: this[\"ParsedCallOptions\"],\n extra?: { streaming?: boolean }\n ): ChatCompletionsInvocationParams {\n let strict: boolean | undefined;\n if (options?.strict !== undefined) {\n strict = options.strict;\n } else if (this.supportsStrictToolCalling !== undefined) {\n strict = this.supportsStrictToolCalling;\n }\n\n let streamOptionsConfig = {};\n if (options?.stream_options !== undefined) {\n streamOptionsConfig = { stream_options: options.stream_options };\n } else if (this.streamUsage && (this.streaming || extra?.streaming)) {\n streamOptionsConfig = { stream_options: { include_usage: true } };\n }\n\n const params: Partial<ChatCompletionsInvocationParams> = {\n model: this.model,\n temperature: this.temperature,\n top_p: this.topP,\n frequency_penalty: this.frequencyPenalty,\n presence_penalty: this.presencePenalty,\n logprobs: this.logprobs,\n top_logprobs: this.topLogprobs,\n n: this.n,\n logit_bias: this.logitBias,\n stop: options?.stop ?? this.stopSequences,\n user: this.user,\n // if include_usage is set or streamUsage then stream must be set to true.\n stream: this.streaming,\n functions: options?.functions,\n function_call: options?.function_call,\n tools: options?.tools?.length\n ? options.tools.map((tool) =>\n this._convertChatOpenAIToolToCompletionsTool(tool, { strict })\n )\n : undefined,\n tool_choice: formatToOpenAIToolChoice(\n options?.tool_choice as OpenAIToolChoice\n ),\n response_format: this._getResponseFormat(options?.response_format),\n seed: options?.seed,\n ...streamOptionsConfig,\n parallel_tool_calls: options?.parallel_tool_calls,\n ...(this.audio || options?.audio\n ? { audio: this.audio || options?.audio }\n : {}),\n ...(this.modalities || options?.modalities\n ? { modalities: this.modalities || options?.modalities }\n : {}),\n ...this.modelKwargs,\n prompt_cache_key: options?.promptCacheKey ?? this.promptCacheKey,\n verbosity: options?.verbosity ?? this.verbosity,\n };\n if (options?.prediction !== undefined) {\n params.prediction = options.prediction;\n }\n if (this.service_tier !== undefined) {\n params.service_tier = this.service_tier;\n }\n if (options?.service_tier !== undefined) {\n params.service_tier = options.service_tier;\n }\n const reasoning = this._getReasoningParams(options);\n if (reasoning !== undefined && reasoning.effort !== undefined) {\n params.reasoning_effort = reasoning.effort;\n }\n if (isReasoningModel(params.model)) {\n params.max_completion_tokens =\n this.maxTokens === -1 ? undefined : this.maxTokens;\n } else {\n params.max_tokens = this.maxTokens === -1 ? undefined : this.maxTokens;\n }\n\n return params as ChatCompletionsInvocationParams;\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n const usageMetadata = {} as UsageMetadata;\n const params = this.invocationParams(options);\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n _convertMessagesToOpenAIParams(messages, this.model);\n\n if (params.stream) {\n const stream = this._streamResponseChunks(messages, options, runManager);\n const finalChunks: Record<number, ChatGenerationChunk> = {};\n for await (const chunk of stream) {\n chunk.message.response_metadata = {\n ...chunk.generationInfo,\n ...chunk.message.response_metadata,\n };\n const index =\n (chunk.generationInfo as NewTokenIndices)?.completion ?? 0;\n if (finalChunks[index] === undefined) {\n finalChunks[index] = chunk;\n } else {\n finalChunks[index] = finalChunks[index].concat(chunk);\n }\n }\n const generations = Object.entries(finalChunks)\n .sort(([aKey], [bKey]) => parseInt(aKey, 10) - parseInt(bKey, 10))\n .map(([_, value]) => value);\n\n const { functions, function_call } = this.invocationParams(options);\n\n // OpenAI does not support token usage report under stream mode,\n // fallback to estimation.\n\n const promptTokenUsage = await this._getEstimatedTokenCountFromPrompt(\n messages,\n functions,\n function_call\n );\n const completionTokenUsage = await this._getNumTokensFromGenerations(\n generations\n );\n\n usageMetadata.input_tokens = promptTokenUsage;\n usageMetadata.output_tokens = completionTokenUsage;\n usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage;\n return {\n generations,\n llmOutput: {\n estimatedTokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n } else {\n const data = await this.completionWithRetry(\n {\n ...params,\n stream: false,\n messages: messagesMapped,\n },\n {\n signal: options?.signal,\n ...options?.options,\n }\n );\n\n const {\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n total_tokens: totalTokens,\n prompt_tokens_details: promptTokensDetails,\n completion_tokens_details: completionTokensDetails,\n } = data?.usage ?? {};\n\n if (completionTokens) {\n usageMetadata.output_tokens =\n (usageMetadata.output_tokens ?? 0) + completionTokens;\n }\n\n if (promptTokens) {\n usageMetadata.input_tokens =\n (usageMetadata.input_tokens ?? 0) + promptTokens;\n }\n\n if (totalTokens) {\n usageMetadata.total_tokens =\n (usageMetadata.total_tokens ?? 0) + totalTokens;\n }\n\n if (\n promptTokensDetails?.audio_tokens !== null ||\n promptTokensDetails?.cached_tokens !== null\n ) {\n usageMetadata.input_token_details = {\n ...(promptTokensDetails?.audio_tokens !== null && {\n audio: promptTokensDetails?.audio_tokens,\n }),\n ...(promptTokensDetails?.cached_tokens !== null && {\n cache_read: promptTokensDetails?.cached_tokens,\n }),\n };\n }\n\n if (\n completionTokensDetails?.audio_tokens !== null ||\n completionTokensDetails?.reasoning_tokens !== null\n ) {\n usageMetadata.output_token_details = {\n ...(completionTokensDetails?.audio_tokens !== null && {\n audio: completionTokensDetails?.audio_tokens,\n }),\n ...(completionTokensDetails?.reasoning_tokens !== null && {\n reasoning: completionTokensDetails?.reasoning_tokens,\n }),\n };\n }\n\n const generations: ChatGeneration[] = [];\n for (const part of data?.choices ?? []) {\n const text = part.message?.content ?? \"\";\n const generation: ChatGeneration = {\n text,\n message: this._convertCompletionsMessageToBaseMessage(\n part.message ?? { role: \"assistant\" },\n data\n ),\n };\n generation.generationInfo = {\n ...(part.finish_reason ? { finish_reason: part.finish_reason } : {}),\n ...(part.logprobs ? { logprobs: part.logprobs } : {}),\n };\n if (isAIMessage(generation.message)) {\n generation.message.usage_metadata = usageMetadata;\n }\n // Fields are not serialized unless passed to the constructor\n // Doing this ensures all fields on the message are serialized\n generation.message = new AIMessage(\n Object.fromEntries(\n Object.entries(generation.message).filter(\n ([key]) => !key.startsWith(\"lc_\")\n )\n ) as BaseMessageFields\n );\n generations.push(generation);\n }\n return {\n generations,\n llmOutput: {\n tokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n }\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n _convertMessagesToOpenAIParams(messages, this.model);\n\n const params = {\n ...this.invocationParams(options, {\n streaming: true,\n }),\n messages: messagesMapped,\n stream: true as const,\n };\n let defaultRole: OpenAIClient.Chat.ChatCompletionRole | undefined;\n\n const streamIterable = await this.completionWithRetry(params, options);\n let usage: OpenAIClient.Completions.CompletionUsage | undefined;\n for await (const data of streamIterable) {\n const choice = data?.choices?.[0];\n if (data.usage) {\n usage = data.usage;\n }\n if (!choice) {\n continue;\n }\n\n const { delta } = choice;\n if (!delta) {\n continue;\n }\n const chunk = this._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n data,\n defaultRole\n );\n defaultRole = delta.role ?? defaultRole;\n const newTokenIndices = {\n prompt: options.promptIndex ?? 0,\n completion: choice.index ?? 0,\n };\n if (typeof chunk.content !== \"string\") {\n console.log(\n \"[WARNING]: Received non-string content from OpenAI. This is currently not supported.\"\n );\n continue;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const generationInfo: Record<string, any> = { ...newTokenIndices };\n if (choice.finish_reason != null) {\n generationInfo.finish_reason = choice.finish_reason;\n // Only include system fingerprint in the last chunk for now\n // to avoid concatenation issues\n generationInfo.system_fingerprint = data.system_fingerprint;\n generationInfo.model_name = data.model;\n generationInfo.service_tier = data.service_tier;\n }\n if (this.logprobs) {\n generationInfo.logprobs = choice.logprobs;\n }\n const generationChunk = new ChatGenerationChunk({\n message: chunk,\n text: chunk.content,\n generationInfo,\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n generationChunk.text ?? \"\",\n newTokenIndices,\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n if (usage) {\n const inputTokenDetails = {\n ...(usage.prompt_tokens_details?.audio_tokens !== null && {\n audio: usage.prompt_tokens_details?.audio_tokens,\n }),\n ...(usage.prompt_tokens_details?.cached_tokens !== null && {\n cache_read: usage.prompt_tokens_details?.cached_tokens,\n }),\n };\n const outputTokenDetails = {\n ...(usage.completion_tokens_details?.audio_tokens !== null && {\n audio: usage.completion_tokens_details?.audio_tokens,\n }),\n ...(usage.completion_tokens_details?.reasoning_tokens !== null && {\n reasoning: usage.completion_tokens_details?.reasoning_tokens,\n }),\n };\n const generationChunk = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: \"\",\n response_metadata: {\n usage: { ...usage },\n },\n usage_metadata: {\n input_tokens: usage.prompt_tokens,\n output_tokens: usage.completion_tokens,\n total_tokens: usage.total_tokens,\n ...(Object.keys(inputTokenDetails).length > 0 && {\n input_token_details: inputTokenDetails,\n }),\n ...(Object.keys(outputTokenDetails).length > 0 && {\n output_token_details: outputTokenDetails,\n }),\n },\n }),\n text: \"\",\n });\n yield generationChunk;\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n }\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>>;\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<OpenAIClient.Chat.Completions.ChatCompletion>;\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParams,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<\n | AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>\n | OpenAIClient.Chat.Completions.ChatCompletion\n > {\n const clientOptions = this._getClientOptions(requestOptions);\n const isParseableFormat =\n request.response_format && request.response_format.type === \"json_schema\";\n return this.caller.call(async () => {\n try {\n if (isParseableFormat && !request.stream) {\n return await this.client.chat.completions.parse(\n request,\n clientOptions\n );\n } else {\n return await this.client.chat.completions.create(\n request,\n clientOptions\n );\n }\n } catch (e) {\n const error = wrapOpenAIClientError(e);\n throw error;\n }\n });\n }\n\n /** @internal */\n protected _convertCompletionsMessageToBaseMessage(\n message: OpenAIClient.Chat.Completions.ChatCompletionMessage,\n rawResponse: OpenAIClient.Chat.Completions.ChatCompletion\n ): BaseMessage {\n const rawToolCalls: OpenAIToolCall[] | undefined = message.tool_calls as\n | OpenAIToolCall[]\n | undefined;\n switch (message.role) {\n case \"assistant\": {\n const toolCalls = [];\n const invalidToolCalls = [];\n for (const rawToolCall of rawToolCalls ?? []) {\n try {\n toolCalls.push(parseToolCall(rawToolCall, { returnId: true }));\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n invalidToolCalls.push(makeInvalidToolCall(rawToolCall, e.message));\n }\n }\n const additional_kwargs: Record<string, unknown> = {\n function_call: message.function_call,\n tool_calls: rawToolCalls,\n };\n if (this.__includeRawResponse !== undefined) {\n additional_kwargs.__raw_response = rawResponse;\n }\n const response_metadata: Record<string, unknown> | undefined = {\n model_provider: \"openai\",\n model_name: rawResponse.model,\n ...(rawResponse.system_fingerprint\n ? {\n usage: { ...rawResponse.usage },\n system_fingerprint: rawResponse.system_fingerprint,\n }\n : {}),\n };\n\n if (message.audio) {\n additional_kwargs.audio = message.audio;\n }\n\n const content = handleMultiModalOutput(\n message.content || \"\",\n rawResponse.choices?.[0]?.message\n );\n return new AIMessage({\n content,\n tool_calls: toolCalls,\n invalid_tool_calls: invalidToolCalls,\n additional_kwargs,\n response_metadata,\n id: rawResponse.id,\n });\n }\n default:\n return new ChatMessage(\n message.content || \"\",\n message.role ?? \"unknown\"\n );\n }\n }\n\n /** @internal */\n protected _convertCompletionsDeltaToBaseMessageChunk(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n delta: Record<string, any>,\n rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk,\n defaultRole?: OpenAIClient.Chat.ChatCompletionRole\n ) {\n const role = delta.role ?? defaultRole;\n const content = delta.content ?? \"\";\n let additional_kwargs: Record<string, unknown>;\n if (delta.function_call) {\n additional_kwargs = {\n function_call: delta.function_call,\n };\n } else if (delta.tool_calls) {\n additional_kwargs = {\n tool_calls: delta.tool_calls,\n };\n } else {\n additional_kwargs = {};\n }\n if (this.__includeRawResponse) {\n additional_kwargs.__raw_response = rawResponse;\n }\n\n if (delta.audio) {\n additional_kwargs.audio = {\n ...delta.audio,\n index: rawResponse.choices[0].index,\n };\n }\n\n const response_metadata = {\n model_provider: \"openai\",\n usage: { ...rawResponse.usage },\n };\n if (role === \"user\") {\n return new HumanMessageChunk({ content, response_metadata });\n } else if (role === \"assistant\") {\n const toolCallChunks: ToolCallChunk[] = [];\n if (Array.isArray(delta.tool_calls)) {\n for (const rawToolCall of delta.tool_calls) {\n toolCallChunks.push({\n name: rawToolCall.function?.name,\n args: rawToolCall.function?.arguments,\n id: rawToolCall.id,\n index: rawToolCall.index,\n type: \"tool_call_chunk\",\n });\n }\n }\n return new AIMessageChunk({\n content,\n tool_call_chunks: toolCallChunks,\n additional_kwargs,\n id: rawResponse.id,\n response_metadata,\n });\n } else if (role === \"system\") {\n return new SystemMessageChunk({ content, response_metadata });\n } else if (role === \"developer\") {\n return new SystemMessageChunk({\n content,\n response_metadata,\n additional_kwargs: {\n __openai_role__: \"developer\",\n },\n });\n } else if (role === \"function\") {\n return new FunctionMessageChunk({\n content,\n additional_kwargs,\n name: delta.name,\n response_metadata,\n });\n } else if (role === \"tool\") {\n return new ToolMessageChunk({\n content,\n additional_kwargs,\n tool_call_id: delta.tool_call_id,\n response_metadata,\n });\n } else {\n return new ChatMessageChunk({ content, role, response_metadata });\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAwDA,IAAa,wBAAb,cAEUA,4BAA4B;;CAEpC,AAAS,iBACPC,SACAC,OACiC;EACjC,IAAIC;AACJ,MAAI,SAAS,WAAW,QACtB,SAAS,QAAQ;WACR,KAAK,8BAA8B,QAC5C,SAAS,KAAK;EAGhB,IAAI,sBAAsB,CAAE;AAC5B,MAAI,SAAS,mBAAmB,QAC9B,sBAAsB,EAAE,gBAAgB,QAAQ,eAAgB;WACvD,KAAK,gBAAgB,KAAK,aAAa,OAAO,YACvD,sBAAsB,EAAE,gBAAgB,EAAE,eAAe,KAAM,EAAE;EAGnE,MAAMC,SAAmD;GACvD,OAAO,KAAK;GACZ,aAAa,KAAK;GAClB,OAAO,KAAK;GACZ,mBAAmB,KAAK;GACxB,kBAAkB,KAAK;GACvB,UAAU,KAAK;GACf,cAAc,KAAK;GACnB,GAAG,KAAK;GACR,YAAY,KAAK;GACjB,MAAM,SAAS,QAAQ,KAAK;GAC5B,MAAM,KAAK;GAEX,QAAQ,KAAK;GACb,WAAW,SAAS;GACpB,eAAe,SAAS;GACxB,OAAO,SAAS,OAAO,SACnB,QAAQ,MAAM,IAAI,CAAC,SACjB,KAAK,wCAAwC,MAAM,EAAE,OAAQ,EAAC,CAC/D,GACD;GACJ,aAAaC,uCACX,SAAS,YACV;GACD,iBAAiB,KAAK,mBAAmB,SAAS,gBAAgB;GAClE,MAAM,SAAS;GACf,GAAG;GACH,qBAAqB,SAAS;GAC9B,GAAI,KAAK,SAAS,SAAS,QACvB,EAAE,OAAO,KAAK,SAAS,SAAS,MAAO,IACvC,CAAE;GACN,GAAI,KAAK,cAAc,SAAS,aAC5B,EAAE,YAAY,KAAK,cAAc,SAAS,WAAY,IACtD,CAAE;GACN,GAAG,KAAK;GACR,kBAAkB,SAAS,kBAAkB,KAAK;GAClD,WAAW,SAAS,aAAa,KAAK;EACvC;AACD,MAAI,SAAS,eAAe,QAC1B,OAAO,aAAa,QAAQ;AAE9B,MAAI,KAAK,iBAAiB,QACxB,OAAO,eAAe,KAAK;AAE7B,MAAI,SAAS,iBAAiB,QAC5B,OAAO,eAAe,QAAQ;EAEhC,MAAM,YAAY,KAAK,oBAAoB,QAAQ;AACnD,MAAI,cAAc,UAAa,UAAU,WAAW,QAClD,OAAO,mBAAmB,UAAU;AAEtC,MAAIC,8BAAiB,OAAO,MAAM,EAChC,OAAO,wBACL,KAAK,cAAc,KAAK,SAAY,KAAK;OAE3C,OAAO,aAAa,KAAK,cAAc,KAAK,SAAY,KAAK;AAG/D,SAAO;CACR;CAED,MAAM,UACJC,UACAC,SACAC,YACqB;EACrB,MAAM,gBAAgB,CAAE;EACxB,MAAM,SAAS,KAAK,iBAAiB,QAAQ;EAC7C,MAAMC,iBACJC,sDAA+B,UAAU,KAAK,MAAM;AAEtD,MAAI,OAAO,QAAQ;GACjB,MAAM,SAAS,KAAK,sBAAsB,UAAU,SAAS,WAAW;GACxE,MAAMC,cAAmD,CAAE;AAC3D,cAAW,MAAM,SAAS,QAAQ;IAChC,MAAM,QAAQ,oBAAoB;KAChC,GAAG,MAAM;KACT,GAAG,MAAM,QAAQ;IAClB;IACD,MAAM,QACH,MAAM,gBAAoC,cAAc;AAC3D,QAAI,YAAY,WAAW,QACzB,YAAY,SAAS;SAErB,YAAY,SAAS,YAAY,OAAO,OAAO,MAAM;GAExD;GACD,MAAM,cAAc,OAAO,QAAQ,YAAY,CAC5C,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,SAAS,MAAM,GAAG,GAAG,SAAS,MAAM,GAAG,CAAC,CACjE,IAAI,CAAC,CAAC,GAAG,MAAM,KAAK,MAAM;GAE7B,MAAM,EAAE,WAAW,eAAe,GAAG,KAAK,iBAAiB,QAAQ;GAKnE,MAAM,mBAAmB,MAAM,KAAK,kCAClC,UACA,WACA,cACD;GACD,MAAM,uBAAuB,MAAM,KAAK,6BACtC,YACD;GAED,cAAc,eAAe;GAC7B,cAAc,gBAAgB;GAC9B,cAAc,eAAe,mBAAmB;AAChD,UAAO;IACL;IACA,WAAW,EACT,qBAAqB;KACnB,cAAc,cAAc;KAC5B,kBAAkB,cAAc;KAChC,aAAa,cAAc;IAC5B,EACF;GACF;EACF,OAAM;GACL,MAAM,OAAO,MAAM,KAAK,oBACtB;IACE,GAAG;IACH,QAAQ;IACR,UAAU;GACX,GACD;IACE,QAAQ,SAAS;IACjB,GAAG,SAAS;GACb,EACF;GAED,MAAM,EACJ,mBAAmB,kBACnB,eAAe,cACf,cAAc,aACd,uBAAuB,qBACvB,2BAA2B,yBAC5B,GAAG,MAAM,SAAS,CAAE;AAErB,OAAI,kBACF,cAAc,iBACX,cAAc,iBAAiB,KAAK;AAGzC,OAAI,cACF,cAAc,gBACX,cAAc,gBAAgB,KAAK;AAGxC,OAAI,aACF,cAAc,gBACX,cAAc,gBAAgB,KAAK;AAGxC,OACE,qBAAqB,iBAAiB,QACtC,qBAAqB,kBAAkB,MAEvC,cAAc,sBAAsB;IAClC,GAAI,qBAAqB,iBAAiB,QAAQ,EAChD,OAAO,qBAAqB,aAC7B;IACD,GAAI,qBAAqB,kBAAkB,QAAQ,EACjD,YAAY,qBAAqB,cAClC;GACF;AAGH,OACE,yBAAyB,iBAAiB,QAC1C,yBAAyB,qBAAqB,MAE9C,cAAc,uBAAuB;IACnC,GAAI,yBAAyB,iBAAiB,QAAQ,EACpD,OAAO,yBAAyB,aACjC;IACD,GAAI,yBAAyB,qBAAqB,QAAQ,EACxD,WAAW,yBAAyB,iBACrC;GACF;GAGH,MAAMC,cAAgC,CAAE;AACxC,QAAK,MAAM,QAAQ,MAAM,WAAW,CAAE,GAAE;IACtC,MAAM,OAAO,KAAK,SAAS,WAAW;IACtC,MAAMC,aAA6B;KACjC;KACA,SAAS,KAAK,wCACZ,KAAK,WAAW,EAAE,MAAM,YAAa,GACrC,KACD;IACF;IACD,WAAW,iBAAiB;KAC1B,GAAI,KAAK,gBAAgB,EAAE,eAAe,KAAK,cAAe,IAAG,CAAE;KACnE,GAAI,KAAK,WAAW,EAAE,UAAU,KAAK,SAAU,IAAG,CAAE;IACrD;AACD,mDAAgB,WAAW,QAAQ,EACjC,WAAW,QAAQ,iBAAiB;IAItC,WAAW,UAAU,IAAIC,oCACvB,OAAO,YACL,OAAO,QAAQ,WAAW,QAAQ,CAAC,OACjC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,WAAW,MAAM,CAClC,CACF;IAEH,YAAY,KAAK,WAAW;GAC7B;AACD,UAAO;IACL;IACA,WAAW,EACT,YAAY;KACV,cAAc,cAAc;KAC5B,kBAAkB,cAAc;KAChC,aAAa,cAAc;IAC5B,EACF;GACF;EACF;CACF;CAED,OAAO,sBACLR,UACAC,SACAC,YACqC;EACrC,MAAMC,iBACJC,sDAA+B,UAAU,KAAK,MAAM;EAEtD,MAAM,SAAS;GACb,GAAG,KAAK,iBAAiB,SAAS,EAChC,WAAW,KACZ,EAAC;GACF,UAAU;GACV,QAAQ;EACT;EACD,IAAIK;EAEJ,MAAM,iBAAiB,MAAM,KAAK,oBAAoB,QAAQ,QAAQ;EACtE,IAAIC;AACJ,aAAW,MAAM,QAAQ,gBAAgB;GACvC,MAAM,SAAS,MAAM,UAAU;AAC/B,OAAI,KAAK,OACP,QAAQ,KAAK;AAEf,OAAI,CAAC,OACH;GAGF,MAAM,EAAE,OAAO,GAAG;AAClB,OAAI,CAAC,MACH;GAEF,MAAM,QAAQ,KAAK,2CACjB,OACA,MACA,YACD;GACD,cAAc,MAAM,QAAQ;GAC5B,MAAM,kBAAkB;IACtB,QAAQ,QAAQ,eAAe;IAC/B,YAAY,OAAO,SAAS;GAC7B;AACD,OAAI,OAAO,MAAM,YAAY,UAAU;IACrC,QAAQ,IACN,uFACD;AACD;GACD;GAED,MAAMC,iBAAsC,EAAE,GAAG,gBAAiB;AAClE,OAAI,OAAO,iBAAiB,MAAM;IAChC,eAAe,gBAAgB,OAAO;IAGtC,eAAe,qBAAqB,KAAK;IACzC,eAAe,aAAa,KAAK;IACjC,eAAe,eAAe,KAAK;GACpC;AACD,OAAI,KAAK,UACP,eAAe,WAAW,OAAO;GAEnC,MAAM,kBAAkB,IAAIC,6CAAoB;IAC9C,SAAS;IACT,MAAM,MAAM;IACZ;GACD;GACD,MAAM;GACN,MAAM,YAAY,kBAChB,gBAAgB,QAAQ,IACxB,iBACA,QACA,QACA,QACA,EAAE,OAAO,gBAAiB,EAC3B;EACF;AACD,MAAI,OAAO;GACT,MAAM,oBAAoB;IACxB,GAAI,MAAM,uBAAuB,iBAAiB,QAAQ,EACxD,OAAO,MAAM,uBAAuB,aACrC;IACD,GAAI,MAAM,uBAAuB,kBAAkB,QAAQ,EACzD,YAAY,MAAM,uBAAuB,cAC1C;GACF;GACD,MAAM,qBAAqB;IACzB,GAAI,MAAM,2BAA2B,iBAAiB,QAAQ,EAC5D,OAAO,MAAM,2BAA2B,aACzC;IACD,GAAI,MAAM,2BAA2B,qBAAqB,QAAQ,EAChE,WAAW,MAAM,2BAA2B,iBAC7C;GACF;GACD,MAAM,kBAAkB,IAAIA,6CAAoB;IAC9C,SAAS,IAAIC,yCAAe;KAC1B,SAAS;KACT,mBAAmB,EACjB,OAAO,EAAE,GAAG,MAAO,EACpB;KACD,gBAAgB;MACd,cAAc,MAAM;MACpB,eAAe,MAAM;MACrB,cAAc,MAAM;MACpB,GAAI,OAAO,KAAK,kBAAkB,CAAC,SAAS,KAAK,EAC/C,qBAAqB,kBACtB;MACD,GAAI,OAAO,KAAK,mBAAmB,CAAC,SAAS,KAAK,EAChD,sBAAsB,mBACvB;KACF;IACF;IACD,MAAM;GACP;GACD,MAAM;EACP;AACD,MAAI,QAAQ,QAAQ,QAClB,OAAM,IAAI,MAAM;CAEnB;CAYD,MAAM,oBACJC,SACAC,gBAIA;EACA,MAAM,gBAAgB,KAAK,kBAAkB,eAAe;EAC5D,MAAM,oBACJ,QAAQ,mBAAmB,QAAQ,gBAAgB,SAAS;AAC9D,SAAO,KAAK,OAAO,KAAK,YAAY;AAClC,OAAI;AACF,QAAI,qBAAqB,CAAC,QAAQ,OAChC,QAAO,MAAM,KAAK,OAAO,KAAK,YAAY,MACxC,SACA,cACD;QAED,QAAO,MAAM,KAAK,OAAO,KAAK,YAAY,OACxC,SACA,cACD;GAEJ,SAAQ,GAAG;IACV,MAAM,QAAQC,qCAAsB,EAAE;AACtC,UAAM;GACP;EACF,EAAC;CACH;;CAGD,AAAU,wCACRC,SACAC,aACa;EACb,MAAMC,eAA6C,QAAQ;AAG3D,UAAQ,QAAQ,MAAhB;GACE,KAAK,aAAa;IAChB,MAAM,YAAY,CAAE;IACpB,MAAM,mBAAmB,CAAE;AAC3B,SAAK,MAAM,eAAe,gBAAgB,CAAE,EAC1C,KAAI;KACF,UAAU,qEAAmB,aAAa,EAAE,UAAU,KAAM,EAAC,CAAC;IAE/D,SAAQC,GAAQ;KACf,iBAAiB,2EAAyB,aAAa,EAAE,QAAQ,CAAC;IACnE;IAEH,MAAMC,oBAA6C;KACjD,eAAe,QAAQ;KACvB,YAAY;IACb;AACD,QAAI,KAAK,yBAAyB,QAChC,kBAAkB,iBAAiB;IAErC,MAAMC,oBAAyD;KAC7D,gBAAgB;KAChB,YAAY,YAAY;KACxB,GAAI,YAAY,qBACZ;MACE,OAAO,EAAE,GAAG,YAAY,MAAO;MAC/B,oBAAoB,YAAY;KACjC,IACD,CAAE;IACP;AAED,QAAI,QAAQ,OACV,kBAAkB,QAAQ,QAAQ;IAGpC,MAAM,UAAUC,sCACd,QAAQ,WAAW,IACnB,YAAY,UAAU,IAAI,QAC3B;AACD,WAAO,IAAIf,oCAAU;KACnB;KACA,YAAY;KACZ,oBAAoB;KACpB;KACA;KACA,IAAI,YAAY;IACjB;GACF;GACD,QACE,QAAO,IAAIgB,sCACT,QAAQ,WAAW,IACnB,QAAQ,QAAQ;EAErB;CACF;;CAGD,AAAU,2CAERC,OACAC,aACAC,aACA;EACA,MAAM,OAAO,MAAM,QAAQ;EAC3B,MAAM,UAAU,MAAM,WAAW;EACjC,IAAIN;AACJ,MAAI,MAAM,eACR,oBAAoB,EAClB,eAAe,MAAM,cACtB;WACQ,MAAM,YACf,oBAAoB,EAClB,YAAY,MAAM,WACnB;OAED,oBAAoB,CAAE;AAExB,MAAI,KAAK,sBACP,kBAAkB,iBAAiB;AAGrC,MAAI,MAAM,OACR,kBAAkB,QAAQ;GACxB,GAAG,MAAM;GACT,OAAO,YAAY,QAAQ,GAAG;EAC/B;EAGH,MAAM,oBAAoB;GACxB,gBAAgB;GAChB,OAAO,EAAE,GAAG,YAAY,MAAO;EAChC;AACD,MAAI,SAAS,OACX,QAAO,IAAIO,4CAAkB;GAAE;GAAS;EAAmB;WAClD,SAAS,aAAa;GAC/B,MAAMC,iBAAkC,CAAE;AAC1C,OAAI,MAAM,QAAQ,MAAM,WAAW,CACjC,MAAK,MAAM,eAAe,MAAM,YAC9B,eAAe,KAAK;IAClB,MAAM,YAAY,UAAU;IAC5B,MAAM,YAAY,UAAU;IAC5B,IAAI,YAAY;IAChB,OAAO,YAAY;IACnB,MAAM;GACP,EAAC;AAGN,UAAO,IAAIhB,yCAAe;IACxB;IACA,kBAAkB;IAClB;IACA,IAAI,YAAY;IAChB;GACD;EACF,WAAU,SAAS,SAClB,QAAO,IAAIiB,6CAAmB;GAAE;GAAS;EAAmB;WACnD,SAAS,YAClB,QAAO,IAAIA,6CAAmB;GAC5B;GACA;GACA,mBAAmB,EACjB,iBAAiB,YAClB;EACF;WACQ,SAAS,WAClB,QAAO,IAAIC,+CAAqB;GAC9B;GACA;GACA,MAAM,MAAM;GACZ;EACD;WACQ,SAAS,OAClB,QAAO,IAAIC,2CAAiB;GAC1B;GACA;GACA,cAAc,MAAM;GACpB;EACD;MAED,QAAO,IAAIC,2CAAiB;GAAE;GAAS;GAAM;EAAmB;CAEnE;AACF"}
1
+ {"version":3,"file":"completions.cjs","names":["BaseChatOpenAI","options?: this[\"ParsedCallOptions\"]","extra?: { streaming?: boolean }","strict: boolean | undefined","params: Partial<ChatCompletionsInvocationParams>","formatToOpenAIToolChoice","isReasoningModel","messages: BaseMessage[]","options: this[\"ParsedCallOptions\"]","runManager?: CallbackManagerForLLMRun","messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[]","convertMessagesToCompletionsMessageParams","finalChunks: Record<number, ChatGenerationChunk>","generations: ChatGeneration[]","generation: ChatGeneration","AIMessage","defaultRole: OpenAIClient.Chat.ChatCompletionRole | undefined","usage: OpenAIClient.Completions.CompletionUsage | undefined","generationInfo: Record<string, any>","ChatGenerationChunk","AIMessageChunk","request: OpenAIClient.Chat.ChatCompletionCreateParams","requestOptions?: OpenAIClient.RequestOptions","wrapOpenAIClientError","delta: Record<string, any>","rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk","defaultRole?: OpenAIClient.Chat.ChatCompletionRole","convertCompletionsDeltaToBaseMessageChunk","message: OpenAIClient.ChatCompletionMessage","rawResponse: OpenAIClient.ChatCompletion","convertCompletionsMessageToBaseMessage"],"sources":["../../src/chat_models/completions.ts"],"sourcesContent":["import { OpenAI as OpenAIClient } from \"openai\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport {\n AIMessage,\n AIMessageChunk,\n type BaseMessage,\n isAIMessage,\n type UsageMetadata,\n type BaseMessageFields,\n BaseMessageChunk,\n} from \"@langchain/core/messages\";\nimport {\n ChatGenerationChunk,\n type ChatGeneration,\n type ChatResult,\n} from \"@langchain/core/outputs\";\nimport { NewTokenIndices } from \"@langchain/core/callbacks/base\";\nimport { wrapOpenAIClientError } from \"../utils/client.js\";\nimport {\n OpenAIToolChoice,\n formatToOpenAIToolChoice,\n _convertToOpenAITool,\n} from \"../utils/tools.js\";\nimport { isReasoningModel } from \"../utils/misc.js\";\nimport { BaseChatOpenAICallOptions } from \"./base.js\";\nimport { BaseChatOpenAI } from \"./base.js\";\nimport {\n convertCompletionsDeltaToBaseMessageChunk,\n convertCompletionsMessageToBaseMessage,\n convertMessagesToCompletionsMessageParams,\n} from \"../converters/completions.js\";\n\nexport interface ChatOpenAICompletionsCallOptions\n extends BaseChatOpenAICallOptions {}\n\ntype ChatCompletionsInvocationParams = Omit<\n OpenAIClient.Chat.Completions.ChatCompletionCreateParams,\n \"messages\"\n>;\n\n/**\n * OpenAI Completions API implementation.\n * @internal\n */\nexport class ChatOpenAICompletions<\n CallOptions extends ChatOpenAICompletionsCallOptions = ChatOpenAICompletionsCallOptions\n> extends BaseChatOpenAI<CallOptions> {\n /** @internal */\n override invocationParams(\n options?: this[\"ParsedCallOptions\"],\n extra?: { streaming?: boolean }\n ): ChatCompletionsInvocationParams {\n let strict: boolean | undefined;\n if (options?.strict !== undefined) {\n strict = options.strict;\n } else if (this.supportsStrictToolCalling !== undefined) {\n strict = this.supportsStrictToolCalling;\n }\n\n let streamOptionsConfig = {};\n if (options?.stream_options !== undefined) {\n streamOptionsConfig = { stream_options: options.stream_options };\n } else if (this.streamUsage && (this.streaming || extra?.streaming)) {\n streamOptionsConfig = { stream_options: { include_usage: true } };\n }\n\n const params: Partial<ChatCompletionsInvocationParams> = {\n model: this.model,\n temperature: this.temperature,\n top_p: this.topP,\n frequency_penalty: this.frequencyPenalty,\n presence_penalty: this.presencePenalty,\n logprobs: this.logprobs,\n top_logprobs: this.topLogprobs,\n n: this.n,\n logit_bias: this.logitBias,\n stop: options?.stop ?? this.stopSequences,\n user: this.user,\n // if include_usage is set or streamUsage then stream must be set to true.\n stream: this.streaming,\n functions: options?.functions,\n function_call: options?.function_call,\n tools: options?.tools?.length\n ? options.tools.map((tool) =>\n this._convertChatOpenAIToolToCompletionsTool(tool, { strict })\n )\n : undefined,\n tool_choice: formatToOpenAIToolChoice(\n options?.tool_choice as OpenAIToolChoice\n ),\n response_format: this._getResponseFormat(options?.response_format),\n seed: options?.seed,\n ...streamOptionsConfig,\n parallel_tool_calls: options?.parallel_tool_calls,\n ...(this.audio || options?.audio\n ? { audio: this.audio || options?.audio }\n : {}),\n ...(this.modalities || options?.modalities\n ? { modalities: this.modalities || options?.modalities }\n : {}),\n ...this.modelKwargs,\n prompt_cache_key: options?.promptCacheKey ?? this.promptCacheKey,\n verbosity: options?.verbosity ?? this.verbosity,\n };\n if (options?.prediction !== undefined) {\n params.prediction = options.prediction;\n }\n if (this.service_tier !== undefined) {\n params.service_tier = this.service_tier;\n }\n if (options?.service_tier !== undefined) {\n params.service_tier = options.service_tier;\n }\n const reasoning = this._getReasoningParams(options);\n if (reasoning !== undefined && reasoning.effort !== undefined) {\n params.reasoning_effort = reasoning.effort;\n }\n if (isReasoningModel(params.model)) {\n params.max_completion_tokens =\n this.maxTokens === -1 ? undefined : this.maxTokens;\n } else {\n params.max_tokens = this.maxTokens === -1 ? undefined : this.maxTokens;\n }\n\n return params as ChatCompletionsInvocationParams;\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n const usageMetadata = {} as UsageMetadata;\n const params = this.invocationParams(options);\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n convertMessagesToCompletionsMessageParams({\n messages,\n model: this.model,\n });\n\n if (params.stream) {\n const stream = this._streamResponseChunks(messages, options, runManager);\n const finalChunks: Record<number, ChatGenerationChunk> = {};\n for await (const chunk of stream) {\n chunk.message.response_metadata = {\n ...chunk.generationInfo,\n ...chunk.message.response_metadata,\n };\n const index =\n (chunk.generationInfo as NewTokenIndices)?.completion ?? 0;\n if (finalChunks[index] === undefined) {\n finalChunks[index] = chunk;\n } else {\n finalChunks[index] = finalChunks[index].concat(chunk);\n }\n }\n const generations = Object.entries(finalChunks)\n .sort(([aKey], [bKey]) => parseInt(aKey, 10) - parseInt(bKey, 10))\n .map(([_, value]) => value);\n\n const { functions, function_call } = this.invocationParams(options);\n\n // OpenAI does not support token usage report under stream mode,\n // fallback to estimation.\n\n const promptTokenUsage = await this._getEstimatedTokenCountFromPrompt(\n messages,\n functions,\n function_call\n );\n const completionTokenUsage = await this._getNumTokensFromGenerations(\n generations\n );\n\n usageMetadata.input_tokens = promptTokenUsage;\n usageMetadata.output_tokens = completionTokenUsage;\n usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage;\n return {\n generations,\n llmOutput: {\n estimatedTokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n } else {\n const data = await this.completionWithRetry(\n {\n ...params,\n stream: false,\n messages: messagesMapped,\n },\n {\n signal: options?.signal,\n ...options?.options,\n }\n );\n\n const {\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n total_tokens: totalTokens,\n prompt_tokens_details: promptTokensDetails,\n completion_tokens_details: completionTokensDetails,\n } = data?.usage ?? {};\n\n if (completionTokens) {\n usageMetadata.output_tokens =\n (usageMetadata.output_tokens ?? 0) + completionTokens;\n }\n\n if (promptTokens) {\n usageMetadata.input_tokens =\n (usageMetadata.input_tokens ?? 0) + promptTokens;\n }\n\n if (totalTokens) {\n usageMetadata.total_tokens =\n (usageMetadata.total_tokens ?? 0) + totalTokens;\n }\n\n if (\n promptTokensDetails?.audio_tokens !== null ||\n promptTokensDetails?.cached_tokens !== null\n ) {\n usageMetadata.input_token_details = {\n ...(promptTokensDetails?.audio_tokens !== null && {\n audio: promptTokensDetails?.audio_tokens,\n }),\n ...(promptTokensDetails?.cached_tokens !== null && {\n cache_read: promptTokensDetails?.cached_tokens,\n }),\n };\n }\n\n if (\n completionTokensDetails?.audio_tokens !== null ||\n completionTokensDetails?.reasoning_tokens !== null\n ) {\n usageMetadata.output_token_details = {\n ...(completionTokensDetails?.audio_tokens !== null && {\n audio: completionTokensDetails?.audio_tokens,\n }),\n ...(completionTokensDetails?.reasoning_tokens !== null && {\n reasoning: completionTokensDetails?.reasoning_tokens,\n }),\n };\n }\n\n const generations: ChatGeneration[] = [];\n for (const part of data?.choices ?? []) {\n const text = part.message?.content ?? \"\";\n const generation: ChatGeneration = {\n text,\n message: this._convertCompletionsMessageToBaseMessage(\n part.message ?? { role: \"assistant\" },\n data\n ),\n };\n generation.generationInfo = {\n ...(part.finish_reason ? { finish_reason: part.finish_reason } : {}),\n ...(part.logprobs ? { logprobs: part.logprobs } : {}),\n };\n if (isAIMessage(generation.message)) {\n generation.message.usage_metadata = usageMetadata;\n }\n // Fields are not serialized unless passed to the constructor\n // Doing this ensures all fields on the message are serialized\n generation.message = new AIMessage(\n Object.fromEntries(\n Object.entries(generation.message).filter(\n ([key]) => !key.startsWith(\"lc_\")\n )\n ) as BaseMessageFields\n );\n generations.push(generation);\n }\n return {\n generations,\n llmOutput: {\n tokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n }\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n convertMessagesToCompletionsMessageParams({\n messages,\n model: this.model,\n });\n\n const params = {\n ...this.invocationParams(options, {\n streaming: true,\n }),\n messages: messagesMapped,\n stream: true as const,\n };\n let defaultRole: OpenAIClient.Chat.ChatCompletionRole | undefined;\n\n const streamIterable = await this.completionWithRetry(params, options);\n let usage: OpenAIClient.Completions.CompletionUsage | undefined;\n for await (const data of streamIterable) {\n const choice = data?.choices?.[0];\n if (data.usage) {\n usage = data.usage;\n }\n if (!choice) {\n continue;\n }\n\n const { delta } = choice;\n if (!delta) {\n continue;\n }\n const chunk = this._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n data,\n defaultRole\n );\n defaultRole = delta.role ?? defaultRole;\n const newTokenIndices = {\n prompt: options.promptIndex ?? 0,\n completion: choice.index ?? 0,\n };\n if (typeof chunk.content !== \"string\") {\n console.log(\n \"[WARNING]: Received non-string content from OpenAI. This is currently not supported.\"\n );\n continue;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const generationInfo: Record<string, any> = { ...newTokenIndices };\n if (choice.finish_reason != null) {\n generationInfo.finish_reason = choice.finish_reason;\n // Only include system fingerprint in the last chunk for now\n // to avoid concatenation issues\n generationInfo.system_fingerprint = data.system_fingerprint;\n generationInfo.model_name = data.model;\n generationInfo.service_tier = data.service_tier;\n }\n if (this.logprobs) {\n generationInfo.logprobs = choice.logprobs;\n }\n const generationChunk = new ChatGenerationChunk({\n message: chunk,\n text: chunk.content,\n generationInfo,\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n generationChunk.text ?? \"\",\n newTokenIndices,\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n if (usage) {\n const inputTokenDetails = {\n ...(usage.prompt_tokens_details?.audio_tokens !== null && {\n audio: usage.prompt_tokens_details?.audio_tokens,\n }),\n ...(usage.prompt_tokens_details?.cached_tokens !== null && {\n cache_read: usage.prompt_tokens_details?.cached_tokens,\n }),\n };\n const outputTokenDetails = {\n ...(usage.completion_tokens_details?.audio_tokens !== null && {\n audio: usage.completion_tokens_details?.audio_tokens,\n }),\n ...(usage.completion_tokens_details?.reasoning_tokens !== null && {\n reasoning: usage.completion_tokens_details?.reasoning_tokens,\n }),\n };\n const generationChunk = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: \"\",\n response_metadata: {\n usage: { ...usage },\n },\n usage_metadata: {\n input_tokens: usage.prompt_tokens,\n output_tokens: usage.completion_tokens,\n total_tokens: usage.total_tokens,\n ...(Object.keys(inputTokenDetails).length > 0 && {\n input_token_details: inputTokenDetails,\n }),\n ...(Object.keys(outputTokenDetails).length > 0 && {\n output_token_details: outputTokenDetails,\n }),\n },\n }),\n text: \"\",\n });\n yield generationChunk;\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n }\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>>;\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<OpenAIClient.Chat.Completions.ChatCompletion>;\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParams,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<\n | AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>\n | OpenAIClient.Chat.Completions.ChatCompletion\n > {\n const clientOptions = this._getClientOptions(requestOptions);\n const isParseableFormat =\n request.response_format && request.response_format.type === \"json_schema\";\n return this.caller.call(async () => {\n try {\n if (isParseableFormat && !request.stream) {\n return await this.client.chat.completions.parse(\n request,\n clientOptions\n );\n } else {\n return await this.client.chat.completions.create(\n request,\n clientOptions\n );\n }\n } catch (e) {\n const error = wrapOpenAIClientError(e);\n throw error;\n }\n });\n }\n\n /**\n * @deprecated\n * This function was hoisted into a publicly accessible function from a\n * different export, but to maintain backwards compatibility with chat models\n * that depend on ChatOpenAICompletions, we'll keep it here as an overridable\n * method. This will be removed in a future release\n */\n protected _convertCompletionsDeltaToBaseMessageChunk(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n delta: Record<string, any>,\n rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk,\n defaultRole?: OpenAIClient.Chat.ChatCompletionRole\n ): BaseMessageChunk {\n return convertCompletionsDeltaToBaseMessageChunk({\n delta,\n rawResponse,\n includeRawResponse: this.__includeRawResponse,\n defaultRole,\n });\n }\n\n /**\n * @deprecated\n * This function was hoisted into a publicly accessible function from a\n * different export, but to maintain backwards compatibility with chat models\n * that depend on ChatOpenAICompletions, we'll keep it here as an overridable\n * method. This will be removed in a future release\n */\n protected _convertCompletionsMessageToBaseMessage(\n message: OpenAIClient.ChatCompletionMessage,\n rawResponse: OpenAIClient.ChatCompletion\n ): BaseMessage {\n return convertCompletionsMessageToBaseMessage({\n message,\n rawResponse,\n includeRawResponse: this.__includeRawResponse,\n });\n }\n}\n"],"mappings":"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"}
@@ -1,9 +1,8 @@
1
1
  import { BaseChatOpenAI, BaseChatOpenAICallOptions } from "./base.cjs";
2
2
  import { OpenAI as OpenAI$1 } from "openai";
3
- import * as _langchain_core_messages1 from "@langchain/core/messages";
4
- import { AIMessageChunk, BaseMessage, ChatMessageChunk, FunctionMessageChunk, HumanMessageChunk, SystemMessageChunk, ToolMessageChunk } from "@langchain/core/messages";
5
- import { ChatGenerationChunk, ChatResult } from "@langchain/core/outputs";
6
3
  import { CallbackManagerForLLMRun } from "@langchain/core/callbacks/manager";
4
+ import { BaseMessage, BaseMessageChunk } from "@langchain/core/messages";
5
+ import { ChatGenerationChunk, ChatResult } from "@langchain/core/outputs";
7
6
 
8
7
  //#region src/chat_models/completions.d.ts
9
8
  interface ChatOpenAICompletionsCallOptions extends BaseChatOpenAICallOptions {}
@@ -21,12 +20,24 @@ declare class ChatOpenAICompletions<CallOptions extends ChatOpenAICompletionsCal
21
20
  _streamResponseChunks(messages: BaseMessage[], options: this["ParsedCallOptions"], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;
22
21
  completionWithRetry(request: OpenAI$1.Chat.ChatCompletionCreateParamsStreaming, requestOptions?: OpenAI$1.RequestOptions): Promise<AsyncIterable<OpenAI$1.Chat.Completions.ChatCompletionChunk>>;
23
22
  completionWithRetry(request: OpenAI$1.Chat.ChatCompletionCreateParamsNonStreaming, requestOptions?: OpenAI$1.RequestOptions): Promise<OpenAI$1.Chat.Completions.ChatCompletion>;
24
- /** @internal */
25
- protected _convertCompletionsMessageToBaseMessage(message: OpenAI$1.Chat.Completions.ChatCompletionMessage, rawResponse: OpenAI$1.Chat.Completions.ChatCompletion): BaseMessage;
26
- /** @internal */
23
+ /**
24
+ * @deprecated
25
+ * This function was hoisted into a publicly accessible function from a
26
+ * different export, but to maintain backwards compatibility with chat models
27
+ * that depend on ChatOpenAICompletions, we'll keep it here as an overridable
28
+ * method. This will be removed in a future release
29
+ */
27
30
  protected _convertCompletionsDeltaToBaseMessageChunk(
28
31
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
- delta: Record<string, any>, rawResponse: OpenAI$1.Chat.Completions.ChatCompletionChunk, defaultRole?: OpenAI$1.Chat.ChatCompletionRole): AIMessageChunk<_langchain_core_messages1.MessageStructure> | ChatMessageChunk<_langchain_core_messages1.MessageStructure> | FunctionMessageChunk<_langchain_core_messages1.MessageStructure> | HumanMessageChunk<_langchain_core_messages1.MessageStructure> | SystemMessageChunk<_langchain_core_messages1.MessageStructure> | ToolMessageChunk<_langchain_core_messages1.MessageStructure>;
32
+ delta: Record<string, any>, rawResponse: OpenAI$1.Chat.Completions.ChatCompletionChunk, defaultRole?: OpenAI$1.Chat.ChatCompletionRole): BaseMessageChunk;
33
+ /**
34
+ * @deprecated
35
+ * This function was hoisted into a publicly accessible function from a
36
+ * different export, but to maintain backwards compatibility with chat models
37
+ * that depend on ChatOpenAICompletions, we'll keep it here as an overridable
38
+ * method. This will be removed in a future release
39
+ */
40
+ protected _convertCompletionsMessageToBaseMessage(message: OpenAI$1.ChatCompletionMessage, rawResponse: OpenAI$1.ChatCompletion): BaseMessage;
30
41
  }
31
42
  //#endregion
32
43
  export { ChatOpenAICompletions, ChatOpenAICompletionsCallOptions };
@@ -1 +1 @@
1
- {"version":3,"file":"completions.d.cts","names":["OpenAI","OpenAIClient","CallbackManagerForLLMRun","AIMessageChunk","BaseMessage","ChatMessageChunk","FunctionMessageChunk","HumanMessageChunk","SystemMessageChunk","ToolMessageChunk","ChatGenerationChunk","ChatResult","BaseChatOpenAICallOptions","BaseChatOpenAI","ChatOpenAICompletionsCallOptions","ChatCompletionsInvocationParams","Chat","Completions","ChatCompletionCreateParams","Omit","ChatOpenAICompletions","CallOptions","Promise","AsyncGenerator","ChatCompletionCreateParamsStreaming","RequestOptions","ChatCompletionChunk","AsyncIterable","ChatCompletionCreateParamsNonStreaming","ChatCompletion","ChatCompletionMessage","Record","ChatCompletionRole","_langchain_core_messages1","MessageStructure"],"sources":["../../src/chat_models/completions.d.ts"],"sourcesContent":["import { OpenAI as OpenAIClient } from \"openai\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport { AIMessageChunk, type BaseMessage, ChatMessageChunk, FunctionMessageChunk, HumanMessageChunk, SystemMessageChunk, ToolMessageChunk } from \"@langchain/core/messages\";\nimport { ChatGenerationChunk, type ChatResult } from \"@langchain/core/outputs\";\nimport { BaseChatOpenAICallOptions } from \"./base.js\";\nimport { BaseChatOpenAI } from \"./base.js\";\nexport interface ChatOpenAICompletionsCallOptions extends BaseChatOpenAICallOptions {\n}\ntype ChatCompletionsInvocationParams = Omit<OpenAIClient.Chat.Completions.ChatCompletionCreateParams, \"messages\">;\n/**\n * OpenAI Completions API implementation.\n * @internal\n */\nexport declare class ChatOpenAICompletions<CallOptions extends ChatOpenAICompletionsCallOptions = ChatOpenAICompletionsCallOptions> extends BaseChatOpenAI<CallOptions> {\n /** @internal */\n invocationParams(options?: this[\"ParsedCallOptions\"], extra?: {\n streaming?: boolean;\n }): ChatCompletionsInvocationParams;\n _generate(messages: BaseMessage[], options: this[\"ParsedCallOptions\"], runManager?: CallbackManagerForLLMRun): Promise<ChatResult>;\n _streamResponseChunks(messages: BaseMessage[], options: this[\"ParsedCallOptions\"], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;\n completionWithRetry(request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming, requestOptions?: OpenAIClient.RequestOptions): Promise<AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>>;\n completionWithRetry(request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming, requestOptions?: OpenAIClient.RequestOptions): Promise<OpenAIClient.Chat.Completions.ChatCompletion>;\n /** @internal */\n protected _convertCompletionsMessageToBaseMessage(message: OpenAIClient.Chat.Completions.ChatCompletionMessage, rawResponse: OpenAIClient.Chat.Completions.ChatCompletion): BaseMessage;\n /** @internal */\n protected _convertCompletionsDeltaToBaseMessageChunk(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n delta: Record<string, any>, rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk, defaultRole?: OpenAIClient.Chat.ChatCompletionRole): AIMessageChunk<import(\"@langchain/core/messages\").MessageStructure> | ChatMessageChunk<import(\"@langchain/core/messages\").MessageStructure> | FunctionMessageChunk<import(\"@langchain/core/messages\").MessageStructure> | HumanMessageChunk<import(\"@langchain/core/messages\").MessageStructure> | SystemMessageChunk<import(\"@langchain/core/messages\").MessageStructure> | ToolMessageChunk<import(\"@langchain/core/messages\").MessageStructure>;\n}\nexport {};\n"],"mappings":";;;;;;;;UAMiBc,gCAAAA,SAAyCF;AAA1D,KAEKG,+BAAAA,GAAkCI,IAFU,CAELlB,QAAAA,CAAae,IAAAA,CAAKC,WAAAA,CAAYC,0BAFS,EAAA,UAAA,CAAA;AAClF;;;;AAC0C,cAKtBE,qBALsB,CAAA,oBAKoBN,gCALpB,GAKuDA,gCALvD,CAAA,SAKiGD,cALjG,CAKgHQ,WALhH,CAAA,CAAA;EAKtBD;EAAqB,gBAAA,CAAA,OAAA,CAAA,EAAA,IAAA,CAAA,mBAAA,CAAA,EAAA,KAAqD,CAArD,EAAA;IAAqBN,SAAAA,CAAAA,EAAAA,OAAAA;EAAgC,CAAA,CAAA,EAIvFC,+BAJ0FD;EAAgC,SAAyBO,CAAAA,QAAAA,EAKnIjB,WALmIiB,EAAAA,EAAAA,OAAAA,EAAAA,IAAAA,CAAAA,mBAAAA,CAAAA,EAAAA,UAAAA,CAAAA,EAKnEnB,wBALmEmB,CAAAA,EAKxCC,OALwCD,CAKhCV,UALgCU,CAAAA;EAAW,qBAI9JN,CAAAA,QAAAA,EAE4BX,WAF5BW,EAAAA,EAAAA,OAAAA,EAAAA,IAAAA,CAAAA,mBAAAA,CAAAA,EAAAA,UAAAA,CAAAA,EAE4Fb,wBAF5Fa,CAAAA,EAEuHQ,cAFvHR,CAEsIL,mBAFtIK,CAAAA;EAA+B,mBACfX,CAAAA,OAAAA,EAESH,QAAAA,CAAae,IAAAA,CAAKQ,mCAF3BpB,EAAAA,cAAAA,CAAAA,EAEiFH,QAAAA,CAAawB,cAF9FrB,CAAAA,EAE+GkB,OAF/GlB,CAEuHuB,aAFvHvB,CAEqIH,QAAAA,CAAae,IAAAA,CAAKC,WAAAA,CAAYS,mBAFnKtB,CAAAA,CAAAA;EAAW,mBAAqDF,CAAAA,OAAAA,EAGvDD,QAAAA,CAAae,IAAAA,CAAKY,sCAHqC1B,EAAAA,cAAAA,CAAAA,EAGoBD,QAAAA,CAAawB,cAHjCvB,CAAAA,EAGkDoB,OAHlDpB,CAG0DD,QAAAA,CAAae,IAAAA,CAAKC,WAAAA,CAAYY,cAHxF3B,CAAAA;EAAwB;EAAqB,UAAlBoB,uCAAAA,CAAAA,OAAAA,EAKpDrB,QAAAA,CAAae,IAAAA,CAAKC,WAAAA,CAAYa,qBALsBR,EAAAA,WAAAA,EAKcrB,QAAAA,CAAae,IAAAA,CAAKC,WAAAA,CAAYY,cAL5CP,CAAAA,EAK6DlB,WAL7DkB;EAAO;EAC3E,UAAqDpB,0CAAAA;EAAwB;EAAqC,KAAlCqB,EAQpHQ,MARoHR,CAAAA,MAAAA,EAAAA,GAAAA,CAAAA,EAAAA,WAAAA,EAQlFtB,QAAAA,CAAae,IAAAA,CAAKC,WAAAA,CAAYS,mBARoDH,EAAAA,WAAAA,CAAAA,EAQjBtB,QAAAA,CAAae,IAAAA,CAAKgB,kBARDT,CAAAA,EAQsBpB,cARtBoB,CAQmBU,yBAAAA,CAAqDC,gBAAAA,CARxEX,GAQ4FlB,gBAR5FkB,CAQoCU,yBAAAA,CAA4GC,gBAAAA,CARhJX,GAQoKjB,oBARpKiB,CAQ4GU,yBAAAA,CAAgHC,gBAAAA,CAR5NX,GAQgPhB,iBARhPgB,CAQwLU,yBAAAA,CAA6GC,gBAAAA,CARrSX,GAQyTf,kBARzTe,CAQiQU,yBAAAA,CAA8GC,gBAAAA,CAR/WX,GAQmYd,gBARnYc,CAQ2UU,yBAAAA,CAA4GC,gBAAAA,CARvbX"}
1
+ {"version":3,"file":"completions.d.cts","names":["OpenAI","OpenAIClient","CallbackManagerForLLMRun","BaseMessage","BaseMessageChunk","ChatGenerationChunk","ChatResult","BaseChatOpenAICallOptions","BaseChatOpenAI","ChatOpenAICompletionsCallOptions","ChatCompletionsInvocationParams","Chat","Completions","ChatCompletionCreateParams","Omit","ChatOpenAICompletions","CallOptions","Promise","AsyncGenerator","ChatCompletionCreateParamsStreaming","RequestOptions","ChatCompletionChunk","AsyncIterable","ChatCompletionCreateParamsNonStreaming","ChatCompletion","Record","ChatCompletionRole","ChatCompletionMessage"],"sources":["../../src/chat_models/completions.d.ts"],"sourcesContent":["import { OpenAI as OpenAIClient } from \"openai\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport { type BaseMessage, BaseMessageChunk } from \"@langchain/core/messages\";\nimport { ChatGenerationChunk, type ChatResult } from \"@langchain/core/outputs\";\nimport { BaseChatOpenAICallOptions } from \"./base.js\";\nimport { BaseChatOpenAI } from \"./base.js\";\nexport interface ChatOpenAICompletionsCallOptions extends BaseChatOpenAICallOptions {\n}\ntype ChatCompletionsInvocationParams = Omit<OpenAIClient.Chat.Completions.ChatCompletionCreateParams, \"messages\">;\n/**\n * OpenAI Completions API implementation.\n * @internal\n */\nexport declare class ChatOpenAICompletions<CallOptions extends ChatOpenAICompletionsCallOptions = ChatOpenAICompletionsCallOptions> extends BaseChatOpenAI<CallOptions> {\n /** @internal */\n invocationParams(options?: this[\"ParsedCallOptions\"], extra?: {\n streaming?: boolean;\n }): ChatCompletionsInvocationParams;\n _generate(messages: BaseMessage[], options: this[\"ParsedCallOptions\"], runManager?: CallbackManagerForLLMRun): Promise<ChatResult>;\n _streamResponseChunks(messages: BaseMessage[], options: this[\"ParsedCallOptions\"], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;\n completionWithRetry(request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming, requestOptions?: OpenAIClient.RequestOptions): Promise<AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>>;\n completionWithRetry(request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming, requestOptions?: OpenAIClient.RequestOptions): Promise<OpenAIClient.Chat.Completions.ChatCompletion>;\n /**\n * @deprecated\n * This function was hoisted into a publicly accessible function from a\n * different export, but to maintain backwards compatibility with chat models\n * that depend on ChatOpenAICompletions, we'll keep it here as an overridable\n * method. This will be removed in a future release\n */\n protected _convertCompletionsDeltaToBaseMessageChunk(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n delta: Record<string, any>, rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk, defaultRole?: OpenAIClient.Chat.ChatCompletionRole): BaseMessageChunk;\n /**\n * @deprecated\n * This function was hoisted into a publicly accessible function from a\n * different export, but to maintain backwards compatibility with chat models\n * that depend on ChatOpenAICompletions, we'll keep it here as an overridable\n * method. This will be removed in a future release\n */\n protected _convertCompletionsMessageToBaseMessage(message: OpenAIClient.ChatCompletionMessage, rawResponse: OpenAIClient.ChatCompletion): BaseMessage;\n}\nexport {};\n"],"mappings":";;;;;;;UAMiBS,gCAAAA,SAAyCF,2BAA1D;AACC,KACIG,+BAAAA,GAAkCI,IAAH,CAAQb,QAAAA,CAAaU,IAAAA,CAAKC,WAAAA,CAAYC,0BAAtC,EAAA,UAAA,CAAA;;;;AAAO;AAKtBE,cAAAA,qBAAqB,CAAA,oBAAqBN,gCAArB,GAAwDA,gCAAxD,CAAA,SAAkGD,cAAlG,CAAiHQ,WAAjH,CAAA,CAAA;EAAA;EAAA,gBAAqBP,CAAAA,OAAAA,CAAAA,EAAAA,IAAAA,CAAAA,mBAAAA,CAAAA,EAAAA,KAAmE,CAAnEA,EAAAA;IAAmCA,SAAAA,CAAAA,EAAAA,OAAAA;EAAgC,CAAA,CAAA,EAI1HC,+BAJmJM;EAAW,SAI9JN,CAAAA,QAAAA,EACgBP,WADhBO,EAAAA,EAAAA,OAAAA,EAAAA,IAAAA,CAAAA,mBAAAA,CAAAA,EAAAA,UAAAA,CAAAA,EACgFR,wBADhFQ,CAAAA,EAC2GO,OAD3GP,CACmHJ,UADnHI,CAAAA;EAA+B,qBACfP,CAAAA,QAAAA,EACYA,WADZA,EAAAA,EAAAA,OAAAA,EAAAA,IAAAA,CAAAA,mBAAAA,CAAAA,EAAAA,UAAAA,CAAAA,EAC4ED,wBAD5EC,CAAAA,EACuGe,cADvGf,CACsHE,mBADtHF,CAAAA;EAAW,mBAAqDD,CAAAA,OAAAA,EAEvDD,QAAAA,CAAaU,IAAAA,CAAKQ,mCAFqCjB,EAAAA,cAAAA,CAAAA,EAEiBD,QAAAA,CAAamB,cAF9BlB,CAAAA,EAE+Ce,OAF/Cf,CAEuDoB,aAFvDpB,CAEqED,QAAAA,CAAaU,IAAAA,CAAKC,WAAAA,CAAYS,mBAFnGnB,CAAAA,CAAAA;EAAwB,mBAAWI,CAAAA,OAAAA,EAG1FL,QAAAA,CAAaU,IAAAA,CAAKY,sCAHwEjB,EAAAA,cAAAA,CAAAA,EAGfL,QAAAA,CAAamB,cAHEd,CAAAA,EAGeW,OAHfX,CAGuBL,QAAAA,CAAaU,IAAAA,CAAKC,WAAAA,CAAYY,cAHrDlB,CAAAA;EAAU;;;;;;;EAED,UAAyBL,0CAA8BoB;EAAmB;EAAlD,KAArBJ,EAW5HQ,MAX4HR,CAAAA,MAAAA,EAAAA,GAAAA,CAAAA,EAAAA,WAAAA,EAW1FhB,QAAAA,CAAaU,IAAAA,CAAKC,WAAAA,CAAYS,mBAX4DJ,EAAAA,WAAAA,CAAAA,EAWzBhB,QAAAA,CAAaU,IAAAA,CAAKe,kBAXOT,CAAAA,EAWcb,gBAXda;EAAO;;;;;;;EAWI,UAAGb,uCAAAA,CAAAA,OAAAA,EAQtFH,QAAAA,CAAa0B,qBARyEvB,EAAAA,WAAAA,EAQrCH,QAAAA,CAAauB,cARwBpB,CAAAA,EAQPD,WAROC"}
@@ -1,7 +1,6 @@
1
1
  import { BaseChatOpenAI, BaseChatOpenAICallOptions } from "./base.js";
2
2
  import { OpenAI as OpenAI$1 } from "openai";
3
- import * as _langchain_core_messages1 from "@langchain/core/messages";
4
- import { AIMessageChunk, BaseMessage, ChatMessageChunk, FunctionMessageChunk, HumanMessageChunk, SystemMessageChunk, ToolMessageChunk } from "@langchain/core/messages";
3
+ import { BaseMessage, BaseMessageChunk } from "@langchain/core/messages";
5
4
  import { ChatGenerationChunk, ChatResult } from "@langchain/core/outputs";
6
5
  import { CallbackManagerForLLMRun } from "@langchain/core/callbacks/manager";
7
6
 
@@ -21,12 +20,24 @@ declare class ChatOpenAICompletions<CallOptions extends ChatOpenAICompletionsCal
21
20
  _streamResponseChunks(messages: BaseMessage[], options: this["ParsedCallOptions"], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;
22
21
  completionWithRetry(request: OpenAI$1.Chat.ChatCompletionCreateParamsStreaming, requestOptions?: OpenAI$1.RequestOptions): Promise<AsyncIterable<OpenAI$1.Chat.Completions.ChatCompletionChunk>>;
23
22
  completionWithRetry(request: OpenAI$1.Chat.ChatCompletionCreateParamsNonStreaming, requestOptions?: OpenAI$1.RequestOptions): Promise<OpenAI$1.Chat.Completions.ChatCompletion>;
24
- /** @internal */
25
- protected _convertCompletionsMessageToBaseMessage(message: OpenAI$1.Chat.Completions.ChatCompletionMessage, rawResponse: OpenAI$1.Chat.Completions.ChatCompletion): BaseMessage;
26
- /** @internal */
23
+ /**
24
+ * @deprecated
25
+ * This function was hoisted into a publicly accessible function from a
26
+ * different export, but to maintain backwards compatibility with chat models
27
+ * that depend on ChatOpenAICompletions, we'll keep it here as an overridable
28
+ * method. This will be removed in a future release
29
+ */
27
30
  protected _convertCompletionsDeltaToBaseMessageChunk(
28
31
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
- delta: Record<string, any>, rawResponse: OpenAI$1.Chat.Completions.ChatCompletionChunk, defaultRole?: OpenAI$1.Chat.ChatCompletionRole): AIMessageChunk<_langchain_core_messages1.MessageStructure> | ChatMessageChunk<_langchain_core_messages1.MessageStructure> | FunctionMessageChunk<_langchain_core_messages1.MessageStructure> | HumanMessageChunk<_langchain_core_messages1.MessageStructure> | SystemMessageChunk<_langchain_core_messages1.MessageStructure> | ToolMessageChunk<_langchain_core_messages1.MessageStructure>;
32
+ delta: Record<string, any>, rawResponse: OpenAI$1.Chat.Completions.ChatCompletionChunk, defaultRole?: OpenAI$1.Chat.ChatCompletionRole): BaseMessageChunk;
33
+ /**
34
+ * @deprecated
35
+ * This function was hoisted into a publicly accessible function from a
36
+ * different export, but to maintain backwards compatibility with chat models
37
+ * that depend on ChatOpenAICompletions, we'll keep it here as an overridable
38
+ * method. This will be removed in a future release
39
+ */
40
+ protected _convertCompletionsMessageToBaseMessage(message: OpenAI$1.ChatCompletionMessage, rawResponse: OpenAI$1.ChatCompletion): BaseMessage;
30
41
  }
31
42
  //#endregion
32
43
  export { ChatOpenAICompletions, ChatOpenAICompletionsCallOptions };
@@ -1 +1 @@
1
- {"version":3,"file":"completions.d.ts","names":["OpenAI","OpenAIClient","CallbackManagerForLLMRun","AIMessageChunk","BaseMessage","ChatMessageChunk","FunctionMessageChunk","HumanMessageChunk","SystemMessageChunk","ToolMessageChunk","ChatGenerationChunk","ChatResult","BaseChatOpenAICallOptions","BaseChatOpenAI","ChatOpenAICompletionsCallOptions","ChatCompletionsInvocationParams","Chat","Completions","ChatCompletionCreateParams","Omit","ChatOpenAICompletions","CallOptions","Promise","AsyncGenerator","ChatCompletionCreateParamsStreaming","RequestOptions","ChatCompletionChunk","AsyncIterable","ChatCompletionCreateParamsNonStreaming","ChatCompletion","ChatCompletionMessage","Record","ChatCompletionRole","_langchain_core_messages1","MessageStructure"],"sources":["../../src/chat_models/completions.d.ts"],"sourcesContent":["import { OpenAI as OpenAIClient } from \"openai\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport { AIMessageChunk, type BaseMessage, ChatMessageChunk, FunctionMessageChunk, HumanMessageChunk, SystemMessageChunk, ToolMessageChunk } from \"@langchain/core/messages\";\nimport { ChatGenerationChunk, type ChatResult } from \"@langchain/core/outputs\";\nimport { BaseChatOpenAICallOptions } from \"./base.js\";\nimport { BaseChatOpenAI } from \"./base.js\";\nexport interface ChatOpenAICompletionsCallOptions extends BaseChatOpenAICallOptions {\n}\ntype ChatCompletionsInvocationParams = Omit<OpenAIClient.Chat.Completions.ChatCompletionCreateParams, \"messages\">;\n/**\n * OpenAI Completions API implementation.\n * @internal\n */\nexport declare class ChatOpenAICompletions<CallOptions extends ChatOpenAICompletionsCallOptions = ChatOpenAICompletionsCallOptions> extends BaseChatOpenAI<CallOptions> {\n /** @internal */\n invocationParams(options?: this[\"ParsedCallOptions\"], extra?: {\n streaming?: boolean;\n }): ChatCompletionsInvocationParams;\n _generate(messages: BaseMessage[], options: this[\"ParsedCallOptions\"], runManager?: CallbackManagerForLLMRun): Promise<ChatResult>;\n _streamResponseChunks(messages: BaseMessage[], options: this[\"ParsedCallOptions\"], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;\n completionWithRetry(request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming, requestOptions?: OpenAIClient.RequestOptions): Promise<AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>>;\n completionWithRetry(request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming, requestOptions?: OpenAIClient.RequestOptions): Promise<OpenAIClient.Chat.Completions.ChatCompletion>;\n /** @internal */\n protected _convertCompletionsMessageToBaseMessage(message: OpenAIClient.Chat.Completions.ChatCompletionMessage, rawResponse: OpenAIClient.Chat.Completions.ChatCompletion): BaseMessage;\n /** @internal */\n protected _convertCompletionsDeltaToBaseMessageChunk(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n delta: Record<string, any>, rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk, defaultRole?: OpenAIClient.Chat.ChatCompletionRole): AIMessageChunk<import(\"@langchain/core/messages\").MessageStructure> | ChatMessageChunk<import(\"@langchain/core/messages\").MessageStructure> | FunctionMessageChunk<import(\"@langchain/core/messages\").MessageStructure> | HumanMessageChunk<import(\"@langchain/core/messages\").MessageStructure> | SystemMessageChunk<import(\"@langchain/core/messages\").MessageStructure> | ToolMessageChunk<import(\"@langchain/core/messages\").MessageStructure>;\n}\nexport {};\n"],"mappings":";;;;;;;;UAMiBc,gCAAAA,SAAyCF;AAA1D,KAEKG,+BAAAA,GAAkCI,IAFU,CAELlB,QAAAA,CAAae,IAAAA,CAAKC,WAAAA,CAAYC,0BAFS,EAAA,UAAA,CAAA;AAClF;;;;AAC0C,cAKtBE,qBALsB,CAAA,oBAKoBN,gCALpB,GAKuDA,gCALvD,CAAA,SAKiGD,cALjG,CAKgHQ,WALhH,CAAA,CAAA;EAKtBD;EAAqB,gBAAA,CAAA,OAAA,CAAA,EAAA,IAAA,CAAA,mBAAA,CAAA,EAAA,KAAqD,CAArD,EAAA;IAAqBN,SAAAA,CAAAA,EAAAA,OAAAA;EAAgC,CAAA,CAAA,EAIvFC,+BAJ0FD;EAAgC,SAAyBO,CAAAA,QAAAA,EAKnIjB,WALmIiB,EAAAA,EAAAA,OAAAA,EAAAA,IAAAA,CAAAA,mBAAAA,CAAAA,EAAAA,UAAAA,CAAAA,EAKnEnB,wBALmEmB,CAAAA,EAKxCC,OALwCD,CAKhCV,UALgCU,CAAAA;EAAW,qBAI9JN,CAAAA,QAAAA,EAE4BX,WAF5BW,EAAAA,EAAAA,OAAAA,EAAAA,IAAAA,CAAAA,mBAAAA,CAAAA,EAAAA,UAAAA,CAAAA,EAE4Fb,wBAF5Fa,CAAAA,EAEuHQ,cAFvHR,CAEsIL,mBAFtIK,CAAAA;EAA+B,mBACfX,CAAAA,OAAAA,EAESH,QAAAA,CAAae,IAAAA,CAAKQ,mCAF3BpB,EAAAA,cAAAA,CAAAA,EAEiFH,QAAAA,CAAawB,cAF9FrB,CAAAA,EAE+GkB,OAF/GlB,CAEuHuB,aAFvHvB,CAEqIH,QAAAA,CAAae,IAAAA,CAAKC,WAAAA,CAAYS,mBAFnKtB,CAAAA,CAAAA;EAAW,mBAAqDF,CAAAA,OAAAA,EAGvDD,QAAAA,CAAae,IAAAA,CAAKY,sCAHqC1B,EAAAA,cAAAA,CAAAA,EAGoBD,QAAAA,CAAawB,cAHjCvB,CAAAA,EAGkDoB,OAHlDpB,CAG0DD,QAAAA,CAAae,IAAAA,CAAKC,WAAAA,CAAYY,cAHxF3B,CAAAA;EAAwB;EAAqB,UAAlBoB,uCAAAA,CAAAA,OAAAA,EAKpDrB,QAAAA,CAAae,IAAAA,CAAKC,WAAAA,CAAYa,qBALsBR,EAAAA,WAAAA,EAKcrB,QAAAA,CAAae,IAAAA,CAAKC,WAAAA,CAAYY,cAL5CP,CAAAA,EAK6DlB,WAL7DkB;EAAO;EAC3E,UAAqDpB,0CAAAA;EAAwB;EAAqC,KAAlCqB,EAQpHQ,MARoHR,CAAAA,MAAAA,EAAAA,GAAAA,CAAAA,EAAAA,WAAAA,EAQlFtB,QAAAA,CAAae,IAAAA,CAAKC,WAAAA,CAAYS,mBARoDH,EAAAA,WAAAA,CAAAA,EAQjBtB,QAAAA,CAAae,IAAAA,CAAKgB,kBARDT,CAAAA,EAQsBpB,cARtBoB,CAQmBU,yBAAAA,CAAqDC,gBAAAA,CARxEX,GAQ4FlB,gBAR5FkB,CAQoCU,yBAAAA,CAA4GC,gBAAAA,CARhJX,GAQoKjB,oBARpKiB,CAQ4GU,yBAAAA,CAAgHC,gBAAAA,CAR5NX,GAQgPhB,iBARhPgB,CAQwLU,yBAAAA,CAA6GC,gBAAAA,CARrSX,GAQyTf,kBARzTe,CAQiQU,yBAAAA,CAA8GC,gBAAAA,CAR/WX,GAQmYd,gBARnYc,CAQ2UU,yBAAAA,CAA4GC,gBAAAA,CARvbX"}
1
+ {"version":3,"file":"completions.d.ts","names":["OpenAI","OpenAIClient","CallbackManagerForLLMRun","BaseMessage","BaseMessageChunk","ChatGenerationChunk","ChatResult","BaseChatOpenAICallOptions","BaseChatOpenAI","ChatOpenAICompletionsCallOptions","ChatCompletionsInvocationParams","Chat","Completions","ChatCompletionCreateParams","Omit","ChatOpenAICompletions","CallOptions","Promise","AsyncGenerator","ChatCompletionCreateParamsStreaming","RequestOptions","ChatCompletionChunk","AsyncIterable","ChatCompletionCreateParamsNonStreaming","ChatCompletion","Record","ChatCompletionRole","ChatCompletionMessage"],"sources":["../../src/chat_models/completions.d.ts"],"sourcesContent":["import { OpenAI as OpenAIClient } from \"openai\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport { type BaseMessage, BaseMessageChunk } from \"@langchain/core/messages\";\nimport { ChatGenerationChunk, type ChatResult } from \"@langchain/core/outputs\";\nimport { BaseChatOpenAICallOptions } from \"./base.js\";\nimport { BaseChatOpenAI } from \"./base.js\";\nexport interface ChatOpenAICompletionsCallOptions extends BaseChatOpenAICallOptions {\n}\ntype ChatCompletionsInvocationParams = Omit<OpenAIClient.Chat.Completions.ChatCompletionCreateParams, \"messages\">;\n/**\n * OpenAI Completions API implementation.\n * @internal\n */\nexport declare class ChatOpenAICompletions<CallOptions extends ChatOpenAICompletionsCallOptions = ChatOpenAICompletionsCallOptions> extends BaseChatOpenAI<CallOptions> {\n /** @internal */\n invocationParams(options?: this[\"ParsedCallOptions\"], extra?: {\n streaming?: boolean;\n }): ChatCompletionsInvocationParams;\n _generate(messages: BaseMessage[], options: this[\"ParsedCallOptions\"], runManager?: CallbackManagerForLLMRun): Promise<ChatResult>;\n _streamResponseChunks(messages: BaseMessage[], options: this[\"ParsedCallOptions\"], runManager?: CallbackManagerForLLMRun): AsyncGenerator<ChatGenerationChunk>;\n completionWithRetry(request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming, requestOptions?: OpenAIClient.RequestOptions): Promise<AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>>;\n completionWithRetry(request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming, requestOptions?: OpenAIClient.RequestOptions): Promise<OpenAIClient.Chat.Completions.ChatCompletion>;\n /**\n * @deprecated\n * This function was hoisted into a publicly accessible function from a\n * different export, but to maintain backwards compatibility with chat models\n * that depend on ChatOpenAICompletions, we'll keep it here as an overridable\n * method. This will be removed in a future release\n */\n protected _convertCompletionsDeltaToBaseMessageChunk(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n delta: Record<string, any>, rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk, defaultRole?: OpenAIClient.Chat.ChatCompletionRole): BaseMessageChunk;\n /**\n * @deprecated\n * This function was hoisted into a publicly accessible function from a\n * different export, but to maintain backwards compatibility with chat models\n * that depend on ChatOpenAICompletions, we'll keep it here as an overridable\n * method. This will be removed in a future release\n */\n protected _convertCompletionsMessageToBaseMessage(message: OpenAIClient.ChatCompletionMessage, rawResponse: OpenAIClient.ChatCompletion): BaseMessage;\n}\nexport {};\n"],"mappings":";;;;;;;UAMiBS,gCAAAA,SAAyCF,2BAA1D;AACC,KACIG,+BAAAA,GAAkCI,IAAH,CAAQb,QAAAA,CAAaU,IAAAA,CAAKC,WAAAA,CAAYC,0BAAtC,EAAA,UAAA,CAAA;;;;AAAO;AAKtBE,cAAAA,qBAAqB,CAAA,oBAAqBN,gCAArB,GAAwDA,gCAAxD,CAAA,SAAkGD,cAAlG,CAAiHQ,WAAjH,CAAA,CAAA;EAAA;EAAA,gBAAqBP,CAAAA,OAAAA,CAAAA,EAAAA,IAAAA,CAAAA,mBAAAA,CAAAA,EAAAA,KAAmE,CAAnEA,EAAAA;IAAmCA,SAAAA,CAAAA,EAAAA,OAAAA;EAAgC,CAAA,CAAA,EAI1HC,+BAJmJM;EAAW,SAI9JN,CAAAA,QAAAA,EACgBP,WADhBO,EAAAA,EAAAA,OAAAA,EAAAA,IAAAA,CAAAA,mBAAAA,CAAAA,EAAAA,UAAAA,CAAAA,EACgFR,wBADhFQ,CAAAA,EAC2GO,OAD3GP,CACmHJ,UADnHI,CAAAA;EAA+B,qBACfP,CAAAA,QAAAA,EACYA,WADZA,EAAAA,EAAAA,OAAAA,EAAAA,IAAAA,CAAAA,mBAAAA,CAAAA,EAAAA,UAAAA,CAAAA,EAC4ED,wBAD5EC,CAAAA,EACuGe,cADvGf,CACsHE,mBADtHF,CAAAA;EAAW,mBAAqDD,CAAAA,OAAAA,EAEvDD,QAAAA,CAAaU,IAAAA,CAAKQ,mCAFqCjB,EAAAA,cAAAA,CAAAA,EAEiBD,QAAAA,CAAamB,cAF9BlB,CAAAA,EAE+Ce,OAF/Cf,CAEuDoB,aAFvDpB,CAEqED,QAAAA,CAAaU,IAAAA,CAAKC,WAAAA,CAAYS,mBAFnGnB,CAAAA,CAAAA;EAAwB,mBAAWI,CAAAA,OAAAA,EAG1FL,QAAAA,CAAaU,IAAAA,CAAKY,sCAHwEjB,EAAAA,cAAAA,CAAAA,EAGfL,QAAAA,CAAamB,cAHEd,CAAAA,EAGeW,OAHfX,CAGuBL,QAAAA,CAAaU,IAAAA,CAAKC,WAAAA,CAAYY,cAHrDlB,CAAAA;EAAU;;;;;;;EAED,UAAyBL,0CAA8BoB;EAAmB;EAAlD,KAArBJ,EAW5HQ,MAX4HR,CAAAA,MAAAA,EAAAA,GAAAA,CAAAA,EAAAA,WAAAA,EAW1FhB,QAAAA,CAAaU,IAAAA,CAAKC,WAAAA,CAAYS,mBAX4DJ,EAAAA,WAAAA,CAAAA,EAWzBhB,QAAAA,CAAaU,IAAAA,CAAKe,kBAXOT,CAAAA,EAWcb,gBAXda;EAAO;;;;;;;EAWI,UAAGb,uCAAAA,CAAAA,OAAAA,EAQtFH,QAAAA,CAAa0B,qBARyEvB,EAAAA,WAAAA,EAQrCH,QAAAA,CAAauB,cARwBpB,CAAAA,EAQPD,WAROC"}
@@ -1,11 +1,9 @@
1
- import { isReasoningModel } from "../utils/misc.js";
1
+ import { wrapOpenAIClientError } from "../utils/client.js";
2
2
  import { formatToOpenAIToolChoice } from "../utils/tools.js";
3
- import { handleMultiModalOutput } from "../utils/output.js";
3
+ import { isReasoningModel } from "../utils/misc.js";
4
4
  import { BaseChatOpenAI } from "./base.js";
5
- import { wrapOpenAIClientError } from "../utils/client.js";
6
- import { _convertMessagesToOpenAIParams } from "../utils/message_inputs.js";
7
- import { makeInvalidToolCall, parseToolCall } from "@langchain/core/output_parsers/openai_tools";
8
- import { AIMessage, AIMessageChunk, ChatMessage, ChatMessageChunk, FunctionMessageChunk, HumanMessageChunk, SystemMessageChunk, ToolMessageChunk, isAIMessage } from "@langchain/core/messages";
5
+ import { convertCompletionsDeltaToBaseMessageChunk, convertCompletionsMessageToBaseMessage, convertMessagesToCompletionsMessageParams } from "../converters/completions.js";
6
+ import { AIMessage, AIMessageChunk, isAIMessage } from "@langchain/core/messages";
9
7
  import { ChatGenerationChunk } from "@langchain/core/outputs";
10
8
 
11
9
  //#region src/chat_models/completions.ts
@@ -61,7 +59,10 @@ var ChatOpenAICompletions = class extends BaseChatOpenAI {
61
59
  async _generate(messages, options, runManager) {
62
60
  const usageMetadata = {};
63
61
  const params = this.invocationParams(options);
64
- const messagesMapped = _convertMessagesToOpenAIParams(messages, this.model);
62
+ const messagesMapped = convertMessagesToCompletionsMessageParams({
63
+ messages,
64
+ model: this.model
65
+ });
65
66
  if (params.stream) {
66
67
  const stream = this._streamResponseChunks(messages, options, runManager);
67
68
  const finalChunks = {};
@@ -136,7 +137,10 @@ var ChatOpenAICompletions = class extends BaseChatOpenAI {
136
137
  }
137
138
  }
138
139
  async *_streamResponseChunks(messages, options, runManager) {
139
- const messagesMapped = _convertMessagesToOpenAIParams(messages, this.model);
140
+ const messagesMapped = convertMessagesToCompletionsMessageParams({
141
+ messages,
142
+ model: this.model
143
+ });
140
144
  const params = {
141
145
  ...this.invocationParams(options, { streaming: true }),
142
146
  messages: messagesMapped,
@@ -217,107 +221,33 @@ var ChatOpenAICompletions = class extends BaseChatOpenAI {
217
221
  }
218
222
  });
219
223
  }
220
- /** @internal */
221
- _convertCompletionsMessageToBaseMessage(message, rawResponse) {
222
- const rawToolCalls = message.tool_calls;
223
- switch (message.role) {
224
- case "assistant": {
225
- const toolCalls = [];
226
- const invalidToolCalls = [];
227
- for (const rawToolCall of rawToolCalls ?? []) try {
228
- toolCalls.push(parseToolCall(rawToolCall, { returnId: true }));
229
- } catch (e) {
230
- invalidToolCalls.push(makeInvalidToolCall(rawToolCall, e.message));
231
- }
232
- const additional_kwargs = {
233
- function_call: message.function_call,
234
- tool_calls: rawToolCalls
235
- };
236
- if (this.__includeRawResponse !== void 0) additional_kwargs.__raw_response = rawResponse;
237
- const response_metadata = {
238
- model_provider: "openai",
239
- model_name: rawResponse.model,
240
- ...rawResponse.system_fingerprint ? {
241
- usage: { ...rawResponse.usage },
242
- system_fingerprint: rawResponse.system_fingerprint
243
- } : {}
244
- };
245
- if (message.audio) additional_kwargs.audio = message.audio;
246
- const content = handleMultiModalOutput(message.content || "", rawResponse.choices?.[0]?.message);
247
- return new AIMessage({
248
- content,
249
- tool_calls: toolCalls,
250
- invalid_tool_calls: invalidToolCalls,
251
- additional_kwargs,
252
- response_metadata,
253
- id: rawResponse.id
254
- });
255
- }
256
- default: return new ChatMessage(message.content || "", message.role ?? "unknown");
257
- }
258
- }
259
- /** @internal */
224
+ /**
225
+ * @deprecated
226
+ * This function was hoisted into a publicly accessible function from a
227
+ * different export, but to maintain backwards compatibility with chat models
228
+ * that depend on ChatOpenAICompletions, we'll keep it here as an overridable
229
+ * method. This will be removed in a future release
230
+ */
260
231
  _convertCompletionsDeltaToBaseMessageChunk(delta, rawResponse, defaultRole) {
261
- const role = delta.role ?? defaultRole;
262
- const content = delta.content ?? "";
263
- let additional_kwargs;
264
- if (delta.function_call) additional_kwargs = { function_call: delta.function_call };
265
- else if (delta.tool_calls) additional_kwargs = { tool_calls: delta.tool_calls };
266
- else additional_kwargs = {};
267
- if (this.__includeRawResponse) additional_kwargs.__raw_response = rawResponse;
268
- if (delta.audio) additional_kwargs.audio = {
269
- ...delta.audio,
270
- index: rawResponse.choices[0].index
271
- };
272
- const response_metadata = {
273
- model_provider: "openai",
274
- usage: { ...rawResponse.usage }
275
- };
276
- if (role === "user") return new HumanMessageChunk({
277
- content,
278
- response_metadata
279
- });
280
- else if (role === "assistant") {
281
- const toolCallChunks = [];
282
- if (Array.isArray(delta.tool_calls)) for (const rawToolCall of delta.tool_calls) toolCallChunks.push({
283
- name: rawToolCall.function?.name,
284
- args: rawToolCall.function?.arguments,
285
- id: rawToolCall.id,
286
- index: rawToolCall.index,
287
- type: "tool_call_chunk"
288
- });
289
- return new AIMessageChunk({
290
- content,
291
- tool_call_chunks: toolCallChunks,
292
- additional_kwargs,
293
- id: rawResponse.id,
294
- response_metadata
295
- });
296
- } else if (role === "system") return new SystemMessageChunk({
297
- content,
298
- response_metadata
299
- });
300
- else if (role === "developer") return new SystemMessageChunk({
301
- content,
302
- response_metadata,
303
- additional_kwargs: { __openai_role__: "developer" }
304
- });
305
- else if (role === "function") return new FunctionMessageChunk({
306
- content,
307
- additional_kwargs,
308
- name: delta.name,
309
- response_metadata
232
+ return convertCompletionsDeltaToBaseMessageChunk({
233
+ delta,
234
+ rawResponse,
235
+ includeRawResponse: this.__includeRawResponse,
236
+ defaultRole
310
237
  });
311
- else if (role === "tool") return new ToolMessageChunk({
312
- content,
313
- additional_kwargs,
314
- tool_call_id: delta.tool_call_id,
315
- response_metadata
316
- });
317
- else return new ChatMessageChunk({
318
- content,
319
- role,
320
- response_metadata
238
+ }
239
+ /**
240
+ * @deprecated
241
+ * This function was hoisted into a publicly accessible function from a
242
+ * different export, but to maintain backwards compatibility with chat models
243
+ * that depend on ChatOpenAICompletions, we'll keep it here as an overridable
244
+ * method. This will be removed in a future release
245
+ */
246
+ _convertCompletionsMessageToBaseMessage(message, rawResponse) {
247
+ return convertCompletionsMessageToBaseMessage({
248
+ message,
249
+ rawResponse,
250
+ includeRawResponse: this.__includeRawResponse
321
251
  });
322
252
  }
323
253
  };
@@ -1 +1 @@
1
- {"version":3,"file":"completions.js","names":["options?: this[\"ParsedCallOptions\"]","extra?: { streaming?: boolean }","strict: boolean | undefined","params: Partial<ChatCompletionsInvocationParams>","messages: BaseMessage[]","options: this[\"ParsedCallOptions\"]","runManager?: CallbackManagerForLLMRun","messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[]","finalChunks: Record<number, ChatGenerationChunk>","generations: ChatGeneration[]","generation: ChatGeneration","defaultRole: OpenAIClient.Chat.ChatCompletionRole | undefined","usage: OpenAIClient.Completions.CompletionUsage | undefined","generationInfo: Record<string, any>","request: OpenAIClient.Chat.ChatCompletionCreateParams","requestOptions?: OpenAIClient.RequestOptions","message: OpenAIClient.Chat.Completions.ChatCompletionMessage","rawResponse: OpenAIClient.Chat.Completions.ChatCompletion","rawToolCalls: OpenAIToolCall[] | undefined","e: any","additional_kwargs: Record<string, unknown>","response_metadata: Record<string, unknown> | undefined","delta: Record<string, any>","rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk","defaultRole?: OpenAIClient.Chat.ChatCompletionRole","toolCallChunks: ToolCallChunk[]"],"sources":["../../src/chat_models/completions.ts"],"sourcesContent":["import { OpenAI as OpenAIClient } from \"openai\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport {\n AIMessage,\n AIMessageChunk,\n type BaseMessage,\n ChatMessage,\n ChatMessageChunk,\n FunctionMessageChunk,\n HumanMessageChunk,\n SystemMessageChunk,\n ToolMessageChunk,\n OpenAIToolCall,\n isAIMessage,\n type UsageMetadata,\n type BaseMessageFields,\n} from \"@langchain/core/messages\";\nimport {\n ChatGenerationChunk,\n type ChatGeneration,\n type ChatResult,\n} from \"@langchain/core/outputs\";\nimport { NewTokenIndices } from \"@langchain/core/callbacks/base\";\nimport {\n makeInvalidToolCall,\n parseToolCall,\n} from \"@langchain/core/output_parsers/openai_tools\";\nimport type { ToolCallChunk } from \"@langchain/core/messages/tool\";\nimport { wrapOpenAIClientError } from \"../utils/client.js\";\nimport {\n OpenAIToolChoice,\n formatToOpenAIToolChoice,\n _convertToOpenAITool,\n} from \"../utils/tools.js\";\nimport {\n handleMultiModalOutput,\n _convertOpenAIResponsesUsageToLangChainUsage,\n} from \"../utils/output.js\";\nimport { _convertMessagesToOpenAIParams } from \"../utils/message_inputs.js\";\nimport { _convertToResponsesMessageFromV1 } from \"../utils/standard.js\";\nimport { isReasoningModel } from \"../utils/misc.js\";\nimport { BaseChatOpenAICallOptions } from \"./base.js\";\nimport { BaseChatOpenAI } from \"./base.js\";\n\nexport interface ChatOpenAICompletionsCallOptions\n extends BaseChatOpenAICallOptions {}\n\ntype ChatCompletionsInvocationParams = Omit<\n OpenAIClient.Chat.Completions.ChatCompletionCreateParams,\n \"messages\"\n>;\n\n/**\n * OpenAI Completions API implementation.\n * @internal\n */\nexport class ChatOpenAICompletions<\n CallOptions extends ChatOpenAICompletionsCallOptions = ChatOpenAICompletionsCallOptions\n> extends BaseChatOpenAI<CallOptions> {\n /** @internal */\n override invocationParams(\n options?: this[\"ParsedCallOptions\"],\n extra?: { streaming?: boolean }\n ): ChatCompletionsInvocationParams {\n let strict: boolean | undefined;\n if (options?.strict !== undefined) {\n strict = options.strict;\n } else if (this.supportsStrictToolCalling !== undefined) {\n strict = this.supportsStrictToolCalling;\n }\n\n let streamOptionsConfig = {};\n if (options?.stream_options !== undefined) {\n streamOptionsConfig = { stream_options: options.stream_options };\n } else if (this.streamUsage && (this.streaming || extra?.streaming)) {\n streamOptionsConfig = { stream_options: { include_usage: true } };\n }\n\n const params: Partial<ChatCompletionsInvocationParams> = {\n model: this.model,\n temperature: this.temperature,\n top_p: this.topP,\n frequency_penalty: this.frequencyPenalty,\n presence_penalty: this.presencePenalty,\n logprobs: this.logprobs,\n top_logprobs: this.topLogprobs,\n n: this.n,\n logit_bias: this.logitBias,\n stop: options?.stop ?? this.stopSequences,\n user: this.user,\n // if include_usage is set or streamUsage then stream must be set to true.\n stream: this.streaming,\n functions: options?.functions,\n function_call: options?.function_call,\n tools: options?.tools?.length\n ? options.tools.map((tool) =>\n this._convertChatOpenAIToolToCompletionsTool(tool, { strict })\n )\n : undefined,\n tool_choice: formatToOpenAIToolChoice(\n options?.tool_choice as OpenAIToolChoice\n ),\n response_format: this._getResponseFormat(options?.response_format),\n seed: options?.seed,\n ...streamOptionsConfig,\n parallel_tool_calls: options?.parallel_tool_calls,\n ...(this.audio || options?.audio\n ? { audio: this.audio || options?.audio }\n : {}),\n ...(this.modalities || options?.modalities\n ? { modalities: this.modalities || options?.modalities }\n : {}),\n ...this.modelKwargs,\n prompt_cache_key: options?.promptCacheKey ?? this.promptCacheKey,\n verbosity: options?.verbosity ?? this.verbosity,\n };\n if (options?.prediction !== undefined) {\n params.prediction = options.prediction;\n }\n if (this.service_tier !== undefined) {\n params.service_tier = this.service_tier;\n }\n if (options?.service_tier !== undefined) {\n params.service_tier = options.service_tier;\n }\n const reasoning = this._getReasoningParams(options);\n if (reasoning !== undefined && reasoning.effort !== undefined) {\n params.reasoning_effort = reasoning.effort;\n }\n if (isReasoningModel(params.model)) {\n params.max_completion_tokens =\n this.maxTokens === -1 ? undefined : this.maxTokens;\n } else {\n params.max_tokens = this.maxTokens === -1 ? undefined : this.maxTokens;\n }\n\n return params as ChatCompletionsInvocationParams;\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n const usageMetadata = {} as UsageMetadata;\n const params = this.invocationParams(options);\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n _convertMessagesToOpenAIParams(messages, this.model);\n\n if (params.stream) {\n const stream = this._streamResponseChunks(messages, options, runManager);\n const finalChunks: Record<number, ChatGenerationChunk> = {};\n for await (const chunk of stream) {\n chunk.message.response_metadata = {\n ...chunk.generationInfo,\n ...chunk.message.response_metadata,\n };\n const index =\n (chunk.generationInfo as NewTokenIndices)?.completion ?? 0;\n if (finalChunks[index] === undefined) {\n finalChunks[index] = chunk;\n } else {\n finalChunks[index] = finalChunks[index].concat(chunk);\n }\n }\n const generations = Object.entries(finalChunks)\n .sort(([aKey], [bKey]) => parseInt(aKey, 10) - parseInt(bKey, 10))\n .map(([_, value]) => value);\n\n const { functions, function_call } = this.invocationParams(options);\n\n // OpenAI does not support token usage report under stream mode,\n // fallback to estimation.\n\n const promptTokenUsage = await this._getEstimatedTokenCountFromPrompt(\n messages,\n functions,\n function_call\n );\n const completionTokenUsage = await this._getNumTokensFromGenerations(\n generations\n );\n\n usageMetadata.input_tokens = promptTokenUsage;\n usageMetadata.output_tokens = completionTokenUsage;\n usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage;\n return {\n generations,\n llmOutput: {\n estimatedTokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n } else {\n const data = await this.completionWithRetry(\n {\n ...params,\n stream: false,\n messages: messagesMapped,\n },\n {\n signal: options?.signal,\n ...options?.options,\n }\n );\n\n const {\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n total_tokens: totalTokens,\n prompt_tokens_details: promptTokensDetails,\n completion_tokens_details: completionTokensDetails,\n } = data?.usage ?? {};\n\n if (completionTokens) {\n usageMetadata.output_tokens =\n (usageMetadata.output_tokens ?? 0) + completionTokens;\n }\n\n if (promptTokens) {\n usageMetadata.input_tokens =\n (usageMetadata.input_tokens ?? 0) + promptTokens;\n }\n\n if (totalTokens) {\n usageMetadata.total_tokens =\n (usageMetadata.total_tokens ?? 0) + totalTokens;\n }\n\n if (\n promptTokensDetails?.audio_tokens !== null ||\n promptTokensDetails?.cached_tokens !== null\n ) {\n usageMetadata.input_token_details = {\n ...(promptTokensDetails?.audio_tokens !== null && {\n audio: promptTokensDetails?.audio_tokens,\n }),\n ...(promptTokensDetails?.cached_tokens !== null && {\n cache_read: promptTokensDetails?.cached_tokens,\n }),\n };\n }\n\n if (\n completionTokensDetails?.audio_tokens !== null ||\n completionTokensDetails?.reasoning_tokens !== null\n ) {\n usageMetadata.output_token_details = {\n ...(completionTokensDetails?.audio_tokens !== null && {\n audio: completionTokensDetails?.audio_tokens,\n }),\n ...(completionTokensDetails?.reasoning_tokens !== null && {\n reasoning: completionTokensDetails?.reasoning_tokens,\n }),\n };\n }\n\n const generations: ChatGeneration[] = [];\n for (const part of data?.choices ?? []) {\n const text = part.message?.content ?? \"\";\n const generation: ChatGeneration = {\n text,\n message: this._convertCompletionsMessageToBaseMessage(\n part.message ?? { role: \"assistant\" },\n data\n ),\n };\n generation.generationInfo = {\n ...(part.finish_reason ? { finish_reason: part.finish_reason } : {}),\n ...(part.logprobs ? { logprobs: part.logprobs } : {}),\n };\n if (isAIMessage(generation.message)) {\n generation.message.usage_metadata = usageMetadata;\n }\n // Fields are not serialized unless passed to the constructor\n // Doing this ensures all fields on the message are serialized\n generation.message = new AIMessage(\n Object.fromEntries(\n Object.entries(generation.message).filter(\n ([key]) => !key.startsWith(\"lc_\")\n )\n ) as BaseMessageFields\n );\n generations.push(generation);\n }\n return {\n generations,\n llmOutput: {\n tokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n }\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n _convertMessagesToOpenAIParams(messages, this.model);\n\n const params = {\n ...this.invocationParams(options, {\n streaming: true,\n }),\n messages: messagesMapped,\n stream: true as const,\n };\n let defaultRole: OpenAIClient.Chat.ChatCompletionRole | undefined;\n\n const streamIterable = await this.completionWithRetry(params, options);\n let usage: OpenAIClient.Completions.CompletionUsage | undefined;\n for await (const data of streamIterable) {\n const choice = data?.choices?.[0];\n if (data.usage) {\n usage = data.usage;\n }\n if (!choice) {\n continue;\n }\n\n const { delta } = choice;\n if (!delta) {\n continue;\n }\n const chunk = this._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n data,\n defaultRole\n );\n defaultRole = delta.role ?? defaultRole;\n const newTokenIndices = {\n prompt: options.promptIndex ?? 0,\n completion: choice.index ?? 0,\n };\n if (typeof chunk.content !== \"string\") {\n console.log(\n \"[WARNING]: Received non-string content from OpenAI. This is currently not supported.\"\n );\n continue;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const generationInfo: Record<string, any> = { ...newTokenIndices };\n if (choice.finish_reason != null) {\n generationInfo.finish_reason = choice.finish_reason;\n // Only include system fingerprint in the last chunk for now\n // to avoid concatenation issues\n generationInfo.system_fingerprint = data.system_fingerprint;\n generationInfo.model_name = data.model;\n generationInfo.service_tier = data.service_tier;\n }\n if (this.logprobs) {\n generationInfo.logprobs = choice.logprobs;\n }\n const generationChunk = new ChatGenerationChunk({\n message: chunk,\n text: chunk.content,\n generationInfo,\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n generationChunk.text ?? \"\",\n newTokenIndices,\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n if (usage) {\n const inputTokenDetails = {\n ...(usage.prompt_tokens_details?.audio_tokens !== null && {\n audio: usage.prompt_tokens_details?.audio_tokens,\n }),\n ...(usage.prompt_tokens_details?.cached_tokens !== null && {\n cache_read: usage.prompt_tokens_details?.cached_tokens,\n }),\n };\n const outputTokenDetails = {\n ...(usage.completion_tokens_details?.audio_tokens !== null && {\n audio: usage.completion_tokens_details?.audio_tokens,\n }),\n ...(usage.completion_tokens_details?.reasoning_tokens !== null && {\n reasoning: usage.completion_tokens_details?.reasoning_tokens,\n }),\n };\n const generationChunk = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: \"\",\n response_metadata: {\n usage: { ...usage },\n },\n usage_metadata: {\n input_tokens: usage.prompt_tokens,\n output_tokens: usage.completion_tokens,\n total_tokens: usage.total_tokens,\n ...(Object.keys(inputTokenDetails).length > 0 && {\n input_token_details: inputTokenDetails,\n }),\n ...(Object.keys(outputTokenDetails).length > 0 && {\n output_token_details: outputTokenDetails,\n }),\n },\n }),\n text: \"\",\n });\n yield generationChunk;\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n }\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>>;\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<OpenAIClient.Chat.Completions.ChatCompletion>;\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParams,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<\n | AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>\n | OpenAIClient.Chat.Completions.ChatCompletion\n > {\n const clientOptions = this._getClientOptions(requestOptions);\n const isParseableFormat =\n request.response_format && request.response_format.type === \"json_schema\";\n return this.caller.call(async () => {\n try {\n if (isParseableFormat && !request.stream) {\n return await this.client.chat.completions.parse(\n request,\n clientOptions\n );\n } else {\n return await this.client.chat.completions.create(\n request,\n clientOptions\n );\n }\n } catch (e) {\n const error = wrapOpenAIClientError(e);\n throw error;\n }\n });\n }\n\n /** @internal */\n protected _convertCompletionsMessageToBaseMessage(\n message: OpenAIClient.Chat.Completions.ChatCompletionMessage,\n rawResponse: OpenAIClient.Chat.Completions.ChatCompletion\n ): BaseMessage {\n const rawToolCalls: OpenAIToolCall[] | undefined = message.tool_calls as\n | OpenAIToolCall[]\n | undefined;\n switch (message.role) {\n case \"assistant\": {\n const toolCalls = [];\n const invalidToolCalls = [];\n for (const rawToolCall of rawToolCalls ?? []) {\n try {\n toolCalls.push(parseToolCall(rawToolCall, { returnId: true }));\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n invalidToolCalls.push(makeInvalidToolCall(rawToolCall, e.message));\n }\n }\n const additional_kwargs: Record<string, unknown> = {\n function_call: message.function_call,\n tool_calls: rawToolCalls,\n };\n if (this.__includeRawResponse !== undefined) {\n additional_kwargs.__raw_response = rawResponse;\n }\n const response_metadata: Record<string, unknown> | undefined = {\n model_provider: \"openai\",\n model_name: rawResponse.model,\n ...(rawResponse.system_fingerprint\n ? {\n usage: { ...rawResponse.usage },\n system_fingerprint: rawResponse.system_fingerprint,\n }\n : {}),\n };\n\n if (message.audio) {\n additional_kwargs.audio = message.audio;\n }\n\n const content = handleMultiModalOutput(\n message.content || \"\",\n rawResponse.choices?.[0]?.message\n );\n return new AIMessage({\n content,\n tool_calls: toolCalls,\n invalid_tool_calls: invalidToolCalls,\n additional_kwargs,\n response_metadata,\n id: rawResponse.id,\n });\n }\n default:\n return new ChatMessage(\n message.content || \"\",\n message.role ?? \"unknown\"\n );\n }\n }\n\n /** @internal */\n protected _convertCompletionsDeltaToBaseMessageChunk(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n delta: Record<string, any>,\n rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk,\n defaultRole?: OpenAIClient.Chat.ChatCompletionRole\n ) {\n const role = delta.role ?? defaultRole;\n const content = delta.content ?? \"\";\n let additional_kwargs: Record<string, unknown>;\n if (delta.function_call) {\n additional_kwargs = {\n function_call: delta.function_call,\n };\n } else if (delta.tool_calls) {\n additional_kwargs = {\n tool_calls: delta.tool_calls,\n };\n } else {\n additional_kwargs = {};\n }\n if (this.__includeRawResponse) {\n additional_kwargs.__raw_response = rawResponse;\n }\n\n if (delta.audio) {\n additional_kwargs.audio = {\n ...delta.audio,\n index: rawResponse.choices[0].index,\n };\n }\n\n const response_metadata = {\n model_provider: \"openai\",\n usage: { ...rawResponse.usage },\n };\n if (role === \"user\") {\n return new HumanMessageChunk({ content, response_metadata });\n } else if (role === \"assistant\") {\n const toolCallChunks: ToolCallChunk[] = [];\n if (Array.isArray(delta.tool_calls)) {\n for (const rawToolCall of delta.tool_calls) {\n toolCallChunks.push({\n name: rawToolCall.function?.name,\n args: rawToolCall.function?.arguments,\n id: rawToolCall.id,\n index: rawToolCall.index,\n type: \"tool_call_chunk\",\n });\n }\n }\n return new AIMessageChunk({\n content,\n tool_call_chunks: toolCallChunks,\n additional_kwargs,\n id: rawResponse.id,\n response_metadata,\n });\n } else if (role === \"system\") {\n return new SystemMessageChunk({ content, response_metadata });\n } else if (role === \"developer\") {\n return new SystemMessageChunk({\n content,\n response_metadata,\n additional_kwargs: {\n __openai_role__: \"developer\",\n },\n });\n } else if (role === \"function\") {\n return new FunctionMessageChunk({\n content,\n additional_kwargs,\n name: delta.name,\n response_metadata,\n });\n } else if (role === \"tool\") {\n return new ToolMessageChunk({\n content,\n additional_kwargs,\n tool_call_id: delta.tool_call_id,\n response_metadata,\n });\n } else {\n return new ChatMessageChunk({ content, role, response_metadata });\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"completions.js","names":["options?: this[\"ParsedCallOptions\"]","extra?: { streaming?: boolean }","strict: boolean | undefined","params: Partial<ChatCompletionsInvocationParams>","messages: BaseMessage[]","options: this[\"ParsedCallOptions\"]","runManager?: CallbackManagerForLLMRun","messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[]","finalChunks: Record<number, ChatGenerationChunk>","generations: ChatGeneration[]","generation: ChatGeneration","defaultRole: OpenAIClient.Chat.ChatCompletionRole | undefined","usage: OpenAIClient.Completions.CompletionUsage | undefined","generationInfo: Record<string, any>","request: OpenAIClient.Chat.ChatCompletionCreateParams","requestOptions?: OpenAIClient.RequestOptions","delta: Record<string, any>","rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk","defaultRole?: OpenAIClient.Chat.ChatCompletionRole","message: OpenAIClient.ChatCompletionMessage","rawResponse: OpenAIClient.ChatCompletion"],"sources":["../../src/chat_models/completions.ts"],"sourcesContent":["import { OpenAI as OpenAIClient } from \"openai\";\nimport { CallbackManagerForLLMRun } from \"@langchain/core/callbacks/manager\";\nimport {\n AIMessage,\n AIMessageChunk,\n type BaseMessage,\n isAIMessage,\n type UsageMetadata,\n type BaseMessageFields,\n BaseMessageChunk,\n} from \"@langchain/core/messages\";\nimport {\n ChatGenerationChunk,\n type ChatGeneration,\n type ChatResult,\n} from \"@langchain/core/outputs\";\nimport { NewTokenIndices } from \"@langchain/core/callbacks/base\";\nimport { wrapOpenAIClientError } from \"../utils/client.js\";\nimport {\n OpenAIToolChoice,\n formatToOpenAIToolChoice,\n _convertToOpenAITool,\n} from \"../utils/tools.js\";\nimport { isReasoningModel } from \"../utils/misc.js\";\nimport { BaseChatOpenAICallOptions } from \"./base.js\";\nimport { BaseChatOpenAI } from \"./base.js\";\nimport {\n convertCompletionsDeltaToBaseMessageChunk,\n convertCompletionsMessageToBaseMessage,\n convertMessagesToCompletionsMessageParams,\n} from \"../converters/completions.js\";\n\nexport interface ChatOpenAICompletionsCallOptions\n extends BaseChatOpenAICallOptions {}\n\ntype ChatCompletionsInvocationParams = Omit<\n OpenAIClient.Chat.Completions.ChatCompletionCreateParams,\n \"messages\"\n>;\n\n/**\n * OpenAI Completions API implementation.\n * @internal\n */\nexport class ChatOpenAICompletions<\n CallOptions extends ChatOpenAICompletionsCallOptions = ChatOpenAICompletionsCallOptions\n> extends BaseChatOpenAI<CallOptions> {\n /** @internal */\n override invocationParams(\n options?: this[\"ParsedCallOptions\"],\n extra?: { streaming?: boolean }\n ): ChatCompletionsInvocationParams {\n let strict: boolean | undefined;\n if (options?.strict !== undefined) {\n strict = options.strict;\n } else if (this.supportsStrictToolCalling !== undefined) {\n strict = this.supportsStrictToolCalling;\n }\n\n let streamOptionsConfig = {};\n if (options?.stream_options !== undefined) {\n streamOptionsConfig = { stream_options: options.stream_options };\n } else if (this.streamUsage && (this.streaming || extra?.streaming)) {\n streamOptionsConfig = { stream_options: { include_usage: true } };\n }\n\n const params: Partial<ChatCompletionsInvocationParams> = {\n model: this.model,\n temperature: this.temperature,\n top_p: this.topP,\n frequency_penalty: this.frequencyPenalty,\n presence_penalty: this.presencePenalty,\n logprobs: this.logprobs,\n top_logprobs: this.topLogprobs,\n n: this.n,\n logit_bias: this.logitBias,\n stop: options?.stop ?? this.stopSequences,\n user: this.user,\n // if include_usage is set or streamUsage then stream must be set to true.\n stream: this.streaming,\n functions: options?.functions,\n function_call: options?.function_call,\n tools: options?.tools?.length\n ? options.tools.map((tool) =>\n this._convertChatOpenAIToolToCompletionsTool(tool, { strict })\n )\n : undefined,\n tool_choice: formatToOpenAIToolChoice(\n options?.tool_choice as OpenAIToolChoice\n ),\n response_format: this._getResponseFormat(options?.response_format),\n seed: options?.seed,\n ...streamOptionsConfig,\n parallel_tool_calls: options?.parallel_tool_calls,\n ...(this.audio || options?.audio\n ? { audio: this.audio || options?.audio }\n : {}),\n ...(this.modalities || options?.modalities\n ? { modalities: this.modalities || options?.modalities }\n : {}),\n ...this.modelKwargs,\n prompt_cache_key: options?.promptCacheKey ?? this.promptCacheKey,\n verbosity: options?.verbosity ?? this.verbosity,\n };\n if (options?.prediction !== undefined) {\n params.prediction = options.prediction;\n }\n if (this.service_tier !== undefined) {\n params.service_tier = this.service_tier;\n }\n if (options?.service_tier !== undefined) {\n params.service_tier = options.service_tier;\n }\n const reasoning = this._getReasoningParams(options);\n if (reasoning !== undefined && reasoning.effort !== undefined) {\n params.reasoning_effort = reasoning.effort;\n }\n if (isReasoningModel(params.model)) {\n params.max_completion_tokens =\n this.maxTokens === -1 ? undefined : this.maxTokens;\n } else {\n params.max_tokens = this.maxTokens === -1 ? undefined : this.maxTokens;\n }\n\n return params as ChatCompletionsInvocationParams;\n }\n\n async _generate(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): Promise<ChatResult> {\n const usageMetadata = {} as UsageMetadata;\n const params = this.invocationParams(options);\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n convertMessagesToCompletionsMessageParams({\n messages,\n model: this.model,\n });\n\n if (params.stream) {\n const stream = this._streamResponseChunks(messages, options, runManager);\n const finalChunks: Record<number, ChatGenerationChunk> = {};\n for await (const chunk of stream) {\n chunk.message.response_metadata = {\n ...chunk.generationInfo,\n ...chunk.message.response_metadata,\n };\n const index =\n (chunk.generationInfo as NewTokenIndices)?.completion ?? 0;\n if (finalChunks[index] === undefined) {\n finalChunks[index] = chunk;\n } else {\n finalChunks[index] = finalChunks[index].concat(chunk);\n }\n }\n const generations = Object.entries(finalChunks)\n .sort(([aKey], [bKey]) => parseInt(aKey, 10) - parseInt(bKey, 10))\n .map(([_, value]) => value);\n\n const { functions, function_call } = this.invocationParams(options);\n\n // OpenAI does not support token usage report under stream mode,\n // fallback to estimation.\n\n const promptTokenUsage = await this._getEstimatedTokenCountFromPrompt(\n messages,\n functions,\n function_call\n );\n const completionTokenUsage = await this._getNumTokensFromGenerations(\n generations\n );\n\n usageMetadata.input_tokens = promptTokenUsage;\n usageMetadata.output_tokens = completionTokenUsage;\n usageMetadata.total_tokens = promptTokenUsage + completionTokenUsage;\n return {\n generations,\n llmOutput: {\n estimatedTokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n } else {\n const data = await this.completionWithRetry(\n {\n ...params,\n stream: false,\n messages: messagesMapped,\n },\n {\n signal: options?.signal,\n ...options?.options,\n }\n );\n\n const {\n completion_tokens: completionTokens,\n prompt_tokens: promptTokens,\n total_tokens: totalTokens,\n prompt_tokens_details: promptTokensDetails,\n completion_tokens_details: completionTokensDetails,\n } = data?.usage ?? {};\n\n if (completionTokens) {\n usageMetadata.output_tokens =\n (usageMetadata.output_tokens ?? 0) + completionTokens;\n }\n\n if (promptTokens) {\n usageMetadata.input_tokens =\n (usageMetadata.input_tokens ?? 0) + promptTokens;\n }\n\n if (totalTokens) {\n usageMetadata.total_tokens =\n (usageMetadata.total_tokens ?? 0) + totalTokens;\n }\n\n if (\n promptTokensDetails?.audio_tokens !== null ||\n promptTokensDetails?.cached_tokens !== null\n ) {\n usageMetadata.input_token_details = {\n ...(promptTokensDetails?.audio_tokens !== null && {\n audio: promptTokensDetails?.audio_tokens,\n }),\n ...(promptTokensDetails?.cached_tokens !== null && {\n cache_read: promptTokensDetails?.cached_tokens,\n }),\n };\n }\n\n if (\n completionTokensDetails?.audio_tokens !== null ||\n completionTokensDetails?.reasoning_tokens !== null\n ) {\n usageMetadata.output_token_details = {\n ...(completionTokensDetails?.audio_tokens !== null && {\n audio: completionTokensDetails?.audio_tokens,\n }),\n ...(completionTokensDetails?.reasoning_tokens !== null && {\n reasoning: completionTokensDetails?.reasoning_tokens,\n }),\n };\n }\n\n const generations: ChatGeneration[] = [];\n for (const part of data?.choices ?? []) {\n const text = part.message?.content ?? \"\";\n const generation: ChatGeneration = {\n text,\n message: this._convertCompletionsMessageToBaseMessage(\n part.message ?? { role: \"assistant\" },\n data\n ),\n };\n generation.generationInfo = {\n ...(part.finish_reason ? { finish_reason: part.finish_reason } : {}),\n ...(part.logprobs ? { logprobs: part.logprobs } : {}),\n };\n if (isAIMessage(generation.message)) {\n generation.message.usage_metadata = usageMetadata;\n }\n // Fields are not serialized unless passed to the constructor\n // Doing this ensures all fields on the message are serialized\n generation.message = new AIMessage(\n Object.fromEntries(\n Object.entries(generation.message).filter(\n ([key]) => !key.startsWith(\"lc_\")\n )\n ) as BaseMessageFields\n );\n generations.push(generation);\n }\n return {\n generations,\n llmOutput: {\n tokenUsage: {\n promptTokens: usageMetadata.input_tokens,\n completionTokens: usageMetadata.output_tokens,\n totalTokens: usageMetadata.total_tokens,\n },\n },\n };\n }\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this[\"ParsedCallOptions\"],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const messagesMapped: OpenAIClient.Chat.Completions.ChatCompletionMessageParam[] =\n convertMessagesToCompletionsMessageParams({\n messages,\n model: this.model,\n });\n\n const params = {\n ...this.invocationParams(options, {\n streaming: true,\n }),\n messages: messagesMapped,\n stream: true as const,\n };\n let defaultRole: OpenAIClient.Chat.ChatCompletionRole | undefined;\n\n const streamIterable = await this.completionWithRetry(params, options);\n let usage: OpenAIClient.Completions.CompletionUsage | undefined;\n for await (const data of streamIterable) {\n const choice = data?.choices?.[0];\n if (data.usage) {\n usage = data.usage;\n }\n if (!choice) {\n continue;\n }\n\n const { delta } = choice;\n if (!delta) {\n continue;\n }\n const chunk = this._convertCompletionsDeltaToBaseMessageChunk(\n delta,\n data,\n defaultRole\n );\n defaultRole = delta.role ?? defaultRole;\n const newTokenIndices = {\n prompt: options.promptIndex ?? 0,\n completion: choice.index ?? 0,\n };\n if (typeof chunk.content !== \"string\") {\n console.log(\n \"[WARNING]: Received non-string content from OpenAI. This is currently not supported.\"\n );\n continue;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const generationInfo: Record<string, any> = { ...newTokenIndices };\n if (choice.finish_reason != null) {\n generationInfo.finish_reason = choice.finish_reason;\n // Only include system fingerprint in the last chunk for now\n // to avoid concatenation issues\n generationInfo.system_fingerprint = data.system_fingerprint;\n generationInfo.model_name = data.model;\n generationInfo.service_tier = data.service_tier;\n }\n if (this.logprobs) {\n generationInfo.logprobs = choice.logprobs;\n }\n const generationChunk = new ChatGenerationChunk({\n message: chunk,\n text: chunk.content,\n generationInfo,\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n generationChunk.text ?? \"\",\n newTokenIndices,\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n if (usage) {\n const inputTokenDetails = {\n ...(usage.prompt_tokens_details?.audio_tokens !== null && {\n audio: usage.prompt_tokens_details?.audio_tokens,\n }),\n ...(usage.prompt_tokens_details?.cached_tokens !== null && {\n cache_read: usage.prompt_tokens_details?.cached_tokens,\n }),\n };\n const outputTokenDetails = {\n ...(usage.completion_tokens_details?.audio_tokens !== null && {\n audio: usage.completion_tokens_details?.audio_tokens,\n }),\n ...(usage.completion_tokens_details?.reasoning_tokens !== null && {\n reasoning: usage.completion_tokens_details?.reasoning_tokens,\n }),\n };\n const generationChunk = new ChatGenerationChunk({\n message: new AIMessageChunk({\n content: \"\",\n response_metadata: {\n usage: { ...usage },\n },\n usage_metadata: {\n input_tokens: usage.prompt_tokens,\n output_tokens: usage.completion_tokens,\n total_tokens: usage.total_tokens,\n ...(Object.keys(inputTokenDetails).length > 0 && {\n input_token_details: inputTokenDetails,\n }),\n ...(Object.keys(outputTokenDetails).length > 0 && {\n output_token_details: outputTokenDetails,\n }),\n },\n }),\n text: \"\",\n });\n yield generationChunk;\n }\n if (options.signal?.aborted) {\n throw new Error(\"AbortError\");\n }\n }\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsStreaming,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>>;\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParamsNonStreaming,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<OpenAIClient.Chat.Completions.ChatCompletion>;\n\n async completionWithRetry(\n request: OpenAIClient.Chat.ChatCompletionCreateParams,\n requestOptions?: OpenAIClient.RequestOptions\n ): Promise<\n | AsyncIterable<OpenAIClient.Chat.Completions.ChatCompletionChunk>\n | OpenAIClient.Chat.Completions.ChatCompletion\n > {\n const clientOptions = this._getClientOptions(requestOptions);\n const isParseableFormat =\n request.response_format && request.response_format.type === \"json_schema\";\n return this.caller.call(async () => {\n try {\n if (isParseableFormat && !request.stream) {\n return await this.client.chat.completions.parse(\n request,\n clientOptions\n );\n } else {\n return await this.client.chat.completions.create(\n request,\n clientOptions\n );\n }\n } catch (e) {\n const error = wrapOpenAIClientError(e);\n throw error;\n }\n });\n }\n\n /**\n * @deprecated\n * This function was hoisted into a publicly accessible function from a\n * different export, but to maintain backwards compatibility with chat models\n * that depend on ChatOpenAICompletions, we'll keep it here as an overridable\n * method. This will be removed in a future release\n */\n protected _convertCompletionsDeltaToBaseMessageChunk(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n delta: Record<string, any>,\n rawResponse: OpenAIClient.Chat.Completions.ChatCompletionChunk,\n defaultRole?: OpenAIClient.Chat.ChatCompletionRole\n ): BaseMessageChunk {\n return convertCompletionsDeltaToBaseMessageChunk({\n delta,\n rawResponse,\n includeRawResponse: this.__includeRawResponse,\n defaultRole,\n });\n }\n\n /**\n * @deprecated\n * This function was hoisted into a publicly accessible function from a\n * different export, but to maintain backwards compatibility with chat models\n * that depend on ChatOpenAICompletions, we'll keep it here as an overridable\n * method. This will be removed in a future release\n */\n protected _convertCompletionsMessageToBaseMessage(\n message: OpenAIClient.ChatCompletionMessage,\n rawResponse: OpenAIClient.ChatCompletion\n ): BaseMessage {\n return convertCompletionsMessageToBaseMessage({\n message,\n rawResponse,\n includeRawResponse: this.__includeRawResponse,\n });\n }\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  const require_tools = require('../utils/tools.cjs');
2
2
  const require_base = require('./base.cjs');
3
- const require_responses = require('./responses.cjs');
4
3
  const require_completions = require('./completions.cjs');
4
+ const require_responses = require('./responses.cjs');
5
5
 
6
6
  //#region src/chat_models/index.ts
7
7
  /**