mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-10-22 06:55:00 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
222c1e929f | ||
|
|
2a648105e6 | ||
|
|
09f5b83e66 | ||
|
|
7a5f2d4aec |
No files matched your search
@@ -249,18 +249,6 @@ jobs:
|
|||||||
cd publish/dotnet
|
cd publish/dotnet
|
||||||
mv mindworkAIStudio.exe "../../app/MindWork AI Studio/bin/dist/mindworkAIStudioServer${{ matrix.dotnet_name_postfix }}"
|
mv mindworkAIStudio.exe "../../app/MindWork AI Studio/bin/dist/mindworkAIStudioServer${{ matrix.dotnet_name_postfix }}"
|
||||||
|
|
||||||
- name: Create parts for the Rust cache key (Unix)
|
|
||||||
if: matrix.platform != 'windows-latest'
|
|
||||||
run: |
|
|
||||||
cd runtime
|
|
||||||
echo "CARGO_LOCK_HASH=${{ hashFiles('**/Cargo.lock') }}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Create parts for the Rust cache key (Windows)
|
|
||||||
if: matrix.platform == 'windows-latest'
|
|
||||||
run: |
|
|
||||||
cd runtime
|
|
||||||
echo "CARGO_LOCK_HASH=${{ hashFiles('**/Cargo.lock') }}" >> $env:GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Cache Rust
|
- name: Cache Rust
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
@@ -272,17 +260,7 @@ jobs:
|
|||||||
~/.rustup/toolchains
|
~/.rustup/toolchains
|
||||||
runtime/target
|
runtime/target
|
||||||
|
|
||||||
# When the entire key matches, Rust might just create the bundles using the current .NET build:
|
key: target-${{ matrix.dotnet_runtime }}-rust-${{ env.RUST_VERSION }}
|
||||||
key: target-${{ matrix.dotnet_runtime }}-rust-${{ env.RUST_VERSION }}-dependencies-${{ env.CARGO_LOCK_HASH }}
|
|
||||||
|
|
||||||
# - 1st key: the Rust runtime dependencies changed. Anyway, we might be able to re-use many previously built packages.
|
|
||||||
#
|
|
||||||
# - No match: alright, a new Rust version was released. Sadly, we cannot re-use anything now. Why?
|
|
||||||
# The updated Rust compiler might mitigate some bugs or vulnerabilities. In order to apply
|
|
||||||
# these changes to our app, we have to re-compile everything. That's the reason why it makes
|
|
||||||
# no sense to use more parts for the cache key, like Tauri or Tauri build versions.
|
|
||||||
restore-keys: |
|
|
||||||
target-${{ matrix.dotnet_runtime }}-rust-${{ env.RUST_VERSION }}-dependencies-
|
|
||||||
|
|
||||||
- name: Setup Rust (stable)
|
- name: Setup Rust (stable)
|
||||||
uses: dtolnay/rust-toolchain@master
|
uses: dtolnay/rust-toolchain@master
|
||||||
@@ -478,30 +456,13 @@ jobs:
|
|||||||
cd publish/dotnet
|
cd publish/dotnet
|
||||||
mv mindworkAIStudio "../../app/MindWork AI Studio/bin/dist/mindworkAIStudioServer-aarch64-unknown-linux-gnu"
|
mv mindworkAIStudio "../../app/MindWork AI Studio/bin/dist/mindworkAIStudioServer-aarch64-unknown-linux-gnu"
|
||||||
|
|
||||||
- name: Create parts for the Rust cache key
|
|
||||||
if: ${{ env.SKIP != 'true' }}
|
|
||||||
run: |
|
|
||||||
cd runtime
|
|
||||||
echo "CARGO_LOCK_HASH=${{ hashFiles('**/Cargo.lock') }}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Cache linux arm64 runner image
|
- name: Cache linux arm64 runner image
|
||||||
if: ${{ env.SKIP != 'true' }}
|
if: ${{ env.SKIP != 'true' }}
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
id: linux_arm_cache
|
id: linux_arm_cache
|
||||||
with:
|
with:
|
||||||
path: ${{ runner.temp }}/linux_arm_qemu_cache.img
|
path: ${{ runner.temp }}/linux_arm_qemu_cache.img
|
||||||
|
key: target-linux-arm64-rust-${{ env.RUST_VERSION }}
|
||||||
# When the entire key matches, Rust might just create the bundles using the current .NET build:
|
|
||||||
key: target-linux-arm64-rust-${{ env.RUST_VERSION }}-dependencies-${{ env.CARGO_LOCK_HASH }}
|
|
||||||
|
|
||||||
# - 1st key: the Rust runtime dependencies changed. Anyway, we might be able to re-use many previously built packages.
|
|
||||||
#
|
|
||||||
# - No match: alright, a new Rust version was released. Sadly, we cannot re-use anything now. Why?
|
|
||||||
# The updated Rust compiler might mitigate some bugs or vulnerabilities. In order to apply
|
|
||||||
# these changes to our app, we have to re-compile everything. That's the reason why it makes
|
|
||||||
# no sense to use more parts for the cache key, like Tauri or Tauri build versions.
|
|
||||||
restore-keys: |
|
|
||||||
target-linux-arm64-rust-${{ env.RUST_VERSION }}-dependencies-
|
|
||||||
|
|
||||||
- name: Build linux arm runner image
|
- name: Build linux arm runner image
|
||||||
uses: pguyot/arm-runner-action@v2
|
uses: pguyot/arm-runner-action@v2
|
||||||
@@ -585,18 +546,6 @@ jobs:
|
|||||||
# Save the built libraries for the next job:
|
# Save the built libraries for the next job:
|
||||||
rm -fr /rust-cache/target
|
rm -fr /rust-cache/target
|
||||||
cp -Rp target /rust-cache
|
cp -Rp target /rust-cache
|
||||||
|
|
||||||
- name: Debug
|
|
||||||
if: ${{ env.SKIP != 'true' }}
|
|
||||||
run: |
|
|
||||||
echo "Current directory: $(pwd)"
|
|
||||||
ls -lhat
|
|
||||||
|
|
||||||
echo "Searching for linux_arm_qemu_cache.img"
|
|
||||||
find $RUNNER_TEMP -name 'linux_arm_qemu_cache.img' -print 2>/dev/null
|
|
||||||
|
|
||||||
echo "Searching for mind-work-ai-studio_*.deb"
|
|
||||||
find . -name 'mind-work-ai-studio_*.deb' -print 2>/dev/null
|
|
||||||
|
|
||||||
- name: Update the runner image to cache the Rust runtime build
|
- name: Update the runner image to cache the Rust runtime build
|
||||||
if: ${{ env.SKIP != 'true' }}
|
if: ${{ env.SKIP != 'true' }}
|
||||||
|
|||||||
@@ -94,7 +94,7 @@
|
|||||||
Reset
|
Reset
|
||||||
</MudButton>
|
</MudButton>
|
||||||
|
|
||||||
@if (this.AllowProfiles)
|
@if (this.AllowProfiles && this.ShowProfileSelection)
|
||||||
{
|
{
|
||||||
<ProfileSelection MarginLeft="" @bind-CurrentProfile="@this.currentProfile"/>
|
<ProfileSelection MarginLeft="" @bind-CurrentProfile="@this.currentProfile"/>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,6 +57,8 @@ public abstract partial class AssistantBase : ComponentBase
|
|||||||
protected virtual bool ShowResult => true;
|
protected virtual bool ShowResult => true;
|
||||||
|
|
||||||
protected virtual bool AllowProfiles => true;
|
protected virtual bool AllowProfiles => true;
|
||||||
|
|
||||||
|
protected virtual bool ShowProfileSelection => true;
|
||||||
|
|
||||||
protected virtual bool ShowDedicatedProgress => false;
|
protected virtual bool ShowDedicatedProgress => false;
|
||||||
|
|
||||||
@@ -69,12 +71,12 @@ public abstract partial class AssistantBase : ComponentBase
|
|||||||
protected AIStudio.Settings.Provider providerSettings;
|
protected AIStudio.Settings.Provider providerSettings;
|
||||||
protected MudForm? form;
|
protected MudForm? form;
|
||||||
protected bool inputIsValid;
|
protected bool inputIsValid;
|
||||||
|
protected Profile currentProfile = Profile.NO_PROFILE;
|
||||||
|
|
||||||
protected ChatThread? chatThread;
|
protected ChatThread? chatThread;
|
||||||
private ContentBlock? resultingContentBlock;
|
private ContentBlock? resultingContentBlock;
|
||||||
private string[] inputIssues = [];
|
private string[] inputIssues = [];
|
||||||
private bool isProcessing;
|
private bool isProcessing;
|
||||||
private Profile currentProfile = Profile.NO_PROFILE;
|
|
||||||
|
|
||||||
#region Overrides of ComponentBase
|
#region Overrides of ComponentBase
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
@attribute [Route(Routes.ASSISTANT_MY_TASKS)]
|
||||||
|
@inherits AssistantBaseCore
|
||||||
|
|
||||||
|
<ProfileFormSelection Validation="@this.ValidateProfile" @bind-Profile="@this.currentProfile"/>
|
||||||
|
<MudTextField T="string" @bind-Text="@this.inputText" Validation="@this.ValidatingText" AdornmentIcon="@Icons.Material.Filled.DocumentScanner" Adornment="Adornment.Start" Label="Text or email" Variant="Variant.Outlined" Lines="12" AutoGrow="@true" MaxLines="24" Class="mb-3" UserAttributes="@USER_INPUT_ATTRIBUTES"/>
|
||||||
|
<EnumSelection T="CommonLanguages" NameFunc="@(language => language.NameSelectingOptional())" @bind-Value="@this.selectedTargetLanguage" Icon="@Icons.Material.Filled.Translate" Label="Target language" AllowOther="@true" OtherValue="CommonLanguages.OTHER" @bind-OtherInput="@this.customTargetLanguage" ValidateOther="@this.ValidateCustomLanguage" LabelOther="Custom target language" />
|
||||||
|
<ProviderSelection @bind-ProviderSettings="@this.providerSettings" ValidateProvider="@this.ValidatingProvider"/>
|
||||||
|
|
||||||
|
<MudButton Variant="Variant.Filled" Class="mb-3" OnClick="() => this.AnalyzeText()">
|
||||||
|
Analyze text
|
||||||
|
</MudButton>
|
||||||
@@ -0,0 +1,119 @@
|
|||||||
|
using AIStudio.Settings;
|
||||||
|
|
||||||
|
namespace AIStudio.Assistants.MyTasks;
|
||||||
|
|
||||||
|
public partial class AssistantMyTasks : AssistantBaseCore
|
||||||
|
{
|
||||||
|
protected override Tools.Components Component => Tools.Components.MY_TASKS_ASSISTANT;
|
||||||
|
|
||||||
|
protected override string Title => "My Tasks";
|
||||||
|
|
||||||
|
protected override string Description =>
|
||||||
|
"""
|
||||||
|
You received a cryptic email that was sent to many recipients and you are now wondering
|
||||||
|
if you need to do something? Copy the email into the input field. You also need to select
|
||||||
|
a personal profile. In this profile, you should describe your role in the organization.
|
||||||
|
The AI will then try to give you hints on what your tasks might be.
|
||||||
|
""";
|
||||||
|
|
||||||
|
protected override string SystemPrompt =>
|
||||||
|
$"""
|
||||||
|
You are a friendly and professional business expert. You receive business emails, protocols,
|
||||||
|
reports, etc. as input. Additionally, you know the user's role in the organization. The user
|
||||||
|
wonders if any tasks arise for them in their role based on the text. You now try to give hints
|
||||||
|
and advice on whether and what the user should do. When you believe there are no tasks for the
|
||||||
|
user, you tell them this. You consider typical business etiquette in your advice.
|
||||||
|
|
||||||
|
You write your advice in the following language: {this.SystemPromptLanguage()}.
|
||||||
|
""";
|
||||||
|
|
||||||
|
protected override IReadOnlyList<IButtonData> FooterButtons => [];
|
||||||
|
|
||||||
|
protected override bool ShowProfileSelection => false;
|
||||||
|
|
||||||
|
protected override void ResetFrom()
|
||||||
|
{
|
||||||
|
this.inputText = string.Empty;
|
||||||
|
if (!this.MightPreselectValues())
|
||||||
|
{
|
||||||
|
this.selectedTargetLanguage = CommonLanguages.AS_IS;
|
||||||
|
this.customTargetLanguage = string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool MightPreselectValues()
|
||||||
|
{
|
||||||
|
if (this.SettingsManager.ConfigurationData.MyTasks.PreselectOptions)
|
||||||
|
{
|
||||||
|
this.selectedTargetLanguage = this.SettingsManager.ConfigurationData.MyTasks.PreselectedTargetLanguage;
|
||||||
|
this.customTargetLanguage = this.SettingsManager.ConfigurationData.MyTasks.PreselectOtherLanguage;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string inputText = string.Empty;
|
||||||
|
private CommonLanguages selectedTargetLanguage = CommonLanguages.AS_IS;
|
||||||
|
private string customTargetLanguage = string.Empty;
|
||||||
|
|
||||||
|
#region Overrides of ComponentBase
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
var deferredContent = MessageBus.INSTANCE.CheckDeferredMessages<string>(Event.SEND_TO_MY_TASKS_ASSISTANT).FirstOrDefault();
|
||||||
|
if (deferredContent is not null)
|
||||||
|
this.inputText = deferredContent;
|
||||||
|
|
||||||
|
await base.OnInitializedAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private string? ValidatingText(string text)
|
||||||
|
{
|
||||||
|
if(string.IsNullOrWhiteSpace(text))
|
||||||
|
return "Please provide some text as input. For example, an email.";
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string? ValidateProfile(Profile profile)
|
||||||
|
{
|
||||||
|
if(profile == default || profile == Profile.NO_PROFILE)
|
||||||
|
return "Please select one of your profiles.";
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string? ValidateCustomLanguage(string language)
|
||||||
|
{
|
||||||
|
if(this.selectedTargetLanguage == CommonLanguages.OTHER && string.IsNullOrWhiteSpace(language))
|
||||||
|
return "Please provide a custom language.";
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string SystemPromptLanguage()
|
||||||
|
{
|
||||||
|
if(this.selectedTargetLanguage is CommonLanguages.AS_IS)
|
||||||
|
return "Use the same language as the input";
|
||||||
|
|
||||||
|
if(this.selectedTargetLanguage is CommonLanguages.OTHER)
|
||||||
|
return this.customTargetLanguage;
|
||||||
|
|
||||||
|
return this.selectedTargetLanguage.Name();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task AnalyzeText()
|
||||||
|
{
|
||||||
|
await this.form!.Validate();
|
||||||
|
if (!this.inputIsValid)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.CreateChatThread();
|
||||||
|
var time = this.AddUserRequest(this.inputText);
|
||||||
|
|
||||||
|
await this.AddAIResponseAsync(time);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@ public partial class Changelog
|
|||||||
|
|
||||||
public static readonly Log[] LOGS =
|
public static readonly Log[] LOGS =
|
||||||
[
|
[
|
||||||
|
new (183, "v0.9.8, build 183 (2024-09-09 13:10 UTC)", "v0.9.8.md"),
|
||||||
new (182, "v0.9.7, build 182 (2024-09-08 20:55 UTC)", "v0.9.7.md"),
|
new (182, "v0.9.7, build 182 (2024-09-08 20:55 UTC)", "v0.9.7.md"),
|
||||||
new (181, "v0.9.6, build 181 (2024-09-08 09:30 UTC)", "v0.9.6.md"),
|
new (181, "v0.9.6, build 181 (2024-09-08 09:30 UTC)", "v0.9.6.md"),
|
||||||
new (180, "v0.9.5, build 180 (2024-09-07 16:33 UTC)", "v0.9.5.md"),
|
new (180, "v0.9.5, build 180 (2024-09-07 16:33 UTC)", "v0.9.5.md"),
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
@using AIStudio.Settings
|
||||||
|
|
||||||
|
<MudSelect T="Profile" Strict="@true" Value="@this.Profile" ValueChanged="@this.SelectionChanged" Adornment="Adornment.Start" AdornmentIcon="@Icons.Material.Filled.Person4" Margin="Margin.Dense" Label="Select one of your profiles" Variant="Variant.Outlined" Class="mb-3" Validation="@this.Validation">
|
||||||
|
@foreach (var profile in this.SettingsManager.ConfigurationData.Profiles.GetAllProfiles())
|
||||||
|
{
|
||||||
|
<MudSelectItem Value="profile">
|
||||||
|
@profile.Name
|
||||||
|
</MudSelectItem>
|
||||||
|
}
|
||||||
|
</MudSelect>
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
using AIStudio.Settings;
|
||||||
|
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
|
||||||
|
namespace AIStudio.Components;
|
||||||
|
|
||||||
|
public partial class ProfileFormSelection : ComponentBase
|
||||||
|
{
|
||||||
|
[Parameter]
|
||||||
|
public Profile Profile { get; set; } = Profile.NO_PROFILE;
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback<Profile> ProfileChanged { get; set; }
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public Func<Profile, string?> Validation { get; set; } = _ => null;
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
private SettingsManager SettingsManager { get; init; } = null!;
|
||||||
|
|
||||||
|
private async Task SelectionChanged(Profile profile)
|
||||||
|
{
|
||||||
|
this.Profile = profile;
|
||||||
|
await this.ProfileChanged.InvokeAsync(profile);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,6 +22,7 @@
|
|||||||
</MudText>
|
</MudText>
|
||||||
<MudStack Row="@true" Wrap="@Wrap.Wrap" Class="mb-3">
|
<MudStack Row="@true" Wrap="@Wrap.Wrap" Class="mb-3">
|
||||||
<AssistantBlock Name="E-Mail" Description="Generate an e-mail for a given context." Icon="@Icons.Material.Filled.Email" Link="@Routes.ASSISTANT_EMAIL"/>
|
<AssistantBlock Name="E-Mail" Description="Generate an e-mail for a given context." Icon="@Icons.Material.Filled.Email" Link="@Routes.ASSISTANT_EMAIL"/>
|
||||||
|
<AssistantBlock Name="My Tasks" Description="Analyze a text or an email for tasks you need to complete." Icon="@Icons.Material.Filled.Task" Link="@Routes.ASSISTANT_MY_TASKS"/>
|
||||||
<AssistantBlock Name="Agenda Planner" Description="Generate an agenda for a given meeting, seminar, etc." Icon="@Icons.Material.Filled.CalendarToday" Link="@Routes.ASSISTANT_AGENDA"/>
|
<AssistantBlock Name="Agenda Planner" Description="Generate an agenda for a given meeting, seminar, etc." Icon="@Icons.Material.Filled.CalendarToday" Link="@Routes.ASSISTANT_AGENDA"/>
|
||||||
<AssistantBlock Name="Legal Check" Description="Ask a question about a legal document." Icon="@Icons.Material.Filled.Gavel" Link="@Routes.ASSISTANT_LEGAL_CHECK"/>
|
<AssistantBlock Name="Legal Check" Description="Ask a question about a legal document." Icon="@Icons.Material.Filled.Gavel" Link="@Routes.ASSISTANT_LEGAL_CHECK"/>
|
||||||
<AssistantBlock Name="Icon Finder" Description="Using a LLM to find an icon for a given context." Icon="@Icons.Material.Filled.FindInPage" Link="@Routes.ASSISTANT_ICON_FINDER"/>
|
<AssistantBlock Name="Icon Finder" Description="Using a LLM to find an icon for a given context." Icon="@Icons.Material.Filled.FindInPage" Link="@Routes.ASSISTANT_ICON_FINDER"/>
|
||||||
|
|||||||
@@ -299,6 +299,19 @@
|
|||||||
<ConfigurationProviderSelection Data="@this.availableProviders" Disabled="@(() => !this.SettingsManager.ConfigurationData.Synonyms.PreselectOptions)" SelectedValue="@(() => this.SettingsManager.ConfigurationData.Synonyms.PreselectedProvider)" SelectionUpdate="@(selectedValue => this.SettingsManager.ConfigurationData.Synonyms.PreselectedProvider = selectedValue)"/>
|
<ConfigurationProviderSelection Data="@this.availableProviders" Disabled="@(() => !this.SettingsManager.ConfigurationData.Synonyms.PreselectOptions)" SelectedValue="@(() => this.SettingsManager.ConfigurationData.Synonyms.PreselectedProvider)" SelectionUpdate="@(selectedValue => this.SettingsManager.ConfigurationData.Synonyms.PreselectedProvider = selectedValue)"/>
|
||||||
</MudPaper>
|
</MudPaper>
|
||||||
</ExpansionPanel>
|
</ExpansionPanel>
|
||||||
|
|
||||||
|
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.Task" HeaderText="Assistant: My Tasks">
|
||||||
|
<MudPaper Class="pa-3 mb-8 border-dashed border rounded-lg">
|
||||||
|
<ConfigurationOption OptionDescription="Preselect options?" LabelOn="Options are preselected" LabelOff="No options are preselected" State="@(() => this.SettingsManager.ConfigurationData.MyTasks.PreselectOptions)" StateUpdate="@(updatedState => this.SettingsManager.ConfigurationData.MyTasks.PreselectOptions = updatedState)" OptionHelp="When enabled, you can preselect options. This is might be useful when you prefer a specific language or LLM model."/>
|
||||||
|
<ConfigurationSelect OptionDescription="Preselect the language" Disabled="@(() => !this.SettingsManager.ConfigurationData.MyTasks.PreselectOptions)" SelectedValue="@(() => this.SettingsManager.ConfigurationData.MyTasks.PreselectedTargetLanguage)" Data="@ConfigurationSelectDataFactory.GetCommonLanguagesOptionalData()" SelectionUpdate="@(selectedValue => this.SettingsManager.ConfigurationData.MyTasks.PreselectedTargetLanguage = selectedValue)" OptionHelp="Which language should be preselected?"/>
|
||||||
|
@if (this.SettingsManager.ConfigurationData.MyTasks.PreselectedTargetLanguage is CommonLanguages.OTHER)
|
||||||
|
{
|
||||||
|
<ConfigurationText OptionDescription="Preselect another language" Disabled="@(() => !this.SettingsManager.ConfigurationData.MyTasks.PreselectOptions)" Icon="@Icons.Material.Filled.Translate" Text="@(() => this.SettingsManager.ConfigurationData.MyTasks.PreselectOtherLanguage)" TextUpdate="@(updatedText => this.SettingsManager.ConfigurationData.MyTasks.PreselectOtherLanguage = updatedText)"/>
|
||||||
|
}
|
||||||
|
<ConfigurationSelect OptionDescription="Preselect one of your profiles?" Disabled="@(() => !this.SettingsManager.ConfigurationData.MyTasks.PreselectOptions)" SelectedValue="@(() => this.SettingsManager.ConfigurationData.MyTasks.PreselectedProfile)" Data="@ConfigurationSelectDataFactory.GetProfilesData(this.SettingsManager.ConfigurationData.Profiles)" SelectionUpdate="@(selectedValue => this.SettingsManager.ConfigurationData.MyTasks.PreselectedProfile = selectedValue)" OptionHelp="Would you like to preselect one of your profiles?"/>
|
||||||
|
<ConfigurationProviderSelection Data="@this.availableProviders" Disabled="@(() => !this.SettingsManager.ConfigurationData.MyTasks.PreselectOptions)" SelectedValue="@(() => this.SettingsManager.ConfigurationData.MyTasks.PreselectedProvider)" SelectionUpdate="@(selectedValue => this.SettingsManager.ConfigurationData.MyTasks.PreselectedProvider = selectedValue)"/>
|
||||||
|
</MudPaper>
|
||||||
|
</ExpansionPanel>
|
||||||
|
|
||||||
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.TextFields" HeaderText="Agent: Text Content Cleaner Options">
|
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.TextFields" HeaderText="Agent: Text Content Cleaner Options">
|
||||||
<MudPaper Class="pa-3 mb-8 border-dashed border rounded-lg">
|
<MudPaper Class="pa-3 mb-8 border-dashed border rounded-lg">
|
||||||
|
|||||||
@@ -20,5 +20,6 @@ public sealed partial class Routes
|
|||||||
public const string ASSISTANT_EMAIL = "/assistant/email";
|
public const string ASSISTANT_EMAIL = "/assistant/email";
|
||||||
public const string ASSISTANT_LEGAL_CHECK = "/assistant/legal-check";
|
public const string ASSISTANT_LEGAL_CHECK = "/assistant/legal-check";
|
||||||
public const string ASSISTANT_SYNONYMS = "/assistant/synonyms";
|
public const string ASSISTANT_SYNONYMS = "/assistant/synonyms";
|
||||||
|
public const string ASSISTANT_MY_TASKS = "/assistant/my-tasks";
|
||||||
// ReSharper restore InconsistentNaming
|
// ReSharper restore InconsistentNaming
|
||||||
}
|
}
|
||||||
@@ -58,4 +58,6 @@ public sealed class Data
|
|||||||
public DataLegalCheck LegalCheck { get; set; } = new();
|
public DataLegalCheck LegalCheck { get; set; } = new();
|
||||||
|
|
||||||
public DataSynonyms Synonyms { get; set; } = new();
|
public DataSynonyms Synonyms { get; set; } = new();
|
||||||
|
|
||||||
|
public DataMyTasks MyTasks { get; set; } = new();
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
namespace AIStudio.Settings.DataModel;
|
||||||
|
|
||||||
|
public sealed class DataMyTasks
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Do you want to preselect any options?
|
||||||
|
/// </summary>
|
||||||
|
public bool PreselectOptions { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Preselect the target language?
|
||||||
|
/// </summary>
|
||||||
|
public CommonLanguages PreselectedTargetLanguage { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Preselect any other language?
|
||||||
|
/// </summary>
|
||||||
|
public string PreselectOtherLanguage { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The preselected provider.
|
||||||
|
/// </summary>
|
||||||
|
public string PreselectedProvider { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Preselect a profile?
|
||||||
|
/// </summary>
|
||||||
|
public string PreselectedProfile { get; set; } = string.Empty;
|
||||||
|
}
|
||||||
@@ -129,6 +129,7 @@ public sealed class SettingsManager(ILogger<SettingsManager> logger)
|
|||||||
Tools.Components.EMAIL_ASSISTANT => this.ConfigurationData.EMail.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.EMail.PreselectedProvider) : default,
|
Tools.Components.EMAIL_ASSISTANT => this.ConfigurationData.EMail.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.EMail.PreselectedProvider) : default,
|
||||||
Tools.Components.LEGAL_CHECK_ASSISTANT => this.ConfigurationData.LegalCheck.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.LegalCheck.PreselectedProvider) : default,
|
Tools.Components.LEGAL_CHECK_ASSISTANT => this.ConfigurationData.LegalCheck.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.LegalCheck.PreselectedProvider) : default,
|
||||||
Tools.Components.SYNONYMS_ASSISTANT => this.ConfigurationData.Synonyms.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.Synonyms.PreselectedProvider) : default,
|
Tools.Components.SYNONYMS_ASSISTANT => this.ConfigurationData.Synonyms.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.Synonyms.PreselectedProvider) : default,
|
||||||
|
Tools.Components.MY_TASKS_ASSISTANT => this.ConfigurationData.MyTasks.PreselectOptions ? this.ConfigurationData.Providers.FirstOrDefault(x => x.Id == this.ConfigurationData.MyTasks.PreselectedProvider) : default,
|
||||||
|
|
||||||
_ => default,
|
_ => default,
|
||||||
};
|
};
|
||||||
@@ -148,6 +149,7 @@ public sealed class SettingsManager(ILogger<SettingsManager> logger)
|
|||||||
Tools.Components.CODING_ASSISTANT => this.ConfigurationData.Coding.PreselectOptions ? this.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == this.ConfigurationData.Coding.PreselectedProfile) : default,
|
Tools.Components.CODING_ASSISTANT => this.ConfigurationData.Coding.PreselectOptions ? this.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == this.ConfigurationData.Coding.PreselectedProfile) : default,
|
||||||
Tools.Components.EMAIL_ASSISTANT => this.ConfigurationData.EMail.PreselectOptions ? this.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == this.ConfigurationData.EMail.PreselectedProfile) : default,
|
Tools.Components.EMAIL_ASSISTANT => this.ConfigurationData.EMail.PreselectOptions ? this.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == this.ConfigurationData.EMail.PreselectedProfile) : default,
|
||||||
Tools.Components.LEGAL_CHECK_ASSISTANT => this.ConfigurationData.LegalCheck.PreselectOptions ? this.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == this.ConfigurationData.LegalCheck.PreselectedProfile) : default,
|
Tools.Components.LEGAL_CHECK_ASSISTANT => this.ConfigurationData.LegalCheck.PreselectOptions ? this.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == this.ConfigurationData.LegalCheck.PreselectedProfile) : default,
|
||||||
|
Tools.Components.MY_TASKS_ASSISTANT => this.ConfigurationData.MyTasks.PreselectOptions ? this.ConfigurationData.Profiles.FirstOrDefault(x => x.Id == this.ConfigurationData.MyTasks.PreselectedProfile) : default,
|
||||||
|
|
||||||
_ => default,
|
_ => default,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ public enum Components
|
|||||||
EMAIL_ASSISTANT,
|
EMAIL_ASSISTANT,
|
||||||
LEGAL_CHECK_ASSISTANT,
|
LEGAL_CHECK_ASSISTANT,
|
||||||
SYNONYMS_ASSISTANT,
|
SYNONYMS_ASSISTANT,
|
||||||
|
MY_TASKS_ASSISTANT,
|
||||||
|
|
||||||
CHAT,
|
CHAT,
|
||||||
}
|
}
|
||||||
@@ -28,4 +28,5 @@ public enum Event
|
|||||||
SEND_TO_EMAIL_ASSISTANT,
|
SEND_TO_EMAIL_ASSISTANT,
|
||||||
SEND_TO_LEGAL_CHECK_ASSISTANT,
|
SEND_TO_LEGAL_CHECK_ASSISTANT,
|
||||||
SEND_TO_SYNONYMS_ASSISTANT,
|
SEND_TO_SYNONYMS_ASSISTANT,
|
||||||
|
SEND_TO_MY_TASKS_ASSISTANT,
|
||||||
}
|
}
|
||||||
@@ -14,6 +14,7 @@ public static class SendToExtensions
|
|||||||
Components.EMAIL_ASSISTANT => "E-Mail Assistant",
|
Components.EMAIL_ASSISTANT => "E-Mail Assistant",
|
||||||
Components.LEGAL_CHECK_ASSISTANT => "Legal Check Assistant",
|
Components.LEGAL_CHECK_ASSISTANT => "Legal Check Assistant",
|
||||||
Components.SYNONYMS_ASSISTANT => "Synonym Assistant",
|
Components.SYNONYMS_ASSISTANT => "Synonym Assistant",
|
||||||
|
Components.MY_TASKS_ASSISTANT => "My Tasks Assistant",
|
||||||
|
|
||||||
Components.CHAT => "New Chat",
|
Components.CHAT => "New Chat",
|
||||||
|
|
||||||
@@ -32,6 +33,7 @@ public static class SendToExtensions
|
|||||||
Components.TEXT_SUMMARIZER_ASSISTANT => new(Event.SEND_TO_TEXT_SUMMARIZER_ASSISTANT, Routes.ASSISTANT_SUMMARIZER),
|
Components.TEXT_SUMMARIZER_ASSISTANT => new(Event.SEND_TO_TEXT_SUMMARIZER_ASSISTANT, Routes.ASSISTANT_SUMMARIZER),
|
||||||
Components.LEGAL_CHECK_ASSISTANT => new(Event.SEND_TO_LEGAL_CHECK_ASSISTANT, Routes.ASSISTANT_LEGAL_CHECK),
|
Components.LEGAL_CHECK_ASSISTANT => new(Event.SEND_TO_LEGAL_CHECK_ASSISTANT, Routes.ASSISTANT_LEGAL_CHECK),
|
||||||
Components.SYNONYMS_ASSISTANT => new(Event.SEND_TO_SYNONYMS_ASSISTANT, Routes.ASSISTANT_SYNONYMS),
|
Components.SYNONYMS_ASSISTANT => new(Event.SEND_TO_SYNONYMS_ASSISTANT, Routes.ASSISTANT_SYNONYMS),
|
||||||
|
Components.MY_TASKS_ASSISTANT => new(Event.SEND_TO_MY_TASKS_ASSISTANT, Routes.ASSISTANT_MY_TASKS),
|
||||||
|
|
||||||
Components.CHAT => new(Event.SEND_TO_CHAT, Routes.CHAT),
|
Components.CHAT => new(Event.SEND_TO_CHAT, Routes.CHAT),
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# v0.9.8, build 183 (2024-09-09 13:10 UTC)
|
||||||
|
- Added the "my tasks" assistant to analyze, e.g., business emails and extract related tasks for your role.
|
||||||
+4
-4
@@ -1,9 +1,9 @@
|
|||||||
0.9.7
|
0.9.8
|
||||||
2024-09-08 20:55:01 UTC
|
2024-09-09 13:10:19 UTC
|
||||||
182
|
183
|
||||||
8.0.108 (commit 665a05cea7)
|
8.0.108 (commit 665a05cea7)
|
||||||
8.0.8 (commit 08338fcaa5)
|
8.0.8 (commit 08338fcaa5)
|
||||||
1.81.0 (commit eeb90cda1)
|
1.81.0 (commit eeb90cda1)
|
||||||
7.8.0
|
7.8.0
|
||||||
1.7.1
|
1.7.1
|
||||||
54588fc92d8, release
|
09f5b83e664, release
|
||||||
Generated
+1
-1
@@ -2130,7 +2130,7 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mindwork-ai-studio"
|
name = "mindwork-ai-studio"
|
||||||
version = "0.9.7"
|
version = "0.9.8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aes",
|
"aes",
|
||||||
"arboard",
|
"arboard",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "mindwork-ai-studio"
|
name = "mindwork-ai-studio"
|
||||||
version = "0.9.7"
|
version = "0.9.8"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "MindWork AI Studio"
|
description = "MindWork AI Studio"
|
||||||
authors = ["Thorsten Sommer"]
|
authors = ["Thorsten Sommer"]
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
},
|
},
|
||||||
"package": {
|
"package": {
|
||||||
"productName": "MindWork AI Studio",
|
"productName": "MindWork AI Studio",
|
||||||
"version": "0.9.7"
|
"version": "0.9.8"
|
||||||
},
|
},
|
||||||
"tauri": {
|
"tauri": {
|
||||||
"allowlist": {
|
"allowlist": {
|
||||||
|
|||||||
Reference in new issue
Block a user