Skip to content

Commit a84ee07

Browse files
committed
adding java samples
1 parent e00a9aa commit a84ee07

File tree

5 files changed

+580
-13
lines changed

5 files changed

+580
-13
lines changed

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

Lines changed: 164 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ services: azure-ai-agent-service
66
manager: nitinme
77
ms.service: azure-ai-agent-service
88
ms.topic: how-to
9-
ms.date: 07/11/2025
9+
ms.date: 08/07/2025
1010
author: aahill
1111
ms.author: aahi
1212
ms.custom: azure-ai-agents
@@ -555,3 +555,166 @@ client.Administration.DeleteAgent(agent.Id);
555555
```
556556
557557
::: zone-end
558+
559+
:::zone pivot="java"
560+
561+
## Code example
562+
563+
```java
564+
package com.example.agents;
565+
566+
import com.azure.ai.agents.persistent.MessagesClient;
567+
import com.azure.ai.agents.persistent.PersistentAgentsAdministrationClient;
568+
import com.azure.ai.agents.persistent.PersistentAgentsClient;
569+
import com.azure.ai.agents.persistent.PersistentAgentsClientBuilder;
570+
import com.azure.ai.agents.persistent.RunsClient;
571+
import com.azure.ai.agents.persistent.ThreadsClient;
572+
import com.azure.ai.agents.persistent.implementation.models.CreateAgentRequest;
573+
import com.azure.ai.agents.persistent.models.AzureFunctionBinding;
574+
import com.azure.ai.agents.persistent.models.AzureFunctionDefinition;
575+
import com.azure.ai.agents.persistent.models.AzureFunctionStorageQueue;
576+
import com.azure.ai.agents.persistent.models.AzureFunctionToolDefinition;
577+
import com.azure.ai.agents.persistent.models.CreateRunOptions;
578+
import com.azure.ai.agents.persistent.models.FunctionDefinition;
579+
import com.azure.ai.agents.persistent.models.MessageImageFileContent;
580+
import com.azure.ai.agents.persistent.models.MessageRole;
581+
import com.azure.ai.agents.persistent.models.MessageTextContent;
582+
import com.azure.ai.agents.persistent.models.PersistentAgent;
583+
import com.azure.ai.agents.persistent.models.PersistentAgentThread;
584+
import com.azure.ai.agents.persistent.models.RunStatus;
585+
import com.azure.ai.agents.persistent.models.ThreadMessage;
586+
import com.azure.ai.agents.persistent.models.ThreadRun;
587+
import com.azure.ai.agents.persistent.models.MessageContent;
588+
import com.azure.core.http.HttpHeaderName;
589+
import com.azure.core.http.rest.PagedIterable;
590+
import com.azure.core.http.rest.RequestOptions;
591+
import com.azure.core.util.BinaryData;
592+
import com.azure.identity.DefaultAzureCredentialBuilder;
593+
import java.util.Arrays;
594+
import java.util.HashMap;
595+
import java.util.Map;
596+
597+
public class AgentExample {
598+
599+
public static void main(String[] args) {
600+
601+
// variables for authenticating requests to the agent service
602+
String projectEndpoint = System.getenv("PROJECT_ENDPOINT");
603+
String modelName = System.getenv("MODEL_DEPLOYMENT_NAME");
604+
String storageQueueUri = System.getenv("STORAGE_QUEUE_URI");
605+
String azureFunctionName = System.getenv("AZURE_FUNCTION_NAME");
606+
607+
PersistentAgentsClientBuilder clientBuilder = new PersistentAgentsClientBuilder().endpoint(projectEndpoint)
608+
.credential(new DefaultAzureCredentialBuilder().build());
609+
PersistentAgentsClient agentsClient = clientBuilder.buildClient();
610+
PersistentAgentsAdministrationClient administrationClient = agentsClient.getPersistentAgentsAdministrationClient();
611+
ThreadsClient threadsClient = agentsClient.getThreadsClient();
612+
MessagesClient messagesClient = agentsClient.getMessagesClient();
613+
RunsClient runsClient = agentsClient.getRunsClient();
614+
615+
FunctionDefinition fnDef = new FunctionDefinition(
616+
azureFunctionName,
617+
BinaryData.fromObject(
618+
mapOf(
619+
"type", "object",
620+
"properties", mapOf(
621+
"location",
622+
mapOf("type", "string", "description", "The location to look up")
623+
),
624+
"required", new String[]{"location"}
625+
)
626+
)
627+
);
628+
AzureFunctionDefinition azureFnDef = new AzureFunctionDefinition(
629+
fnDef,
630+
new AzureFunctionBinding(new AzureFunctionStorageQueue(storageQueueUri, "agent-input")),
631+
new AzureFunctionBinding(new AzureFunctionStorageQueue(storageQueueUri, "agent-output"))
632+
);
633+
AzureFunctionToolDefinition azureFnTool = new AzureFunctionToolDefinition(azureFnDef);
634+
635+
String agentName = "azure_function_example";
636+
RequestOptions requestOptions = new RequestOptions()
637+
.setHeader(HttpHeaderName.fromString("x-ms-enable-preview"), "true");
638+
CreateAgentRequest createAgentRequestObj = new CreateAgentRequest(modelName)
639+
.setName(agentName)
640+
.setInstructions("You are a helpful agent. Use the provided function any time "
641+
+ "you are asked with the weather of any location")
642+
.setTools(Arrays.asList(azureFnTool));
643+
BinaryData createAgentRequest = BinaryData.fromObject(createAgentRequestObj);
644+
PersistentAgent agent = administrationClient.createAgentWithResponse(createAgentRequest, requestOptions)
645+
.getValue().toObject(PersistentAgent.class);
646+
647+
PersistentAgentThread thread = threadsClient.createThread();
648+
ThreadMessage createdMessage = messagesClient.createMessage(
649+
thread.getId(),
650+
MessageRole.USER,
651+
"What is the weather in Seattle, WA?");
652+
653+
try {
654+
//run agent
655+
CreateRunOptions createRunOptions = new CreateRunOptions(thread.getId(), agent.getId())
656+
.setAdditionalInstructions("");
657+
ThreadRun threadRun = runsClient.createRun(createRunOptions);
658+
659+
waitForRunCompletion(thread.getId(), threadRun, runsClient);
660+
printRunMessages(messagesClient, thread.getId());
661+
} catch (InterruptedException e) {
662+
throw new RuntimeException(e);
663+
} finally {
664+
//cleanup
665+
threadsClient.deleteThread(thread.getId());
666+
administrationClient.deleteAgent(agent.getId());
667+
}
668+
}
669+
670+
// Use "Map.of" if available
671+
@SuppressWarnings("unchecked")
672+
private static <T> Map<String, T> mapOf(Object... inputs) {
673+
Map<String, T> map = new HashMap<>();
674+
for (int i = 0; i < inputs.length; i += 2) {
675+
String key = (String) inputs[i];
676+
T value = (T) inputs[i + 1];
677+
map.put(key, value);
678+
}
679+
return map;
680+
}
681+
682+
// A helper function to print messages from the agent
683+
public static void printRunMessages(MessagesClient messagesClient, String threadId) {
684+
685+
PagedIterable<ThreadMessage> runMessages = messagesClient.listMessages(threadId);
686+
for (ThreadMessage message : runMessages) {
687+
System.out.print(String.format("%1$s - %2$s : ", message.getCreatedAt(), message.getRole()));
688+
for (MessageContent contentItem : message.getContent()) {
689+
if (contentItem instanceof MessageTextContent) {
690+
System.out.print((((MessageTextContent) contentItem).getText().getValue()));
691+
} else if (contentItem instanceof MessageImageFileContent) {
692+
String imageFileId = (((MessageImageFileContent) contentItem).getImageFile().getFileId());
693+
System.out.print("Image from ID: " + imageFileId);
694+
}
695+
System.out.println();
696+
}
697+
}
698+
}
699+
700+
// a helper function to wait until a run has completed running
701+
public static void waitForRunCompletion(String threadId, ThreadRun threadRun, RunsClient runsClient)
702+
throws InterruptedException {
703+
704+
do {
705+
Thread.sleep(500);
706+
threadRun = runsClient.getRun(threadId, threadRun.getId());
707+
}
708+
while (
709+
threadRun.getStatus() == RunStatus.QUEUED
710+
|| threadRun.getStatus() == RunStatus.IN_PROGRESS
711+
|| threadRun.getStatus() == RunStatus.REQUIRES_ACTION);
712+
713+
if (threadRun.getStatus() == RunStatus.FAILED) {
714+
System.out.println(threadRun.getLastError().getMessage());
715+
}
716+
}
717+
}
718+
```
719+
720+
:::zone-end

articles/ai-foundry/agents/how-to/tools/bing-code-samples.md

Lines changed: 122 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,126 @@ curl --request GET \
529529
530530
::: zone-end
531531
532-
## Next steps
532+
::: zone pivot="java"
533+
534+
## Code example
535+
536+
```java
537+
package com.example.agents;
538+
539+
import com.azure.ai.agents.persistent.MessagesClient;
540+
import com.azure.ai.agents.persistent.PersistentAgentsAdministrationClient;
541+
import com.azure.ai.agents.persistent.PersistentAgentsClient;
542+
import com.azure.ai.agents.persistent.PersistentAgentsClientBuilder;
543+
import com.azure.ai.agents.persistent.RunsClient;
544+
import com.azure.ai.agents.persistent.ThreadsClient;
545+
import com.azure.ai.agents.persistent.models.BingGroundingSearchConfiguration;
546+
import com.azure.ai.agents.persistent.models.BingGroundingSearchToolParameters;
547+
import com.azure.ai.agents.persistent.models.BingGroundingToolDefinition;
548+
import com.azure.ai.agents.persistent.models.CreateAgentOptions;
549+
import com.azure.ai.agents.persistent.models.CreateRunOptions;
550+
import com.azure.ai.agents.persistent.models.MessageImageFileContent;
551+
import com.azure.ai.agents.persistent.models.MessageRole;
552+
import com.azure.ai.agents.persistent.models.MessageTextContent;
553+
import com.azure.ai.agents.persistent.models.PersistentAgent;
554+
import com.azure.ai.agents.persistent.models.PersistentAgentThread;
555+
import com.azure.ai.agents.persistent.models.RunStatus;
556+
import com.azure.ai.agents.persistent.models.ThreadMessage;
557+
import com.azure.ai.agents.persistent.models.ThreadRun;
558+
import com.azure.ai.agents.persistent.models.MessageContent;
559+
import com.azure.core.http.rest.PagedIterable;
560+
import com.azure.identity.DefaultAzureCredentialBuilder;
561+
562+
import java.util.Arrays;
563+
564+
public class AgentExample {
565+
566+
public static void main(String[] args) {
567+
568+
// variables for authenticating requests to the agent service
569+
String projectEndpoint = System.getenv("PROJECT_ENDPOINT");
570+
String modelName = System.getenv("MODEL_DEPLOYMENT_NAME");
571+
String bingConnectionId = System.getenv("BING_CONNECTION_ID");
572+
573+
PersistentAgentsClientBuilder clientBuilder = new PersistentAgentsClientBuilder().endpoint(projectEndpoint)
574+
.credential(new DefaultAzureCredentialBuilder().build());
575+
PersistentAgentsClient agentsClient = clientBuilder.buildClient();
576+
PersistentAgentsAdministrationClient administrationClient = agentsClient.getPersistentAgentsAdministrationClient();
577+
ThreadsClient threadsClient = agentsClient.getThreadsClient();
578+
MessagesClient messagesClient = agentsClient.getMessagesClient();
579+
RunsClient runsClient = agentsClient.getRunsClient();
580+
581+
BingGroundingSearchConfiguration searchConfiguration = new BingGroundingSearchConfiguration(bingConnectionId);
582+
BingGroundingSearchToolParameters searchToolParameters
583+
= new BingGroundingSearchToolParameters(Arrays.asList(searchConfiguration));
584+
585+
BingGroundingToolDefinition bingGroundingTool = new BingGroundingToolDefinition(searchToolParameters);
586+
587+
String agentName = "bing_grounding_example";
588+
CreateAgentOptions createAgentOptions = new CreateAgentOptions(modelName)
589+
.setName(agentName)
590+
.setInstructions("You are a helpful agent")
591+
.setTools(Arrays.asList(bingGroundingTool));
592+
PersistentAgent agent = administrationClient.createAgent(createAgentOptions);
593+
594+
PersistentAgentThread thread = threadsClient.createThread();
595+
ThreadMessage createdMessage = messagesClient.createMessage(
596+
thread.getId(),
597+
MessageRole.USER,
598+
"How does wikipedia explain Euler's Identity?");
599+
600+
try {
601+
//run agent
602+
CreateRunOptions createRunOptions = new CreateRunOptions(thread.getId(), agent.getId())
603+
.setAdditionalInstructions("");
604+
ThreadRun threadRun = runsClient.createRun(createRunOptions);
605+
606+
waitForRunCompletion(thread.getId(), threadRun, runsClient);
607+
printRunMessages(messagesClient, thread.getId());
608+
} catch (InterruptedException e) {
609+
throw new RuntimeException(e);
610+
} finally {
611+
//cleanup
612+
threadsClient.deleteThread(thread.getId());
613+
administrationClient.deleteAgent(agent.getId());
614+
}
615+
}
616+
617+
// A helper function to print messages from the agent
618+
public static void printRunMessages(MessagesClient messagesClient, String threadId) {
619+
620+
PagedIterable<ThreadMessage> runMessages = messagesClient.listMessages(threadId);
621+
for (ThreadMessage message : runMessages) {
622+
System.out.print(String.format("%1$s - %2$s : ", message.getCreatedAt(), message.getRole()));
623+
for (MessageContent contentItem : message.getContent()) {
624+
if (contentItem instanceof MessageTextContent) {
625+
System.out.print((((MessageTextContent) contentItem).getText().getValue()));
626+
} else if (contentItem instanceof MessageImageFileContent) {
627+
String imageFileId = (((MessageImageFileContent) contentItem).getImageFile().getFileId());
628+
System.out.print("Image from ID: " + imageFileId);
629+
}
630+
System.out.println();
631+
}
632+
}
633+
}
634+
635+
// a helper function to wait until a run has completed running
636+
public static void waitForRunCompletion(String threadId, ThreadRun threadRun, RunsClient runsClient)
637+
throws InterruptedException {
533638
534-
[See the full sample for Grounding with Bing Search.](https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/ai/azure-ai-agents/samples/agents_tools/sample_agents_bing_grounding.py)
639+
do {
640+
Thread.sleep(500);
641+
threadRun = runsClient.getRun(threadId, threadRun.getId());
642+
}
643+
while (
644+
threadRun.getStatus() == RunStatus.QUEUED
645+
|| threadRun.getStatus() == RunStatus.IN_PROGRESS
646+
|| threadRun.getStatus() == RunStatus.REQUIRES_ACTION);
647+
648+
if (threadRun.getStatus() == RunStatus.FAILED) {
649+
System.out.println(threadRun.getLastError().getMessage());
650+
}
651+
}
652+
}
653+
```
654+
::: zone-end

0 commit comments

Comments
 (0)