74 lines
2.3 KiB
C#
74 lines
2.3 KiB
C#
using LMS.DAO;
|
|
using LMS.Repository.Forward;
|
|
using LMS.service.Service;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Serialization;
|
|
using static LMS.Common.Enums.ResponseCodeEnum;
|
|
|
|
namespace LMS.service.Controllers;
|
|
|
|
[Route("lms/[controller]/[action]")]
|
|
[ApiController]
|
|
public class ForwardController(ForwardWordService forwardWordService) : ControllerBase
|
|
{
|
|
private readonly ForwardWordService _forwardWordService = forwardWordService;
|
|
|
|
/// <summary>
|
|
/// 转发OpenAi格式的请求
|
|
/// </summary>
|
|
/// <param name="request"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<ActionResult<APIResponseModel<object>>> ForwardWord([FromBody] ForwardModel request)
|
|
{
|
|
if (!ModelState.IsValid)
|
|
{
|
|
return APIResponseModel<object>.CreateErrorResponseModel(ResponseCode.ParameterError);
|
|
}
|
|
return await _forwardWordService.ForwardWord(request);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 流式转发
|
|
/// </summary>
|
|
/// <param name="req"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<IActionResult> ForwardWordStream([FromBody] ForwardModel req)
|
|
{
|
|
try
|
|
{
|
|
HttpContext.Response.ContentType = "text/event-stream";
|
|
HttpContext.Response.Headers.Add("Cache-Control", "no-cache");
|
|
HttpContext.Response.Headers.Add("Connection", "keep-alive");
|
|
|
|
var settings = new JsonSerializerSettings
|
|
{
|
|
ContractResolver = new LowercaseContractResolver(),
|
|
Formatting = Formatting.Indented
|
|
};
|
|
|
|
await foreach (var s in _forwardWordService.ForwardWordStream(req))
|
|
{
|
|
// 确保遵循SSE的消息格式
|
|
//var data = "data: " + JsonConvert.SerializeObject(s, settings) + "\n\n";
|
|
await Response.WriteAsync(s);
|
|
await Response.Body.FlushAsync(); // 确保即时发送
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return BadRequest(e.Message);
|
|
}
|
|
return new EmptyResult();
|
|
}
|
|
public class LowercaseContractResolver : DefaultContractResolver
|
|
{
|
|
protected override string ResolvePropertyName(string propertyName)
|
|
{
|
|
return propertyName.ToLower();
|
|
}
|
|
}
|
|
}
|