mirror of https://github.com/microsoft/autogen.git
86 lines
3.3 KiB
C#
86 lines
3.3 KiB
C#
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// MistralAICodeSnippet.cs
|
|
|
|
#region using_statement
|
|
using AutoGen.Mistral;
|
|
using AutoGen.Core;
|
|
using AutoGen.Mistral.Extension;
|
|
using FluentAssertions;
|
|
#endregion using_statement
|
|
|
|
namespace AutoGen.BasicSample.CodeSnippet;
|
|
|
|
#region weather_function
|
|
public partial class MistralAgentFunction
|
|
{
|
|
[Function]
|
|
public async Task<string> GetWeather(string location)
|
|
{
|
|
return "The weather in " + location + " is sunny.";
|
|
}
|
|
}
|
|
#endregion weather_function
|
|
|
|
internal class MistralAICodeSnippet
|
|
{
|
|
public async Task CreateMistralAIClientAsync()
|
|
{
|
|
#region create_mistral_agent
|
|
var apiKey = Environment.GetEnvironmentVariable("MISTRAL_API_KEY") ?? throw new Exception("Missing MISTRAL_API_KEY environment variable");
|
|
var client = new MistralClient(apiKey: apiKey);
|
|
var agent = new MistralClientAgent(
|
|
client: client,
|
|
name: "MistralAI",
|
|
model: MistralAIModelID.OPEN_MISTRAL_7B)
|
|
.RegisterMessageConnector(); // support more AutoGen built-in message types.
|
|
|
|
await agent.SendAsync("Hello, how are you?");
|
|
#endregion create_mistral_agent
|
|
|
|
#region streaming_chat
|
|
var reply = await agent.GenerateStreamingReplyAsync(
|
|
messages: [new TextMessage(Role.User, "Hello, how are you?")]
|
|
);
|
|
|
|
await foreach (var message in reply)
|
|
{
|
|
if (message is TextMessageUpdate textMessageUpdate && textMessageUpdate.Content is string content)
|
|
{
|
|
Console.WriteLine(content);
|
|
}
|
|
}
|
|
#endregion streaming_chat
|
|
}
|
|
|
|
public async Task MistralAIChatAgentGetWeatherToolUsageAsync()
|
|
{
|
|
#region create_mistral_function_call_agent
|
|
var apiKey = Environment.GetEnvironmentVariable("MISTRAL_API_KEY") ?? throw new Exception("Missing MISTRAL_API_KEY environment variable");
|
|
var client = new MistralClient(apiKey: apiKey);
|
|
var agent = new MistralClientAgent(
|
|
client: client,
|
|
name: "MistralAI",
|
|
model: MistralAIModelID.MISTRAL_SMALL_LATEST)
|
|
.RegisterMessageConnector(); // support more AutoGen built-in message types like ToolCallMessage and ToolCallResultMessage
|
|
#endregion create_mistral_function_call_agent
|
|
|
|
#region create_get_weather_function_call_middleware
|
|
var mistralFunctions = new MistralAgentFunction();
|
|
var functionCallMiddleware = new FunctionCallMiddleware(
|
|
functions: [mistralFunctions.GetWeatherFunctionContract],
|
|
functionMap: new Dictionary<string, Func<string, Task<string>>> // with functionMap, the function will be automatically triggered if the tool name matches one of the keys.
|
|
{
|
|
{ mistralFunctions.GetWeatherFunctionContract.Name, mistralFunctions.GetWeather }
|
|
});
|
|
#endregion create_get_weather_function_call_middleware
|
|
|
|
#region register_function_call_middleware
|
|
agent = agent.RegisterMiddleware(functionCallMiddleware);
|
|
#endregion register_function_call_middleware
|
|
|
|
#region send_message_with_function_call
|
|
var reply = await agent.SendAsync("What is the weather in Seattle?");
|
|
reply.GetContent().Should().Be("The weather in Seattle is sunny.");
|
|
#endregion send_message_with_function_call
|
|
}
|
|
} |