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
17 changes: 13 additions & 4 deletions MaIN.Core.IntegrationTests/ChatTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using MaIN.Core.Hub;
using FuzzySharp;
using MaIN.Core.Hub;
using MaIN.Core.IntegrationTests.Helpers;
using MaIN.Domain.Entities;
using MaIN.Domain.Models.Concrete;

Expand Down Expand Up @@ -66,7 +68,7 @@ public async Task Should_AnswerGameFromImage_ChatWithVision()

var result = await AIHub.Chat()
.WithModel<Llama3_2_3b>()
.WithMessage("What is the title of game?")
.WithMessage("What is the title of the game? Answer only this question.")
.WithMemoryParams(new MemoryParams
{
AnswerTokens = 1000
Expand All @@ -77,13 +79,20 @@ public async Task Should_AnswerGameFromImage_ChatWithVision()
Assert.True(result.Done);
Assert.NotNull(result.Message);
Assert.NotEmpty(result.Message.Content);
Assert.Contains("call of duty", result.Message.Content.ToLower());
var ratio = Fuzz.PartialRatio("call of duty", result.Message.Content.ToLowerInvariant());
Assert.True(ratio > 50,
$"""
Fuzzy match failed!
Expected > 50, but got {ratio}.
Expexted: 'call of duty'
Actual: '{result.Message.Content}'
""");
}

[Fact(Skip = "Require powerful GPU")]
public async Task Should_GenerateImage_BasedOnPrompt()
{
Assert.True(PingHost("127.0.0.1", 5003, 5), "Please make sure ImageGen service is running on port 5003");
Assert.True(NetworkHelper.PingHost("127.0.0.1", 5003, 5), "Please make sure ImageGen service is running on port 5003");

const string extension = "png";

Expand Down
29 changes: 29 additions & 0 deletions MaIN.Core.IntegrationTests/Helpers/NetworkHelper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using System;
using System.Net.Sockets;

namespace MaIN.Core.IntegrationTests.Helpers;

public static class NetworkHelper
{
public static bool PingHost(string host, int port, int timeout)
{
try
{
using var client = new TcpClient();
var result = client.BeginConnect(host, port, null, null);
var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromMilliseconds(timeout));

if (!success)
{
return false;
}

client.EndConnect(result);
return true;
}
catch
{
return false;
}
}
}
56 changes: 13 additions & 43 deletions MaIN.Core.IntegrationTests/IntegrationTestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,62 +10,32 @@ public class IntegrationTestBase : IDisposable
protected readonly IHost _host;
protected readonly IServiceProvider _services;

public IntegrationTestBase()
protected IntegrationTestBase()
{
_host = CreateHost();
_host = Host.CreateDefaultBuilder()
.ConfigureServices((context, services) =>
{
services.AddMaIN(context.Configuration);
ConfigureServices(services);
})
.Build();

_host.Services.UseMaIN();
_host.Start();

_services = _host.Services;
}

private IHost CreateHost()
// Allow derived classes to add additional services or override existing ones
protected virtual void ConfigureServices(IServiceCollection services)
{
var hostBuilder = Host.CreateDefaultBuilder()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder
.UseUrls("http://localhost:0") // Random available port
.ConfigureServices((context, services) =>
{
services.AddMaIN(context.Configuration);

var provider = services.BuildServiceProvider();
provider.UseMaIN();
});
});

return hostBuilder.Build();
}

protected T GetService<T>() where T : notnull
{
return _services.GetRequiredService<T>();
}

protected static bool PingHost(string host, int port, int timeout)
{
try
{
using (var client = new TcpClient())
{
var result = client.BeginConnect(host, port, null, null);
var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromMilliseconds(timeout));

if (!success)
{
return false;
}

client.EndConnect(result);
return true;
}
}
catch
{
return false;
}
}

public void Dispose()
{
_host?.Dispose();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="FuzzySharp" Version="2.0.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
Expand Down
Loading