Updated and supported automatically if there are no breaking changes
All modern .NET features - nullability, trimming, NativeAOT, etc.
Support .Net Framework/.Net Standard 2.0
Microsoft.Extensions.AI IChatClient and IEmbeddingGenerator support
Usage
1 2 3 4 5 6 7 8 91011
usingCohere;usingvarclient=newCohereClient(apiKey);varresponse=awaitclient.GenerateAsync(newGenerateRequest{Prompt="Hello, Cohere! Can you tell me a joke?",});Console.WriteLine("Cohere Response:");Console.WriteLine(response.Generations[0].Text);
Note: Use the Meai alias because the Cohere SDK has its own generated IChatClient interface.
Chat Client Five Random Words Streaming
1 2 3 4 5 6 7 8 91011121314151617181920
usingvarclient=GetAuthenticatedCohereClient();Meai.IChatClientchatClient=client;varupdates=chatClient.GetStreamingResponseAsync([ new Meai.ChatMessage(Meai.ChatRole.User, "Generate 5 random words.") ],newMeai.ChatOptions{ModelId="command-r-plus",});vardeltas=newList<string>();awaitforeach(varupdateinupdates){if(!string.IsNullOrWhiteSpace(update.Text)){deltas.Add(update.Text);}}
Chat Client Five Random Words
1 2 3 4 5 6 7 8 91011
usingvarclient=GetAuthenticatedCohereClient();Meai.IChatClientchatClient=client;varresponse=awaitchatClient.GetResponseAsync([ new Meai.ChatMessage(Meai.ChatRole.User, "Generate 5 random words.") ],newMeai.ChatOptions{ModelId="command-r-plus",});
Chat Client Get Service Returns Chat Client Metadata
usingvarclient=GetAuthenticatedCohereClient();Meai.IChatClientchatClient=client;vargetWeatherTool=AIFunctionFactory.Create((stringlocation)=>$"The weather in {location} is sunny, 72°F","GetWeather","Gets the current weather for a location");varmessages=newList<Meai.ChatMessage>{new(Meai.ChatRole.User,"What's the weather in Seattle?"),};varoptions=newMeai.ChatOptions{ModelId="command-r-plus",Tools=[getWeatherTool],};// First turn: model should call the toolvarresponse=awaitchatClient.GetResponseAsync(messages,options);varfunctionCall=response.Messages.SelectMany(m=>m.Contents).OfType<FunctionCallContent>().FirstOrDefault();// Add assistant response with tool call and tool resultmessages.AddRange(response.Messages);vartoolResult=awaitgetWeatherTool.InvokeAsync(functionCall!.Argumentsis{}args?newAIFunctionArguments(args):null);messages.Add(newMeai.ChatMessage(Meai.ChatRole.Tool,[ new FunctionResultContent(functionCall.CallId, toolResult),]));// Second turn: model should respond with the weather infovarfinalResponse=awaitchatClient.GetResponseAsync(messages,options);
Chat Client Tool Calling Single Turn
1 2 3 4 5 6 7 8 91011121314151617181920
usingvarclient=GetAuthenticatedCohereClient();Meai.IChatClientchatClient=client;vargetWeatherTool=AIFunctionFactory.Create((stringlocation)=>$"The weather in {location} is sunny, 72°F","GetWeather","Gets the current weather for a location");varresponse=awaitchatClient.GetResponseAsync([new Meai.ChatMessage(Meai.ChatRole.User, "What's the weather in Seattle?")],newMeai.ChatOptions{ModelId="command-r-plus",Tools=[getWeatherTool],});varfunctionCall=response.Messages.SelectMany(m=>m.Contents).OfType<FunctionCallContent>().FirstOrDefault();
usingvarclient=newCohereClient(apiKey);varresponse=awaitclient.ChatAsync(newChatRequest{Message="Hello, Cohere! Can you tell me a joke?",});Console.WriteLine("Cohere Response:");Console.WriteLine(response.Text);