Skip to content
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
8 changes: 4 additions & 4 deletions Anthropic.SDK.Tests/Anthropic.SDK.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@

<ItemGroup>
<PackageReference Include="Google.Cloud.AIPlatform.V1" Version="3.65.0" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="11.0.0-preview.1.26104.118" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.AI" Version="10.3.0" />
<PackageReference Include="ModelContextProtocol" Version="0.8.0-preview.1" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="11.0.0-preview.1.26104.118" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="11.0.0-preview.1.26104.118" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="11.0.0-preview.1.26104.118" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.3" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.3" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
<PackageReference Include="Microsoft.SemanticKernel" Version="1.71.0" />
<PackageReference Include="Microsoft.SemanticKernel.Abstractions" Version="1.71.0" />
Expand Down
16 changes: 8 additions & 8 deletions Anthropic.SDK.Tests/ChatOptionsExtensionsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -231,13 +231,13 @@ public void WithThinking_FluentChaining_Works()
// Arrange & Act
var options = new ChatOptions
{
ModelId = AnthropicModels.Claude37Sonnet,
ModelId = AnthropicModels.Claude46Sonnet,
MaxOutputTokens = 4096,
Temperature = 1.0f
}.WithThinking(4000);

// Assert
Assert.AreEqual(AnthropicModels.Claude37Sonnet, options.ModelId);
Assert.AreEqual(AnthropicModels.Claude46Sonnet, options.ModelId);
Assert.AreEqual(4096, options.MaxOutputTokens);
Assert.AreEqual(1.0f, options.Temperature);

Expand All @@ -253,13 +253,13 @@ public void WithInterleavedThinking_FluentChaining_Works()
// Arrange & Act
var options = new ChatOptions
{
ModelId = AnthropicModels.Claude37Sonnet,
ModelId = AnthropicModels.Claude46Sonnet,
MaxOutputTokens = 4096,
Temperature = 1.0f
}.WithInterleavedThinking(8000);

// Assert
Assert.AreEqual(AnthropicModels.Claude37Sonnet, options.ModelId);
Assert.AreEqual(AnthropicModels.Claude46Sonnet, options.ModelId);
Assert.AreEqual(4096, options.MaxOutputTokens);
Assert.AreEqual(1.0f, options.Temperature);

Expand All @@ -280,7 +280,7 @@ public void ChatClientHelper_MapsThinkingParametersCorrectly()
};
var options = new ChatOptions
{
ModelId = AnthropicModels.Claude37Sonnet,
ModelId = AnthropicModels.Claude46Sonnet,
MaxOutputTokens = 4096,
Temperature = 1.0f
}.WithThinking(3000);
Expand All @@ -293,7 +293,7 @@ public void ChatClientHelper_MapsThinkingParametersCorrectly()
Assert.AreEqual(3000, messageParams.Thinking.BudgetTokens);
Assert.AreEqual(ThinkingType.enabled, messageParams.Thinking.Type);
Assert.IsFalse(messageParams.Thinking.UseInterleavedThinking);
Assert.AreEqual(AnthropicModels.Claude37Sonnet, messageParams.Model);
Assert.AreEqual(AnthropicModels.Claude46Sonnet, messageParams.Model);
Assert.AreEqual(4096, messageParams.MaxTokens);
}

Expand All @@ -308,7 +308,7 @@ public void ChatClientHelper_MapsInterleavedThinkingParametersCorrectly()
};
var options = new ChatOptions
{
ModelId = AnthropicModels.Claude37Sonnet,
ModelId = AnthropicModels.Claude46Sonnet,
MaxOutputTokens = 4096,
Temperature = 1.0f
}.WithInterleavedThinking(8000);
Expand All @@ -321,7 +321,7 @@ public void ChatClientHelper_MapsInterleavedThinkingParametersCorrectly()
Assert.AreEqual(8000, messageParams.Thinking.BudgetTokens);
Assert.AreEqual(ThinkingType.enabled, messageParams.Thinking.Type);
Assert.IsTrue(messageParams.Thinking.UseInterleavedThinking);
Assert.AreEqual(AnthropicModels.Claude37Sonnet, messageParams.Model);
Assert.AreEqual(AnthropicModels.Claude46Sonnet, messageParams.Model);
Assert.AreEqual(4096, messageParams.MaxTokens);
}

Expand Down
38 changes: 38 additions & 0 deletions Anthropic.SDK.Tests/CostTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using Anthropic.SDK.Constants;
using Anthropic.SDK.Messaging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Anthropic.SDK.Extensions;

namespace Anthropic.SDK.Tests
{
[TestClass]
public class CostTest
{

[TestMethod]
public async Task TestCostEstimation()
{
var client = new AnthropicClient();
var parameters = new MessageParameters()
{
Messages = new List<Message> { new Message(RoleType.User, "Hello!") },
MaxTokens = 1024,
Model = AnthropicModels.Claude46Sonnet,
};
var response = await client.Messages.GetClaudeMessageAsync(parameters);

// Get total estimated cost
var cost = response.CalculateCost();
Console.WriteLine($"Total cost: ${cost.TotalCostUsd:F6}");
Console.WriteLine($" Input tokens: ${cost.InputTokenCost:F6}");
Console.WriteLine($" Output tokens: ${cost.OutputTokenCost:F6}");
Console.WriteLine($" Cache read: ${cost.CacheReadCost:F6}");
Console.WriteLine($" Cache creation: ${cost.CacheCreationCost:F6}");
Console.WriteLine($" Web search: ${cost.WebSearchCost:F6}");
}
}
}
16 changes: 8 additions & 8 deletions Anthropic.SDK.Tests/MCPTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ public async Task TestMCP()
var client = new AnthropicClient();
var parameters = new MessageParameters()
{
Model = AnthropicModels.Claude37Sonnet,
Model = AnthropicModels.Claude46Sonnet,
MaxTokens = 5000,
Temperature = 1,
MCPServers = new List<MCPServer>()
{
new MCPServer()
{
Url = "https://mcp.deepwiki.com/sse",
Name = "DeepWiki",
Url = "https://learn.microsoft.com/api/mcp",
Name = "MSFT",
}
}
};
Expand All @@ -37,7 +37,7 @@ public async Task TestMCP()
Role = RoleType.User,
Content = new List<ContentBase>
{
new TextContent { Text = "Tell me about the repo tghamm/Anthropic.SDK" }
new TextContent { Text = "Tell me about the Latest Microsoft.Extensions.AI Library" }
}
}
};
Expand All @@ -55,16 +55,16 @@ public async Task TestMCPExtendedStreaming()
var client = new AnthropicClient();
var parameters = new MessageParameters()
{
Model = AnthropicModels.Claude37Sonnet,
Model = AnthropicModels.Claude46Sonnet,
MaxTokens = 3000,
Temperature = 1,
Stream = true,
MCPServers = new List<MCPServer>()
{
new MCPServer()
{
Url = "https://mcp.deepwiki.com/sse",
Name = "DeepWiki",
Url = "https://learn.microsoft.com/api/mcp",
Name = "MSFT",
}
}
};
Expand All @@ -75,7 +75,7 @@ public async Task TestMCPExtendedStreaming()
Role = RoleType.User,
Content = new List<ContentBase>
{
new TextContent { Text = "Tell me about the repo tghamm/Anthropic.SDK" }
new TextContent { Text = "Tell me about the latest Microsoft.Extensions.AI Library" }
}
}
};
Expand Down
24 changes: 12 additions & 12 deletions Anthropic.SDK.Tests/Messages.ChatClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ public async Task TestNonStreamingThinkingWithExtensionMethods()

ChatOptions options = new ChatOptions()
{
ModelId = AnthropicModels.Claude37Sonnet,
ModelId = AnthropicModels.Claude46Sonnet,
MaxOutputTokens = 20000,
Temperature = 1.0f,
}.WithThinking(16000);
Expand Down Expand Up @@ -166,7 +166,7 @@ public async Task TestThinkingStreamingWithExtensionMethods()

ChatOptions options = new ChatOptions()
{
ModelId = AnthropicModels.Claude37Sonnet,
ModelId = AnthropicModels.Claude46Sonnet,
MaxOutputTokens = 20000,
Temperature = 1.0f,
}.WithThinking(16000);
Expand Down Expand Up @@ -210,7 +210,7 @@ public async Task TestNonStreamingThinkingConversation()

ChatOptions options = new()
{
ModelId = AnthropicModels.Claude37Sonnet,
ModelId = AnthropicModels.Claude46Sonnet,
MaxOutputTokens = 20000,
Temperature = 1.0f,
RawRepresentationFactory = static _ => new MessageParameters()
Expand Down Expand Up @@ -239,7 +239,7 @@ public async Task TestThinkingStreamingConversation()

ChatOptions options = new()
{
ModelId = AnthropicModels.Claude37Sonnet,
ModelId = AnthropicModels.Claude46Sonnet,
MaxOutputTokens = 20000,
Temperature = 1.0f,
RawRepresentationFactory = static _ => new MessageParameters()
Expand Down Expand Up @@ -287,7 +287,7 @@ public async Task TestThinkingStreamingRedactedConversation()

ChatOptions options = new()
{
ModelId = AnthropicModels.Claude37Sonnet,
ModelId = AnthropicModels.Claude46Sonnet,
MaxOutputTokens = 20000,
Temperature = 1.0f,
RawRepresentationFactory = static _ => new MessageParameters()
Expand Down Expand Up @@ -357,7 +357,7 @@ public async Task TestNonStreamingThinkingFunctionCalls()

ChatOptions options = new()
{
ModelId = AnthropicModels.Claude37Sonnet,
ModelId = AnthropicModels.Claude46Sonnet,
MaxOutputTokens = 20000,
Tools = [AIFunctionFactory.Create((string personName) => personName switch {
"Alice" => "25",
Expand Down Expand Up @@ -411,7 +411,7 @@ public async Task TestNonStreamingWebSearchCalls()

ChatOptions options = new()
{
ModelId = AnthropicModels.Claude4Sonnet,
ModelId = AnthropicModels.Claude46Sonnet,
MaxOutputTokens = 5000,
Tools = [new HostedWebSearchTool()]
};
Expand Down Expand Up @@ -484,7 +484,7 @@ public async Task TestStreamingThinkingFunctionCalls()

ChatOptions options = new()
{
ModelId = AnthropicModels.Claude37Sonnet,
ModelId = AnthropicModels.Claude46Sonnet,
MaxOutputTokens = 20000,
Tools = [AIFunctionFactory.Create((string personName) => personName switch {
"Alice" => "25",
Expand Down Expand Up @@ -551,16 +551,16 @@ public async Task TestNonStreamingMCPMessage()
#pragma warning disable MEAI001 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.
ChatOptions options = new()
{
ModelId = AnthropicModels.Claude4Sonnet,
ModelId = AnthropicModels.Claude46Sonnet,
MaxOutputTokens = 512,
Temperature = 1.0f,
Tools = [new HostedMcpServerTool("DeepWiki", "https://mcp.deepwiki.com/sse")]
Tools = [new HostedMcpServerTool("MSFT", "https://learn.microsoft.com/api/mcp")]
};
#pragma warning restore MEAI001 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed.

var res = await client.GetResponseAsync("Tell me about the repo tghamm/Anthropic.SDK", options);
var res = await client.GetResponseAsync("Tell me about the Latest Microsoft.Extensions.AI Library", options);

Assert.IsTrue(res.Text.ToLower().Contains("anthropic") is true, res.Text);
Assert.IsTrue(res.Text.ToLower().Contains("microsoft") is true, res.Text);
}
}
}
4 changes: 2 additions & 2 deletions Anthropic.SDK.Tests/Messages.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public async Task TestBasicClaude35HaikuMessage()
{
Messages = messages,
MaxTokens = 512,
Model = AnthropicModels.Claude35Haiku,
Model = AnthropicModels.Claude45Haiku,
Stream = false,
Temperature = 1.0m,
};
Expand All @@ -89,7 +89,7 @@ public async Task TestBasicTokenCountMessage()
var parameters = new MessageCountTokenParameters
{
Messages = messages,
Model = AnthropicModels.Claude35Haiku
Model = AnthropicModels.Claude45Haiku
};
var res = await client.Messages.CountMessageTokensAsync(parameters);
Assert.IsTrue(res.InputTokens > 0);
Expand Down
8 changes: 4 additions & 4 deletions Anthropic.SDK.Tests/SemanticKernelInitializationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ IChatClient CreateChatClient(IServiceProvider _)
var skExecutionSettings = new OpenAIPromptExecutionSettings()
{
FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(),
ModelId = AnthropicModels.Claude35Haiku,
ModelId = AnthropicModels.Claude45Haiku,
MaxTokens = 512
};

Expand Down Expand Up @@ -73,7 +73,7 @@ public async Task TestSKPDF()
IChatCompletionService skChatService = new ChatClientBuilder(client.Messages)
.ConfigureOptions(opt =>
{
opt.ModelId = AnthropicModels.Claude37Sonnet;
opt.ModelId = AnthropicModels.Claude46Sonnet;
opt.MaxOutputTokens = 1024;
})
.UseFunctionInvocation()
Expand Down Expand Up @@ -116,7 +116,7 @@ public async Task TestSKLuckyNumber()
OpenAIPromptExecutionSettings promptExecutionSettings = new()
{
FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(),
ModelId = AnthropicModels.Claude35Haiku,
ModelId = AnthropicModels.Claude45Haiku,
MaxTokens = 512
};
// Get the response from the AI
Expand Down Expand Up @@ -147,7 +147,7 @@ public async Task TestSKLuckyNumberStreaming()
OpenAIPromptExecutionSettings promptExecutionSettings = new()
{
FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(),
ModelId = AnthropicModels.Claude35Haiku,
ModelId = AnthropicModels.Claude45Haiku,
MaxTokens = 512
};
// Get the response from the AI
Expand Down
12 changes: 6 additions & 6 deletions Anthropic.SDK.Tests/ThinkingModeTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public async Task TestBasicClaude37ThinkingMessage()
{
Messages = messages,
MaxTokens = 20000,
Model = AnthropicModels.Claude37Sonnet,
Model = AnthropicModels.Claude46Sonnet,
Stream = false,
Temperature = 1.0m,
Thinking = new ThinkingParameters()
Expand Down Expand Up @@ -81,7 +81,7 @@ public async Task TestRedactedClaude37ThinkingMessage()
{
Messages = messages,
MaxTokens = 20000,
Model = AnthropicModels.Claude37Sonnet,
Model = AnthropicModels.Claude46Sonnet,
Stream = false,
Temperature = 1.0m,
Thinking = new ThinkingParameters()
Expand All @@ -105,7 +105,7 @@ public async Task TestClaude37ThinkingConversation()
{
Messages = messages,
MaxTokens = 20000,
Model = AnthropicModels.Claude37Sonnet,
Model = AnthropicModels.Claude46Sonnet,
Stream = false,
Temperature = 1.0m,
Thinking = new ThinkingParameters()
Expand Down Expand Up @@ -138,7 +138,7 @@ public async Task TestStreamingClaude37SonnetThinkingConversation()
{
Messages = messages,
MaxTokens = 20000,
Model = AnthropicModels.Claude37Sonnet,
Model = AnthropicModels.Claude46Sonnet,
Stream = true,
Temperature = 1.0m,
Thinking = new ThinkingParameters()
Expand Down Expand Up @@ -184,7 +184,7 @@ public async Task TestStreamingRedactedClaude37SonnetThinkingConversation()
{
Messages = messages,
MaxTokens = 20000,
Model = AnthropicModels.Claude37Sonnet,
Model = AnthropicModels.Claude46Sonnet,
Stream = true,
Temperature = 1.0m,
Thinking = new ThinkingParameters()
Expand Down Expand Up @@ -303,7 +303,7 @@ public async Task TestBasicClaude37ImageStreamingSchemaMessage()
{
Messages = messages,
MaxTokens = 20000,
Model = AnthropicModels.Claude37Sonnet,
Model = AnthropicModels.Claude46Sonnet,
Stream = true,
Temperature = 1.0m,
Tools = tools.ToList(),
Expand Down
Loading
Loading