Skip to content

Commit 4a2f38d

Browse files
committed
Qianfan: cleanup
1 parent 7abb501 commit 4a2f38d

File tree

9 files changed

+151
-128
lines changed

9 files changed

+151
-128
lines changed

models/langchain4j-community-qianfan/src/main/java/dev/langchain4j/community/model/qianfan/InternalQianfanHelper.java

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import static dev.langchain4j.model.output.FinishReason.TOOL_EXECUTION;
1111
import static java.util.stream.Collectors.toList;
1212

13+
import dev.langchain4j.Internal;
1314
import dev.langchain4j.agent.tool.ToolExecutionRequest;
1415
import dev.langchain4j.agent.tool.ToolSpecification;
1516
import dev.langchain4j.community.model.qianfan.client.chat.ChatCompletionResponse;
@@ -33,35 +34,20 @@
3334
import java.util.List;
3435
import java.util.Optional;
3536

36-
public class InternalQianfanHelper {
37+
@Internal
38+
class InternalQianfanHelper {
3739

38-
public static List<Function> toFunctions(Collection<ToolSpecification> toolSpecifications) {
40+
private InternalQianfanHelper() throws InstantiationException {
41+
throw new InstantiationException("Can not instantiate utility class");
42+
}
43+
44+
static List<Function> toFunctions(Collection<ToolSpecification> toolSpecifications) {
3945
return toolSpecifications.stream()
4046
.map(InternalQianfanHelper::toFunction)
4147
.collect(toList());
4248
}
4349

44-
private static Function toFunction(ToolSpecification toolSpecification) {
45-
return Function.builder()
46-
.name(toolSpecification.name())
47-
.description(getOrDefault(toolSpecification.description(), toolSpecification.name()))
48-
.parameters(toOpenAiParameters(toolSpecification))
49-
.build();
50-
}
51-
52-
private static Parameters toOpenAiParameters(ToolSpecification toolSpecification) {
53-
if (toolSpecification.parameters() != null) {
54-
JsonObjectSchema parameters = toolSpecification.parameters();
55-
return Parameters.builder()
56-
.properties(toMap(parameters.properties()))
57-
.required(parameters.required())
58-
.build();
59-
} else {
60-
return Parameters.builder().build();
61-
}
62-
}
63-
64-
public static Message toQianfanMessage(ChatMessage message) {
50+
static Message toQianfanMessage(ChatMessage message) {
6551

6652
if (message instanceof final UserMessage userMessage) {
6753
return Message.builder()
@@ -135,7 +121,7 @@ static TokenUsage tokenUsageFrom(EmbeddingResponse response) {
135121
.orElse(null);
136122
}
137123

138-
public static FinishReason finishReasonFrom(String finishReason) {
124+
static FinishReason finishReasonFrom(String finishReason) {
139125

140126
if (Utils.isNullOrBlank(finishReason)) {
141127
return null;
@@ -150,7 +136,7 @@ public static FinishReason finishReasonFrom(String finishReason) {
150136
};
151137
}
152138

153-
public static AiMessage aiMessageFrom(ChatCompletionResponse response) {
139+
static AiMessage aiMessageFrom(ChatCompletionResponse response) {
154140

155141
FunctionCall functionCall = response.getFunctionCall();
156142

@@ -182,7 +168,7 @@ static String getSystemMessage(List<ChatMessage> messages) {
182168
return ((SystemMessage) systemMessages.get(0)).text();
183169
}
184170

185-
public static List<Message> toOpenAiMessages(List<ChatMessage> messages) {
171+
static List<Message> toOpenAiMessages(List<ChatMessage> messages) {
186172
List<Message> aiMessages = messages.stream()
187173
.filter(chatMessage -> !(chatMessage instanceof SystemMessage))
188174
.map(InternalQianfanHelper::toQianfanMessage)
@@ -196,4 +182,24 @@ public static List<Message> toOpenAiMessages(List<ChatMessage> messages) {
196182
aiMessages.remove(0);
197183
return aiMessages;
198184
}
185+
186+
private static Function toFunction(ToolSpecification toolSpecification) {
187+
return Function.builder()
188+
.name(toolSpecification.name())
189+
.description(getOrDefault(toolSpecification.description(), toolSpecification.name()))
190+
.parameters(toOpenAiParameters(toolSpecification))
191+
.build();
192+
}
193+
194+
private static Parameters toOpenAiParameters(ToolSpecification toolSpecification) {
195+
if (toolSpecification.parameters() != null) {
196+
JsonObjectSchema parameters = toolSpecification.parameters();
197+
return Parameters.builder()
198+
.properties(toMap(parameters.properties()))
199+
.required(parameters.required())
200+
.build();
201+
} else {
202+
return Parameters.builder().build();
203+
}
204+
}
199205
}

models/langchain4j-community-qianfan/src/main/java/dev/langchain4j/community/model/qianfan/QianfanStreamingChatModel.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
import dev.langchain4j.agent.tool.ToolSpecification;
88
import dev.langchain4j.community.model.qianfan.client.QianfanClient;
9-
import dev.langchain4j.community.model.qianfan.client.QianfanStreamingResponseBuilder;
109
import dev.langchain4j.community.model.qianfan.client.SyncOrAsyncOrStreaming;
1110
import dev.langchain4j.community.model.qianfan.client.chat.ChatCompletionRequest;
1211
import dev.langchain4j.community.model.qianfan.client.chat.ChatCompletionResponse;

models/langchain4j-community-qianfan/src/main/java/dev/langchain4j/community/model/qianfan/QianfanStreamingLanguageModel.java

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package dev.langchain4j.community.model.qianfan;
22

3+
import static dev.langchain4j.internal.Utils.getOrDefault;
4+
import static dev.langchain4j.spi.ServiceHelper.loadFactories;
5+
36
import dev.langchain4j.community.model.qianfan.client.QianfanClient;
4-
import dev.langchain4j.community.model.qianfan.client.QianfanStreamingResponseBuilder;
57
import dev.langchain4j.community.model.qianfan.client.SyncOrAsyncOrStreaming;
68
import dev.langchain4j.community.model.qianfan.client.completion.CompletionRequest;
79
import dev.langchain4j.community.model.qianfan.client.completion.CompletionResponse;
@@ -10,12 +12,8 @@
1012
import dev.langchain4j.model.StreamingResponseHandler;
1113
import dev.langchain4j.model.language.StreamingLanguageModel;
1214
import dev.langchain4j.model.output.Response;
13-
1415
import java.net.Proxy;
1516

16-
import static dev.langchain4j.internal.Utils.getOrDefault;
17-
import static dev.langchain4j.spi.ServiceHelper.loadFactories;
18-
1917
/**
2018
* see details here: https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Nlks5zkzu
2119
*/
@@ -30,28 +28,31 @@ public class QianfanStreamingLanguageModel implements StreamingLanguageModel {
3028
private final Integer topK;
3129
private final String endpoint;
3230

33-
public QianfanStreamingLanguageModel(String baseUrl,
34-
String apiKey,
35-
String secretKey,
36-
Double temperature,
37-
Integer topK,
38-
Double topP,
39-
String modelName,
40-
String endpoint,
41-
Double penaltyScore,
42-
Boolean logRequests,
43-
Boolean logResponses,
44-
Proxy proxy
45-
) {
31+
public QianfanStreamingLanguageModel(
32+
String baseUrl,
33+
String apiKey,
34+
String secretKey,
35+
Double temperature,
36+
Integer topK,
37+
Double topP,
38+
String modelName,
39+
String endpoint,
40+
Double penaltyScore,
41+
Boolean logRequests,
42+
Boolean logResponses,
43+
Proxy proxy) {
4644
if (Utils.isNullOrBlank(apiKey) || Utils.isNullOrBlank(secretKey)) {
47-
throw new IllegalArgumentException(" api key and secret key must be defined. It can be generated here: https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application");
45+
throw new IllegalArgumentException(
46+
" api key and secret key must be defined. It can be generated here: https://console.bce.baidu.com/qianfan/ais/console/applicationConsole/application");
4847
}
4948

5049
this.modelName = modelName;
51-
this.endpoint = Utils.isNullOrBlank(endpoint) ? QianfanLanguageModelNameEnum.fromModelName(modelName) : endpoint;
50+
this.endpoint =
51+
Utils.isNullOrBlank(endpoint) ? QianfanLanguageModelNameEnum.fromModelName(modelName) : endpoint;
5252

5353
if (Utils.isNullOrBlank(this.endpoint)) {
54-
throw new IllegalArgumentException("Qianfan is no such model name. You can see model name here: https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Nlks5zkzu");
54+
throw new IllegalArgumentException(
55+
"Qianfan is no such model name. You can see model name here: https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Nlks5zkzu");
5556
}
5657

5758
this.baseUrl = getOrDefault(baseUrl, "https://aip.baidubce.com");
@@ -96,8 +97,7 @@ public void generate(String prompt, StreamingResponseHandler<String> handler) {
9697
.execute();
9798
}
9899

99-
private static void handle(CompletionResponse partialResponse,
100-
StreamingResponseHandler<String> handler) {
100+
private static void handle(CompletionResponse partialResponse, StreamingResponseHandler<String> handler) {
101101
String result = partialResponse.getResult();
102102
if (Utils.isNullOrBlank(result)) {
103103
return;
@@ -106,7 +106,8 @@ private static void handle(CompletionResponse partialResponse,
106106
}
107107

108108
public static QianfanStreamingLanguageModelBuilder builder() {
109-
for (QianfanStreamingLanguageModelBuilderFactory factory : loadFactories(QianfanStreamingLanguageModelBuilderFactory.class)) {
109+
for (QianfanStreamingLanguageModelBuilderFactory factory :
110+
loadFactories(QianfanStreamingLanguageModelBuilderFactory.class)) {
110111
return factory.get();
111112
}
112113
return new QianfanStreamingLanguageModelBuilder();
@@ -205,8 +206,7 @@ public QianfanStreamingLanguageModel build() {
205206
penaltyScore,
206207
logRequests,
207208
logResponses,
208-
proxy
209-
);
209+
proxy);
210210
}
211211
}
212212
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
package dev.langchain4j.community.model.qianfan.client;
1+
package dev.langchain4j.community.model.qianfan;
22

33
import static dev.langchain4j.community.model.qianfan.InternalQianfanHelper.finishReasonFrom;
44
import static java.util.Collections.singletonList;
55
import static java.util.stream.Collectors.toList;
66

77
import dev.langchain4j.agent.tool.ToolExecutionRequest;
8+
import dev.langchain4j.community.model.qianfan.client.Usage;
89
import dev.langchain4j.community.model.qianfan.client.chat.ChatCompletionResponse;
910
import dev.langchain4j.community.model.qianfan.client.chat.FunctionCall;
1011
import dev.langchain4j.community.model.qianfan.client.completion.CompletionResponse;

models/langchain4j-community-qianfan/src/main/java/dev/langchain4j/community/model/qianfan/client/Json.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
package dev.langchain4j.community.model.qianfan.client;
22

3+
import static com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT;
4+
35
import com.fasterxml.jackson.core.JsonProcessingException;
46
import com.fasterxml.jackson.databind.ObjectMapper;
7+
import dev.langchain4j.Internal;
58

6-
import static com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT;
7-
9+
@Internal
810
class Json {
911

10-
static final ObjectMapper OBJECT_MAPPER = new ObjectMapper()
11-
.enable(INDENT_OUTPUT);
12-
13-
Json() {
12+
private Json() throws InstantiationException {
13+
throw new InstantiationException("Can not instantiate utility class");
1414
}
1515

16+
static final ObjectMapper OBJECT_MAPPER = new ObjectMapper().enable(INDENT_OUTPUT);
17+
1618
static String toJson(Object object) {
1719
try {
1820
return OBJECT_MAPPER.writeValueAsString(object);

models/langchain4j-community-qianfan/src/main/java/dev/langchain4j/community/model/qianfan/client/QianfanApi.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,29 @@ interface QianfanApi {
1919

2020
@POST("rpc/2.0/ai_custom/v1/wenxinworkshop/chat/{endpoint}")
2121
@Headers({"Content-Type: application/json"})
22-
Call<ChatCompletionResponse> chatCompletions(@Path(value = "endpoint", encoded = false) String endpoint, @Body ChatCompletionRequest request, @Query("access_token") String accessToken);
22+
Call<ChatCompletionResponse> chatCompletions(
23+
@Path(value = "endpoint") String endpoint,
24+
@Body ChatCompletionRequest request,
25+
@Query("access_token") String accessToken);
2326

2427
@POST("rpc/2.0/ai_custom/v1/wenxinworkshop/completions/{endpoint}")
2528
@Headers({"Content-Type: application/json"})
26-
Call<CompletionResponse> completions(@Path(value = "endpoint", encoded = false) String endpoint, @Body CompletionRequest request, @Query("access_token") String accessToken);
29+
Call<CompletionResponse> completions(
30+
@Path(value = "endpoint") String endpoint,
31+
@Body CompletionRequest request,
32+
@Query("access_token") String accessToken);
2733

2834
@POST("rpc/2.0/ai_custom/v1/wenxinworkshop/embeddings/{endpoint}")
2935
@Headers({"Content-Type: application/json"})
30-
Call<EmbeddingResponse> embeddings(@Path(value = "endpoint", encoded = false) String endpoint, @Body EmbeddingRequest request, @Query("access_token") String accessToken);
36+
Call<EmbeddingResponse> embeddings(
37+
@Path(value = "endpoint") String endpoint,
38+
@Body EmbeddingRequest request,
39+
@Query("access_token") String accessToken);
3140

3241
@GET("oauth/2.0/token")
3342
@Headers({"Content-Type: application/json"})
34-
Call<ChatTokenResponse> getToken(@Query("grant_type") String grantType, @Query("client_id") String clientId, @Query("client_secret") String clientSecret);
35-
43+
Call<ChatTokenResponse> getToken(
44+
@Query("grant_type") String grantType,
45+
@Query("client_id") String clientId,
46+
@Query("client_secret") String clientSecret);
3647
}
37-

0 commit comments

Comments
 (0)