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