From 7c67094f8195259c347b68d873ac4ee75269ba64 Mon Sep 17 00:00:00 2001 From: "r.shi" Date: Thu, 19 Dec 2024 23:33:02 +0800 Subject: [PATCH 1/5] feat: support customize model name --- src/main/java/org/devlive/sdk/openai/OpenAiClient.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/org/devlive/sdk/openai/OpenAiClient.java b/src/main/java/org/devlive/sdk/openai/OpenAiClient.java index ccb508b..3fb2de4 100644 --- a/src/main/java/org/devlive/sdk/openai/OpenAiClient.java +++ b/src/main/java/org/devlive/sdk/openai/OpenAiClient.java @@ -185,6 +185,13 @@ public OpenAiClientBuilder model(CompletionModel model) return this; } + + public OpenAiClientBuilder model(String model) + { + this.model = model; + return this; + } + private String getDefaultHost() { if (ObjectUtils.isEmpty(this.provider)) { From cd345cab1e54ea03747a3af3150d21ffedf686c4 Mon Sep 17 00:00:00 2001 From: "r.shi" Date: Fri, 20 Dec 2024 00:32:32 +0800 Subject: [PATCH 2/5] feat: optimize and add some test --- .../devlive/sdk/openai/entity/ChatEntity.java | 25 ++++++++++++++----- .../devlive/sdk/openai/OpenAiClientTest.java | 25 +++++++++++++++++++ 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/devlive/sdk/openai/entity/ChatEntity.java b/src/main/java/org/devlive/sdk/openai/entity/ChatEntity.java index 4bfd366..d575d49 100644 --- a/src/main/java/org/devlive/sdk/openai/entity/ChatEntity.java +++ b/src/main/java/org/devlive/sdk/openai/entity/ChatEntity.java @@ -13,6 +13,9 @@ import org.devlive.sdk.openai.utils.EnumsUtils; import java.util.List; +import java.util.Objects; + +import static org.devlive.sdk.openai.model.CompletionModel.GPT_35_TURBO; @Data @Builder @@ -47,7 +50,7 @@ public class ChatEntity private ChatEntity(ChatEntityBuilder builder) { if (ObjectUtils.isEmpty(builder.model)) { - builder.model(CompletionModel.GPT_35_TURBO); + builder.model(GPT_35_TURBO); } this.model = builder.model; this.messages = builder.messages; @@ -73,7 +76,7 @@ public static class ChatEntityBuilder public ChatEntityBuilder model(CompletionModel model) { if (ObjectUtils.isEmpty(model)) { - model = CompletionModel.GPT_35_TURBO; + model = GPT_35_TURBO; } switch (model) { case GPT_35_TURBO: @@ -96,6 +99,11 @@ public ChatEntityBuilder model(CompletionModel model) return this; } + public ChatEntityBuilder model(String model) { + this.model = model; + return this; + } + public ChatEntityBuilder temperature(Double temperature) { if (temperature < 0 || temperature > 2) { @@ -108,11 +116,16 @@ public ChatEntityBuilder temperature(Double temperature) public ChatEntityBuilder maxTokens(Integer maxTokens) { CompletionModel completionModel = EnumsUtils.getCompleteModel(this.model); - if (ObjectUtils.isNotEmpty(this.model) && maxTokens > completionModel.getMaxTokens()) { - throw new ParamException(String.format("Invalid maxTokens: %s, Cannot be larger than the model default configuration %s", maxTokens, completionModel.getMaxTokens())); + if(Objects.isNull(completionModel)){ + this.maxTokens = maxTokens; + return this; + }else { + if (ObjectUtils.isNotEmpty(this.model) && maxTokens > completionModel.getMaxTokens()) { + throw new ParamException(String.format("Invalid maxTokens: %s, Cannot be larger than the model default configuration %s", maxTokens, completionModel.getMaxTokens())); + } + this.maxTokens = maxTokens; + return this; } - this.maxTokens = maxTokens; - return this; } private ChatEntityBuilder stream() diff --git a/src/test/java/org/devlive/sdk/openai/OpenAiClientTest.java b/src/test/java/org/devlive/sdk/openai/OpenAiClientTest.java index cd19897..5266e08 100644 --- a/src/test/java/org/devlive/sdk/openai/OpenAiClientTest.java +++ b/src/test/java/org/devlive/sdk/openai/OpenAiClientTest.java @@ -15,6 +15,7 @@ import org.devlive.sdk.common.exception.RequestException; import org.devlive.sdk.openai.model.CompletionModel; import org.devlive.sdk.openai.model.EditModel; +import org.devlive.sdk.openai.response.ChatResponse; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -94,6 +95,30 @@ public void testCreateCompletion() Assert.assertTrue(client.createCompletion(configure).getChoices().size() > 0); } + @Test + public void testCustomizedModel() + { + client = OpenAiClient.builder() + .apiHost(System.getProperty("proxy.host")) + .apiKey(System.getProperty("openai.token")) + .model("text-davinci-003") + .build(); + + List messages = Lists.newArrayList(); + messages.add(MessageEntity.builder() + .content("Hello, please show me a jok!") + .build()); + + ChatEntity configure = ChatEntity.builder() + .messages(messages) + .model("text-davinci-003") + .build(); + ChatResponse chatCompletion = client.createChatCompletion(configure); + String content = chatCompletion.getChoices().get(0).getMessage().getContent(); + // System.out.println(content); + Assert.assertNotNull(content); + } + @Test public void testCreateChatCompletion() { From 3840ceb8dcdfecffe77c770ad7482f6c667e9c0b Mon Sep 17 00:00:00 2001 From: "r.shi" Date: Fri, 20 Dec 2024 11:49:26 +0800 Subject: [PATCH 3/5] fix: check style error --- .../org/devlive/sdk/openai/OpenAiClient.java | 1 - .../devlive/sdk/openai/entity/ChatEntity.java | 38 ++++++++++--------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/devlive/sdk/openai/OpenAiClient.java b/src/main/java/org/devlive/sdk/openai/OpenAiClient.java index 3fb2de4..6858ce5 100644 --- a/src/main/java/org/devlive/sdk/openai/OpenAiClient.java +++ b/src/main/java/org/devlive/sdk/openai/OpenAiClient.java @@ -185,7 +185,6 @@ public OpenAiClientBuilder model(CompletionModel model) return this; } - public OpenAiClientBuilder model(String model) { this.model = model; diff --git a/src/main/java/org/devlive/sdk/openai/entity/ChatEntity.java b/src/main/java/org/devlive/sdk/openai/entity/ChatEntity.java index d575d49..cb7ccad 100644 --- a/src/main/java/org/devlive/sdk/openai/entity/ChatEntity.java +++ b/src/main/java/org/devlive/sdk/openai/entity/ChatEntity.java @@ -99,10 +99,11 @@ public ChatEntityBuilder model(CompletionModel model) return this; } - public ChatEntityBuilder model(String model) { - this.model = model; - return this; - } + public ChatEntityBuilder model(String model) + { + this.model = model; + return this; + } public ChatEntityBuilder temperature(Double temperature) { @@ -113,20 +114,23 @@ public ChatEntityBuilder temperature(Double temperature) return this; } - public ChatEntityBuilder maxTokens(Integer maxTokens) - { - CompletionModel completionModel = EnumsUtils.getCompleteModel(this.model); - if(Objects.isNull(completionModel)){ - this.maxTokens = maxTokens; - return this; - }else { - if (ObjectUtils.isNotEmpty(this.model) && maxTokens > completionModel.getMaxTokens()) { - throw new ParamException(String.format("Invalid maxTokens: %s, Cannot be larger than the model default configuration %s", maxTokens, completionModel.getMaxTokens())); - } - this.maxTokens = maxTokens; - return this; - } + public ChatEntityBuilder maxTokens(Integer maxTokens) + { + CompletionModel completionModel = EnumsUtils.getCompleteModel(this.model); + if (Objects.isNull(completionModel)) { + this.maxTokens = maxTokens; + return this; + } else { + if (ObjectUtils.isNotEmpty(this.model) + && maxTokens > completionModel.getMaxTokens()) { + throw new ParamException(String.format( + "Invalid maxTokens: %s, Cannot be larger than the model default configuration %s", + maxTokens, completionModel.getMaxTokens())); + } + this.maxTokens = maxTokens; + return this; } + } private ChatEntityBuilder stream() { From 06107d59fb45f295cf6b70a400f2894a68a86cd4 Mon Sep 17 00:00:00 2001 From: "r.shi" Date: Fri, 20 Dec 2024 12:02:12 +0800 Subject: [PATCH 4/5] fix: check style error --- .../org/devlive/sdk/common/DefaultClient.java | 11 ++--- .../devlive/sdk/openai/entity/ChatEntity.java | 42 +++++++++---------- 2 files changed, 25 insertions(+), 28 deletions(-) diff --git a/src/main/java/org/devlive/sdk/common/DefaultClient.java b/src/main/java/org/devlive/sdk/common/DefaultClient.java index 0e01c2f..b26fc6e 100644 --- a/src/main/java/org/devlive/sdk/common/DefaultClient.java +++ b/src/main/java/org/devlive/sdk/common/DefaultClient.java @@ -80,8 +80,7 @@ public CompleteResponse createCompletion(CompletionEntity configure) configure.setStream(true); this.createEventSource(url, configure); return null; - } - else { + } else { return this.api.fetchCompletions(url, configure) .blockingGet(); } @@ -111,8 +110,7 @@ public ChatResponse createChatCompletion(ChatEntity configure) configure.setStream(true); this.createEventSource(url, configure); return null; - } - else { + } else { return this.api.fetchChatCompletions(url, configure) .blockingGet(); } @@ -266,7 +264,7 @@ public AssistantsEntity createAssistants(AssistantsEntity configure) } public AssistantsFileEntity createAssistantsFile(String fileId, - String assistantId) + String assistantId) { String url = String.format(ProviderUtils.getUrl(provider, UrlModel.FETCH_ASSISTANTS_FILES), assistantId); Map configure = Maps.newHashMap(); @@ -384,8 +382,7 @@ private void createEventSource(String url, Object configure) .post(RequestBody.create(MultipartBodyUtils.JSON, mapper.writeValueAsString(configure))) .build(); factory.newEventSource(request, this.listener); - } - catch (Exception e) { + } catch (Exception e) { throw new RequestException(String.format("Failed to create event source: %s", e.getMessage())); } } diff --git a/src/main/java/org/devlive/sdk/openai/entity/ChatEntity.java b/src/main/java/org/devlive/sdk/openai/entity/ChatEntity.java index cb7ccad..aa62047 100644 --- a/src/main/java/org/devlive/sdk/openai/entity/ChatEntity.java +++ b/src/main/java/org/devlive/sdk/openai/entity/ChatEntity.java @@ -99,11 +99,11 @@ public ChatEntityBuilder model(CompletionModel model) return this; } - public ChatEntityBuilder model(String model) - { - this.model = model; - return this; - } + public ChatEntityBuilder model(String model) + { + this.model = model; + return this; + } public ChatEntityBuilder temperature(Double temperature) { @@ -114,23 +114,23 @@ public ChatEntityBuilder temperature(Double temperature) return this; } - public ChatEntityBuilder maxTokens(Integer maxTokens) - { - CompletionModel completionModel = EnumsUtils.getCompleteModel(this.model); - if (Objects.isNull(completionModel)) { - this.maxTokens = maxTokens; - return this; - } else { - if (ObjectUtils.isNotEmpty(this.model) - && maxTokens > completionModel.getMaxTokens()) { - throw new ParamException(String.format( - "Invalid maxTokens: %s, Cannot be larger than the model default configuration %s", - maxTokens, completionModel.getMaxTokens())); - } - this.maxTokens = maxTokens; - return this; + public ChatEntityBuilder maxTokens(Integer maxTokens) + { + CompletionModel completionModel = EnumsUtils.getCompleteModel(this.model); + if (Objects.isNull(completionModel)) { + this.maxTokens = maxTokens; + return this; + } else { + if (ObjectUtils.isNotEmpty(this.model) + && maxTokens > completionModel.getMaxTokens()) { + throw new ParamException(String.format( + "Invalid maxTokens: %s, Cannot be larger than the model default configuration %s", + maxTokens, completionModel.getMaxTokens())); + } + this.maxTokens = maxTokens; + return this; + } } - } private ChatEntityBuilder stream() { From d946d3997230b7cd88ed57172ce38953f203e1e1 Mon Sep 17 00:00:00 2001 From: "r.shi" Date: Fri, 20 Dec 2024 14:31:57 +0800 Subject: [PATCH 5/5] feat: support use customize model name #50 --- src/main/java/org/devlive/sdk/common/DefaultClient.java | 9 ++++++--- .../java/org/devlive/sdk/openai/entity/ChatEntity.java | 3 ++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/devlive/sdk/common/DefaultClient.java b/src/main/java/org/devlive/sdk/common/DefaultClient.java index b26fc6e..ae1c930 100644 --- a/src/main/java/org/devlive/sdk/common/DefaultClient.java +++ b/src/main/java/org/devlive/sdk/common/DefaultClient.java @@ -80,7 +80,8 @@ public CompleteResponse createCompletion(CompletionEntity configure) configure.setStream(true); this.createEventSource(url, configure); return null; - } else { + } + else { return this.api.fetchCompletions(url, configure) .blockingGet(); } @@ -110,7 +111,8 @@ public ChatResponse createChatCompletion(ChatEntity configure) configure.setStream(true); this.createEventSource(url, configure); return null; - } else { + } + else { return this.api.fetchChatCompletions(url, configure) .blockingGet(); } @@ -382,7 +384,8 @@ private void createEventSource(String url, Object configure) .post(RequestBody.create(MultipartBodyUtils.JSON, mapper.writeValueAsString(configure))) .build(); factory.newEventSource(request, this.listener); - } catch (Exception e) { + } + catch (Exception e) { throw new RequestException(String.format("Failed to create event source: %s", e.getMessage())); } } diff --git a/src/main/java/org/devlive/sdk/openai/entity/ChatEntity.java b/src/main/java/org/devlive/sdk/openai/entity/ChatEntity.java index aa62047..09787fb 100644 --- a/src/main/java/org/devlive/sdk/openai/entity/ChatEntity.java +++ b/src/main/java/org/devlive/sdk/openai/entity/ChatEntity.java @@ -120,7 +120,8 @@ public ChatEntityBuilder maxTokens(Integer maxTokens) if (Objects.isNull(completionModel)) { this.maxTokens = maxTokens; return this; - } else { + } + else { if (ObjectUtils.isNotEmpty(this.model) && maxTokens > completionModel.getMaxTokens()) { throw new ParamException(String.format(