@@ -516,3 +516,150 @@ curl --request GET \
516
516
```
517
517
518
518
::: 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