diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Consts/AiHubConst.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Consts/AiHubConst.cs
index c1f3c416..7eea51dd 100644
--- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Consts/AiHubConst.cs
+++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Consts/AiHubConst.cs
@@ -3,4 +3,4 @@
public class AiHubConst
{
public const string VipRole = "YiXinAi-Vip";
-}
\ No newline at end of file
+}
diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Consts/ModelConst.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Consts/ModelConst.cs
new file mode 100644
index 00000000..c88d6749
--- /dev/null
+++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain.Shared/Consts/ModelConst.cs
@@ -0,0 +1,47 @@
+namespace Yi.Framework.AiHub.Domain.Shared.Consts;
+
+public class ModelConst
+{
+ ///
+ /// 需要移除的模型前缀列表
+ ///
+ private static readonly List ModelPrefixesToRemove =
+ [
+ "yi-",
+ "ma-"
+ ];
+
+ ///
+ /// 获取模型ID的前缀(如果存在)
+ ///
+ private static string? GetModelPrefix(string? modelId)
+ {
+ if (string.IsNullOrEmpty(modelId)) return null;
+
+ return ModelPrefixesToRemove.FirstOrDefault(prefix =>
+ modelId!.StartsWith(prefix, StringComparison.OrdinalIgnoreCase));
+ }
+
+ ///
+ /// 移除模型ID的前缀,返回标准模型ID
+ ///
+ public static string RemoveModelPrefix(string? modelId)
+ {
+ if (string.IsNullOrEmpty(modelId)) return string.Empty;
+
+ var prefix = GetModelPrefix(modelId);
+ if (prefix != null)
+ {
+ return modelId[prefix.Length..];
+ }
+ return modelId;
+ }
+
+ ///
+ /// 处理模型ID,如有前缀则移除并返回新字符串
+ ///
+ public static string ProcessModelId(string? modelId)
+ {
+ return RemoveModelPrefix(modelId);
+ }
+}
diff --git a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiGateWayManager.cs b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiGateWayManager.cs
index 38938708..5e83745e 100644
--- a/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiGateWayManager.cs
+++ b/Yi.Abp.Net8/module/ai-hub/Yi.Framework.AiHub.Domain/Managers/AiGateWayManager.cs
@@ -15,6 +15,7 @@ using Yi.Framework.AiHub.Domain.AiGateWay.Exceptions;
using Yi.Framework.AiHub.Domain.Entities.Chat;
using Yi.Framework.AiHub.Domain.Entities.Model;
using Yi.Framework.AiHub.Domain.Shared.Consts;
+using ModelConst = Yi.Framework.AiHub.Domain.Shared.Consts.ModelConst;
using Yi.Framework.AiHub.Domain.Shared.Dtos;
using Yi.Framework.AiHub.Domain.Shared.Dtos.Anthropic;
using Yi.Framework.AiHub.Domain.Shared.Dtos.Gemini;
@@ -97,12 +98,8 @@ public class AiGateWayManager : DomainService
throw new UserFriendlyException($"【{modelId}】模型当前版本【{modelApiType}】格式不支持");
}
- // ✅ 统一处理 yi- 后缀(网关层模型规范化)
- if (!string.IsNullOrEmpty(aiModelDescribe.ModelId) &&
- aiModelDescribe.ModelId.StartsWith("yi-", StringComparison.OrdinalIgnoreCase))
- {
- aiModelDescribe.ModelId = aiModelDescribe.ModelId[3..];
- }
+ // ✅ 统一处理模型前缀(网关层模型规范化)
+ aiModelDescribe.ModelId = ModelConst.RemoveModelPrefix(aiModelDescribe.ModelId);
return aiModelDescribe;
}
@@ -134,11 +131,7 @@ public class AiGateWayManager : DomainService
LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName);
var sourceModelId = request.Model;
- if (!string.IsNullOrEmpty(request.Model) &&
- request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase))
- {
- request.Model = request.Model[3..];
- }
+ request.Model = ModelConst.ProcessModelId(request.Model);
var data = await chatService.CompleteChatAsync(modelDescribe, request, cancellationToken);
data.SupplementalMultiplier(modelDescribe.Multiplier);
@@ -208,11 +201,7 @@ public class AiGateWayManager : DomainService
LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName);
var sourceModelId = request.Model;
- if (!string.IsNullOrEmpty(request.Model) &&
- request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase))
- {
- request.Model = request.Model[3..];
- }
+ request.Model = ModelConst.ProcessModelId(request.Model);
var completeChatResponse = chatService.CompleteChatStreamAsync(modelDescribe, request, cancellationToken);
var tokenUsage = new ThorUsageResponse();
@@ -540,11 +529,7 @@ public class AiGateWayManager : DomainService
var modelDescribe = await GetModelAsync(ModelApiTypeEnum.Messages, request.Model);
var sourceModelId = request.Model;
- if (!string.IsNullOrEmpty(request.Model) &&
- request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase))
- {
- request.Model = request.Model[3..];
- }
+ request.Model = ModelConst.ProcessModelId(request.Model);
var chatService =
LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName);
@@ -620,11 +605,7 @@ public class AiGateWayManager : DomainService
LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName);
var sourceModelId = request.Model;
- if (!string.IsNullOrEmpty(request.Model) &&
- request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase))
- {
- request.Model = request.Model[3..];
- }
+ request.Model = ModelConst.ProcessModelId(request.Model);
var completeChatResponse = chatService.StreamChatCompletionsAsync(modelDescribe, request, cancellationToken);
ThorUsageResponse? tokenUsage = new ThorUsageResponse();
@@ -744,11 +725,7 @@ public class AiGateWayManager : DomainService
var chatService =
LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName);
var sourceModelId = request.Model;
- if (!string.IsNullOrEmpty(request.Model) &&
- request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase))
- {
- request.Model = request.Model[3..];
- }
+ request.Model = ModelConst.ProcessModelId(request.Model);
var data = await chatService.ResponsesAsync(modelDescribe, request, cancellationToken);
@@ -820,11 +797,7 @@ public class AiGateWayManager : DomainService
var chatService =
LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName);
var sourceModelId = request.Model;
- if (!string.IsNullOrEmpty(request.Model) &&
- request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase))
- {
- request.Model = request.Model[3..];
- }
+ request.Model = ModelConst.ProcessModelId(request.Model);
var completeChatResponse = chatService.ResponsesStreamAsync(modelDescribe, request, cancellationToken);
ThorUsageResponse? tokenUsage = null;
@@ -1164,12 +1137,8 @@ public class AiGateWayManager : DomainService
response.Headers.TryAdd("Connection", "keep-alive");
var sourceModelId = modelId;
- // 处理 yi- 前缀
- if (!string.IsNullOrEmpty(modelId) &&
- modelId.StartsWith("yi-", StringComparison.OrdinalIgnoreCase))
- {
- modelId = modelId[3..];
- }
+ // 处理模型前缀
+ modelId = ModelConst.RemoveModelPrefix(modelId);
var modelDescribe = await GetModelAsync(apiType, sourceModelId);
@@ -1302,12 +1271,8 @@ public class AiGateWayManager : DomainService
// 提取用户最后一条消息
var userContent = request.Messages?.LastOrDefault()?.MessagesStore ?? string.Empty;
- // 处理 yi- 前缀
- if (!string.IsNullOrEmpty(request.Model) &&
- request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase))
- {
- request.Model = request.Model[3..];
- }
+ // 处理模型前缀
+ request.Model = ModelConst.ProcessModelId(request.Model);
var chatService = LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName);
var completeChatResponse = chatService.CompleteChatStreamAsync(modelDescribe, request, cancellationToken);
@@ -1391,12 +1356,8 @@ public class AiGateWayManager : DomainService
userContent = textContent?.Text ?? System.Text.Json.JsonSerializer.Serialize(lastMessage.Contents);
}
- // 处理 yi- 前缀
- if (!string.IsNullOrEmpty(request.Model) &&
- request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase))
- {
- request.Model = request.Model[3..];
- }
+ // 处理模型前缀
+ request.Model = ModelConst.ProcessModelId(request.Model);
var chatService = LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName);
var completeChatResponse = chatService.StreamChatCompletionsAsync(modelDescribe, request, cancellationToken);
@@ -1509,12 +1470,8 @@ public class AiGateWayManager : DomainService
}
}
- // 处理 yi- 前缀
- if (!string.IsNullOrEmpty(request.Model) &&
- request.Model.StartsWith("yi-", StringComparison.OrdinalIgnoreCase))
- {
- request.Model = request.Model[3..];
- }
+ // 处理模型前缀
+ request.Model = ModelConst.ProcessModelId(request.Model);
var chatService = LazyServiceProvider.GetRequiredKeyedService(modelDescribe.HandlerName);
var completeChatResponse = chatService.ResponsesStreamAsync(modelDescribe, request, cancellationToken);
diff --git a/Yi.Ai.Vue3/src/config/version.ts b/Yi.Ai.Vue3/src/config/version.ts
index 953680a5..34558fcf 100644
--- a/Yi.Ai.Vue3/src/config/version.ts
+++ b/Yi.Ai.Vue3/src/config/version.ts
@@ -6,7 +6,7 @@
*/
// 主版本号 - 修改此处即可同步更新所有地方的版本显示
-export const APP_VERSION = '3.8.0';
+export const APP_VERSION = '3.7.1';
// 应用名称
export const APP_NAME = '意心AI';