// Copyright (c) Microsoft. All rights reserved. using System; using System.Collections.Generic; using System.Text.Json; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.AI; namespace Microsoft.Agents.AI; internal sealed class TestAIAgent : AIAgent { public Func? NameFunc; public Func? DescriptionFunc; public readonly Func DeserializeSessionFunc = delegate { throw new NotSupportedException(); }; public readonly Func CreateSessionFunc = delegate { throw new NotSupportedException(); }; public Func, AgentSession?, AgentRunOptions?, CancellationToken, Task> RunAsyncFunc = delegate { throw new NotSupportedException(); }; public Func, AgentSession?, AgentRunOptions?, CancellationToken, IAsyncEnumerable> RunStreamingAsyncFunc = delegate { throw new NotSupportedException(); }; public Func? GetServiceFunc; public override string? Name => this.NameFunc?.Invoke() ?? base.Name; public override string? Description => this.DescriptionFunc?.Invoke() ?? base.Description; protected override ValueTask SerializeSessionCoreAsync(AgentSession session, JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default) => throw new NotImplementedException(); protected override ValueTask DeserializeSessionCoreAsync(JsonElement serializedState, JsonSerializerOptions? jsonSerializerOptions = null, CancellationToken cancellationToken = default) => new(this.DeserializeSessionFunc(serializedState, jsonSerializerOptions)); protected override ValueTask CreateSessionCoreAsync(CancellationToken cancellationToken = default) => new(this.CreateSessionFunc()); protected override Task RunCoreAsync(IEnumerable messages, AgentSession? session = null, AgentRunOptions? options = null, CancellationToken cancellationToken = default) => this.RunAsyncFunc(messages, session, options, cancellationToken); protected override IAsyncEnumerable RunCoreStreamingAsync(IEnumerable messages, AgentSession? session = null, AgentRunOptions? options = null, CancellationToken cancellationToken = default) => this.RunStreamingAsyncFunc(messages, session, options, cancellationToken); public override object? GetService(Type serviceType, object? serviceKey = null) => this.GetServiceFunc is { } func ? func(serviceType, serviceKey) : base.GetService(serviceType, serviceKey); }