// Copyright (c) Microsoft. All rights reserved. using System.ComponentModel.DataAnnotations; using Microsoft.Extensions.Configuration; namespace ChatWithAgent.Configuration; /// /// Helper class for loading host configuration settings. /// public sealed class HostConfig { /// /// The AI services section name. /// public const string AIServicesSectionName = "AIServices"; /// /// The Vector stores section name. /// public const string VectorStoresSectionName = "VectorStores"; /// /// The name of the connection string of Azure OpenAI service. /// public const string AzureOpenAIConnectionStringName = "AzureOpenAI"; /// /// The name of the connection string of OpenAI service. /// public const string OpenAIConnectionStringName = "OpenAI"; private readonly ConfigurationManager _configurationManager; private readonly AzureOpenAIChatConfig _azureOpenAIChatConfig = new(); private readonly AzureOpenAIEmbeddingsConfig _azureOpenAIEmbeddingsConfig = new(); private readonly OpenAIChatConfig _openAIChatConfig = new(); private readonly OpenAIEmbeddingsConfig _openAIEmbeddingsConfig = new(); private readonly AzureAISearchConfig _azureAISearchConfig = new(); private readonly RagConfig _ragConfig = new(); /// /// Initializes a new instance of the class. /// /// The configuration manager. public HostConfig(ConfigurationManager configurationManager) { configurationManager .GetSection($"{AIServicesSectionName}:{AzureOpenAIChatConfig.ConfigSectionName}") .Bind(this._azureOpenAIChatConfig); configurationManager .GetSection($"{AIServicesSectionName}:{AzureOpenAIEmbeddingsConfig.ConfigSectionName}") .Bind(this._azureOpenAIEmbeddingsConfig); configurationManager .GetSection($"{AIServicesSectionName}:{OpenAIChatConfig.ConfigSectionName}") .Bind(this._openAIChatConfig); configurationManager .GetSection($"{AIServicesSectionName}:{OpenAIEmbeddingsConfig.ConfigSectionName}") .Bind(this._openAIEmbeddingsConfig); configurationManager .GetSection($"{VectorStoresSectionName}:{AzureAISearchConfig.ConfigSectionName}") .Bind(this._azureAISearchConfig); configurationManager .GetSection($"{AIServicesSectionName}:{RagConfig.ConfigSectionName}") .Bind(this._ragConfig); configurationManager .Bind(this); this._configurationManager = configurationManager; } /// /// The AI chat service to use. /// [Required] public string AIChatService { get; set; } = string.Empty; /// /// The Azure OpenAI chat service configuration. /// public AzureOpenAIChatConfig AzureOpenAIChat => this._azureOpenAIChatConfig; /// /// The Azure OpenAI embeddings service configuration. /// public AzureOpenAIEmbeddingsConfig AzureOpenAIEmbeddings => this._azureOpenAIEmbeddingsConfig; /// /// The OpenAI chat service configuration. /// public OpenAIChatConfig OpenAIChat => this._openAIChatConfig; /// /// The OpenAI embeddings service configuration. /// public OpenAIEmbeddingsConfig OpenAIEmbeddings => this._openAIEmbeddingsConfig; /// /// The Azure AI search configuration. /// public AzureAISearchConfig AzureAISearch => this._azureAISearchConfig; /// /// The RAG configuration. /// public RagConfig Rag => this._ragConfig; }