Skip to content

Commit 92ec4bc

Browse files
committed
Upgrade dependencies, fix imports, and fix MultiChat configuration
1 parent 377b24e commit 92ec4bc

File tree

6 files changed

+62
-99
lines changed

6 files changed

+62
-99
lines changed

build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
plugins {
22
id 'java'
33
id 'org.cyclonedx.bom' version '2.2.0'
4-
id 'com.gorylenko.gradle-git-properties' version '2.4.2'
5-
id 'org.springframework.boot' version '3.4.3'
4+
id 'com.gorylenko.gradle-git-properties' version '2.5.0'
5+
id 'org.springframework.boot' version '3.4.4'
66
id 'io.spring.dependency-management' version '1.1.7'
77
id 'org.springdoc.openapi-gradle-plugin' version '1.9.0'
88
}
@@ -31,10 +31,10 @@ dependencies {
3131
implementation('org.springframework.boot:spring-boot-starter-actuator')
3232
implementation('org.springframework.boot:spring-boot-starter-validation')
3333
implementation 'org.springframework.boot:spring-boot-starter-web'
34-
implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter'
34+
implementation 'org.springframework.ai:spring-ai-starter-model-openai'
3535
implementation 'io.github.springboot-addons:spring-boot-starter-httpclient5-actuator:1.1.1'
3636
implementation 'io.github.springboot-addons:spring-boot-starter-httpclient5-resilience4j:1.1.1'
37-
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.5'
37+
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.6'
3838
testImplementation 'org.springframework.boot:spring-boot-starter-test'
3939
testImplementation 'org.assertj:assertj-core:3.27.3'
4040
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

docs/ENDPOINTS.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ Transfer-Encoding: chunked
4444
{
4545
"content": "Sure! Here's a random joke for you:\n\nWhy don't skeletons fight each other? \nBecause they don’t have the guts! 😄",
4646
"errorMessage": null,
47-
"generationTokens": 29,
47+
"completionTokens": 29,
4848
"modelName": "openai/gpt-4o-2024-11-20",
4949
"promptTokens": 12,
5050
"responseTime": "1s893ms",
@@ -54,7 +54,7 @@ Transfer-Encoding: chunked
5454
{
5555
"content": "What do you call a fish wearing a bowtie? So-fish-ticated!",
5656
"errorMessage": null,
57-
"generationTokens": 0,
57+
"completionTokens": 0,
5858
"modelName": "anthracite-org/magnum-v2-72b",
5959
"promptTokens": 0,
6060
"responseTime": "1s49ms",
@@ -64,7 +64,7 @@ Transfer-Encoding: chunked
6464
{
6565
"content": "Why don't scientists trust atoms? Because they make up everything.",
6666
"errorMessage": null,
67-
"generationTokens": 14,
67+
"completionTokens": 14,
6868
"modelName": "qwen/qvq-72b-preview",
6969
"promptTokens": 41,
7070
"responseTime": "913ms",
@@ -74,7 +74,7 @@ Transfer-Encoding: chunked
7474
{
7575
"content": "Why don't eggs tell jokes? They'd crack each other up!",
7676
"errorMessage": null,
77-
"generationTokens": 15,
77+
"completionTokens": 15,
7878
"modelName": "x-ai/grok-2-1212",
7979
"promptTokens": 11,
8080
"responseTime": "666ms",
@@ -84,7 +84,7 @@ Transfer-Encoding: chunked
8484
{
8585
"content": "Here's a random joke for you:\n\nWhy don't scientists trust atoms?\n\nBecause they make up everything!",
8686
"errorMessage": null,
87-
"generationTokens": 27,
87+
"completionTokens": 27,
8888
"modelName": "anthropic/claude-3.5-haiku-20241022",
8989
"promptTokens": 12,
9090
"responseTime": "1s390ms",
@@ -94,7 +94,7 @@ Transfer-Encoding: chunked
9494
{
9595
"content": "Here's a random joke for you:\n\n**Why don't sharks eat clowns?**\n\nBecause they taste funny![1]",
9696
"errorMessage": null,
97-
"generationTokens": 25,
97+
"completionTokens": 25,
9898
"modelName": "perplexity/llama-3.1-sonar-huge-128k-online",
9999
"promptTokens": 5,
100100
"responseTime": "3s108ms",
@@ -104,7 +104,7 @@ Transfer-Encoding: chunked
104104
{
105105
"content": "Here's one:\n\nWhat do you call a fake noodle?\n\nAn impasta!",
106106
"errorMessage": null,
107-
"generationTokens": 17,
107+
"completionTokens": 17,
108108
"modelName": "meta-llama/llama-3.3-70b-instruct",
109109
"promptTokens": 15,
110110
"responseTime": "1s703ms",
@@ -114,7 +114,7 @@ Transfer-Encoding: chunked
114114
{
115115
"content": "What do you call fake spaghetti? An impasta",
116116
"errorMessage": null,
117-
"generationTokens": 13,
117+
"completionTokens": 13,
118118
"modelName": "mistralai/mistral-large-2411",
119119
"promptTokens": 8,
120120
"responseTime": "725ms",
@@ -124,7 +124,7 @@ Transfer-Encoding: chunked
124124
{
125125
"content": " Why did the chicken cross the playground? To get to the other slide!",
126126
"errorMessage": null,
127-
"generationTokens": 15,
127+
"completionTokens": 15,
128128
"modelName": "pygmalionai/mythalion-13b",
129129
"promptTokens": 30,
130130
"responseTime": "5s288ms",
@@ -134,7 +134,7 @@ Transfer-Encoding: chunked
134134
{
135135
"content": "Sure! Here’s a random joke for you:\n\nWhy don’t skeletons fight each other? \nBecause they don’t have the guts! 💀😂",
136136
"errorMessage": null,
137-
"generationTokens": 34,
137+
"completionTokens": 34,
138138
"modelName": "deepseek/deepseek-chat",
139139
"promptTokens": 8,
140140
"responseTime": "4s477ms",
@@ -144,7 +144,7 @@ Transfer-Encoding: chunked
144144
{
145145
"content": "Okay, here's a random one:\n\nWhy don't scientists trust atoms? \n\nBecause they make up everything!\n",
146146
"errorMessage": null,
147-
"generationTokens": 27,
147+
"completionTokens": 27,
148148
"modelName": "google/gemini-2.0-flash-exp:free",
149149
"promptTokens": 6,
150150
"responseTime": "1s94ms",
@@ -154,7 +154,7 @@ Transfer-Encoding: chunked
154154
{
155155
"content": "Of course! Here's a light-hearted joke for you:\n\nWhy did the scarecrow win an award?\n\nBecause he was outstanding in his field! \n\nHope that brought a smile to your face!",
156156
"errorMessage": null,
157-
"generationTokens": 41,
157+
"completionTokens": 41,
158158
"modelName": "amazon/nova-pro-v1",
159159
"promptTokens": 5,
160160
"responseTime": "1s83ms",

src/main/java/me/pacphi/config/Chat.java

Lines changed: 0 additions & 62 deletions
This file was deleted.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package me.pacphi.config;
2+
3+
import org.springframework.boot.web.client.RestClientCustomizer;
4+
import org.springframework.context.annotation.Bean;
5+
import org.springframework.context.annotation.Configuration;
6+
import org.springframework.http.HttpHeaders;
7+
import org.springframework.http.client.SimpleClientHttpRequestFactory;
8+
9+
import java.time.Duration;
10+
11+
@Configuration
12+
public class Http {
13+
14+
@Bean
15+
public RestClientCustomizer restClientCustomizer() {
16+
return restClientBuilder -> {
17+
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
18+
factory.setConnectTimeout((int) Duration.ofMinutes(10).toMillis());
19+
factory.setReadTimeout((int) Duration.ofMinutes(10).toMillis());
20+
restClientBuilder.defaultHeader(HttpHeaders.ACCEPT_ENCODING, "gzip, deflate");
21+
restClientBuilder.requestFactory(factory);
22+
};
23+
}
24+
}

src/main/java/me/pacphi/config/MultiChat.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import io.micrometer.observation.ObservationRegistry;
44
import org.apache.commons.lang3.StringUtils;
5-
import org.springframework.ai.autoconfigure.openai.OpenAiChatProperties;
6-
import org.springframework.ai.autoconfigure.openai.OpenAiConnectionProperties;
75
import org.springframework.ai.chat.client.ChatClient;
86
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
97
import org.springframework.ai.model.SimpleApiKey;
8+
import org.springframework.ai.model.openai.autoconfigure.OpenAiChatProperties;
9+
import org.springframework.ai.model.openai.autoconfigure.OpenAiConnectionProperties;
1010
import org.springframework.ai.model.tool.DefaultToolCallingManager;
1111
import org.springframework.ai.openai.OpenAiChatModel;
1212
import org.springframework.ai.openai.OpenAiChatOptions;
@@ -59,23 +59,23 @@ public Map<String, ChatClient> chatClients(
5959

6060
return multiChatProperties.getOptions().getModels().stream().collect(
6161
Collectors.toMap(
62-
model -> model,
63-
model -> {
64-
OpenAiChatOptions chatOptions = OpenAiChatOptions.fromOptions(chatProperties.getOptions());
65-
chatOptions.setModel(model);
66-
OpenAiChatModel openAiChatModel = new OpenAiChatModel(
67-
openAiApi,
68-
chatProperties.getOptions(),
69-
DefaultToolCallingManager.builder().observationRegistry(observationRegistry).build(),
70-
retryTemplate,
71-
observationRegistry
72-
);
73-
// Create ChatClient with similar configuration to original service
74-
return ChatClient.builder(openAiChatModel)
75-
.defaultAdvisors(
76-
new SimpleLoggerAdvisor())
77-
.build();
78-
}
62+
model -> model,
63+
model -> {
64+
OpenAiChatOptions chatOptions = OpenAiChatOptions.fromOptions(chatProperties.getOptions());
65+
chatOptions.setModel(model);
66+
OpenAiChatModel openAiChatModel = new OpenAiChatModel(
67+
openAiApi,
68+
chatOptions,
69+
DefaultToolCallingManager.builder().observationRegistry(observationRegistry).build(),
70+
retryTemplate,
71+
observationRegistry
72+
);
73+
// Create ChatClient with similar configuration to original service
74+
return ChatClient.builder(openAiChatModel)
75+
.defaultAdvisors(
76+
new SimpleLoggerAdvisor())
77+
.build();
78+
}
7979
)
8080
);
8181
}

src/main/java/me/pacphi/domain/chat/MultiChatResponse.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public record MultiChatResponse(
1010
boolean success,
1111
String errorMessage,
1212
Integer promptTokens,
13+
Integer completionTokens,
1314
Integer totalTokens,
1415
String responseTime
1516
) {
@@ -32,10 +33,10 @@ private static String getFormattedResponseTime(long responseTimeMillis) {
3233
}
3334

3435
public static MultiChatResponse success(String model, String response, Usage usage, long responseTime) {
35-
return new MultiChatResponse(model, response, true, null, usage.getPromptTokens(), usage.getTotalTokens(), getFormattedResponseTime(responseTime));
36+
return new MultiChatResponse(model, response, true, null, usage.getPromptTokens(), usage.getCompletionTokens(), usage.getTotalTokens(), getFormattedResponseTime(responseTime));
3637
}
3738

3839
public static MultiChatResponse failure(String model, String error) {
39-
return new MultiChatResponse(model, null, false, error, null, null, null);
40+
return new MultiChatResponse(model, null, false, error, null, null, null, null);
4041
}
4142
}

0 commit comments

Comments
 (0)