feat: 完成错误信息展示
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http.Json;
|
using System.Net.Http.Json;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Yi.Framework.AiHub.Application.Contracts.Dtos.OpenAi;
|
using Yi.Framework.AiHub.Application.Contracts.Dtos.OpenAi;
|
||||||
@@ -12,19 +13,19 @@ namespace Yi.Framework.AiHub.Domain.AiGateWay.Impl.ThorAzureDatabricks.Chats;
|
|||||||
public class AzureDatabricksChatCompletionsService(ILogger<AzureDatabricksChatCompletionsService> logger)
|
public class AzureDatabricksChatCompletionsService(ILogger<AzureDatabricksChatCompletionsService> logger)
|
||||||
: IChatCompletionService
|
: IChatCompletionService
|
||||||
{
|
{
|
||||||
private string GetAddress(AiModelDescribe? options)
|
private string GetAddress(AiModelDescribe? options, string model)
|
||||||
{
|
{
|
||||||
// This method should return the appropriate URL for the Azure Databricks API
|
// This method should return the appropriate URL for the Azure Databricks API
|
||||||
// based on the provided options and model.
|
// based on the provided options and model.
|
||||||
// For now, we will return a placeholder URL.
|
// For now, we will return a placeholder URL.
|
||||||
return $"{options?.Endpoint.TrimEnd('/')}/serving-endpoints/{options.ModelExtraInfo}/invocations";
|
return $"{options?.Endpoint.TrimEnd('/')}/serving-endpoints/{model}/invocations";
|
||||||
}
|
}
|
||||||
|
|
||||||
public async IAsyncEnumerable<ThorChatCompletionsResponse> CompleteChatStreamAsync(AiModelDescribe options,
|
public async IAsyncEnumerable<ThorChatCompletionsResponse> CompleteChatStreamAsync(AiModelDescribe options,
|
||||||
ThorChatCompletionsRequest chatCompletionCreate,
|
ThorChatCompletionsRequest chatCompletionCreate,
|
||||||
CancellationToken cancellationToken)
|
[EnumeratorCancellation] CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var address = GetAddress(options);
|
var address = GetAddress(options, chatCompletionCreate.Model);
|
||||||
using var openai =
|
using var openai =
|
||||||
Activity.Current?.Source.StartActivity("OpenAI 对话流式补全");
|
Activity.Current?.Source.StartActivity("OpenAI 对话流式补全");
|
||||||
|
|
||||||
@@ -60,7 +61,7 @@ public class AzureDatabricksChatCompletionsService(ILogger<AzureDatabricksChatCo
|
|||||||
logger.LogError("OpenAI对话异常 , StatusCode: {StatusCode} 错误响应内容:{Content}", response.StatusCode,
|
logger.LogError("OpenAI对话异常 , StatusCode: {StatusCode} 错误响应内容:{Content}", response.StatusCode,
|
||||||
error);
|
error);
|
||||||
|
|
||||||
throw new BusinessException("OpenAI对话异常:" + error, response.StatusCode.ToString());
|
throw new BusinessException(response.StatusCode.ToString(), "OpenAI对话异常:" + error);
|
||||||
}
|
}
|
||||||
|
|
||||||
using var stream = new StreamReader(await response.Content.ReadAsStreamAsync(cancellationToken));
|
using var stream = new StreamReader(await response.Content.ReadAsStreamAsync(cancellationToken));
|
||||||
@@ -78,7 +79,7 @@ public class AzureDatabricksChatCompletionsService(ILogger<AzureDatabricksChatCo
|
|||||||
logger.LogInformation("OpenAI对话异常 , StatusCode: {StatusCode} Response: {Response}", response.StatusCode,
|
logger.LogInformation("OpenAI对话异常 , StatusCode: {StatusCode} Response: {Response}", response.StatusCode,
|
||||||
line);
|
line);
|
||||||
|
|
||||||
throw new BusinessException("OpenAI对话异常", line);
|
throw new BusinessException("500", "OpenAI对话异常", line);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (line.StartsWith(OpenAIConstant.Data))
|
if (line.StartsWith(OpenAIConstant.Data))
|
||||||
@@ -143,7 +144,7 @@ public class AzureDatabricksChatCompletionsService(ILogger<AzureDatabricksChatCo
|
|||||||
ThorChatCompletionsRequest chatCompletionCreate,
|
ThorChatCompletionsRequest chatCompletionCreate,
|
||||||
CancellationToken cancellationToken)
|
CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var address = GetAddress(options);
|
var address = GetAddress(options, chatCompletionCreate.Model);
|
||||||
|
|
||||||
using var openai =
|
using var openai =
|
||||||
Activity.Current?.Source.StartActivity("OpenAI 对话补全");
|
Activity.Current?.Source.StartActivity("OpenAI 对话补全");
|
||||||
@@ -157,7 +158,7 @@ public class AzureDatabricksChatCompletionsService(ILogger<AzureDatabricksChatCo
|
|||||||
|
|
||||||
if (response.StatusCode == HttpStatusCode.Unauthorized)
|
if (response.StatusCode == HttpStatusCode.Unauthorized)
|
||||||
{
|
{
|
||||||
throw new BusinessException("渠道未登录,请联系管理人员", "401");
|
throw new BusinessException("401", "渠道未登录,请联系管理人员");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果限流则抛出限流异常
|
// 如果限流则抛出限流异常
|
||||||
@@ -174,7 +175,7 @@ public class AzureDatabricksChatCompletionsService(ILogger<AzureDatabricksChatCo
|
|||||||
options.Endpoint,
|
options.Endpoint,
|
||||||
response.StatusCode, error);
|
response.StatusCode, error);
|
||||||
|
|
||||||
throw new BusinessException("OpenAI对话异常", response.StatusCode.ToString());
|
throw new BusinessException(response.StatusCode.ToString(), "OpenAI对话异常");
|
||||||
}
|
}
|
||||||
|
|
||||||
var result =
|
var result =
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http.Json;
|
using System.Net.Http.Json;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Yi.Framework.AiHub.Application.Contracts.Dtos.OpenAi;
|
using Yi.Framework.AiHub.Application.Contracts.Dtos.OpenAi;
|
||||||
@@ -14,7 +15,7 @@ public class AzureOpenAiChatCompletionCompletionsService(ILogger<AzureOpenAiChat
|
|||||||
{
|
{
|
||||||
public async IAsyncEnumerable<ThorChatCompletionsResponse> CompleteChatStreamAsync(AiModelDescribe options,
|
public async IAsyncEnumerable<ThorChatCompletionsResponse> CompleteChatStreamAsync(AiModelDescribe options,
|
||||||
ThorChatCompletionsRequest chatCompletionCreate,
|
ThorChatCompletionsRequest chatCompletionCreate,
|
||||||
CancellationToken cancellationToken)
|
[EnumeratorCancellation] CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
using var openai =
|
using var openai =
|
||||||
Activity.Current?.Source.StartActivity("Azure OpenAI 对话流式补全");
|
Activity.Current?.Source.StartActivity("Azure OpenAI 对话流式补全");
|
||||||
@@ -32,7 +33,7 @@ public class AzureOpenAiChatCompletionCompletionsService(ILogger<AzureOpenAiChat
|
|||||||
logger.LogError("Azure对话异常 , StatusCode: {StatusCode} 错误响应内容:{Content}", response.StatusCode,
|
logger.LogError("Azure对话异常 , StatusCode: {StatusCode} 错误响应内容:{Content}", response.StatusCode,
|
||||||
error);
|
error);
|
||||||
|
|
||||||
throw new BusinessException("AzureOpenAI对话异常:" + error, response.StatusCode.ToString());
|
throw new BusinessException(response.StatusCode.ToString(), "AzureOpenAI对话异常:" + error);
|
||||||
}
|
}
|
||||||
|
|
||||||
using StreamReader reader = new(await response.Content.ReadAsStreamAsync(cancellationToken));
|
using StreamReader reader = new(await response.Content.ReadAsStreamAsync(cancellationToken));
|
||||||
@@ -48,7 +49,7 @@ public class AzureOpenAiChatCompletionCompletionsService(ILogger<AzureOpenAiChat
|
|||||||
response.StatusCode,
|
response.StatusCode,
|
||||||
line);
|
line);
|
||||||
|
|
||||||
throw new BusinessException("AzureOpenAI对话异常", line);
|
throw new BusinessException("500", "AzureOpenAI对话异常", line);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (line.StartsWith(OpenAIConstant.Data))
|
if (line.StartsWith(OpenAIConstant.Data))
|
||||||
|
|||||||
Reference in New Issue
Block a user