Added a retrieval context validation agent (#289)

This commit is contained in:
Thorsten Sommer authored and GitHub committed 2025-02-22 20:51:06 +01:00
1 parent 96e6372fcd
commit bfc9f2ea1d
26 files changed
+829 -135

No files matched your search

+19 -9
View File
@@ -11,6 +11,14 @@ namespace AIStudio.Agents;
public abstract class AgentBase(ILogger<AgentBase> logger, SettingsManager settingsManager, DataSourceService dataSourceService, ThreadSafeRandom rng) : IAgent
{
protected static readonly ContentBlock EMPTY_BLOCK = new()
{
Content = null,
ContentType = ContentType.NONE,
Role = ChatRole.AGENT,
Time = DateTimeOffset.UtcNow,
};
protected static readonly JsonSerializerOptions JSON_SERIALIZER_OPTIONS = new()
{
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower,
@@ -24,8 +32,6 @@ public abstract class AgentBase(ILogger<AgentBase> logger, SettingsManager setti
protected ILogger<AgentBase> Logger { get; init; } = logger;
protected IContent? lastUserPrompt;
/// <summary>
/// Represents the type or category of this agent.
/// </summary>
@@ -72,10 +78,10 @@ public abstract class AgentBase(ILogger<AgentBase> logger, SettingsManager setti
Blocks = [],
};
protected DateTimeOffset AddUserRequest(ChatThread thread, string request)
protected UserRequest AddUserRequest(ChatThread thread, string request)
{
var time = DateTimeOffset.Now;
this.lastUserPrompt = new ContentText
var lastUserPrompt = new ContentText
{
Text = request,
};
@@ -85,13 +91,17 @@ public abstract class AgentBase(ILogger<AgentBase> logger, SettingsManager setti
Time = time,
ContentType = ContentType.TEXT,
Role = ChatRole.USER,
Content = this.lastUserPrompt,
Content = lastUserPrompt,
});
return time;
return new()
{
Time = time,
UserPrompt = lastUserPrompt,
};
}
protected async Task AddAIResponseAsync(ChatThread thread, DateTimeOffset time)
protected async Task AddAIResponseAsync(ChatThread thread, IContent lastUserPrompt, DateTimeOffset time)
{
if(this.ProviderSettings is null)
return;
@@ -117,6 +127,6 @@ public abstract class AgentBase(ILogger<AgentBase> logger, SettingsManager setti
// Use the selected provider to get the AI response.
// By awaiting this line, we wait for the entire
// content to be streamed.
await aiText.CreateFromProviderAsync(providerSettings.CreateProvider(this.Logger), providerSettings.Model, this.lastUserPrompt, thread);
await aiText.CreateFromProviderAsync(providerSettings.CreateProvider(this.Logger), providerSettings.Model, lastUserPrompt, thread);
}
}