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
}
}