69 Commits

Author SHA1 Message Date
d2f46ef5b4 Remove clone feature 2026-07-31 11:34:33 +02:00
c87d7043ef Info i 2026-07-30 13:55:20 +02:00
e143802b4c version 5.2.3.3 2026-07-29 13:37:24 +02:00
388315c071 Kopieren 2026-07-29 13:29:18 +02:00
a618ba97ad nur icon 2026-07-29 13:08:27 +02:00
4258c28ad4 rechtsbündig 2026-07-29 13:08:20 +02:00
076b51b803 Tooltip 2026-07-29 13:05:04 +02:00
9c68c66b49 System.Text.Json.JsonReaderException 2026-07-29 13:04:48 +02:00
09c7ffa8c0 Endpunkt 2026-07-29 13:04:25 +02:00
151a25798c . 2026-07-29 09:52:37 +02:00
427641fe9f Keine redirects 2026-07-29 09:50:08 +02:00
9b491c7669 Tippfehler 2026-07-28 13:34:53 +02:00
789b1bed85 5.2.3.2 2026-07-28 11:57:29 +02:00
b558ca8b50 Mehr Icons 2026-07-28 11:57:23 +02:00
d10296d20a format 2026-07-28 11:35:26 +02:00
2a3cfcade9 Icon Set 2026-07-28 11:35:20 +02:00
d296944f7f get last n elements of list 2026-07-28 11:21:58 +02:00
9323ff1592 EInklappbare Prompts 2026-07-28 11:16:58 +02:00
3fa9bcd624 Hintergrund zur Erkennbarkeit 2026-07-27 13:55:30 +02:00
e095756f3c Test + xshared false 2026-07-27 12:55:02 +02:00
7d416045e1 Änderung? 2026-07-27 12:54:42 +02:00
6e4b6f24b3 Neue Icons 2026-07-27 12:32:14 +02:00
c50ee6c886 Vorbereitung Version 5.2.3.1 2026-07-24 13:51:49 +02:00
5af7cb4dab Fehler bei Prompt/Routine -> Conversation wird gelöscht, wenn sie bereits angefragt wurde 2026-07-24 13:48:52 +02:00
aad3a72d66 samplecount null oder 0 -> nichts
-1 -> alle
-> sonst einfach n laden
2026-07-24 13:31:15 +02:00
8cba6ea925 Besserer Status 2026-07-24 13:21:52 +02:00
66e437df60 ???
https://stackoverflow.com/questions/6182644/missing-compiler-required-member-error-being-thrown-multiple-times-with-almost
2026-07-24 12:23:39 +02:00
eeacc08472 Zusätzliche Checkups eingebunden 2026-07-24 12:21:11 +02:00
a4e42b8388 Neue Abschätzung 2026-07-24 11:16:56 +02:00
f51eabb45f Prompt Titel cachen 2026-07-22 15:48:55 +02:00
007745e6a8 Datenmodell optimiert 2026-07-22 15:17:55 +02:00
48af27978d Spacing 2026-07-22 14:58:41 +02:00
6c90b902d6 Tooltip wird korrekt angezeigt 2026-07-22 14:57:57 +02:00
12bf5bcacb ? 2026-07-22 14:57:45 +02:00
855d3228c5 Berichte können geladen/gespeichert werden 2026-07-21 13:16:22 +02:00
604ed52100 Max Context Size - Prozentuale Auslastung 2026-07-21 13:03:28 +02:00
e5a5a00ebb RuleName 2026-07-21 09:20:40 +02:00
74e7ea3dce num keep 2026-07-20 14:55:53 +02:00
b1279c5511 update 1 2026-07-20 12:45:40 +02:00
b14d853da9 update 2026-07-20 10:44:56 +02:00
7574dbfd08 AiTokenAnalyzer: Token-Analyse (Zeichen/3, Zeichen/3,5, cl100k, prompt_eval_count)
- OllamaApiClient: Überladung mit prompt_eval_count/eval_count
- Tool auf net48 umgestellt, Referenzen auf AICore/ServerUtils/Shared
- UI: Text-Eingabe, Zeichenanzahlen (50k, 100k, ...), Ergebnistabelle

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 11:58:48 +02:00
88044ee60d Referenzen 2026-07-17 11:22:11 +02:00
858d320ce0 init test project 2026-07-17 11:17:47 +02:00
8996a50aa8 AiUtils umgezogen 2026-07-14 14:40:39 +02:00
324af51fa9 local 2026-07-13 15:01:39 +02:00
c2c5d3b19e Conversationen einklappbar 2026-07-13 12:24:58 +02:00
0771045bce Weniger Informationen direkt auf der Maske -> im Tooltip 2026-07-13 12:05:44 +02:00
85de22ca9a Neue Zeile bei mehreren Fehlern 2026-07-13 11:51:02 +02:00
f6fef62bdd Script-Check-Bug behoben: CheckDBScripts prüft jetzt alle registrierten Scripts, nicht nur das erste. Alle vier Check-Methoden sind auf das gleiche Muster umgestellt (Where auf Fehler filtern, Meldungen mit ; joinen), d.h. sie melden jetzt auch jeweils alle fehlenden Einträge ihrer Kategorie statt nur den ersten.
Alle Fehler sammeln: DoHealthCheckup bricht nicht mehr beim ersten Fehler ab, sondern sammelt die Meldungen aller Checkups und gibt sie zusammen in Message zurück.
Exception-Logging: Wirft ein Checkup eine Exception, wird sie jetzt vollständig per log4net geloggt (gleiches Idiom wie im WCFErrorHandler über LoggerUtils.GetLogger); nach außen geht weiterhin nur ex.Message.
Listen direkt initialisiert statt Lazy-Init — alle is null-Checks entfallen, die Add*-Methoden sind jetzt Einzeiler.
Naming auf PascalCase vereinheitlicht (AddWebConfigCheck, RegisterCheckup, CheckDBScripts, …) und ungenutzte Usings entfernt.
2026-07-13 11:39:36 +02:00
cbf3599521 ShowPrompt Eigenschaft Fix 2026-07-10 14:04:41 +02:00
5ebbe8d0a4 Speichern jetzt als Button 2026-07-10 13:54:57 +02:00
c02ef1437d Verstecke Context Menu bei keliner Nachricht 2026-07-10 13:48:41 +02:00
432ffc3f41 ShowMessage 2026-07-10 13:46:14 +02:00
1ae8aed934 StatusService übersichtlicher 2026-07-10 13:28:04 +02:00
7fa49d5adb tenant in url bei getaiprompt ownsofts 2026-07-10 10:45:39 +02:00
b8d5855d3c Fix? 2026-07-09 15:22:22 +02:00
ceef6b1a76 Neue Server Version + Lokal status.htm aufrufbar 2026-07-09 15:15:30 +02:00
bb3ce52d57 BeWoAppInfo REf vergessen 2026-07-09 14:50:10 +02:00
b74556d359 Statusseite hat nun Appversion 2026-07-09 14:49:29 +02:00
d6c1a56c04 BeWoApp Version in Shared ausgelagert
-> Wird auf dem Server benötigt
2026-07-09 14:49:13 +02:00
bee75224d4 Status Seite 2026-07-09 14:15:49 +02:00
b56bdb6321 version 5.2.1 + script verpeilt 2026-07-09 12:39:51 +02:00
116dca4137 Window Size Exceeded 2026-07-09 11:25:22 +02:00
1162213a54 Context Fehler 2026-07-09 11:25:07 +02:00
de39a95c0d Beim Berechnen wird ein Tooltip mit "Laden" angezeigt 2026-07-08 15:23:22 +02:00
01665d7380 Prompt/Routine Referenze wird zur Konversation gespeichert 2026-07-08 15:08:48 +02:00
99c8d2bd13 User Nachricht wird nicht gekürzt in UI (Lange Zeile) 2026-07-06 12:18:53 +02:00
9b01354227 5.2 2026-07-06 12:13:42 +02:00
3906efee90 Schneller Workflow Buttons 2026-07-06 11:38:10 +02:00
324 changed files with 4959 additions and 1231 deletions

View File

@@ -48,6 +48,7 @@
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath> <HintPath>..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
</Reference> </Reference>

View File

@@ -1,6 +1,7 @@
using AICore.Facade.LLM; using AICore.Facade.LLM;
using BeWo.Data.Security;
using BeWo.Service.Core; using BeWo.Service.Core;
using BS.Shared.Core; using BS.Shared.Tests.Objects;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace AiCoreUnitTest namespace AiCoreUnitTest
@@ -33,19 +34,9 @@ namespace AiCoreUnitTest
var logger = ServiceLogger.GetRequestLogger(out string id); var logger = ServiceLogger.GetRequestLogger(out string id);
// Build Payload // Build Payload
var payload = new var payload = AiTestObjects.GetExampleSendRequest(UserRightHelper.GetTenant(), id);
{
model = "gemma3:12b",
messages = new[] {
new {
role = "user",
message = "why is the sky blue?"
}
},
requestid = id
};
var response = Client.SendAiMessageRequest(payload, out string message, out string model, out int? duration, logger); var response = Client.SendAiMessageRequest(payload, out LLMResponse llm_response, logger);
Assert.IsTrue(response?.Success); Assert.IsTrue(response?.Success);
} }

View File

@@ -1,6 +1,7 @@
using AICore.Facade.LLM; using AICore.Facade.LLM;
using BeWo.Data.Security; using BeWo.Data.Security;
using BeWo.Service.Core; using BeWo.Service.Core;
using BS.Shared.Tests.Objects;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TestTools.UnitTesting.Logging; using Microsoft.VisualStudio.TestTools.UnitTesting.Logging;
using System; using System;
@@ -42,20 +43,9 @@ namespace AiCoreUnitTest
var logger = ServiceLogger.GetRequestLogger(out string id); var logger = ServiceLogger.GetRequestLogger(out string id);
// Build Payload // Build Payload
var payload = new var payload = AiTestObjects.GetExampleSendRequest(UserRightHelper.GetTenant(), id);
{
model = "llama3:latest",
messages = new[] {
new {
role = "user",
message = "Say 'Hi'!"
}
},
customerid = UserRightHelper.GetTenant(),
requestid = id
};
var response = client.SendAiMessageRequest(payload, out string message, out string model, out int? duration, logger); var response = client.SendAiMessageRequest(payload, out LLMResponse llm_response, logger);
Assert.IsTrue(response?.Success); Assert.IsTrue(response?.Success);
} }

View File

@@ -19,7 +19,6 @@ using BeWo.ViewModel;
using BeWo.ViewModel.ListViewModel; using BeWo.ViewModel.ListViewModel;
using BeWo.ViewModel.View.AI; using BeWo.ViewModel.View.AI;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BS.Shared.Translation; using BS.Shared.Translation;

View File

@@ -112,13 +112,11 @@
<Compile Include="AI\View\AiTranskriptionView.xaml.cs"> <Compile Include="AI\View\AiTranskriptionView.xaml.cs">
<DependentUpon>AiTranskriptionView.xaml</DependentUpon> <DependentUpon>AiTranskriptionView.xaml</DependentUpon>
</Compile> </Compile>
<Compile Include="BeWoAppInfo.cs" />
<Compile Include="Converter\AddressToStringConverter.cs" /> <Compile Include="Converter\AddressToStringConverter.cs" />
<Compile Include="Converter\ComparisonConverter.cs" /> <Compile Include="Converter\ComparisonConverter.cs" />
<Compile Include="Converter\IconToImageSourceConverter.cs" /> <Compile Include="Converter\IconToImageSourceConverter.cs" />
<Compile Include="Converter\NewlineConverter.cs" /> <Compile Include="Converter\NewlineConverter.cs" />
<Compile Include="Converter\StringEmptyBoolConverter.cs" /> <Compile Include="Converter\StringEmptyBoolConverter.cs" />
<Compile Include="Core\BeWoAppVersion.cs" />
<Compile Include="Core\BeWoUserUtils.cs" /> <Compile Include="Core\BeWoUserUtils.cs" />
<Compile Include="Core\Commands\CommandFactory.cs" /> <Compile Include="Core\Commands\CommandFactory.cs" />
<Compile Include="Core\EventArg\TextAcceptedEventArgs.cs" /> <Compile Include="Core\EventArg\TextAcceptedEventArgs.cs" />
@@ -276,6 +274,38 @@
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
</Page> </Page>
<Page Include="Styles\Designs\AI\Icon_Chat_Schw+Orange_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Chat_Schw_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Chat_Weiss+Orange_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Chat_Weiss_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Funktion_Schw+Gruen_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Funktion_Schw_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Funktion_Weiss+Gruen_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Funktion_Weiss_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Mikro_Schw+Orange.xaml"> <Page Include="Styles\Designs\AI\Icon_Mikro_Schw+Orange.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>
@@ -296,18 +326,34 @@
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Page> </Page>
<Page Include="Styles\Designs\AI\Icon_Refresh_Schw+Orange_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Refresh_Schw.xaml"> <Page Include="Styles\Designs\AI\Icon_Refresh_Schw.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Page> </Page>
<Page Include="Styles\Designs\AI\Icon_Refresh_Schw_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Refresh_Weiss+Orange.xaml"> <Page Include="Styles\Designs\AI\Icon_Refresh_Weiss+Orange.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Page> </Page>
<Page Include="Styles\Designs\AI\Icon_Refresh_Weiss+Orange_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Refresh_Weiss.xaml"> <Page Include="Styles\Designs\AI\Icon_Refresh_Weiss.xaml">
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</Page> </Page>
<Page Include="Styles\Designs\AI\Icon_Refresh_Weiss_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\GeometryCollection.xaml"> <Page Include="Styles\Designs\GeometryCollection.xaml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator> <Generator>MSBuild:Compile</Generator>
@@ -1317,6 +1363,7 @@
<Compile Include="Converter\CollectionContainsTag2BoolConverter.cs" /> <Compile Include="Converter\CollectionContainsTag2BoolConverter.cs" />
<Compile Include="Converter\CollectionCountToBoolConverter.cs" /> <Compile Include="Converter\CollectionCountToBoolConverter.cs" />
<Compile Include="Converter\CollectionCountToVisibilityConverter.cs" /> <Compile Include="Converter\CollectionCountToVisibilityConverter.cs" />
<Compile Include="Converter\IsLastItemToBoolMultiConverter.cs" />
<Compile Include="Converter\DeleteForGoodRight2VisibilityConverter.cs" /> <Compile Include="Converter\DeleteForGoodRight2VisibilityConverter.cs" />
<Compile Include="Converter\EnumToDescriptionConverter.cs" /> <Compile Include="Converter\EnumToDescriptionConverter.cs" />
<Compile Include="Converter\EnumTranslationConverter.cs" /> <Compile Include="Converter\EnumTranslationConverter.cs" />

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<PublishUrlHistory>D:\Projects\beyondsoft\BeWoPlaner\Publish\|C:\publish\bewoplaner\|publish\|D:\Projects\beyondsoft\BeWoPlaner\PublishTest\|D:\Projects\beyondsoft\BeWoPlaner\PublishDev\</PublishUrlHistory> <PublishUrlHistory>D:\Projects\beyondsoft\BeWoPlaner\Publish\|C:\publish\bewoplaner\|publish\|D:\Projects\beyondsoft\BeWoPlaner\PublishTest\|D:\Projects\beyondsoft\BeWoPlaner\PublishDev\</PublishUrlHistory>
@@ -9,7 +9,7 @@
<ErrorReportUrlHistory /> <ErrorReportUrlHistory />
<FallbackCulture>de-DE</FallbackCulture> <FallbackCulture>de-DE</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles> <VerifyUploadedFiles>false</VerifyUploadedFiles>
<ProjectView>ProjectFiles</ProjectView> <ProjectView>ShowAllFiles</ProjectView>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<EnableSecurityDebugging>false</EnableSecurityDebugging> <EnableSecurityDebugging>false</EnableSecurityDebugging>

View File

@@ -47,6 +47,7 @@
<conv:FilterDCConverter x:Key="FilterDCConverter" /> <conv:FilterDCConverter x:Key="FilterDCConverter" />
<conv:IListT2DataTableConverter x:Key="IListT2DataTableConverter" /> <conv:IListT2DataTableConverter x:Key="IListT2DataTableConverter" />
<conv:IndexBoolConverter x:Key="IndexBoolConverter" /> <conv:IndexBoolConverter x:Key="IndexBoolConverter" />
<conv:IsLastItemToBoolMultiConverter x:Key="IsLastItemToBoolMultiConverter" />
<conv:Int2DecimalConverter x:Key="Int2DecimalConverter" /> <conv:Int2DecimalConverter x:Key="Int2DecimalConverter" />
<conv:NodeType2IconPathConverter x:Key="NodeType2IconPathConverter" /> <conv:NodeType2IconPathConverter x:Key="NodeType2IconPathConverter" />
<conv:NumberSmaller0Converter x:Key="NumberSmaller0Converter" /> <conv:NumberSmaller0Converter x:Key="NumberSmaller0Converter" />

View File

@@ -57,7 +57,7 @@ namespace BeWo
public static LoginControl LoginControl; public static LoginControl LoginControl;
public static MainControl MainControl; public static MainControl MainControl;
public static string ShortVersion = "3.32"; public static string ShortVersion = BeWoAppInfo.BeWoAppVersion.BaseVersion.ToString();
public static string Version => BeWoAppInfo.BeWoAppVersion.ToString(); public static string Version => BeWoAppInfo.BeWoAppVersion.ToString();
public static int RenderTier = 0; public static int RenderTier = 0;

View File

@@ -0,0 +1,39 @@
using System;
using System.Globalization;
using System.Windows.Controls;
using System.Windows.Data;
namespace BeWo.Converter
{
/// <summary>
/// Erwartet: [0] = Item, [1] = ItemsControl, [2] = Items.Count (nur als Aktualisierungs-Trigger).
/// Liefert true, wenn das Item das letzte Element im ItemsControl ist.
/// </summary>
public class IsLastItemToBoolMultiConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
try
{
if (values is null || values.Length < 2)
return false;
if (!(values[1] is ItemsControl itemsControl))
return false;
var items = itemsControl.Items;
return items.Count > 0 && ReferenceEquals(items[items.Count - 1], values[0]);
}
catch (Exception)
{
return false;
}
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Windows.Data; using System.Windows.Data;
using BS.Shared.Core;
using System.Windows; using System.Windows;
namespace BeWo.Converter namespace BeWo.Converter

View File

@@ -19,7 +19,6 @@ using BeWo.ViewModel;
using BeWo.ServiceProxy; using BeWo.ServiceProxy;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts.Compact; using BS.Shared.DataContracts.Compact;
using BS.Shared.Translation; using BS.Shared.Translation;
using DevExpress.Xpf.Editors; using DevExpress.Xpf.Editors;

View File

@@ -29,7 +29,6 @@ using BeWo.Core;
using BeWo.Core.Service; using BeWo.Core.Service;
using BeWo.ViewModel.ListViewModel; using BeWo.ViewModel.ListViewModel;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts.Compact; using BS.Shared.DataContracts.Compact;
using DevExpress.Xpf.Core; using DevExpress.Xpf.Core;
using DevExpress.Xpf.Editors; using DevExpress.Xpf.Editors;

View File

@@ -2,7 +2,6 @@
using BeWo.Validation; using BeWo.Validation;
using BeWo.ViewModel; using BeWo.ViewModel;
using BeWo.ViewModel.ListViewModel; using BeWo.ViewModel.ListViewModel;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
namespace BeWo.SchulbegleitenderDienst.ViewModel namespace BeWo.SchulbegleitenderDienst.ViewModel

View File

@@ -104,10 +104,6 @@ namespace BeWo.ServiceProxy
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.AiRoutineType))] [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.AiRoutineType))]
BS.Shared.DataContracts.Feature.AI.AiConversationDC CreateAiConversationWithMessage(BS.Shared.DataContracts.Feature.AI.AiConversationDC conversation, BS.Shared.DataContracts.Feature.AI.AiViewContextDC view_context, string message); BS.Shared.DataContracts.Feature.AI.AiConversationDC CreateAiConversationWithMessage(BS.Shared.DataContracts.Feature.AI.AiConversationDC conversation, BS.Shared.DataContracts.Feature.AI.AiViewContextDC view_context, string message);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAiEnhancedService/CloneAiConversation", ReplyAction="http://tempuri.org/IAiEnhancedService/CloneAiConversationResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IAiEnhancedService/CloneAiConversationBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
BS.Shared.DataContracts.Feature.AI.AiConversationDC CloneAiConversation(long conversation_oid, System.Nullable<long> message_oid);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAiEnhancedService/UpdateAiConversationDisplayname", ReplyAction="http://tempuri.org/IAiEnhancedService/UpdateAiConversationDisplaynameResponse")] [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAiEnhancedService/UpdateAiConversationDisplayname", ReplyAction="http://tempuri.org/IAiEnhancedService/UpdateAiConversationDisplaynameResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IAiEnhancedService/UpdateAiConversationDisplaynameBeWoFaultFau" + [System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IAiEnhancedService/UpdateAiConversationDisplaynameBeWoFaultFau" +
"lt", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")] "lt", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
@@ -344,11 +340,6 @@ namespace BeWo.ServiceProxy
return base.Channel.CreateAiConversationWithMessage(conversation, view_context, message); return base.Channel.CreateAiConversationWithMessage(conversation, view_context, message);
} }
public BS.Shared.DataContracts.Feature.AI.AiConversationDC CloneAiConversation(long conversation_oid, System.Nullable<long> message_oid)
{
return base.Channel.CloneAiConversation(conversation_oid, message_oid);
}
public long UpdateAiConversationDisplayname(long oid, long version, string displayname) public long UpdateAiConversationDisplayname(long oid, long version, string displayname)
{ {
return base.Channel.UpdateAiConversationDisplayname(oid, version, displayname); return base.Channel.UpdateAiConversationDisplayname(oid, version, displayname);

View File

@@ -51,7 +51,7 @@ namespace BeWo.Services
beWoWindow.Width = double.NaN; beWoWindow.Width = double.NaN;
beWoWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner; beWoWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner;
beWoWindow.Owner = BeWoApp.CurrentBeWo.MainWindow; beWoWindow.Owner = Application.Current.MainWindow;
beWoWindow.Title = title + " Fenster"; beWoWindow.Title = title + " Fenster";
beWoWindow.rootGroupBox.Header = title; beWoWindow.rootGroupBox.Header = title;
beWoWindow.GroupBoxContent = control; beWoWindow.GroupBoxContent = control;

View File

@@ -0,0 +1,49 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIChatSchwarzOrange2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg17"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g15">
<Canvas Name="Ebene_1">
<Canvas Name="g10">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path12"
Fill="#FF5F00">
<Path.Data>
<PathGeometry Figures="M149.9 100c0-11.8-9.5-21-21.6-21h-13.1s-16.3 0-16.3 0c-13 0-26 0-39 0-11.8 0-21.5 9.3-21.6 20.7 0 22.5-.2 46.4 0 70.3 0 8.6 4.5 15.1 12.9 19 3.8 1.8 7.7 1.7 11.5 1.7h.8s.1 0 .2 0h0c0 3.8 0 7.5 0 11.2 0 3.5 0 7.1 0 10.6 0 3.7 1.5 6.2 4.4 7.5 1.1.5 2.2.7 3.3.7 1.9 0 3.7-.8 5.3-2.2l7.3-6.7c3.6-3.3 7.3-6.7 10.9-10 3.7-3.4 7.4-6.9 11.1-10.4.8-.7 1.3-.8 1.9-.8 1.7.1 3.5.2 5.3.2 18.7 0-4.9 0 13.8 0 2.1 0 4.6 0 6.9-.7 10-2.7 16-10.5 16-20.7.1-26.7.1-48.8 0-69.3ZM78.7 183.1c0-4.4-3.4-7.6-7.8-7.6h-4.9c-2 0-4.1 0-6.1 0-3.6 0-6-2.3-6.3-5.9 0-.9 0-1.9 0-2.8v-.6s0-64.7 0-64.7c0-4.1 1.3-6.2 4.4-7.2.7-.2 1.6-.3 2.4-.3 36.6 0 31 0 67.6 0 4.5 0 6.9 2.4 6.9 6.9 0 22.6 0 45.1 0 67.7 0 4.4-2.5 6.8-6.9 6.8h-8.1c-18.8 0 4.5 0-14.3 0h0c-3 0-5.4.9-7.6 3-5.1 4.8-10.3 9.6-15.4 14.3l-2.7 2.5c-.3.3-.7.6-1 .9v-7.9c0-1.7 0-3.4 0-5.1Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,49 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIChatSchwarz2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg13"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g11">
<Canvas Name="Ebene_1">
<Canvas Name="g6">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path2"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path4"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M149.9 100c0-11.8-9.5-21-21.6-21h-13.1s-16.3 0-16.3 0c-13 0-26 0-39 0-11.8 0-21.5 9.3-21.6 20.7 0 22.5-.2 46.4 0 70.3 0 8.6 4.5 15.1 12.9 19 3.8 1.8 7.7 1.7 11.5 1.7h.8s.1 0 .2 0h0c0 3.8 0 7.5 0 11.2 0 3.5 0 7.1 0 10.6 0 3.7 1.5 6.2 4.4 7.5 1.1.5 2.2.7 3.3.7 1.9 0 3.7-.8 5.3-2.2l7.3-6.7c3.6-3.3 7.3-6.7 10.9-10 3.7-3.4 7.4-6.9 11.1-10.4.8-.7 1.3-.8 1.9-.8 1.7.1 3.5.2 5.3.2 18.7 0-4.9 0 13.8 0 2.1 0 4.6 0 6.9-.7 10-2.7 16-10.5 16-20.7.1-26.7.1-48.8 0-69.3ZM78.7 183.1c0-4.4-3.4-7.6-7.8-7.6h-4.9c-2 0-4.1 0-6.1 0-3.6 0-6-2.3-6.3-5.9 0-.9 0-1.9 0-2.8v-.6s0-64.7 0-64.7c0-4.1 1.3-6.2 4.4-7.2.7-.2 1.6-.3 2.4-.3 36.6 0 31 0 67.6 0 4.5 0 6.9 2.4 6.9 6.9 0 22.6 0 45.1 0 67.7 0 4.4-2.5 6.8-6.9 6.8h-8.1c-18.8 0 4.5 0-14.3 0h0c-3 0-5.4.9-7.6 3-5.1 4.8-10.3 9.6-15.4 14.3l-2.7 2.5c-.3.3-.7.6-1 .9v-7.9c0-1.7 0-3.4 0-5.1Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,49 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIChatWeissOrange2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg17"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g15">
<Canvas Name="Ebene_1">
<Canvas Name="g10">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path12"
Fill="#FF5F00">
<Path.Data>
<PathGeometry Figures="M149.9 100c0-11.8-9.5-21-21.6-21h-13.1s-16.3 0-16.3 0c-13 0-26 0-39 0-11.8 0-21.5 9.3-21.6 20.7 0 22.5-.2 46.4 0 70.3 0 8.6 4.5 15.1 12.9 19 3.8 1.8 7.7 1.7 11.5 1.7h.8s.1 0 .2 0h0c0 3.8 0 7.5 0 11.2 0 3.5 0 7.1 0 10.6 0 3.7 1.5 6.2 4.4 7.5 1.1.5 2.2.7 3.3.7 1.9 0 3.7-.8 5.3-2.2l7.3-6.7c3.6-3.3 7.3-6.7 10.9-10 3.7-3.4 7.4-6.9 11.1-10.4.8-.7 1.3-.8 1.9-.8 1.7.1 3.5.2 5.3.2 18.7 0-4.9 0 13.8 0 2.1 0 4.6 0 6.9-.7 10-2.7 16-10.5 16-20.7.1-26.7.1-48.8 0-69.3ZM78.7 183.1c0-4.4-3.4-7.6-7.8-7.6h-4.9c-2 0-4.1 0-6.1 0-3.6 0-6-2.3-6.3-5.9 0-.9 0-1.9 0-2.8v-.6s0-64.7 0-64.7c0-4.1 1.3-6.2 4.4-7.2.7-.2 1.6-.3 2.4-.3 36.6 0 31 0 67.6 0 4.5 0 6.9 2.4 6.9 6.9 0 22.6 0 45.1 0 67.7 0 4.4-2.5 6.8-6.9 6.8h-8.1c-18.8 0 4.5 0-14.3 0h0c-3 0-5.4.9-7.6 3-5.1 4.8-10.3 9.6-15.4 14.3l-2.7 2.5c-.3.3-.7.6-1 .9v-7.9c0-1.7 0-3.4 0-5.1Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,49 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIChatWeiss2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg17"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g15">
<Canvas Name="Ebene_1">
<Canvas Name="g10">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path12"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M149.9 100c0-11.8-9.5-21-21.6-21h-13.1s-16.3 0-16.3 0c-13 0-26 0-39 0-11.8 0-21.5 9.3-21.6 20.7 0 22.5-.2 46.4 0 70.3 0 8.6 4.5 15.1 12.9 19 3.8 1.8 7.7 1.7 11.5 1.7h.8s.1 0 .2 0h0c0 3.8 0 7.5 0 11.2 0 3.5 0 7.1 0 10.6 0 3.7 1.5 6.2 4.4 7.5 1.1.5 2.2.7 3.3.7 1.9 0 3.7-.8 5.3-2.2l7.3-6.7c3.6-3.3 7.3-6.7 10.9-10 3.7-3.4 7.4-6.9 11.1-10.4.8-.7 1.3-.8 1.9-.8 1.7.1 3.5.2 5.3.2 18.7 0-4.9 0 13.8 0 2.1 0 4.6 0 6.9-.7 10-2.7 16-10.5 16-20.7.1-26.7.1-48.8 0-69.3ZM78.7 183.1c0-4.4-3.4-7.6-7.8-7.6h-4.9c-2 0-4.1 0-6.1 0-3.6 0-6-2.3-6.3-5.9 0-.9 0-1.9 0-2.8v-.6s0-64.7 0-64.7c0-4.1 1.3-6.2 4.4-7.2.7-.2 1.6-.3 2.4-.3 36.6 0 31 0 67.6 0 4.5 0 6.9 2.4 6.9 6.9 0 22.6 0 45.1 0 67.7 0 4.4-2.5 6.8-6.9 6.8h-8.1c-18.8 0 4.5 0-14.3 0h0c-3 0-5.4.9-7.6 3-5.1 4.8-10.3 9.6-15.4 14.3l-2.7 2.5c-.3.3-.7.6-1 .9v-7.9c0-1.7 0-3.4 0-5.1Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,49 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIFunktionSchwarzGruen2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg17"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g15">
<Canvas Name="Ebene_1">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#65B231">
<Path.Data>
<PathGeometry Figures="M94.1 79c-30.9 0-56 25-56 56s25 56 56 56 56-25 56-56-25-56-56-56ZM125 121.5l-37.3 37.3c-.4.4-.9.8-1.4 1.1-.6.6-1.5.7-2.2.5-.4 0-.7-.2-.9-.4l-7.1-7.1c0 0-.2-.2-.2-.3l-13.6-13.6c-.9-.9-.8-2.4 0-3.3l7.1-7.1c.9-.9 2.4-1 3.3 0l12.1 12.1 29.6-29.6c1.6-1.6 3.6-2.1 4.5-1.2l7.1 7.1c.9.9.4 3-1.2 4.5Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Canvas Name="g12">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path10"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,49 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIFunktionSchwarz2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg13"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g11">
<Canvas Name="Ebene_1">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path2"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M94.1 79c-30.9 0-56 25-56 56s25 56 56 56 56-25 56-56-25-56-56-56ZM125 121.5l-37.3 37.3c-.4.4-.9.8-1.4 1.1-.6.6-1.5.7-2.2.5-.4 0-.7-.2-.9-.4l-7.1-7.1c0 0-.2-.2-.2-.3l-13.6-13.6c-.9-.9-.8-2.4 0-3.3l7.1-7.1c.9-.9 2.4-1 3.3 0l12.1 12.1 29.6-29.6c1.6-1.6 3.6-2.1 4.5-1.2l7.1 7.1c.9.9.4 3-1.2 4.5Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Canvas Name="g8">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path4"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,49 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIFunktionWeissGruen2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg17"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g15">
<Canvas Name="Ebene_1">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#65B231">
<Path.Data>
<PathGeometry Figures="M94.1 79c-30.9 0-56 25-56 56s25 56 56 56 56-25 56-56-25-56-56-56ZM125 121.5l-37.3 37.3c-.4.4-.9.8-1.4 1.1-.6.6-1.5.7-2.2.5-.4 0-.7-.2-.9-.4l-7.1-7.1c0 0-.2-.2-.2-.3l-13.6-13.6c-.9-.9-.8-2.4 0-3.3l7.1-7.1c.9-.9 2.4-1 3.3 0l12.1 12.1 29.6-29.6c1.6-1.6 3.6-2.1 4.5-1.2l7.1 7.1c.9.9.4 3-1.2 4.5Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Canvas Name="g12">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path10"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,49 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIFunktionWeiss2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg17"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g15">
<Canvas Name="Ebene_1">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M94.1 79c-30.9 0-56 25-56 56s25 56 56 56 56-25 56-56-25-56-56-56ZM125 121.5l-37.3 37.3c-.4.4-.9.8-1.4 1.1-.6.6-1.5.7-2.2.5-.4 0-.7-.2-.9-.4l-7.1-7.1c0 0-.2-.2-.2-.3l-13.6-13.6c-.9-.9-.8-2.4 0-3.3l7.1-7.1c.9-.9 2.4-1 3.3 0l12.1 12.1 29.6-29.6c1.6-1.6 3.6-2.1 4.5-1.2l7.1 7.1c.9.9.4 3-1.2 4.5Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Canvas Name="g12">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path10"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,61 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIRefreshSchwarzOrange2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg22"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g20">
<Canvas Name="Ebene_1">
<Canvas Name="Ebene_12">
<Canvas Name="g10">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#FF5F00">
<Path.Data>
<PathGeometry Figures="M121.6 161.6c-3.1-1.6-6.8-1-9.2 1.5-8.4 8.4-19.9 12.8-31.6 11.9-10.7-.8-20.4-5.8-27.4-13.9-3.9-4.6-6.7-9.9-8.3-15.6h9.5c.5 0 .9-.1 1.3-.4.8-.5 1.2-1.6.6-2.5l-17-25.9-.6-.9c-.7-1-2.2-1.2-3.2-.6-.2 0-.4.3-.6.6l-.6.9-16.9 25.9c-.8 1.2.1 2.7 1.7 2.8h9.7c4.7 24.3 25.3 43.2 50.6 45.2 1.4.1 2.9.2 4.3.2 14.9 0 29.2-5.9 39.8-16.7 1.8-1.8 2.6-4.2 2.2-6.7s-1.9-4.6-4.2-5.8h-.1Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#FF5F00">
<Path.Data>
<PathGeometry Figures="M149.2 124.1c-.4-.2-.8-.4-1.3-.4h-9.5c-4.9-24.1-25.4-42.7-50.5-44.6-16.4-1.3-32.4 4.8-44.1 16.5-1.8 1.8-2.6 4.2-2.2 6.7.4 2.5 1.9 4.6 4.2 5.8 3.1 1.6 6.8 1 9.2-1.5 8.3-8.4 19.9-12.8 31.6-11.9 17.2 1.3 31 13.3 35.5 28.9h-9.7c-1.5 0-2.5 1.6-1.7 2.8l16.9 25.9.6.9c.2.2.3.4.6.6 1 .7 2.5.5 3.2-.6l.6-.9 17-25.9c.6-.9.2-1.9-.6-2.5l.2.2Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
<Canvas Name="g16">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path12"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path14"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3h-.2ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,61 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIRefreshSchwarz2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg18"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g16">
<Canvas Name="Ebene_1">
<Canvas Name="Ebene_12">
<Canvas Name="g6">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path2"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M121.6 161.6c-3.1-1.6-6.8-1-9.2 1.5-8.4 8.4-19.9 12.8-31.6 11.9-10.7-.8-20.4-5.8-27.4-13.9-3.9-4.6-6.7-9.9-8.3-15.6h9.5c.5 0 .9-.1 1.3-.4.8-.5 1.2-1.6.6-2.5l-17-25.9-.6-.9c-.7-1-2.2-1.2-3.2-.6-.2 0-.4.3-.6.6l-.6.9-16.9 25.9c-.8 1.2.1 2.7 1.7 2.8h9.7c4.7 24.3 25.3 43.2 50.6 45.2 1.4.1 2.9.2 4.3.2 14.9 0 29.2-5.9 39.8-16.7 1.8-1.8 2.6-4.2 2.2-6.7s-1.9-4.6-4.2-5.8h-.1Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path4"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M149.2 124.1c-.4-.2-.8-.4-1.3-.4h-9.5c-4.9-24.1-25.4-42.7-50.5-44.6-16.4-1.3-32.4 4.8-44.1 16.5-1.8 1.8-2.6 4.2-2.2 6.7.4 2.5 1.9 4.6 4.2 5.8 3.1 1.6 6.8 1 9.2-1.5 8.3-8.4 19.9-12.8 31.6-11.9 17.2 1.3 31 13.3 35.5 28.9h-9.7c-1.5 0-2.5 1.6-1.7 2.8l16.9 25.9.6.9c.2.2.3.4.6.6 1 .7 2.5.5 3.2-.6l.6-.9 17-25.9c.6-.9.2-1.9-.6-2.5l.2.2Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
<Canvas Name="g12">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path10"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3h-.2ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,59 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIRefreshWeissOrange2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg21"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g19">
<Canvas Name="Ebene_1">
<Canvas Name="g10">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#FF5F00">
<Path.Data>
<PathGeometry Figures="M121.6 161.6c-3.1-1.6-6.8-1-9.2 1.5-8.4 8.4-19.9 12.8-31.6 11.9-10.7-.8-20.4-5.8-27.4-13.9-3.9-4.6-6.7-9.9-8.3-15.6h9.5c.5 0 .9-.1 1.3-.4.8-.5 1.2-1.6.6-2.5l-17-25.9-.6-.9c-.7-1-2.2-1.2-3.2-.6-.2.1-.4.3-.6.6l-.6.9-16.9 25.9c-.8 1.2.1 2.7 1.7 2.8h9.7c4.7 24.3 25.3 43.2 50.6 45.2 1.4.1 2.9.2 4.3.2 14.9 0 29.2-5.9 39.8-16.7 1.8-1.8 2.6-4.2 2.2-6.7-.4-2.5-1.9-4.6-4.2-5.8Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#FF5F00">
<Path.Data>
<PathGeometry Figures="M149.2 124.1c-.4-.2-.8-.4-1.3-.4h-6.1s-3.4 0-3.4 0c-4.9-24.1-25.4-42.7-50.5-44.6-16.4-1.3-32.4 4.8-44.1 16.5-1.8 1.8-2.6 4.2-2.2 6.7.4 2.5 1.9 4.6 4.2 5.8 3.1 1.6 6.8 1 9.2-1.5 8.3-8.4 19.9-12.8 31.6-11.9 17.2 1.3 31 13.3 35.5 28.9h-9.7c-1.5.1-2.5 1.6-1.7 2.8l16.9 25.9.6.9c.2.2.3.4.6.6 1 .7 2.5.5 3.2-.6l.6-.9 17-25.9c.6-.9.2-1.9-.6-2.5Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
<Canvas Name="g16">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path12"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path14"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,59 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIRefreshWeiss2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg21"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g19">
<Canvas Name="Ebene_1">
<Canvas Name="g10">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M121.6 161.6c-3.1-1.6-6.8-1-9.2 1.5-8.4 8.4-19.9 12.8-31.6 11.9-10.7-.8-20.4-5.8-27.4-13.9-3.9-4.6-6.7-9.9-8.3-15.6h9.5c.5 0 .9-.1 1.3-.4.8-.5 1.2-1.6.6-2.5l-17-25.9-.6-.9c-.7-1-2.2-1.2-3.2-.6-.2.1-.4.3-.6.6l-.6.9-16.9 25.9c-.8 1.2.1 2.7 1.7 2.8h9.7c4.7 24.3 25.3 43.2 50.6 45.2 1.4.1 2.9.2 4.3.2 14.9 0 29.2-5.9 39.8-16.7 1.8-1.8 2.6-4.2 2.2-6.7-.4-2.5-1.9-4.6-4.2-5.8Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M149.2 124.1c-.4-.2-.8-.4-1.3-.4h-6.1s-3.4 0-3.4 0c-4.9-24.1-25.4-42.7-50.5-44.6-16.4-1.3-32.4 4.8-44.1 16.5-1.8 1.8-2.6 4.2-2.2 6.7.4 2.5 1.9 4.6 4.2 5.8 3.1 1.6 6.8 1 9.2-1.5 8.3-8.4 19.9-12.8 31.6-11.9 17.2 1.3 31 13.3 35.5 28.9h-9.7c-1.5.1-2.5 1.6-1.7 2.8l16.9 25.9.6.9c.2.2.3.4.6.6 1 .7 2.5.5 3.2-.6l.6-.9 17-25.9c.6-.9.2-1.9-.6-2.5Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
<Canvas Name="g16">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path12"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path14"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -3,4 +3,11 @@
<PathGeometry x:Key="GeometryFileAdd2">M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM200,216H56V40h88V88a8,8,0,0,0,8,8h48V216Zm-40-64a8,8,0,0,1-8,8H136v16a8,8,0,0,1-16,0V160H104a8,8,0,0,1,0-16h16V128a8,8,0,0,1,16,0v16h16A8,8,0,0,1,160,152Z</PathGeometry> <PathGeometry x:Key="GeometryFileAdd2">M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM200,216H56V40h88V88a8,8,0,0,0,8,8h48V216Zm-40-64a8,8,0,0,1-8,8H136v16a8,8,0,0,1-16,0V160H104a8,8,0,0,1,0-16h16V128a8,8,0,0,1,16,0v16h16A8,8,0,0,1,160,152Z</PathGeometry>
<PathGeometry x:Key="Lucide.ChevronDown">M488.75 665.1666666666667C477.6249999999999 661.5 472.9166666666666 657.0416666666667 344.9166666666667 528.9583333333334C242.4166666666667 426.3333333333334 214.8333333333333 398.0833333333334 212.4166666666667 393.125C209.8333333333333 387.8333333333334 209.375 385.0416666666668 209.375 375C209.375 361.0833333333334 211.8333333333333 354.9166666666668 220.875 345.875C229.9166666666667 336.8333333333334 236.0833333333334 334.375 250 334.375C260.0833333333333 334.375 262.8333333333333 334.8333333333334 268.125 337.4583333333334C273.0416666666667 339.8333333333334 298.5 364.5833333333334 387.2083333333333 453.0416666666666L500 565.5833333333334L612.7916666666666 453.0416666666666C701.4999999999999 364.5833333333334 726.9583333333333 339.8333333333334 731.875 337.4583333333334C737.1666666666666 334.8333333333334 739.9166666666666 334.375 750 334.375C763.9166666666666 334.375 770.0833333333333 336.8333333333334 779.125 345.875C788.1666666666666 354.9166666666668 790.625 361.0833333333334 790.625 375C790.625 385.0416666666668 790.1666666666665 387.8333333333334 787.5833333333334 393.125C785.1666666666666 398.0833333333334 757.5833333333333 426.3333333333334 655.0833333333333 528.9583333333334C510.9583333333333 673.2083333333334 520 665.125 501.8749999999999 665.7916666666666C496.375 666 490.4583333333333 665.7083333333334 488.75 665.1666666666667</PathGeometry> <PathGeometry x:Key="Lucide.ChevronDown">M488.75 665.1666666666667C477.6249999999999 661.5 472.9166666666666 657.0416666666667 344.9166666666667 528.9583333333334C242.4166666666667 426.3333333333334 214.8333333333333 398.0833333333334 212.4166666666667 393.125C209.8333333333333 387.8333333333334 209.375 385.0416666666668 209.375 375C209.375 361.0833333333334 211.8333333333333 354.9166666666668 220.875 345.875C229.9166666666667 336.8333333333334 236.0833333333334 334.375 250 334.375C260.0833333333333 334.375 262.8333333333333 334.8333333333334 268.125 337.4583333333334C273.0416666666667 339.8333333333334 298.5 364.5833333333334 387.2083333333333 453.0416666666666L500 565.5833333333334L612.7916666666666 453.0416666666666C701.4999999999999 364.5833333333334 726.9583333333333 339.8333333333334 731.875 337.4583333333334C737.1666666666666 334.8333333333334 739.9166666666666 334.375 750 334.375C763.9166666666666 334.375 770.0833333333333 336.8333333333334 779.125 345.875C788.1666666666666 354.9166666666668 790.625 361.0833333333334 790.625 375C790.625 385.0416666666668 790.1666666666665 387.8333333333334 787.5833333333334 393.125C785.1666666666666 398.0833333333334 757.5833333333333 426.3333333333334 655.0833333333333 528.9583333333334C510.9583333333333 673.2083333333334 520 665.125 501.8749999999999 665.7916666666666C496.375 666 490.4583333333333 665.7083333333334 488.75 665.1666666666667</PathGeometry>
<PathGeometry x:Key="Lucide.ChevronUp">M238.75 665.1666666666667C227.75 661.5416666666667 217.5833333333334 652.9166666666667 212.375 642.75C209.8333333333333 637.75 209.375 635.0833333333334 209.375 625C209.375 614.9583333333334 209.8333333333333 612.1666666666667 212.4166666666667 606.875C216.9166666666667 597.7083333333334 472.7083333333333 341.9166666666667 481.8749999999999 337.4166666666668C487.1666666666666 334.8333333333334 489.9583333333333 334.375 500 334.375C510.0416666666666 334.375 512.8333333333333 334.8333333333334 518.125 337.4166666666668C527.2916666666666 341.9166666666667 783.0833333333333 597.7083333333334 787.5833333333334 606.875C790.1666666666665 612.1666666666667 790.625 614.9583333333334 790.625 625C790.625 635.0833333333334 790.1666666666665 637.75 787.6249999999999 642.75C783.7083333333334 650.4166666666667 775.9583333333334 658.1666666666667 768.1249999999999 662.2916666666667C762.625 665.2083333333334 760.4166666666666 665.625 750 665.625C739.375 665.625 737.3749999999999 665.25 731.25 662.0416666666667C725.7083333333334 659.1666666666667 702.6666666666666 636.7916666666667 612.1666666666666 546.4583333333334L500 434.4166666666668L387.7916666666667 546.4583333333334C262.75 671.3333333333334 269.8333333333333 665.125 251.875 665.7916666666666C246.375 666 240.4583333333333 665.7083333333334 238.75 665.1666666666667</PathGeometry> <PathGeometry x:Key="Lucide.ChevronUp">M238.75 665.1666666666667C227.75 661.5416666666667 217.5833333333334 652.9166666666667 212.375 642.75C209.8333333333333 637.75 209.375 635.0833333333334 209.375 625C209.375 614.9583333333334 209.8333333333333 612.1666666666667 212.4166666666667 606.875C216.9166666666667 597.7083333333334 472.7083333333333 341.9166666666667 481.8749999999999 337.4166666666668C487.1666666666666 334.8333333333334 489.9583333333333 334.375 500 334.375C510.0416666666666 334.375 512.8333333333333 334.8333333333334 518.125 337.4166666666668C527.2916666666666 341.9166666666667 783.0833333333333 597.7083333333334 787.5833333333334 606.875C790.1666666666665 612.1666666666667 790.625 614.9583333333334 790.625 625C790.625 635.0833333333334 790.1666666666665 637.75 787.6249999999999 642.75C783.7083333333334 650.4166666666667 775.9583333333334 658.1666666666667 768.1249999999999 662.2916666666667C762.625 665.2083333333334 760.4166666666666 665.625 750 665.625C739.375 665.625 737.3749999999999 665.25 731.25 662.0416666666667C725.7083333333334 659.1666666666667 702.6666666666666 636.7916666666667 612.1666666666666 546.4583333333334L500 434.4166666666668L387.7916666666667 546.4583333333334C262.75 671.3333333333334 269.8333333333333 665.125 251.875 665.7916666666666C246.375 666 240.4583333333333 665.7083333333334 238.75 665.1666666666667</PathGeometry>
<PathGeometry x:Key="Phosphor.PuzzlePiece">M220.27,158.54a8,8,0,0,0-7.7-.46,20,20,0,1,1,0-36.16A8,8,0,0,0,224,114.69V72a16,16,0,0,0-16-16H171.78a35.36,35.36,0,0,0,.22-4,36.11,36.11,0,0,0-11.36-26.24,36,36,0,0,0-60.55,23.62,36.56,36.56,0,0,0,.14,6.62H64A16,16,0,0,0,48,72v32.22a35.36,35.36,0,0,0-4-.22,36.12,36.12,0,0,0-26.24,11.36,35.7,35.7,0,0,0-9.69,27,36.08,36.08,0,0,0,33.31,33.6,35.68,35.68,0,0,0,6.62-.14V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V165.31A8,8,0,0,0,220.27,158.54ZM208,208H64V165.31a8,8,0,0,0-11.43-7.23,20,20,0,1,1,0-36.16A8,8,0,0,0,64,114.69V72h46.69a8,8,0,0,0,7.23-11.43,20,20,0,1,1,36.16,0A8,8,0,0,0,161.31,72H208v32.23a35.68,35.68,0,0,0-6.62-.14A36,36,0,0,0,204,176a35.36,35.36,0,0,0,4-.22Z</PathGeometry>
<PathGeometry x:Key="Phosphor.Stack">M230.91,172A8,8,0,0,1,228,182.91l-96,56a8,8,0,0,1-8.06,0l-96-56A8,8,0,0,1,36,169.09l92,53.65,92-53.65A8,8,0,0,1,230.91,172ZM220,121.09l-92,53.65L36,121.09A8,8,0,0,0,28,134.91l96,56a8,8,0,0,0,8.06,0l96-56A8,8,0,1,0,220,121.09ZM24,80a8,8,0,0,1,4-6.91l96-56a8,8,0,0,1,8.06,0l96,56a8,8,0,0,1,0,13.82l-96,56a8,8,0,0,1-8.06,0l-96-56A8,8,0,0,1,24,80Zm23.88,0L128,126.74,208.12,80,128,33.26Z</PathGeometry>
<PathGeometry x:Key="Phosphor.FloppyDisk">M219.31,72,184,36.69A15.86,15.86,0,0,0,172.69,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V83.31A15.86,15.86,0,0,0,219.31,72ZM168,208H88V152h80Zm40,0H184V152a16,16,0,0,0-16-16H88a16,16,0,0,0-16,16v56H48V48H172.69L208,83.31ZM160,72a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h56A8,8,0,0,1,160,72Z</PathGeometry>
<PathGeometry x:Key="Phosphor.RowsPlusTop">M208,160H48a16,16,0,0,0-16,16v24a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V176A16,16,0,0,0,208,160Zm0,40H48V176H208v24Zm0-112H48a16,16,0,0,0-16,16v24a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V104A16,16,0,0,0,208,88Zm0,40H48V104H208v24ZM96,40a8,8,0,0,1,8-8h16V16a8,8,0,0,1,16,0V32h16a8,8,0,0,1,0,16H136V64a8,8,0,0,1-16,0V48H104A8,8,0,0,1,96,40Z</PathGeometry>
<PathGeometry x:Key="Phosphor.Swap">M224,48V152a16,16,0,0,1-16,16H99.31l10.35,10.34a8,8,0,0,1-11.32,11.32l-24-24a8,8,0,0,1,0-11.32l24-24a8,8,0,0,1,11.32,11.32L99.31,152H208V48H96v8a8,8,0,0,1-16,0V48A16,16,0,0,1,96,32H208A16,16,0,0,1,224,48ZM168,192a8,8,0,0,0-8,8v8H48V104H156.69l-10.35,10.34a8,8,0,0,0,11.32,11.32l24-24a8,8,0,0,0,0-11.32l-24-24a8,8,0,0,0-11.32,11.32L156.69,88H48a16,16,0,0,0-16,16V208a16,16,0,0,0,16,16H160a16,16,0,0,0,16-16v-8A8,8,0,0,0,168,192Z</PathGeometry>
<PathGeometry x:Key="Phosphor.Copy">M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z</PathGeometry>
</ResourceDictionary> </ResourceDictionary>

View File

@@ -4,11 +4,11 @@
xmlns:ai="clr-namespace:BeWo.View.Detail.AI" xmlns:ai="clr-namespace:BeWo.View.Detail.AI"
xmlns:dxwui="http://schemas.devexpress.com/winfx/2008/xaml/windowsui" xmlns:dxwui="http://schemas.devexpress.com/winfx/2008/xaml/windowsui"
xmlns:templateselectors="clr-namespace:BeWo.View.TemplateSelectors" xmlns:templateselectors="clr-namespace:BeWo.View.TemplateSelectors"
xmlns:view="clr-namespace:BeWo.View"
xmlns:viewmodel="clr-namespace:BeWo.ViewModel"> xmlns:viewmodel="clr-namespace:BeWo.ViewModel">
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="..\DataTemplates\ControlTemplates.xaml" /> <ResourceDictionary Source="..\DataTemplates\ControlTemplates.xaml" />
<ResourceDictionary Source="..\Designs\GeometryCollection.xaml" />
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
<Style x:Key="MessageTextBoxStyle" TargetType="{x:Type TextBox}"> <Style x:Key="MessageTextBoxStyle" TargetType="{x:Type TextBox}">
@@ -146,35 +146,102 @@
<!-- Chip-Button für AssistentCommands unter der Assistent-Antwort -->
<Style x:Key="AssistentCommandButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="{DynamicResource TextForegroundPrimary}" />
<Setter Property="FontSize" Value="12" />
<Setter Property="FontWeight" Value="Medium" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Padding" Value="12,4,12,5" />
<Setter Property="Margin" Value="0,0,6,0" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border
x:Name="border"
Padding="{TemplateBinding Padding}"
Background="#00000000"
BorderBrush="#00000000"
BorderThickness="1"
CornerRadius="12">
<ContentPresenter
HorizontalAlignment="Center"
VerticalAlignment="Center"
TextBlock.Foreground="{TemplateBinding Foreground}" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border" Property="Background" Value="#FFFFFFFF" />
<Setter TargetName="border" Property="BorderBrush" Value="#59000000" />
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="border" Property="Background" Value="#CCEDEDED" />
<Setter TargetName="border" Property="BorderBrush" Value="#73000000" />
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.45" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- Speichern-Button unter der User-Nachricht: nur beim Hovern sichtbar -->
<Style
x:Key="UserMessageSaveButtonStyle"
BasedOn="{StaticResource AssistentCommandButtonStyle}"
TargetType="{x:Type Button}">
<Setter Property="Visibility" Value="Hidden" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<!-- Bei ausgeblendeten Nachrichten kein Speichern (würde eine leere Nachricht speichern) -->
<DataTrigger Binding="{Binding ShowMessage}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
<!-- Buttonleiste unter der Assistent-Antwort: bei der letzten Nachricht immer sichtbar, sonst nur beim Hovern -->
<Style x:Key="AssistentMessageCommandBarStyle" TargetType="{x:Type ItemsControl}">
<Setter Property="Visibility" Value="Hidden" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource IsLastItemToBoolMultiConverter}">
<Binding />
<Binding RelativeSource="{RelativeSource AncestorType={x:Type ListView}}" />
<Binding Path="Items.Count" RelativeSource="{RelativeSource AncestorType={x:Type ListView}}" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding DataContext.AssistentCommands, RelativeSource={RelativeSource AncestorType={x:Type ListView}}, Converter={StaticResource CollectionCountToBoolConverter}}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
<!-- Assistent Message Control --> <!-- Assistent Message Control -->
<DataTemplate x:Key="AssistentMessageTemplate"> <DataTemplate x:Key="AssistentMessageTemplate">
<Grid <Grid
Margin="0,0,60,0" Margin="0,0,60,0"
HorizontalAlignment="Left" HorizontalAlignment="Left"
ContextMenuService.IsEnabled="{Binding DataContext.AssistentCommands, Converter={StaticResource CollectionCountToBoolConverter}, RelativeSource={RelativeSource AncestorType=ItemsControl}}" Background="Transparent">
Tag="{Binding DataContext, RelativeSource={RelativeSource AncestorType=ItemsControl}}">
<Grid.ContextMenu>
<ContextMenu ItemsSource="{Binding PlacementTarget.Tag.AssistentCommands, RelativeSource={RelativeSource Self}}">
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command" Value="{Binding Command}" />
<Setter Property="CommandParameter" Value="{Binding Path=PlacementTarget.DataContext, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
</Style>
</ContextMenu.ItemContainerStyle>
<ContextMenu.ItemTemplate>
<DataTemplate>
<TextBlock
Margin="3"
VerticalAlignment="Center"
Text="{Binding Name}" />
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
</Grid.ContextMenu>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" /> <ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<Border <Border
Width="auto" Width="auto"
Margin="0,0,3,0" Margin="0,0,3,0"
@@ -245,15 +312,6 @@
</Grid> </Grid>
</TextBlock.ToolTip> </TextBlock.ToolTip>
</TextBlock> </TextBlock>
<TextBlock
Grid.Column="1"
Margin="9,0,0,3"
HorizontalAlignment="Left"
VerticalAlignment="Top"
FontSize="12"
FontWeight="Bold"
Text="⋮"
Visibility="{Binding DataContext.AssistentCommands, RelativeSource={RelativeSource AncestorType=ItemsControl}, Converter={StaticResource CollectionCountToVisibilityConverter}}" />
<!--<TextBlock <!--<TextBlock
Grid.Row="1" Grid.Row="1"
Grid.ColumnSpan="2" Grid.ColumnSpan="2"
@@ -273,6 +331,35 @@
Style="{StaticResource MessageTextBoxStyle}" /> Style="{StaticResource MessageTextBoxStyle}" />
</Grid> </Grid>
</Border> </Border>
<ItemsControl
Grid.Row="1"
Grid.Column="1"
Margin="0,4,0,0"
HorizontalAlignment="Left"
ItemsSource="{Binding DataContext.AssistentCommands, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}"
Style="{StaticResource AssistentMessageCommandBarStyle}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button
Command="{Binding Command}"
CommandParameter="{Binding DataContext, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
Style="{StaticResource AssistentCommandButtonStyle}"
ToolTip="{Binding Name}">
<Path
Width="12"
Height="12"
Data="{Binding Icon}"
Fill="Black"
Stretch="Fill" />
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid> </Grid>
</DataTemplate> </DataTemplate>
@@ -309,61 +396,156 @@
<!-- User Message Control --> <!-- User Message Control -->
<DataTemplate x:Key="UserMessageTemplate"> <DataTemplate x:Key="UserMessageTemplate">
<Border <Grid
Width="auto"
Margin="60,0,0,0" Margin="60,0,0,0"
HorizontalAlignment="Right" HorizontalAlignment="Right"
Background="#DEFFFFFF" Background="Transparent">
BorderBrush="Black" <Grid.RowDefinitions>
BorderThickness="0" <RowDefinition Height="auto" />
CornerRadius="15, 15, 15, 15" <RowDefinition Height="auto" />
Tag="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type view:BeWoView}}, Path=.}"> </Grid.RowDefinitions>
<Border.ContextMenu> <Border
<ContextMenu> Width="auto"
<MenuItem HorizontalAlignment="Right"
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}}, Path=PlacementTarget.Tag.DataContext.SavePromptCommand}" Background="#DEFFFFFF"
CommandParameter="{Binding}" BorderBrush="Black"
Header="Speichern" /> BorderThickness="0"
</ContextMenu> CornerRadius="15, 15, 15, 15">
</Border.ContextMenu> <Grid>
<Grid> <TextBox Padding="12,8,12,8">
<Grid.ColumnDefinitions> <TextBox.Style>
<ColumnDefinition Width="auto" /> <Style BasedOn="{StaticResource MessageTextBoxStyle}" TargetType="{x:Type TextBox}">
<ColumnDefinition Width="auto" /> <Style.Triggers>
</Grid.ColumnDefinitions> <DataTrigger Binding="{Binding ShowMessage}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
<!-- Platzhalter für ausgeblendete Nachrichten (Message kommt vom Server als null) -->
<StackPanel Orientation="Vertical">
<StackPanel.Style>
<Style TargetType="{x:Type StackPanel}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding ShowMessage}" Value="False">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBox Padding="12,8,12,8" Style="{StaticResource MessageTextBoxStyle}" /> <!-- Titelzeile: Promptbaustein-Titel + Hilfe-Link + Ausklapp-Button -->
<!--<TextBlock Grid.Column="1" Text="⋮" <Grid>
Margin="3,8,12,8" <Grid.ColumnDefinitions>
VerticalAlignment="Top" <ColumnDefinition Width="*" />
HorizontalAlignment="Left" <ColumnDefinition Width="auto" />
FontSize="12" <ColumnDefinition Width="auto" />
FontWeight="Bold"/>--> </Grid.ColumnDefinitions>
<TextBlock
Padding="12,8,4,8"
VerticalAlignment="Center"
FontSize="14"
FontStyle="Italic"
Foreground="#FF888888"
Text="{Binding HiddenMessageText}"
TextWrapping="Wrap" />
<!-- Hilfe-Link (i) für Ownsoft-Promptbausteine mit hinterlegtem OwnsoftRefLink -->
<TextBlock
Grid.Column="1"
Margin="0"
Padding="0"
VerticalAlignment="Center"
ToolTip="Hilfe zum Promptbaustein öffnen"
Visibility="{Binding IsInfoVisible, Converter={StaticResource BoolVisibilityConverter}}">
<Hyperlink NavigateUri="{Binding OwnsoftRefLink}">
(i)
</Hyperlink>
</TextBlock>
<ToggleButton
x:Name="btnTogglePrompt"
Grid.Column="2"
Margin="4,4,8,4"
Padding="6,2,6,2"
VerticalAlignment="Center"
IsEnabled="{Binding ShowPrompt}"
ToolTipService.ShowOnDisabled="True">
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<!-- Nur anzeigen, wenn die Nachricht mittels Promptbaustein erstellt wurde -->
<Setter Property="Visibility" Value="Collapsed" />
<Setter Property="Content" Value="▼" />
<Style.Triggers>
<DataTrigger Binding="{Binding HasUsedPromptbaustein}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content" Value="▲" />
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="ToolTip" Value="Versteckt" />
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
</Grid>
</Grid> <!-- Ausgeklappter Prompt-Inhalt -->
</Border> <Border
</DataTemplate> Margin="12,0,12,8"
Padding="4"
<DataTemplate x:Key="CheckboxAssistentMessageTemplate"> Background="#22000000"
<StackPanel VerticalAlignment="Center" Orientation="Horizontal"> CornerRadius="6">
<CheckBox <Border.Style>
Margin="4" <Style TargetType="{x:Type Border}">
VerticalAlignment="Center" <Setter Property="Visibility" Value="Collapsed" />
IsChecked="{Binding IsChecked, Mode=TwoWay}" /> <Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=btnTogglePrompt}" Value="True">
<ContentPresenter Content="{Binding}" ContentTemplate="{StaticResource AssistentMessageTemplate}" /> <Setter Property="Visibility" Value="Visible" />
</StackPanel> </DataTrigger>
</DataTemplate> </Style.Triggers>
</Style>
<DataTemplate x:Key="CheckboxUserMessageTemplate"> </Border.Style>
<StackPanel VerticalAlignment="Center" Orientation="Horizontal"> <TextBox
<CheckBox Padding="8"
Margin="4" Style="{StaticResource MessageTextBoxStyle}"
VerticalAlignment="Center" Text="{Binding UsedPromptbausteinContent, Converter={StaticResource NewlineConverter}, Mode=OneWay}" />
IsChecked="{Binding IsChecked}" /> </Border>
</StackPanel>
<ContentPresenter Content="{Binding}" ContentTemplate="{StaticResource UserMessageTemplate}" /> </Grid>
</StackPanel> </Border>
<StackPanel
Grid.Row="1"
Margin="0,4,0,0"
HorizontalAlignment="Right" Orientation="Horizontal">
<Button
Command="{Binding DataContext.CopyPromptCommand, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}"
CommandParameter="{Binding}"
Style="{StaticResource UserMessageSaveButtonStyle}"
ToolTip="Kopieren">
<Path
Width="12"
Height="12"
Data="{StaticResource Phosphor.Copy}"
Fill="Black"
Stretch="Fill" />
</Button>
<Button
Command="{Binding DataContext.SavePromptCommand, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}"
CommandParameter="{Binding}"
Style="{StaticResource UserMessageSaveButtonStyle}"
ToolTip="Speichern">
<Path
Width="12"
Height="12"
Data="{StaticResource Phosphor.FloppyDisk}"
Fill="Black"
Stretch="Fill" />
</Button>
</StackPanel>
</Grid>
</DataTemplate> </DataTemplate>
<templateselectors:AiConversationMessageTemplateSelector <templateselectors:AiConversationMessageTemplateSelector
@@ -371,10 +553,4 @@ FontWeight="Bold"/>-->
AssistentMessageTemplate="{StaticResource AssistentMessageTemplate}" AssistentMessageTemplate="{StaticResource AssistentMessageTemplate}"
SystemMessageTemplate="{StaticResource SystemMessageTemplate}" SystemMessageTemplate="{StaticResource SystemMessageTemplate}"
UserMessageTemplate="{StaticResource UserMessageTemplate}" /> UserMessageTemplate="{StaticResource UserMessageTemplate}" />
<templateselectors:AiConversationMessageTemplateSelector
x:Key="AiConversationCloneMessageTemplateSelector"
AssistentMessageTemplate="{StaticResource CheckboxAssistentMessageTemplate}"
SystemMessageTemplate="{StaticResource SystemMessageTemplate}"
UserMessageTemplate="{StaticResource UserMessageTemplate}" />
</ResourceDictionary> </ResourceDictionary>

View File

@@ -22,6 +22,18 @@
<ResourceDictionary Source="Designs\AI\Icon_Refresh_Schw+Orange.xaml" /> <ResourceDictionary Source="Designs\AI\Icon_Refresh_Schw+Orange.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Refresh_Weiss.xaml" /> <ResourceDictionary Source="Designs\AI\Icon_Refresh_Weiss.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Refresh_Weiss+Orange.xaml" /> <ResourceDictionary Source="Designs\AI\Icon_Refresh_Weiss+Orange.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Chat_Schw_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Chat_Schw+Orange_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Chat_Weiss_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Chat_Weiss+Orange_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Funktion_Schw_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Funktion_Schw+Gruen_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Funktion_Weiss_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Funktion_Weiss+Gruen_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Refresh_Schw_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Refresh_Schw+Orange_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Refresh_Weiss_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Refresh_Weiss+Orange_2026.xaml" />
<ResourceDictionary Source="Designs\GeometryCollection.xaml" /> <ResourceDictionary Source="Designs\GeometryCollection.xaml" />

View File

@@ -17,6 +17,7 @@
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Colors\Colors.xaml" /> <ResourceDictionary Source="Colors\Colors.xaml" />
<ResourceDictionary Source="Designs\GeometryCollection.xaml" />
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
<conv:CustomerDCPrintURLConverter x:Key="CustomerDCPrintURLConverter" /> <conv:CustomerDCPrintURLConverter x:Key="CustomerDCPrintURLConverter" />

View File

@@ -3,7 +3,6 @@ using BeWo.ServiceProxy;
using BeWo.View; using BeWo.View;
using BeWo.ViewModel; using BeWo.ViewModel;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using System; using System;
using System.IO; using System.IO;

View File

@@ -34,8 +34,10 @@
Background="Transparent" Background="Transparent"
Command="{Binding OpenConversationPopupCommand}" Command="{Binding OpenConversationPopupCommand}"
Content="{StaticResource AiDesignsIconKIChatWeissOrange}" Content="{StaticResource AiDesignsIconKIChatWeissOrange}"
ToolTip="KI Chat öffnen"
ToolTipService.ShowOnDisabled="True"> ToolTipService.ShowOnDisabled="True">
<Button.ToolTip>
<TextBlock Text="{Binding TooltipName, StringFormat='KI Chat über {}{0} öffnen'}" />
</Button.ToolTip>
<!--<Button.InputBindings> <!--<Button.InputBindings>
<MouseBinding Command="{Binding OpenConversationPopupCommand}" Gesture="LeftClick" /> <MouseBinding Command="{Binding OpenConversationPopupCommand}" Gesture="LeftClick" />
</Button.InputBindings>--> </Button.InputBindings>-->
@@ -48,8 +50,10 @@
Command="{Binding OpenAllPromptsPopupCommand}" Command="{Binding OpenAllPromptsPopupCommand}"
Content="{StaticResource AiDesignsIconKIFunktionWeissGruen}" Content="{StaticResource AiDesignsIconKIFunktionWeissGruen}"
MouseRightButtonUp="btnOpenAi5_MouseRightButtonUp" MouseRightButtonUp="btnOpenAi5_MouseRightButtonUp"
ToolTip="KI Chat mit Prompt-Baustein starten"
ToolTipService.ShowOnDisabled="True"> ToolTipService.ShowOnDisabled="True">
<Button.ToolTip>
<TextBlock Text="{Binding TooltipName, StringFormat='KI Chat über {}{0} per Prompt-Aktion starten'}" />
</Button.ToolTip>
<!--<Button.InputBindings> <!--<Button.InputBindings>
<MouseBinding Command="{Binding OpenAllPromptsPopupCommand}" Gesture="LeftClick" /> <MouseBinding Command="{Binding OpenAllPromptsPopupCommand}" Gesture="LeftClick" />
</Button.InputBindings>--> </Button.InputBindings>-->
@@ -96,6 +100,14 @@
StaysOpen="False"> StaysOpen="False">
<Border x:Name="border_promptbaustein_al" BorderThickness="1" /> <Border x:Name="border_promptbaustein_al" BorderThickness="1" />
</Popup>--> </Popup>-->
<Border
x:Name="borderLoadingOverlay"
Grid.Column="0"
Grid.ColumnSpan="4"
Background="Transparent"
ToolTip="Lade"
ToolTipService.ShowOnDisabled="True"
Visibility="{Binding IsLoading, Converter={StaticResource BoolVisibilityConverter}}" />
<Popup <Popup
x:Name="popup_promptbaustein_favoriten" x:Name="popup_promptbaustein_favoriten"
Width="400" Width="400"

View File

@@ -91,15 +91,18 @@
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Rectangle <Path
Grid.RowSpan="2" Data="{StaticResource Phosphor.PuzzlePiece}"
Width="24" Margin="2"
Height="24" Grid.RowSpan="2"
Fill="White" /> Width="24"
Height="24"
Fill="Black"
Stretch="Fill"/>
<StackPanel Grid.Column="2" Orientation="Horizontal"> <StackPanel Grid.Column="2" Orientation="Horizontal">
<TextBox <TextBox
Height="21" Height="21"
Margin="2,0,0,0" Margin="0,0,0,0"
Padding="0" Padding="0"
VerticalAlignment="Center" VerticalAlignment="Center"
Background="Transparent" Background="Transparent"
@@ -251,11 +254,14 @@
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Rectangle <Path
Grid.RowSpan="2" Data="{StaticResource Phosphor.Stack}"
Width="24" Margin="2"
Height="24" Grid.RowSpan="2"
Fill="White" /> Width="24"
Height="24"
Fill="Black"
Stretch="Fill"/>
<StackPanel Grid.Column="2" Orientation="Horizontal"> <StackPanel Grid.Column="2" Orientation="Horizontal">
<TextBox <TextBox
Height="21" Height="21"

View File

@@ -10,7 +10,6 @@ using System.Windows.Input;
using BeWo.Annotations; using BeWo.Annotations;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.Extensions; using BS.Shared.Extensions;
namespace BeWo.View.Controls namespace BeWo.View.Controls

View File

@@ -5,7 +5,6 @@ using System.Windows.Controls;
using System.Windows.Input; using System.Windows.Input;
using BeWo.Validation; using BeWo.Validation;
using BeWo.ViewModel; using BeWo.ViewModel;
using BS.Shared.Core;
namespace BeWo.View.Controls namespace BeWo.View.Controls
{ {

View File

@@ -26,6 +26,8 @@
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
d:DataContext="{d:DesignInstance Type=vmv:AiConversationChatViewModel, d:DataContext="{d:DesignInstance Type=vmv:AiConversationChatViewModel,
IsDesignTimeCreatable=True}" IsDesignTimeCreatable=True}"
d:Height="600"
d:Width="600"
Focusable="True" Focusable="True"
Loaded="BeWoView_Loaded" Loaded="BeWoView_Loaded"
mc:Ignorable="d"> mc:Ignorable="d">
@@ -59,7 +61,27 @@
MouseDown="ConversationRenameTextBlock_MouseDown" MouseDown="ConversationRenameTextBlock_MouseDown"
Text="{Binding Displayname}" Text="{Binding Displayname}"
TextTrimming="CharacterEllipsis" TextTrimming="CharacterEllipsis"
Visibility="{Binding IsEditing, Converter={StaticResource BoolVisibilityConverter}, ConverterParameter=false}" /> Visibility="{Binding IsEditing, Converter={StaticResource BoolVisibilityConverter}, ConverterParameter=false}">
<TextBlock.ToolTip>
<StackPanel>
<TextBlock
FontSize="11"
Foreground="{DynamicResource TextForegroundSecondary}"
Style="{StaticResource TextBlockStyle}"
Text="{Binding Created, StringFormat=Erstellt: {0:dd.MM.yy HH:mm}}" />
<TextBlock
FontSize="11"
Foreground="{DynamicResource TextForegroundSecondary}"
Style="{StaticResource TextBlockStyle}"
Text="{Binding Updated, StringFormat=Aktualisiert: {0:dd.MM.yy HH:mm}}" />
<TextBlock
FontSize="11"
Foreground="{DynamicResource TextForegroundSecondary}"
Style="{StaticResource TextBlockStyle}"
Text="{Binding Context_Type, StringFormat=Format: {0}}" />
</StackPanel>
</TextBlock.ToolTip>
</TextBlock>
<TextBox <TextBox
Margin="0" Margin="0"
Padding="0" Padding="0"
@@ -73,24 +95,8 @@
LostFocus="ConversationRenameTextBox_LostFocus" LostFocus="ConversationRenameTextBox_LostFocus"
Text="{Binding Displayname, UpdateSourceTrigger=PropertyChanged}" Text="{Binding Displayname, UpdateSourceTrigger=PropertyChanged}"
Visibility="{Binding IsEditing, Converter={StaticResource BoolVisibilityConverter}}" /> Visibility="{Binding IsEditing, Converter={StaticResource BoolVisibilityConverter}}" />
<TextBlock
Grid.Row="1"
FontSize="11"
Foreground="{DynamicResource TextForegroundSecondary}"
Style="{StaticResource TextBlockStyle}"
Text="{Binding Created, StringFormat=Erstellt: {0:dd.MM.yy HH:mm}}" />
<TextBlock
Grid.Row="2"
FontSize="11"
Foreground="{DynamicResource TextForegroundSecondary}"
Style="{StaticResource TextBlockStyle}"
Text="{Binding Updated, StringFormat=Aktualisiert: {0:dd.MM.yy HH:mm}}" />
<TextBlock
Grid.Row="3"
FontSize="11"
Foreground="{DynamicResource TextForegroundSecondary}"
Style="{StaticResource TextBlockStyle}"
Text="{Binding Context_Type, StringFormat=Format: {0}}" />
<!--<TextBlock <!--<TextBlock
Grid.Row="2" Grid.Row="2"
FontSize="10" FontSize="10"
@@ -161,7 +167,7 @@
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid Grid.Row="1"> <Grid Grid.Row="1">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="200" /> <ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" MinWidth="200" /> <ColumnDefinition Width="*" MinWidth="200" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Grid.RowDefinitions> <Grid.RowDefinitions>
@@ -179,8 +185,34 @@
</dxwui:HamburgerMenu>--> </dxwui:HamburgerMenu>-->
<Grid> <Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ToggleButton
x:Name="btnToggleConversations"
Width="24"
Height="24"
Margin="4,4,0,0"
Padding="0"
HorizontalAlignment="Right"
IsChecked="False"
ToolTip="Konversationen ein-/ausblenden">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Setter Property="Content" Value="◀" />
<Style.Triggers>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Content" Value="▶" />
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
<ListView <ListView
x:Name="listview_conversations" x:Name="listview_conversations"
Grid.Row="1"
Width="200"
Padding="4" Padding="4"
Background="Transparent" Background="Transparent"
BorderThickness="0" BorderThickness="0"
@@ -189,7 +221,8 @@
ScrollViewer.CanContentScroll="False" ScrollViewer.CanContentScroll="False"
ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
SelectedItem="{Binding ListVM.SelectedVM, Mode=TwoWay}" SelectedItem="{Binding ListVM.SelectedVM, Mode=TwoWay}"
SelectionChanged="listview_conversations_SelectionChanged"> SelectionChanged="listview_conversations_SelectionChanged"
Visibility="{Binding IsChecked, ElementName=btnToggleConversations, Converter={StaticResource BoolVisibilityConverter}}">
<ListView.ItemContainerStyle> <ListView.ItemContainerStyle>
<Style TargetType="ListViewItem"> <Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" /> <Setter Property="HorizontalContentAlignment" Value="Stretch" />
@@ -280,6 +313,7 @@
VerticalAlignment="Stretch" VerticalAlignment="Stretch"
Background="Transparent" Background="Transparent"
BorderThickness="0" BorderThickness="0"
Hyperlink.RequestNavigate="Hyperlink_RequestNavigate"
ItemTemplateSelector="{StaticResource AiConversationMessageTemplateSelector}" ItemTemplateSelector="{StaticResource AiConversationMessageTemplateSelector}"
ItemsSource="{Binding ListVM.SelectedVM.Messages.VMList, UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding ListVM.SelectedVM.Messages.VMList, UpdateSourceTrigger=PropertyChanged}"
ScrollViewer.CanContentScroll="False" ScrollViewer.CanContentScroll="False"
@@ -455,11 +489,6 @@
Margin="4,0,0,0" Margin="4,0,0,0"
Command="{Binding RenameCommand}" Command="{Binding RenameCommand}"
Content="Umbennen" /> Content="Umbennen" />
<Button
x:Name="btnClone"
Margin="4,0,0,0"
Command="{Binding OpenCloneCommand}"
Content="Klonen" />
<Button <Button
x:Name="btnDelete" x:Name="btnDelete"
Margin="4,0,0,0" Margin="4,0,0,0"
@@ -542,64 +571,6 @@
ItemsSource="{Binding Models}" ItemsSource="{Binding Models}"
SelectedItem="{Binding Config.SelectedModel, Mode=TwoWay}" /> SelectedItem="{Binding Config.SelectedModel, Mode=TwoWay}" />
</Grid>--> </Grid>-->
</Popup>
<Popup
x:Name="popup_conversation_clone"
IsOpen="{Binding IsCloneOpen}"
Loaded="popup_conversation_clone_Loaded"
Placement="Center"
StaysOpen="False">
<Border
Width="400"
Height="600"
Padding="0"
Background="{DynamicResource NavigationContentBrush}"
BorderThickness="1"
CornerRadius="5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<ListView
x:Name="listbox_messages_clone"
Padding="3"
Background="Transparent"
BorderThickness="0"
ItemTemplateSelector="{StaticResource AiConversationCloneMessageTemplateSelector}"
ItemsSource="{Binding ListVM.SelectedVM.Messages.VMList, UpdateSourceTrigger=PropertyChanged}"
ScrollViewer.CanContentScroll="False"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="Padding" Value="4" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<ContentPresenter Margin="{TemplateBinding Padding}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
<Button
Grid.Row="1"
Margin="8,4,8,8"
Command="{Binding CloneCommand}">
Klonen
</Button>
</Grid>
</Border>
<!-- AiConversationCloneMessageTemplateSelector -->
</Popup> </Popup>
<Popup <Popup
x:Name="popup_message_save" x:Name="popup_message_save"

View File

@@ -86,11 +86,6 @@ namespace BeWo.View.Detail.AI
Dispatcher.BeginInvoke(DispatcherPriority.Render, (Action)(() => BeWoWpfUtils.ScrollToBottom(listview_messages))); Dispatcher.BeginInvoke(DispatcherPriority.Render, (Action)(() => BeWoWpfUtils.ScrollToBottom(listview_messages)));
} }
private void popup_conversation_clone_Loaded(object sender, RoutedEventArgs e)
{
Dispatcher.BeginInvoke(DispatcherPriority.Render, (Action)(() => BeWoWpfUtils.ScrollToBottom(listbox_messages_clone)));
}
private void Grid_PreviewKeyDown(object sender, KeyEventArgs e) private void Grid_PreviewKeyDown(object sender, KeyEventArgs e)
{ {
if (e.Key == Key.Enter) if (e.Key == Key.Enter)

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Windows; using System.Windows;
using BS.Shared.Core;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BeWo.Core; using BeWo.Core;

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared; using BS.Shared;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.Services; using BS.Shared.Services;
using BS.Shared.Translation; using BS.Shared.Translation;
using DevExpress.Xpf.RichEdit; using DevExpress.Xpf.RichEdit;

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Windows; using System.Windows;
using BS.Shared.Core;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BeWo.Core; using BeWo.Core;

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared; using BS.Shared;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Services; using BS.Shared.Services;
using BS.Shared.Translation; using BS.Shared.Translation;

View File

@@ -1,6 +1,5 @@
using BeWo.Core; using BeWo.Core;
using BeWo.ViewModel.ListViewModel; using BeWo.ViewModel.ListViewModel;
using BS.Shared.Core;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;

View File

@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using BS.Shared.Core;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BeWo.Core; using BeWo.Core;

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Windows; using System.Windows;
using BS.Shared.Core;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BeWo.Core; using BeWo.Core;

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared; using BS.Shared;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.Services; using BS.Shared.Services;
using BS.Shared.Translation; using BS.Shared.Translation;
using DevExpress.Xpf.RichEdit; using DevExpress.Xpf.RichEdit;

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Windows; using System.Windows;
using BS.Shared.Core;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BeWo.Core; using BeWo.Core;

View File

@@ -17,7 +17,6 @@ using BeWo.ViewModel;
using BeWo.ViewModel.ListViewModel; using BeWo.ViewModel.ListViewModel;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact; using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions; using BS.Shared.Extensions;

View File

@@ -14,7 +14,6 @@ using BeWo.ServiceProxy;
using BeWo.ViewModel; using BeWo.ViewModel;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BS.Shared.Translation; using BS.Shared.Translation;

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared; using BS.Shared;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.Services; using BS.Shared.Services;
using BS.Shared.Translation; using BS.Shared.Translation;
using DevExpress.Xpf.RichEdit; using DevExpress.Xpf.RichEdit;

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared; using BS.Shared;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Services; using BS.Shared.Services;
using BS.Shared.Translation; using BS.Shared.Translation;

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared; using BS.Shared;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Services; using BS.Shared.Services;
using BS.Shared.Translation; using BS.Shared.Translation;

View File

@@ -5,7 +5,6 @@ using BeWo.ServiceProxy;
using BeWo.Validation; using BeWo.Validation;
using BeWo.ViewModel; using BeWo.ViewModel;
using BeWo.ViewModel.ListViewModel; using BeWo.ViewModel.ListViewModel;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
namespace BeWo.View.Detail.Zeiterfassung namespace BeWo.View.Detail.Zeiterfassung

View File

@@ -1738,7 +1738,7 @@
<ai1:VoiceToTextButtonControl <ai1:VoiceToTextButtonControl
Margin="6,0,0,0" Margin="12,0,0,0"
TargetTextBox="{Binding ElementName=dokumentationsTextBox}" TargetTextBox="{Binding ElementName=dokumentationsTextBox}"
ToolTip="Spracheingabe und Transkription starten" /> ToolTip="Spracheingabe und Transkription starten" />
</StackPanel> </StackPanel>

View File

@@ -53,6 +53,164 @@
Text="{Binding LogicalFocus}" /> Text="{Binding LogicalFocus}" />
</Grid> </Grid>
</TabItem> </TabItem>
<TabItem Header="Tests">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="20" />
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="20" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<Grid.Resources>
<ResourceDictionary>
<Style TargetType="{x:Type ContentControl}">
<Setter Property="Height" Value="24" />
<Setter Property="Margin" Value="3" />
</Style>
</ResourceDictionary>
</Grid.Resources>
<Label Grid.Row="0">AiDesignsIconKIChatSchwarz2026</Label>
<ContentControl
Grid.Row="0"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIChatSchwarz2026}" />
<Button
Grid.Row="0"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIChatSchwarz2026}" />
<Label Grid.Row="1">AiDesignsIconKIChatSchwarzOrange2026</Label>
<ContentControl
Grid.Row="1"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIChatSchwarzOrange2026}" />
<Button
Grid.Row="1"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIChatSchwarzOrange2026}" />
<Label Grid.Row="2">AiDesignsIconKIChatWeiss2026</Label>
<Rectangle Fill="DarkGray" Grid.Row="2" Grid.Column="2"/>
<ContentControl
Grid.Row="2"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIChatWeiss2026}" />
<Button
Grid.Row="2"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIChatWeiss2026}" />
<Label Grid.Row="3">AiDesignsIconKIChatWeissOrange2026</Label>
<Rectangle Fill="DarkGray" Grid.Row="3" Grid.Column="2"/>
<ContentControl
Grid.Row="3"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIChatWeissOrange2026}" />
<Button
Grid.Row="3"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIChatWeissOrange2026}" />
<Label Grid.Row="4">AiDesignsIconKIFunktionSchwarz2026</Label>
<ContentControl
Grid.Row="4"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIFunktionSchwarz2026}" />
<Button
Grid.Row="4"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIFunktionSchwarz2026}" />
<Label Grid.Row="5">AiDesignsIconKIFunktionSchwarzGruen2026</Label>
<ContentControl
Grid.Row="5"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIFunktionSchwarzGruen2026}" />
<Button
Grid.Row="5"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIFunktionSchwarzGruen2026}" />
<Label Grid.Row="6">AiDesignsIconKIFunktionWeiss2026</Label>
<Rectangle Fill="DarkGray" Grid.Row="6" Grid.Column="2"/>
<ContentControl
Grid.Row="6"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIFunktionWeiss2026}" />
<Button
Grid.Row="6"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIFunktionWeiss2026}" />
<Label Grid.Row="7">AiDesignsIconKIFunktionWeissGruen2026</Label>
<Rectangle Fill="DarkGray" Grid.Row="7" Grid.Column="2"/>
<ContentControl
Grid.Row="7"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIFunktionWeissGruen2026}" />
<Button
Grid.Row="7"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIFunktionWeissGruen2026}" />
<Label Grid.Row="8">AiDesignsIconKIRefreshSchwarz2026</Label>
<ContentControl
Grid.Row="8"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIRefreshSchwarz2026}" />
<Button
Grid.Row="8"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIRefreshSchwarz2026}" />
<Label Grid.Row="9">AiDesignsIconKIRefreshSchwarzOrange2026</Label>
<ContentControl
Grid.Row="9"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIRefreshSchwarzOrange2026}" />
<Button
Grid.Row="9"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIRefreshSchwarzOrange2026}" />
<Label Grid.Row="10">AiDesignsIconKIRefreshWeiss2026</Label>
<Rectangle Fill="DarkGray" Grid.Row="10" Grid.Column="2"/>
<ContentControl
Grid.Row="10"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIRefreshWeiss2026}" />
<Button
Grid.Row="10"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIRefreshWeiss2026}" />
<Label Grid.Row="11">AiDesignsIconKIRefreshWeissOrange2026</Label>
<Rectangle Fill="DarkGray" Grid.Row="11" Grid.Column="2"/>
<ContentControl
Grid.Row="11"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIRefreshWeissOrange2026}" />
<Button
Grid.Row="11"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIRefreshWeissOrange2026}" />
</Grid>
</TabItem>
<TabItem Header="Logs" /> <TabItem Header="Logs" />
<TabItem Header="Configs" /> <TabItem Header="Configs" />
</TabControl> </TabControl>

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared; using BS.Shared;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.Services; using BS.Shared.Services;
using BS.Shared.Translation; using BS.Shared.Translation;
using DevExpress.Xpf.RichEdit; using DevExpress.Xpf.RichEdit;

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared; using BS.Shared;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Services; using BS.Shared.Services;
using BS.Shared.Translation; using BS.Shared.Translation;

View File

@@ -16,7 +16,6 @@ using BeWo.ViewModel;
using BeWo.ViewModel.ListViewModel; using BeWo.ViewModel.ListViewModel;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BS.Shared.Translation; using BS.Shared.Translation;

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared; using BS.Shared;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Services; using BS.Shared.Services;
using BS.Shared.Translation; using BS.Shared.Translation;

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared; using BS.Shared;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Services; using BS.Shared.Services;
using BS.Shared.Translation; using BS.Shared.Translation;

View File

@@ -8,7 +8,6 @@ using System;
using System.Linq; using System.Linq;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BeWo.View.Navigation.Sorter; using BeWo.View.Navigation.Sorter;
using BS.Shared.DataContracts.Compact; using BS.Shared.DataContracts.Compact;

View File

@@ -8,7 +8,6 @@ namespace BeWo.ViewModel
{ {
public class AiConversationMessageVM : AbstractDCMapperVM<AiConversationMessageDC> public class AiConversationMessageVM : AbstractDCMapperVM<AiConversationMessageDC>
{ {
private bool _IsChecked;
private string _Message; private string _Message;
public AiConversationMessageVM(AiConversationMessageDC dc) : base(dc, dc.Oid is null) public AiConversationMessageVM(AiConversationMessageDC dc) : base(dc, dc.Oid is null)
@@ -16,22 +15,6 @@ namespace BeWo.ViewModel
} }
public event EventHandler IsCheckedChanged;
public bool IsChecked
{
get { return _IsChecked; }
set
{
if (!AreDifferent(IsChecked, value))
return;
_IsChecked = value;
FirePropertyChanged(nameof(IsChecked));
IsCheckedChanged?.Invoke(this, EventArgs.Empty);
}
}
public string Message public string Message
{ {
get { return _Message; } get { return _Message; }
@@ -51,6 +34,31 @@ namespace BeWo.ViewModel
public int Duration => DataContract.Duration ?? 0; public int Duration => DataContract.Duration ?? 0;
public string DurationSec => ((double)Duration / 1000).ToString("0.#"); public string DurationSec => ((double)Duration / 1000).ToString("0.#");
public DateTime Created => DataContract.Created; public DateTime Created => DataContract.Created;
public bool ShowMessage => DataContract.ShowMessage;
public string UsedPromptbausteinTitle => DataContract.UsedPromptbausteinTitle;
/// <summary>True, wenn die Nachricht mittels Promptbaustein erstellt wurde (Titel gecacht).</summary>
public bool HasUsedPromptbaustein => !string.IsNullOrWhiteSpace(UsedPromptbausteinTitle);
/// <summary>Steuert, ob der Prompt ausklappbar ist. False => Button disabled + Tooltip "Versteckt".</summary>
public bool ShowPrompt => DataContract.ShowPrompt;
/// <summary>Prompt-Text des verwendeten Promptbausteins (nur befüllt, wenn ShowPrompt true).</summary>
public string UsedPromptbausteinContent => DataContract.UsedPromptbausteinContent;
/// <summary>Hilfe-Link (OwnsoftRefLink) des verwendeten Ownsoft-Promptbausteins, sonst null.</summary>
public string OwnsoftRefLink => DataContract.OwnsoftRefLink;
/// <summary>Steuert, ob der (i)-Hilfe-Link neben der Nachricht angezeigt wird (vgl. AiPromptbausteinPromptVM.IsInfoVisible).</summary>
public bool IsInfoVisible => !string.IsNullOrWhiteSpace(OwnsoftRefLink);
/// <summary>Schrittnummer innerhalb der Routine (0-basiert), sonst null.</summary>
public int? StepCount => DataContract.StepCount;
/// <summary>Platzhalter für ausgeblendete Nachrichten: Promptbaustein-Titel, sonst Standardtext.</summary>
public string HiddenMessageText => string.IsNullOrWhiteSpace(UsedPromptbausteinTitle)
? "Nachricht ausgeblendet"
: UsedPromptbausteinTitle;
protected override void InitByDataContract(AiConversationMessageDC pDataContract) protected override void InitByDataContract(AiConversationMessageDC pDataContract)
{ {
@@ -63,11 +71,5 @@ namespace BeWo.ViewModel
return pDataContract; return pDataContract;
} }
public void SetIsChecked(bool value)
{
_IsChecked = value;
FirePropertyChanged(nameof(IsChecked));
}
} }
} }

View File

@@ -7,7 +7,6 @@ using BeWo.Validation;
using BeWo.ViewModel.ListViewModel; using BeWo.ViewModel.ListViewModel;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Extensions; using BS.Shared.Extensions;

View File

@@ -7,7 +7,6 @@ using BS.Shared.DataContracts;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using System.Collections.Generic; using System.Collections.Generic;
using BS.Shared.Core;
using System.Windows; using System.Windows;
namespace BeWo.ViewModel namespace BeWo.ViewModel

View File

@@ -10,6 +10,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Windows; using System.Windows;
using System.Windows.Input; using System.Windows.Input;
using System.Windows.Media;
namespace BeWo.ViewModel.Controls.AI namespace BeWo.ViewModel.Controls.AI
{ {
@@ -29,6 +30,7 @@ namespace BeWo.ViewModel.Controls.AI
private AiChatButtonState buttonState; private AiChatButtonState buttonState;
public AiActionType ActionType { get; protected set; } public AiActionType ActionType { get; protected set; }
public string TooltipName { get; set; }
public bool IsFavoritenOpen { get; set; } public bool IsFavoritenOpen { get; set; }
public List<AiMenuItemTemplate> AssistentCommands { get; protected set; } public List<AiMenuItemTemplate> AssistentCommands { get; protected set; }
@@ -57,6 +59,7 @@ namespace BeWo.ViewModel.Controls.AI
return; return;
FirePropertyChanged(nameof(IsContextSizeTooBig)); FirePropertyChanged(nameof(IsContextSizeTooBig));
FirePropertyChanged(nameof(IsLoading));
FirePropertyChanged(nameof(CanSendNewMessage)); FirePropertyChanged(nameof(CanSendNewMessage));
FirePropertyChanged(nameof(CanOpenConversation)); FirePropertyChanged(nameof(CanOpenConversation));
@@ -73,6 +76,7 @@ namespace BeWo.ViewModel.Controls.AI
public DelegateCommand OpenFavoritePromptsPopupCommand { get; protected set; } public DelegateCommand OpenFavoritePromptsPopupCommand { get; protected set; }
public bool IsContextSizeTooBig => ButtonState == AiChatButtonState.Warning; public bool IsContextSizeTooBig => ButtonState == AiChatButtonState.Warning;
public bool IsLoading => ButtonState == AiChatButtonState.Loading;
public virtual bool CanSendNewMessage => ButtonState == AiChatButtonState.Normal; public virtual bool CanSendNewMessage => ButtonState == AiChatButtonState.Normal;
public bool CanOpenConversation => ButtonState == AiChatButtonState.Normal || ButtonState == AiChatButtonState.Warning; public bool CanOpenConversation => ButtonState == AiChatButtonState.Normal || ButtonState == AiChatButtonState.Warning;
@@ -91,6 +95,26 @@ namespace BeWo.ViewModel.Controls.AI
OpenFavoritePromptsPopupCommand = new DelegateCommand(OpenFavoritePromptsPopup, () => CanSendNewMessage); OpenFavoritePromptsPopupCommand = new DelegateCommand(OpenFavoritePromptsPopup, () => CanSendNewMessage);
ButtonState = AiChatButtonState.Loading; ButtonState = AiChatButtonState.Loading;
LoadModuleName();
}
public void LoadModuleName()
{
switch (ActionType)
{
case AiActionType.ServiceRecord:
TooltipName = "KI Zeiterfassung";
break;
case AiActionType.ServiceRecordConversation:
TooltipName = "Zeiterfassung";
break;
case AiActionType.ServiceRecordDocumentation:
TooltipName = "Dokumentationstext";
break;
default:
break;
}
} }
public void CheckContextSize() public void CheckContextSize()
@@ -119,7 +143,8 @@ namespace BeWo.ViewModel.Controls.AI
else else
ButtonState = AiChatButtonState.Warning; ButtonState = AiChatButtonState.Warning;
}, },
(exp) => ButtonState = AiChatButtonState.Disabled); (exp) => ButtonState = AiChatButtonState.Disabled,
false);
} }
} }
@@ -200,8 +225,13 @@ namespace BeWo.ViewModel.Controls.AI
public class AiMenuItemTemplate public class AiMenuItemTemplate
{ {
public string Icon { get; set; } public Geometry Icon { get; set; }
public string Name { get; set; } public string Name { get; set; }
public DelegateCommand<AiConversationMessageVM> Command { get; set; } public DelegateCommand<AiConversationMessageVM> Command { get; set; }
public AiMenuItemTemplate()
{
}
} }
} }

View File

@@ -7,6 +7,8 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
namespace BeWo.ViewModel.Controls.AI namespace BeWo.ViewModel.Controls.AI
{ {
@@ -54,13 +56,13 @@ namespace BeWo.ViewModel.Controls.AI
new AiMenuItemTemplate() new AiMenuItemTemplate()
{ {
Command = new DelegateCommand<AiConversationMessageVM>(x => AddValue(x.Message)), Command = new DelegateCommand<AiConversationMessageVM>(x => AddValue(x.Message)),
Icon = null, Icon = Application.Current.FindResource("Phosphor.RowsPlusTop") as Geometry,
Name = "Anfügen" Name = "Anfügen"
}, },
new AiMenuItemTemplate() new AiMenuItemTemplate()
{ {
Command = new DelegateCommand<AiConversationMessageVM>(x => ReplaceValue(x.Message)), Command = new DelegateCommand<AiConversationMessageVM>(x => ReplaceValue(x.Message)),
Icon = null, Icon = Application.Current.FindResource("Phosphor.Swap") as Geometry,
Name = "Ersetzen" Name = "Ersetzen"
}, },
}; };

View File

@@ -1,5 +1,4 @@
using BeWo.Validation; using BeWo.Validation;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact; using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions; using BS.Shared.Extensions;

View File

@@ -1,5 +1,4 @@
using BeWo.ViewModel.Wohnhilfe; using BeWo.ViewModel.Wohnhilfe;
using BS.Shared.Core;
using BS.Shared.DataContracts.Wohnhilfe; using BS.Shared.DataContracts.Wohnhilfe;
using DevExpress.Mvvm; using DevExpress.Mvvm;
using System; using System;

View File

@@ -1,5 +1,4 @@
using BeWo.Validation; using BeWo.Validation;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact; using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions; using BS.Shared.Extensions;

View File

@@ -8,7 +8,6 @@ using BeWo.Core;
using BeWo.ServiceProxy; using BeWo.ServiceProxy;
using BeWo.Validation; using BeWo.Validation;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.DataContracts.GkvAbrechnung; using BS.Shared.DataContracts.GkvAbrechnung;
using BS.Shared.Extensions; using BS.Shared.Extensions;

View File

@@ -5,7 +5,6 @@ using BeWo.Validation;
using BeWo.ViewModel.ListViewModel; using BeWo.ViewModel.ListViewModel;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Extensions; using BS.Shared.Extensions;

View File

@@ -8,7 +8,6 @@ using BeWo.Core;
using BeWo.ServiceProxy; using BeWo.ServiceProxy;
using BeWo.Validation; using BeWo.Validation;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts.GkvAbrechnung; using BS.Shared.DataContracts.GkvAbrechnung;
using BS.Shared.DataContracts.Light; using BS.Shared.DataContracts.Light;
using BS.Shared.Extensions; using BS.Shared.Extensions;

View File

@@ -2,7 +2,6 @@
using BeWo.Core.Commands; using BeWo.Core.Commands;
using BeWo.ServiceProxy; using BeWo.ServiceProxy;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts.Feature.AI; using BS.Shared.DataContracts.Feature.AI;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using ChatController.Utilities.Extensions; using ChatController.Utilities.Extensions;
@@ -59,7 +58,8 @@ namespace BeWo.ViewModel.ListViewModel
{ {
Created = DateTime.Now, Created = DateTime.Now,
Message = "N. Dies ist eine Design Frage: Du sollst ganz viele Sachen machen. Dabei sollst du auf ganz viele Sachen achten: Zum Beispiel:\r\nSache 1\r\nSchritt 2", Message = "N. Dies ist eine Design Frage: Du sollst ganz viele Sachen machen. Dabei sollst du auf ganz viele Sachen achten: Zum Beispiel:\r\nSache 1\r\nSchritt 2",
Role = BS.Shared.AiConversationMessageRole.User Role = BS.Shared.AiConversationMessageRole.User,
ShowMessage = true
}; };
var message_dc3 = new AiConversationMessageDC() var message_dc3 = new AiConversationMessageDC()

View File

@@ -20,67 +20,7 @@ namespace BeWo.ViewModel.ListViewModel
{ {
public AiConversationMessageListVM(List<AiConversationMessageDC> pDCs) : base(pDCs) public AiConversationMessageListVM(List<AiConversationMessageDC> pDCs) : base(pDCs)
{ {
foreach(var vm in VMList)
{
vm.IsCheckedChanged += CloneIsCheckedChanged;
}
//VMList.ListChanged += (s, e) =>
// {
// if (e.ListChangedType == ListChangedType.ItemChanged)
// {
// var changedItem = VMList[e.NewIndex];
// Item_PropertyChanged(changedItem, new PropertyChangedEventArgs(nameof(AiConversationMessageVM.IsChecked)));
// }
// };
} }
public AiConversationMessageListVM() : this(null) { } public AiConversationMessageListVM() : this(null) { }
private void CloneIsCheckedChanged(object sender, EventArgs e)
{
if(sender is AiConversationMessageVM vm)
{
int index = VMList.IndexOf(vm);
if (vm.IsChecked)
{
for (int i = 0; i < index; i++)
{
VMList[i].SetIsChecked(true);
}
}
else
{
for (int i = index - 1; i < VMList.Count; i++)
{
VMList[i].SetIsChecked(false);
}
}
}
}
//private void Item_PropertyChanged(object sender, PropertyChangedEventArgs e)
//{
// if (e.PropertyName == nameof(AiConversationMessageVM.IsChecked)
// && sender is AiConversationMessageVM vm
// && vm.Role == BS.Shared.AiConversationMessageRole.Assistent)
// {
// var changedItem = (AiConversationMessageVM)sender;
// int index = VMList.IndexOf(changedItem);
// if (changedItem.IsChecked)
// {
// for (int i = 0; i <= index; i++)
// if (!VMList[i].IsChecked)
// VMList[i].IsChecked = true;
// }
// else
// {
// for (int i = index - 1; i < VMList.Count; i++)
// if (VMList[i].IsChecked)
// VMList[i].IsChecked = false;
// }
// }
//}
} }
} }

View File

@@ -1,7 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
namespace BeWo.ViewModel.ListViewModel namespace BeWo.ViewModel.ListViewModel

View File

@@ -1,5 +1,4 @@
using BS.Shared.Core; using BS.Shared.DataContracts;
using BS.Shared.DataContracts;
using DevExpress.Mvvm; using DevExpress.Mvvm;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;

View File

@@ -5,7 +5,6 @@ using System.Reflection;
using System.Windows.Media; using System.Windows.Media;
using BeWo.ServiceProxy; using BeWo.ServiceProxy;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact; using BS.Shared.DataContracts.Compact;
using Color = System.Drawing.Color; using Color = System.Drawing.Color;

View File

@@ -1,5 +1,4 @@
using System.Collections.Generic; using System.Collections.Generic;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
namespace BeWo.ViewModel.ListViewModel namespace BeWo.ViewModel.ListViewModel

View File

@@ -1,6 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
namespace BeWo.ViewModel.ListViewModel namespace BeWo.ViewModel.ListViewModel

View File

@@ -1,5 +1,4 @@
using System.Collections.Generic; using System.Collections.Generic;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
namespace BeWo.ViewModel.ListViewModel namespace BeWo.ViewModel.ListViewModel

View File

@@ -1,7 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
namespace BeWo.ViewModel.ListViewModel namespace BeWo.ViewModel.ListViewModel

View File

@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Linq; using System.Linq;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Extensions; using BS.Shared.Extensions;

View File

@@ -4,7 +4,6 @@ using System.ComponentModel;
using System.Linq; using System.Linq;
using System.Windows; using System.Windows;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using DevExpress.Mvvm; using DevExpress.Mvvm;

View File

@@ -3,7 +3,6 @@
using BeWo.Validation; using BeWo.Validation;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
namespace BeWo.ViewModel namespace BeWo.ViewModel

View File

@@ -5,7 +5,6 @@ using BeWo.Validation;
using BeWo.ViewModel.ListViewModel; using BeWo.ViewModel.ListViewModel;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using DevExpress.Xpf.Editors.Helpers; using DevExpress.Xpf.Editors.Helpers;

View File

@@ -11,7 +11,6 @@ using BeWo.ViewModel.ListViewModel;
using BS.Shared; using BS.Shared;
using BS.Shared.Core; using BS.Shared.Core;
using BS.Shared.Core.Rule; using BS.Shared.Core.Rule;
using BS.Shared.Core.Validation;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.DataContracts.GkvAbrechnung; using BS.Shared.DataContracts.GkvAbrechnung;

View File

@@ -5,7 +5,6 @@ using BeWo.Validation;
using BeWo.ViewModel.ListViewModel; using BeWo.ViewModel.ListViewModel;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Extensions; using BS.Shared.Extensions;

View File

@@ -5,7 +5,6 @@ using BeWo.Validation;
using BeWo.ViewModel.ListViewModel; using BeWo.ViewModel.ListViewModel;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Extensions; using BS.Shared.Extensions;

View File

@@ -7,7 +7,6 @@ using BeWo.Validation;
using BeWo.ViewModel.ListViewModel; using BeWo.ViewModel.ListViewModel;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.Extensions; using BS.Shared.Extensions;
namespace BeWo.ViewModel namespace BeWo.ViewModel

View File

@@ -918,6 +918,8 @@ namespace BeWo.ViewModel
vm.ViewContext = view_context; vm.ViewContext = view_context;
vm.CanSendNewMessage = canSendNewMessage; vm.CanSendNewMessage = canSendNewMessage;
vm.ImportAssistentCommandCopy();
if (assistentCommands is object) if (assistentCommands is object)
{ {
foreach (var command in assistentCommands) foreach (var command in assistentCommands)

View File

@@ -19,13 +19,13 @@ using static DevExpress.Utils.Drawing.Helpers.NativeMethods;
using System.Security.Cryptography; using System.Security.Cryptography;
using BeWo.ViewModel.Controls.AI; using BeWo.ViewModel.Controls.AI;
using DevExpress.Charts.Native; using DevExpress.Charts.Native;
using System.Windows.Media;
namespace BeWo.ViewModel.View.AI namespace BeWo.ViewModel.View.AI
{ {
public class AiConversationChatViewModel : DialogViewModel public class AiConversationChatViewModel : DialogViewModel
{ {
private bool _IsSettingsOpen; private bool _IsSettingsOpen;
private bool _IsCloneOpen;
private bool _IsSending; private bool _IsSending;
private string _MessageInput; private string _MessageInput;
@@ -49,8 +49,6 @@ namespace BeWo.ViewModel.View.AI
OpenSettingCommand = new DelegateCommand(OpenSetting, () => BeWoApp.AppSettings?.ModuleAiSettingsEnabled ?? false); OpenSettingCommand = new DelegateCommand(OpenSetting, () => BeWoApp.AppSettings?.ModuleAiSettingsEnabled ?? false);
RenameCommand = new DelegateCommand(Rename, () => ListVM.SelectedVM is object); RenameCommand = new DelegateCommand(Rename, () => ListVM.SelectedVM is object);
OpenCloneCommand = new DelegateCommand(OpenClone, () => ListVM.SelectedVM is object && BeWoAppInfo.IsInAiDeveloperMode);
CloneCommand = new DelegateCommand(Clone);
AskDeleteCommand = new DelegateCommand(AskDelete, () => ListVM.SelectedVM is object); AskDeleteCommand = new DelegateCommand(AskDelete, () => ListVM.SelectedVM is object);
@@ -58,6 +56,8 @@ namespace BeWo.ViewModel.View.AI
AcceptSavePromptCommand = new DelegateCommand(AcceptSavePrompt, () => !string.IsNullOrWhiteSpace(SavePromptVM?.Title)); AcceptSavePromptCommand = new DelegateCommand(AcceptSavePrompt, () => !string.IsNullOrWhiteSpace(SavePromptVM?.Title));
CancelSavePromptCommand = new DelegateCommand(CancelSavePrompt); CancelSavePromptCommand = new DelegateCommand(CancelSavePrompt);
CopyPromptCommand = new DelegateCommand<AiConversationMessageVM>(CopyPrompt);
ListVM = new AiConversationListVM(); ListVM = new AiConversationListVM();
ListVM.SelectedVMChanged += (s, e) => FirePropertyChanged(nameof(IsNewConversationVisible)); ListVM.SelectedVMChanged += (s, e) => FirePropertyChanged(nameof(IsNewConversationVisible));
@@ -76,13 +76,13 @@ namespace BeWo.ViewModel.View.AI
public ICommand OpenSettingCommand { get; set; } public ICommand OpenSettingCommand { get; set; }
public ICommand RenameCommand { get; set; } public ICommand RenameCommand { get; set; }
public ICommand OpenCloneCommand { get; set; }
public ICommand CloneCommand { get; set; }
public ICommand SavePromptCommand { get; set; } public ICommand SavePromptCommand { get; set; }
public ICommand AcceptSavePromptCommand { get; set; } public ICommand AcceptSavePromptCommand { get; set; }
public ICommand CancelSavePromptCommand { get; set; } public ICommand CancelSavePromptCommand { get; set; }
public ICommand CopyPromptCommand { get; set; }
public AiActionType ActionType { get; set; } public AiActionType ActionType { get; set; }
public AiViewContextDC ViewContext { get; set; } public AiViewContextDC ViewContext { get; set; }
@@ -140,15 +140,6 @@ namespace BeWo.ViewModel.View.AI
FirePropertyChanged(nameof(IsSettingsOpen)); FirePropertyChanged(nameof(IsSettingsOpen));
} }
} }
public bool IsCloneOpen
{
get => _IsCloneOpen;
set
{
_IsCloneOpen = value;
FirePropertyChanged(nameof(IsCloneOpen));
}
}
public bool IsSending public bool IsSending
{ {
get => _IsSending; get => _IsSending;
@@ -203,7 +194,8 @@ namespace BeWo.ViewModel.View.AI
new AiConversationMessageDC() new AiConversationMessageDC()
{ {
Message = message, Message = message,
Role = AiConversationMessageRole.User Role = AiConversationMessageRole.User,
ShowMessage = true
} }
}; };
@@ -238,6 +230,7 @@ namespace BeWo.ViewModel.View.AI
msg_dc.Message = MessageInput; msg_dc.Message = MessageInput;
msg_dc.Role = BS.Shared.AiConversationMessageRole.User; msg_dc.Role = BS.Shared.AiConversationMessageRole.User;
msg_dc.Created = DateTime.Now; msg_dc.Created = DateTime.Now;
msg_dc.ShowMessage = true;
var msg_vm = new AiConversationMessageVM(msg_dc); var msg_vm = new AiConversationMessageVM(msg_dc);
@@ -394,42 +387,6 @@ namespace BeWo.ViewModel.View.AI
vm.IsEditing = !vm.IsEditing; vm.IsEditing = !vm.IsEditing;
} }
} }
private void OpenClone()
{
foreach (var message in ListVM.SelectedVM.Messages.VMList)
{
message.SetIsChecked(true);
}
IsCloneOpen = true;
}
private void Clone()
{
var conv = ListVM.SelectedVM;
AiConversationMessageVM last = null;
foreach (var msg in conv.Messages.VMList)
{
if (!msg.IsChecked)
break;
last = msg;
}
var conv_oid = conv.DataContract.Oid.Value;
var msg_oid = last?.DataContract.Oid;
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.CloneAiConversation(conv_oid, msg_oid), dc =>
{
InsertConverstion(dc);
CloseClone();
});
}
private void CloseClone()
{
IsCloneOpen = false;
}
public void AskDelete() public void AskDelete()
{ {
var selected = ListVM.SelectedVM; var selected = ListVM.SelectedVM;
@@ -464,6 +421,7 @@ namespace BeWo.ViewModel.View.AI
dc.Prompt = message.Message; dc.Prompt = message.Message;
dc.CanEdit = true; dc.CanEdit = true;
dc.ActionType = AiActionType.ServiceRecordConversation; dc.ActionType = AiActionType.ServiceRecordConversation;
dc.ShowPrompt = true;
SavePromptVM = new AiPromptbausteinPromptVM(dc); SavePromptVM = new AiPromptbausteinPromptVM(dc);
} }
@@ -476,6 +434,28 @@ namespace BeWo.ViewModel.View.AI
SavePromptVM = null; SavePromptVM = null;
} }
public void CopyPrompt(AiConversationMessageVM message)
{
Clipboard.SetText(message.Message);
}
public void ImportAssistentCommandCopy()
{
var new_command = new DelegateCommand<AiConversationMessageVM>(x =>
{
CopyPromptCommand.Execute(x);
});
var imported_menu_item = new AiMenuItemTemplate()
{
Command = new_command,
Icon = Application.Current.FindResource("Phosphor.Copy") as Geometry,
Name = "Kopieren"
};
AssistentCommands.Add(imported_menu_item);
}
public void ImportAssistentCommand(AiMenuItemTemplate origin) public void ImportAssistentCommand(AiMenuItemTemplate origin)
{ {
var origin_command = origin.Command; var origin_command = origin.Command;
@@ -528,29 +508,48 @@ namespace BeWo.ViewModel.View.AI
conv.Created = DateTime.Now; conv.Created = DateTime.Now;
conv.Updated = DateTime.Now; conv.Updated = DateTime.Now;
conv.ActionType = ActionType; conv.ActionType = ActionType;
conv.ReferencePrompt = prompt.DataContract;
var vm = InsertConverstion(conv); var vm = InsertConverstion(conv);
Action<Exception> error = (e) => var created = false;
Action end_local = () =>
{ {
EndSending(); EndSending();
ListVM.VMList.Remove(vm); ListVM.VMList.Remove(vm);
ServiceFacade.EndManuelWaiting(); ServiceFacade.EndManuelWaiting();
}; };
Action<Exception> error = (e) =>
{
if (created)
{
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.DeleteAiConversation(vm.Oid),
end_local);
}
else
{
end_local();
}
};
ServiceFacade.StartManuelWaiting(); ServiceFacade.StartManuelWaiting();
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.CreateAiConversation(conv, ViewContext), cb => ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.CreateAiConversation(conv, ViewContext), cb =>
{ {
created = true;
vm.UpdateByDataContract(cb); vm.UpdateByDataContract(cb);
var msg = prompt.Prompt; var msg = prompt.Prompt;
var msg_dc = new AiConversationMessageDC(); var msg_dc = new AiConversationMessageDC();
msg_dc.Message = msg; msg_dc.Message = prompt.ShowPrompt ? msg : null;
msg_dc.Role = BS.Shared.AiConversationMessageRole.User; msg_dc.Role = BS.Shared.AiConversationMessageRole.User;
msg_dc.Created = DateTime.Now; msg_dc.Created = DateTime.Now;
msg_dc.ShowMessage = prompt.ShowPrompt;
var msg_vm = new AiConversationMessageVM(msg_dc); var msg_vm = new AiConversationMessageVM(msg_dc);
@@ -589,20 +588,38 @@ namespace BeWo.ViewModel.View.AI
conv.Created = DateTime.Now; conv.Created = DateTime.Now;
conv.Updated = DateTime.Now; conv.Updated = DateTime.Now;
conv.ActionType = ActionType; conv.ActionType = ActionType;
conv.ReferenceRoutine = routine.DataContract;
var vm = InsertConverstion(conv); var vm = InsertConverstion(conv);
Action<Exception> error = (e) => var created = false;
Action end_local = () =>
{ {
EndSending(); EndSending();
ListVM.VMList.Remove(vm); ListVM.VMList.Remove(vm);
ServiceFacade.EndManuelWaiting(); ServiceFacade.EndManuelWaiting();
}; };
Action<Exception> error = (e) =>
{
if (created)
{
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.DeleteAiConversation(vm.Oid),
end_local);
}
else
{
end_local();
}
};
ServiceFacade.StartManuelWaiting(); ServiceFacade.StartManuelWaiting();
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.CreateAiConversation(conv, ViewContext), cb => ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.CreateAiConversation(conv, ViewContext), cb =>
{ {
created = true;
vm.UpdateByDataContract(cb); vm.UpdateByDataContract(cb);
ExecuteChain(routine, 0, error); ExecuteChain(routine, 0, error);
}, error); }, error);
@@ -643,13 +660,14 @@ namespace BeWo.ViewModel.View.AI
custom_viewContext.Secondary = ViewContext.Secondary; custom_viewContext.Secondary = ViewContext.Secondary;
} }
var msg = routine.Steps.VMList[step].PromptReference.Prompt; var step_prompt = routine.Steps.VMList[step].PromptReference;
var msg_dc = new AiConversationMessageDC var msg_dc = new AiConversationMessageDC
{ {
Message = msg, Message = step_prompt.ShowPrompt ? step_prompt.Prompt : null,
Role = AiConversationMessageRole.User, Role = AiConversationMessageRole.User,
Created = DateTime.Now Created = DateTime.Now,
ShowMessage = step_prompt.ShowPrompt
}; };
var msg_vm = new AiConversationMessageVM(msg_dc); var msg_vm = new AiConversationMessageVM(msg_dc);

View File

@@ -5,7 +5,6 @@ using BeWo.Core;
using BeWo.Validation; using BeWo.Validation;
using BeWo.ViewModel.ListViewModel; using BeWo.ViewModel.ListViewModel;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts; using BS.Shared.DataContracts;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using System.Windows.Forms; using System.Windows.Forms;

View File

@@ -27,7 +27,6 @@ using BeWo.ViewModel;
using BeWo.ServiceProxy; using BeWo.ServiceProxy;
using BS.Shared.Extensions; using BS.Shared.Extensions;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using ChatController.ChatKlassen; using ChatController.ChatKlassen;
using Microsoft.Win32; using Microsoft.Win32;
using Newtonsoft.Json; using Newtonsoft.Json;

View File

@@ -1,5 +1,4 @@
using BS.Shared.Core; using BS.Shared.Exceptions;
using BS.Shared.Exceptions;
using Dakota.Models; using Dakota.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;

View File

@@ -1,7 +1,6 @@
using System; using System;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
namespace BeWo.Data.Entities namespace BeWo.Data.Entities
{ {

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
namespace BeWo.Data.Entities namespace BeWo.Data.Entities
{ {

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace BeWo.Data.Entities namespace BeWo.Data.Entities
@@ -24,5 +23,8 @@ namespace BeWo.Data.Entities
public virtual AiActionType ActionType { get; set; } public virtual AiActionType ActionType { get; set; }
public virtual AiDataContextType ContextType { get; set; } public virtual AiDataContextType ContextType { get; set; }
public virtual IList<AiConversationMessage> Messages { get; set; } public virtual IList<AiConversationMessage> Messages { get; set; }
public virtual AiPromptbausteinPrompt ReferencePrompt { get; set; }
public virtual AiPromptbausteinRoutine ReferenceRoutine { get; set; }
} }
} }

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.Interface.Feature.AICore; using BS.Shared.Interface.Feature.AICore;
namespace BeWo.Data.Entities namespace BeWo.Data.Entities
@@ -20,5 +19,13 @@ namespace BeWo.Data.Entities
public virtual AiConversation AiConversation { get; set; } public virtual AiConversation AiConversation { get; set; }
public virtual int? Duration { get; set; } public virtual int? Duration { get; set; }
public virtual string ModelName { get; set; } public virtual string ModelName { get; set; }
/// <summary>null = anzeigen (Bestandsdaten und normale Chat-Nachrichten)</summary>
public virtual bool ShowMessage { get; set; }
/// <summary>Titel des verwendeten Promptbausteins (gecacht, falls sich der Titel später ändert)</summary>
public virtual string UsedPromptbausteinTitle { get; set; }
/// <summary>Verwendeter Promptbaustein, falls die Nachricht mittels Promptbaustein erstellt wurde (sonst null).</summary>
public virtual AiPromptbausteinPrompt UsedPromptbaustein { get; set; }
/// <summary>Schrittnummer (0-basiert) innerhalb der Routine, falls die Conversation innerhalb einer Routine ausgeführt wurde (sonst null).</summary>
public virtual int? StepCount { get; set; }
} }
} }

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
namespace BeWo.Data.Entities namespace BeWo.Data.Entities
{ {

View File

@@ -3,7 +3,6 @@ using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using BS.Shared; using BS.Shared;
using BS.Shared.Core;
using BS.Shared.Interface; using BS.Shared.Interface;
namespace BeWo.Data.Entities namespace BeWo.Data.Entities

Some files were not shown because too many files have changed in this diff Show More