|
1 | | -using System; |
2 | | -using System.Collections.Generic; |
3 | | -using System.Text; |
4 | | -using Google.Protobuf.WellKnownTypes; |
| 1 | +using Google.Protobuf.WellKnownTypes; |
5 | 2 | using Microsoft.Extensions.AI; |
| 3 | +using Moq; |
6 | 4 | using OpenAI.Responses; |
7 | 5 | using xAI.Protocol; |
8 | 6 |
|
9 | | -namespace xAI; |
| 7 | +namespace xAI.Tests; |
10 | 8 |
|
11 | 9 | public class GrokConversionTests |
12 | 10 | { |
@@ -278,4 +276,62 @@ public void AsTool_WithHostedMcpTool() |
278 | 276 | Assert.Contains(KeyValuePair.Create("x-extra", "bar"), tool.Mcp.ExtraHeaders); |
279 | 277 | Assert.Contains(KeyValuePair.Create("foo", "baz"), tool.Mcp.ExtraHeaders); |
280 | 278 | } |
| 279 | + |
| 280 | + static IGrokChatClient CreateClient() |
| 281 | + { |
| 282 | + var mock = new Mock<IGrokChatClient>(); |
| 283 | + mock.SetupGet(x => x.DefaultModelId).Returns("grok-4"); |
| 284 | + mock.SetupGet(x => x.EndUserId).Returns((string?)null); |
| 285 | + return mock.Object; |
| 286 | + } |
| 287 | + |
| 288 | + [Fact] |
| 289 | + public void AsCompletionsRequest_NullToolMode_SetsAutoToolChoice() |
| 290 | + { |
| 291 | + var request = CreateClient().AsCompletionsRequest([], new ChatOptions { ToolMode = null }); |
| 292 | + |
| 293 | + Assert.NotNull(request.ToolChoice); |
| 294 | + Assert.True(request.ToolChoice.HasMode); |
| 295 | + Assert.Equal(Protocol.ToolMode.Auto, request.ToolChoice.Mode); |
| 296 | + } |
| 297 | + |
| 298 | + [Fact] |
| 299 | + public void AsCompletionsRequest_AutoToolMode_SetsAutoToolChoice() |
| 300 | + { |
| 301 | + var request = CreateClient().AsCompletionsRequest([], new ChatOptions { ToolMode = ChatToolMode.Auto }); |
| 302 | + |
| 303 | + Assert.NotNull(request.ToolChoice); |
| 304 | + Assert.True(request.ToolChoice.HasMode); |
| 305 | + Assert.Equal(Protocol.ToolMode.Auto, request.ToolChoice.Mode); |
| 306 | + } |
| 307 | + |
| 308 | + [Fact] |
| 309 | + public void AsCompletionsRequest_NoneToolMode_SetsNoneToolChoice() |
| 310 | + { |
| 311 | + var request = CreateClient().AsCompletionsRequest([], new ChatOptions { ToolMode = ChatToolMode.None }); |
| 312 | + |
| 313 | + Assert.NotNull(request.ToolChoice); |
| 314 | + Assert.True(request.ToolChoice.HasMode); |
| 315 | + Assert.Equal(Protocol.ToolMode.None, request.ToolChoice.Mode); |
| 316 | + } |
| 317 | + |
| 318 | + [Fact] |
| 319 | + public void AsCompletionsRequest_RequireAnyToolMode_SetsRequiredToolChoice() |
| 320 | + { |
| 321 | + var request = CreateClient().AsCompletionsRequest([], new ChatOptions { ToolMode = ChatToolMode.RequireAny }); |
| 322 | + |
| 323 | + Assert.NotNull(request.ToolChoice); |
| 324 | + Assert.True(request.ToolChoice.HasMode); |
| 325 | + Assert.Equal(Protocol.ToolMode.Required, request.ToolChoice.Mode); |
| 326 | + } |
| 327 | + |
| 328 | + [Fact] |
| 329 | + public void AsCompletionsRequest_RequireSpecificToolMode_SetsFunctionNameToolChoice() |
| 330 | + { |
| 331 | + var request = CreateClient().AsCompletionsRequest([], new ChatOptions { ToolMode = ChatToolMode.RequireSpecific("get_weather") }); |
| 332 | + |
| 333 | + Assert.NotNull(request.ToolChoice); |
| 334 | + Assert.True(request.ToolChoice.HasFunctionName); |
| 335 | + Assert.Equal("get_weather", request.ToolChoice.FunctionName); |
| 336 | + } |
281 | 337 | } |
0 commit comments