@@ -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