Files
BeWoPlaner/BeWo/ViewModel/ListViewModel/AiConversationListVM.cs
2025-04-03 16:47:50 +02:00

222 lines
5.3 KiB
C#

using BeWo.ServiceProxy;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Feature.AI;
using BS.Shared.Extensions;
using ChatController.Utilities.Extensions;
using DevExpress.Mvvm;
using DevExpress.XtraPrinting.Native;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using System.Runtime.Remoting.Contexts;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Markup;
using System.Windows.Threading;
namespace BeWo.ViewModel.ListViewModel
{
public class AiConversationListVM : AbstractDCListMapperVM<AiConversationDC, AiConversationVM>
{
private string _MessageInput;
private string _ContextInput;
private AiModelDC _SelectedModel;
public AiConversationListVM() : this(null)
{
if (BeWoApp.IsInDesignMode)
{
InitDesigner();
}
}
public AiConversationListVM(List<AiConversationDC> pDCs) : base(pDCs)
{
Models = new ObservableSortCollection<AiModelDC>();
SendNewMessageCommand = new DelegateCommand(SendNewMessage, CanSendNewMessage);
RequestNewConversationCommand = new DelegateCommand(RequestNewConversation);
TestCommand = new DelegateCommand(Test);
}
public DelegateCommand SendNewMessageCommand { get; set; }
public DelegateCommand RequestNewConversationCommand { get; set; }
public DelegateCommand TestCommand { get; set; }
public ObservableCollection<AiModelDC> Models { get; set; }
public AiModelDC SelectedModel {
get { return _SelectedModel; }
set
{
if (_SelectedModel == value)
return;
_SelectedModel = value;
FirePropertyChanged(nameof(SelectedModel));
}
}
public string MessageInput
{
get { return _MessageInput; }
set
{
if (MessageInput == value)
return;
_MessageInput = value;
FirePropertyChanged(nameof(MessageInput));
}
}
public string ContextInput
{
get { return _ContextInput; }
set
{
if (ContextInput == value)
return;
_ContextInput = value;
FirePropertyChanged(nameof(ContextInput));
}
}
public int UIContext{ get; set; }
public List<Tuple<long, long>> ContextBeWoObjects { get; set; }
public void RequestNewConversation()
{
ServiceFacade.DoOperationsEnhancedServiceAsnyc(x => x.CreateAiConversation(UIContext, SelectedModel.Oid.Value, ContextBeWoObjects), dc => {
var vm = new AiConversationVM(dc);
VMList.Insert(0, vm);
SelectedVM = vm;
}, true, null);
}
public void SendNewMessage()
{
var conv = SelectedVM;
var msg_dc = new AiConversationMessageDC();
msg_dc.Message = MessageInput;
msg_dc.Role = BS.Shared.AiConversationMessageRole.User;
msg_dc.Created = DateTime.Now;
var msg_vm = new AiConversationMessageVM(msg_dc);
conv.Messages.VMList.Add(msg_vm);
ServiceFacade.DoOperationsEnhancedServiceAsnyc(x => x.SendNewMessage(conv.DataContract.Oid.Value, MessageInput), (messages) =>
{
if (messages.Count != 2)
throw new InvalidOperationException("message count: " + messages.Count);
msg_vm.DataContract = messages[0];
conv.Messages.VMList.Add(new AiConversationMessageVM(messages[1]));
});
}
public void Test()
{
throw new NotImplementedException();
//var limit = 5;
//var models = ServiceFacade.DoOperationsEnhancedServiceSnyc(x => x.GetAiModels());
//Models.MakeEqualTo(models);
//VMList.Clear();
//foreach (var vm in Models)
//{
// var dc = new AiConversationDC();
// dc.Created = DateTime.Now;
// dc.Displayname = "Example";
// dc.Modell = vm.ToString();
// var pvm = new AiConversationVM(dc);
// VMList.Add(pvm);
//}
//var msg = "Wie alt ist Frau Müller?";
//var context = "Frau Müller wurde am 1.1.1950 geboren. Aktuelle haben wir folgende Universalzeit: " + DateTime.Now.ToUniversalTime();
//for (var i = 0; i < limit; i++)
//{
// foreach (var vm in VMList)
// {
// ServiceFacade.DoOperationsEnhancedServiceAsnyc(x => x.SendNewMessage(vm.CommitToDataContract(), context, msg), (message) =>
// {
// vm.Messages.VMList.Add(new AiConversationMessageVM(message));
// });
// }
//}
}
private bool CanSendNewMessage()
{
return SelectedVM is object;
}
private void InitDesigner()
{
var message_dc = new AiConversationMessageDC()
{
Created = DateTime.Now,
Message = "Anweisungen \n\nTest",
Role = BS.Shared.AiConversationMessageRole.System
};
var message_dc2 = new AiConversationMessageDC()
{
Created = DateTime.Now,
Message = "Userprompt \n\nTest",
Role = BS.Shared.AiConversationMessageRole.User
};
var message_dc3 = new AiConversationMessageDC()
{
Created = DateTime.Now,
Message = "Antwort\n\nTest",
Role = BS.Shared.AiConversationMessageRole.Assistent
};
var messages_dc = new List<AiConversationMessageDC>()
{
message_dc,
message_dc2,
message_dc3
};
var model = new AiModelDC()
{
ModelName = "llama3.2"
};
var conversation_dc = new AiConversationDC()
{
Created = DateTime.Now,
Displayname = "Displayname",
Messages = messages_dc,
Modell = model,
UIContext = 19,
Updated = DateTime.Now,
};
var conversation_vm = new AiConversationVM(conversation_dc);
VMList.Add(conversation_vm);
SelectedVM = conversation_vm;
}
}
}