From 0e96053a9e54af5473c61a90b202334bd2752466 Mon Sep 17 00:00:00 2001 From: Kugaaa Date: Tue, 16 Apr 2024 11:48:30 +0800 Subject: [PATCH 1/4] Fix langchain4j#935: LocalAiChatModel tried to return TokenUsage result --- .../java/dev/langchain4j/model/localai/LocalAiChatModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/langchain4j-local-ai/src/main/java/dev/langchain4j/model/localai/LocalAiChatModel.java b/langchain4j-local-ai/src/main/java/dev/langchain4j/model/localai/LocalAiChatModel.java index 9d293d4f21..be011533ce 100644 --- a/langchain4j-local-ai/src/main/java/dev/langchain4j/model/localai/LocalAiChatModel.java +++ b/langchain4j-local-ai/src/main/java/dev/langchain4j/model/localai/LocalAiChatModel.java @@ -104,7 +104,7 @@ private Response generate(List messages, return Response.from( aiMessageFrom(response), - null, + tokenUsageFrom(response.usage()), finishReasonFrom(response.choices().get(0).finishReason()) ); } From 98fdbb2df3bd6751cef9c76b262d366c8bb55481 Mon Sep 17 00:00:00 2001 From: Kugaaa Date: Tue, 16 Apr 2024 14:14:48 +0800 Subject: [PATCH 2/4] Fix langchain4j#935: TokenUsage.add return if origin token usage is null --- .../main/java/dev/langchain4j/model/output/TokenUsage.java | 6 +++++- .../java/dev/langchain4j/model/output/TokenUsageTest.java | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/langchain4j-core/src/main/java/dev/langchain4j/model/output/TokenUsage.java b/langchain4j-core/src/main/java/dev/langchain4j/model/output/TokenUsage.java index 9abda4fd7f..9cbc435811 100644 --- a/langchain4j-core/src/main/java/dev/langchain4j/model/output/TokenUsage.java +++ b/langchain4j-core/src/main/java/dev/langchain4j/model/output/TokenUsage.java @@ -82,9 +82,13 @@ public Integer totalTokenCount() { *

Fields which are null in both responses will be null in the result. * * @param that The token usage to add to this one. - * @return a new {@link TokenUsage} instance with the token usage of both responses added together. + * @return a new {@link TokenUsage} instance with the token usage of both responses added together, + * or null if origin token usage is null (such as LocalAiChatModule). */ public TokenUsage add(TokenUsage that) { + if (that == null) { + return null; + } return new TokenUsage( sum(this.inputTokenCount, that.inputTokenCount), sum(this.outputTokenCount, that.outputTokenCount), diff --git a/langchain4j-core/src/test/java/dev/langchain4j/model/output/TokenUsageTest.java b/langchain4j-core/src/test/java/dev/langchain4j/model/output/TokenUsageTest.java index d27458293b..1e70797fda 100644 --- a/langchain4j-core/src/test/java/dev/langchain4j/model/output/TokenUsageTest.java +++ b/langchain4j-core/src/test/java/dev/langchain4j/model/output/TokenUsageTest.java @@ -91,4 +91,10 @@ public void test_sum() { .isEqualTo(new TokenUsage(null, null, null)); } + @Test + public void test_add_null() { + assertThat(new TokenUsage(1, 2, 3) + .add(null)) + .isNull(); + } } \ No newline at end of file From 2cd49415c6ad2deb17e4c220b1a40696dac740a9 Mon Sep 17 00:00:00 2001 From: Kugaaa Date: Mon, 13 May 2024 19:58:47 +0800 Subject: [PATCH 3/4] DOC:fix the TokenUsage.add doc --- .../src/main/java/dev/langchain4j/model/output/TokenUsage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/langchain4j-core/src/main/java/dev/langchain4j/model/output/TokenUsage.java b/langchain4j-core/src/main/java/dev/langchain4j/model/output/TokenUsage.java index 4f748917c9..56d3cd5e69 100644 --- a/langchain4j-core/src/main/java/dev/langchain4j/model/output/TokenUsage.java +++ b/langchain4j-core/src/main/java/dev/langchain4j/model/output/TokenUsage.java @@ -86,7 +86,7 @@ public Integer totalTokenCount() { * * @param that The token usage to add to this one. * @return a new {@link TokenUsage} instance with the token usage of both responses added together, - * or null if origin token usage is null (such as LocalAiChatModule). + * or a new instance of the original fields if that token usage is null. */ public TokenUsage add(TokenUsage that) { if (that == null) { From fa130ed814387e0af95a0e276b6a181c8b7f64a6 Mon Sep 17 00:00:00 2001 From: Kugaaa Date: Mon, 13 May 2024 20:01:08 +0800 Subject: [PATCH 4/4] Fix langchain4j#935: InternalOpenAiHelper.tokenUsageFrom return TokenUsage instance with null fields when openAi Usage is null --- .../java/dev/langchain4j/model/openai/InternalOpenAiHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/langchain4j-open-ai/src/main/java/dev/langchain4j/model/openai/InternalOpenAiHelper.java b/langchain4j-open-ai/src/main/java/dev/langchain4j/model/openai/InternalOpenAiHelper.java index b2dd71e667..c382bdfe3f 100644 --- a/langchain4j-open-ai/src/main/java/dev/langchain4j/model/openai/InternalOpenAiHelper.java +++ b/langchain4j-open-ai/src/main/java/dev/langchain4j/model/openai/InternalOpenAiHelper.java @@ -237,7 +237,7 @@ private static ToolExecutionRequest toToolExecutionRequest(ToolCall toolCall) { public static TokenUsage tokenUsageFrom(Usage openAiUsage) { if (openAiUsage == null) { - return null; + return new TokenUsage(); } return new TokenUsage( openAiUsage.promptTokens(),