Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[.Net] add streaming tool call example #3167

Merged
merged 1 commit into from
Jul 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Streaming_Tool_Call.cs

using AutoGen.Core;
using AutoGen.OpenAI;
using AutoGen.OpenAI.Extension;
using Azure.AI.OpenAI;
using FluentAssertions;

namespace AutoGen.BasicSample.GettingStart;

internal class Streaming_Tool_Call
{
public static async Task RunAsync()
{
#region Create_tools
var tools = new Tools();
#endregion Create_tools

#region Create_auto_invoke_middleware
var autoInvokeMiddleware = new FunctionCallMiddleware(
functions: [tools.GetWeatherFunctionContract],
functionMap: new Dictionary<string, Func<string, Task<string>>>()
{
{ tools.GetWeatherFunctionContract.Name, tools.GetWeatherWrapper },
});
#endregion Create_auto_invoke_middleware

#region Create_Agent
var apiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY") ?? throw new Exception("Please set OPENAI_API_KEY environment variable.");
var model = "gpt-4o";
var openaiClient = new OpenAIClient(apiKey);
var agent = new OpenAIChatAgent(
openAIClient: openaiClient,
name: "agent",
modelName: model,
systemMessage: "You are a helpful AI assistant")
.RegisterMessageConnector()
.RegisterStreamingMiddleware(autoInvokeMiddleware)
.RegisterPrintMessage();
#endregion Create_Agent

IMessage finalReply = null;
var question = new TextMessage(Role.User, "What's the weather in Seattle");

// In streaming function call
// function can only be invoked untill all the chunks are collected
// therefore, only one ToolCallAggregateMessage chunk will be return here.
await foreach (var message in agent.GenerateStreamingReplyAsync([question]))
{
finalReply = message;
}

finalReply?.GetContent().Should().Be("The weather in Seattle is sunny.");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,37 @@ public async Task GPT_3_5_CoderReviewerRunnerTestAsync()
await CoderReviewerRunnerTestAsync(openAIChatAgent);
}

[ApiKeyFact("OPENAI_API_KEY")]
public async Task GPT_4o_CoderReviewerRunnerTestAsync()
{
var apiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY");
var model = "gpt-4o";
var openaiClient = new OpenAIClient(apiKey);
var openAIChatAgent = new OpenAIChatAgent(
openAIClient: openaiClient,
name: "assistant",
modelName: model)
.RegisterMessageConnector();

await CoderReviewerRunnerTestAsync(openAIChatAgent);
}

[ApiKeyFact("OPENAI_API_KEY")]
public async Task GPT_4o_mini_CoderReviewerRunnerTestAsync()
{
var apiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY");
var model = "gpt-4o-mini";
var openaiClient = new OpenAIClient(apiKey);
var openAIChatAgent = new OpenAIChatAgent(
openAIClient: openaiClient,
name: "assistant",
modelName: model)
.RegisterMessageConnector();

await CoderReviewerRunnerTestAsync(openAIChatAgent);
}


[ApiKeyFact("GOOGLE_GEMINI_API_KEY")]
public async Task GoogleGemini_1_5_flash_001_CoderReviewerRunnerTestAsync()
{
Expand Down
Loading