// Copyright (c) Microsoft. All rights reserved. using Microsoft.Agents.AI; using Microsoft.Extensions.AI; using Microsoft.Extensions.Logging; using Microsoft.Shared.Diagnostics; namespace Anthropic.Services; /// /// Provides extension methods for the class. /// public static class AnthropicBetaServiceExtensions { /// /// Specifies the default maximum number of tokens allowed for processing operations. /// public static int DefaultMaxTokens { get; set; } = 4096; /// /// Creates a new AI agent using the specified model and options. /// /// The Anthropic beta service. /// The model to use for chat completions. /// The instructions for the AI agent. /// The name of the AI agent. /// The description of the AI agent. /// The tools available to the AI agent. /// The default maximum tokens for chat completions. Defaults to if not provided. /// Provides a way to customize the creation of the underlying used by the agent. /// Optional logger factory for enabling logging within the agent. /// An optional to use for resolving services required by the instances being invoked. /// The created AI agent. public static ChatClientAgent AsAIAgent( this IBetaService betaService, string model, string? instructions = null, string? name = null, string? description = null, IList? tools = null, int? defaultMaxTokens = null, Func? clientFactory = null, ILoggerFactory? loggerFactory = null, IServiceProvider? services = null) { var options = new ChatClientAgentOptions { Name = name, Description = description, }; if (!string.IsNullOrWhiteSpace(instructions)) { options.ChatOptions ??= new(); options.ChatOptions.Instructions = instructions; } if (tools is { Count: > 0 }) { options.ChatOptions ??= new(); options.ChatOptions.Tools = tools; } var chatClient = betaService.AsIChatClient(model, defaultMaxTokens ?? DefaultMaxTokens); if (clientFactory is not null) { chatClient = clientFactory(chatClient); } return new ChatClientAgent(chatClient, options, loggerFactory, services); } /// /// Creates an AI agent from an using the Anthropic Chat Completion API. /// /// The Anthropic to use for the agent. /// Full set of options to configure the agent. /// Provides a way to customize the creation of the underlying used by the agent. /// Optional logger factory for enabling logging within the agent. /// An optional to use for resolving services required by the instances being invoked. /// An instance backed by the Anthropic Chat Completion service. /// Thrown when or is . public static ChatClientAgent AsAIAgent( this IBetaService betaService, ChatClientAgentOptions options, Func? clientFactory = null, ILoggerFactory? loggerFactory = null, IServiceProvider? services = null) { Throw.IfNull(betaService); Throw.IfNull(options); var chatClient = betaService.AsIChatClient(); if (clientFactory is not null) { chatClient = clientFactory(chatClient); } return new ChatClientAgent(chatClient, options, loggerFactory, services); } }