mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2025-10-20 09:40:21 +00:00
Some checks failed
Build and Release / Read metadata (push) Has been cancelled
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-unknown-linux-gnu, linux-x64, ubuntu-22.04, x86_64-unknown-linux-gnu, appimage deb updater) (push) Has been cancelled
Build and Release / Prepare & create release (push) Has been cancelled
Build and Release / Publish release (push) Has been cancelled
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-apple-darwin, osx-arm64, macos-latest, aarch64-apple-darwin, dmg updater) (push) Has been cancelled
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-pc-windows-msvc.exe, win-arm64, windows-latest, aarch64-pc-windows-msvc, nsis updater) (push) Has been cancelled
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-unknown-linux-gnu, linux-arm64, ubuntu-22.04-arm, aarch64-unknown-linux-gnu, appimage deb updater) (push) Has been cancelled
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-apple-darwin, osx-x64, macos-latest, x86_64-apple-darwin, dmg updater) (push) Has been cancelled
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-pc-windows-msvc.exe, win-x64, windows-latest, x86_64-pc-windows-msvc, nsis updater) (push) Has been cancelled
79 lines
3.4 KiB
C#
79 lines
3.4 KiB
C#
using System.Text;
|
|
|
|
using AIStudio.Agents;
|
|
using AIStudio.Chat;
|
|
using AIStudio.Provider;
|
|
using AIStudio.Settings;
|
|
using AIStudio.Tools.PluginSystem;
|
|
|
|
namespace AIStudio.Tools.RAG.AugmentationProcesses;
|
|
|
|
public sealed class AugmentationOne : IAugmentationProcess
|
|
{
|
|
private static readonly ILogger<AugmentationOne> LOGGER = Program.LOGGER_FACTORY.CreateLogger<AugmentationOne>();
|
|
|
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(AugmentationOne).Namespace, nameof(AugmentationOne));
|
|
|
|
#region Implementation of IAugmentationProcess
|
|
|
|
/// <inheritdoc />
|
|
public string TechnicalName => "AugmentationOne";
|
|
|
|
/// <inheritdoc />
|
|
public string UIName => TB("Standard augmentation process");
|
|
|
|
/// <inheritdoc />
|
|
public string Description => TB("This is the standard augmentation process, which uses all retrieval contexts to augment the chat thread.");
|
|
|
|
/// <inheritdoc />
|
|
public async Task<ChatThread> ProcessAsync(IProvider provider, IContent lastUserPrompt, ChatThread chatThread, IReadOnlyList<IRetrievalContext> retrievalContexts, CancellationToken token = default)
|
|
{
|
|
var settings = Program.SERVICE_PROVIDER.GetService<SettingsManager>()!;
|
|
|
|
if(retrievalContexts.Count == 0)
|
|
{
|
|
LOGGER.LogWarning("No retrieval contexts were issued. Skipping the augmentation process.");
|
|
return chatThread;
|
|
}
|
|
|
|
var numTotalRetrievalContexts = retrievalContexts.Count;
|
|
|
|
// Want the user to validate all retrieval contexts?
|
|
if (settings.ConfigurationData.AgentRetrievalContextValidation.EnableRetrievalContextValidation && chatThread.DataSourceOptions.AutomaticValidation)
|
|
{
|
|
// Let's get the validation agent & set up its provider:
|
|
var validationAgent = Program.SERVICE_PROVIDER.GetService<AgentRetrievalContextValidation>()!;
|
|
validationAgent.SetLLMProvider(provider);
|
|
|
|
// Let's validate all retrieval contexts:
|
|
var validationResults = await validationAgent.ValidateRetrievalContextsAsync(lastUserPrompt, chatThread, retrievalContexts, token);
|
|
|
|
//
|
|
// Now, filter the retrieval contexts to the most relevant ones:
|
|
//
|
|
var targetWindow = validationResults.DetermineTargetWindow(TargetWindowStrategy.TOP10_BETTER_THAN_GUESSING);
|
|
var threshold = validationResults.GetConfidenceThreshold(targetWindow);
|
|
|
|
// Filter the retrieval contexts:
|
|
retrievalContexts = validationResults.Where(x => x.RetrievalContext is not null && x.Confidence >= threshold).Select(x => x.RetrievalContext!).ToList();
|
|
}
|
|
|
|
LOGGER.LogInformation($"Starting the augmentation process over {numTotalRetrievalContexts:###,###,###,###} retrieval contexts.");
|
|
|
|
//
|
|
// We build a huge prompt from all retrieval contexts:
|
|
//
|
|
var sb = new StringBuilder();
|
|
sb.AppendLine("The following useful information will help you in processing the user prompt:");
|
|
sb.AppendLine();
|
|
|
|
// Let's convert all retrieval contexts to Markdown:
|
|
await retrievalContexts.AsMarkdown(sb, token);
|
|
|
|
// Add the augmented data to the chat thread:
|
|
chatThread.AugmentedData = sb.ToString();
|
|
return chatThread;
|
|
}
|
|
|
|
#endregion
|
|
} |