Add tools support to sampling (#976)

This commit is contained in:
Stephen Toub 2025-11-20 09:52:23 -05:00 • committed by GitHub
commit 15139cc569
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 1623 additions and 425 deletions

View file

@ -1,4 +1,4 @@
using ModelContextProtocol.Client;
using ModelContextProtocol.Client;
using ModelContextProtocol.Protocol;
using ModelContextProtocol.Tests.Utils;
@ -259,8 +259,7 @@ public abstract class HttpServerIntegrationTests : LoggedTest, IClassFixture<Sse
return new CreateMessageResult
{
Model = "test-model",
Role = Role.Assistant,
Content = new TextContentBlock { Text = "Test response" },
Content = [new TextContentBlock { Text = "Test response" }],
};
};
await using var client = await GetClientAsync(options);

View file

@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
@ -143,7 +143,7 @@ public abstract class MapMcpTests(ITestOutputHelper testOutputHelper) : KestrelI
}
[Fact]
public async Task Sampling_DoesNotCloseStream_Prematurely()
public async Task Sampling_DoesNotCloseStreamPrematurely()
{
Assert.SkipWhen(Stateless, "Sampling is not supported in stateless mode.");
@ -172,14 +172,14 @@ public abstract class MapMcpTests(ITestOutputHelper testOutputHelper) : KestrelI
Assert.NotNull(parameters?.Messages);
var message = Assert.Single(parameters.Messages);
Assert.Equal(Role.User, message.Role);
Assert.Equal("Test prompt for sampling", Assert.IsType<TextContentBlock>(message.Content).Text);
Assert.Equal("Test prompt for sampling", Assert.IsType<TextContentBlock>(Assert.Single(message.Content)).Text);
sampleCount++;
return new CreateMessageResult
{
Model = "test-model",
Role = Role.Assistant,
Content = new TextContentBlock { Text = "Sampling response from client" },
Content = [new TextContentBlock { Text = "Sampling response from client" }],
};
}
}
@ -285,7 +285,7 @@ public abstract class MapMcpTests(ITestOutputHelper testOutputHelper) : KestrelI
new SamplingMessage
{
Role = Role.User,
Content = new TextContentBlock { Text = prompt },
Content = [new TextContentBlock { Text = prompt }],
}
],
MaxTokens = 1000
@ -294,7 +294,7 @@ public abstract class MapMcpTests(ITestOutputHelper testOutputHelper) : KestrelI
await server.SampleAsync(samplingRequest, cancellationToken);
var samplingResult = await server.SampleAsync(samplingRequest, cancellationToken);
return $"Sampling completed successfully. Client responded: {Assert.IsType<TextContentBlock>(samplingResult.Content).Text}";
return $"Sampling completed successfully. Client responded: {Assert.IsType<TextContentBlock>(Assert.Single(samplingResult.Content)).Text}";
}
}
}