114 lines
4.4 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|