@@ -535,3 +535,150 @@ curl --request GET \
535535```
536536
537537::: 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