mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-11-14 04:47:22 +00:00
Added the choice between formal and informal address to the whole app (#1200)
This commit is contained in:
1 parent
382db4b8d0
commit
c9a376f742
342 files changed
+14378
-1893
No files matched your search
@@ -13,13 +13,13 @@
|
||||
<InnerScrolling>
|
||||
|
||||
<AssistantCategoryBlock Title="@T("General")" HeaderClass="mb-2 mr-3">
|
||||
<AssistantBlock TSettings="SettingsDialogTextSummarizer" Component="Components.TEXT_SUMMARIZER_ASSISTANT" Name="@T("Text Summarizer")" Description="@T("Use an LLM to summarize a given text.")" Icon="@AppIcons.ASSISTANT_TEXT_SUMMARIZER" Link="@Routes.ASSISTANT_SUMMARIZER"/>
|
||||
<AssistantBlock TSettings="SettingsDialogTextSummarizer" Component="Components.TEXT_SUMMARIZER_ASSISTANT" Name="@T("Text Summarizer")" Description="@TA("Use an LLM to summarize a given text.")" Icon="@AppIcons.ASSISTANT_TEXT_SUMMARIZER" Link="@Routes.ASSISTANT_SUMMARIZER"/>
|
||||
<AssistantBlock TSettings="SettingsDialogTranslation" Component="Components.TRANSLATION_ASSISTANT" Name="@T("Translation")" Description="@T("Translate text into another language.")" Icon="@AppIcons.TRANSLATION" Link="@Routes.ASSISTANT_TRANSLATION"/>
|
||||
<AssistantBlock TSettings="SettingsDialogGrammarSpelling" Component="Components.GRAMMAR_SPELLING_ASSISTANT" Name="@T("Grammar & Spelling")" Description="@T("Check grammar and spelling of a given text.")" Icon="@AppIcons.ASSISTANT_GRAMMAR_SPELLING" Link="@Routes.ASSISTANT_GRAMMAR_SPELLING"/>
|
||||
<AssistantBlock TSettings="SettingsDialogRewrite" Component="Components.REWRITE_ASSISTANT" Name="@T("Rewrite & Improve")" Description="@T("Rewrite and improve a given text for a chosen style.")" Icon="@AppIcons.ASSISTANT_REWRITE" Link="@Routes.ASSISTANT_REWRITE"/>
|
||||
<AssistantBlock TSettings="SettingsDialogPromptOptimizer" Component="Components.PROMPT_OPTIMIZER_ASSISTANT" Name="@T("Prompt Optimizer")" Description="@T("Optimize your prompt using a structured guideline.")" Icon="@AppIcons.ASSISTANT_PROMPT_OPTIMIZER" Link="@Routes.ASSISTANT_PROMPT_OPTIMIZER"/>
|
||||
<AssistantBlock TSettings="SettingsDialogSynonyms" Component="Components.SYNONYMS_ASSISTANT" Name="@T("Synonyms")" Description="@T("Find synonyms for a given word or phrase.")" Icon="@AppIcons.ASSISTANT_SYNONYMS" Link="@Routes.ASSISTANT_SYNONYMS"/>
|
||||
<AssistantBlock TSettings="SettingsDialogAssistantBuilder" Component="Components.META_ASSISTANT" RequiredPreviewFeature="PreviewFeatures.PRE_META_ASSISTANT_V1" Name="@T("Assistant Builder")" Description="@T("Generate your own assistants.")" Icon="@AppIcons.ASSISTANT_BUILDER" Link="@Routes.ASSISTANT_META_ASSISTANT"/>
|
||||
<AssistantBlock TSettings="SettingsDialogPromptOptimizer" Component="Components.PROMPT_OPTIMIZER_ASSISTANT" Name="@T("Prompt Optimizer")" Description="@TA("Optimize your prompt using a structured guideline.")" Icon="@AppIcons.ASSISTANT_PROMPT_OPTIMIZER" Link="@Routes.ASSISTANT_PROMPT_OPTIMIZER"/>
|
||||
<AssistantBlock TSettings="SettingsDialogSynonyms" Component="Components.SYNONYMS_ASSISTANT" Name="@T("Synonyms")" Description="@TA("Find synonyms for a given word or phrase.")" Icon="@AppIcons.ASSISTANT_SYNONYMS" Link="@Routes.ASSISTANT_SYNONYMS"/>
|
||||
<AssistantBlock TSettings="SettingsDialogAssistantBuilder" Component="Components.META_ASSISTANT" RequiredPreviewFeature="PreviewFeatures.PRE_META_ASSISTANT_V1" Name="@T("Assistant Builder")" Description="@TA("Generate your own assistants.")" Icon="@AppIcons.ASSISTANT_BUILDER" Link="@Routes.ASSISTANT_META_ASSISTANT"/>
|
||||
</AssistantCategoryBlock>
|
||||
|
||||
@if (this.AssistantPlugins.Count > 0)
|
||||
@@ -55,27 +55,27 @@
|
||||
}
|
||||
|
||||
<AssistantCategoryBlock Title="@T("Business")">
|
||||
<AssistantBlock TSettings="SettingsDialogWritingEMails" Component="Components.EMAIL_ASSISTANT" Name="@T("E-Mail")" Description="@T("Generate an e-mail for a given context.")" Icon="@AppIcons.ASSISTANT_EMAIL" Link="@Routes.ASSISTANT_EMAIL"/>
|
||||
<AssistantBlock TSettings="SettingsDialogWritingEMails" Component="Components.EMAIL_ASSISTANT" Name="@T("E-Mail")" Description="@TA("Generate an e-mail for a given context.")" Icon="@AppIcons.ASSISTANT_EMAIL" Link="@Routes.ASSISTANT_EMAIL"/>
|
||||
<AssistantBlock TSettings="SettingsDialogSWOTAnalysis" Component="Components.SWOT_ANALYSIS_ASSISTANT" Name="@T("SWOT Analysis")" Description="@T("Identify strengths, weaknesses, opportunities, threats, and practical next steps from provided information.")" Icon="@AppIcons.ASSISTANT_SWOT_ANALYSIS" Link="@Routes.ASSISTANT_SWOT_ANALYSIS"/>
|
||||
<AssistantBlock TSettings="NoSettingsPanel" Component="Components.DOCUMENT_ANALYSIS_ASSISTANT" Name="@T("Document Analysis")" Description="@T("Analyze a document regarding defined rules and extract key information.")" Icon="@AppIcons.ASSISTANT_DOCUMENT_ANALYSIS" Link="@Routes.ASSISTANT_DOCUMENT_ANALYSIS"/>
|
||||
<AssistantBlock TSettings="NoSettingsPanel" Component="Components.DOCUMENT_ANALYSIS_ASSISTANT" Name="@T("Document Analysis")" Description="@TA("Analyze a document regarding defined rules and extract key information.")" Icon="@AppIcons.ASSISTANT_DOCUMENT_ANALYSIS" Link="@Routes.ASSISTANT_DOCUMENT_ANALYSIS"/>
|
||||
<AssistantBlock TSettings="SettingsDialogBatchProcessing" Component="Components.BATCH_PROCESSING_ASSISTANT" Name="@T("Batch Processing")" Description="@T("Process all documents of a folder in one batch run and collect the results.")" Icon="@AppIcons.ASSISTANT_BATCH_PROCESSING" Link="@Routes.ASSISTANT_BATCH_PROCESSING"/>
|
||||
<AssistantBlock TSettings="SettingsDialogMyTasks" Component="Components.MY_TASKS_ASSISTANT" Name="@T("My Tasks")" Description="@T("Analyze a text or an email for tasks you need to complete.")" Icon="@AppIcons.ASSISTANT_MY_TASKS" Link="@Routes.ASSISTANT_MY_TASKS"/>
|
||||
<AssistantBlock TSettings="SettingsDialogAgenda" Component="Components.AGENDA_ASSISTANT" Name="@T("Agenda Planner")" Description="@T("Generate an agenda for a given meeting, seminar, etc.")" Icon="@AppIcons.ASSISTANT_AGENDA" Link="@Routes.ASSISTANT_AGENDA"/>
|
||||
<AssistantBlock TSettings="SettingsDialogJobPostings" Component="Components.JOB_POSTING_ASSISTANT" Name="@T("Job Posting")" Description="@T("Generate a job posting for a given job description.")" Icon="@AppIcons.ASSISTANT_JOB_POSTING" Link="@Routes.ASSISTANT_JOB_POSTING"/>
|
||||
<AssistantBlock TSettings="SettingsDialogLegalCheck" Component="Components.LEGAL_CHECK_ASSISTANT" Name="@T("Legal Check")" Description="@T("Ask a question about a legal document.")" Icon="@AppIcons.ASSISTANT_LEGAL_CHECK" Link="@Routes.ASSISTANT_LEGAL_CHECK"/>
|
||||
<AssistantBlock TSettings="SettingsDialogIconFinder" Component="Components.ICON_FINDER_ASSISTANT" Name="@T("Icon Finder")" Description="@T("Use an LLM to find an icon for a given context.")" Icon="@AppIcons.ASSISTANT_ICON_FINDER" Link="@Routes.ASSISTANT_ICON_FINDER"/>
|
||||
<AssistantBlock TSettings="SettingsDialogSlideBuilder" Component="Components.SLIDE_BUILDER_ASSISTANT" Name="@T("Slide Assistant")" Description="@T("Turn texts and documents into slides, also as a PowerPoint file in the design of your template.")" Icon="@AppIcons.ASSISTANT_SLIDES" Link="@Routes.ASSISTANT_SLIDE_BUILDER"/>
|
||||
<AssistantBlock TSettings="SettingsDialogVisualBriefing" Component="Components.VISUAL_BRIEFING_ASSISTANT" RequiredPreviewFeature="Components.VISUAL_BRIEFING_ASSISTANT.RequiredPreviewFeature" Name="@T("Visual Briefing Assistant")" Description="@T("Turn documents, data, images, audio, and video into an audience-ready interactive briefing.")" Icon="@AppIcons.ASSISTANT_VISUAL_BRIEFING" Link="@Routes.ASSISTANT_VISUAL_BRIEFING" />
|
||||
<AssistantBlock TSettings="SettingsDialogMyTasks" Component="Components.MY_TASKS_ASSISTANT" Name="@T("My Tasks")" Description="@TA("Analyze a text or an email for tasks you need to complete.")" Icon="@AppIcons.ASSISTANT_MY_TASKS" Link="@Routes.ASSISTANT_MY_TASKS"/>
|
||||
<AssistantBlock TSettings="SettingsDialogAgenda" Component="Components.AGENDA_ASSISTANT" Name="@T("Agenda Planner")" Description="@TA("Generate an agenda for a given meeting, seminar, etc.")" Icon="@AppIcons.ASSISTANT_AGENDA" Link="@Routes.ASSISTANT_AGENDA"/>
|
||||
<AssistantBlock TSettings="SettingsDialogJobPostings" Component="Components.JOB_POSTING_ASSISTANT" Name="@T("Job Posting")" Description="@TA("Generate a job posting for a given job description.")" Icon="@AppIcons.ASSISTANT_JOB_POSTING" Link="@Routes.ASSISTANT_JOB_POSTING"/>
|
||||
<AssistantBlock TSettings="SettingsDialogLegalCheck" Component="Components.LEGAL_CHECK_ASSISTANT" Name="@T("Legal Check")" Description="@TA("Ask a question about a legal document.")" Icon="@AppIcons.ASSISTANT_LEGAL_CHECK" Link="@Routes.ASSISTANT_LEGAL_CHECK"/>
|
||||
<AssistantBlock TSettings="SettingsDialogIconFinder" Component="Components.ICON_FINDER_ASSISTANT" Name="@T("Icon Finder")" Description="@TA("Use an LLM to find an icon for a given context.")" Icon="@AppIcons.ASSISTANT_ICON_FINDER" Link="@Routes.ASSISTANT_ICON_FINDER"/>
|
||||
<AssistantBlock TSettings="SettingsDialogSlideBuilder" Component="Components.SLIDE_BUILDER_ASSISTANT" Name="@T("Slide Assistant")" Description="@TA("Turn texts and documents into slides, also as a PowerPoint file in the design of your template.")" Icon="@AppIcons.ASSISTANT_SLIDES" Link="@Routes.ASSISTANT_SLIDE_BUILDER"/>
|
||||
<AssistantBlock TSettings="SettingsDialogVisualBriefing" Component="Components.VISUAL_BRIEFING_ASSISTANT" RequiredPreviewFeature="Components.VISUAL_BRIEFING_ASSISTANT.RequiredPreviewFeature" Name="@T("Visual Briefing Assistant")" Description="@TA("Turn documents, data, images, audio, and video into an audience-ready interactive briefing.")" Icon="@AppIcons.ASSISTANT_VISUAL_BRIEFING" Link="@Routes.ASSISTANT_VISUAL_BRIEFING" />
|
||||
</AssistantCategoryBlock>
|
||||
|
||||
<AssistantCategoryBlock Title="@T("Learning & Reflecting")">
|
||||
<AssistantBlock TSettings="SettingsDialogAssistantBias" Component="Components.BIAS_DAY_ASSISTANT" Name="@T("Bias of the Day")" Description="@T("Learn about one cognitive bias every day.")" Icon="@AppIcons.ASSISTANT_BIAS_OF_THE_DAY" Link="@Routes.ASSISTANT_BIAS"/>
|
||||
<AssistantBlock TSettings="SettingsDialogBeyondFactsLab" Component="Components.BEYOND_FACTS_LAB_ASSISTANT" RequiredPreviewFeature="Components.BEYOND_FACTS_LAB_ASSISTANT.RequiredPreviewFeature" Name="@T("BeyondFacts Lab")" Description="@T("Prepare step by step for a challenging appearance as a researcher, e.g., a panel discussion or an interview.")" Icon="@AppIcons.ASSISTANT_BEYOND_FACTS_LAB" Link="@Routes.ASSISTANT_BEYOND_FACTS_LAB"/>
|
||||
<AssistantBlock TSettings="SettingsDialogAssistantBias" Component="Components.BIAS_DAY_ASSISTANT" Name="@T("Bias of the Day")" Description="@TA("Learn about one cognitive bias every day.")" Icon="@AppIcons.ASSISTANT_BIAS_OF_THE_DAY" Link="@Routes.ASSISTANT_BIAS"/>
|
||||
<AssistantBlock TSettings="SettingsDialogBeyondFactsLab" Component="Components.BEYOND_FACTS_LAB_ASSISTANT" RequiredPreviewFeature="Components.BEYOND_FACTS_LAB_ASSISTANT.RequiredPreviewFeature" Name="@T("BeyondFacts Lab")" Description="@TA("Prepare step by step for a challenging appearance as a researcher, e.g., a panel discussion or an interview.")" Icon="@AppIcons.ASSISTANT_BEYOND_FACTS_LAB" Link="@Routes.ASSISTANT_BEYOND_FACTS_LAB"/>
|
||||
</AssistantCategoryBlock>
|
||||
|
||||
<AssistantCategoryBlock Title="@T("Software Engineering")">
|
||||
<AssistantBlock TSettings="SettingsDialogCoding" Component="Components.CODING_ASSISTANT" Name="@T("Coding")" Description="@T("Get coding and debugging support from an LLM.")" Icon="@AppIcons.ASSISTANT_CODING" Link="@Routes.ASSISTANT_CODING"/>
|
||||
<AssistantBlock TSettings="SettingsDialogERIServer" Component="Components.ERI_ASSISTANT" RequiredPreviewFeature="PreviewFeatures.PRE_RAG_2024" Name="@T("ERI Server")" Description="@T("Generate an ERI server to integrate business systems.")" Icon="@AppIcons.ERI" Link="@Routes.ASSISTANT_ERI"/>
|
||||
<AssistantBlock TSettings="SettingsDialogCoding" Component="Components.CODING_ASSISTANT" Name="@T("Coding")" Description="@TA("Get coding and debugging support from an LLM.")" Icon="@AppIcons.ASSISTANT_CODING" Link="@Routes.ASSISTANT_CODING"/>
|
||||
<AssistantBlock TSettings="SettingsDialogERIServer" Component="Components.ERI_ASSISTANT" RequiredPreviewFeature="PreviewFeatures.PRE_RAG_2024" Name="@T("ERI Server")" Description="@TA("Generate an ERI server to integrate business systems.")" Icon="@AppIcons.ERI" Link="@Routes.ASSISTANT_ERI"/>
|
||||
</AssistantCategoryBlock>
|
||||
|
||||
<AssistantCategoryBlock Title="@T("AI Studio Development")">
|
||||
|
||||
@@ -57,7 +57,7 @@ public partial class Assistants : MSGComponentBase
|
||||
var audit = await this.AssistantPluginAuditService.RunAuditAsync(assistantPlugin);
|
||||
if (audit.Level is AssistantAuditLevel.UNKNOWN)
|
||||
{
|
||||
await MessageBus.INSTANCE.SendError(new (AppIcons.AGENT, string.Format(this.T("The automatic security audit for the assistant plugin '{0}' failed. Please run it manually from the plugins page."), assistantPlugin.Name)));
|
||||
await MessageBus.INSTANCE.SendError(new (AppIcons.AGENT, string.Format(this.TA("The automatic security audit for the assistant plugin '{0}' failed. Please run it manually from the plugins page."), assistantPlugin.Name)));
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
<MudToolBar WrapContent="false" Gutters="false">
|
||||
@if (this.SettingsManager.ConfigurationData.Workspace.StorageBehavior is WorkspaceStorageBehavior.DISABLE_WORKSPACES)
|
||||
{
|
||||
<MudTooltip Text="@T("Configure your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudTooltip Text="@TA("Configure your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudIconButton Icon="@AppIcons.SETTINGS" OnClick="@(async () => await this.OpenWorkspacesSettingsDialog())"/>
|
||||
</MudTooltip>
|
||||
}
|
||||
@@ -45,18 +45,18 @@
|
||||
<HeaderContent>
|
||||
<MudStack Row="true" AlignItems="AlignItems.Center" StretchItems="StretchItems.Start" Wrap="Wrap.NoWrap" Spacing="1" Class="mb-0 ms-6 mt-2">
|
||||
<MudText Typo="Typo.h6">
|
||||
@T("Your workspaces")
|
||||
@TA("Your workspaces")
|
||||
</MudText>
|
||||
<MudTooltip Text="@T("Configure your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudTooltip Text="@TA("Configure your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudIconButton Icon="@AppIcons.SETTINGS" Size="Size.Medium" OnClick="@(async () => await this.OpenWorkspacesSettingsDialog())"/>
|
||||
</MudTooltip>
|
||||
<MudTooltip Text="@T("Reload your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudTooltip Text="@TA("Reload your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudIconButton Icon="@AppIcons.REFRESH" Size="Size.Medium" OnClick="@this.RefreshWorkspaces"/>
|
||||
</MudTooltip>
|
||||
<MudTooltip Text="@this.WorkspaceSearchTooltip" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudIconButton Icon="@this.WorkspaceSearchIcon" Size="Size.Medium" OnClick="@this.ToggleWorkspaceSearch"/>
|
||||
</MudTooltip>
|
||||
<MudTooltip Text="@T("Hide your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudTooltip Text="@TA("Hide your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudIconButton Size="Size.Medium" Icon="@this.WorkspaceSidebarToggleIcon" Class="me-1" OnClick="@(() => this.ToggleWorkspaceSidebar())"/>
|
||||
</MudTooltip>
|
||||
</MudStack>
|
||||
@@ -73,13 +73,13 @@
|
||||
<HeaderContent>
|
||||
<MudStack Row="true" AlignItems="AlignItems.Center" StretchItems="StretchItems.Start" Wrap="Wrap.NoWrap" Class="d-flex mb-0 ms-6 mt-2">
|
||||
<MudText Typo="Typo.h6">
|
||||
@T("Your workspaces")
|
||||
@TA("Your workspaces")
|
||||
</MudText>
|
||||
<MudSpacer/>
|
||||
<MudTooltip Text="@T("Configure your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudTooltip Text="@TA("Configure your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudIconButton Icon="@AppIcons.SETTINGS" Size="Size.Medium" OnClick="@(async () => await this.OpenWorkspacesSettingsDialog())"/>
|
||||
</MudTooltip>
|
||||
<MudTooltip Text="@T("Reload your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudTooltip Text="@TA("Reload your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudIconButton Icon="@AppIcons.REFRESH" Size="Size.Medium" OnClick="@this.RefreshWorkspaces"/>
|
||||
</MudTooltip>
|
||||
<MudTooltip Text="@this.WorkspaceSearchTooltip" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
@@ -111,13 +111,13 @@
|
||||
<MudStack Row="@true" Style="width: 100%; overflow: hidden; height: 100%; flex-grow: 1; min-height: 0;">
|
||||
<MudPaper Class="border border-solid rounded-lg mb-3 d-flex">
|
||||
<MudStack Row="false" AlignItems="AlignItems.Center" StretchItems="StretchItems.Middle" Wrap="Wrap.NoWrap">
|
||||
<MudTooltip Text="@T("Show your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudTooltip Text="@TA("Show your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudIconButton Size="Size.Medium" Icon="@this.WorkspaceSidebarToggleIcon" OnClick="@(() => this.ToggleWorkspaceSidebar())"/>
|
||||
</MudTooltip>
|
||||
<MudText Typo="Typo.h6" Style="writing-mode: vertical-lr; word-spacing: 0.5em;">
|
||||
@T("Your workspaces")
|
||||
@TA("Your workspaces")
|
||||
</MudText>
|
||||
<MudTooltip Text="@T("Configure your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudTooltip Text="@TA("Configure your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudIconButton Icon="@AppIcons.SETTINGS" Size="Size.Medium" OnClick="@(async () => await this.OpenWorkspacesSettingsDialog())"/>
|
||||
</MudTooltip>
|
||||
</MudStack>
|
||||
@@ -154,13 +154,13 @@
|
||||
<MudDrawerHeader>
|
||||
<MudStack Row="true" AlignItems="AlignItems.Center" StretchItems="StretchItems.Start" Wrap="Wrap.NoWrap" Style="width: 100%;">
|
||||
<MudText Typo="Typo.h6" Class="mr-3">
|
||||
@T("Your workspaces")
|
||||
@TA("Your workspaces")
|
||||
</MudText>
|
||||
|
||||
<MudTooltip Text="@T("Configure your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudTooltip Text="@TA("Configure your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudIconButton Icon="@AppIcons.SETTINGS" Size="Size.Medium" OnClick="@(async () => await this.OpenWorkspacesSettingsDialog())"/>
|
||||
</MudTooltip>
|
||||
<MudTooltip Text="@T("Reload your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudTooltip Text="@TA("Reload your workspaces")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
<MudIconButton Icon="@AppIcons.REFRESH" Size="Size.Medium" OnClick="@this.RefreshWorkspaces"/>
|
||||
</MudTooltip>
|
||||
<MudTooltip Text="@this.WorkspaceSearchTooltip" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
|
||||
|
||||
@@ -101,7 +101,7 @@ public partial class Chat : MSGComponentBase
|
||||
|
||||
private string WorkspaceSearchIcon => this.workspaceSearchVisible ? AppIcons.HIDE_SEARCH : AppIcons.SEARCH;
|
||||
|
||||
private string WorkspaceSearchTooltip => this.workspaceSearchVisible ? T("Hide search") : T("Search your workspaces");
|
||||
private string WorkspaceSearchTooltip => this.workspaceSearchVisible ? T("Hide search") : TA("Search your workspaces");
|
||||
|
||||
private bool AreWorkspacesVisible => this.SettingsManager.ConfigurationData.Workspace.StorageBehavior is not WorkspaceStorageBehavior.DISABLE_WORKSPACES
|
||||
&& ((this.SettingsManager.ConfigurationData.Workspace.DisplayBehavior is WorkspaceDisplayBehavior.TOGGLE_SIDEBAR && this.SettingsManager.ConfigurationData.Workspace.IsSidebarVisible)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<MudStack Row="true" AlignItems="AlignItems.Center">
|
||||
<MudText Typo="Typo.h5">@T("Background embeddings")</MudText>
|
||||
<MudSpacer/>
|
||||
<MudTooltip Text="@T("Manage your data sources")" Placement="Placement.Top">
|
||||
<MudTooltip Text="@TA("Manage your data sources")" Placement="Placement.Top">
|
||||
<MudIconButton Icon="@AppIcons.SETTINGS" OnClick="@this.OpenDataSourceSettings"/>
|
||||
</MudTooltip>
|
||||
</MudStack>
|
||||
@@ -15,7 +15,7 @@
|
||||
@T("AI Studio indexes local RAG data sources in the background. Finished files stay recorded so unchanged files can be skipped after a restart, while added or deleted files are detected during the next run. The same applies to documents without readable text, such as scanned pages: AI Studio remembers them and reads them again only once they change.")
|
||||
</MudText>
|
||||
<MudText Typo="Typo.body1" Class="mt-2">
|
||||
@T("AI Studio indexes large data sources in steps of a few minutes, so that your other data sources get their turn in between.")
|
||||
@TA("AI Studio indexes large data sources in steps of a few minutes, so that your other data sources get their turn in between.")
|
||||
@this.PauseBetweenStepsText
|
||||
</MudText>
|
||||
@if (this.AreMailboxesEnabled)
|
||||
@@ -177,7 +177,7 @@
|
||||
<MudTd>
|
||||
@if (CanShowInFileManager(status, context))
|
||||
{
|
||||
<MudTooltip Text="@T("Show this file in the file browser of your system")">
|
||||
<MudTooltip Text="@TA("Show this file in the file browser of your system")">
|
||||
<MudIconButton Icon="@AppIcons.FOLDER_OPEN" Color="Color.Info" Size="Size.Small" OnClick="@(async () => await this.ShowInFileManager(context))"/>
|
||||
</MudTooltip>
|
||||
}
|
||||
@@ -233,7 +233,7 @@
|
||||
<MudTd>
|
||||
@if (CanShowInFileManager(status, context.FilePath))
|
||||
{
|
||||
<MudTooltip Text="@T("Show this file in the file browser of your system")">
|
||||
<MudTooltip Text="@TA("Show this file in the file browser of your system")">
|
||||
<MudIconButton Icon="@AppIcons.FOLDER_OPEN" Color="Color.Info" Size="Size.Small" OnClick="@(async () => await this.ShowInFileManager(context.FilePath))"/>
|
||||
</MudTooltip>
|
||||
}
|
||||
|
||||
@@ -248,7 +248,7 @@ public partial class Embeddings : MSGComponentBase
|
||||
|
||||
private string GetSkippedText(DataSourceEmbeddingStatus status) => IsMailbox(status)
|
||||
? string.Format(T("Skipped mails: {0}."), this.FormatNumber(status.PermanentlySkippedDocuments))
|
||||
: string.Format(T("Skipped files: {0}. Open a group below to see why and what you can do."), this.FormatNumber(status.SkippedDocuments));
|
||||
: string.Format(TA("Skipped files: {0}. Open a group below to see why and what you can do."), this.FormatNumber(status.SkippedDocuments));
|
||||
|
||||
private string GetFailedText(DataSourceEmbeddingStatus status) => IsMailbox(status)
|
||||
? string.Format(T("Failed mails: {0}"), this.FormatNumber(status.FailedDocuments))
|
||||
@@ -358,7 +358,7 @@ public partial class Embeddings : MSGComponentBase
|
||||
DataSourceEmbeddingIgnoreReason.TOO_LARGE => new IgnoredFileCause(
|
||||
0,
|
||||
T("Too large"),
|
||||
string.Format(T("These files match the data source patterns, but they are larger than its limit of {0}. You can raise the limit in the expert settings of the data source."), this.GetMaxFileSizeText(status)),
|
||||
string.Format(TA("These files match the data source patterns, but they are larger than its limit of {0}. You can raise the limit in the expert settings of the data source."), this.GetMaxFileSizeText(status)),
|
||||
AppIcons.FILE_SIZE,
|
||||
Color.Warning,
|
||||
true,
|
||||
@@ -366,7 +366,7 @@ public partial class Embeddings : MSGComponentBase
|
||||
DataSourceEmbeddingIgnoreReason.TRANSCRIPTION_PROVIDER_MISSING => new IgnoredFileCause(
|
||||
0,
|
||||
T("No transcription provider"),
|
||||
T("These audio or video files match the data source patterns, but no transcription provider is configured that AI Studio may use. Once you choose one in the settings, AI Studio transcribes the files and adds their text to the index."),
|
||||
TA("These audio or video files match the data source patterns, but no transcription provider is configured that AI Studio may use. Once you choose one in the settings, AI Studio transcribes the files and adds their text to the index."),
|
||||
AppIcons.MICROPHONE_OFF,
|
||||
Color.Warning,
|
||||
false,
|
||||
@@ -374,7 +374,7 @@ public partial class Embeddings : MSGComponentBase
|
||||
DataSourceEmbeddingIgnoreReason.TRANSCRIPTION_PROVIDER_NOT_ALLOWED => new IgnoredFileCause(
|
||||
0,
|
||||
T("Transcription provider not allowed"),
|
||||
T("These audio or video files match the data source patterns, but your transcription provider does not meet the confidence level this data source requires. Choose another transcription provider, or change the confidence level of the data source."),
|
||||
TA("These audio or video files match the data source patterns, but your transcription provider does not meet the confidence level this data source requires. Choose another transcription provider, or change the confidence level of the data source."),
|
||||
AppIcons.SECURITY_BLOCKED,
|
||||
Color.Warning,
|
||||
true,
|
||||
@@ -555,7 +555,7 @@ public partial class Embeddings : MSGComponentBase
|
||||
return;
|
||||
|
||||
if (!await this.DataSourceEmbeddingService.ApprovePendingMailRemovalAsync(status.DataSourceId, removalCount))
|
||||
await this.MessageBus.SendWarning(new(AppIcons.REMOVE_FROM_INDEX, T("Your agreement could not be recorded: either the number of mails to remove changed in the meantime, or the index cannot be reached. AI Studio asks you again after the next sync.")));
|
||||
await this.MessageBus.SendWarning(new(AppIcons.REMOVE_FROM_INDEX, TA("Your agreement could not be recorded: either the number of mails to remove changed in the meantime, or the index cannot be reached. AI Studio asks you again after the next sync.")));
|
||||
|
||||
this.ReloadStatuses();
|
||||
await this.InvokeAsync(this.StateHasChanged);
|
||||
|
||||
@@ -24,14 +24,14 @@
|
||||
@T("Welcome to MindWork AI Studio!")
|
||||
</MudText>
|
||||
<MudText Typo="Typo.body1" Class="mb-3" Style="text-align: justify; hyphens: auto;">
|
||||
@T("Thank you for considering MindWork AI Studio for your AI needs. This app is designed to help you harness the power of Large Language Models (LLMs). Please note that this app doesn't come with an integrated LLM. Instead, you will need to bring an API key from a suitable provider.")
|
||||
@TA("Thank you for considering MindWork AI Studio for your AI needs. This app is designed to help you harness the power of Large Language Models (LLMs). Please note that this app doesn't come with an integrated LLM. Instead, you will need to bring an API key from a suitable provider.")
|
||||
</MudText>
|
||||
<MudText Typo="Typo.body1" Class="mb-3">
|
||||
@T("Here's what makes MindWork AI Studio stand out:")
|
||||
</MudText>
|
||||
<MudTextList Icon="@AppIcons.CHECKLIST_ITEM" Clickable="@true" Items="@this.itemsAdvantages" Class="mb-3"/>
|
||||
<MudText Typo="Typo.body1" Class="mb-3">
|
||||
@T("We hope you enjoy using MindWork AI Studio to bring your AI projects to life!")
|
||||
@TA("We hope you enjoy using MindWork AI Studio to bring your AI projects to life!")
|
||||
</MudText>
|
||||
</ExpansionPanel>
|
||||
}
|
||||
|
||||
@@ -90,17 +90,17 @@ public partial class Home : MSGComponentBase
|
||||
{
|
||||
this.itemsAdvantages = [
|
||||
new(this.T("Free of charge"), this.T("The app is free to use, both for personal and commercial purposes.")),
|
||||
new(this.T("Democratization of AI"), this.T("We want to contribute to the democratization of AI. MindWork AI Studio runs even on low-cost hardware, including computers around 100 EUR such as Raspberry Pi. This makes the app and its full feature set accessible to people and families with limited budgets. You can start with local LLMs or use affordable cloud models.")),
|
||||
new(this.T("Independence"), this.T("You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT-6, GPT-5, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hetzner (experimental), IONOS, LiteLLM, Requesty, Hugging Face, Groq, Fireworks, and self-hosted models using vLLM, llama.cpp, ollama, LM Studio, or llmman. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities.")),
|
||||
new(this.T("Assistants"), this.T("You just want to quickly translate a text? AI Studio has so-called assistants for such and other tasks. No prompting is necessary when working with these assistants.")),
|
||||
new(T("Tools"), T("AI models can use tools on their own, such as Web Search, Read Web Page, or Search Confluence. When you ask something a model cannot answer from what it knows, it looks it up and answers with the sources it used. You decide which tools a model may use, and you can watch it work.")),
|
||||
new(T("Your own data"), T("The AI can answer from your own documents. Add folders and files from your computer, or your organization's data through ERI, as data sources, and the AI searches them whenever a question calls for it and names the passages it used. AI Studio keeps the index on your computer, and you choose the embedding provider, including one you host yourself. As a prototype, the AI can also search and read your mailboxes. Both are preview features, which you enable in the app settings first.")),
|
||||
new(T("Voice input"), T("Dictate your messages instead of typing them, and have your recordings as well as audio and video files transcribed. You choose the transcription provider, including one you host yourself.")),
|
||||
new(this.T("Democratization of AI"), this.TA("We want to contribute to the democratization of AI. MindWork AI Studio runs even on low-cost hardware, including computers around 100 EUR such as Raspberry Pi. This makes the app and its full feature set accessible to people and families with limited budgets. You can start with local LLMs or use affordable cloud models.")),
|
||||
new(this.T("Independence"), this.TA("You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT-6, GPT-5, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hetzner (experimental), IONOS, LiteLLM, Requesty, Hugging Face, Groq, Fireworks, and self-hosted models using vLLM, llama.cpp, ollama, LM Studio, or llmman. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, and most German and many international universities.")),
|
||||
new(this.T("Assistants"), this.TA("You just want to quickly translate a text? AI Studio has so-called assistants for such and other tasks. No prompting is necessary when working with these assistants.")),
|
||||
new(T("Tools"), TA("AI models can use tools on their own, such as Web Search, Read Web Page, or Search Confluence. When you ask something a model cannot answer from what it knows, it looks it up and answers with the sources it used. You decide which tools a model may use, and you can watch it work.")),
|
||||
new(TA("Your own data"), TA("The AI can answer from your own documents. Add folders and files from your computer, or your organization's data through ERI, as data sources, and the AI searches them whenever a question calls for it and names the passages it used. AI Studio keeps the index on your computer, and you choose the embedding provider, including one you host yourself. As a prototype, the AI can also search and read your mailboxes. Both are preview features, which you enable in the app settings first.")),
|
||||
new(T("Voice input"), TA("Dictate your messages instead of typing them, and have your recordings as well as audio and video files transcribed. You choose the transcription provider, including one you host yourself.")),
|
||||
new(this.T("Unrestricted usage"), this.T("Unlike services like ChatGPT, which impose limits after intensive use, MindWork AI Studio offers unlimited usage through the providers API.")),
|
||||
new(this.T("Cost-effective"), this.T("You only pay for what you use, which can be cheaper than monthly subscription services like ChatGPT Plus, especially if used infrequently. But beware, here be dragons: For extremely intensive usage, the API costs can be significantly higher. Unfortunately, providers currently do not offer a way to display current costs in the app. Therefore, check your account with the respective provider to see how your costs are developing. When available, use prepaid and set a cost limit.")),
|
||||
new(this.T("Privacy"), this.T("You can control which providers receive your data using the provider confidence settings. For example, you can set different protection levels for writing emails compared to general chats, etc. Additionally, most providers guarantee that they won't use your data to train new AI systems.")),
|
||||
new(T("Enterprise IT"), T("Your IT department can manage AI Studio centrally: roll out providers, assistants, chat templates, and tools, set defaults, or lock settings for the whole organization.")),
|
||||
new(this.T("Flexibility"), this.T("Choose the provider and model best suited for your current task.")),
|
||||
new(this.T("Cost-effective"), this.TA("You only pay for what you use, which can be cheaper than monthly subscription services like ChatGPT Plus, especially if used infrequently. But beware, here be dragons: For extremely intensive usage, the API costs can be significantly higher. Unfortunately, providers currently do not offer a way to display current costs in the app. Therefore, check your account with the respective provider to see how your costs are developing. When available, use prepaid and set a cost limit.")),
|
||||
new(this.T("Privacy"), this.TA("You can control which providers receive your data using the provider confidence settings. For example, you can set different protection levels for writing emails compared to general chats, etc. Additionally, most providers guarantee that they won't use your data to train new AI systems.")),
|
||||
new(T("Enterprise IT"), TA("Your IT department can manage AI Studio centrally: roll out providers, assistants, chat templates, and tools, set defaults, or lock settings for the whole organization.")),
|
||||
new(this.T("Flexibility"), this.TA("Choose the provider and model best suited for your current task.")),
|
||||
new(this.T("No bloatware"), this.T("The app requires minimal storage for installation and operates with low memory usage. Additionally, it has a minimal impact on system resources, which is beneficial for battery life.")),
|
||||
];
|
||||
}
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
@if (this.testConfigPlugins.Count > 0)
|
||||
{
|
||||
<MudText Typo="Typo.body1" Class="mt-2">
|
||||
@T("A test configuration is active. It acts like a configuration of your organization and may, for example, approve assistant plugins. AI Studio removes it the next time you start the app.")
|
||||
@TA("A test configuration is active. It acts like a configuration of your organization and may, for example, approve assistant plugins. AI Studio removes it the next time you start the app.")
|
||||
</MudText>
|
||||
@foreach (var testConfigPlugin in this.testConfigPlugins)
|
||||
{
|
||||
@@ -173,13 +173,13 @@
|
||||
HeaderText="@testConfigPlugin.Name"
|
||||
Items="@this.BuildTestConfigurationItems(testConfigPlugin)"
|
||||
ShowWarning="@true"
|
||||
WarningText="@T("Test configuration: nobody deployed this configuration. It is valid until you restart AI Studio.")"/>
|
||||
WarningText="@TA("Test configuration: nobody deployed this configuration. It is valid until you restart AI Studio.")"/>
|
||||
}
|
||||
}
|
||||
else if (PluginFactory.RemovedTestConfigurationsAtStartup > 0)
|
||||
{
|
||||
<MudText Typo="Typo.body1" Class="mt-2">
|
||||
@string.Format(T("AI Studio removed {0} test configuration(s) while starting. A test configuration is valid for one session: place it again while AI Studio is running."), PluginFactory.RemovedTestConfigurationsAtStartup)
|
||||
@string.Format(TA("AI Studio removed {0} test configuration(s) while starting. A test configuration is valid for one session: place it again while AI Studio is running."), PluginFactory.RemovedTestConfigurationsAtStartup)
|
||||
</MudText>
|
||||
}
|
||||
|
||||
@@ -230,22 +230,22 @@
|
||||
<ExpansionPanel HeaderIcon="@AppIcons.GITHUB" HeaderText="@T("Community & Code")">
|
||||
<MudList T="string" Class="mb-1">
|
||||
<MudListItem T="string" Icon="@AppIcons.WEBSITE" Target="_blank" Href="https://mindworkai.org/">
|
||||
@T("Discover MindWork AI's mission and vision on our official homepage.")
|
||||
@TA("Discover MindWork AI's mission and vision on our official homepage.")
|
||||
</MudListItem>
|
||||
<MudListItem T="string" Icon="@AppIcons.GITHUB" Target="_blank" Href="https://github.com/MindWorkAI/AI-Studio">
|
||||
@T("Browse AI Studio's source code on GitHub — we welcome your contributions.")
|
||||
@TA("Browse AI Studio's source code on GitHub — we welcome your contributions.")
|
||||
</MudListItem>
|
||||
<MudListItem T="string" Icon="@AppIcons.ERI" Target="_blank" Href="https://github.com/MindWorkAI/ERI">
|
||||
@T("Connect AI Studio to your organization's data with our External Retrieval Interface (ERI).")
|
||||
@TA("Connect AI Studio to your organization's data with our External Retrieval Interface (ERI).")
|
||||
</MudListItem>
|
||||
<MudListItem T="string" Icon="@AppIcons.ROADMAP" Target="_blank" Href="https://github.com/orgs/MindWorkAI/projects/2/views/3">
|
||||
@T("View our project roadmap and help shape AI Studio's future development.")
|
||||
@TA("View our project roadmap and help shape AI Studio's future development.")
|
||||
</MudListItem>
|
||||
<MudListItem T="string" Icon="@AppIcons.BUG" Target="_blank" Href="https://github.com/MindWorkAI/AI-Studio/issues">
|
||||
@T("Did you find a bug or are you experiencing issues? Report your concern here.")
|
||||
@TA("Did you find a bug or are you experiencing issues? Report your concern here.")
|
||||
</MudListItem>
|
||||
<MudListItem T="string" Icon="@AppIcons.IDEA" Target="_blank" Href="https://github.com/MindWorkAI/Planning/issues">
|
||||
@T("Have feature ideas? Submit suggestions for future AI Studio enhancements.")
|
||||
@TA("Have feature ideas? Submit suggestions for future AI Studio enhancements.")
|
||||
</MudListItem>
|
||||
</MudList>
|
||||
</ExpansionPanel>
|
||||
@@ -275,7 +275,7 @@
|
||||
</MudJustifiedText>
|
||||
|
||||
<MudJustifiedText Class="mb-3" Typo="Typo.body1">
|
||||
@T("You can view and filter these files directly in AI Studio with the Log Viewer. Click a path to copy it to the clipboard, or use the folder button to open its location in your file manager. You can also open the files with a text editor.")
|
||||
@TA("You can view and filter these files directly in AI Studio with the Log Viewer. Click a path to copy it to the clipboard, or use the folder button to open its location in your file manager. You can also open the files with a text editor.")
|
||||
</MudJustifiedText>
|
||||
|
||||
<MudButton Variant="Variant.Filled"
|
||||
@@ -328,7 +328,7 @@
|
||||
<DataBackupPanel/>
|
||||
</ExpansionPanel>
|
||||
|
||||
<ExpansionPanel HeaderIcon="@AppIcons.FOLDERS" HeaderText="@T("Your Data Folders")">
|
||||
<ExpansionPanel HeaderIcon="@AppIcons.FOLDERS" HeaderText="@TA("Your Data Folders")">
|
||||
<DataFolders/>
|
||||
</ExpansionPanel>
|
||||
|
||||
@@ -367,7 +367,7 @@
|
||||
<ThirdPartyComponent Name="Rustls" Developer="Joe Birr-Pixton, Dirkjan Ochtman, Daniel McCarney, Brian Smith, Jacob Hoffman-Andrews, Jorge Aparicio & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/rustls/rustls/blob/main/LICENSE-MIT" RepositoryUrl="https://github.com/rustls/rustls" UseCase="@T("Rustls helps secure the internal connection between the app's user interface and the Rust runtime. This protects the local communication that AI Studio needs while it is running.")"/>
|
||||
<ThirdPartyComponent Name="serde" Developer="Erick Tryzelaar, David Tolnay & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/serde-rs/serde/blob/master/LICENSE-MIT" RepositoryUrl="https://github.com/serde-rs/serde" UseCase="@T("Now we have multiple systems, some developed in .NET and others in Rust. The data format JSON is responsible for translating data between both worlds (called data serialization and deserialization). Serde takes on this task in the Rust world. The counterpart in the .NET world is an integral part of .NET and is located in System.Text.Json.")"/>
|
||||
<ThirdPartyComponent Name="strum_macros" Developer="Peter Glotfelty & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/Peternator7/strum/blob/master/LICENSE" RepositoryUrl="https://github.com/Peternator7/strum" UseCase="@T("This crate provides derive macros for Rust enums, which we use to reduce boilerplate when implementing string conversions and metadata for runtime types. This is helpful for the communication between our Rust and .NET systems.")"/>
|
||||
<ThirdPartyComponent Name="keyring-core" Developer="Daniel Brotsky & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/open-source-cooperative/keyring-core/blob/main/LICENSE-MIT" RepositoryUrl="https://github.com/open-source-cooperative/keyring-core" UseCase="@T("AI Studio stores secrets like API keys in your operating system’s secure credential store. The keyring-core library handles this by connecting to macOS Keychain, Windows Credential Manager, and Linux Secret Service.")"/>
|
||||
<ThirdPartyComponent Name="keyring-core" Developer="Daniel Brotsky & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/open-source-cooperative/keyring-core/blob/main/LICENSE-MIT" RepositoryUrl="https://github.com/open-source-cooperative/keyring-core" UseCase="@TA("AI Studio stores secrets like API keys in your operating system’s secure credential store. The keyring-core library handles this by connecting to macOS Keychain, Windows Credential Manager, and Linux Secret Service.")"/>
|
||||
<ThirdPartyComponent Name="dbus-secret-service" Developer="Daniel Brotsky, Walther Chen, ComplexSpaces, Rasmus Thomsen & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/open-source-cooperative/dbus-secret-service/blob/main/LICENSE-MIT" RepositoryUrl="https://github.com/open-source-cooperative/dbus-secret-service" UseCase="@T("On Linux, this library communicates with the FreeDesktop Secret Service. AI Studio uses its structured errors to provide helpful guidance when secure credential storage is unavailable or not configured correctly.")"/>
|
||||
<ThirdPartyComponent Name="arboard" Developer="Artur Kovacs, Avi Weinstock, 1Password & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/1Password/arboard/blob/master/LICENSE-MIT.txt" RepositoryUrl="https://github.com/1Password/arboard" UseCase="@T("To be able to use the responses of the LLM in other apps, we often use the clipboard of the respective operating system. Unfortunately, in .NET there is no solution that works with all operating systems. Therefore, I have opted for this library in Rust. This way, data transfer to other apps works on every system.")"/>
|
||||
<ThirdPartyComponent Name="tokio" Developer="Alex Crichton, Carl Lerche, Alice Ryhl, Taiki Endo, Ivan Petkov, Eliza Weisman, Lucio Franco & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/tokio-rs/tokio/blob/master/LICENSE" RepositoryUrl="https://github.com/tokio-rs/tokio" UseCase="@T("Code in the Rust language can be specified as synchronous or asynchronous. Unlike .NET and the C# language, Rust cannot execute asynchronous code by itself. Rust requires support in the form of an executor for this. Tokio is one such executor.")"/>
|
||||
@@ -383,8 +383,8 @@
|
||||
<ThirdPartyComponent Name="Rust Crypto" Developer="Artyom Pavlov, Tony Arcieri, Brian Warner, Arthur Gautier, Vlad Filippov, Friedel Ziegelmayer, Nicolas Stalder & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/RustCrypto/traits/blob/master/cipher/LICENSE-MIT" RepositoryUrl="https://github.com/RustCrypto" UseCase="@T("When transferring sensitive data between Rust runtime and .NET app, we encrypt the data. We use some libraries from the Rust Crypto project for this purpose: cipher, aes, cbc, pbkdf2, hmac, and sha2. We are thankful for the great work of the Rust Crypto project.")"/>
|
||||
<ThirdPartyComponent Name="rcgen" Developer="RustTLS developers, est31 & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/rustls/rcgen/blob/main/LICENSE" RepositoryUrl="https://github.com/rustls/rcgen" UseCase="@T("For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose.")"/>
|
||||
<ThirdPartyComponent Name="subtle" Developer="Isis Lovecruft, Henry de Valence, Tony Arcieri, Sean Bowe, Amber Sprenkels, Artyom Pavlov & Open Source Community" LicenseName="BSD-3-Clause" LicenseUrl="https://github.com/dalek-cryptography/subtle/blob/main/LICENSE" RepositoryUrl="https://github.com/dalek-cryptography/subtle" UseCase="@T("The user interface proves itself to the runtime with a secret token on every request. subtle compares this token in constant time, so the duration of a check does not reveal how much of a guessed token was right.")"/>
|
||||
<ThirdPartyComponent Name="windows-rs" Developer="Microsoft, Kenny Kerr, Ryan Levick, Rafael Rivera, sivadeilra, Marijn Suijten & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/microsoft/windows-rs/blob/master/license-mit" RepositoryUrl="https://github.com/microsoft/windows-rs" UseCase="@T("The windows-rs project provides access to Windows APIs from Rust. We use several libraries from this project: windows-registry is used to read the desired configuration in Windows enterprise environments. The windows and windows-collections libraries are used to open the native Windows share dialog, e.g., when you share a plugin with others.")"/>
|
||||
<ThirdPartyComponent Name="objc2" Developer="Steven Sheldon, Mads Marquart, silvanshade, Dzmitry Malyshau, Felix Nemo Kaaman, adamnemecek, Samuel Sleight, Paul Mabileau & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/madsmtm/objc2/blob/main/LICENSE-MIT.txt" RepositoryUrl="https://github.com/madsmtm/objc2" UseCase="@T("The objc2 project provides access to Apple's Objective-C frameworks from Rust. On macOS, we use the libraries objc2, objc2-app-kit, and objc2-foundation to open the native macOS share sheet, e.g., when you share a plugin with others.")"/>
|
||||
<ThirdPartyComponent Name="windows-rs" Developer="Microsoft, Kenny Kerr, Ryan Levick, Rafael Rivera, sivadeilra, Marijn Suijten & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/microsoft/windows-rs/blob/master/license-mit" RepositoryUrl="https://github.com/microsoft/windows-rs" UseCase="@TA("The windows-rs project provides access to Windows APIs from Rust. We use several libraries from this project: windows-registry is used to read the desired configuration in Windows enterprise environments. The windows and windows-collections libraries are used to open the native Windows share dialog, e.g., when you share a plugin with others.")"/>
|
||||
<ThirdPartyComponent Name="objc2" Developer="Steven Sheldon, Mads Marquart, silvanshade, Dzmitry Malyshau, Felix Nemo Kaaman, adamnemecek, Samuel Sleight, Paul Mabileau & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/madsmtm/objc2/blob/main/LICENSE-MIT.txt" RepositoryUrl="https://github.com/madsmtm/objc2" UseCase="@TA("The objc2 project provides access to Apple's Objective-C frameworks from Rust. On macOS, we use the libraries objc2, objc2-app-kit, and objc2-foundation to open the native macOS share sheet, e.g., when you share a plugin with others.")"/>
|
||||
<ThirdPartyComponent Name="file-format" Developer="Mickaël Malécot & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/mmalecot/file-format/blob/main/LICENSE-MIT" RepositoryUrl="https://github.com/mmalecot/file-format" UseCase="@T("This library identifies files by their content. It is used for document streaming and as the first safety and media classification step before local audio processing.")"/>
|
||||
<ThirdPartyComponent Name="chardetng" Developer="Henri Sivonen & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/hsivonen/chardetng/blob/main/LICENSE-MIT" RepositoryUrl="https://github.com/hsivonen/chardetng" UseCase="@T("Text files are not always saved in the same encoding: files written on Windows often use a legacy one. chardetng recognizes which encoding a text file uses, so AI Studio can read it instead of rejecting it.")"/>
|
||||
<ThirdPartyComponent Name="encoding_rs" Developer="Henri Sivonen, M. Larsen, kornelski, Manish Goregaokar & Open Source Community" LicenseName="MIT & BSD-3-Clause" LicenseUrl="https://github.com/hsivonen/encoding_rs/blob/main/COPYRIGHT" RepositoryUrl="https://github.com/hsivonen/encoding_rs" UseCase="@T("Once the encoding of a text file is known, encoding_rs turns its content into the text AI Studio works with. Together with chardetng, this lets AI Studio read text, CSV, and similar files no matter which encoding they were saved in.")"/>
|
||||
@@ -399,15 +399,15 @@
|
||||
<ThirdPartyComponent Name="whoami" Developer="Ardaku Systems, Jeryn Aldaron Lau, Chase Johnson & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/ardaku/whoami/blob/stable/LICENSE_MIT" RepositoryUrl="https://github.com/ardaku/whoami" UseCase="@T("This library is used by the Rust runtime to read the current user's username, e.g. when an organization-managed ERI server uses the OS username for authentication.")"/>
|
||||
<ThirdPartyComponent Name="sysinfo" Developer="Guillaume Gomez & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/GuillaumeGomez/sysinfo/blob/main/LICENSE" RepositoryUrl="https://github.com/GuillaumeGomez/sysinfo" UseCase="@T("This library is used to manage sidecar processes and to ensure that stale or zombie sidecars are detected and terminated.")"/>
|
||||
<ThirdPartyComponent Name="tempfile" Developer="Steven Allen, Ashley Mannix & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/Stebalien/tempfile/blob/master/LICENSE-MIT" RepositoryUrl="https://github.com/Stebalien/tempfile" UseCase="@T("This library is used to create temporary folders in runtime tests and supporting filesystem operations.")"/>
|
||||
<ThirdPartyComponent Name="Lua-CSharp" Developer="Yusuke Nakada & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/nuskey8/Lua-CSharp/blob/main/LICENSE" RepositoryUrl="https://github.com/nuskey8/Lua-CSharp" UseCase="@T("We use Lua as the language for plugins. Lua-CSharp lets Lua scripts communicate with AI Studio and vice versa. Thank you, Yusuke Nakada, for this great library.")" />
|
||||
<ThirdPartyComponent Name="Lua-CSharp" Developer="Yusuke Nakada & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/nuskey8/Lua-CSharp/blob/main/LICENSE" RepositoryUrl="https://github.com/nuskey8/Lua-CSharp" UseCase="@TA("We use Lua as the language for plugins. Lua-CSharp lets Lua scripts communicate with AI Studio and vice versa. Thank you, Yusuke Nakada, for this great library.")" />
|
||||
<ThirdPartyComponent Name="DeepSeek-V3.2 Tokenizer" Developer="DeepSeek-AI" LicenseName="MIT" LicenseUrl="https://huggingface.co/datasets/choosealicense/licenses/blob/main/markdown/mit.md" RepositoryUrl="https://huggingface.co/deepseek-ai/DeepSeek-V3.2/tree/main" UseCase="@T("We use the DeepSeek Tokenizer to estimate the number of tokens an input will generate.")" />
|
||||
<ThirdPartyComponent Name="Tokenizer" Developer="Anthony Moi, Nicolas Patry, Pierric Cistac, Arthur Zucker & Open Source Community" LicenseName="Apache-2.0" LicenseUrl="https://github.com/huggingface/tokenizers/blob/main/LICENSE" RepositoryUrl="https://github.com/huggingface/tokenizers" UseCase="@T("The Tokenizer library serves as the base framework for integrating the DeepSeek tokenizer.")" />
|
||||
<ThirdPartyComponent Name="HtmlAgilityPack" Developer="ZZZ Projects & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/zzzprojects/html-agility-pack/blob/master/LICENSE" RepositoryUrl="https://github.com/zzzprojects/html-agility-pack" UseCase="@T("We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant.")"/>
|
||||
<ThirdPartyComponent Name="ReverseMarkdown" Developer="Babu Annamalai & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/mysticmind/reversemarkdown-net/blob/master/LICENSE" RepositoryUrl="https://github.com/mysticmind/reversemarkdown-net" UseCase="@T("This library is used to convert HTML to Markdown. This is necessary, e.g., when you provide a URL as input for an assistant.")"/>
|
||||
<ThirdPartyComponent Name="AngouriMath" Developer='WhiteBlackGoose, Rafael Vuijk, Hadrian Tang, Alexander Potapov, darkfader, Aleksei Akhundov, KuhakuPixel, Goldey2, Joshua "Yoshi" Askharoun, Marmota & Open Source Community' LicenseName="MIT" LicenseUrl="https://github.com/ASC-Community/AngouriMath/blob/master/LICENSE.md" RepositoryUrl="https://github.com/asc-community/AngouriMath" UseCase="@T("The Mathematics tools use AngouriMath to calculate exactly and to work with formulas: it keeps fractions exact, simplifies, differentiates, and integrates expressions, and solves equations, all locally on your computer.")"/>
|
||||
<ThirdPartyComponent Name="MailKit" Developer="Jeffrey Stedfast, Jonathan Dick, Miguel de Icaza, rklec, Steffen Kieß & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/jstedfast/MailKit/blob/master/LICENSE" RepositoryUrl="https://github.com/jstedfast/MailKit" UseCase="@T("MailKit connects AI Studio to the mail servers of your mailboxes over IMAP. This is how AI Studio keeps a local index of your mails, which the AI can search, read, and count.")"/>
|
||||
<ThirdPartyComponent Name="MimeKit" Developer="Jeffrey Stedfast, Jason Nelson, Federico Di Gregorio, Joe Shook, Jonathan Dick, Miguel de Icaza, Peter Dettman & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/jstedfast/MimeKit/blob/master/LICENSE" RepositoryUrl="https://github.com/jstedfast/MimeKit" UseCase="@T("MimeKit reads the mails in your mailboxes, including their senders, recipients, and attachments, so that AI Studio can add them to the local index of your mailboxes.")"/>
|
||||
<ThirdPartyComponent Name="Open XML SDK" Developer="Microsoft, Taylor Southwick, Tom Jebo, Michael Bowen, Eric White, Thomas Barnekow, Alfred Hellstern, lindexi, Simon Cropp & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/dotnet/Open-XML-SDK/blob/main/LICENSE" RepositoryUrl="https://github.com/dotnet/Open-XML-SDK" UseCase="@T("The Slide Assistant uses the Open XML SDK to read your PowerPoint templates and to write the presentations it plans with you as PowerPoint files.")"/>
|
||||
<ThirdPartyComponent Name="HtmlAgilityPack" Developer="ZZZ Projects & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/zzzprojects/html-agility-pack/blob/master/LICENSE" RepositoryUrl="https://github.com/zzzprojects/html-agility-pack" UseCase="@TA("We use the HtmlAgilityPack to extract content from the web. This is necessary, e.g., when you provide a URL as input for an assistant.")"/>
|
||||
<ThirdPartyComponent Name="ReverseMarkdown" Developer="Babu Annamalai & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/mysticmind/reversemarkdown-net/blob/master/LICENSE" RepositoryUrl="https://github.com/mysticmind/reversemarkdown-net" UseCase="@TA("This library is used to convert HTML to Markdown. This is necessary, e.g., when you provide a URL as input for an assistant.")"/>
|
||||
<ThirdPartyComponent Name="AngouriMath" Developer='WhiteBlackGoose, Rafael Vuijk, Hadrian Tang, Alexander Potapov, darkfader, Aleksei Akhundov, KuhakuPixel, Goldey2, Joshua "Yoshi" Askharoun, Marmota & Open Source Community' LicenseName="MIT" LicenseUrl="https://github.com/ASC-Community/AngouriMath/blob/master/LICENSE.md" RepositoryUrl="https://github.com/asc-community/AngouriMath" UseCase="@TA("The Mathematics tools use AngouriMath to calculate exactly and to work with formulas: it keeps fractions exact, simplifies, differentiates, and integrates expressions, and solves equations, all locally on your computer.")"/>
|
||||
<ThirdPartyComponent Name="MailKit" Developer="Jeffrey Stedfast, Jonathan Dick, Miguel de Icaza, rklec, Steffen Kieß & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/jstedfast/MailKit/blob/master/LICENSE" RepositoryUrl="https://github.com/jstedfast/MailKit" UseCase="@TA("MailKit connects AI Studio to the mail servers of your mailboxes over IMAP. This is how AI Studio keeps a local index of your mails, which the AI can search, read, and count.")"/>
|
||||
<ThirdPartyComponent Name="MimeKit" Developer="Jeffrey Stedfast, Jason Nelson, Federico Di Gregorio, Joe Shook, Jonathan Dick, Miguel de Icaza, Peter Dettman & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/jstedfast/MimeKit/blob/master/LICENSE" RepositoryUrl="https://github.com/jstedfast/MimeKit" UseCase="@TA("MimeKit reads the mails in your mailboxes, including their senders, recipients, and attachments, so that AI Studio can add them to the local index of your mailboxes.")"/>
|
||||
<ThirdPartyComponent Name="Open XML SDK" Developer="Microsoft, Taylor Southwick, Tom Jebo, Michael Bowen, Eric White, Thomas Barnekow, Alfred Hellstern, lindexi, Simon Cropp & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/dotnet/Open-XML-SDK/blob/main/LICENSE" RepositoryUrl="https://github.com/dotnet/Open-XML-SDK" UseCase="@TA("The Slide Assistant uses the Open XML SDK to read your PowerPoint templates and to write the presentations it plans with you as PowerPoint files.")"/>
|
||||
<ThirdPartyComponent Name="wikEd diff" Developer="Cacycle & Open Source Community" LicenseName="None (public domain)" LicenseUrl="https://en.wikipedia.org/wiki/User:Cacycle/diff#License" RepositoryUrl="https://en.wikipedia.org/wiki/User:Cacycle/diff" UseCase="@T("This library is used to display the differences between two texts. This is necessary, e.g., for the grammar and spelling assistant.")"/>
|
||||
<ThirdPartyComponent Name="CodeJar" Developer="Anton Medvedev" LicenseName="MIT" LicenseUrl="https://github.com/antonmedv/codejar/blob/master/LICENSE" RepositoryUrl="https://github.com/antonmedv/codejar/" UseCase="@T("CodeJar is a lightweight embeddable code editor for the browser.")"/>
|
||||
<ThirdPartyComponent Name="Simple Icons" Developer="Peter Noble, Álvaro Mondéjar Rubio, LitoMore, Eric Cornelissen, Florian Bernhart, Alexandre Paradis, Dan Leech & Open Source Community" LicenseName="CC0-1.0" LicenseUrl="https://github.com/simple-icons/simple-icons/blob/16.21.0/LICENSE.md" RepositoryUrl="https://github.com/simple-icons/simple-icons" UseCase="@T("Several of the provider logos in AI Studio use the icon paths and brand colors published by the Simple Icons project, which releases them into the public domain under CC0. The trademarks themselves are not part of that release and remain the property of their respective owners.")"/>
|
||||
@@ -420,13 +420,13 @@
|
||||
<MudLink Href="https://www.atlassian.com/legal/trademark" Target="_blank">@T("The Confluence logo by Atlassian identifies the Search Confluence tool.")</MudLink>
|
||||
</MudStack>
|
||||
<MudJustifiedText Typo="Typo.body1" Class="mb-3">
|
||||
@T("AI Studio shows the logo of an AI provider next to its entry, so you can see at a glance which service a provider connects to. All product names, logos, and trademarks are the property of their respective owners. Their use here identifies compatible services and implies no endorsement, sponsorship, or business relationship between MindWork AI Studio and these companies.")
|
||||
@TA("AI Studio shows the logo of an AI provider next to its entry, so you can see at a glance which service a provider connects to. All product names, logos, and trademarks are the property of their respective owners. Their use here identifies compatible services and implies no endorsement, sponsorship, or business relationship between MindWork AI Studio and these companies.")
|
||||
</MudJustifiedText>
|
||||
<MudJustifiedText Typo="Typo.body1" Class="mb-3">
|
||||
@T("Some of these logos come from the Simple Icons project, which publishes them under CC0. The remaining ones were taken from the official brand resources of the respective provider. Every logo ships with AI Studio and is loaded from your device, so showing it never sends a request to the provider.")
|
||||
@TA("Some of these logos come from the Simple Icons project, which publishes them under CC0. The remaining ones were taken from the official brand resources of the respective provider. Every logo ships with AI Studio and is loaded from your device, so showing it never sends a request to the provider.")
|
||||
</MudJustifiedText>
|
||||
<MudJustifiedText Typo="Typo.body1">
|
||||
@T("Organizations can replace these logos with their own icons through a configuration plugin. When your organization does so, it is responsible for holding the rights to the icons it provides.")
|
||||
@TA("Organizations can replace these logos with their own icons through a configuration plugin. When your organization does so, it is responsible for holding the rights to the icons it provides.")
|
||||
</MudJustifiedText>
|
||||
</ExpansionPanel>
|
||||
<ExpansionPanel HeaderIcon="@AppIcons.LICENSE" HeaderText="License: FSL-1.1-MIT">
|
||||
|
||||
@@ -80,7 +80,7 @@ public partial class Information : MSGComponentBase
|
||||
Tools.Rust.LinuxPackageType.FLATPAK => T("Flatpak installation, updates are handled outside of AI Studio"),
|
||||
_ => this.RuntimeInfo.InstallationKind switch
|
||||
{
|
||||
Tools.Rust.InstallationKind.MANAGED => T("managed; updates are handled outside of AI Studio; contact whoever installed it and ask about updates"),
|
||||
Tools.Rust.InstallationKind.MANAGED => TA("managed; updates are handled outside of AI Studio; contact whoever installed it and ask about updates"),
|
||||
Tools.Rust.InstallationKind.UNSUPPORTED_LOCATION => T("current installation location does not support automatic updates"),
|
||||
Tools.Rust.InstallationKind.DEVELOPMENT => T("development build, no support for automatic updates"),
|
||||
_ => T("standard; automatic updates supported")
|
||||
@@ -756,27 +756,27 @@ public partial class Information : MSGComponentBase
|
||||
var parameters = new DialogParameters<UpdateInstructionsDialog>();
|
||||
if (this.updatePolicyMode is UpdatePolicyMode.ENTERPRISE_DISABLED)
|
||||
{
|
||||
parameters.Add(x => x.Message, T("Updates are managed by your organization. Contact your IT department if you have questions about updating AI Studio."));
|
||||
parameters.Add(x => x.Message, TA("Updates are managed by your organization. Contact your IT department if you have questions about updating AI Studio."));
|
||||
}
|
||||
else if (this.updatePolicyMode is UpdatePolicyMode.FLATPAK)
|
||||
{
|
||||
parameters.Add(x => x.Message, T("AI Studio cannot update itself when installed as a Flatpak. A Flathub listing is planned. Until then, you can find the latest release on GitHub."));
|
||||
parameters.Add(x => x.Message, TA("AI Studio cannot update itself when installed as a Flatpak. A Flathub listing is planned. Until then, you can find the latest release on GitHub."));
|
||||
parameters.Add(x => x.ReleaseUrl, "https://github.com/MindWorkAI/AI-Studio/releases/latest");
|
||||
}
|
||||
else if (this.updatePolicyMode is UpdatePolicyMode.MANAGED_INSTALLATION)
|
||||
{
|
||||
// No release link here: the app cannot tell how this installation receives updates,
|
||||
// and installing a second copy from GitHub next to it is exactly what we want to avoid.
|
||||
parameters.Add(x => x.Message, T("This installation cannot update itself. Contact the person or organization that installed AI Studio for information about new versions."));
|
||||
parameters.Add(x => x.Message, TA("This installation cannot update itself. Contact the person or organization that installed AI Studio for information about new versions."));
|
||||
}
|
||||
else if (this.updatePolicyMode is UpdatePolicyMode.UNSUPPORTED_INSTALLATION_LOCATION)
|
||||
{
|
||||
parameters.Add(x => x.Message, T("AI Studio cannot update itself from its current installation location. Installing an update would leave a second installation behind instead of replacing this one. To get a new version, download the latest release and install it over your current installation."));
|
||||
parameters.Add(x => x.Message, TA("AI Studio cannot update itself from its current installation location. Installing an update would leave a second installation behind instead of replacing this one. To get a new version, download the latest release and install it over your current installation."));
|
||||
parameters.Add(x => x.ReleaseUrl, "https://github.com/MindWorkAI/AI-Studio/releases/latest");
|
||||
}
|
||||
else if (this.updatePolicyMode is UpdatePolicyMode.DEVELOPMENT)
|
||||
{
|
||||
parameters.Add(x => x.Message, T("You are running a development build of AI Studio, which never updates itself. Pull the latest changes and rebuild the app instead."));
|
||||
parameters.Add(x => x.Message, TA("You are running a development build of AI Studio, which never updates itself. Pull the latest changes and rebuild the app instead."));
|
||||
}
|
||||
else
|
||||
return;
|
||||
|
||||
@@ -159,7 +159,7 @@ public partial class Plugins : MSGComponentBase
|
||||
{
|
||||
x => x.Message,
|
||||
string.Format(
|
||||
this.T("The assistant plugin '{0}' was audited with the level '{1}', which is below the required minimum level '{2}'. Your current settings allow activation anyway, but this may be potentially dangerous. Do you really want to enable this plugin?"),
|
||||
this.TA("The assistant plugin '{0}' was audited with the level '{1}', which is below the required minimum level '{2}'. Your current settings allow activation anyway, but this may be potentially dangerous. Do you really want to enable this plugin?"),
|
||||
pluginName,
|
||||
actualLevel.Name,
|
||||
this.AssistantPluginAuditSettings.MinimumLevel.Name)
|
||||
@@ -192,7 +192,7 @@ public partial class Plugins : MSGComponentBase
|
||||
private string GetActivationTooltip(IPluginMetadata pluginMeta, bool isEnabled)
|
||||
{
|
||||
if (PluginFactory.IsAssistantActivationEnforced(pluginMeta.Id))
|
||||
return this.T("Your organization requires this assistant to stay enabled");
|
||||
return this.TA("Your organization requires this assistant to stay enabled");
|
||||
|
||||
if (isEnabled)
|
||||
return this.T("Disable plugin");
|
||||
@@ -275,7 +275,7 @@ public partial class Plugins : MSGComponentBase
|
||||
|
||||
private string SharePluginTooltip => this.PluginShareService.UsesExport ? this.T("Export plugin archive") : this.T("Share plugin archive");
|
||||
|
||||
private string SharePluginLockText => this.PluginShareService.UsesExport ? this.T("Your organization has disabled exporting plugins.") : this.T("Your organization has disabled sharing plugins.");
|
||||
private string SharePluginLockText => this.PluginShareService.UsesExport ? this.TA("Your organization has disabled exporting plugins.") : this.TA("Your organization has disabled sharing plugins.");
|
||||
|
||||
private async Task OpenAssistantPluginEditorDialogAsync(IAvailablePlugin plugin)
|
||||
{
|
||||
@@ -421,7 +421,7 @@ public partial class Plugins : MSGComponentBase
|
||||
{
|
||||
var dialogParameters = new DialogParameters<ConfirmDialog>
|
||||
{
|
||||
{ x => x.Message, string.Format(this.T("{0} Do you want to save the plugin archive to a location of your choice instead? Until you restart AI Studio, the plugin page offers this export instead of sharing."), issue) },
|
||||
{ x => x.Message, string.Format(this.TA("{0} Do you want to save the plugin archive to a location of your choice instead? Until you restart AI Studio, the plugin page offers this export instead of sharing."), issue) },
|
||||
};
|
||||
|
||||
var dialogReference = await this.DialogService.ShowAsync<ConfirmDialog>(this.T("Share dialog not available"), dialogParameters, DialogOptions.FULLSCREEN);
|
||||
@@ -555,7 +555,7 @@ public partial class Plugins : MSGComponentBase
|
||||
var audit = await this.AssistantPluginAuditService.RunAuditAsync(assistantPlugin);
|
||||
if (audit.Level is AssistantAuditLevel.UNKNOWN)
|
||||
{
|
||||
await MessageBus.INSTANCE.SendError(new (AppIcons.AGENT, string.Format(this.T("The automatic security audit for the assistant plugin '{0}' failed. Please run it manually."), assistantPlugin.Name)));
|
||||
await MessageBus.INSTANCE.SendError(new (AppIcons.AGENT, string.Format(this.TA("The automatic security audit for the assistant plugin '{0}' failed. Please run it manually."), assistantPlugin.Name)));
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -622,11 +622,11 @@ public partial class Plugins : MSGComponentBase
|
||||
switch (archivePaths.Count)
|
||||
{
|
||||
case 0:
|
||||
await this.MessageBus.SendWarning(new(AppIcons.WARNING, string.Format(this.T("Please drop a plugin archive with the extension {0} or .zip."), PluginArchive.PLUGIN_FILE_EXTENSION)));
|
||||
await this.MessageBus.SendWarning(new(AppIcons.WARNING, string.Format(this.TA("Please drop a plugin archive with the extension {0} or .zip."), PluginArchive.PLUGIN_FILE_EXTENSION)));
|
||||
return;
|
||||
|
||||
case > 1:
|
||||
await this.MessageBus.SendWarning(new(AppIcons.WARNING, this.T("Please drop only one plugin archive at a time.")));
|
||||
await this.MessageBus.SendWarning(new(AppIcons.WARNING, this.TA("Please drop only one plugin archive at a time.")));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
@T("In this section, we highlight the titan supporters of MindWork AI Studio. Titans are prestigious companies that provide significant support to our mission.")
|
||||
</MudText>
|
||||
<MudText Typo="Typo.body1" Style="text-align: justify; hyphens: auto;" Class="mb-3">
|
||||
@T("For companies, sponsoring MindWork AI Studio is not only a way to support innovation but also a valuable opportunity for public relations and marketing. Your company's name and logo will be featured prominently, showcasing your commitment to using cutting-edge AI tools and enhancing your reputation as an innovative enterprise.")
|
||||
@TA("For companies, sponsoring MindWork AI Studio is not only a way to support innovation but also a valuable opportunity for public relations and marketing. Your company's name and logo will be featured prominently, showcasing your commitment to using cutting-edge AI tools and enhancing your reputation as an innovative enterprise.")
|
||||
</MudText>
|
||||
|
||||
<MudList T="string" Class="mb-3">
|
||||
@@ -26,7 +26,7 @@
|
||||
</MudList>
|
||||
|
||||
<MudButton Href="https://github.com/sponsors/MindWorkAI" StartIcon="@AppIcons.BUSINESS_SUPPORTER" Variant="Variant.Filled" Target="_blank">
|
||||
@T("Become one of our titans")
|
||||
@TA("Become one of our titans")
|
||||
</MudButton>
|
||||
</div>
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
</MudText>
|
||||
|
||||
<MudButton Href="https://github.com/sponsors/MindWorkAI" StartIcon="@AppIcons.PEOPLE" Variant="Variant.Filled" Target="_blank">
|
||||
@T("Become a contributor")
|
||||
@TA("Become a contributor")
|
||||
</MudButton>
|
||||
|
||||
<MudText Typo="Typo.h6" Class="mt-8">
|
||||
@@ -69,7 +69,7 @@
|
||||
</MudText>
|
||||
|
||||
<MudButton Href="https://github.com/sponsors/MindWorkAI" StartIcon="@AppIcons.BUSINESS_SUPPORTER" Variant="Variant.Filled" Target="_blank">
|
||||
@T("Become a contributor")
|
||||
@TA("Become a contributor")
|
||||
</MudButton>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<MudTextField
|
||||
@ref="@this.textField"
|
||||
T="string"
|
||||
Label="@T("Write your text")"
|
||||
Label="@TA("Write your text")"
|
||||
@bind-Text="@this.userInput"
|
||||
Immediate="@true"
|
||||
Lines="16"
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
<MudTextField
|
||||
T="string"
|
||||
Label="@T("Your stage directions")"
|
||||
Label="@TA("Your stage directions")"
|
||||
@bind-Text="@this.userDirection"
|
||||
Immediate="@true"
|
||||
Lines="4"
|
||||
|
||||
Reference in new issue
Block a user