Skip to content

Commit 48fa855

Browse files
committed
adding java sample
1 parent 9d0cdc4 commit 48fa855

File tree

1 file changed

+146
-0
lines changed

1 file changed

+146
-0
lines changed

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

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -515,4 +515,150 @@ curl --request GET \
515515
-H "Authorization: Bearer $AGENT_TOKEN"
516516
```
517517

518+
:::zone-end
519+
520+
:::zone pivot="java"
521+
522+
## Download an example file
523+
524+
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).
525+
526+
## Code example
527+
528+
```java
529+
package com.example.agents;
530+
531+
import com.azure.ai.agents.persistent.FilesClient;
532+
import com.azure.ai.agents.persistent.MessagesClient;
533+
import com.azure.ai.agents.persistent.PersistentAgentsAdministrationClient;
534+
import com.azure.ai.agents.persistent.PersistentAgentsClient;
535+
import com.azure.ai.agents.persistent.PersistentAgentsClientBuilder;
536+
import com.azure.ai.agents.persistent.RunsClient;
537+
import com.azure.ai.agents.persistent.ThreadsClient;
538+
import com.azure.ai.agents.persistent.models.CodeInterpreterToolDefinition;
539+
import com.azure.ai.agents.persistent.models.CreateAgentOptions;
540+
import com.azure.ai.agents.persistent.models.CreateRunOptions;
541+
import com.azure.ai.agents.persistent.models.FileDetails;
542+
import com.azure.ai.agents.persistent.models.FileInfo;
543+
import com.azure.ai.agents.persistent.models.FilePurpose;
544+
import com.azure.ai.agents.persistent.models.MessageAttachment;
545+
import com.azure.ai.agents.persistent.models.MessageImageFileContent;
546+
import com.azure.ai.agents.persistent.models.MessageRole;
547+
import com.azure.ai.agents.persistent.models.MessageTextContent;
548+
import com.azure.ai.agents.persistent.models.PersistentAgent;
549+
import com.azure.ai.agents.persistent.models.PersistentAgentThread;
550+
import com.azure.ai.agents.persistent.models.RunStatus;
551+
import com.azure.ai.agents.persistent.models.ThreadMessage;
552+
import com.azure.ai.agents.persistent.models.ThreadRun;
553+
import com.azure.ai.agents.persistent.models.UploadFileRequest;
554+
import com.azure.ai.agents.persistent.models.MessageContent;
555+
import com.azure.core.http.rest.PagedIterable;
556+
import com.azure.core.util.BinaryData;
557+
import com.azure.identity.DefaultAzureCredentialBuilder;
558+
559+
import java.net.URL;
560+
import java.io.File;
561+
import java.io.FileNotFoundException;
562+
import java.net.URISyntaxException;
563+
import java.nio.file.Path;
564+
import java.util.Arrays;
565+
566+
public class AgentExample {
567+
568+
public static void main(String[] args) throws FileNotFoundException, URISyntaxException {
569+
570+
// variables for authenticating requests to the agent service
571+
String projectEndpoint = System.getenv("PROJECT_ENDPOINT");
572+
String modelName = System.getenv("MODEL_DEPLOYMENT_NAME");
573+
574+
PersistentAgentsClientBuilder clientBuilder = new PersistentAgentsClientBuilder().endpoint(projectEndpoint)
575+
.credential(new DefaultAzureCredentialBuilder().build());
576+
PersistentAgentsClient agentsClient = clientBuilder.buildClient();
577+
PersistentAgentsAdministrationClient administrationClient = agentsClient.getPersistentAgentsAdministrationClient();
578+
ThreadsClient threadsClient = agentsClient.getThreadsClient();
579+
MessagesClient messagesClient = agentsClient.getMessagesClient();
580+
RunsClient runsClient = agentsClient.getRunsClient();
581+
FilesClient filesClient = agentsClient.getFilesClient();
582+
583+
Path myFile = getFile("syntheticCompanyQuarterlyResults.csv");
584+
585+
String agentName = "code_interpreter_file_attachment_example";
586+
CodeInterpreterToolDefinition ciTool = new CodeInterpreterToolDefinition();
587+
CreateAgentOptions createAgentOptions = new CreateAgentOptions(modelName).setName(agentName).setInstructions("You are a helpful agent").setTools(Arrays.asList(ciTool));
588+
PersistentAgent agent = administrationClient.createAgent(createAgentOptions);
589+
590+
FileInfo uploadedFile = filesClient.uploadFile(new UploadFileRequest(
591+
new FileDetails(BinaryData.fromFile(myFile))
592+
.setFilename("sample.csv"), FilePurpose.AGENTS));
593+
594+
MessageAttachment messageAttachment = new MessageAttachment(Arrays.asList(BinaryData.fromObject(ciTool))).setFileId(uploadedFile.getId());
595+
596+
PersistentAgentThread thread = threadsClient.createThread();
597+
ThreadMessage createdMessage = messagesClient.createMessage(
598+
thread.getId(),
599+
MessageRole.USER,
600+
"Could you analyze the uploaded CSV file for me?",
601+
Arrays.asList(messageAttachment),
602+
null);
603+
604+
try {
605+
//run agent
606+
CreateRunOptions createRunOptions = new CreateRunOptions(thread.getId(), agent.getId()).setAdditionalInstructions("");
607+
ThreadRun threadRun = runsClient.createRun(createRunOptions);
608+
609+
waitForRunCompletion(thread.getId(), threadRun, runsClient);
610+
printRunMessages(messagesClient, thread.getId());
611+
} catch (InterruptedException e) {
612+
throw new RuntimeException(e);
613+
} finally {
614+
//cleanup
615+
threadsClient.deleteThread(thread.getId());
616+
administrationClient.deleteAgent(agent.getId());
617+
}
618+
}
619+
// A helper function to print messages from the agent
620+
public static void printRunMessages(MessagesClient messagesClient, String threadId) {
621+
622+
PagedIterable<ThreadMessage> runMessages = messagesClient.listMessages(threadId);
623+
for (ThreadMessage message : runMessages) {
624+
System.out.print(String.format("%1$s - %2$s : ", message.getCreatedAt(), message.getRole()));
625+
for (MessageContent contentItem : message.getContent()) {
626+
if (contentItem instanceof MessageTextContent) {
627+
System.out.print((((MessageTextContent) contentItem).getText().getValue()));
628+
} else if (contentItem instanceof MessageImageFileContent) {
629+
String imageFileId = (((MessageImageFileContent) contentItem).getImageFile().getFileId());
630+
System.out.print("Image from ID: " + imageFileId);
631+
}
632+
System.out.println();
633+
}
634+
}
635+
}
636+
637+
// a helper function to wait until a run has completed running
638+
public static void waitForRunCompletion(String threadId, ThreadRun threadRun, RunsClient runsClient)
639+
throws InterruptedException {
640+
641+
do {
642+
Thread.sleep(500);
643+
threadRun = runsClient.getRun(threadId, threadRun.getId());
644+
}
645+
while (
646+
threadRun.getStatus() == RunStatus.QUEUED
647+
|| threadRun.getStatus() == RunStatus.IN_PROGRESS
648+
|| threadRun.getStatus() == RunStatus.REQUIRES_ACTION);
649+
650+
if (threadRun.getStatus() == RunStatus.FAILED) {
651+
System.out.println(threadRun.getLastError().getMessage());
652+
}
653+
}
654+
private static Path getFile(String fileName) throws FileNotFoundException, URISyntaxException {
655+
URL resource = AgentExample.class.getClassLoader().getResource(fileName);
656+
if (resource == null) {
657+
throw new FileNotFoundException("File not found");
658+
}
659+
File file = new File(resource.toURI());
660+
return file.toPath();
661+
}
662+
}
663+
```
518664
:::zone-end

0 commit comments

Comments
 (0)