Files
BeWoPlaner/BeWo/ViewModel/AiConversationVM.cs
Rene Evertz e47c57d379 Merge branch 'master' into feature_rene_18_ai
# Conflicts:
#	BeWo/Services/BeWoWindowService.cs
#	BeWo/View/Detail/AI/AiConversationChatView.xaml
#	BeWo/View/Detail/AI/AiConversationChatView.xaml.cs
#	BeWo/ViewModel/VMFactory.cs
2025-06-30 12:50:12 +02:00

123 lines
3.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Runtime.Serialization;
using BeWo.ViewModel.ListViewModel;
using BS.Shared;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Feature.AI;
using DevExpress.Mvvm;
using DevExpress.Xpf.Core.Native;
using Newtonsoft.Json;
namespace BeWo.ViewModel
{
[JsonObject(MemberSerialization.OptIn)]
public class AiConversationVM : AbstractDCMapperVM<AiConversationDC>
{
private string _Displayname;
private DateTime _Updated;
private AiConversationMessageListVM _Messages;
public AiConversationVM() : this(new AiConversationDC()) { }
public AiConversationVM(AiConversationDC dc) : base(dc, dc.Oid is null)
{
}
public string Json
{
get => JsonConvert.SerializeObject(this, Formatting.Indented);
}
[JsonProperty]
public string Displayname
{
get { return _Displayname; }
set
{
if (!AreDifferent(_Displayname, value))
return;
_Displayname = value;
StoreDirtyInformation(AreDifferent(DataContract.Displayname, value), nameof(Displayname));
FirePropertyChanged(nameof(Displayname));
FirePropertyChanged(nameof(Json));
}
}
[JsonProperty]
public DateTime Updated
{
get { return _Updated; }
set
{
if (!AreDifferent(Updated, value))
return;
_Updated = value;
StoreDirtyInformation(AreDifferent(DataContract.Updated, value), nameof(Updated));
FirePropertyChanged(nameof(Updated));
}
}
public AiConversationMessageListVM Messages
{
get { return _Messages ?? (_Messages = new AiConversationMessageListVM()); }
set
{
if (!AreDifferent(_Messages, value))
return;
_Messages = value;
StoreDirtyInformation(AreDifferent(DataContract.Messages, value), nameof(Messages));
FirePropertyChanged(nameof(Messages));
}
}
public DateTime Created => DataContract.Created;
public AiModelDC Modell => DataContract.Modell;
public string Context => DataContract.Context;
public Dictionary<TableID, long[]> ContextBeWoObjects => DataContract.ContextBeWoObjects;
public UIContext UIContext => (UIContext)DataContract.UIContext;
protected override void InitByDataContract(AiConversationDC pDataContract)
{
_Displayname = pDataContract.Displayname;
_Updated = pDataContract.Updated;
if (pDataContract.Messages is object)
_Messages = getFilter(pDataContract.Messages);
}
protected override AiConversationDC MapToDataContract(AiConversationDC pDataContract, bool doCommit)
{
pDataContract.Displayname = _Displayname;
pDataContract.Updated = _Updated;
pDataContract.Messages = _Messages?.CopyToDCList(doCommit);
return pDataContract;
}
public override void UpdateByDataContract(AiConversationDC pDataContract)
{
DataContract = pDataContract;
Displayname = pDataContract.Displayname;
Updated = pDataContract.Updated;
if (pDataContract.Messages is object)
Messages = getFilter(pDataContract.Messages);
}
private AiConversationMessageListVM getFilter(List<AiConversationMessageDC> messages)
{
if(!BeWoApp.IsInDeveloperMode && messages is List<AiConversationMessageDC> && messages.Any())
{
messages.RemoveAll(m => m.Role == AiConversationMessageRole.System);
}
return new AiConversationMessageListVM(messages);
}
}
}