@@ -515,4 +515,150 @@ curl --request GET \
515
515
-H " Authorization: Bearer $AGENT_TOKEN "
516
516
```
517
517
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
+ ```
518
664
::: zone-end
0 commit comments