fix: 延迟设置SSE响应头并兼容异常流数据
在成功获取第一条流式消息后再设置SSE响应头,避免无数据时提前建立连接;同时忽略异常类型的流消息,提升对部分AI工具的兼容性。
This commit is contained in:
@@ -612,10 +612,7 @@ public class AiGateWayManager : DomainService
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
var response = httpContext.Response;
|
||||
// 设置响应头,声明是 SSE 流
|
||||
response.ContentType = "text/event-stream;charset=utf-8;";
|
||||
response.Headers.TryAdd("Cache-Control", "no-cache");
|
||||
response.Headers.TryAdd("Connection", "keep-alive");
|
||||
// 注意:SSE响应头推迟到第一条消息成功获取后再设置
|
||||
|
||||
_specialCompatible.AnthropicCompatible(request);
|
||||
var modelDescribe = await GetModelAsync(ModelApiTypeEnum.Messages, request.Model);
|
||||
@@ -631,10 +628,25 @@ public class AiGateWayManager : DomainService
|
||||
|
||||
var completeChatResponse = chatService.StreamChatCompletionsAsync(modelDescribe, request, cancellationToken);
|
||||
ThorUsageResponse? tokenUsage = new ThorUsageResponse();
|
||||
bool isFirst = true;
|
||||
try
|
||||
{
|
||||
await foreach (var responseResult in completeChatResponse)
|
||||
{
|
||||
// 第一条消息成功获取,才设置 SSE 响应头
|
||||
if (isFirst)
|
||||
{
|
||||
response.ContentType = "text/event-stream;charset=utf-8;";
|
||||
response.Headers.TryAdd("Cache-Control", "no-cache");
|
||||
response.Headers.TryAdd("Connection", "keep-alive");
|
||||
isFirst = false;
|
||||
}
|
||||
|
||||
if (responseResult.Item1=="exception")
|
||||
{
|
||||
//兼容部分ai工具问题
|
||||
continue;
|
||||
}
|
||||
//部分供应商message_start放一部分
|
||||
if (responseResult.Item1.Contains("message_start"))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user