Files
Yi.Admin/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/YiFrameworkAiHubDomainModule.cs

177 lines
6.7 KiB
C#
Raw Normal View History

using Alipay.EasySDK.Factory;
using Alipay.EasySDK.Kernel;
2025-07-28 14:39:02 +08:00
using Dm.util;
using Microsoft.Extensions.Configuration;
2025-06-19 19:13:43 +08:00
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Domain;
2025-07-17 23:10:26 +08:00
using Yi.Framework.AiHub.Domain.AiGateWay;
using Yi.Framework.AiHub.Domain.AiGateWay.Impl.ThorAzureDatabricks.Chats;
using Yi.Framework.AiHub.Domain.AiGateWay.Impl.ThorAzureOpenAI.Chats;
2025-08-04 01:03:47 +08:00
using Yi.Framework.AiHub.Domain.AiGateWay.Impl.ThorAzureOpenAI.Images;
2025-10-11 15:25:43 +08:00
using Yi.Framework.AiHub.Domain.AiGateWay.Impl.ThorClaude.Chats;
using Yi.Framework.AiHub.Domain.AiGateWay.Impl.ThorCustomOpenAI.Chats;
2025-07-21 21:57:14 +08:00
using Yi.Framework.AiHub.Domain.AiGateWay.Impl.ThorDeepSeek.Chats;
using Yi.Framework.AiHub.Domain.AiGateWay.Impl.ThorSiliconFlow.Embeddings;
2025-08-27 23:42:46 +08:00
using Yi.Framework.AiHub.Domain.Managers.Fuwuhao;
2025-06-19 19:13:43 +08:00
using Yi.Framework.AiHub.Domain.Shared;
2025-08-11 15:31:11 +08:00
using Yi.Framework.AiHub.Domain.Shared.Dtos.OpenAi;
2025-06-19 19:13:43 +08:00
using Yi.Framework.Mapster;
using Microsoft.Extensions.DependencyInjection;
2025-12-17 18:47:28 +08:00
using Yi.Framework.AiHub.Domain.AiGateWay.Impl.ThorGemini.Chats;
2025-06-19 19:13:43 +08:00
namespace Yi.Framework.AiHub.Domain
{
[DependsOn(
typeof(YiFrameworkAiHubDomainSharedModule),
typeof(YiFrameworkMapsterModule),
2025-06-20 18:06:33 +08:00
typeof(AbpDddDomainModule)
2025-06-19 19:13:43 +08:00
)]
public class YiFrameworkAiHubDomainModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
var services = context.Services;
2025-06-25 22:41:32 +08:00
2025-10-11 15:25:43 +08:00
#region OpenAi ChatCompletion
2025-07-17 23:10:26 +08:00
services.AddKeyedTransient<IChatCompletionService, AzureOpenAiChatCompletionCompletionsService>(
nameof(AzureOpenAiChatCompletionCompletionsService));
services.AddKeyedTransient<IChatCompletionService, AzureDatabricksChatCompletionsService>(
nameof(AzureDatabricksChatCompletionsService));
2025-07-21 21:57:14 +08:00
services.AddKeyedTransient<IChatCompletionService, DeepSeekChatCompletionsService>(
nameof(DeepSeekChatCompletionsService));
2025-10-11 15:25:43 +08:00
services.AddKeyedTransient<IChatCompletionService, OpenAiChatCompletionsService>(
nameof(OpenAiChatCompletionsService));
services.AddKeyedTransient<IChatCompletionService, ClaudiaChatCompletionsService>(
nameof(ClaudiaChatCompletionsService));
2025-10-11 15:25:43 +08:00
#endregion
#region Anthropic ChatCompletion
2025-12-11 17:33:12 +08:00
2025-10-11 15:25:43 +08:00
services.AddKeyedTransient<IAnthropicChatCompletionService, AnthropicChatCompletionsService>(
nameof(AnthropicChatCompletionsService));
#endregion
2025-12-11 01:17:31 +08:00
#region OpenAi Response
services.AddKeyedTransient<IOpenAiResponseService, OpenAiResponseService>(
nameof(OpenAiResponseService));
#endregion
2025-10-11 15:25:43 +08:00
2025-12-17 18:47:28 +08:00
#region Gemini GenerateContent
services.AddKeyedTransient<IGeminiGenerateContentService, GeminiGenerateContentService>(
nameof(GeminiGenerateContentService));
#endregion
2025-10-11 15:25:43 +08:00
#region Image
2025-07-18 20:46:30 +08:00
2025-08-04 01:03:47 +08:00
services.AddKeyedTransient<IImageService, AzureOpenAIServiceImageService>(
nameof(AzureOpenAIServiceImageService));
2025-10-11 15:25:43 +08:00
#endregion
#region Embedding
services.AddKeyedTransient<ITextEmbeddingService, SiliconFlowTextEmbeddingService>(
nameof(SiliconFlowTextEmbeddingService));
2025-10-11 15:25:43 +08:00
#endregion
2025-07-18 20:46:30 +08:00
//ai模型特殊性兼容处理
Configure<SpecialCompatibleOptions>(options =>
{
options.Handles.Add(request =>
{
if (request.Model == "gpt-5.1-chat")
{
request.Temperature = null;
request.TopP = null;
request.MaxCompletionTokens = request.MaxTokens;
request.MaxTokens = null;
2025-11-24 09:42:40 +08:00
request.PresencePenalty = null;
}
});
options.Handles.Add(request =>
{
if (request.Model =="gpt-5-mini")
{
request.Temperature = null;
request.TopP = null;
}
});
options.Handles.Add(request =>
{
if (request.Model == "databricks-claude-sonnet-4")
{
request.PresencePenalty = null;
}
});
options.Handles.Add(request =>
{
if (request.Model == "o1")
2025-07-18 20:46:30 +08:00
{
request.Temperature = null;
}
});
2025-07-21 21:57:14 +08:00
options.Handles.Add(request =>
{
if (request.Model.StartsWith("o3-mini") || request.Model.StartsWith("o4-mini"))
{
request.MaxCompletionTokens = request.MaxTokens;
request.MaxTokens = null;
request.Temperature = null;
}
});
2025-07-22 10:40:23 +08:00
options.Handles.Add(request =>
{
if (request.Stream == true)
{
request.StreamOptions = new ThorStreamOptions()
{
IncludeUsage = true
};
}
});
options.Handles.Add(request =>
{
2025-11-24 09:42:40 +08:00
if (request.MaxTokens > 128000)
{
2025-11-24 09:42:40 +08:00
request.MaxTokens = 128000;
}
});
options.AnthropicHandles.add(request =>
{
if (request.MaxTokens is null || request.MaxTokens <= 0)
{
throw new UserFriendlyException("MaxTokens must be greater than or equal to 0");
}
});
2025-07-18 20:46:30 +08:00
});
2025-10-11 15:25:43 +08:00
//配置支付宝支付
var config = configuration.GetSection("Alipay").Get<Config>();
Factory.SetOptions(config);
2025-10-11 15:25:43 +08:00
2025-08-27 23:42:46 +08:00
//配置服务号
Configure<FuwuhaoOptions>(configuration.GetSection("Fuwuhao"));
services.AddHttpClient()
.ConfigureHttpClientDefaults(builder =>
{
builder.ConfigureHttpClient(client =>
{
client.DefaultRequestHeaders.Add("User-Agent", "Apifox/1.0.0 (https://apifox.com)");
client.Timeout = TimeSpan.FromMinutes(10);
});
});
2025-06-19 19:13:43 +08:00
}
}
}