feat: 兼容cline

This commit is contained in:
ccnetcore
2025-07-09 22:44:24 +08:00
parent c5a9b9a15f
commit 5953be63cb
2 changed files with 42 additions and 9 deletions

View File

@@ -1,10 +1,13 @@
namespace Yi.Framework.AiHub.Application.Contracts.Dtos.OpenAiDto;
using System.Collections;
using System.Text.Json;
namespace Yi.Framework.AiHub.Application.Contracts.Dtos.OpenAiDto;
public class ChatCompletionsInput
{
public List<OpenAiMessage> Messages { get; set; }
public bool Stream { get; set; }
public bool? Stream { get; set; }
public string? Prompt { get; set; }
public string Model { get; set; }
@@ -16,6 +19,32 @@ public class ChatCompletionsInput
public class OpenAiMessage
{
public string Role { get; set; }
public string Content { get; set; }
public string? Role { get; set; }
public object? Content { get; set; }
public string ConvertContent()
{
if (Content is string content)
{
return content;
}
if (Content is JsonElement jsonElement && jsonElement.ValueKind == JsonValueKind.Array)
{
var contentItems = jsonElement.Deserialize<List<ContentItem>>();
var currentContentItem = contentItems.FirstOrDefault();
if (currentContentItem.type == "text")
{
return currentContentItem.text;
}
}
throw new UserFriendlyException("当前格式暂不支持");
}
}
public class ContentItem
{
public string? type { get; set; }
public string? text { get; set; }
}

View File

@@ -36,27 +36,31 @@ public class OpenApiService : ApplicationService
/// <param name="input"></param>
/// <param name="cancellationToken"></param>
[HttpPost("openApi/v1/chat/completions")]
public async Task ChatCompletionsAsync(ChatCompletionsInput input, CancellationToken cancellationToken)
public async Task ChatCompletionsAsync([FromBody]ChatCompletionsInput input, CancellationToken cancellationToken)
{
//前面都是校验,后面才是真正的调用
var httpContext = this._httpContextAccessor.HttpContext;
var userId = await _tokenManager.GetUserIdAsync(GetTokenByHttpContext(httpContext));
var history = new List<ChatMessage>();
foreach (var aiChatContextDto in input.Messages)
{
if (aiChatContextDto.Role == "assistant")
{
history.Add(ChatMessage.CreateAssistantMessage(aiChatContextDto.Content));
history.Add(ChatMessage.CreateAssistantMessage(aiChatContextDto.ConvertContent()));
}
else if (aiChatContextDto.Role == "user")
{
history.Add(ChatMessage.CreateUserMessage(aiChatContextDto.Content));
history.Add(ChatMessage.CreateUserMessage(aiChatContextDto.ConvertContent()));
}
else if (aiChatContextDto.Role == "system")
{
history.Add(ChatMessage.CreateSystemMessage(aiChatContextDto.ConvertContent()));
}
}
//是否使用流式传输
if (input.Stream)
if (input.Stream == true)
{
//ai网关代理httpcontext
await _aiGateWayManager.CompleteChatStreamForStatisticsAsync(_httpContextAccessor.HttpContext, input.Model,