//
// Copyright (c) StellaOps. Licensed under the BUSL-1.1.
//
using System.Security.Cryptography;
using System.Text;
namespace StellaOps.AdvisoryAI.Explanation;
public sealed class NullExplanationInferenceClient : IExplanationInferenceClient
{
public Task GenerateAsync(
ExplanationPrompt prompt,
CancellationToken cancellationToken = default)
{
ArgumentNullException.ThrowIfNull(prompt);
var promptHash = ComputeHash(prompt.Content ?? string.Empty);
var content = $"Placeholder explanation (no model). prompt_hash=sha256:{promptHash}";
return Task.FromResult(new ExplanationInferenceResult
{
Content = content,
Confidence = 0.0,
ModelId = "stub-explainer:v0"
});
}
private static string ComputeHash(string content)
{
var bytes = SHA256.HashData(Encoding.UTF8.GetBytes(content));
return Convert.ToHexStringLower(bytes);
}
}