// Copyright (c) Microsoft. All rights reserved. using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.AI.Evaluation; namespace Microsoft.Agents.AI; /// /// Evaluator that runs check functions locally without API calls. /// public sealed class LocalEvaluator : IAgentEvaluator { private readonly EvalCheck[] _checks; /// /// Initializes a new instance of the class. /// /// The check functions to run on each item. public LocalEvaluator(params EvalCheck[] checks) { this._checks = checks; } /// public string Name => "LocalEvaluator"; /// public Task EvaluateAsync( IReadOnlyList items, string evalName = "Local Eval", CancellationToken cancellationToken = default) { var results = new List(items.Count); foreach (var item in items) { cancellationToken.ThrowIfCancellationRequested(); var evalResult = new EvaluationResult(); foreach (var check in this._checks) { var EvalCheckResult = check(item); evalResult.Metrics[EvalCheckResult.CheckName] = new BooleanMetric( EvalCheckResult.CheckName, EvalCheckResult.Passed, reason: EvalCheckResult.Reason) { Interpretation = new EvaluationMetricInterpretation { Rating = EvalCheckResult.Passed ? EvaluationRating.Good : EvaluationRating.Unacceptable, Failed = !EvalCheckResult.Passed, }, }; } results.Add(evalResult); } return Task.FromResult(new AgentEvaluationResults(this.Name, results, inputItems: items)); } }