using System; using System.ClientModel; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using Microsoft.Extensions.Hosting; using OllamaSharp; using OpenAI; using OpenAI.Chat; using OllamaStudy.Core; namespace OllamaStudy.UseExtensionsAI { /// /// /// public class Startup { //支持两种配置样式,并且两种 Configure 方法都受支持 #region HostApplicationBuilder 风格, 此风格优先级高于Startup(只执行一种风格) //public void ConfigureHostApplicationBuilder(IHostApplicationBuilder hostApplicationBuilder) //{ //} //public IHost BuildHostApplicationBuilder(HostApplicationBuilder hostApplicationBuilder) //{ // return hostApplicationBuilder.Build(); //} #endregion #region Startup 风格 /// /// (可选) 创建IHostBuilder /// /// public IHostBuilder CreateHostBuilder() { return Host.CreateDefaultBuilder(); } public void ConfigureHost(IHostBuilder hostBuilder) { hostBuilder.ConfigureAppConfiguration((hostBuilder,configBuilder) => { configBuilder .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("OllamaServerConfig.json", false, true); }); } /// /// (可选) 构建Host /// /// /// public IHost BuildHost(IHostBuilder hostBuilder) { return hostBuilder.Build(); } /// /// 配置服务 /// /// /// public void ConfigureServices(IServiceCollection services, HostBuilderContext context) { services .AddOptions() .Configure(context.Configuration.GetRequiredSection("OllamaServer")); services .AddScoped(provider => { var options = provider.GetRequiredService>().CurrentValue; return new OllamaApiClient(options.OllamaServerUrl,options.Model); }) .AddScoped(provider => { var options = provider.GetRequiredService>().CurrentValue; var openAIClientOptions = new OpenAIClientOptions() { Endpoint = new Uri(new Uri(options.OllamaServerUrl),"v1") }; return new OpenAIClient(new ApiKeyCredential("nokey"),openAIClientOptions); }) .AddScoped(provider => { var options = provider.GetRequiredService>().CurrentValue; var openAIClientOptions = new OpenAIClientOptions() { Endpoint = new Uri(new Uri(options.OllamaServerUrl),"v1") }; return new ChatClient(options.Model,new ApiKeyCredential("nokey"),openAIClientOptions); }); } #endregion } }