fix: 优化图片生成与上传错误处理及任务信息返回
- 图片上传接口新增状态码校验,返回明确错误信息 - 图片生成任务失败时记录完整错误信息与堆栈 - 图片任务查询结果补充发布状态、分类及错误信息 - 网关层模型名规范化与少量代码格式优化
This commit is contained in:
@@ -84,10 +84,11 @@ public class ImageGenerationJob : AsyncBackgroundJob<ImageGenerationJobArgs>, IT
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex, "图片生成任务失败,TaskId: {TaskId}, Error: {Error}", args.TaskId, ex.Message);
|
var error = $"图片任务失败,TaskId: {args.TaskId},错误信息: {ex.Message},错误堆栈:{ex.StackTrace}";
|
||||||
|
_logger.LogError(ex, error);
|
||||||
|
|
||||||
task.TaskStatus = TaskStatusEnum.Fail;
|
task.TaskStatus = TaskStatusEnum.Fail;
|
||||||
task.ErrorInfo = ex.Message;
|
task.ErrorInfo = error;
|
||||||
|
|
||||||
await _imageStoreTaskRepository.UpdateAsync(task);
|
await _imageStoreTaskRepository.UpdateAsync(task);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -143,7 +143,11 @@ public class AiImageService : ApplicationService
|
|||||||
// StoreBase64 = task.StoreBase64,
|
// StoreBase64 = task.StoreBase64,
|
||||||
StoreUrl = task.StoreUrl,
|
StoreUrl = task.StoreUrl,
|
||||||
TaskStatus = task.TaskStatus,
|
TaskStatus = task.TaskStatus,
|
||||||
CreationTime = task.CreationTime
|
PublishStatus = task.PublishStatus,
|
||||||
|
Categories = task.Categories,
|
||||||
|
CreationTime = task.CreationTime,
|
||||||
|
ErrorInfo = task.ErrorInfo,
|
||||||
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Net;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
@@ -92,12 +93,14 @@ public class AiGateWayManager : DomainService
|
|||||||
{
|
{
|
||||||
throw new UserFriendlyException($"【{modelId}】模型当前版本【{modelApiType}】格式不支持");
|
throw new UserFriendlyException($"【{modelId}】模型当前版本【{modelApiType}】格式不支持");
|
||||||
}
|
}
|
||||||
|
|
||||||
// ✅ 统一处理 yi- 后缀(网关层模型规范化)
|
// ✅ 统一处理 yi- 后缀(网关层模型规范化)
|
||||||
if (!string.IsNullOrEmpty(aiModelDescribe.ModelId) &&
|
if (!string.IsNullOrEmpty(aiModelDescribe.ModelId) &&
|
||||||
aiModelDescribe.ModelId.StartsWith("yi-", StringComparison.OrdinalIgnoreCase))
|
aiModelDescribe.ModelId.StartsWith("yi-", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
aiModelDescribe.ModelId = aiModelDescribe.ModelId[3..];
|
aiModelDescribe.ModelId = aiModelDescribe.ModelId[3..];
|
||||||
}
|
}
|
||||||
|
|
||||||
return aiModelDescribe;
|
return aiModelDescribe;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -543,11 +546,11 @@ public class AiGateWayManager : DomainService
|
|||||||
{
|
{
|
||||||
request.Model = request.Model[3..];
|
request.Model = request.Model[3..];
|
||||||
}
|
}
|
||||||
|
|
||||||
var chatService =
|
var chatService =
|
||||||
LazyServiceProvider.GetRequiredKeyedService<IAnthropicChatCompletionService>(modelDescribe.HandlerName);
|
LazyServiceProvider.GetRequiredKeyedService<IAnthropicChatCompletionService>(modelDescribe.HandlerName);
|
||||||
var data = await chatService.ChatCompletionsAsync(modelDescribe, request, cancellationToken);
|
var data = await chatService.ChatCompletionsAsync(modelDescribe, request, cancellationToken);
|
||||||
|
|
||||||
data.SupplementalMultiplier(modelDescribe.Multiplier);
|
data.SupplementalMultiplier(modelDescribe.Multiplier);
|
||||||
|
|
||||||
if (userId is not null)
|
if (userId is not null)
|
||||||
@@ -617,7 +620,7 @@ public class AiGateWayManager : DomainService
|
|||||||
{
|
{
|
||||||
request.Model = request.Model[3..];
|
request.Model = request.Model[3..];
|
||||||
}
|
}
|
||||||
|
|
||||||
var completeChatResponse = chatService.StreamChatCompletionsAsync(modelDescribe, request, cancellationToken);
|
var completeChatResponse = chatService.StreamChatCompletionsAsync(modelDescribe, request, cancellationToken);
|
||||||
ThorUsageResponse? tokenUsage = null;
|
ThorUsageResponse? tokenUsage = null;
|
||||||
StringBuilder backupSystemContent = new StringBuilder();
|
StringBuilder backupSystemContent = new StringBuilder();
|
||||||
@@ -977,6 +980,7 @@ public class AiGateWayManager : DomainService
|
|||||||
}
|
}
|
||||||
|
|
||||||
private const string ImageStoreHost = "http://localhost:19001/api/app";
|
private const string ImageStoreHost = "http://localhost:19001/api/app";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gemini 生成(Image)-非流式-缓存处理
|
/// Gemini 生成(Image)-非流式-缓存处理
|
||||||
/// 返回图片绝对路径
|
/// 返回图片绝对路径
|
||||||
@@ -1013,7 +1017,13 @@ public class AiGateWayManager : DomainService
|
|||||||
var uploadUrl = $"{ImageStoreHost}/ai-image/upload-base64";
|
var uploadUrl = $"{ImageStoreHost}/ai-image/upload-base64";
|
||||||
var content = new StringContent(JsonSerializer.Serialize(imagePrefixBase64), Encoding.UTF8, "application/json");
|
var content = new StringContent(JsonSerializer.Serialize(imagePrefixBase64), Encoding.UTF8, "application/json");
|
||||||
var uploadResponse = await httpClient.PostAsync(uploadUrl, content, cancellationToken);
|
var uploadResponse = await httpClient.PostAsync(uploadUrl, content, cancellationToken);
|
||||||
uploadResponse.EnsureSuccessStatusCode();
|
// uploadResponse.EnsureSuccessStatusCode();
|
||||||
|
if (uploadResponse.StatusCode != HttpStatusCode.OK)
|
||||||
|
{
|
||||||
|
var errorMessage = await uploadResponse.Content.ReadAsStringAsync(cancellationToken);
|
||||||
|
throw new UserFriendlyException($"{errorMessage}");
|
||||||
|
}
|
||||||
|
|
||||||
var storeUrl = await uploadResponse.Content.ReadAsStringAsync(cancellationToken);
|
var storeUrl = await uploadResponse.Content.ReadAsStringAsync(cancellationToken);
|
||||||
|
|
||||||
var tokenUsage = new ThorUsageResponse
|
var tokenUsage = new ThorUsageResponse
|
||||||
|
|||||||
Reference in New Issue
Block a user