HuanMengProject/src/0-core/HuanMeng.StableDiffusion.TextGeneration/BLL/TextGenerationBLL.cs
2024-07-11 23:05:41 +08:00

114 lines
4.4 KiB
C#

using HuanMeng.StableDiffusion.TextGeneration.api;
using HuanMeng.StableDiffusion.TextGeneration.Models;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HuanMeng.StableDiffusion.TextGeneration.BLL
{
/// <summary>
/// ai聊天
/// </summary>
/// <param name="textGenerationTestContext"></param>
public class TextGenerationBLL(TextGenerationTestContext textGenerationTestContext)
{
/// <summary>
///
/// </summary>
/// <param name="sessionId"></param>
/// <param name="message"></param>
/// <returns></returns>
public async IAsyncEnumerable<string> Chat(string sessionId, string message, string character)
{
if (string.IsNullOrEmpty(sessionId))
{
sessionId = Guid.NewGuid().ToString();
}
var x = new List<TextGenerationSessionDetail>(); // textGenerationTestContext.TextGenerationSessionDetails.Where(it => it.SessionId == sessionId).OrderBy(it => it.TimeStamp).ToList();
List<TextGenerationRequestHttpApiStreamModel> textGenerationRequestHttpApiModels = new List<TextGenerationRequestHttpApiStreamModel>();
if (textGenerationRequestHttpApiModels != null)
{
foreach (var item in x)
{
textGenerationRequestHttpApiModels.Add(new TextGenerationRequestHttpApiStreamModel
{
Role = item.Role,
Content = item.Message
});
}
}
textGenerationRequestHttpApiModels.Add(new TextGenerationRequestHttpApiStreamModel
{
Role = "user",
Content = message
});
var messageStr = JsonConvert.SerializeObject(textGenerationRequestHttpApiModels, Formatting.None, new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Formatting = Formatting.Indented // 这个选项是用于美化输出,便于阅读
});
TextGenerationSessionDetail d = new TextGenerationSessionDetail()
{
CreateDateTime = DateTime.Now,
Message = message,
Role = "user",
Model = "",
SessionId = sessionId,
TimeStamp = ((DateTimeOffset)DateTime.Now).ToUnixTimeSeconds(),
TextGenerationSessionId = 0
};
//textGenerationTestContext.TextGenerationSessionDetails.Add(d);
string datex = "";
if (!string.IsNullOrEmpty(character))
{
datex = $@" ""character"":""{character}"" ";
}
// string json = $@"
//{{
// ""messages"": {messageStr},
// ""stream"": true,
// ""mode"": ""chat"",
// {datex}
//}}
//";
string json = $@"
{{
""messages"": {messageStr},
""mode"": ""chat"",
{datex}
}}
";
//TextGenerationRequestHttpApiStream textGenerationRequestHttpApi = new TextGenerationRequestHttpApiStream(json);
TextGenerationRequestHttpApi textGenerationRequestHttpApi = new TextGenerationRequestHttpApi(json);
await foreach (var item in textGenerationRequestHttpApi.SendMessageAsync())
{
if (item == "")
{
continue;
}
yield return item;
}
TextGenerationSessionDetail d1 = new TextGenerationSessionDetail()
{
CreateDateTime = DateTime.Now,
Message = textGenerationRequestHttpApi?.textGenerationModel?.Content ?? "",
Role = textGenerationRequestHttpApi?.textGenerationModel?.Role ?? "",
Model = textGenerationRequestHttpApi?.textGenerationModel?.Model ?? "",
SessionId = sessionId,
TimeStamp = ((DateTimeOffset)DateTime.Now).ToUnixTimeSeconds(),
TextGenerationSessionId = 0
};
//textGenerationTestContext.TextGenerationSessionDetails.Add(d1);
//await textGenerationTestContext.SaveChangesAsync();
}
}
}