Skip to content

Commit 914a828

Browse files
committed
agent as tool
1 parent ef6d2a3 commit 914a828

File tree

7 files changed

+93
-4
lines changed

7 files changed

+93
-4
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.javaaidev.agenticpatterns.examples.agentastool;
2+
3+
import com.javaaidev.agenticpatterns.examples.agentastool.RestAPITestCaseGenerationAgent.RestAPITestCaseGenerationResponse;
4+
import com.javaaidev.agenticpatterns.taskexecution.TaskExecutionAgent;
5+
import org.springframework.ai.chat.client.ChatClient;
6+
import org.springframework.ai.chat.client.ChatClient.ChatClientRequestSpec;
7+
8+
public class RestAPITestCaseGenerationAgent extends
9+
TaskExecutionAgent<Void, RestAPITestCaseGenerationResponse> {
10+
11+
protected RestAPITestCaseGenerationAgent(ChatClient chatClient) {
12+
super(chatClient);
13+
}
14+
15+
@Override
16+
protected String getPromptTemplate() {
17+
return """
18+
Goal: Write Python code to test a REST API.
19+
20+
Requirements:
21+
- The API is responsible for creating a new user.
22+
- Use a POST request with JSON content to create a new user.
23+
- When creation is successful, the API returns a 201 code.
24+
- The API url is http://localhost:8080/api/v1/user.
25+
- User data has a defined structure, don't generate it yourself, use the tool to generate it.
26+
""";
27+
}
28+
29+
@Override
30+
protected void updateRequest(ChatClientRequestSpec spec) {
31+
spec.functions("userGenerationAgent");
32+
}
33+
34+
public record RestAPITestCaseGenerationResponse(String code) {
35+
36+
}
37+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.javaaidev.agenticpatterns.examples.agentastool;
2+
3+
import org.springframework.ai.chat.client.ChatClient;
4+
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
5+
import org.springframework.context.annotation.Bean;
6+
import org.springframework.context.annotation.Configuration;
7+
8+
@Configuration
9+
public class RestAPITestCaseGenerationConfiguration {
10+
11+
@Bean
12+
public RestAPITestCaseGenerationAgent restAPITestCaseGenerationAgent(
13+
ChatClient.Builder chatClientBuilder,
14+
SimpleLoggerAdvisor simpleLoggerAdvisor) {
15+
return new RestAPITestCaseGenerationAgent(
16+
chatClientBuilder.defaultAdvisors(simpleLoggerAdvisor).build());
17+
}
18+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.javaaidev.agenticpatterns.examples.agentastool;
2+
3+
import com.javaaidev.agenticpatterns.examples.agentastool.RestAPITestCaseGenerationAgent.RestAPITestCaseGenerationResponse;
4+
import org.springframework.web.bind.annotation.PostMapping;
5+
import org.springframework.web.bind.annotation.RequestMapping;
6+
import org.springframework.web.bind.annotation.RestController;
7+
8+
@RestController
9+
@RequestMapping("/restapi_testcase")
10+
public class RestAPITestCaseGenerationController {
11+
12+
private final RestAPITestCaseGenerationAgent agent;
13+
14+
public RestAPITestCaseGenerationController(RestAPITestCaseGenerationAgent agent) {
15+
this.agent = agent;
16+
}
17+
18+
@PostMapping
19+
public RestAPITestCaseGenerationResponse generateTestCase() {
20+
return agent.call(null);
21+
}
22+
}

examples/src/main/java/com/javaaidev/agenticpatterns/examples/taskexecution/UserGenerationAgent.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,13 @@
55
import com.javaaidev.agenticpatterns.taskexecution.TaskExecutionAgent;
66
import java.util.List;
77
import java.util.Map;
8+
import java.util.function.Function;
89
import org.jspecify.annotations.Nullable;
910
import org.springframework.ai.chat.client.ChatClient;
1011

11-
public class UserGenerationAgent extends TaskExecutionAgent<UserGenerationRequest, List<User>> {
12+
public class UserGenerationAgent extends
13+
TaskExecutionAgent<UserGenerationRequest, List<User>> implements
14+
Function<UserGenerationRequest, List<User>> {
1215

1316
public UserGenerationAgent(ChatClient chatClient) {
1417
super(chatClient);

examples/src/main/java/com/javaaidev/agenticpatterns/examples/taskexecution/UserGenerationConfiguration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
55
import org.springframework.context.annotation.Bean;
66
import org.springframework.context.annotation.Configuration;
7+
import org.springframework.context.annotation.Description;
78

89
@Configuration
910
public class UserGenerationConfiguration {
1011

1112
@Bean
13+
@Description("Generate test user")
1214
public UserGenerationAgent userGenerationAgent(
1315
ChatClient.Builder chatClientBuilder,
1416
SimpleLoggerAdvisor simpleLoggerAdvisor) {

examples/src/main/resources/application.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ spring:
77
api-key: ${OPENAI_API_KEY:}
88
chat:
99
options:
10-
model: gpt-3.5-turbo
11-
temperature: 0.
10+
model: gpt-4o
11+
temperature: 0.0
1212
logging:
1313
level:
1414
org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor: DEBUG

task-execution/src/main/java/com/javaaidev/agenticpatterns/taskexecution/TaskExecutionAgent.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.HashMap;
99
import java.util.Map;
1010
import java.util.Optional;
11+
import java.util.function.Function;
1112
import org.jspecify.annotations.Nullable;
1213
import org.springframework.ai.chat.client.ChatClient;
1314
import org.springframework.ai.chat.client.ChatClient.ChatClientRequestSpec;
@@ -20,7 +21,8 @@
2021
* @param <Request> Type of task input
2122
* @param <Response> Type of task output
2223
*/
23-
public abstract class TaskExecutionAgent<Request, Response> extends Agent {
24+
public abstract class TaskExecutionAgent<Request, Response> extends Agent implements
25+
Function<Request, Response> {
2426

2527
/**
2628
* Get the prompt template
@@ -61,6 +63,11 @@ protected Map<String, Object> getPromptContext(@Nullable Request request) {
6163
protected void updateRequest(ChatClientRequestSpec spec) {
6264
}
6365

66+
@Override
67+
public Response apply(Request request) {
68+
return call(request);
69+
}
70+
6471
public Response call(@Nullable Request request) {
6572
var template = getPromptTemplate();
6673
if (template.isBlank()) {

0 commit comments

Comments
 (0)