Merge branch '53-about-page-add-motivation' into 'main'

Resolve "About page: Add motivation"

Closes #53

See merge request products/mindwork-ai-studio!14
This commit is contained in:
Thorsten 2024-06-01 20:26:58 +00:00
commit 5a528357a4
14 changed files with 303 additions and 237 deletions

View File

@ -0,0 +1,11 @@
<MudExpansionPanel Class="border-solid border rounded-lg" IsInitiallyExpanded="@this.IsExpanded">
<TitleContent>
<div class="d-flex align-center">
<MudIcon Icon="@this.HeaderIcon" Size="@this.IconSize" Color="@this.IconColor" class="mr-3"/>
<MudText Typo="Typo.h6">@this.HeaderText</MudText>
</div>
</TitleContent>
<ChildContent>
@this.ChildContent
</ChildContent>
</MudExpansionPanel>

View File

@ -0,0 +1,24 @@
using Microsoft.AspNetCore.Components;
namespace AIStudio.Components.Blocks;
public partial class ExpansionPanel : ComponentBase
{
[Parameter]
public string HeaderIcon { get; set; } = Icons.Material.Filled.BugReport;
[Parameter]
public Size IconSize { get; set; } = Size.Medium;
[Parameter]
public Color IconColor { get; set; } = Color.Primary;
[Parameter]
public string HeaderText { get; set; } = "n/a";
[Parameter]
public RenderFragment? ChildContent { get; set; }
[Parameter]
public bool IsExpanded { get; set; }
}

View File

@ -0,0 +1,7 @@
<div class="d-flex flex-column" style="@this.Height">
<div class="flex-auto overflow-auto">
@this.ChildContent
</div>
@this.FooterContent
</div>

View File

@ -0,0 +1,25 @@
using Microsoft.AspNetCore.Components;
namespace AIStudio.Components.Blocks;
public partial class InnerScrolling : ComponentBase
{
/// <summary>
/// Set the height of anything above the scrolling content; usually a header.
/// What we do is calc(100vh - THIS). Means, you can use multiple measures like
/// 230px - 3em. Default is 3em.
/// </summary>
[Parameter]
public string HeaderHeight { get; set; } = "3em";
[Parameter]
public RenderFragment? ChildContent { get; set; }
/// <summary>
/// Optional footer content, shown after the scrolling area.
/// </summary>
[Parameter]
public RenderFragment? FooterContent { get; set; }
private string Height => $"height: calc(100vh - {this.HeaderHeight});";
}

View File

@ -0,0 +1,31 @@
<MudText Typo="Typo.body1" Class="mb-3" Style="text-align: justify; hyphens: auto;">
Hello, my name is Thorsten Sommer, and I am the initial creator of MindWork AI Studio. The motivation behind developing this app stems from several crucial needs and observations I made over time.
</MudText>
<MudText Typo="Typo.h4">
Personal Needs and Limitations of Web Services
</MudText>
<MudText Typo="Typo.body1" Class="mb-3" Style="text-align: justify; hyphens: auto;">
Relying on web services like ChatGPT was not a sustainable solution for me. I needed an AI that could also access files directly on my device, a functionality web services inherently lack due to security and privacy constraints. Although I could have scripted something in Python to meet my needs, this approach was too cumbersome for daily use. More importantly, I wanted to develop a solution that anyone could use without needing any programming knowledge.
</MudText>
<MudText Typo="Typo.h4">
Limitations of Existing Solutions
</MudText>
<MudText Typo="Typo.body1" Class="mb-3" Style="text-align: justify; hyphens: auto;">
While exploring available solutions, I found a desktop application called <a href="https://github.com/Mintplex-Labs/anything-llm" target="_blank">Anything LLM</a>. Unfortunately, it fell short of meeting my specific requirements and lacked the user interface design I envisioned. For macOS, there were several apps similar to what I had in mind, but they were all commercial solutions shrouded in uncertainty. The developers' identities and the origins of these apps were unclear, raising significant security concerns. Reports from users about stolen API keys and unwanted charges only amplified my reservations.
</MudText>
<MudText Typo="Typo.h4">
Cross-Platform and Modern Development
</MudText>
<MudText Typo="Typo.body1" Class="mb-3" Style="text-align: justify; hyphens: auto;">
Given that my employer's workplace uses both Windows and Linux, I wanted a cross-platform solution that would work seamlessly across all major operating systems, including macOS. Additionally, I wanted to demonstrate that it is possible to create modern, efficient, cross-platform applications without resorting to Electron bloatware. The combination of .NET and Rust with Tauri proved to be an excellent technology stack for building such robust applications.
</MudText>
<MudText Typo="Typo.body1" Class="mb-3" Style="text-align: justify; hyphens: auto;">
Through MindWork AI Studio, I aim to provide a secure, flexible, and user-friendly tool that caters to a wider audience without compromising on functionality or design. This app is the culmination of my desire to meet personal requirements, address existing gaps in the market, and showcase innovative development practices.
</MudText>

View File

@ -0,0 +1,7 @@
using Microsoft.AspNetCore.Components;
namespace AIStudio.Components.Blocks;
public partial class Motivation : ComponentBase
{
}

View File

@ -0,0 +1,10 @@
<MudText Typo="Typo.body1" Class="mb-3" Style="text-align: justify; hyphens: auto;">
Curious about the vision for MindWork AI Studio and what the future holds? We're here to address just that. Remember, this is a free, open-source project, meaning we can't guarantee when or if this vision will be fully realized. Our aim is to share our vision with you to help you decide whether this app is right for you.
</MudText>
<MudText Typo="Typo.body1" Class="mb-3" Style="text-align: justify; hyphens: auto;">
So, where are we headed, and how could the app evolve in the coming months and years? The following list outlines our ideas, though not in order of priority:
</MudText>
<MudTextList Icon="@Icons.Material.Filled.CheckCircle" Clickable="@true" Items="@ITEMS_VISION" Class="mb-3"/>
<MudText Typo="Typo.body1" Class="mb-3" Style="text-align: justify; hyphens: auto;">
We hope this vision excites you as much as it excites us. Together, let's build a powerful and flexible AI toolkit to support all your creative, professional, and everyday needs with MindWork AI Studio.
</MudText>

View File

@ -0,0 +1,16 @@
using Microsoft.AspNetCore.Components;
namespace AIStudio.Components.Blocks;
public partial class Vision : ComponentBase
{
private static readonly TextItem[] ITEMS_VISION =
[
new TextItem("Meet your needs", "Whatever your job or task is, MindWork AI Studio aims to meet your needs: whether you're a project manager, scientist, artist, author, software developer, or game developer."),
new TextItem("One stop shop", "The app will strive to fulfill all your AI needs: text-generation AI (LLM), image-generation AI, audio-generation AI (text-to-speech, potentially even text-to-music), and audio input (transcription, dictation). When there's a provider and an API available, we'll try to integrate it."),
new TextItem("Local file system", "When you wish, we aim to integrate your local system. Local documents could be incorporated using Retrieval-Augmented Generation (RAG), and we could directly save AI-generated content to your file system."),
new TextItem("Local AI systems", "Want to use AI systems locally and offline? We aim to make that possible too."),
new TextItem("Your AI systems", "Prefer to run your AI systems with providers like replicate.com? We plan to support that!"),
new TextItem("Assistants", "We aim to integrate specialized user interfaces as assistants. For example, a UI specifically for writing emails, or one designed for translating and correcting text, and more."),
];
}

View File

@ -3,17 +3,9 @@
<MudText Typo="Typo.h3" Class="mb-2">About MindWork AI Studio</MudText>
<div class="d-flex flex-column" style="height: calc(100vh - 6em);">
<div class="flex-auto overflow-auto">
<MudExpansionPanels Class="mb-3">
<MudExpansionPanel IsInitiallyExpanded="@true" Class="border-solid border rounded-lg">
<TitleContent>
<div class="d-flex align-center">
<MudIcon Icon="@Icons.Material.Filled.Layers" Size="Size.Medium" class="mr-3"/>
<MudText Typo="Typo.h6">Versions</MudText>
</div>
</TitleContent>
<ChildContent>
<InnerScrolling HeaderHeight="6em">
<MudExpansionPanels Class="mb-3" MultiExpansion="@false">
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.Layers" HeaderText="Versions" IsExpanded="@true">
<MudText>
The following list shows the versions of the MindWork AI Studio, the used compilers, build time, etc.:
</MudText>
@ -26,16 +18,17 @@
<MudListItem Icon="@Icons.Material.Outlined.Widgets" Text="@MudBlazorVersion"/>
<MudListItem Icon="@Icons.Material.Outlined.Memory" Text="@TauriVersion"/>
</MudList>
</ChildContent>
</MudExpansionPanel>
<MudExpansionPanel Class="border-solid border rounded-lg">
<TitleContent>
<div class="d-flex align-center">
<MudIcon Icon="@Icons.Material.Filled.AutoAwesomeMotion" Size="Size.Medium" class="mr-3"/>
<MudText Typo="Typo.h6">Used Open Source Projects</MudText>
</div>
</TitleContent>
<ChildContent>
</ExpansionPanel>
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.Engineering" HeaderText="Motivation">
<Motivation/>
</ExpansionPanel>
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.Lightbulb" HeaderText="Vision">
<Vision/>
</ExpansionPanel>
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.AutoAwesomeMotion" HeaderText="Used Open Source Projects">
<MudGrid Spacing="1">
<ThirdPartyComponent Name=".NET" Developer="Microsoft & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/dotnet/runtime/blob/main/LICENSE.TXT" RepositoryUrl="https://github.com/dotnet" UseCase="The C# language is used for the implementation of the user interface and the backend. To implement the user interface with C#, the Blazor technology from ASP.NET Core is used. All these technologies are integrated into the .NET SDK."/>
<ThirdPartyComponent Name="MudBlazor" Developer="Jonny Larsson, Meinrad Recheis & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/MudBlazor/MudBlazor/blob/dev/LICENSE" RepositoryUrl="https://github.com/MudBlazor/MudBlazor/" UseCase="Building on .NET, ASP.NET Core, and Blazor, MudBlazor is used as a library for designing and developing the user interface. It is a great project that significantly accelerates the development of advanced user interfaces with Blazor."/>
@ -48,19 +41,9 @@
<ThirdPartyComponent Name="tokio" Developer="Alex Crichton & Open Source Community" LicenseName="MIT" LicenseUrl="https://github.com/tokio-rs/tokio/blob/master/LICENSE" RepositoryUrl="https://github.com/tokio-rs/tokio" UseCase="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."/>
<ThirdPartyComponent Name="flexi_logger" Developer="emabee & Open Source Community" LicenseName="MIT & Apache-2.0" LicenseUrl="https://github.com/emabee/flexi_logger" RepositoryUrl="https://github.com/emabee/flexi_logger" UseCase="This Rust library is used to output the app's messages to the terminal. This is helpful during development and troubleshooting. This feature is initially invisible; when the app is started via the terminal, the messages become visible."/>
</MudGrid>
</ChildContent>
</MudExpansionPanel>
<MudExpansionPanel Class="border-solid border rounded-lg">
<TitleContent>
<div class="d-flex align-center">
<MudIcon Icon="@Icons.Material.Filled.Verified" Size="Size.Medium" class="mr-3"/>
<MudText Typo="Typo.h6">License: FSL-1.1-MIT</MudText>
</div>
</TitleContent>
<ChildContent>
</ExpansionPanel>
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.Verified" HeaderText="License: FSL-1.1-MIT">
<MudMarkdown Value="@LICENSE" OverrideHeaderTypo="@Markdown.OverrideHeaderTypo"/>
</ChildContent>
</MudExpansionPanel>
</ExpansionPanel>
</MudExpansionPanels>
</div>
</div>
</InnerScrolling>

View File

@ -10,8 +10,8 @@
}
</MudSelect>
<div class="d-flex flex-column" style="height: calc(100vh - 12.3em);">
<div class="flex-auto overflow-auto">
<InnerScrolling HeaderHeight="12.3em">
<ChildContent>
@if (this.chatThread is not null)
{
foreach (var block in this.chatThread.Blocks.OrderBy(n => n.Time))
@ -19,9 +19,10 @@
<ContentBlockComponent Role="@block.Role" Type="@block.ContentType" Time="@block.Time" Content="@block.Content"/>
}
}
</div>
</ChildContent>
<FooterContent>
<MudPaper Style="flex: 0 0 auto;">
<MudTextField T="string" @ref="@this.inputField" @bind-Text="@this.userInput" Variant="Variant.Outlined" AutoGrow="@true" Lines="3" MaxLines="12" Label="@this.InputLabel" Placeholder="@this.ProviderPlaceholder" Adornment="Adornment.End" AdornmentIcon="@Icons.Material.Filled.Send" OnAdornmentClick="() => this.SendMessage()" ReadOnly="!this.IsProviderSelected || this.isStreaming" Immediate="@true" OnKeyUp="this.InputKeyEvent" UserAttributes="@USER_INPUT_ATTRIBUTES"/>
</MudPaper>
</div>
</FooterContent>
</InnerScrolling>

View File

@ -4,18 +4,10 @@
<MudImage Src="svg/banner.svg" />
<MudText Typo="Typo.h3" Class="mt-2 mb-2">Let's get started</MudText>
<div class="d-flex flex-column" style="height: calc(100vh - 288px - 3em);">
<div class="flex-auto overflow-auto">
<MudExpansionPanels Class="mb-3">
<InnerScrolling HeaderHeight="288px - 3em">
<MudExpansionPanels Class="mb-3" MultiExpansion="@false">
<MudExpansionPanel IsInitiallyExpanded="@true" Class="border-solid border rounded-lg">
<TitleContent>
<div class="d-flex align-center">
<MudIcon Icon="@Icons.Material.Filled.MenuBook" Size="Size.Medium" class="mr-3"/>
<MudText Typo="Typo.h6">Introduction</MudText>
</div>
</TitleContent>
<ChildContent>
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.MenuBook" HeaderText="Introduction" IsExpanded="@true">
<MudText Typo="Typo.h5" Class="mb-3">
Welcome to MindWork AI Studio!
</MudText>
@ -31,42 +23,15 @@
<MudText Typo="Typo.body1" Class="mb-3">
We hope you enjoy using MindWork AI Studio to bring your AI projects to life!
</MudText>
</ChildContent>
</MudExpansionPanel>
</ExpansionPanel>
<MudExpansionPanel Class="border-solid border rounded-lg">
<TitleContent>
<div class="d-flex align-center">
<MudIcon Icon="@Icons.Material.Filled.Lightbulb" Color="Color.Warning" Size="Size.Medium" class="mr-3"/>
<MudText Typo="Typo.h6">Our vision</MudText>
</div>
</TitleContent>
<ChildContent>
<MudText Typo="Typo.body1" Class="mb-3" Style="text-align: justify; hyphens: auto;">
Curious about the vision for MindWork AI Studio and what the future holds? We're here to address just that. Remember, this is a free, open-source project, meaning we can't guarantee when or if this vision will be fully realized. Our aim is to share our vision with you to help you decide whether this app is right for you.
</MudText>
<MudText Typo="Typo.body1" Class="mb-3" Style="text-align: justify; hyphens: auto;">
So, where are we headed, and how could the app evolve in the coming months and years? The following list outlines our ideas, though not in order of priority:
</MudText>
<MudTextList Icon="@Icons.Material.Filled.CheckCircle" Clickable="@true" Items="@ITEMS_VISION" Class="mb-3"/>
<MudText Typo="Typo.body1" Class="mb-3" Style="text-align: justify; hyphens: auto;">
We hope this vision excites you as much as it excites us. Together, let's build a powerful and flexible AI toolkit to support all your creative, professional, and everyday needs with MindWork AI Studio.
</MudText>
</ChildContent>
</MudExpansionPanel>
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.Lightbulb" HeaderText="Vision">
<Vision/>
</ExpansionPanel>
<MudExpansionPanel Class="border-solid border rounded-lg">
<TitleContent>
<div class="d-flex align-center">
<MudIcon Icon="@Icons.Material.Filled.RocketLaunch" Size="Size.Medium" class="mr-3"/>
<MudText Typo="Typo.h6">Quick Start Guide</MudText>
</div>
</TitleContent>
<ChildContent>
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.RocketLaunch" HeaderText="Quick Start Guide">
<MudMarkdown OverrideHeaderTypo="@Markdown.OverrideHeaderTypo" Value="@QUICK_START_GUIDE"/>
</ChildContent>
</MudExpansionPanel>
</ExpansionPanel>
</MudExpansionPanels>
</div>
</div>
</InnerScrolling>

View File

@ -17,16 +17,6 @@ public partial class Home : ComponentBase
new TextItem("No bloatware", "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."),
];
private static readonly TextItem[] ITEMS_VISION =
[
new TextItem("Meet your needs", "Whatever your job or task is, MindWork AI Studio aims to meet your needs: whether you're a project manager, scientist, artist, author, software developer, or game developer."),
new TextItem("One stop shop", "The app will strive to fulfill all your AI needs: text-generation AI (LLM), image-generation AI, audio-generation AI (text-to-speech, potentially even text-to-music), and audio input (transcription, dictation). When there's a provider and an API available, we'll try to integrate it."),
new TextItem("Local file system", "When you wish, we aim to integrate your local system. Local documents could be incorporated using Retrieval-Augmented Generation (RAG), and we could directly save AI-generated content to your file system."),
new TextItem("Local AI systems", "Want to use AI systems locally and offline? We aim to make that possible too."),
new TextItem("Your AI systems", "Prefer to run your AI systems with providers like replicate.com? We plan to support that!"),
new TextItem("Assistants", "We aim to integrate specialized user interfaces as assistants. For example, a UI specifically for writing emails, or one designed for translating and correcting text, and more."),
];
private const string QUICK_START_GUIDE =
"""
Ready to dive in and get started with MindWork AI Studio? This quick start guide will help you set up everything you need to start using the app.

View File

@ -2,8 +2,7 @@
<MudText Typo="Typo.h3" Class="mb-12">Settings</MudText>
<div class="d-flex flex-column" style="height: calc(100vh - 6em);">
<div class="flex-auto overflow-auto">
<InnerScrolling HeaderHeight="6em">
<MudPaper Class="pa-3 mb-8 border-solid border rounded-lg">
<MudText Typo="Typo.h4" Class="mb-3">Configured Providers</MudText>
<MudTable Items="@this.SettingsManager.ConfigurationData.Providers" Class="border-dashed border rounded-lg">
@ -54,5 +53,4 @@
<ConfigurationOption OptionDescription="Enable spellchecking?" LabelOn="Spellchecking is enabled" LabelOff="Spellchecking is disabled" State="@(() => this.SettingsManager.ConfigurationData.EnableSpellchecking)" StateUpdate="@(updatedState => this.SettingsManager.ConfigurationData.EnableSpellchecking = updatedState)" OptionHelp="When enabled, spellchecking will be active in all input fields. Depending on your operating system, errors may not be visually highlighted, but right-clicking may still offer possible corrections." />
<ConfigurationSelect OptionDescription="Shortcut to send input" SelectedValue="@(() => this.SettingsManager.ConfigurationData.ShortcutSendBehavior)" Data="@ConfigurationSelectDataFactory.GetSendBehaviorData()" SelectionUpdate="@(selectedValue => this.SettingsManager.ConfigurationData.ShortcutSendBehavior = selectedValue)" OptionHelp="Do you want to use any shortcut to send your input?"/>
</MudPaper>
</div>
</div>
</InnerScrolling>

View File

@ -2,8 +2,7 @@
<MudText Typo="Typo.h3" Class="mb-2">Supporters</MudText>
<div class="d-flex flex-column" style="height: calc(100vh - 6em);">
<div class="flex-auto overflow-auto">
<InnerScrolling HeaderHeight="6em">
<div class="border-solid border-2 rounded-lg pa-3 mb-6">
<MudText Typo="Typo.h4" Class="mb-2">Our Titans</MudText>
@ -46,5 +45,4 @@
</MudItem>
</MudGrid>
</div>
</div>
</InnerScrolling>