@@ -535,3 +535,150 @@ curl --request GET \
535
535
```
536
536
537
537
::: zone-end
538
+
539
+ :::zone pivot="java"
540
+
541
+ ``` java
542
+ package com.example.agents ;
543
+
544
+ import com.azure.ai.agents.persistent.FilesClient ;
545
+ import com.azure.ai.agents.persistent.MessagesClient ;
546
+ import com.azure.ai.agents.persistent.PersistentAgentsAdministrationClient ;
547
+ import com.azure.ai.agents.persistent.PersistentAgentsClient ;
548
+ import com.azure.ai.agents.persistent.PersistentAgentsClientBuilder ;
549
+ import com.azure.ai.agents.persistent.RunsClient ;
550
+ import com.azure.ai.agents.persistent.ThreadsClient ;
551
+ import com.azure.ai.agents.persistent.models.AISearchIndexResource ;
552
+ import com.azure.ai.agents.persistent.models.AzureAISearchToolDefinition ;
553
+ import com.azure.ai.agents.persistent.models.AzureAISearchToolResource ;
554
+ import com.azure.ai.agents.persistent.models.CodeInterpreterToolDefinition ;
555
+ import com.azure.ai.agents.persistent.models.CreateAgentOptions ;
556
+ import com.azure.ai.agents.persistent.models.CreateRunOptions ;
557
+ import com.azure.ai.agents.persistent.models.FileDetails ;
558
+ import com.azure.ai.agents.persistent.models.FileInfo ;
559
+ import com.azure.ai.agents.persistent.models.FilePurpose ;
560
+ import com.azure.ai.agents.persistent.models.MessageAttachment ;
561
+ import com.azure.ai.agents.persistent.models.MessageImageFileContent ;
562
+ import com.azure.ai.agents.persistent.models.MessageRole ;
563
+ import com.azure.ai.agents.persistent.models.MessageTextContent ;
564
+ import com.azure.ai.agents.persistent.models.PersistentAgent ;
565
+ import com.azure.ai.agents.persistent.models.PersistentAgentThread ;
566
+ import com.azure.ai.agents.persistent.models.RunStatus ;
567
+ import com.azure.ai.agents.persistent.models.ThreadMessage ;
568
+ import com.azure.ai.agents.persistent.models.ThreadRun ;
569
+ import com.azure.ai.agents.persistent.models.ToolResources ;
570
+ import com.azure.ai.agents.persistent.models.UploadFileRequest ;
571
+ import com.azure.ai.agents.persistent.models.MessageContent ;
572
+ import com.azure.core.http.rest.PagedIterable ;
573
+ import com.azure.core.util.BinaryData ;
574
+ import com.azure.identity.DefaultAzureCredentialBuilder ;
575
+
576
+ import java.net.URL ;
577
+ import java.io.File ;
578
+ import java.io.FileNotFoundException ;
579
+ import java.net.URISyntaxException ;
580
+ import java.nio.file.Path ;
581
+ import java.util.Arrays ;
582
+
583
+ public class AgentExample {
584
+
585
+ public static void main (String [] args ) throws FileNotFoundException , URISyntaxException {
586
+
587
+ // variables for authenticating requests to the agent service
588
+ String projectEndpoint = " https://aahi-may-resource.services.ai.azure.com/api/projects/aahi-may" ;// System.getenv("PROJECT_ENDPOINT");
589
+ String modelName = " gpt-4o" ;// System.getenv("MODEL_DEPLOYMENT_NAME");
590
+ String aiSearchConnectionId = " /subscriptions/1f790876-6c63-4bc6-9fc6-62780b3d3e05/resourceGroups/rg-aahi-8164/providers/Microsoft.CognitiveServices/accounts/aahi-may-resource/connections/aahisearchservice" ; // System.getenv("AZURE_AI_CONNECTION_ID");
591
+ String indexName = " my-index" ;
592
+
593
+ PersistentAgentsClientBuilder clientBuilder = new PersistentAgentsClientBuilder (). endpoint(projectEndpoint)
594
+ .credential(new DefaultAzureCredentialBuilder (). build());
595
+ PersistentAgentsClient agentsClient = clientBuilder. buildClient();
596
+ PersistentAgentsAdministrationClient administrationClient = agentsClient. getPersistentAgentsAdministrationClient();
597
+ ThreadsClient threadsClient = agentsClient. getThreadsClient();
598
+ MessagesClient messagesClient = agentsClient. getMessagesClient();
599
+ RunsClient runsClient = agentsClient. getRunsClient();
600
+
601
+ AISearchIndexResource indexResource = new AISearchIndexResource ()
602
+ .setIndexConnectionId(aiSearchConnectionId)
603
+ .setIndexName(indexName);
604
+ ToolResources toolResources = new ToolResources ()
605
+ .setAzureAISearch(new AzureAISearchToolResource ()
606
+ .setIndexList(Arrays . asList(indexResource)));
607
+
608
+ String agentName = " ai_search_example" ;
609
+ CreateAgentOptions createAgentOptions = new CreateAgentOptions (modelName)
610
+ .setName(agentName)
611
+ .setInstructions(" You are a helpful agent" )
612
+ .setTools(Arrays . asList(new AzureAISearchToolDefinition ()))
613
+ .setToolResources(toolResources);
614
+ PersistentAgent agent = administrationClient. createAgent(createAgentOptions);
615
+
616
+ PersistentAgentThread thread = threadsClient. createThread();
617
+ ThreadMessage createdMessage = messagesClient. createMessage(
618
+ thread. getId(),
619
+ MessageRole . USER ,
620
+ " <question about information in search index>" );
621
+
622
+ try {
623
+ // run agent
624
+ CreateRunOptions createRunOptions = new CreateRunOptions (thread. getId(), agent. getId())
625
+ .setAdditionalInstructions(" " );
626
+ ThreadRun threadRun = runsClient. createRun(createRunOptions);
627
+
628
+ waitForRunCompletion(thread. getId(), threadRun, runsClient);
629
+ printRunMessages(messagesClient, thread. getId());
630
+
631
+ } catch (InterruptedException e) {
632
+ throw new RuntimeException (e);
633
+ } finally {
634
+ // cleanup
635
+ threadsClient. deleteThread(thread. getId());
636
+ administrationClient. deleteAgent(agent. getId());
637
+ }
638
+ }
639
+ // A helper function to print messages from the agent
640
+ public static void printRunMessages (MessagesClient messagesClient , String threadId ) {
641
+
642
+ PagedIterable<ThreadMessage > runMessages = messagesClient. listMessages(threadId);
643
+ for (ThreadMessage message : runMessages) {
644
+ System . out. print(String . format(" %1$s - %2$s : " , message. getCreatedAt(), message. getRole()));
645
+ for (MessageContent contentItem : message. getContent()) {
646
+ if (contentItem instanceof MessageTextContent ) {
647
+ System . out. print((((MessageTextContent ) contentItem). getText(). getValue()));
648
+ } else if (contentItem instanceof MessageImageFileContent ) {
649
+ String imageFileId = (((MessageImageFileContent ) contentItem). getImageFile(). getFileId());
650
+ System . out. print(" Image from ID: " + imageFileId);
651
+ }
652
+ System . out. println();
653
+ }
654
+ }
655
+ }
656
+
657
+ // a helper function to wait until a run has completed running
658
+ public static void waitForRunCompletion (String threadId , ThreadRun threadRun , RunsClient runsClient )
659
+ throws InterruptedException {
660
+
661
+ do {
662
+ Thread . sleep(500 );
663
+ threadRun = runsClient. getRun(threadId, threadRun. getId());
664
+ }
665
+ while (
666
+ threadRun. getStatus() == RunStatus . QUEUED
667
+ || threadRun. getStatus() == RunStatus . IN_PROGRESS
668
+ || threadRun. getStatus() == RunStatus . REQUIRES_ACTION );
669
+
670
+ if (threadRun. getStatus() == RunStatus . FAILED ) {
671
+ System . out. println(threadRun. getLastError(). getMessage());
672
+ }
673
+ }
674
+ private static Path getFile (String fileName ) throws FileNotFoundException , URISyntaxException {
675
+ URL resource = AgentExample . class. getClassLoader(). getResource(fileName);
676
+ if (resource == null ) {
677
+ throw new FileNotFoundException (" File not found" );
678
+ }
679
+ File file = new File (resource. toURI());
680
+ return file. toPath();
681
+ }
682
+ }
683
+ ```
684
+ ::: zone-end
0 commit comments