@@ -565,3 +565,150 @@ curl --request GET \
565
565
```
566
566
567
567
::: 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