Skip to content

Commit 6df4319

Browse files
authored
Merge pull request #6404 from aahill/agents-java
adding Java samples - part 1
2 parents c2d9774 + 51e1016 commit 6df4319

File tree

7 files changed

+721
-20
lines changed

7 files changed

+721
-20
lines changed

articles/ai-foundry/agents/how-to/tools/azure-ai-search-samples.md

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,3 +535,144 @@ curl --request GET \
535535
```
536536

537537
:::zone-end
538+
539+
:::zone pivot="java"
540+
541+
## Code example
542+
543+
```java
544+
package com.example.agents;
545+
546+
import com.azure.ai.agents.persistent.MessagesClient;
547+
import com.azure.ai.agents.persistent.PersistentAgentsAdministrationClient;
548+
import com.azure.ai.agents.persistent.PersistentAgentsClient;
549+
import com.azure.ai.agents.persistent.PersistentAgentsClientBuilder;
550+
import com.azure.ai.agents.persistent.RunsClient;
551+
import com.azure.ai.agents.persistent.ThreadsClient;
552+
import com.azure.ai.agents.persistent.models.AISearchIndexResource;
553+
import com.azure.ai.agents.persistent.models.AzureAISearchToolDefinition;
554+
import com.azure.ai.agents.persistent.models.AzureAISearchToolResource;
555+
import com.azure.ai.agents.persistent.models.CreateAgentOptions;
556+
import com.azure.ai.agents.persistent.models.CreateRunOptions;
557+
import com.azure.ai.agents.persistent.models.MessageImageFileContent;
558+
import com.azure.ai.agents.persistent.models.MessageRole;
559+
import com.azure.ai.agents.persistent.models.MessageTextContent;
560+
import com.azure.ai.agents.persistent.models.PersistentAgent;
561+
import com.azure.ai.agents.persistent.models.PersistentAgentThread;
562+
import com.azure.ai.agents.persistent.models.RunStatus;
563+
import com.azure.ai.agents.persistent.models.ThreadMessage;
564+
import com.azure.ai.agents.persistent.models.ThreadRun;
565+
import com.azure.ai.agents.persistent.models.ToolResources;
566+
import com.azure.ai.agents.persistent.models.MessageContent;
567+
import com.azure.core.http.rest.PagedIterable;
568+
import com.azure.identity.DefaultAzureCredentialBuilder;
569+
570+
import java.net.URL;
571+
import java.io.File;
572+
import java.io.FileNotFoundException;
573+
import java.net.URISyntaxException;
574+
import java.nio.file.Path;
575+
import java.util.Arrays;
576+
577+
public class AgentExample {
578+
579+
public static void main(String[] args) throws FileNotFoundException, URISyntaxException {
580+
581+
// variables for authenticating requests to the agent service
582+
String projectEndpoint = System.getenv("PROJECT_ENDPOINT");
583+
String modelName = System.getenv("MODEL_DEPLOYMENT_NAME");
584+
String aiSearchConnectionId = System.getenv("AZURE_AI_CONNECTION_ID");
585+
String indexName = "my-index";
586+
587+
PersistentAgentsClientBuilder clientBuilder = new PersistentAgentsClientBuilder().endpoint(projectEndpoint)
588+
.credential(new DefaultAzureCredentialBuilder().build());
589+
PersistentAgentsClient agentsClient = clientBuilder.buildClient();
590+
PersistentAgentsAdministrationClient administrationClient = agentsClient.getPersistentAgentsAdministrationClient();
591+
ThreadsClient threadsClient = agentsClient.getThreadsClient();
592+
MessagesClient messagesClient = agentsClient.getMessagesClient();
593+
RunsClient runsClient = agentsClient.getRunsClient();
594+
595+
AISearchIndexResource indexResource = new AISearchIndexResource()
596+
.setIndexConnectionId(aiSearchConnectionId)
597+
.setIndexName(indexName);
598+
ToolResources toolResources = new ToolResources()
599+
.setAzureAISearch(new AzureAISearchToolResource()
600+
.setIndexList(Arrays.asList(indexResource)));
601+
602+
String agentName = "ai_search_example";
603+
CreateAgentOptions createAgentOptions = new CreateAgentOptions(modelName)
604+
.setName(agentName)
605+
.setInstructions("You are a helpful agent")
606+
.setTools(Arrays.asList(new AzureAISearchToolDefinition()))
607+
.setToolResources(toolResources);
608+
PersistentAgent agent = administrationClient.createAgent(createAgentOptions);
609+
610+
PersistentAgentThread thread = threadsClient.createThread();
611+
ThreadMessage createdMessage = messagesClient.createMessage(
612+
thread.getId(),
613+
MessageRole.USER,
614+
"<question about information in search index>");
615+
616+
try {
617+
//run agent
618+
CreateRunOptions createRunOptions = new CreateRunOptions(thread.getId(), agent.getId())
619+
.setAdditionalInstructions("");
620+
ThreadRun threadRun = runsClient.createRun(createRunOptions);
621+
622+
waitForRunCompletion(thread.getId(), threadRun, runsClient);
623+
printRunMessages(messagesClient, thread.getId());
624+
625+
} catch (InterruptedException e) {
626+
throw new RuntimeException(e);
627+
} finally {
628+
//cleanup
629+
threadsClient.deleteThread(thread.getId());
630+
administrationClient.deleteAgent(agent.getId());
631+
}
632+
}
633+
// A helper function to print messages from the agent
634+
public static void printRunMessages(MessagesClient messagesClient, String threadId) {
635+
636+
PagedIterable<ThreadMessage> runMessages = messagesClient.listMessages(threadId);
637+
for (ThreadMessage message : runMessages) {
638+
System.out.print(String.format("%1$s - %2$s : ", message.getCreatedAt(), message.getRole()));
639+
for (MessageContent contentItem : message.getContent()) {
640+
if (contentItem instanceof MessageTextContent) {
641+
System.out.print((((MessageTextContent) contentItem).getText().getValue()));
642+
} else if (contentItem instanceof MessageImageFileContent) {
643+
String imageFileId = (((MessageImageFileContent) contentItem).getImageFile().getFileId());
644+
System.out.print("Image from ID: " + imageFileId);
645+
}
646+
System.out.println();
647+
}
648+
}
649+
}
650+
651+
// a helper function to wait until a run has completed running
652+
public static void waitForRunCompletion(String threadId, ThreadRun threadRun, RunsClient runsClient)
653+
throws InterruptedException {
654+
655+
do {
656+
Thread.sleep(500);
657+
threadRun = runsClient.getRun(threadId, threadRun.getId());
658+
}
659+
while (
660+
threadRun.getStatus() == RunStatus.QUEUED
661+
|| threadRun.getStatus() == RunStatus.IN_PROGRESS
662+
|| threadRun.getStatus() == RunStatus.REQUIRES_ACTION);
663+
664+
if (threadRun.getStatus() == RunStatus.FAILED) {
665+
System.out.println(threadRun.getLastError().getMessage());
666+
}
667+
}
668+
private static Path getFile(String fileName) throws FileNotFoundException, URISyntaxException {
669+
URL resource = AgentExample.class.getClassLoader().getResource(fileName);
670+
if (resource == null) {
671+
throw new FileNotFoundException("File not found");
672+
}
673+
File file = new File(resource.toURI());
674+
return file.toPath();
675+
}
676+
}
677+
```
678+
:::zone-end

articles/ai-foundry/agents/how-to/tools/code-interpreter-samples.md

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,3 +565,150 @@ curl --request GET \
565565
```
566566

567567
:::zone-end
568+
569+
570+
:::zone pivot="java"
571+
572+
## Download an example file
573+
574+
Files can be uploaded and then referenced by agents or messages. Once it's uploaded it can be added to the tool utility for referencing. You can find a downloadable example file on [GitHub](https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/ai/ai-agents/data/syntheticCompanyQuarterlyResults.csv).
575+
576+
## Code example
577+
578+
```java
579+
package com.example.agents;
580+
581+
import com.azure.ai.agents.persistent.FilesClient;
582+
import com.azure.ai.agents.persistent.MessagesClient;
583+
import com.azure.ai.agents.persistent.PersistentAgentsAdministrationClient;
584+
import com.azure.ai.agents.persistent.PersistentAgentsClient;
585+
import com.azure.ai.agents.persistent.PersistentAgentsClientBuilder;
586+
import com.azure.ai.agents.persistent.RunsClient;
587+
import com.azure.ai.agents.persistent.ThreadsClient;
588+
import com.azure.ai.agents.persistent.models.CodeInterpreterToolDefinition;
589+
import com.azure.ai.agents.persistent.models.CreateAgentOptions;
590+
import com.azure.ai.agents.persistent.models.CreateRunOptions;
591+
import com.azure.ai.agents.persistent.models.FileDetails;
592+
import com.azure.ai.agents.persistent.models.FileInfo;
593+
import com.azure.ai.agents.persistent.models.FilePurpose;
594+
import com.azure.ai.agents.persistent.models.MessageAttachment;
595+
import com.azure.ai.agents.persistent.models.MessageImageFileContent;
596+
import com.azure.ai.agents.persistent.models.MessageRole;
597+
import com.azure.ai.agents.persistent.models.MessageTextContent;
598+
import com.azure.ai.agents.persistent.models.PersistentAgent;
599+
import com.azure.ai.agents.persistent.models.PersistentAgentThread;
600+
import com.azure.ai.agents.persistent.models.RunStatus;
601+
import com.azure.ai.agents.persistent.models.ThreadMessage;
602+
import com.azure.ai.agents.persistent.models.ThreadRun;
603+
import com.azure.ai.agents.persistent.models.UploadFileRequest;
604+
import com.azure.ai.agents.persistent.models.MessageContent;
605+
import com.azure.core.http.rest.PagedIterable;
606+
import com.azure.core.util.BinaryData;
607+
import com.azure.identity.DefaultAzureCredentialBuilder;
608+
609+
import java.net.URL;
610+
import java.io.File;
611+
import java.io.FileNotFoundException;
612+
import java.net.URISyntaxException;
613+
import java.nio.file.Path;
614+
import java.util.Arrays;
615+
616+
public class AgentExample {
617+
618+
public static void main(String[] args) throws FileNotFoundException, URISyntaxException {
619+
620+
// variables for authenticating requests to the agent service
621+
String projectEndpoint = System.getenv("PROJECT_ENDPOINT");
622+
String modelName = System.getenv("MODEL_DEPLOYMENT_NAME");
623+
624+
PersistentAgentsClientBuilder clientBuilder = new PersistentAgentsClientBuilder().endpoint(projectEndpoint)
625+
.credential(new DefaultAzureCredentialBuilder().build());
626+
PersistentAgentsClient agentsClient = clientBuilder.buildClient();
627+
PersistentAgentsAdministrationClient administrationClient = agentsClient.getPersistentAgentsAdministrationClient();
628+
ThreadsClient threadsClient = agentsClient.getThreadsClient();
629+
MessagesClient messagesClient = agentsClient.getMessagesClient();
630+
RunsClient runsClient = agentsClient.getRunsClient();
631+
FilesClient filesClient = agentsClient.getFilesClient();
632+
633+
Path myFile = getFile("syntheticCompanyQuarterlyResults.csv");
634+
635+
String agentName = "code_interpreter_file_attachment_example";
636+
CodeInterpreterToolDefinition ciTool = new CodeInterpreterToolDefinition();
637+
CreateAgentOptions createAgentOptions = new CreateAgentOptions(modelName).setName(agentName).setInstructions("You are a helpful agent").setTools(Arrays.asList(ciTool));
638+
PersistentAgent agent = administrationClient.createAgent(createAgentOptions);
639+
640+
FileInfo uploadedFile = filesClient.uploadFile(new UploadFileRequest(
641+
new FileDetails(BinaryData.fromFile(myFile))
642+
.setFilename("sample.csv"), FilePurpose.AGENTS));
643+
644+
MessageAttachment messageAttachment = new MessageAttachment(Arrays.asList(BinaryData.fromObject(ciTool))).setFileId(uploadedFile.getId());
645+
646+
PersistentAgentThread thread = threadsClient.createThread();
647+
ThreadMessage createdMessage = messagesClient.createMessage(
648+
thread.getId(),
649+
MessageRole.USER,
650+
"Could you analyze the uploaded CSV file for me?",
651+
Arrays.asList(messageAttachment),
652+
null);
653+
654+
try {
655+
//run agent
656+
CreateRunOptions createRunOptions = new CreateRunOptions(thread.getId(), agent.getId()).setAdditionalInstructions("");
657+
ThreadRun threadRun = runsClient.createRun(createRunOptions);
658+
659+
waitForRunCompletion(thread.getId(), threadRun, runsClient);
660+
printRunMessages(messagesClient, thread.getId());
661+
} catch (InterruptedException e) {
662+
throw new RuntimeException(e);
663+
} finally {
664+
//cleanup
665+
threadsClient.deleteThread(thread.getId());
666+
administrationClient.deleteAgent(agent.getId());
667+
}
668+
}
669+
// A helper function to print messages from the agent
670+
public static void printRunMessages(MessagesClient messagesClient, String threadId) {
671+
672+
PagedIterable<ThreadMessage> runMessages = messagesClient.listMessages(threadId);
673+
for (ThreadMessage message : runMessages) {
674+
System.out.print(String.format("%1$s - %2$s : ", message.getCreatedAt(), message.getRole()));
675+
for (MessageContent contentItem : message.getContent()) {
676+
if (contentItem instanceof MessageTextContent) {
677+
System.out.print((((MessageTextContent) contentItem).getText().getValue()));
678+
} else if (contentItem instanceof MessageImageFileContent) {
679+
String imageFileId = (((MessageImageFileContent) contentItem).getImageFile().getFileId());
680+
System.out.print("Image from ID: " + imageFileId);
681+
}
682+
System.out.println();
683+
}
684+
}
685+
}
686+
687+
// a helper function to wait until a run has completed running
688+
public static void waitForRunCompletion(String threadId, ThreadRun threadRun, RunsClient runsClient)
689+
throws InterruptedException {
690+
691+
do {
692+
Thread.sleep(500);
693+
threadRun = runsClient.getRun(threadId, threadRun.getId());
694+
}
695+
while (
696+
threadRun.getStatus() == RunStatus.QUEUED
697+
|| threadRun.getStatus() == RunStatus.IN_PROGRESS
698+
|| threadRun.getStatus() == RunStatus.REQUIRES_ACTION);
699+
700+
if (threadRun.getStatus() == RunStatus.FAILED) {
701+
System.out.println(threadRun.getLastError().getMessage());
702+
}
703+
}
704+
private static Path getFile(String fileName) throws FileNotFoundException, URISyntaxException {
705+
URL resource = AgentExample.class.getClassLoader().getResource(fileName);
706+
if (resource == null) {
707+
throw new FileNotFoundException("File not found");
708+
}
709+
File file = new File(resource.toURI());
710+
return file.toPath();
711+
}
712+
}
713+
```
714+
:::zone-end

0 commit comments

Comments
 (0)