Skip to content

Commit 171cacd

Browse files
committed
adding java file
1 parent f9157b3 commit 171cacd

File tree

2 files changed

+149
-0
lines changed

2 files changed

+149
-0
lines changed

articles/ai-foundry/agents/how-to/tools/azure-ai-search-samples.md

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

zone-pivots/zone-pivot-groups.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1286,6 +1286,8 @@ groups:
12861286
title: JavaScript
12871287
- id: python
12881288
title: Python
1289+
- id: java
1290+
title: Java
12891291
- id: rest
12901292
title: REST API
12911293
- id: selection-connected-agents

0 commit comments

Comments
 (0)