From aec0172e7d5bfe772de0a4ccb7bbf2b6b63e49c1 Mon Sep 17 00:00:00 2001 From: Anthony Anyanwu Date: Sat, 15 Mar 2025 22:47:44 -0700 Subject: [PATCH 1/2] Add support for capturing usage prompt_tokens_details and completion_tokens_details --- .../openai/CompletionTokensDetails.java | 23 +++++++++++++++++++ .../openai/PromptTokensDetails.java | 22 ++++++++++++++++++ .../java/com/theokanning/openai/Usage.java | 12 ++++++++++ .../fixtures/ChatCompletionResult.json | 10 +++++++- .../openai/service/ChatCompletionTest.java | 7 ++++-- 5 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 api/src/main/java/com/theokanning/openai/CompletionTokensDetails.java create mode 100644 api/src/main/java/com/theokanning/openai/PromptTokensDetails.java diff --git a/api/src/main/java/com/theokanning/openai/CompletionTokensDetails.java b/api/src/main/java/com/theokanning/openai/CompletionTokensDetails.java new file mode 100644 index 0000000..b626a79 --- /dev/null +++ b/api/src/main/java/com/theokanning/openai/CompletionTokensDetails.java @@ -0,0 +1,23 @@ +package com.theokanning.openai; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * Breakdown of tokens used in a completion. + */ +@Data +public class CompletionTokensDetails { + + @JsonProperty("reasoning_tokens") + long reasoningTokens; + + @JsonProperty("audio_tokens") + long audioTokens; + + @JsonProperty("accepted_prediction_tokens") + long acceptedPredictionTokens; + + @JsonProperty("rejected_prediction_tokens") + long rejectedPredictionTokens; +} diff --git a/api/src/main/java/com/theokanning/openai/PromptTokensDetails.java b/api/src/main/java/com/theokanning/openai/PromptTokensDetails.java new file mode 100644 index 0000000..a61bd4c --- /dev/null +++ b/api/src/main/java/com/theokanning/openai/PromptTokensDetails.java @@ -0,0 +1,22 @@ +package com.theokanning.openai; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * Breakdown of tokens used in the prompt. + */ +@Data +public class PromptTokensDetails { + /** + * Cached tokens present in the prompt. + */ + @JsonProperty("cached_tokens") + long cachedTokens; + + /** + * Audio input tokens present in the prompt. + */ + @JsonProperty("audio_tokens") + long audioTokens; +} diff --git a/api/src/main/java/com/theokanning/openai/Usage.java b/api/src/main/java/com/theokanning/openai/Usage.java index 1e7eaa5..c2647de 100644 --- a/api/src/main/java/com/theokanning/openai/Usage.java +++ b/api/src/main/java/com/theokanning/openai/Usage.java @@ -25,4 +25,16 @@ public class Usage { */ @JsonProperty("total_tokens") long totalTokens; + + /** + * Breakdown of tokens used in the prompt. + */ + @JsonProperty("prompt_tokens_details") + PromptTokensDetails promptTokensDetails; + + /** + * Breakdown of tokens used in a completion. + */ + @JsonProperty("completion_tokens_details") + CompletionTokensDetails completionTokensDetails; } diff --git a/api/src/test/resources/fixtures/ChatCompletionResult.json b/api/src/test/resources/fixtures/ChatCompletionResult.json index c9757b7..db2bf85 100644 --- a/api/src/test/resources/fixtures/ChatCompletionResult.json +++ b/api/src/test/resources/fixtures/ChatCompletionResult.json @@ -315,6 +315,14 @@ "usage": { "prompt_tokens": 9, "completion_tokens": 12, - "total_tokens": 21 + "total_tokens": 21, + "prompt_tokens_details": { + "cached_tokens": 0 + }, + "completion_tokens_details": { + "reasoning_tokens": 0, + "accepted_prediction_tokens": 0, + "rejected_prediction_tokens": 0 + } } } diff --git a/service/src/test/java/com/theokanning/openai/service/ChatCompletionTest.java b/service/src/test/java/com/theokanning/openai/service/ChatCompletionTest.java index e4cf84d..f91d9f2 100644 --- a/service/src/test/java/com/theokanning/openai/service/ChatCompletionTest.java +++ b/service/src/test/java/com/theokanning/openai/service/ChatCompletionTest.java @@ -43,8 +43,11 @@ void createChatCompletion() { .logitBias(new HashMap<>()) .build(); - List choices = service.createChatCompletion(chatCompletionRequest).getChoices(); - assertEquals(5, choices.size()); + ChatCompletionResult chatCompletionResult = service.createChatCompletion(chatCompletionRequest); + assertEquals(5, chatCompletionResult.getChoices().size()); + assertNotNull(chatCompletionResult.getUsage()); + assertNotNull(chatCompletionResult.getUsage().getPromptTokensDetails()); + assertNotNull(chatCompletionResult.getUsage().getCompletionTokensDetails()); } @Test From dec64d8b6c10039cb7d589fe683277467e06fc6a Mon Sep 17 00:00:00 2001 From: Anthony Anyanwu Date: Sat, 15 Mar 2025 23:20:02 -0700 Subject: [PATCH 2/2] update the build version to 0.22.92 --- README-zh.md | 6 +++--- README.md | 6 +++--- api/pom.xml | 2 +- client/pom.xml | 2 +- example/pom.xml | 4 ++-- pom.xml | 2 +- service/pom.xml | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/README-zh.md b/README-zh.md index 4774555..0328362 100644 --- a/README-zh.md +++ b/README-zh.md @@ -21,14 +21,14 @@ OpenAi4J是一个非官方的Java库,旨在帮助java开发者与OpenAI的GPT ## 导入依赖 ### Gradle -`implementation 'io.github.lambdua::0.22.91'` +`implementation 'io.github.lambdua::0.22.92'` ### Maven ```xml io.github.lambdua service - 0.22.91 + 0.22.92 ``` @@ -61,7 +61,7 @@ static void simpleChat() { io.github.lambdua api - 0.22.91 + 0.22.92 ``` diff --git a/README.md b/README.md index 8ba019b..2ad7007 100644 --- a/README.md +++ b/README.md @@ -25,14 +25,14 @@ applications effortlessly. ## Import ### Gradle -`implementation 'io.github.lambdua::0.22.91'` +`implementation 'io.github.lambdua::0.22.92'` ### Maven ```xml io.github.lambdua service - 0.22.91 + 0.22.92 ``` @@ -67,7 +67,7 @@ To utilize pojos, import the api module: io.github.lambdua api - 0.22.91 + 0.22.92 ``` diff --git a/api/pom.xml b/api/pom.xml index 71913e5..2a7a610 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -6,7 +6,7 @@ io.github.lambdua openai-java - 0.22.91 + 0.22.92 jar api diff --git a/client/pom.xml b/client/pom.xml index f5e3519..86b448b 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -6,7 +6,7 @@ io.github.lambdua openai-java - 0.22.91 + 0.22.92 jar diff --git a/example/pom.xml b/example/pom.xml index 07ffae8..135176c 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -6,7 +6,7 @@ io.github.lambdua example - 0.22.91 + 0.22.92 example @@ -17,7 +17,7 @@ io.github.lambdua service - 0.22.91 + 0.22.92 diff --git a/pom.xml b/pom.xml index 9fcd3f4..abf3e05 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ io.github.lambdua openai-java - 0.22.91 + 0.22.92 pom openai java 版本 https://github.com/Lambdua/openai-java diff --git a/service/pom.xml b/service/pom.xml index fcce0af..7abb611 100644 --- a/service/pom.xml +++ b/service/pom.xml @@ -6,7 +6,7 @@ io.github.lambdua openai-java - 0.22.91 + 0.22.92 jar