Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled
- Added Deno analyzer with comprehensive metadata and evidence structure. - Created a detailed implementation plan for Sprint 130 focusing on Deno analyzer. - Introduced AdvisoryAiGuardrailOptions for managing guardrail configurations. - Developed GuardrailPhraseLoader for loading blocked phrases from JSON files. - Implemented tests for AdvisoryGuardrailOptions binding and phrase loading. - Enhanced telemetry for Advisory AI with metrics tracking. - Added VexObservationProjectionService for querying VEX observations. - Created extensive tests for VexObservationProjectionService functionality. - Introduced Ruby language analyzer with tests for simple and complex workspaces. - Added Ruby application fixtures for testing purposes.
45 lines
1.4 KiB
C#
45 lines
1.4 KiB
C#
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Text.Json;
|
|
|
|
namespace StellaOps.AdvisoryAI.Hosting;
|
|
|
|
internal static class GuardrailPhraseLoader
|
|
{
|
|
public static IReadOnlyCollection<string> Load(string path)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(path))
|
|
{
|
|
throw new ArgumentException("Guardrail phrase file path must be provided.", nameof(path));
|
|
}
|
|
|
|
using var stream = File.OpenRead(path);
|
|
using var document = JsonDocument.Parse(stream);
|
|
var root = document.RootElement;
|
|
return root.ValueKind switch
|
|
{
|
|
JsonValueKind.Array => ExtractValues(root),
|
|
JsonValueKind.Object when root.TryGetProperty("phrases", out var phrases) => ExtractValues(phrases),
|
|
_ => throw new InvalidDataException($"Guardrail phrase file {path} must be a JSON array or object with a phrases array."),
|
|
};
|
|
}
|
|
|
|
private static IReadOnlyCollection<string> ExtractValues(JsonElement element)
|
|
{
|
|
var phrases = new List<string>();
|
|
foreach (var item in element.EnumerateArray())
|
|
{
|
|
if (item.ValueKind == JsonValueKind.String)
|
|
{
|
|
var value = item.GetString();
|
|
if (!string.IsNullOrWhiteSpace(value))
|
|
{
|
|
phrases.Add(value.Trim());
|
|
}
|
|
}
|
|
}
|
|
|
|
return phrases;
|
|
}
|
|
}
|