@langchain/openai 0.0.21 → 0.0.23

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.
@@ -106,14 +106,26 @@ delta, defaultRole) {
106
106
  }
107
107
  function convertMessagesToOpenAIParams(messages) {
108
108
  // TODO: Function messages do not support array content, fix cast
109
- return messages.map((message) => ({
110
- role: messageToOpenAIRole(message),
111
- content: message.content,
112
- name: message.name,
113
- function_call: message.additional_kwargs.function_call,
114
- tool_calls: message.additional_kwargs.tool_calls,
115
- tool_call_id: message.tool_call_id,
116
- }));
109
+ return messages.map((message) => {
110
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
111
+ const completionParam = {
112
+ role: messageToOpenAIRole(message),
113
+ content: message.content,
114
+ };
115
+ if (message.name != null) {
116
+ completionParam.name = message.name;
117
+ }
118
+ if (message.additional_kwargs.function_call != null) {
119
+ completionParam.function_call = message.additional_kwargs.function_call;
120
+ }
121
+ if (message.additional_kwargs.tool_calls != null) {
122
+ completionParam.tool_calls = message.additional_kwargs.tool_calls;
123
+ }
124
+ if (message.tool_call_id != null) {
125
+ completionParam.tool_call_id = message.tool_call_id;
126
+ }
127
+ return completionParam;
128
+ });
117
129
  }
118
130
  /**
119
131
  * Wrapper around OpenAI large language models that use the Chat endpoint.
@@ -649,9 +661,15 @@ class ChatOpenAI extends chat_models_1.BaseChatModel {
649
661
  count += await this.getNumTokens(openAIMessage.additional_kwargs.function_call?.name);
650
662
  }
651
663
  if (openAIMessage.additional_kwargs.function_call?.arguments) {
652
- count += await this.getNumTokens(
653
- // Remove newlines and spaces
654
- JSON.stringify(JSON.parse(openAIMessage.additional_kwargs.function_call?.arguments)));
664
+ try {
665
+ count += await this.getNumTokens(
666
+ // Remove newlines and spaces
667
+ JSON.stringify(JSON.parse(openAIMessage.additional_kwargs.function_call?.arguments)));
668
+ }
669
+ catch (error) {
670
+ console.error("Error parsing function arguments", error, JSON.stringify(openAIMessage.additional_kwargs.function_call));
671
+ count += await this.getNumTokens(openAIMessage.additional_kwargs.function_call?.arguments);
672
+ }
655
673
  }
656
674
  totalCount += count;
657
675
  return count;
@@ -102,14 +102,26 @@ delta, defaultRole) {
102
102
  }
103
103
  function convertMessagesToOpenAIParams(messages) {
104
104
  // TODO: Function messages do not support array content, fix cast
105
- return messages.map((message) => ({
106
- role: messageToOpenAIRole(message),
107
- content: message.content,
108
- name: message.name,
109
- function_call: message.additional_kwargs.function_call,
110
- tool_calls: message.additional_kwargs.tool_calls,
111
- tool_call_id: message.tool_call_id,
112
- }));
105
+ return messages.map((message) => {
106
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
107
+ const completionParam = {
108
+ role: messageToOpenAIRole(message),
109
+ content: message.content,
110
+ };
111
+ if (message.name != null) {
112
+ completionParam.name = message.name;
113
+ }
114
+ if (message.additional_kwargs.function_call != null) {
115
+ completionParam.function_call = message.additional_kwargs.function_call;
116
+ }
117
+ if (message.additional_kwargs.tool_calls != null) {
118
+ completionParam.tool_calls = message.additional_kwargs.tool_calls;
119
+ }
120
+ if (message.tool_call_id != null) {
121
+ completionParam.tool_call_id = message.tool_call_id;
122
+ }
123
+ return completionParam;
124
+ });
113
125
  }
114
126
  /**
115
127
  * Wrapper around OpenAI large language models that use the Chat endpoint.
@@ -645,9 +657,15 @@ export class ChatOpenAI extends BaseChatModel {
645
657
  count += await this.getNumTokens(openAIMessage.additional_kwargs.function_call?.name);
646
658
  }
647
659
  if (openAIMessage.additional_kwargs.function_call?.arguments) {
648
- count += await this.getNumTokens(
649
- // Remove newlines and spaces
650
- JSON.stringify(JSON.parse(openAIMessage.additional_kwargs.function_call?.arguments)));
660
+ try {
661
+ count += await this.getNumTokens(
662
+ // Remove newlines and spaces
663
+ JSON.stringify(JSON.parse(openAIMessage.additional_kwargs.function_call?.arguments)));
664
+ }
665
+ catch (error) {
666
+ console.error("Error parsing function arguments", error, JSON.stringify(openAIMessage.additional_kwargs.function_call));
667
+ count += await this.getNumTokens(openAIMessage.additional_kwargs.function_call?.arguments);
668
+ }
651
669
  }
652
670
  totalCount += count;
653
671
  return count;
@@ -521,6 +521,7 @@ test("Test ChatOpenAI token usage reporting for streaming function calls", async
521
521
  },
522
522
  ],
523
523
  }).bind({
524
+ seed: 42,
524
525
  functions: [extractionFunctionSchema],
525
526
  function_call: { name: "extractor" },
526
527
  });
@@ -543,6 +544,7 @@ test("Test ChatOpenAI token usage reporting for streaming function calls", async
543
544
  },
544
545
  ],
545
546
  }).bind({
547
+ seed: 42,
546
548
  functions: [extractionFunctionSchema],
547
549
  function_call: { name: "extractor" },
548
550
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@langchain/openai",
3
- "version": "0.0.21",
3
+ "version": "0.0.23",
4
4
  "description": "OpenAI integrations for LangChain.js",
5
5
  "type": "module",
6
6
  "engines": {