diff --git a/README.md b/README.md index 5d365b4..1c964df 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,14 @@ # MindWork AI Studio MindWork AI Studio is a desktop application available for macOS, Windows, and Linux. It provides a unified chat interface for Large Language Models (LLMs). You bring your own API key for the respective LLM provider to use the models. The API keys are securely stored by the operating system. -**Key features:** +**Key advantages:** - **Free of charge**: The app is free to use, both for personal and commercial purposes. - **Independence**: Users are not tied to any single provider. The initial version supports OpenAI models (like GPT-4o, GPT-4, GPT-4 Turbo, etc.). Future versions will support other providers such as Mistral or Google Gemini. - **Unrestricted usage**: Unlike services like ChatGPT, which impose limits after intensive use, MindWork AI Studio offers unlimited usage through the providers API. - **Cost-effective**: 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. -- **Privacy**: Data entered in the app is not used for training by the providers because we are using the API. +- **Privacy**: The data entered into the app is not used for training by the providers since we are using the provider's API. - **Flexibility**: Choose the provider and model best suited for your current task. +- **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. **Ready to get started 🤩?** [Download the appropriate setup for your operating system here](https://github.com/MindWorkAI/AI-Studio/releases/latest). diff --git a/app/MindWork AI Studio/Chat/ContentBlockComponent.razor b/app/MindWork AI Studio/Chat/ContentBlockComponent.razor index b66eadb..75877da 100644 --- a/app/MindWork AI Studio/Chat/ContentBlockComponent.razor +++ b/app/MindWork AI Studio/Chat/ContentBlockComponent.razor @@ -44,7 +44,6 @@ } else { - } } diff --git a/app/MindWork AI Studio/Components/App.razor b/app/MindWork AI Studio/Components/App.razor index 5176741..ae3b65b 100644 --- a/app/MindWork AI Studio/Components/App.razor +++ b/app/MindWork AI Studio/Components/App.razor @@ -15,7 +15,7 @@ - + diff --git a/app/MindWork AI Studio/Components/Blocks/MudTextList.razor b/app/MindWork AI Studio/Components/Blocks/MudTextList.razor new file mode 100644 index 0000000..2c42cc2 --- /dev/null +++ b/app/MindWork AI Studio/Components/Blocks/MudTextList.razor @@ -0,0 +1,8 @@ + + @foreach(var item in this.Items) + { + + @item.Header: @item.Text + + } + \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Blocks/MudTextList.razor.cs b/app/MindWork AI Studio/Components/Blocks/MudTextList.razor.cs new file mode 100644 index 0000000..4c94284 --- /dev/null +++ b/app/MindWork AI Studio/Components/Blocks/MudTextList.razor.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.Components; + +namespace AIStudio.Components.Blocks; + +public partial class MudTextList : ComponentBase +{ + [Parameter] + public bool Clickable { get; set; } + + [Parameter] + public IList Items { get; set; } = []; + + [Parameter] + public string Icon { get; set; } = Icons.Material.Filled.CheckCircle; + + [Parameter] + public string Class { get; set; } = ""; + + private string Classes => $"mud-text-list {this.Class}"; +} + +public readonly record struct TextItem(string Header, string Text); \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Blocks/ThirdPartyComponent.razor b/app/MindWork AI Studio/Components/Blocks/ThirdPartyComponent.razor index 193e7cf..29c6e8c 100644 --- a/app/MindWork AI Studio/Components/Blocks/ThirdPartyComponent.razor +++ b/app/MindWork AI Studio/Components/Blocks/ThirdPartyComponent.razor @@ -1,5 +1,5 @@ - + @this.Header @@ -11,7 +11,9 @@ - @this.UseCase + + @this.UseCase + License: @this.LicenseName diff --git a/app/MindWork AI Studio/Components/Pages/About.razor b/app/MindWork AI Studio/Components/Pages/About.razor index 9f389db..135eb22 100644 --- a/app/MindWork AI Studio/Components/Pages/About.razor +++ b/app/MindWork AI Studio/Components/Pages/About.razor @@ -3,64 +3,64 @@ About MindWork AI Studio - - -
- - Versions -
-
- - - The following list shows the versions of the MindWork AI Studio, the used compilers, build time, etc.: - - - - - - - - - - - -
- - - - -
- - Used Open Source Projects -
-
- - - - - - - - - - - - - - -
-
- - - - -
- - License: FSL-1.1-MIT -
-
- - - -
-
\ No newline at end of file +
+
+ + + +
+ + Versions +
+
+ + + The following list shows the versions of the MindWork AI Studio, the used compilers, build time, etc.: + + + + + + + + + + + +
+ + +
+ + Used Open Source Projects +
+
+ + + + + + + + + + + + + + +
+ + +
+ + License: FSL-1.1-MIT +
+
+ + + +
+
+
+
\ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Pages/Error.razor b/app/MindWork AI Studio/Components/Pages/Error.razor deleted file mode 100644 index 30c1b33..0000000 --- a/app/MindWork AI Studio/Components/Pages/Error.razor +++ /dev/null @@ -1,38 +0,0 @@ -@page "/Error" -@using System.Diagnostics - -Error - -

Error.

-

An error occurred while processing your request.

- -@if (ShowRequestId) -{ -

- Request ID: @RequestId -

-} - -

Development Mode

-

- Swapping to Development environment will display more detailed information about the error that occurred. -

-

- The Development environment shouldn't be enabled for deployed applications. - It can result in displaying sensitive information from exceptions to end users. - For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development - and restarting the app. -

- -@code{ - - [CascadingParameter] - private HttpContext? HttpContext { get; set; } - - private string? RequestId { get; set; } - private bool ShowRequestId => !string.IsNullOrEmpty(RequestId); - - protected override void OnInitialized() => - RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier; - -} \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Pages/Home.razor b/app/MindWork AI Studio/Components/Pages/Home.razor index 8dcabea..d19c615 100644 --- a/app/MindWork AI Studio/Components/Pages/Home.razor +++ b/app/MindWork AI Studio/Components/Pages/Home.razor @@ -1,5 +1,72 @@ @page "/" +@using AIStudio.Tools -Home + +Let's get started -

Hello :)

\ No newline at end of file +
+
+ + + + +
+ + Introduction +
+
+ + + Welcome to MindWork AI Studio! + + + 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. + + + Here's what makes MindWork AI Studio stand out: + + + + We hope you enjoy using MindWork AI Studio to bring your AI projects to life! + + +
+ + + +
+ + Our vision +
+
+ + + 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. + + + 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: + + + + 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. + + +
+ + + +
+ + Quick Start Guide +
+
+ + + +
+ +
+
+
\ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Pages/Home.razor.cs b/app/MindWork AI Studio/Components/Pages/Home.razor.cs new file mode 100644 index 0000000..dc0a08d --- /dev/null +++ b/app/MindWork AI Studio/Components/Pages/Home.razor.cs @@ -0,0 +1,77 @@ +using AIStudio.Components.Blocks; + +using Microsoft.AspNetCore.Components; + +namespace AIStudio.Components.Pages; + +public partial class Home : ComponentBase +{ + private static readonly TextItem[] ITEMS_ADVANTAGES = + [ + new TextItem("Free of charge", "The app is free to use, both for personal and commercial purposes."), + new TextItem("Independence", "Users are not tied to any single provider. The initial version supports OpenAI models (like GPT-4o, GPT-4, GPT-4 Turbo, etc.). Future versions will support other providers such as Mistral or Google Gemini."), + new TextItem("Unrestricted usage", "Unlike services like ChatGPT, which impose limits after intensive use, MindWork AI Studio offers unlimited usage through the providers API."), + new TextItem("Cost-effective", "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 TextItem("Privacy", "The data entered into the app is not used for training by the providers since we are using the provider's API."), + new TextItem("Flexibility", "Choose the provider and model best suited for your current task."), + 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. + + ## Step 1: Create an Account with OpenAI + 1. Go to [OpenAI's platform](https://platform.openai.com/). + 2. Click on "Sign up" and follow the instructions provided. + + ## Step 2: Obtain an API Key + 1. After creating your OpenAI account, ensure you have a project named "default". + 2. If you want, you can create a new project by clicking "Create project". + 3. Navigate to a project of your choice, then click on "API keys" in the left-hand navigation menu. + 4. You might need to validate your phone number. Click "Start verification" and follow the instructions. + 5. Once verified, click "Create new secret key" to generate a new API key for the selected project. + 6. Name your key something descriptive like "AI Studio Laptop." + 7. Copy the displayed secret key. Remember, you will not be able to see this key again. + 8. Store it in a password manager like [KeePassXC](https://keepassxc.org). + 9. **Important:** Treat your API key like a secret password. Anyone with access to your key can use OpenAI's systems **at your expense**. **Do not share it with anyone!** + + ## Step 3: Add OpenAI as a Provider in MindWork AI Studio + 1. Go to the settings section in MindWork AI Studio. + 2. Click "Add Provider" and select OpenAI as the provider. + 3. Paste your API key into the corresponding field. + + ## Step 4: Load OpenAI Models + 1. Ensure you have an internet connection and your API key is valid. + 2. Click "Reload" to retrieve a list of available OpenAI models. + 3. Select "gpt-4o" to use the latest model. + 4. Provide a name for this combination of provider, API key, and model. This is called the "instance name". For example, you can name it based on the usage context, such as "Personal OpenAI" or "Work OpenAI". + + ## Step 5: Save the Provider + 1. Click "Add" to save the provider. + 2. Depending on your operating system and settings, you may need to enter your login password. This is required to store and access your API key securely. + + ## Step 6: Add Funds to Your OpenAI Account + To utilize OpenAI's services, you need to add funds to your account. It's best to use the prepaid method to avoid high bills and set your budget. Navigate to the "Billing" section. Here, you can see your current balance. Click on "Add to credit balance" to deposit an amount. A balance of $10 is sufficient to start. + + ## Step 7: Start Chatting with the AI + 1. Switch to the chat section in MindWork AI Studio. + 2. Select your provider from the dropdown menu at the top. + 3. Enter your question or message in the input field below to start your first chat with the AI. + + ## Additional Resources + There are also video tutorials on how to obtain your OpenAI API key. One example is this video by Anders Jensen: [https://www.youtube.com/watch?v=OB99E7Y1cMA](https://www.youtube.com/watch?v=OB99E7Y1cMA). + + That's it! You're ready to explore and create with MindWork AI Studio. Enjoy your journey! + """; +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Pages/Settings.razor b/app/MindWork AI Studio/Components/Pages/Settings.razor index 2820b10..47466fa 100644 --- a/app/MindWork AI Studio/Components/Pages/Settings.razor +++ b/app/MindWork AI Studio/Components/Pages/Settings.razor @@ -2,9 +2,9 @@ Settings - + Configured Providers - + diff --git a/app/MindWork AI Studio/build.nu b/app/MindWork AI Studio/build.nu index ea6dbaa..2d6e2da 100755 --- a/app/MindWork AI Studio/build.nu +++ b/app/MindWork AI Studio/build.nu @@ -160,7 +160,7 @@ def get_rids []: nothing -> list { } def get_os []: nothing -> string { - (sys).host.name | str downcase + (sys host).name | str downcase } def update_build_time []: nothing -> nothing { @@ -192,7 +192,7 @@ def update_dotnet_version []: nothing -> nothing { mut dotnet_sdk_version = $meta_lines.3 mut dotnet_version = $meta_lines.4 - let dotnet_data = (^dotnet --info) | parse --regex '(?s).NET SDK:\s+Version:\s+(?P[0-9.]+).+Commit:\s+(?P[a-zA-Z0-9]+).+Host:\s+Version:\s+(?P[0-9.]+).+Commit:\s+(?P[a-zA-Z0-9]+)' + let dotnet_data = (^dotnet --info) | collect | parse --regex '(?ms).?NET SDK:\s+Version:\s+(?P[0-9.]+).+Commit:\s+(?P[a-zA-Z0-9]+).+Host:\s+Version:\s+(?P[0-9.]+).+Commit:\s+(?P[a-zA-Z0-9]+)' let sdk_version = $dotnet_data.sdkVersion.0 let host_version = $dotnet_data.hostVersion.0 let sdkCommit = $dotnet_data.sdkCommit.0 diff --git a/app/MindWork AI Studio/wwwroot/app.css b/app/MindWork AI Studio/wwwroot/app.css index ba1d244..4bb06c5 100644 --- a/app/MindWork AI Studio/wwwroot/app.css +++ b/app/MindWork AI Studio/wwwroot/app.css @@ -29,4 +29,8 @@ font-style: normal; font-weight: 700; src: url('fonts/roboto-v30-latin-700.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ +} + +.mud-text-list .mud-list-item-icon { + margin-top: 4px; } \ No newline at end of file diff --git a/app/MindWork AI Studio/wwwroot/svg/banner.svg b/app/MindWork AI Studio/wwwroot/svg/banner.svg new file mode 100644 index 0000000..e2130e7 --- /dev/null +++ b/app/MindWork AI Studio/wwwroot/svg/banner.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/media/Banners.ai b/media/Banners.ai new file mode 100644 index 0000000..fdb0fb2 --- /dev/null +++ b/media/Banners.ai @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:643ff1ec3e586883873a1c0b4a81fe7f63be000245ad99ddca90bbc3b138437b +size 259110 diff --git a/metadata.txt b/metadata.txt index aac2df6..b3ec3ec 100644 --- a/metadata.txt +++ b/metadata.txt @@ -1,9 +1,9 @@ -0.4.7 -2024-05-26 08:48:48 UTC -147 +0.5.0 +2024-05-30 23:00:00 UTC +148 8.0.205 (commit 3e1383b780) 8.0.5 (commit 087e15321b) 1.78.0 (commit 9b00956e5) 6.19.1 1.6.1 -9b36969c8b, dev debug +6b1b8ee52eb, dev debug diff --git a/runtime/Cargo.lock b/runtime/Cargo.lock index 984cfd2..44b11a6 100644 --- a/runtime/Cargo.lock +++ b/runtime/Cargo.lock @@ -2189,7 +2189,7 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "mindwork-ai-studio" -version = "0.4.7" +version = "0.5.0" dependencies = [ "arboard", "flexi_logger", diff --git a/runtime/Cargo.toml b/runtime/Cargo.toml index 4a49a05..5bedf94 100644 --- a/runtime/Cargo.toml +++ b/runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mindwork-ai-studio" -version = "0.4.7" +version = "0.5.0" edition = "2021" description = "MindWork AI Studio" authors = ["Thorsten Sommer"] diff --git a/runtime/tauri.conf.json b/runtime/tauri.conf.json index c967c4e..00faebd 100644 --- a/runtime/tauri.conf.json +++ b/runtime/tauri.conf.json @@ -6,7 +6,7 @@ }, "package": { "productName": "MindWork AI Studio", - "version": "0.4.7" + "version": "0.5.0" }, "tauri": { "allowlist": {