2024-06-27 23:26:53 -05:00
|
|
|
namespace AnthropicClient.Tests.EndToEnd;
|
|
|
|
|
|
2024-06-29 09:49:15 -05:00
|
|
|
public class ClientTests(ConfigurationFixture configFixture) : EndToEndTest(configFixture)
|
2024-06-27 23:26:53 -05:00
|
|
|
{
|
|
|
|
|
[Fact]
|
2024-07-03 16:57:27 -05:00
|
|
|
public async Task CreateMessageAsync_WhenCalled_ItShouldReturnResponse()
|
2024-06-27 23:26:53 -05:00
|
|
|
{
|
2024-07-03 16:57:27 -05:00
|
|
|
var request = new MessageRequest(
|
2024-06-27 23:26:53 -05:00
|
|
|
model: AnthropicModels.Claude3Haiku,
|
|
|
|
|
messages: [new(MessageRole.User, [new TextContent("Hello!")])]
|
|
|
|
|
);
|
|
|
|
|
|
2024-07-03 16:57:27 -05:00
|
|
|
var result = await _client.CreateMessageAsync(request);
|
2024-06-27 23:26:53 -05:00
|
|
|
|
|
|
|
|
result.IsSuccess.Should().BeTrue();
|
2024-07-03 16:57:27 -05:00
|
|
|
result.Value.Should().BeOfType<MessageResponse>();
|
2024-07-01 12:09:51 -05:00
|
|
|
result.Value.Content.Should().NotBeNullOrEmpty();
|
2024-06-27 23:26:53 -05:00
|
|
|
}
|
2024-06-28 10:54:00 -05:00
|
|
|
|
|
|
|
|
[Fact]
|
2024-07-03 16:57:27 -05:00
|
|
|
public async Task CreateMessageAsync_WhenCalledWithStreamRequest_ItShouldReturnEvents()
|
2024-06-28 10:54:00 -05:00
|
|
|
{
|
2024-07-03 16:57:27 -05:00
|
|
|
var request = new StreamMessageRequest(
|
2024-06-28 10:54:00 -05:00
|
|
|
model: AnthropicModels.Claude3Haiku,
|
|
|
|
|
messages: [new(MessageRole.User, [new TextContent("Hello!")])]
|
|
|
|
|
);
|
|
|
|
|
|
2024-07-03 16:57:27 -05:00
|
|
|
var response = _client.CreateMessageAsync(request);
|
2024-07-01 22:46:02 -05:00
|
|
|
|
2024-06-28 10:54:00 -05:00
|
|
|
var events = new List<AnthropicEvent>();
|
|
|
|
|
|
|
|
|
|
await foreach (var e in response)
|
|
|
|
|
{
|
|
|
|
|
events.Add(e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
events.Should().NotBeEmpty();
|
|
|
|
|
}
|
2024-06-28 16:30:09 -05:00
|
|
|
|
|
|
|
|
[Fact]
|
2024-07-03 16:57:27 -05:00
|
|
|
public async Task CreateMessageAsync_WhenCalledWithStreamRequest_ItShouldYieldAMessageCompleteEvent()
|
2024-06-28 16:30:09 -05:00
|
|
|
{
|
2024-07-03 16:57:27 -05:00
|
|
|
var request = new StreamMessageRequest(
|
2024-06-28 16:30:09 -05:00
|
|
|
model: AnthropicModels.Claude3Haiku,
|
|
|
|
|
messages: [new(MessageRole.User, [new TextContent("Hello!")])]
|
|
|
|
|
);
|
|
|
|
|
|
2024-07-03 16:57:27 -05:00
|
|
|
var response = _client.CreateMessageAsync(request);
|
2024-07-01 22:46:02 -05:00
|
|
|
|
2024-06-28 16:30:09 -05:00
|
|
|
await foreach (var e in response)
|
|
|
|
|
{
|
|
|
|
|
if (e.Data is MessageCompleteEventData messageCompleteData)
|
|
|
|
|
{
|
|
|
|
|
messageCompleteData.Message.Should().NotBeNull();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-07-19 21:31:49 -05:00
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public async Task CreateMessageAsync_WhenImageIsSent_ItShouldReturnResponse()
|
|
|
|
|
{
|
2024-07-19 21:45:56 -05:00
|
|
|
// var imagePath = Path.Combine(Directory.GetCurrentDirectory(), "Files", "elephant.jpg");
|
2024-07-19 21:31:49 -05:00
|
|
|
var mediaType = "image/jpeg";
|
2024-07-19 21:45:56 -05:00
|
|
|
// var imageBytes = await File.ReadAllBytesAsync(imagePath);
|
|
|
|
|
var base64Image = "/9j/4AAQSkZJRgABAQEBLAEsAAD/4QBWRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAAITAAMAAAABAAEAAAAAAAAAAAEsAAAAAQAAASwAAAAB/+0ALFBob3Rvc2hvcCAzLjAAOEJJTQQEAAAAAAAPHAFaAAMbJUccAQAAAgAEAP/hDIFodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0n77u/JyBpZD0nVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkJz8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0nYWRvYmU6bnM6bWV0YS8nIHg6eG1wdGs9J0ltYWdlOjpFeGlmVG9vbCAxMC4xMCc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczp0aWZmPSdodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyc+CiAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICA8dGlmZjpYUmVzb2x1dGlvbj4zMDAvMTwvdGlmZjpYUmVzb2x1dGlvbj4KICA8dGlmZjpZUmVzb2x1dGlvbj4zMDAvMTwvdGlmZjpZUmVzb2x1dGlvbj4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6eG1wTU09J2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8nPgogIDx4bXBNTTpEb2N1bWVudElEPmFkb2JlOmRvY2lkOnN0b2NrOmQ1MTJjMzg3LWVkMGEtNDEwYy04MmU5LTM1NTMwZTFlMDRjODwveG1wTU06RG9jdW1lbnRJRD4KICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOmQ2ZDI3ZjdiLTZmZDItNDdiYi1iODhhLTE1NWFhMjRjZTZiNjwveG1wTU06SW5zdGFuY2VJRD4KIDwvcmRmOkRlc2NyaXB0aW9uPgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
|
2024-07-19 21:31:49 -05:00
|
|
|
|
|
|
|
|
var request = new MessageRequest(
|
|
|
|
|
model: AnthropicModels.Claude3Haiku,
|
|
|
|
|
messages: [
|
|
|
|
|
new(MessageRole.User, [
|
|
|
|
|
new ImageContent(mediaType, base64Image),
|
|
|
|
|
new TextContent("What is in this image?")
|
|
|
|
|
]),
|
|
|
|
|
]
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
var result = await _client.CreateMessageAsync(request);
|
|
|
|
|
|
|
|
|
|
result.IsSuccess.Should().BeTrue();
|
|
|
|
|
result.Value.Should().BeOfType<MessageResponse>();
|
|
|
|
|
result.Value.Content.Should().NotBeNullOrEmpty();
|
2024-07-19 21:38:52 -05:00
|
|
|
|
|
|
|
|
var text = result.Value.Content.Aggregate("", (acc, content) =>
|
2024-07-19 21:31:49 -05:00
|
|
|
{
|
|
|
|
|
if (content is TextContent textContent)
|
|
|
|
|
{
|
|
|
|
|
acc += textContent.Text;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return acc;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
text.Should().Contain("elephant");
|
|
|
|
|
}
|
2024-06-27 23:26:53 -05:00
|
|
|
}
|