29
29
<artifactId >azure-identity</artifactId >
30
30
<version >1.17.0-beta.1</version >
31
31
</dependency >
32
- <dependency >
33
- <groupId >org.slf4j</groupId >
34
- <artifactId >slf4j-api</artifactId >
35
- <version >1.7.32</version >
36
- </dependency >
37
- <dependency >
38
- <groupId >org.slf4j</groupId >
39
- <artifactId >slf4j-simple</artifactId >
40
- <version >1.7.32</version >
41
- </dependency >
42
32
</dependencies >
43
33
```
44
34
@@ -56,122 +46,118 @@ Use the following code to create and run an agent. To run this code, you will ne
56
46
57
47
[ !INCLUDE [ endpoint-string-portal] ( endpoint-string-portal.md )]
58
48
59
- Set this endpoint in an environment variable named ` ProjectEndpoint ` .
49
+ Set this endpoint in an environment variable named ` PROJECT_ENDPOINT ` .
60
50
61
51
[ !INCLUDE [ model-name-portal] ( model-name-portal.md )]
62
52
63
- Save the name of your model deployment name as an environment variable named ` ModelDeploymentName ` .
53
+ Save the name of your model deployment name as an environment variable named ` MODEL_DEPLOYMENT_NAME ` .
64
54
65
55
## Code example
66
56
67
57
``` java
68
58
package com.example.agents ;
69
59
60
+ import com.azure.ai.agents.persistent.MessagesClient ;
61
+ import com.azure.ai.agents.persistent.PersistentAgentsAdministrationClient ;
70
62
import com.azure.ai.agents.persistent.PersistentAgentsClient ;
71
63
import com.azure.ai.agents.persistent.PersistentAgentsClientBuilder ;
72
- import com.azure.ai.agents.persistent.PersistentAgentsAdministrationClient ;
64
+ import com.azure.ai.agents.persistent.RunsClient ;
65
+ import com.azure.ai.agents.persistent.ThreadsClient ;
66
+ import com.azure.ai.agents.persistent.models.CodeInterpreterToolDefinition ;
73
67
import com.azure.ai.agents.persistent.models.CreateAgentOptions ;
74
- import com.azure.ai.agents.persistent.models.CreateThreadAndRunOptions ;
68
+ import com.azure.ai.agents.persistent.models.CreateRunOptions ;
69
+ import com.azure.ai.agents.persistent.models.MessageImageFileContent ;
70
+ import com.azure.ai.agents.persistent.models.MessageRole ;
71
+ import com.azure.ai.agents.persistent.models.MessageTextContent ;
75
72
import com.azure.ai.agents.persistent.models.PersistentAgent ;
73
+ import com.azure.ai.agents.persistent.models.PersistentAgentThread ;
74
+ import com.azure.ai.agents.persistent.models.RunStatus ;
75
+ import com.azure.ai.agents.persistent.models.ThreadMessage ;
76
76
import com.azure.ai.agents.persistent.models.ThreadRun ;
77
- import com.azure.core.credential.TokenCredential ;
78
- import com.azure.core.exception.HttpResponseException ;
79
- import com.azure.core.util.logging.ClientLogger ;
77
+ import com.azure.ai.agents.persistent.models.MessageContent ;
78
+ import com.azure.core.http.rest.PagedIterable ;
80
79
import com.azure.identity.DefaultAzureCredentialBuilder ;
80
+ import java.util.Arrays ;
81
81
82
82
public class Main {
83
- private static final ClientLogger logger = new ClientLogger (Main . class);
84
83
85
- public static void main (String [] args ) {
86
- // Load environment variables with better error handling, supporting both .env and system environment variables
87
- String endpoint = System . getenv(" AZURE_ENDPOINT" );
88
- String projectEndpoint = System . getenv(" PROJECT_ENDPOINT" );
89
- String modelName = System . getenv(" MODEL_DEPLOYMENT_NAME" );
90
- String agentName = System . getenv(" AGENT_NAME" );
91
- String instructions = " You are a helpful assistant that provides clear and concise information." ;
92
-
93
- // Check for required endpoint configuration
94
- if (projectEndpoint == null && endpoint == null ) {
95
- String errorMessage = " Environment variables not configured. Required: either PROJECT_ENDPOINT or AZURE_ENDPOINT must be set." ;
96
- logger. error(" ERROR: {}" , errorMessage);
97
- logger. error(" Please set your environment variables or create a .env file. See README.md for details." );
98
- return ;
99
- }
100
-
101
- // Use AZURE_ENDPOINT as fallback if PROJECT_ENDPOINT not set
102
- if (projectEndpoint == null ) {
103
- projectEndpoint = endpoint;
104
- logger. info(" Using AZURE_ENDPOINT as PROJECT_ENDPOINT: {}" , projectEndpoint);
84
+ public static void printRunMessages (MessagesClient messagesClient , String threadId ) {
85
+
86
+ PagedIterable<ThreadMessage > runMessages = messagesClient. listMessages(threadId);
87
+ for (ThreadMessage message : runMessages) {
88
+ System . out. print(String . format(" %1$s - %2$s : " , message. getCreatedAt(), message. getRole()));
89
+ for (MessageContent contentItem : message. getContent()) {
90
+ if (contentItem instanceof MessageTextContent ) {
91
+ System . out. print((((MessageTextContent ) contentItem). getText(). getValue()));
92
+ } else if (contentItem instanceof MessageImageFileContent ) {
93
+ String imageFileId = (((MessageImageFileContent ) contentItem). getImageFile(). getFileId());
94
+ System . out. print(" Image from ID: " + imageFileId);
95
+ }
96
+ System . out. println();
97
+ }
105
98
}
99
+ }
100
+ public static void waitForRunCompletion (String threadId , ThreadRun threadRun , RunsClient runsClient )
101
+ throws InterruptedException {
106
102
107
- // Set defaults for optional parameters with informative logging
108
- if (modelName == null ) {
109
- modelName = " gpt-4o" ;
110
- logger. info(" No MODEL_DEPLOYMENT_NAME provided, using default: {}" , modelName);
111
- }
112
- if (agentName == null ) {
113
- agentName = " java-quickstart-agent" ;
114
- logger. info(" No AGENT_NAME provided, using default: {}" , agentName);
103
+ // BEGIN: com.azure.ai.agents.persistent.SampleUtils.waitForRunCompletion
104
+
105
+ do {
106
+ Thread . sleep(500 );
107
+ threadRun = runsClient. getRun(threadId, threadRun. getId());
115
108
}
116
- if (instructions == null ) {
117
- instructions = " You are a helpful assistant that provides clear and concise information." ;
118
- logger. info(" No AGENT_INSTRUCTIONS provided, using default instructions" );
109
+ while (
110
+ threadRun. getStatus() == RunStatus . QUEUED
111
+ || threadRun. getStatus() == RunStatus . IN_PROGRESS
112
+ || threadRun. getStatus() == RunStatus . REQUIRES_ACTION );
113
+
114
+ if (threadRun. getStatus() == RunStatus . FAILED ) {
115
+ System . out. println(threadRun. getLastError(). getMessage());
119
116
}
120
117
121
- // Create Azure credential with DefaultAzureCredentialBuilder
122
- // This supports multiple authentication methods including environment variables,
123
- // managed identities, and interactive browser login
124
- logger. info(" Building DefaultAzureCredential" );
125
- TokenCredential credential = new DefaultAzureCredentialBuilder (). build();
118
+ // END: com.azure.ai.agents.persistent.SampleUtils.waitForRunCompletion
119
+ }
120
+ public static void main (String [] args ) {
126
121
127
- try {
128
- // Build the general agents client
129
- logger. info(" Creating PersistentAgentsClient with endpoint: {}" , projectEndpoint);
130
- PersistentAgentsClient agentsClient = new PersistentAgentsClientBuilder ()
131
- .endpoint(projectEndpoint)
132
- .credential(credential)
133
- .buildClient();
134
-
135
- // Derive the administration client
136
- logger. info(" Getting PersistentAgentsAdministrationClient" );
137
- PersistentAgentsAdministrationClient adminClient =
138
- agentsClient. getPersistentAgentsAdministrationClient();
139
-
140
- // Create an agent
141
- logger. info(" Creating agent with name: {}, model: {}" , agentName, modelName);
142
- PersistentAgent agent = adminClient. createAgent(
143
- new CreateAgentOptions (modelName)
144
- .setName(agentName)
145
- .setInstructions(instructions)
146
- );
147
- logger. info(" Agent created: ID={}, Name={}" , agent. getId(), agent. getName());
148
- logger. info(" Agent model: {}" , agent. getModel());
149
-
150
- // Start a thread/run on the general client
151
- logger. info(" Creating thread and run with agent ID: {}" , agent. getId());
152
- ThreadRun runResult = agentsClient. createThreadAndRun(
153
- new CreateThreadAndRunOptions (agent. getId())
154
- );
155
- logger. info(" ThreadRun created: ThreadId={}" , runResult. getThreadId());
156
-
157
- // List available getters on ThreadRun for informational purposes
158
- logger. info(" \n Available getters on ThreadRun:" );
159
- for (var method : ThreadRun . class. getMethods()) {
160
- if (method. getName(). startsWith(" get" )) {
161
- logger. info(" - {}" , method. getName());
162
- }
163
- }
122
+ String projectEndpoint = System . getenv(" PROJECT_ENDPOINT" );
123
+ String modelName = System . getenv(" MODEL_DEPLOYMENT_NAME" );
124
+
125
+ PersistentAgentsClientBuilder clientBuilder = new PersistentAgentsClientBuilder ()
126
+ .endpoint(projectEndpoint)
127
+ .credential(new DefaultAzureCredentialBuilder (). build());
128
+ PersistentAgentsClient agentsClient = clientBuilder. buildClient();
129
+ PersistentAgentsAdministrationClient administrationClient = agentsClient. getPersistentAgentsAdministrationClient();
130
+ ThreadsClient threadsClient = agentsClient. getThreadsClient();
131
+ MessagesClient messagesClient = agentsClient. getMessagesClient();
132
+ RunsClient runsClient = agentsClient. getRunsClient();
133
+
134
+ String agentName = " my-agent" ;
135
+ CreateAgentOptions createAgentOptions = new CreateAgentOptions (modelName)
136
+ .setName(agentName)
137
+ .setInstructions(" You are a helpful agent" )
138
+ .setTools(Arrays . asList(new CodeInterpreterToolDefinition ()));
139
+ PersistentAgent agent = administrationClient. createAgent(createAgentOptions);
140
+
141
+ PersistentAgentThread thread = threadsClient. createThread();
142
+ ThreadMessage createdMessage = messagesClient. createMessage(
143
+ thread. getId(),
144
+ MessageRole . USER ,
145
+ " I need to solve the equation `3x + 11 = 14`. Can you help me?" );
164
146
165
- logger. info(" \n Demo completed successfully!" );
166
-
167
- } catch (HttpResponseException e) {
168
- // Handle service-specific errors with detailed information
169
- int statusCode = e. getResponse(). getStatusCode();
170
- logger. error(" Service error {}: {}" , statusCode, e. getMessage());
171
- logger. error(" Refer to the Azure AI Agents documentation for troubleshooting information." );
172
- } catch (Exception e) {
173
- // Handle general exceptions
174
- logger. error(" Error in agent sample: {}" , e. getMessage(), e);
147
+ try {
148
+ // run agent
149
+ CreateRunOptions createRunOptions = new CreateRunOptions (thread. getId(), agent. getId())
150
+ .setAdditionalInstructions(" " );
151
+ ThreadRun threadRun = runsClient. createRun(createRunOptions);
152
+
153
+ waitForRunCompletion(thread. getId(), threadRun, runsClient);
154
+ printRunMessages(messagesClient, thread. getId());
155
+ } catch (InterruptedException e) {
156
+ throw new RuntimeException (e);
157
+ } finally {
158
+ // cleanup
159
+ threadsClient. deleteThread(thread. getId());
160
+ administrationClient. deleteAgent(agent. getId());
175
161
}
176
162
}
177
163
}
0 commit comments