mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2025-07-04 01:22:57 +00:00
Finished the Pandoc integration (#487)
This commit is contained in:
parent
5b685193ef
commit
437da0fd9b
@ -48,7 +48,7 @@ public static class Pdfium
|
|||||||
//
|
//
|
||||||
Console.Write(" deploying ...");
|
Console.Write(" deploying ...");
|
||||||
var library = GetLibraryPath(rid);
|
var library = GetLibraryPath(rid);
|
||||||
if (string.IsNullOrEmpty(library.Path))
|
if (string.IsNullOrWhiteSpace(library.Path))
|
||||||
{
|
{
|
||||||
Console.WriteLine($" failed to find the library path for {rid.ToUserFriendlyName()}");
|
Console.WriteLine($" failed to find the library path for {rid.ToUserFriendlyName()}");
|
||||||
return;
|
return;
|
||||||
|
@ -154,7 +154,7 @@ else
|
|||||||
@if (this.dataSourcePort < 1024)
|
@if (this.dataSourcePort < 1024)
|
||||||
{
|
{
|
||||||
<MudText Typo="Typo.body2">
|
<MudText Typo="Typo.body2">
|
||||||
@((MarkupString)T("<b>Warning:</b> Ports below 1024 are reserved for system services. Your ERI server need to run with elevated permissions (root user)."))
|
<b>@T("Warning:")</b> @T("Ports below 1024 are reserved for system services. Your ERI server need to run with elevated permissions (root user).")
|
||||||
</MudText>
|
</MudText>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
@ -326,7 +326,7 @@ else
|
|||||||
</MudJustifiedText>
|
</MudJustifiedText>
|
||||||
|
|
||||||
<MudJustifiedText Typo="Typo.body1" Class="mb-2">
|
<MudJustifiedText Typo="Typo.body1" Class="mb-2">
|
||||||
@((MarkupString)T("<b>Important:</b> The LLM may need to generate many files. This reaches the request limit of most providers. Typically, only a certain number of requests can be made per minute, and only a maximum number of tokens can be generated per minute. AI Studio automatically considers this. <b>However, generating all the files takes a certain amount of time.</b> Local or self-hosted models may work without these limitations and can generate responses faster. AI Studio dynamically adapts its behavior and always tries to achieve the fastest possible data processing."))
|
<b>@T("Important:")</b> @T("The LLM may need to generate many files. This reaches the request limit of most providers. Typically, only a certain number of requests can be made per minute, and only a maximum number of tokens can be generated per minute. AI Studio automatically considers this.") <b>@T("However, generating all the files takes a certain amount of time.")</b> @T("Local or self-hosted models may work without these limitations and can generate responses faster. AI Studio dynamically adapts its behavior and always tries to achieve the fastest possible data processing.")
|
||||||
</MudJustifiedText>
|
</MudJustifiedText>
|
||||||
|
|
||||||
<ProviderSelection @bind-ProviderSettings="@this.providerSettings" ValidateProvider="@this.ValidatingProvider"/>
|
<ProviderSelection @bind-ProviderSettings="@this.providerSettings" ValidateProvider="@this.ValidatingProvider"/>
|
||||||
@ -340,7 +340,7 @@ else
|
|||||||
</MudJustifiedText>
|
</MudJustifiedText>
|
||||||
|
|
||||||
<MudJustifiedText Typo="Typo.body1" Class="mb-2">
|
<MudJustifiedText Typo="Typo.body1" Class="mb-2">
|
||||||
@((MarkupString)T("When you rebuild / re-generate the ERI server code, AI Studio proceeds as follows: All files generated last time will be deleted. All other files you have created remain. Then, the AI generates the new files. <b>But beware:</b> It may happen that the AI generates a file this time that you manually created last time. In this case, your manually created file will then be overwritten. Therefore, you should always create a Git repository and commit or revert all changes before using this assistant. With a diff visualization, you can immediately see where the AI has made changes. It is best to use an IDE suitable for your selected language for this purpose."))
|
@T("When you rebuild / re-generate the ERI server code, AI Studio proceeds as follows: All files generated last time will be deleted. All other files you have created remain. Then, the AI generates the new files.") <b>@T("But beware:")</b> @T("It may happen that the AI generates a file this time that you manually created last time. In this case, your manually created file will then be overwritten. Therefore, you should always create a Git repository and commit or revert all changes before using this assistant. With a diff visualization, you can immediately see where the AI has made changes. It is best to use an IDE suitable for your selected language for this purpose.")
|
||||||
</MudJustifiedText>
|
</MudJustifiedText>
|
||||||
|
|
||||||
<MudTextSwitch Label="@T("Should we write the generated code to the file system?")" Disabled="@this.IsNoneERIServerSelected" @bind-Value="@this.writeToFilesystem" LabelOn="@T("Yes, please write or update all generated code to the file system")" LabelOff="@T("No, just show me the code")" />
|
<MudTextSwitch Label="@T("Should we write the generated code to the file system?")" Disabled="@this.IsNoneERIServerSelected" @bind-Value="@this.writeToFilesystem" LabelOn="@T("Yes, please write or update all generated code to the file system")" LabelOff="@T("No, just show me the code")" />
|
||||||
|
@ -484,6 +484,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ALLOWEDLLMPROVIDERSEXTENSIONS::T4096
|
|||||||
-- Please describe at least one retrieval process.
|
-- Please describe at least one retrieval process.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1035068989"] = "Please describe at least one retrieval process."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1035068989"] = "Please describe at least one retrieval process."
|
||||||
|
|
||||||
|
-- Local or self-hosted models may work without these limitations and can generate responses faster. AI Studio dynamically adapts its behavior and always tries to achieve the fastest possible data processing.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1047217452"] = "Local or self-hosted models may work without these limitations and can generate responses faster. AI Studio dynamically adapts its behavior and always tries to achieve the fastest possible data processing."
|
||||||
|
|
||||||
-- Please select which types of LLMs users are allowed to use with the data from this ERI server.
|
-- Please select which types of LLMs users are allowed to use with the data from this ERI server.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1047631678"] = "Please select which types of LLMs users are allowed to use with the data from this ERI server."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1047631678"] = "Please select which types of LLMs users are allowed to use with the data from this ERI server."
|
||||||
|
|
||||||
@ -511,9 +514,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1261836894"] = "Pleas
|
|||||||
-- You have not yet added any ERI server presets.
|
-- You have not yet added any ERI server presets.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1267931972"] = "You have not yet added any ERI server presets."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1267931972"] = "You have not yet added any ERI server presets."
|
||||||
|
|
||||||
-- <b>Warning:</b> Ports below 1024 are reserved for system services. Your ERI server need to run with elevated permissions (root user).
|
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1287629674"] = "<b>Warning:</b> Ports below 1024 are reserved for system services. Your ERI server need to run with elevated permissions (root user)."
|
|
||||||
|
|
||||||
-- The task of writing the ERI server for you is very complex. Therefore, a very powerful LLM is needed to successfully accomplish this task. Small local models will probably not be sufficient. Instead, try using a large cloud-based or a large self-hosted model.
|
-- The task of writing the ERI server for you is very complex. Therefore, a very powerful LLM is needed to successfully accomplish this task. Small local models will probably not be sufficient. Instead, try using a large cloud-based or a large self-hosted model.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1302705248"] = "The task of writing the ERI server for you is very complex. Therefore, a very powerful LLM is needed to successfully accomplish this task. Small local models will probably not be sufficient. Instead, try using a large cloud-based or a large self-hosted model."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1302705248"] = "The task of writing the ERI server for you is very complex. Therefore, a very powerful LLM is needed to successfully accomplish this task. Small local models will probably not be sufficient. Instead, try using a large cloud-based or a large self-hosted model."
|
||||||
|
|
||||||
@ -535,12 +535,18 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1456749976"] = "Pleas
|
|||||||
-- Delete
|
-- Delete
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1469573738"] = "Delete"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1469573738"] = "Delete"
|
||||||
|
|
||||||
|
-- When you rebuild / re-generate the ERI server code, AI Studio proceeds as follows: All files generated last time will be deleted. All other files you have created remain. Then, the AI generates the new files.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1531680404"] = "When you rebuild / re-generate the ERI server code, AI Studio proceeds as follows: All files generated last time will be deleted. All other files you have created remain. Then, the AI generates the new files."
|
||||||
|
|
||||||
-- Related links:
|
-- Related links:
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1565111217"] = "Related links:"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1565111217"] = "Related links:"
|
||||||
|
|
||||||
-- Please select an ERI specification version for the ERI server.
|
-- Please select an ERI specification version for the ERI server.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1612890554"] = "Please select an ERI specification version for the ERI server."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1612890554"] = "Please select an ERI specification version for the ERI server."
|
||||||
|
|
||||||
|
-- Ports below 1024 are reserved for system services. Your ERI server need to run with elevated permissions (root user).
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T168780641"] = "Ports below 1024 are reserved for system services. Your ERI server need to run with elevated permissions (root user)."
|
||||||
|
|
||||||
-- Write code to file system
|
-- Write code to file system
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1717303021"] = "Write code to file system"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1717303021"] = "Write code to file system"
|
||||||
|
|
||||||
@ -562,6 +568,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T180938091"] = "Delete
|
|||||||
-- Provider selection for generation
|
-- Provider selection for generation
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1840198821"] = "Provider selection for generation"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1840198821"] = "Provider selection for generation"
|
||||||
|
|
||||||
|
-- However, generating all the files takes a certain amount of time.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1862007299"] = "However, generating all the files takes a certain amount of time."
|
||||||
|
|
||||||
-- Should we automatically save any input made?
|
-- Should we automatically save any input made?
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1980659256"] = "Should we automatically save any input made?"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1980659256"] = "Should we automatically save any input made?"
|
||||||
|
|
||||||
@ -577,8 +586,8 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2034620186"] = "Data
|
|||||||
-- Interactive documentation aka Swagger UI
|
-- Interactive documentation aka Swagger UI
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2064957876"] = "Interactive documentation aka Swagger UI"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2064957876"] = "Interactive documentation aka Swagger UI"
|
||||||
|
|
||||||
-- When you rebuild / re-generate the ERI server code, AI Studio proceeds as follows: All files generated last time will be deleted. All other files you have created remain. Then, the AI generates the new files. <b>But beware:</b> It may happen that the AI generates a file this time that you manually created last time. In this case, your manually created file will then be overwritten. Therefore, you should always create a Git repository and commit or revert all changes before using this assistant. With a diff visualization, you can immediately see where the AI has made changes. It is best to use an IDE suitable for your selected language for this purpose.
|
-- Warning:
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2155983785"] = "When you rebuild / re-generate the ERI server code, AI Studio proceeds as follows: All files generated last time will be deleted. All other files you have created remain. Then, the AI generates the new files. <b>But beware:</b> It may happen that the AI generates a file this time that you manually created last time. In this case, your manually created file will then be overwritten. Therefore, you should always create a Git repository and commit or revert all changes before using this assistant. With a diff visualization, you can immediately see where the AI has made changes. It is best to use an IDE suitable for your selected language for this purpose."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2149175535"] = "Warning:"
|
||||||
|
|
||||||
-- Add Embedding Method
|
-- Add Embedding Method
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2176833082"] = "Add Embedding Method"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2176833082"] = "Add Embedding Method"
|
||||||
@ -607,6 +616,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2417944396"] = "Are y
|
|||||||
-- Data source settings
|
-- Data source settings
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2440619931"] = "Data source settings"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2440619931"] = "Data source settings"
|
||||||
|
|
||||||
|
-- The LLM may need to generate many files. This reaches the request limit of most providers. Typically, only a certain number of requests can be made per minute, and only a maximum number of tokens can be generated per minute. AI Studio automatically considers this.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T248288139"] = "The LLM may need to generate many files. This reaches the request limit of most providers. Typically, only a certain number of requests can be made per minute, and only a maximum number of tokens can be generated per minute. AI Studio automatically considers this."
|
||||||
|
|
||||||
-- Yes, please write or update all generated code to the file system
|
-- Yes, please write or update all generated code to the file system
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T252707279"] = "Yes, please write or update all generated code to the file system"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T252707279"] = "Yes, please write or update all generated code to the file system"
|
||||||
|
|
||||||
@ -682,18 +694,21 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3316699247"] = "No, j
|
|||||||
-- Other language
|
-- Other language
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3374524465"] = "Other language"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3374524465"] = "Other language"
|
||||||
|
|
||||||
|
-- Important:
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3379345517"] = "Important:"
|
||||||
|
|
||||||
-- ERI Server {0}
|
-- ERI Server {0}
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3443687246"] = "ERI Server {0}"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3443687246"] = "ERI Server {0}"
|
||||||
|
|
||||||
-- You will likely use one or more embedding methods to encode the meaning of your data into a typically high-dimensional vector space. In this case, you will use a vector database to store and search these vectors (called embeddings). However, you don't have to use embedding methods. When your retrieval method works without any embedding, you can ignore this section. An example: You store files on a file server, and your retrieval method works exclusively with file names in the file system, so you don't need embeddings.
|
-- You will likely use one or more embedding methods to encode the meaning of your data into a typically high-dimensional vector space. In this case, you will use a vector database to store and search these vectors (called embeddings). However, you don't have to use embedding methods. When your retrieval method works without any embedding, you can ignore this section. An example: You store files on a file server, and your retrieval method works exclusively with file names in the file system, so you don't need embeddings.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3446047228"] = "You will likely use one or more embedding methods to encode the meaning of your data into a typically high-dimensional vector space. In this case, you will use a vector database to store and search these vectors (called embeddings). However, you don't have to use embedding methods. When your retrieval method works without any embedding, you can ignore this section. An example: You store files on a file server, and your retrieval method works exclusively with file names in the file system, so you don't need embeddings."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3446047228"] = "You will likely use one or more embedding methods to encode the meaning of your data into a typically high-dimensional vector space. In this case, you will use a vector database to store and search these vectors (called embeddings). However, you don't have to use embedding methods. When your retrieval method works without any embedding, you can ignore this section. An example: You store files on a file server, and your retrieval method works exclusively with file names in the file system, so you don't need embeddings."
|
||||||
|
|
||||||
-- <b>Important:</b> The LLM may need to generate many files. This reaches the request limit of most providers. Typically, only a certain number of requests can be made per minute, and only a maximum number of tokens can be generated per minute. AI Studio automatically considers this. <b>However, generating all the files takes a certain amount of time.</b> Local or self-hosted models may work without these limitations and can generate responses faster. AI Studio dynamically adapts its behavior and always tries to achieve the fastest possible data processing.
|
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3485079498"] = "<b>Important:</b> The LLM may need to generate many files. This reaches the request limit of most providers. Typically, only a certain number of requests can be made per minute, and only a maximum number of tokens can be generated per minute. AI Studio automatically considers this. <b>However, generating all the files takes a certain amount of time.</b> Local or self-hosted models may work without these limitations and can generate responses faster. AI Studio dynamically adapts its behavior and always tries to achieve the fastest possible data processing."
|
|
||||||
|
|
||||||
-- Type
|
-- Type
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3512062061"] = "Type"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3512062061"] = "Type"
|
||||||
|
|
||||||
|
-- It may happen that the AI generates a file this time that you manually created last time. In this case, your manually created file will then be overwritten. Therefore, you should always create a Git repository and commit or revert all changes before using this assistant. With a diff visualization, you can immediately see where the AI has made changes. It is best to use an IDE suitable for your selected language for this purpose.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3541842180"] = "It may happen that the AI generates a file this time that you manually created last time. In this case, your manually created file will then be overwritten. Therefore, you should always create a Git repository and commit or revert all changes before using this assistant. With a diff visualization, you can immediately see where the AI has made changes. It is best to use an IDE suitable for your selected language for this purpose."
|
||||||
|
|
||||||
-- Please describe how the selected authentication methods should be used.
|
-- Please describe how the selected authentication methods should be used.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T356079033"] = "Please describe how the selected authentication methods should be used."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T356079033"] = "Please describe how the selected authentication methods should be used."
|
||||||
|
|
||||||
@ -733,6 +748,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3865031940"] = "Actio
|
|||||||
-- ERI specification version
|
-- ERI specification version
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3897494556"] = "ERI specification version"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3897494556"] = "ERI specification version"
|
||||||
|
|
||||||
|
-- But beware:
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3956615326"] = "But beware:"
|
||||||
|
|
||||||
-- Please provide a description for your ERI server. What data will the server retrieve? This description will be used to inform users about the purpose of your ERI server.
|
-- Please provide a description for your ERI server. What data will the server retrieve? This description will be used to inform users about the purpose of your ERI server.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3973182416"] = "Please provide a description for your ERI server. What data will the server retrieve? This description will be used to inform users about the purpose of your ERI server."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3973182416"] = "Please provide a description for your ERI server. What data will the server retrieve? This description will be used to inform users about the purpose of your ERI server."
|
||||||
|
|
||||||
@ -1519,6 +1537,30 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::DATASOURCESELECTION::T86053874"] = "Avail
|
|||||||
-- Issues
|
-- Issues
|
||||||
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ISSUES::T3229841001"] = "Issues"
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ISSUES::T3229841001"] = "Issues"
|
||||||
|
|
||||||
|
-- Your Pandoc installation meets the requirements.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T1167365374"] = "Your Pandoc installation meets the requirements."
|
||||||
|
|
||||||
|
-- Please wait while we check the availability of Pandoc.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T1336364299"] = "Please wait while we check the availability of Pandoc."
|
||||||
|
|
||||||
|
-- Pandoc Installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T185447014"] = "Pandoc Installation"
|
||||||
|
|
||||||
|
-- Your Pandoc installation is outdated. Please update it to the latest version to ensure compatibility with all features.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T251757907"] = "Your Pandoc installation is outdated. Please update it to the latest version to ensure compatibility with all features."
|
||||||
|
|
||||||
|
-- Pandoc is not installed or not available. Please install it to use the features that require Pandoc.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T3147551473"] = "Pandoc is not installed or not available. Please install it to use the features that require Pandoc."
|
||||||
|
|
||||||
|
-- Update Pandoc
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T3249965383"] = "Update Pandoc"
|
||||||
|
|
||||||
|
-- Check your Pandoc installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T527187983"] = "Check your Pandoc installation"
|
||||||
|
|
||||||
|
-- Install Pandoc
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T986578435"] = "Install Pandoc"
|
||||||
|
|
||||||
-- 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.
|
-- 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.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MOTIVATION::T1057189794"] = "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."
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MOTIVATION::T1057189794"] = "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."
|
||||||
|
|
||||||
@ -2437,6 +2479,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T2814869210"
|
|||||||
-- Embedding
|
-- Embedding
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T2838542994"] = "Embedding"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T2838542994"] = "Embedding"
|
||||||
|
|
||||||
|
-- For some data types, such as Office files, MindWork AI Studio requires the open-source application Pandoc.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T3359366900"] = "For some data types, such as Office files, MindWork AI Studio requires the open-source application Pandoc."
|
||||||
|
|
||||||
-- Yes, please send my data to the cloud
|
-- Yes, please send my data to the cloud
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T3572613009"] = "Yes, please send my data to the cloud"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T3572613009"] = "Yes, please send my data to the cloud"
|
||||||
|
|
||||||
@ -2551,6 +2596,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T2814869210"] = "
|
|||||||
-- Embedding
|
-- Embedding
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T2838542994"] = "Embedding"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T2838542994"] = "Embedding"
|
||||||
|
|
||||||
|
-- For some data types, such as Office files, MindWork AI Studio requires the open-source application Pandoc.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T3359366900"] = "For some data types, such as Office files, MindWork AI Studio requires the open-source application Pandoc."
|
||||||
|
|
||||||
-- Yes, please send my data to the cloud
|
-- Yes, please send my data to the cloud
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T3572613009"] = "Yes, please send my data to the cloud"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T3572613009"] = "Yes, please send my data to the cloud"
|
||||||
|
|
||||||
@ -2746,6 +2794,96 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T900237532"] = "Pro
|
|||||||
-- Cancel
|
-- Cancel
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T900713019"] = "Cancel"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T900713019"] = "Cancel"
|
||||||
|
|
||||||
|
-- Unfortunately, Pandoc's GPL license isn't compatible with the AI Studios licenses. However, software under the GPL is free to use and free of charge. You'll need to accept the GPL license before we can download and install Pandoc for you automatically (recommended). Alternatively, you might download it yourself using the instructions below or install it otherwise, e.g., by using a package manager of your operating system.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1001483402"] = "Unfortunately, Pandoc's GPL license isn't compatible with the AI Studios licenses. However, software under the GPL is free to use and free of charge. You'll need to accept the GPL license before we can download and install Pandoc for you automatically (recommended). Alternatively, you might download it yourself using the instructions below or install it otherwise, e.g., by using a package manager of your operating system."
|
||||||
|
|
||||||
|
-- Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking "Accept GPL and Install," you agree to the terms of the GPL license, and Pandoc will be installed automatically for you. Software under GPL is free of charge and free to use.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1357200670"] = "Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking \"Accept GPL and Install,\" you agree to the terms of the GPL license, and Pandoc will be installed automatically for you. Software under GPL is free of charge and free to use."
|
||||||
|
|
||||||
|
-- View the GNU General Public License v2 (GPL)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1587398673"] = "View the GNU General Public License v2 (GPL)"
|
||||||
|
|
||||||
|
-- Reject the GPL licence
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1655899051"] = "Reject the GPL licence"
|
||||||
|
|
||||||
|
-- Automatic installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1780479836"] = "Automatic installation"
|
||||||
|
|
||||||
|
-- Manual installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1814127049"] = "Manual installation"
|
||||||
|
|
||||||
|
-- AI Studio uses the free and open-source third-party app Pandoc to process and retrieve data from local Office files (such as Word files) or to generate Office documents.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T205422394"] = "AI Studio uses the free and open-source third-party app Pandoc to process and retrieve data from local Office files (such as Word files) or to generate Office documents."
|
||||||
|
|
||||||
|
-- Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking "Accept GPL and download installer," you agree to the terms of the GPL license. Software under GPL is free of charge and free to use.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2084501359"] = "Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking \"Accept GPL and download installer,\" you agree to the terms of the GPL license. Software under GPL is free of charge and free to use."
|
||||||
|
|
||||||
|
-- Extract the archive to a folder of your choice, e.g.:
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2094245964"] = "Extract the archive to a folder of your choice, e.g.:"
|
||||||
|
|
||||||
|
-- Pandoc is open-source and free, but if you reject its license, you can't install it and some MindWork AI Studio features will be limited (like the integration of Office files) or unavailable (like the generation of Office files). You can change your decision anytime. Are you sure you want to reject the license?
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2559178004"] = "Pandoc is open-source and free, but if you reject its license, you can't install it and some MindWork AI Studio features will be limited (like the integration of Office files) or unavailable (like the generation of Office files). You can change your decision anytime. Are you sure you want to reject the license?"
|
||||||
|
|
||||||
|
-- Please wait for the installation to complete...
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2606205182"] = "Please wait for the installation to complete..."
|
||||||
|
|
||||||
|
-- Open the folder and copy the full path to the folder where your Pandoc executable file is into your clipboard:
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2946844485"] = "Open the folder and copy the full path to the folder where your Pandoc executable file is into your clipboard:"
|
||||||
|
|
||||||
|
-- Accept the GPL and start the installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2966192331"] = "Accept the GPL and start the installation"
|
||||||
|
|
||||||
|
-- Error loading license text, please consider following the links to read the GPL.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3054618024"] = "Error loading license text, please consider following the links to read the GPL."
|
||||||
|
|
||||||
|
-- Accept the GPL and download the installer
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3104260405"] = "Accept the GPL and download the installer"
|
||||||
|
|
||||||
|
-- Add the copied path to your system's or user's PATH environment variable, restart your terminal, and check the installation:
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T313476957"] = "Add the copied path to your system's or user's PATH environment variable, restart your terminal, and check the installation:"
|
||||||
|
|
||||||
|
-- Accept the terms of the GPL license and download the latest archive with the download button below.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3263447722"] = "Accept the terms of the GPL license and download the latest archive with the download button below."
|
||||||
|
|
||||||
|
-- Pandoc doesn't seem to be installed on this system. AI Studio can help you install the correct version.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3355132094"] = "Pandoc doesn't seem to be installed on this system. AI Studio can help you install the correct version."
|
||||||
|
|
||||||
|
-- Close
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3448155331"] = "Close"
|
||||||
|
|
||||||
|
-- Pandoc is installed and the version meets the requirements of MindWork AI Studio.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3653795841"] = "Pandoc is installed and the version meets the requirements of MindWork AI Studio."
|
||||||
|
|
||||||
|
-- Pandoc is installed, but the version is too old and does not meet the requirements of MindWork AI Studio. AI Studio can help you install a newer version.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3692691761"] = "Pandoc is installed, but the version is too old and does not meet the requirements of MindWork AI Studio. AI Studio can help you install a newer version."
|
||||||
|
|
||||||
|
-- Execute the installer and follow the instructions.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3730261061"] = "Execute the installer and follow the instructions."
|
||||||
|
|
||||||
|
-- If you want to install Pandoc yourself, follow one of these two guides. The first guide uses an installer and is available for Windows and macOS. Alternatively, you might use a package manager of your operating system to install Pandoc.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3780227601"] = "If you want to install Pandoc yourself, follow one of these two guides. The first guide uses an installer and is available for Windows and macOS. Alternatively, you might use a package manager of your operating system to install Pandoc."
|
||||||
|
|
||||||
|
-- Download installer
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3791603277"] = "Download installer"
|
||||||
|
|
||||||
|
-- Accept the GPL and download the archive
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3987456907"] = "Accept the GPL and download the archive"
|
||||||
|
|
||||||
|
-- Reject Pandoc's Licence
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T4092049320"] = "Reject Pandoc's Licence"
|
||||||
|
|
||||||
|
-- Proceed to the installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T4134878031"] = "Proceed to the installation"
|
||||||
|
|
||||||
|
-- Re-install Pandoc
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T4152693089"] = "Re-install Pandoc"
|
||||||
|
|
||||||
|
-- Accept the terms of the GPL license and download the latest installer with the download button below. Eventually, you need to allow the download of the installer in the download window.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T504404155"] = "Accept the terms of the GPL license and download the latest installer with the download button below. Eventually, you need to allow the download of the installer in the download window."
|
||||||
|
|
||||||
|
-- Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking "Accept GPL and archive," you agree to the terms of the GPL license. Software under GPL is free of charge and free to use.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T523908375"] = "Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking \"Accept GPL and archive,\" you agree to the terms of the GPL license. Software under GPL is free of charge and free to use."
|
||||||
|
|
||||||
-- Tell the AI what you want it to do for you. What are your goals or are you trying to achieve? Like having the AI address you informally.
|
-- Tell the AI what you want it to do for you. What are your goals or are you trying to achieve? Like having the AI address you informally.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROFILEDIALOG::T1458195391"] = "Tell the AI what you want it to do for you. What are your goals or are you trying to achieve? Like having the AI address you informally."
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROFILEDIALOG::T1458195391"] = "Tell the AI what you want it to do for you. What are your goals or are you trying to achieve? Like having the AI address you informally."
|
||||||
|
|
||||||
@ -4033,6 +4171,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1772678682"] = "This library is used t
|
|||||||
-- By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents.
|
-- By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1806897624"] = "By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1806897624"] = "By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents."
|
||||||
|
|
||||||
|
-- Pandoc Installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T185447014"] = "Pandoc Installation"
|
||||||
|
|
||||||
-- Check for updates
|
-- Check for updates
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1890416390"] = "Check for updates"
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1890416390"] = "Check for updates"
|
||||||
|
|
||||||
@ -4051,6 +4192,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2173617769"] = "This library is used 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.
|
-- For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2174764529"] = "For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2174764529"] = "For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose."
|
||||||
|
|
||||||
|
-- OK
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2246359087"] = "OK"
|
||||||
|
|
||||||
-- We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose.
|
-- We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2273492381"] = "We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2273492381"] = "We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose."
|
||||||
|
|
||||||
@ -4063,6 +4207,12 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2329884315"] = "The C# language is use
|
|||||||
-- Used PDFium version
|
-- Used PDFium version
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2368247719"] = "Used PDFium version"
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2368247719"] = "Used PDFium version"
|
||||||
|
|
||||||
|
-- installation provided by the system
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2371107659"] = "installation provided by the system"
|
||||||
|
|
||||||
|
-- Installed Pandoc version: Pandoc is not installed or not available.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2374031539"] = "Installed Pandoc version: Pandoc is not installed or not available."
|
||||||
|
|
||||||
-- This library is used to determine the language of the operating system. This is necessary to set the language of the user interface.
|
-- This library is used to determine the language of the operating system. This is necessary to set the language of the user interface.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2557014401"] = "This library is used to determine the language of the operating system. This is necessary to set the language of the user interface."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2557014401"] = "This library is used to determine the language of the operating system. This is necessary to set the language of the user interface."
|
||||||
|
|
||||||
@ -4084,6 +4234,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2706940196"] = "Logbook"
|
|||||||
-- This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read.
|
-- This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2726131107"] = "This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2726131107"] = "This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read."
|
||||||
|
|
||||||
|
-- Determine Pandoc version, please wait...
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2765814390"] = "Determine Pandoc version, please wait..."
|
||||||
|
|
||||||
-- 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.
|
-- 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.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2777988282"] = "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."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2777988282"] = "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."
|
||||||
|
|
||||||
@ -4108,6 +4261,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T313276297"] = "Connect AI Studio to yo
|
|||||||
-- Have feature ideas? Submit suggestions for future AI Studio enhancements.
|
-- Have feature ideas? Submit suggestions for future AI Studio enhancements.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3178730036"] = "Have feature ideas? Submit suggestions for future AI Studio enhancements."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3178730036"] = "Have feature ideas? Submit suggestions for future AI Studio enhancements."
|
||||||
|
|
||||||
|
-- Update Pandoc
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3249965383"] = "Update Pandoc"
|
||||||
|
|
||||||
-- Discover MindWork AI's mission and vision on our official homepage.
|
-- Discover MindWork AI's mission and vision on our official homepage.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3294830584"] = "Discover MindWork AI's mission and vision on our official homepage."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3294830584"] = "Discover MindWork AI's mission and vision on our official homepage."
|
||||||
|
|
||||||
@ -4129,9 +4285,18 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3563271893"] = "Motivation"
|
|||||||
-- This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat.
|
-- This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3722989559"] = "This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3722989559"] = "This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat."
|
||||||
|
|
||||||
|
-- this version does not met the requirements
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3813932670"] = "this version does not met the requirements"
|
||||||
|
|
||||||
-- 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.
|
-- 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.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3908558992"] = "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."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3908558992"] = "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."
|
||||||
|
|
||||||
|
-- Installed Pandoc version
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3983971016"] = "Installed Pandoc version"
|
||||||
|
|
||||||
|
-- Check Pandoc Installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3986423270"] = "Check Pandoc Installation"
|
||||||
|
|
||||||
-- Versions
|
-- Versions
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4010195468"] = "Versions"
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4010195468"] = "Versions"
|
||||||
|
|
||||||
@ -4159,9 +4324,15 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T639371534"] = "Did you find a bug or a
|
|||||||
-- 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.
|
-- 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.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T64689067"] = "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."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T64689067"] = "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."
|
||||||
|
|
||||||
|
-- installed by AI Studio
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T833849470"] = "installed by AI Studio"
|
||||||
|
|
||||||
-- For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose.
|
-- For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T870640199"] = "For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T870640199"] = "For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose."
|
||||||
|
|
||||||
|
-- Install Pandoc
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T986578435"] = "Install Pandoc"
|
||||||
|
|
||||||
-- Get coding and debugging support from an LLM.
|
-- Get coding and debugging support from an LLM.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ASSISTANTS::T1243850917"] = "Get coding and debugging support from an LLM."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ASSISTANTS::T1243850917"] = "Get coding and debugging support from an LLM."
|
||||||
|
|
||||||
@ -4996,6 +5167,42 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T816853779"] = "Failed
|
|||||||
-- Failed to retrieve the authentication methods: the ERI server did not return a valid response.
|
-- Failed to retrieve the authentication methods: the ERI server did not return a valid response.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T984407320"] = "Failed to retrieve the authentication methods: the ERI server did not return a valid response."
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T984407320"] = "Failed to retrieve the authentication methods: the ERI server did not return a valid response."
|
||||||
|
|
||||||
|
-- Was not able to validate the Pandoc installation.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T1364844008"] = "Was not able to validate the Pandoc installation."
|
||||||
|
|
||||||
|
-- Installers are not available on {0} systems.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T1640771881"] = "Installers are not available on {0} systems."
|
||||||
|
|
||||||
|
-- Pandoc v{0} was installed successfully.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T1885555132"] = "Pandoc v{0} was installed successfully."
|
||||||
|
|
||||||
|
-- Was not able to check the Pandoc installation.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T2171727146"] = "Was not able to check the Pandoc installation."
|
||||||
|
|
||||||
|
-- Pandoc v{0} is installed, but it doesn't match the required version (v{1}).
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T2299898115"] = "Pandoc v{0} is installed, but it doesn't match the required version (v{1})."
|
||||||
|
|
||||||
|
-- Pandoc v{0} is installed.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T2550598062"] = "Pandoc v{0} is installed."
|
||||||
|
|
||||||
|
-- Pandoc v{0} is installed, but it does not match the required version (v{1}).
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T2555465873"] = "Pandoc v{0} is installed, but it does not match the required version (v{1})."
|
||||||
|
|
||||||
|
-- Pandoc was not installed successfully, because the archive was not found.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T34210248"] = "Pandoc was not installed successfully, because the archive was not found."
|
||||||
|
|
||||||
|
-- Pandoc is not available on the system or the process had issues.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T3746116957"] = "Pandoc is not available on the system or the process had issues."
|
||||||
|
|
||||||
|
-- Pandoc was not installed successfully, because the archive type is unknown.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T3962211670"] = "Pandoc was not installed successfully, because the archive type is unknown."
|
||||||
|
|
||||||
|
-- It seems that Pandoc is not installed.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T567205144"] = "It seems that Pandoc is not installed."
|
||||||
|
|
||||||
|
-- The latest Pandoc version was not found, installing version {0} instead.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T726914939"] = "The latest Pandoc version was not found, installing version {0} instead."
|
||||||
|
|
||||||
-- The table AUTHORS does not exist or is using an invalid syntax.
|
-- The table AUTHORS does not exist or is using an invalid syntax.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1068328139"] = "The table AUTHORS does not exist or is using an invalid syntax."
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1068328139"] = "The table AUTHORS does not exist or is using an invalid syntax."
|
||||||
|
|
||||||
|
@ -1,15 +1,22 @@
|
|||||||
|
@if (!this.IsInline)
|
||||||
@if (!this.IsInline)
|
|
||||||
{
|
{
|
||||||
@if (this.ParentTabs is null)
|
@if (this.ParentTabs is null)
|
||||||
{
|
{
|
||||||
<MudPaper Class="code-block no-elevation" Style="@this.BlockPadding()">
|
<MudPaper Class="code-block no-elevation" Style="@this.BlockPadding">
|
||||||
<pre><code>@this.ChildContent</code></pre>
|
<pre>
|
||||||
|
<code>
|
||||||
|
@this.ChildContent
|
||||||
|
</code>
|
||||||
|
</pre>
|
||||||
</MudPaper>
|
</MudPaper>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<span class="inline-code-block"><kbd>@this.ChildContent</kbd></span>
|
<span class="inline-code-block">
|
||||||
|
<kbd>
|
||||||
|
@this.ChildContent
|
||||||
|
</kbd>
|
||||||
|
</span>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,8 +33,5 @@ public partial class CodeBlock : ComponentBase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private string BlockPadding()
|
private string BlockPadding => this.ParentTabs is null ? "padding: 16px !important;" : "padding: 8px !important";
|
||||||
{
|
|
||||||
return this.ParentTabs is null ? "padding: 16px !important;" : "padding: 8px !important";
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
<MudTabs @bind-ActivePanelIndex="selectedIndex" PanelClass="code-block" MinimumTabWidth="30px" Class="mt-2">
|
<MudTabs ActivePanelIndex="this.SelectedIndex" ActivePanelIndexChanged="async idx => await this.TabChanged(idx)" PanelClass="code-block mt-1" MinimumTabWidth="30px" Class="mt-2">
|
||||||
@foreach (var block in blocks)
|
@foreach (var block in this.blocks)
|
||||||
{
|
{
|
||||||
<MudTabPanel Text="@block.Title">
|
<MudTabPanel Text="@block.Title">
|
||||||
@block.Fragment
|
@block.Fragment
|
||||||
|
@ -7,8 +7,13 @@ public partial class CodeTabs : ComponentBase
|
|||||||
[Parameter]
|
[Parameter]
|
||||||
public RenderFragment? ChildContent { get; set; }
|
public RenderFragment? ChildContent { get; set; }
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public int SelectedIndex { get; set; }
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback<int> SelectedIndexChanged { get; set; }
|
||||||
|
|
||||||
private readonly List<CodeTabItem> blocks = new();
|
private readonly List<CodeTabItem> blocks = new();
|
||||||
private int selectedIndex;
|
|
||||||
|
|
||||||
internal void RegisterBlock(string title, RenderFragment fragment)
|
internal void RegisterBlock(string title, RenderFragment fragment)
|
||||||
{
|
{
|
||||||
@ -27,4 +32,11 @@ public partial class CodeTabs : ComponentBase
|
|||||||
|
|
||||||
public RenderFragment Fragment { get; init; } = null!;
|
public RenderFragment Fragment { get; init; } = null!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task TabChanged(int index)
|
||||||
|
{
|
||||||
|
this.SelectedIndex = index;
|
||||||
|
await this.SelectedIndexChanged.InvokeAsync(index);
|
||||||
|
await this.InvokeAsync(this.StateHasChanged);
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
<MudExpansionPanel Class="border-solid border rounded-lg" Expanded="@this.IsExpanded">
|
<MudExpansionPanel Class="border-solid border rounded-lg" Expanded="@this.IsExpanded" MaxHeight="@this.MaxHeight" ExpandedChanged="async s => await this.ExpandedChanged(s)">
|
||||||
<TitleContent>
|
<TitleContent>
|
||||||
<div class="d-flex align-center">
|
<div class="d-flex align-center">
|
||||||
<MudIcon Icon="@this.HeaderIcon" Size="@this.IconSize" Color="@this.IconColor" class="mr-3"/>
|
<MudIcon Icon="@this.HeaderIcon" Size="@this.IconSize" Color="@this.IconColor" class="mr-3"/>
|
||||||
|
@ -16,6 +16,12 @@ public partial class ExpansionPanel : ComponentBase
|
|||||||
[Parameter]
|
[Parameter]
|
||||||
public string HeaderText { get; set; } = "n/a";
|
public string HeaderText { get; set; } = "n/a";
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public int? MaxHeight { get; set; }
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public Func<bool, Task> ExpandedChanged { get; set; } = _ => Task.CompletedTask;
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public RenderFragment? ChildContent { get; set; }
|
public RenderFragment? ChildContent { get; set; }
|
||||||
|
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
@inherits MSGComponentBase
|
||||||
|
|
||||||
|
<MudStack Row="false" Class="mb-3 pa-3 border-dashed border rounded-lg">
|
||||||
|
<MudJustifiedText Typo="Typo.body1">
|
||||||
|
@this.DetermineIntroText()
|
||||||
|
</MudJustifiedText>
|
||||||
|
<MudButton Color="@this.DetermineButtonColor()" Variant="Variant.Filled" OnClick="() => this.ShowPandocDialogAsync()">
|
||||||
|
@this.DetermineButtonText()
|
||||||
|
</MudButton>
|
||||||
|
</MudStack>
|
@ -0,0 +1,97 @@
|
|||||||
|
using AIStudio.Dialogs;
|
||||||
|
using AIStudio.Tools.Services;
|
||||||
|
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
|
||||||
|
using DialogOptions = AIStudio.Dialogs.DialogOptions;
|
||||||
|
|
||||||
|
namespace AIStudio.Components;
|
||||||
|
|
||||||
|
public partial class ManagePandocDependency : MSGComponentBase
|
||||||
|
{
|
||||||
|
[Parameter]
|
||||||
|
public string IntroText { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
private IDialogService DialogService { get; init; } = null!;
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
private RustService RustService { get; init; } = null!;
|
||||||
|
|
||||||
|
private PandocInstallation pandocInstallation;
|
||||||
|
|
||||||
|
#region Overrides of MSGComponentBase
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
await base.OnInitializedAsync();
|
||||||
|
this.pandocInstallation = await Pandoc.CheckAvailabilityAsync(this.RustService, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private Color DetermineButtonColor()
|
||||||
|
{
|
||||||
|
if (this.pandocInstallation == default)
|
||||||
|
return Color.Default;
|
||||||
|
|
||||||
|
switch (this.pandocInstallation)
|
||||||
|
{
|
||||||
|
case { CheckWasSuccessful: true, IsAvailable: true }:
|
||||||
|
return Color.Default;
|
||||||
|
|
||||||
|
case { CheckWasSuccessful: true, IsAvailable: false }:
|
||||||
|
return Color.Warning;
|
||||||
|
|
||||||
|
case { CheckWasSuccessful: false }:
|
||||||
|
return Color.Error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string DetermineButtonText()
|
||||||
|
{
|
||||||
|
if(this.pandocInstallation == default)
|
||||||
|
return T("Please wait while we check the availability of Pandoc.");
|
||||||
|
|
||||||
|
switch (this.pandocInstallation)
|
||||||
|
{
|
||||||
|
case { CheckWasSuccessful: true, IsAvailable: true }:
|
||||||
|
return T("Check your Pandoc installation");
|
||||||
|
|
||||||
|
case { CheckWasSuccessful: true, IsAvailable: false }:
|
||||||
|
return T("Update Pandoc");
|
||||||
|
|
||||||
|
case { CheckWasSuccessful: false }:
|
||||||
|
return T("Install Pandoc");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string DetermineIntroText()
|
||||||
|
{
|
||||||
|
if (this.pandocInstallation == default)
|
||||||
|
return $"{this.IntroText} {T("Please wait while we check the availability of Pandoc.")}";
|
||||||
|
|
||||||
|
switch (this.pandocInstallation)
|
||||||
|
{
|
||||||
|
case { CheckWasSuccessful: true, IsAvailable: true }:
|
||||||
|
return $"{this.IntroText} {T("Your Pandoc installation meets the requirements.")}";
|
||||||
|
|
||||||
|
case { CheckWasSuccessful: true, IsAvailable: false }:
|
||||||
|
return $"{this.IntroText} {T("Your Pandoc installation is outdated. Please update it to the latest version to ensure compatibility with all features.")}";
|
||||||
|
|
||||||
|
case { CheckWasSuccessful: false }:
|
||||||
|
return $"{this.IntroText} {T("Pandoc is not installed or not available. Please install it to use the features that require Pandoc.")}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task ShowPandocDialogAsync()
|
||||||
|
{
|
||||||
|
var dialogReference = await this.DialogService.ShowAsync<PandocDialog>(T("Pandoc Installation"), DialogOptions.FULLSCREEN);
|
||||||
|
await dialogReference.Result;
|
||||||
|
|
||||||
|
// Refresh the availability of Pandoc after the dialog is closed:
|
||||||
|
this.pandocInstallation = await Pandoc.CheckAvailabilityAsync(this.RustService, false);
|
||||||
|
|
||||||
|
await this.InvokeAsync(this.StateHasChanged);
|
||||||
|
}
|
||||||
|
}
|
@ -61,6 +61,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<ManagePandocDependency IntroText="@T("For some data types, such as Office files, MindWork AI Studio requires the open-source application Pandoc.")"/>
|
||||||
|
|
||||||
<MudSelect @bind-Value="@this.dataSecurityPolicy" Text="@this.dataSecurityPolicy.ToSelectionText()" Label="@T("Your security policy")" Class="mb-3" OpenIcon="@Icons.Material.Filled.ExpandMore" AdornmentColor="Color.Info" Adornment="Adornment.Start" Validation="@this.dataSourceValidation.ValidateSecurityPolicy">
|
<MudSelect @bind-Value="@this.dataSecurityPolicy" Text="@this.dataSecurityPolicy.ToSelectionText()" Label="@T("Your security policy")" Class="mb-3" OpenIcon="@Icons.Material.Filled.ExpandMore" AdornmentColor="Color.Info" Adornment="Adornment.Start" Validation="@this.dataSourceValidation.ValidateSecurityPolicy">
|
||||||
@foreach (var policy in Enum.GetValues<DataSourceSecurity>())
|
@foreach (var policy in Enum.GetValues<DataSourceSecurity>())
|
||||||
{
|
{
|
||||||
|
@ -61,6 +61,8 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<ManagePandocDependency IntroText="@T("For some data types, such as Office files, MindWork AI Studio requires the open-source application Pandoc.")"/>
|
||||||
|
|
||||||
<MudSelect @bind-Value="@this.dataSecurityPolicy" Text="@this.dataSecurityPolicy.ToSelectionText()" Label="@T("Your security policy")" Class="mb-3" OpenIcon="@Icons.Material.Filled.ExpandMore" AdornmentColor="Color.Info" Adornment="Adornment.Start" Validation="@this.dataSourceValidation.ValidateSecurityPolicy">
|
<MudSelect @bind-Value="@this.dataSecurityPolicy" Text="@this.dataSecurityPolicy.ToSelectionText()" Label="@T("Your security policy")" Class="mb-3" OpenIcon="@Icons.Material.Filled.ExpandMore" AdornmentColor="Color.Info" Adornment="Adornment.Start" Validation="@this.dataSourceValidation.ValidateSecurityPolicy">
|
||||||
@foreach (var policy in Enum.GetValues<DataSourceSecurity>())
|
@foreach (var policy in Enum.GetValues<DataSourceSecurity>())
|
||||||
{
|
{
|
||||||
|
@ -1,154 +1,229 @@
|
|||||||
<MudDialog>
|
@inherits MSGComponentBase
|
||||||
<TitleContent>
|
|
||||||
Install Pandoc
|
<MudDialog>
|
||||||
</TitleContent>
|
|
||||||
<DialogContent>
|
<DialogContent>
|
||||||
@if (this.showInstallPage)
|
@if (this.isInstallationInProgress)
|
||||||
|
{
|
||||||
|
<MudText Typo="Typo.h4" Class="mb-3">
|
||||||
|
@T("Please wait for the installation to complete...")
|
||||||
|
</MudText>
|
||||||
|
<MudProgressLinear Color="Color.Primary" Indeterminate="@true" Size="Size.Large" Rounded="@true"/>
|
||||||
|
}
|
||||||
|
else if (this.ShowInstallationPage)
|
||||||
{
|
{
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<MudText Class="mb-2">
|
<MudJustifiedText Typo="Typo.body1" Class="mb-2">
|
||||||
AI Studio relies on the <strong>free and open-sourced</strong> third-party app <strong>Pandoc</strong> to process and retrieve data from local
|
@T("AI Studio uses the free and open-source third-party app Pandoc to process and retrieve data from local Office files (such as Word files) or to generate Office documents.")
|
||||||
Office files (ex. <strong>Word</strong>) and later other text formats like LaTeX.
|
</MudJustifiedText>
|
||||||
</MudText>
|
<MudJustifiedText Typo="Typo.body1">
|
||||||
<MudText>
|
@T("Unfortunately, Pandoc's GPL license isn't compatible with the AI Studios licenses. However, software under the GPL is free to use and free of charge. You'll need to accept the GPL license before we can download and install Pandoc for you automatically (recommended). Alternatively, you might download it yourself using the instructions below or install it otherwise, e.g., by using a package manager of your operating system.")
|
||||||
Unfortunately Pandoc's GPL license is not compatible with AI Studios licences, nonetheless software under GPL is generally free to use and
|
</MudJustifiedText>
|
||||||
free of charge as well.
|
|
||||||
Therefore you have to accept Pandoc's GPL license before we can download and install Pandoc for free
|
|
||||||
automatically for you <strong>(recommended)</strong>.
|
|
||||||
However you can download it yourself manually with the instructions below.
|
|
||||||
</MudText>
|
|
||||||
<MudExpansionPanels>
|
|
||||||
<MudExpansionPanel Text="GNU General Public License v2 (GPL)" MaxHeight="300" ExpandedChanged="OnExpandedChanged">
|
|
||||||
@if (this.isLoading)
|
|
||||||
{
|
|
||||||
<MudSkeleton />
|
|
||||||
<MudSkeleton Animation="Animation.Wave" />
|
|
||||||
<MudSkeleton />
|
|
||||||
}
|
|
||||||
else if (!string.IsNullOrEmpty(this.licenseText))
|
|
||||||
{
|
|
||||||
<MudJustifiedText>@this.licenseText</MudJustifiedText>
|
|
||||||
}
|
|
||||||
</MudExpansionPanel>
|
|
||||||
</MudExpansionPanels>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<MudExpansionPanels Class="mb-3" MultiExpansion="@false" Outlined="false" Elevation="0">
|
<MudExpansionPanels Class="mb-3" MultiExpansion="@false" Outlined="false" Elevation="0">
|
||||||
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.AutoFixHigh" HeaderText="Automatic installation" IsExpanded="true">
|
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.Verified" HeaderText="@T("View the GNU General Public License v2 (GPL)")" MaxHeight="300" ExpandedChanged="this.WhenExpandingLicence">
|
||||||
<MudText Typo="Typo.caption">
|
@if (this.isLoadingLicence)
|
||||||
Pandoc is distributed under the
|
{
|
||||||
<MudLink Typo="Typo.caption" Href="https://github.com/jgm/pandoc/blob/main/COPYRIGHT" Target="_blank">GNU General Public License v2 (GPL)</MudLink>.
|
<MudSkeleton/>
|
||||||
By clicking "Accept GPL and Install", you agree to the terms of the GPL license <br/> and Pandoc
|
<MudSkeleton Animation="Animation.Wave"/>
|
||||||
will be installed automatically for you. Software under GPL is <strong>free of charge</strong> and free to use.<br/>
|
<MudSkeleton/>
|
||||||
</MudText>
|
}
|
||||||
<MudButton OnClick="InstallPandocAsync" Color="Color.Primary" Class="mt-4" Variant="Variant.Filled" Size="Size.Small" StartIcon="@Icons.Material.Filled.InstallDesktop">
|
else if (!string.IsNullOrWhiteSpace(this.licenseText))
|
||||||
Accept GPL and install for free
|
{
|
||||||
|
<MudMarkdown Value="@this.licenseText" OverrideHeaderTypo="@Markdown.OverrideHeaderTypo"/>
|
||||||
|
}
|
||||||
|
</ExpansionPanel>
|
||||||
|
|
||||||
|
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.AutoFixHigh" HeaderText="@T("Automatic installation")" IsExpanded="true">
|
||||||
|
<MudJustifiedText Typo="Typo.body1">
|
||||||
|
@T("""Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking "Accept GPL and Install," you agree to the terms of the GPL license, and Pandoc will be installed automatically for you. Software under GPL is free of charge and free to use.""")
|
||||||
|
</MudJustifiedText>
|
||||||
|
<MudButton OnClick="this.InstallPandocAsync" Color="Color.Primary" Class="mt-4" Variant="Variant.Filled" Size="Size.Medium" StartIcon="@Icons.Material.Filled.InstallDesktop">
|
||||||
|
@T("Accept the GPL and start the installation")
|
||||||
</MudButton>
|
</MudButton>
|
||||||
</ExpansionPanel>
|
</ExpansionPanel>
|
||||||
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.Build" HeaderText="Manual installation">
|
|
||||||
<MudText Class="mb-2">
|
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.Build" HeaderText="@T("Manual installation")" ExpandedChanged="this.WhenExpandingManualInstallation">
|
||||||
If you prefer to install Pandoc yourself, please follow one of these two guides. Installers are only available for Windows and Mac.
|
<MudJustifiedText Typo="Typo.body1" Class="mb-2">
|
||||||
</MudText>
|
@T("If you want to install Pandoc yourself, follow one of these two guides. The first guide uses an installer and is available for Windows and macOS. Alternatively, you might use a package manager of your operating system to install Pandoc.")
|
||||||
|
</MudJustifiedText>
|
||||||
|
|
||||||
<MudExpansionPanels Outlined="false" Elevation="0">
|
<MudExpansionPanels Outlined="false" Elevation="0">
|
||||||
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.AppRegistration" HeaderText="Download with installer" IsExpanded="true">
|
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.AppRegistration" HeaderText="@T("Download installer")" IsExpanded="true">
|
||||||
<MudList T="string">
|
<MudList T="string">
|
||||||
<MudListItem T="string" Class="mb-2">
|
<MudListItem T="string" Class="mb-2">
|
||||||
Accept the terms of the GPL license and download the latest installer with the download button below.
|
<MudJustifiedText Typo="Typo.body1">
|
||||||
Eventually you need to allow the download of the installer in the download window.
|
@T("Accept the terms of the GPL license and download the latest installer with the download button below. Eventually, you need to allow the download of the installer in the download window.")
|
||||||
<CodeTabs>
|
</MudJustifiedText>
|
||||||
<CodeBlock Title="Windows">pandoc-@(PANDOC_VERSION)-windows-x86_64.msi</CodeBlock>
|
<CodeTabs @bind-SelectedIndex="this.selectedInstallerIndex">
|
||||||
<CodeBlock Title="Mac OS x86">pandoc-@(PANDOC_VERSION)-x86_64-macOS.pkg</CodeBlock>
|
<CodeBlock Title="Windows">pandoc-@(LATEST_PANDOC_VERSION)-windows-x86_64.msi</CodeBlock>
|
||||||
<CodeBlock Title="Mac OS ARM">pandoc-@(PANDOC_VERSION)-arm64-macOS.pkg</CodeBlock>
|
<CodeBlock Title="macOS ARM">pandoc-@(LATEST_PANDOC_VERSION)-arm64-macOS.pkg</CodeBlock>
|
||||||
|
<CodeBlock Title="macOS x86">pandoc-@(LATEST_PANDOC_VERSION)-x86_64-macOS.pkg</CodeBlock>
|
||||||
</CodeTabs>
|
</CodeTabs>
|
||||||
</MudListItem>
|
</MudListItem>
|
||||||
<MudListItem T="string">
|
<MudListItem T="string">
|
||||||
Execute the installer and follow the instructions.
|
<MudJustifiedText Typo="Typo.body1">
|
||||||
|
@T("Execute the installer and follow the instructions.")
|
||||||
|
</MudJustifiedText>
|
||||||
</MudListItem>
|
</MudListItem>
|
||||||
</MudList>
|
</MudList>
|
||||||
<MudText Class="mb-3" Typo="Typo.caption">
|
|
||||||
Pandoc is distributed under the <MudLink Typo="Typo.caption" Href="https://github.com/jgm/pandoc/blob/main/COPYRIGHT" Target="_blank">GNU General Public License v2 (GPL)</MudLink>.
|
<MudJustifiedText Class="mb-3" Typo="Typo.body1">
|
||||||
By clicking "Accept GPL and download installer", you agree to the terms of the GPL license. Software under GPL is <strong>free of charge</strong> and free to use.<br/>
|
@T("""Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking "Accept GPL and download installer," you agree to the terms of the GPL license. Software under GPL is free of charge and free to use.""")
|
||||||
</MudText>
|
</MudJustifiedText>
|
||||||
<MudButton OnClick="@this.GetInstaller" Color="Color.Secondary" Class="mt-4" Variant="Variant.Filled" Size="Size.Small" StartIcon="@Icons.Material.Filled.Downloading">
|
|
||||||
Accept GPL and download installer
|
<MudButton Href="@this.downloadUrlInstaller" Target="_blank" Color="Color.Primary" Class="mt-4" Variant="Variant.Filled" Size="Size.Medium" StartIcon="@Icons.Material.Filled.Downloading">
|
||||||
|
@T("Accept the GPL and download the installer")
|
||||||
</MudButton>
|
</MudButton>
|
||||||
</ExpansionPanel>
|
</ExpansionPanel>
|
||||||
<ExpansionPanel HeaderIcon="@Icons.Material.Outlined.Archive" HeaderText="Download with archive">
|
|
||||||
|
<ExpansionPanel HeaderIcon="@Icons.Material.Outlined.Archive" HeaderText="Download archive">
|
||||||
<MudList T="string">
|
<MudList T="string">
|
||||||
<MudListItem T="string" Class="mb-2">
|
<MudListItem T="string" Class="mb-2">
|
||||||
Accept the terms of the GPL license and download the latest archive with the download button below.
|
<MudJustifiedText Typo="Typo.body1">
|
||||||
|
@T("Accept the terms of the GPL license and download the latest archive with the download button below.")
|
||||||
|
</MudJustifiedText>
|
||||||
</MudListItem>
|
</MudListItem>
|
||||||
|
|
||||||
<MudListItem T="string" Class="mb-2">
|
<MudListItem T="string" Class="mb-2">
|
||||||
Extract the archive to a folder of your choice.
|
<MudJustifiedText Typo="Typo.body1">
|
||||||
<CodeTabs>
|
@T("Extract the archive to a folder of your choice, e.g.:")
|
||||||
|
</MudJustifiedText>
|
||||||
|
<CodeTabs @bind-SelectedIndex="this.selectedArchiveIndex">
|
||||||
<CodeBlock Title="Windows">C:\Users\%USERNAME%\pandoc</CodeBlock>
|
<CodeBlock Title="Windows">C:\Users\%USERNAME%\pandoc</CodeBlock>
|
||||||
<CodeBlock Title="Mac OS">/usr/local/bin/pandoc</CodeBlock>
|
<CodeBlock Title="macOS">~/pandoc</CodeBlock>
|
||||||
<CodeBlock Title="Linux">/usr/local/bin/pandoc</CodeBlock>
|
<CodeBlock Title="Linux">/usr/local/bin/pandoc</CodeBlock>
|
||||||
</CodeTabs>
|
</CodeTabs>
|
||||||
</MudListItem>
|
</MudListItem>
|
||||||
|
|
||||||
<MudListItem T="string" Class="mb-2">
|
<MudListItem T="string" Class="mb-2">
|
||||||
Open the folder and copy the full path to the <CodeBlock IsInline="@true">pandoc.exe</CodeBlock> file into your
|
<MudJustifiedText Typo="Typo.body1">
|
||||||
clipboard.
|
@T("Open the folder and copy the full path to the folder where your Pandoc executable file is into your clipboard:")
|
||||||
<CodeTabs>
|
</MudJustifiedText>
|
||||||
<CodeBlock Title="Windows">C:\Users\%USERNAME%\pandoc\pandoc-@(PANDOC_VERSION)</CodeBlock>
|
<CodeTabs @bind-SelectedIndex="this.selectedArchiveIndex">
|
||||||
<CodeBlock Title="Mac OS">/usr/local/bin/pandoc/pandoc-@(PANDOC_VERSION)</CodeBlock>
|
<CodeBlock Title="Windows">C:\Users\%USERNAME%\pandoc\pandoc-@(LATEST_PANDOC_VERSION)</CodeBlock>
|
||||||
<CodeBlock Title="Linux">/usr/local/bin/pandoc/pandoc-@(PANDOC_VERSION)</CodeBlock>
|
<CodeBlock Title="macOS">~/pandoc/pandoc-@(LATEST_PANDOC_VERSION)</CodeBlock>
|
||||||
|
<CodeBlock Title="Linux">/usr/local/bin/pandoc/pandoc-@(LATEST_PANDOC_VERSION)</CodeBlock>
|
||||||
</CodeTabs>
|
</CodeTabs>
|
||||||
</MudListItem>
|
</MudListItem>
|
||||||
|
|
||||||
<MudListItem T="string">
|
<MudListItem T="string">
|
||||||
Add the copied path to your systems environment variables and check the installation
|
<MudJustifiedText Typo="Typo.body1">
|
||||||
by typing <br/><CodeBlock IsInline="@true">pandoc --version</CodeBlock>
|
@T("Add the copied path to your system's or user's PATH environment variable, restart your terminal, and check the installation:")
|
||||||
into your command line interface.
|
</MudJustifiedText>
|
||||||
<CodeTabs>
|
<CodeTabs @bind-SelectedIndex="this.selectedArchiveIndex">
|
||||||
<CodeBlock Title="Windows">> pandoc.exe --version<br/>> pandoc.exe @(PANDOC_VERSION)</CodeBlock>
|
<CodeBlock Title="Windows">> pandoc.exe --version<br/>> pandoc @(LATEST_PANDOC_VERSION)</CodeBlock>
|
||||||
<CodeBlock Title="Mac OS">> pandoc --version<br/>> pandoc.exe @(PANDOC_VERSION)</CodeBlock>
|
<CodeBlock Title="macOS">> pandoc --version<br/>> pandoc @(LATEST_PANDOC_VERSION)</CodeBlock>
|
||||||
<CodeBlock Title="Linux">> pandoc --version<br/>> pandoc.exe @(PANDOC_VERSION)</CodeBlock>
|
<CodeBlock Title="Linux">> pandoc --version<br/>> pandoc @(LATEST_PANDOC_VERSION)</CodeBlock>
|
||||||
</CodeTabs>
|
</CodeTabs>
|
||||||
</MudListItem>
|
</MudListItem>
|
||||||
</MudList>
|
</MudList>
|
||||||
|
|
||||||
<MudText Class="mb-3" Typo="Typo.caption">
|
<MudText Class="mb-3" Typo="Typo.caption">
|
||||||
Pandoc is distributed under the <MudLink Typo="Typo.caption" Href="https://github.com/jgm/pandoc/blob/main/COPYRIGHT" Target="_blank">GNU General Public License v2 (GPL)</MudLink>.
|
<MudJustifiedText Typo="Typo.body1">
|
||||||
By clicking "Accept GPL and archive", you agree to the terms of the GPL license. Software under GPL is <strong>free of charge</strong> and free to use.<br/>
|
@T("""Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking "Accept GPL and archive," you agree to the terms of the GPL license. Software under GPL is free of charge and free to use.""")
|
||||||
|
</MudJustifiedText>
|
||||||
</MudText>
|
</MudText>
|
||||||
<MudButton OnClick="@this.GetArchive" Color="Color.Secondary" Class="mt-4" Variant="Variant.Filled" Size="Size.Small" StartIcon="@Icons.Material.Filled.Downloading">
|
|
||||||
Accept GPL and download archive
|
<MudButton Href="@this.downloadUrlArchive" Target="_blank" Color="Color.Primary" Class="mt-4" Variant="Variant.Filled" Size="Size.Medium" StartIcon="@Icons.Material.Filled.Downloading">
|
||||||
|
@T("Accept the GPL and download the archive")
|
||||||
</MudButton>
|
</MudButton>
|
||||||
</ExpansionPanel>
|
</ExpansionPanel>
|
||||||
</MudExpansionPanels>
|
</MudExpansionPanels>
|
||||||
</ExpansionPanel>
|
</ExpansionPanel>
|
||||||
</MudExpansionPanels>
|
</MudExpansionPanels>
|
||||||
<div class="mt-2">
|
|
||||||
<MudButton OnClick="@this.RejectLicense" Variant="Variant.Text" Color="Color.Default">Reject GPL licence</MudButton>
|
|
||||||
</div>
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<MudItem Class="px-8 py-2" Style="height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;">
|
<MudItem Class="px-8 py-2">
|
||||||
@if (showSkeleton)
|
@if (this.pandocInstallation == default)
|
||||||
{
|
{
|
||||||
<MudSkeleton SkeletonType="SkeletonType.Circle" Animation="Animation.Pulse" Class="mb-4"
|
<MudStack Row="true" AlignItems="AlignItems.Center">
|
||||||
Style="width: 4em; height: 4em;"/>
|
<MudSkeleton SkeletonType="SkeletonType.Circle" Width="4em" Height="4em" Animation="Animation.Pulse"/>
|
||||||
<MudSkeleton SkeletonType="SkeletonType.Rectangle" Animation="Animation.Pulse" Width="230px"
|
<MudStack Row="false" Class="d-flex flex-column flex-grow-1">
|
||||||
Height="35px"/>
|
<MudSkeleton Width="90%" Animation="Animation.Wave"/>
|
||||||
}
|
<MudSkeleton Width="75%" Animation="Animation.Wave"/>
|
||||||
else if (isPandocAvailable)
|
<MudSkeleton Width="55%"/>
|
||||||
{
|
<MudSkeleton Width="12%"/>
|
||||||
<MudIcon Class="mb-2" Style="width: 2.5em; height: 2.5em;" Icon="@Icons.Material.Filled.Check"
|
</MudStack>
|
||||||
Color="Color.Success"/>
|
</MudStack>
|
||||||
<MudText Typo="Typo.subtitle1" Align="Align.Center">
|
|
||||||
Pandoc ist auf Ihrem System verfügbar
|
|
||||||
</MudText>
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<MudIcon Class="mb-2" Style="width: 3.5em; height: 3.5em;" Icon="@Icons.Material.Filled.Error" Color="Color.Error"/>
|
switch (this.pandocInstallation)
|
||||||
<MudText Class="mb-6" Typo="Typo.subtitle1" Align="Align.Center">
|
{
|
||||||
Pandoc ist auf Ihrem System nicht verfügbar
|
case { CheckWasSuccessful: true, IsAvailable: true }:
|
||||||
</MudText>
|
<MudStack Row="true" AlignItems="AlignItems.Center">
|
||||||
<MudButton Color="Color.Primary" OnClick="@this.ProceedToInstallation" Variant="Variant.Filled">
|
<MudIcon Style="width: 2.5em; height: 2.5em;" Icon="@Icons.Material.Filled.Check" Color="Color.Success"/>
|
||||||
Proceed to installation
|
<MudJustifiedText Typo="Typo.body1">
|
||||||
</MudButton>
|
@T("Pandoc is installed and the version meets the requirements of MindWork AI Studio.")
|
||||||
|
</MudJustifiedText>
|
||||||
|
</MudStack>
|
||||||
|
break;
|
||||||
|
|
||||||
|
case { CheckWasSuccessful: true, IsAvailable: false }:
|
||||||
|
<MudStack Row="true" AlignItems="AlignItems.Center">
|
||||||
|
<MudIcon Style="width: 3.5em; height: 3.5em;" Icon="@Icons.Material.Filled.Error" Color="Color.Error"/>
|
||||||
|
<MudJustifiedText Typo="Typo.body1">
|
||||||
|
@T("Pandoc is installed, but the version is too old and does not meet the requirements of MindWork AI Studio. AI Studio can help you install a newer version.")
|
||||||
|
</MudJustifiedText>
|
||||||
|
</MudStack>
|
||||||
|
break;
|
||||||
|
|
||||||
|
case { CheckWasSuccessful: false }:
|
||||||
|
<MudStack Row="true" AlignItems="AlignItems.Center">
|
||||||
|
<MudIcon Style="width: 3.5em; height: 3.5em;" Icon="@Icons.Material.Filled.Error" Color="Color.Error"/>
|
||||||
|
<MudJustifiedText Typo="Typo.body1">
|
||||||
|
@T("Pandoc doesn't seem to be installed on this system. AI Studio can help you install the correct version.")
|
||||||
|
</MudJustifiedText>
|
||||||
|
</MudStack>
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</MudItem>
|
</MudItem>
|
||||||
}
|
}
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
|
<DialogActions>
|
||||||
|
@if (this.isInstallationInProgress)
|
||||||
|
{
|
||||||
|
<MudButton OnClick="@this.Cancel" Variant="Variant.Filled">
|
||||||
|
@T("Close")
|
||||||
|
</MudButton>
|
||||||
|
}
|
||||||
|
else if (this.ShowInstallationPage)
|
||||||
|
{
|
||||||
|
<MudButton OnClick="@this.Cancel" Variant="Variant.Filled">
|
||||||
|
@T("Close")
|
||||||
|
</MudButton>
|
||||||
|
|
||||||
|
<MudButton Color="Color.Warning" OnClick="@this.RejectLicense" Variant="Variant.Filled" Size="Size.Medium">
|
||||||
|
@T("Reject the GPL licence")
|
||||||
|
</MudButton>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<MudButton OnClick="@this.Cancel" Variant="Variant.Filled">
|
||||||
|
@T("Close")
|
||||||
|
</MudButton>
|
||||||
|
|
||||||
|
@if (this.pandocInstallation != default)
|
||||||
|
{
|
||||||
|
switch (this.pandocInstallation)
|
||||||
|
{
|
||||||
|
case { CheckWasSuccessful: true, IsAvailable: false }:
|
||||||
|
case { CheckWasSuccessful: false, IsAvailable: false }:
|
||||||
|
<MudButton Color="Color.Primary" OnClick="@this.ProceedToInstallation" Variant="Variant.Filled" Size="Size.Medium">
|
||||||
|
@T("Proceed to the installation")
|
||||||
|
</MudButton>
|
||||||
|
break;
|
||||||
|
|
||||||
|
case { CheckWasSuccessful: true, IsAvailable: true }:
|
||||||
|
<MudButton Color="Color.Default" OnClick="@this.ProceedToInstallation" Variant="Variant.Filled" Size="Size.Medium">
|
||||||
|
@T("Re-install Pandoc")
|
||||||
|
</MudButton>
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</DialogActions>
|
||||||
</MudDialog>
|
</MudDialog>
|
@ -1,19 +1,32 @@
|
|||||||
using AIStudio.Tools.Services;
|
using System.Reflection;
|
||||||
|
|
||||||
|
using AIStudio.Components;
|
||||||
|
using AIStudio.Tools.Metadata;
|
||||||
|
using AIStudio.Tools.Services;
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
|
|
||||||
|
using SharedTools;
|
||||||
|
|
||||||
namespace AIStudio.Dialogs;
|
namespace AIStudio.Dialogs;
|
||||||
|
|
||||||
public partial class PandocDialog : ComponentBase
|
public partial class PandocDialog : MSGComponentBase
|
||||||
{
|
{
|
||||||
|
private static readonly Assembly ASSEMBLY = Assembly.GetExecutingAssembly();
|
||||||
|
private static readonly MetaDataArchitectureAttribute META_DATA_ARCH = ASSEMBLY.GetCustomAttribute<MetaDataArchitectureAttribute>()!;
|
||||||
|
private static readonly RID CPU_ARCHITECTURE = META_DATA_ARCH.Architecture.ToRID();
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public bool ShowInstallationPage { get; set; }
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public bool ShowInitialResultInSnackbar { get; set; } = true;
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
private HttpClient HttpClient { get; set; } = null!;
|
private HttpClient HttpClient { get; set; } = null!;
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
private RustService RustService { get; init; } = null!;
|
private RustService RustService { get; init; } = null!;
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected IJSRuntime JsRuntime { get; init; } = null!;
|
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
private IDialogService DialogService { get; init; } = null!;
|
private IDialogService DialogService { get; init; } = null!;
|
||||||
|
|
||||||
@ -21,70 +34,61 @@ public partial class PandocDialog : ComponentBase
|
|||||||
private IMudDialogInstance MudDialog { get; set; } = null!;
|
private IMudDialogInstance MudDialog { get; set; } = null!;
|
||||||
|
|
||||||
private static readonly ILogger LOG = Program.LOGGER_FACTORY.CreateLogger("PandocDialog");
|
private static readonly ILogger LOG = Program.LOGGER_FACTORY.CreateLogger("PandocDialog");
|
||||||
private static readonly string LICENCE_URI = "https://raw.githubusercontent.com/jgm/pandoc/master/COPYRIGHT";
|
private static readonly string LICENCE_URI = "https://raw.githubusercontent.com/jgm/pandoc/refs/heads/main/COPYING.md";
|
||||||
private static string PANDOC_VERSION = "1.0.0";
|
private static string LATEST_PANDOC_VERSION = string.Empty;
|
||||||
|
|
||||||
private bool isPandocAvailable;
|
private PandocInstallation pandocInstallation;
|
||||||
private bool showSkeleton;
|
|
||||||
private bool showInstallPage;
|
|
||||||
private string? licenseText;
|
private string? licenseText;
|
||||||
private bool isLoading;
|
private bool isLoadingLicence;
|
||||||
|
private bool isInstallationInProgress;
|
||||||
|
private int selectedInstallerIndex = SelectInstallerIndex();
|
||||||
|
private int selectedArchiveIndex = SelectArchiveIndex();
|
||||||
|
private string downloadUrlArchive = string.Empty;
|
||||||
|
private string downloadUrlInstaller = string.Empty;
|
||||||
|
|
||||||
#region Overrides of ComponentBase
|
#region Overrides of ComponentBase
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
await base.OnInitializedAsync();
|
await base.OnInitializedAsync();
|
||||||
this.showSkeleton = true;
|
|
||||||
await this.CheckPandocAvailabilityAsync();
|
LATEST_PANDOC_VERSION = await Pandoc.FetchLatestVersionAsync();
|
||||||
PANDOC_VERSION = await Pandoc.FetchLatestVersionAsync();
|
await this.CheckPandocAvailabilityAsync(this.ShowInitialResultInSnackbar);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private void Cancel() => this.MudDialog.Cancel();
|
private void Cancel() => this.MudDialog.Cancel();
|
||||||
|
|
||||||
private async Task CheckPandocAvailabilityAsync()
|
private async Task CheckPandocAvailabilityAsync(bool useSnackbar)
|
||||||
{
|
{
|
||||||
this.isPandocAvailable = await Pandoc.CheckAvailabilityAsync(this.RustService);
|
this.pandocInstallation = await Pandoc.CheckAvailabilityAsync(this.RustService, useSnackbar);
|
||||||
this.showSkeleton = false;
|
|
||||||
await this.InvokeAsync(this.StateHasChanged);
|
await this.InvokeAsync(this.StateHasChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task InstallPandocAsync()
|
private async Task InstallPandocAsync()
|
||||||
{
|
{
|
||||||
|
this.isInstallationInProgress = true;
|
||||||
|
this.StateHasChanged();
|
||||||
|
|
||||||
await Pandoc.InstallAsync(this.RustService);
|
await Pandoc.InstallAsync(this.RustService);
|
||||||
|
|
||||||
|
this.isInstallationInProgress = false;
|
||||||
this.MudDialog.Close(DialogResult.Ok(true));
|
this.MudDialog.Close(DialogResult.Ok(true));
|
||||||
await this.DialogService.ShowAsync<PandocDialog>("pandoc dialog");
|
await this.DialogService.ShowAsync<PandocDialog>("Pandoc Installation", DialogOptions.FULLSCREEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ProceedToInstallation() => this.showInstallPage = true;
|
private void ProceedToInstallation() => this.ShowInstallationPage = true;
|
||||||
|
|
||||||
private async Task GetInstaller()
|
|
||||||
{
|
|
||||||
var uri = await Pandoc.GenerateInstallerUriAsync();
|
|
||||||
var filename = this.FilenameFromUri(uri);
|
|
||||||
await this.JsRuntime.InvokeVoidAsync("triggerDownload", uri, filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task GetArchive()
|
|
||||||
{
|
|
||||||
var uri = await Pandoc.GenerateUriAsync();
|
|
||||||
var filename = this.FilenameFromUri(uri);
|
|
||||||
await this.JsRuntime.InvokeVoidAsync("triggerDownload", uri, filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task RejectLicense()
|
private async Task RejectLicense()
|
||||||
{
|
{
|
||||||
var message = "Pandoc is open-source and free of charge, but if you reject Pandoc's license, it can not be installed and some of AIStudios data retrieval features will be disabled (e.g. using Office files like Word)." +
|
var message = T("Pandoc is open-source and free, but if you reject its license, you can't install it and some MindWork AI Studio features will be limited (like the integration of Office files) or unavailable (like the generation of Office files). You can change your decision anytime. Are you sure you want to reject the license?");
|
||||||
"This decision can be revoked at any time. Are you sure you want to reject the license?";
|
|
||||||
|
|
||||||
var dialogParameters = new DialogParameters
|
var dialogParameters = new DialogParameters
|
||||||
{
|
{
|
||||||
{ "Message", message },
|
{ "Message", message },
|
||||||
};
|
};
|
||||||
|
|
||||||
var dialogReference = await this.DialogService.ShowAsync<ConfirmDialog>("Reject Pandoc's licence", dialogParameters, DialogOptions.FULLSCREEN);
|
var dialogReference = await this.DialogService.ShowAsync<ConfirmDialog>(T("Reject Pandoc's Licence"), dialogParameters, DialogOptions.FULLSCREEN);
|
||||||
var dialogResult = await dialogReference.Result;
|
var dialogResult = await dialogReference.Result;
|
||||||
if (dialogResult is null || dialogResult.Canceled)
|
if (dialogResult is null || dialogResult.Canceled)
|
||||||
dialogReference.Close();
|
dialogReference.Close();
|
||||||
@ -92,36 +96,36 @@ public partial class PandocDialog : ComponentBase
|
|||||||
this.Cancel();
|
this.Cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
private string FilenameFromUri(string uri)
|
private async Task WhenExpandingManualInstallation(bool isExpanded)
|
||||||
{
|
{
|
||||||
var index = uri.LastIndexOf('/');
|
if(string.IsNullOrWhiteSpace(this.downloadUrlArchive))
|
||||||
return uri[(index + 1)..];
|
this.downloadUrlArchive = await Pandoc.GenerateArchiveUriAsync();
|
||||||
|
|
||||||
|
if(string.IsNullOrWhiteSpace(this.downloadUrlInstaller))
|
||||||
|
this.downloadUrlInstaller = await Pandoc.GenerateInstallerUriAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task OnExpandedChanged(bool isExpanded)
|
private async Task WhenExpandingLicence(bool isExpanded)
|
||||||
{
|
{
|
||||||
if (isExpanded)
|
if (isExpanded)
|
||||||
{
|
{
|
||||||
this.isLoading = true;
|
this.isLoadingLicence = true;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await Task.Delay(600);
|
|
||||||
|
|
||||||
this.licenseText = await this.LoadLicenseTextAsync();
|
this.licenseText = await this.LoadLicenseTextAsync();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
this.licenseText = "Error loading license text, please consider following the links to read the GPL.";
|
this.licenseText = T("Error loading license text, please consider following the links to read the GPL.");
|
||||||
LOG.LogError("Error loading GPL license text:\n{ErrorMessage}", ex.Message);
|
LOG.LogError("Error loading GPL license text: {ErrorMessage}", ex.Message);
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
this.isLoading = false;
|
this.isLoadingLicence = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await Task.Delay(350);
|
|
||||||
this.licenseText = string.Empty;
|
this.licenseText = string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -130,7 +134,34 @@ public partial class PandocDialog : ComponentBase
|
|||||||
{
|
{
|
||||||
var response = await this.HttpClient.GetAsync(LICENCE_URI);
|
var response = await this.HttpClient.GetAsync(LICENCE_URI);
|
||||||
response.EnsureSuccessStatusCode();
|
response.EnsureSuccessStatusCode();
|
||||||
var content = await response.Content.ReadAsStringAsync();
|
|
||||||
return content;
|
return await response.Content.ReadAsStringAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReSharper disable RedundantSwitchExpressionArms
|
||||||
|
private static int SelectInstallerIndex() => CPU_ARCHITECTURE switch
|
||||||
|
{
|
||||||
|
RID.OSX_ARM64 => 1,
|
||||||
|
RID.OSX_X64 => 2,
|
||||||
|
|
||||||
|
RID.WIN_ARM64 => 0,
|
||||||
|
RID.WIN_X64 => 0,
|
||||||
|
|
||||||
|
_ => 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
private static int SelectArchiveIndex() => CPU_ARCHITECTURE switch
|
||||||
|
{
|
||||||
|
RID.OSX_ARM64 => 1,
|
||||||
|
RID.OSX_X64 => 1,
|
||||||
|
|
||||||
|
RID.WIN_ARM64 => 0,
|
||||||
|
RID.WIN_X64 => 0,
|
||||||
|
|
||||||
|
RID.LINUX_ARM64 => 2,
|
||||||
|
RID.LINUX_X64 => 2,
|
||||||
|
|
||||||
|
_ => 0,
|
||||||
|
};
|
||||||
|
// ReSharper restore RedundantSwitchExpressionArms
|
||||||
}
|
}
|
@ -19,13 +19,19 @@
|
|||||||
<MudListItem T="string" Icon="@Icons.Material.Outlined.Memory" Text="@VersionDotnetRuntime"/>
|
<MudListItem T="string" Icon="@Icons.Material.Outlined.Memory" Text="@VersionDotnetRuntime"/>
|
||||||
<MudListItem T="string" Icon="@Icons.Material.Outlined.Build" Text="@VersionRust"/>
|
<MudListItem T="string" Icon="@Icons.Material.Outlined.Build" Text="@VersionRust"/>
|
||||||
<MudListItem T="string" Icon="@Icons.Material.Outlined.DocumentScanner" Text="@VersionPdfium"/>
|
<MudListItem T="string" Icon="@Icons.Material.Outlined.DocumentScanner" Text="@VersionPdfium"/>
|
||||||
|
<MudListItem T="string" Icon="@Icons.Material.Outlined.Article" Text="@this.versionPandoc"/>
|
||||||
<MudListItem T="string" Icon="@Icons.Material.Outlined.Widgets" Text="@MudBlazorVersion"/>
|
<MudListItem T="string" Icon="@Icons.Material.Outlined.Widgets" Text="@MudBlazorVersion"/>
|
||||||
<MudListItem T="string" Icon="@Icons.Material.Outlined.Memory" Text="@TauriVersion"/>
|
<MudListItem T="string" Icon="@Icons.Material.Outlined.Memory" Text="@TauriVersion"/>
|
||||||
<MudListItem T="string" Icon="@Icons.Material.Outlined.Translate" Text="@this.OSLanguage"/>
|
<MudListItem T="string" Icon="@Icons.Material.Outlined.Translate" Text="@this.OSLanguage"/>
|
||||||
</MudList>
|
</MudList>
|
||||||
<MudButton Variant="Variant.Filled" Color="Color.Info" StartIcon="@Icons.Material.Filled.Update" OnClick="() => this.CheckForUpdate()">
|
<MudStack Row="true">
|
||||||
@T("Check for updates")
|
<MudButton Variant="Variant.Filled" Color="Color.Info" StartIcon="@Icons.Material.Filled.Update" OnClick="() => this.CheckForUpdate()">
|
||||||
</MudButton>
|
@T("Check for updates")
|
||||||
|
</MudButton>
|
||||||
|
<MudButton Variant="Variant.Filled" Color="Color.Default" StartIcon="@Icons.Material.Filled.Download" OnClick="async () => await this.ShowPandocDialog()">
|
||||||
|
@this.PandocButtonText
|
||||||
|
</MudButton>
|
||||||
|
</MudStack>
|
||||||
</ExpansionPanel>
|
</ExpansionPanel>
|
||||||
|
|
||||||
<ExpansionPanel HeaderIcon="@Icons.Custom.Brands.GitHub" HeaderText="@T("Community & Code")">
|
<ExpansionPanel HeaderIcon="@Icons.Custom.Brands.GitHub" HeaderText="@T("Community & Code")">
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
using AIStudio.Components;
|
using AIStudio.Components;
|
||||||
|
using AIStudio.Dialogs;
|
||||||
using AIStudio.Tools.Metadata;
|
using AIStudio.Tools.Metadata;
|
||||||
using AIStudio.Tools.Rust;
|
using AIStudio.Tools.Rust;
|
||||||
using AIStudio.Tools.Services;
|
using AIStudio.Tools.Services;
|
||||||
@ -9,6 +10,8 @@ using Microsoft.AspNetCore.Components;
|
|||||||
|
|
||||||
using SharedTools;
|
using SharedTools;
|
||||||
|
|
||||||
|
using DialogOptions = AIStudio.Dialogs.DialogOptions;
|
||||||
|
|
||||||
namespace AIStudio.Pages;
|
namespace AIStudio.Pages;
|
||||||
|
|
||||||
public partial class About : MSGComponentBase
|
public partial class About : MSGComponentBase
|
||||||
@ -16,6 +19,9 @@ public partial class About : MSGComponentBase
|
|||||||
[Inject]
|
[Inject]
|
||||||
private RustService RustService { get; init; } = null!;
|
private RustService RustService { get; init; } = null!;
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
private IDialogService DialogService { get; init; } = null!;
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
private ISnackbar Snackbar { get; init; } = null!;
|
private ISnackbar Snackbar { get; init; } = null!;
|
||||||
|
|
||||||
@ -24,6 +30,8 @@ public partial class About : MSGComponentBase
|
|||||||
private static readonly MetaDataArchitectureAttribute META_DATA_ARCH = ASSEMBLY.GetCustomAttribute<MetaDataArchitectureAttribute>()!;
|
private static readonly MetaDataArchitectureAttribute META_DATA_ARCH = ASSEMBLY.GetCustomAttribute<MetaDataArchitectureAttribute>()!;
|
||||||
private static readonly MetaDataLibrariesAttribute META_DATA_LIBRARIES = ASSEMBLY.GetCustomAttribute<MetaDataLibrariesAttribute>()!;
|
private static readonly MetaDataLibrariesAttribute META_DATA_LIBRARIES = ASSEMBLY.GetCustomAttribute<MetaDataLibrariesAttribute>()!;
|
||||||
|
|
||||||
|
private static string TB(string fallbackEN) => Tools.PluginSystem.I18N.I.T(fallbackEN, typeof(About).Namespace, nameof(About));
|
||||||
|
|
||||||
private string osLanguage = string.Empty;
|
private string osLanguage = string.Empty;
|
||||||
|
|
||||||
private static string VersionApp => $"MindWork AI Studio: v{META_DATA.Version} (commit {META_DATA.AppCommitHash}, build {META_DATA.BuildNum}, {META_DATA_ARCH.Architecture.ToRID().ToUserFriendlyName()})";
|
private static string VersionApp => $"MindWork AI Studio: v{META_DATA.Version} (commit {META_DATA.AppCommitHash}, build {META_DATA.BuildNum}, {META_DATA_ARCH.Architecture.ToRID().ToUserFriendlyName()})";
|
||||||
@ -44,6 +52,9 @@ public partial class About : MSGComponentBase
|
|||||||
|
|
||||||
private string VersionPdfium => $"{T("Used PDFium version")}: v{META_DATA_LIBRARIES.PdfiumVersion}";
|
private string VersionPdfium => $"{T("Used PDFium version")}: v{META_DATA_LIBRARIES.PdfiumVersion}";
|
||||||
|
|
||||||
|
private string versionPandoc = TB("Determine Pandoc version, please wait...");
|
||||||
|
private PandocInstallation pandocInstallation;
|
||||||
|
|
||||||
private GetLogPathsResponse logPaths;
|
private GetLogPathsResponse logPaths;
|
||||||
|
|
||||||
#region Overrides of ComponentBase
|
#region Overrides of ComponentBase
|
||||||
@ -52,11 +63,59 @@ public partial class About : MSGComponentBase
|
|||||||
{
|
{
|
||||||
this.osLanguage = await this.RustService.ReadUserLanguage();
|
this.osLanguage = await this.RustService.ReadUserLanguage();
|
||||||
this.logPaths = await this.RustService.GetLogPaths();
|
this.logPaths = await this.RustService.GetLogPaths();
|
||||||
|
|
||||||
await base.OnInitializedAsync();
|
await base.OnInitializedAsync();
|
||||||
|
await this.DeterminePandocVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
private async Task DeterminePandocVersion()
|
||||||
|
{
|
||||||
|
this.pandocInstallation = await Pandoc.CheckAvailabilityAsync(this.RustService, false);
|
||||||
|
var pandocInstallationType = this.pandocInstallation.IsLocalInstallation
|
||||||
|
? T("installed by AI Studio")
|
||||||
|
: T("installation provided by the system");
|
||||||
|
|
||||||
|
switch (this.pandocInstallation)
|
||||||
|
{
|
||||||
|
case { CheckWasSuccessful: true, IsAvailable: true }:
|
||||||
|
this.versionPandoc = $"{this.T("Installed Pandoc version")}: v{this.pandocInstallation.Version} ({pandocInstallationType}) - {T("OK")}";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case { CheckWasSuccessful: true, IsAvailable: false }:
|
||||||
|
this.versionPandoc = $"{this.T("Installed Pandoc version")}: v{this.pandocInstallation.Version} ({pandocInstallationType}) - {T("this version does not met the requirements")}";
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
this.versionPandoc = TB("Installed Pandoc version: Pandoc is not installed or not available.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.InvokeAsync(this.StateHasChanged);
|
||||||
|
}
|
||||||
|
|
||||||
|
private string PandocButtonText
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return this.pandocInstallation switch
|
||||||
|
{
|
||||||
|
{ IsAvailable: true, CheckWasSuccessful: true } => this.T("Check Pandoc Installation"),
|
||||||
|
{ IsAvailable: false, CheckWasSuccessful: true } => this.T("Update Pandoc"),
|
||||||
|
|
||||||
|
_ => this.T("Install Pandoc")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task ShowPandocDialog()
|
||||||
|
{
|
||||||
|
var dialogReference = await this.DialogService.ShowAsync<PandocDialog>(T("Pandoc Installation"), DialogOptions.FULLSCREEN);
|
||||||
|
await dialogReference.Result;
|
||||||
|
await this.DeterminePandocVersion();
|
||||||
|
}
|
||||||
|
|
||||||
private async Task CopyStartupLogPath()
|
private async Task CopyStartupLogPath()
|
||||||
{
|
{
|
||||||
await this.RustService.CopyText2Clipboard(this.Snackbar, this.logPaths.LogStartupPath);
|
await this.RustService.CopyText2Clipboard(this.Snackbar, this.logPaths.LogStartupPath);
|
||||||
|
@ -486,6 +486,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ALLOWEDLLMPROVIDERSEXTENSIONS::T4096
|
|||||||
-- Please describe at least one retrieval process.
|
-- Please describe at least one retrieval process.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1035068989"] = "Bitte beschreiben Sie mindestens einen Abrufprozess."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1035068989"] = "Bitte beschreiben Sie mindestens einen Abrufprozess."
|
||||||
|
|
||||||
|
-- Local or self-hosted models may work without these limitations and can generate responses faster. AI Studio dynamically adapts its behavior and always tries to achieve the fastest possible data processing.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1047217452"] = "Lokale oder selbst gehostete Modelle funktionieren möglicherweise ohne diese Einschränkungen und können schneller Antworten generieren. AI Studio passt sein Verhalten dynamisch an und versucht stets, die schnellstmögliche Datenverarbeitung zu erreichen."
|
||||||
|
|
||||||
-- Please select which types of LLMs users are allowed to use with the data from this ERI server.
|
-- Please select which types of LLMs users are allowed to use with the data from this ERI server.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1047631678"] = "Bitte wählen Sie aus, welche Typen von LLMs mit den Daten dieses ERI-Servers verwendet werden dürfen."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1047631678"] = "Bitte wählen Sie aus, welche Typen von LLMs mit den Daten dieses ERI-Servers verwendet werden dürfen."
|
||||||
|
|
||||||
@ -513,9 +516,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1261836894"] = "Bitte
|
|||||||
-- You have not yet added any ERI server presets.
|
-- You have not yet added any ERI server presets.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1267931972"] = "Sie haben bislang keine ERI-Server-Voreinstellung hinzugefügt."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1267931972"] = "Sie haben bislang keine ERI-Server-Voreinstellung hinzugefügt."
|
||||||
|
|
||||||
-- <b>Warning:</b> Ports below 1024 are reserved for system services. Your ERI server need to run with elevated permissions (root user).
|
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1287629674"] = "<b>Warnung:</b> Ports unter 1024 sind für Systemdienste reserviert. Ihr ERI-Server muss mit erhöhten Rechten (als Root-Benutzer) ausgeführt werden."
|
|
||||||
|
|
||||||
-- The task of writing the ERI server for you is very complex. Therefore, a very powerful LLM is needed to successfully accomplish this task. Small local models will probably not be sufficient. Instead, try using a large cloud-based or a large self-hosted model.
|
-- The task of writing the ERI server for you is very complex. Therefore, a very powerful LLM is needed to successfully accomplish this task. Small local models will probably not be sufficient. Instead, try using a large cloud-based or a large self-hosted model.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1302705248"] = "Die Aufgabe, den ERI-Server für Sie zu schreiben, ist sehr komplex. Daher wird ein sehr leistungsfähiges LLM benötigt, um diese Aufgabe erfolgreich zu bewältigen. Kleine lokale Modelle werden dafür wahrscheinlich nicht ausreichen. Versuchen Sie stattdessen, ein großes Cloud-basiertes oder ein großes selbst gehostetes Modell zu verwenden."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1302705248"] = "Die Aufgabe, den ERI-Server für Sie zu schreiben, ist sehr komplex. Daher wird ein sehr leistungsfähiges LLM benötigt, um diese Aufgabe erfolgreich zu bewältigen. Kleine lokale Modelle werden dafür wahrscheinlich nicht ausreichen. Versuchen Sie stattdessen, ein großes Cloud-basiertes oder ein großes selbst gehostetes Modell zu verwenden."
|
||||||
|
|
||||||
@ -537,12 +537,18 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1456749976"] = "Bitte
|
|||||||
-- Delete
|
-- Delete
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1469573738"] = "Löschen"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1469573738"] = "Löschen"
|
||||||
|
|
||||||
|
-- When you rebuild / re-generate the ERI server code, AI Studio proceeds as follows: All files generated last time will be deleted. All other files you have created remain. Then, the AI generates the new files.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1531680404"] = "Wenn Sie den ERI-Server-Code neu erstellen oder generieren, geht AI Studio wie folgt vor: Alle beim letzten Mal generierten Dateien werden gelöscht. Alle anderen von ihnen erstellten Dateien bleiben erhalten. Anschließend generiert die KI die neuen Dateien."
|
||||||
|
|
||||||
-- Related links:
|
-- Related links:
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1565111217"] = "Relevante Links:"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1565111217"] = "Relevante Links:"
|
||||||
|
|
||||||
-- Please select an ERI specification version for the ERI server.
|
-- Please select an ERI specification version for the ERI server.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1612890554"] = "Bitte wählen Sie eine Version der ERI-Spezifikation für den ERI-Server aus."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1612890554"] = "Bitte wählen Sie eine Version der ERI-Spezifikation für den ERI-Server aus."
|
||||||
|
|
||||||
|
-- Ports below 1024 are reserved for system services. Your ERI server need to run with elevated permissions (root user).
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T168780641"] = "Ports unterhalb von 1024 sind für Systemdienste reserviert. Ihr ERI-Server muss mit erhöhten Rechten (als Root-Benutzer) ausgeführt werden."
|
||||||
|
|
||||||
-- Write code to file system
|
-- Write code to file system
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1717303021"] = "Code in das Dateisystem schreiben"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1717303021"] = "Code in das Dateisystem schreiben"
|
||||||
|
|
||||||
@ -564,6 +570,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T180938091"] = "Abrufp
|
|||||||
-- Provider selection for generation
|
-- Provider selection for generation
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1840198821"] = "Anbieterauswahl für die Generierung"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1840198821"] = "Anbieterauswahl für die Generierung"
|
||||||
|
|
||||||
|
-- However, generating all the files takes a certain amount of time.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1862007299"] = "Das Erzeugen aller Dateien benötigt jedoch eine gewisse Zeit."
|
||||||
|
|
||||||
-- Should we automatically save any input made?
|
-- Should we automatically save any input made?
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1980659256"] = "Sollen wir sämtliche Eingaben automatisch speichern?"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1980659256"] = "Sollen wir sämtliche Eingaben automatisch speichern?"
|
||||||
|
|
||||||
@ -579,8 +588,8 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2034620186"] = "Daten
|
|||||||
-- Interactive documentation aka Swagger UI
|
-- Interactive documentation aka Swagger UI
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2064957876"] = "Interaktive Dokumentation (auch bekannt als Swagger UI)"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2064957876"] = "Interaktive Dokumentation (auch bekannt als Swagger UI)"
|
||||||
|
|
||||||
-- When you rebuild / re-generate the ERI server code, AI Studio proceeds as follows: All files generated last time will be deleted. All other files you have created remain. Then, the AI generates the new files. <b>But beware:</b> It may happen that the AI generates a file this time that you manually created last time. In this case, your manually created file will then be overwritten. Therefore, you should always create a Git repository and commit or revert all changes before using this assistant. With a diff visualization, you can immediately see where the AI has made changes. It is best to use an IDE suitable for your selected language for this purpose.
|
-- Warning:
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2155983785"] = "Wenn Sie den ERI-Server-Code neu erstellen oder generieren, geht AI Studio wie folgt vor: Alle beim letzten Mal generierten Dateien werden gelöscht. Alle anderen von ihnen erstellten Dateien bleiben erhalten. Anschließend generiert die KI die neuen Dateien. <b>Aber Vorsicht:</b> Es kann passieren, dass die KI diesmal eine Datei generiert, die Sie beim letzten Mal manuell erstellt haben. In diesem Fall wird ihre manuell erstellte Datei überschrieben. Sie sollten daher immer ein Git-Repository anlegen und alle Änderungen vor der Nutzung dieses Assistenten committen oder gegebenenfalls zurücksetzen. Mit einer Diff-Ansicht können Sie sofort erkennen, wo die KI Änderungen vorgenommen hat. Am besten nutzen Sie dafür eine IDE, die für die von ihnen gewählte Programmiersprache geeignet ist."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2149175535"] = "Warnung:"
|
||||||
|
|
||||||
-- Add Embedding Method
|
-- Add Embedding Method
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2176833082"] = "Einbettungsmethode hinzufügen"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2176833082"] = "Einbettungsmethode hinzufügen"
|
||||||
@ -609,6 +618,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2417944396"] = "Sind
|
|||||||
-- Data source settings
|
-- Data source settings
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2440619931"] = "Datenquellen-Einstellungen"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2440619931"] = "Datenquellen-Einstellungen"
|
||||||
|
|
||||||
|
-- The LLM may need to generate many files. This reaches the request limit of most providers. Typically, only a certain number of requests can be made per minute, and only a maximum number of tokens can be generated per minute. AI Studio automatically considers this.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T248288139"] = "Das LLM muss möglicherweise viele Dateien generieren. Dadurch wird das Anfrage-Limit der meisten LLM-Anbieter erreicht. In der Regel kann nur eine bestimmte Anzahl von Anfragen pro Minute gestellt werden, und es dürfen nur eine maximale Anzahl von Tokens pro Minute erzeugt werden. AI Studio berücksichtigt dies automatisch."
|
||||||
|
|
||||||
-- Yes, please write or update all generated code to the file system
|
-- Yes, please write or update all generated code to the file system
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T252707279"] = "Ja, bitte schreibe oder aktualisiere allen erzeugten Code im Dateisystem."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T252707279"] = "Ja, bitte schreibe oder aktualisiere allen erzeugten Code im Dateisystem."
|
||||||
|
|
||||||
@ -684,18 +696,21 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3316699247"] = "Nein,
|
|||||||
-- Other language
|
-- Other language
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3374524465"] = "Andere Sprache"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3374524465"] = "Andere Sprache"
|
||||||
|
|
||||||
|
-- Important:
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3379345517"] = "Wichtig:"
|
||||||
|
|
||||||
-- ERI Server {0}
|
-- ERI Server {0}
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3443687246"] = "ERI-Server {0}"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3443687246"] = "ERI-Server {0}"
|
||||||
|
|
||||||
-- You will likely use one or more embedding methods to encode the meaning of your data into a typically high-dimensional vector space. In this case, you will use a vector database to store and search these vectors (called embeddings). However, you don't have to use embedding methods. When your retrieval method works without any embedding, you can ignore this section. An example: You store files on a file server, and your retrieval method works exclusively with file names in the file system, so you don't need embeddings.
|
-- You will likely use one or more embedding methods to encode the meaning of your data into a typically high-dimensional vector space. In this case, you will use a vector database to store and search these vectors (called embeddings). However, you don't have to use embedding methods. When your retrieval method works without any embedding, you can ignore this section. An example: You store files on a file server, and your retrieval method works exclusively with file names in the file system, so you don't need embeddings.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3446047228"] = "Sie werden wahrscheinlich eine oder mehrere Einbettungs-Methoden verwenden, um die Bedeutung Ihrer Daten in einen typischerweise hochdimensionalen Vektorraum zu kodieren. In diesem Fall nutzen Sie eine Vektordatenbank, um diese Vektoren (sogenannte Einbettungen) zu speichern und zu durchsuchen. Es ist jedoch nicht zwingend erforderlich, Einbettungs-Methoden zu verwenden. Wenn ihre Suchmethode ohne Einbettungen funktioniert, können Sie diesen Abschnitt ignorieren. Ein Beispiel: Sie speichern Dateien auf einem Dateiserver, und ihre Suchmethode arbeitet ausschließlich mit Dateinamen im Dateisystem – dann benötigen Sie keine Einbettungen."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3446047228"] = "Sie werden wahrscheinlich eine oder mehrere Einbettungs-Methoden verwenden, um die Bedeutung Ihrer Daten in einen typischerweise hochdimensionalen Vektorraum zu kodieren. In diesem Fall nutzen Sie eine Vektordatenbank, um diese Vektoren (sogenannte Einbettungen) zu speichern und zu durchsuchen. Es ist jedoch nicht zwingend erforderlich, Einbettungs-Methoden zu verwenden. Wenn ihre Suchmethode ohne Einbettungen funktioniert, können Sie diesen Abschnitt ignorieren. Ein Beispiel: Sie speichern Dateien auf einem Dateiserver, und ihre Suchmethode arbeitet ausschließlich mit Dateinamen im Dateisystem – dann benötigen Sie keine Einbettungen."
|
||||||
|
|
||||||
-- <b>Important:</b> The LLM may need to generate many files. This reaches the request limit of most providers. Typically, only a certain number of requests can be made per minute, and only a maximum number of tokens can be generated per minute. AI Studio automatically considers this. <b>However, generating all the files takes a certain amount of time.</b> Local or self-hosted models may work without these limitations and can generate responses faster. AI Studio dynamically adapts its behavior and always tries to achieve the fastest possible data processing.
|
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3485079498"] = "<b>Wichtig:</b> Das LLM muss möglicherweise viele Dateien generieren. Dadurch wird das Anfrage-Limit der meisten LLM-Anbieter erreicht. In der Regel kann nur eine bestimmte Anzahl von Anfragen pro Minute gestellt werden, und es dürfen nur eine maximale Anzahl von Tokens pro Minute erzeugt werden. AI Studio berücksichtigt dies automatisch. <b>Das Erzeugen aller Dateien benötigt jedoch eine gewisse Zeit.</b> Lokale oder selbst gehostete Modelle funktionieren möglicherweise ohne diese Einschränkungen und können schneller antworten. AI Studio passt sein Verhalten dynamisch an und versucht immer, die Daten so schnell wie möglich zu verarbeiten."
|
|
||||||
|
|
||||||
-- Type
|
-- Type
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3512062061"] = "Typ"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3512062061"] = "Typ"
|
||||||
|
|
||||||
|
-- It may happen that the AI generates a file this time that you manually created last time. In this case, your manually created file will then be overwritten. Therefore, you should always create a Git repository and commit or revert all changes before using this assistant. With a diff visualization, you can immediately see where the AI has made changes. It is best to use an IDE suitable for your selected language for this purpose.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3541842180"] = "Es kann passieren, dass die KI diesmal eine Datei generiert, die Sie beim letzten Mal manuell erstellt haben. In diesem Fall wird ihre manuell erstellte Datei überschrieben. Sie sollten daher immer ein Git-Repository anlegen und alle Änderungen vor der Nutzung dieses Assistenten committen oder gegebenenfalls zurücksetzen. Mit einer Diff-Ansicht können Sie sofort erkennen, wo die KI Änderungen vorgenommen hat. Am besten nutzen Sie dafür eine IDE, die für die von ihnen gewählte Programmiersprache geeignet ist."
|
||||||
|
|
||||||
-- Please describe how the selected authentication methods should be used.
|
-- Please describe how the selected authentication methods should be used.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T356079033"] = "Bitte beschreiben Sie, wie die ausgewählten Authentifizierungsmethoden verwendet werden sollen."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T356079033"] = "Bitte beschreiben Sie, wie die ausgewählten Authentifizierungsmethoden verwendet werden sollen."
|
||||||
|
|
||||||
@ -735,6 +750,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3865031940"] = "Aktio
|
|||||||
-- ERI specification version
|
-- ERI specification version
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3897494556"] = "ERI-Spezifikations-Version"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3897494556"] = "ERI-Spezifikations-Version"
|
||||||
|
|
||||||
|
-- But beware:
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3956615326"] = "Aber Vorsicht:"
|
||||||
|
|
||||||
-- Please provide a description for your ERI server. What data will the server retrieve? This description will be used to inform users about the purpose of your ERI server.
|
-- Please provide a description for your ERI server. What data will the server retrieve? This description will be used to inform users about the purpose of your ERI server.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3973182416"] = "Bitte geben Sie eine Beschreibung für Ihren ERI-Server an. Welche Daten wird der Server abrufen? Diese Beschreibung wird dazu verwendet, die Nutzer über den Zweck ihres ERI-Servers zu informieren."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3973182416"] = "Bitte geben Sie eine Beschreibung für Ihren ERI-Server an. Welche Daten wird der Server abrufen? Diese Beschreibung wird dazu verwendet, die Nutzer über den Zweck ihres ERI-Servers zu informieren."
|
||||||
|
|
||||||
@ -1521,6 +1539,30 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::DATASOURCESELECTION::T86053874"] = "Verf
|
|||||||
-- Issues
|
-- Issues
|
||||||
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ISSUES::T3229841001"] = "Probleme"
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ISSUES::T3229841001"] = "Probleme"
|
||||||
|
|
||||||
|
-- Your Pandoc installation meets the requirements.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T1167365374"] = "Ihre Pandoc-Installation erfüllt die Anforderungen."
|
||||||
|
|
||||||
|
-- Please wait while we check the availability of Pandoc.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T1336364299"] = "Bitte warten Sie, während wir die Verfügbarkeit von Pandoc überprüfen."
|
||||||
|
|
||||||
|
-- Pandoc Installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T185447014"] = "Pandoc-Installation"
|
||||||
|
|
||||||
|
-- Your Pandoc installation is outdated. Please update it to the latest version to ensure compatibility with all features.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T251757907"] = "Ihre Pandoc-Installation ist veraltet. Bitte aktualisieren Sie Pandoc auf die neueste Version, um die volle Kompatibilität mit allen Funktionen sicherzustellen."
|
||||||
|
|
||||||
|
-- Pandoc is not installed or not available. Please install it to use the features that require Pandoc.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T3147551473"] = "Pandoc ist nicht installiert oder nicht verfügbar. Bitte installieren Sie Pandoc, um die Funktionen zu nutzen, die Pandoc erfordern."
|
||||||
|
|
||||||
|
-- Update Pandoc
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T3249965383"] = "Pandoc aktualisieren"
|
||||||
|
|
||||||
|
-- Check your Pandoc installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T527187983"] = "Überprüfen Sie Ihre Pandoc-Installation"
|
||||||
|
|
||||||
|
-- Install Pandoc
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T986578435"] = "Pandoc installieren"
|
||||||
|
|
||||||
-- 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.
|
-- 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.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MOTIVATION::T1057189794"] = "Da mein Arbeitgeber sowohl Windows als auch Linux am Arbeitsplatz nutzt, wollte ich eine plattformübergreifende Lösung, die nahtlos auf allen wichtigen Betriebssystemen, einschließlich macOS, funktioniert. Außerdem wollte ich zeigen, dass es möglich ist, moderne, effiziente und plattformübergreifende Anwendungen zu erstellen, ohne auf Software-Balast, wie z.B. das Electron-Framework, zurückzugreifen. Die Kombination aus .NET und Rust mit Tauri hat sich dabei als hervorragender Technologiestapel für den Bau solch robuster Anwendungen erwiesen."
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MOTIVATION::T1057189794"] = "Da mein Arbeitgeber sowohl Windows als auch Linux am Arbeitsplatz nutzt, wollte ich eine plattformübergreifende Lösung, die nahtlos auf allen wichtigen Betriebssystemen, einschließlich macOS, funktioniert. Außerdem wollte ich zeigen, dass es möglich ist, moderne, effiziente und plattformübergreifende Anwendungen zu erstellen, ohne auf Software-Balast, wie z.B. das Electron-Framework, zurückzugreifen. Die Kombination aus .NET und Rust mit Tauri hat sich dabei als hervorragender Technologiestapel für den Bau solch robuster Anwendungen erwiesen."
|
||||||
|
|
||||||
@ -2439,6 +2481,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T2814869210"
|
|||||||
-- Embedding
|
-- Embedding
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T2838542994"] = "Einbettung"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T2838542994"] = "Einbettung"
|
||||||
|
|
||||||
|
-- For some data types, such as Office files, MindWork AI Studio requires the open-source application Pandoc.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T3359366900"] = "Für einige Dateitypen, wie zum Beispiel Office-Dateien, benötigt MindWork AI Studio die Open-Source-Anwendung Pandoc."
|
||||||
|
|
||||||
-- Yes, please send my data to the cloud
|
-- Yes, please send my data to the cloud
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T3572613009"] = "Ja, bitte senden Sie meine Daten in die Cloud"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T3572613009"] = "Ja, bitte senden Sie meine Daten in die Cloud"
|
||||||
|
|
||||||
@ -2553,6 +2598,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T2814869210"] = "
|
|||||||
-- Embedding
|
-- Embedding
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T2838542994"] = "Einbettung"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T2838542994"] = "Einbettung"
|
||||||
|
|
||||||
|
-- For some data types, such as Office files, MindWork AI Studio requires the open-source application Pandoc.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T3359366900"] = "Für einige Dateitypen, wie zum Beispiel Office-Dateien, benötigt MindWork AI Studio die Open-Source-Anwendung Pandoc."
|
||||||
|
|
||||||
-- Yes, please send my data to the cloud
|
-- Yes, please send my data to the cloud
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T3572613009"] = "Ja, bitte senden Sie meine Daten in die Cloud."
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T3572613009"] = "Ja, bitte senden Sie meine Daten in die Cloud."
|
||||||
|
|
||||||
@ -2748,6 +2796,96 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T900237532"] = "Anb
|
|||||||
-- Cancel
|
-- Cancel
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T900713019"] = "Abbrechen"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T900713019"] = "Abbrechen"
|
||||||
|
|
||||||
|
-- Unfortunately, Pandoc's GPL license isn't compatible with the AI Studios licenses. However, software under the GPL is free to use and free of charge. You'll need to accept the GPL license before we can download and install Pandoc for you automatically (recommended). Alternatively, you might download it yourself using the instructions below or install it otherwise, e.g., by using a package manager of your operating system.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1001483402"] = "Leider ist die GPL-Lizenz von Pandoc nicht mit der Lizenz von AI Studio kompatibel. Software unter der GPL-Lizenz ist jedoch kostenlos und frei nutzbar. Sie müssen die GPL-Lizenz akzeptieren, bevor wir Pandoc automatisch für Sie herunterladen und installieren können (empfohlen). Alternativ können Sie Pandoc auch selbst herunterladen – entweder mit den untenstehenden Anweisungen oder auf anderem Weg, zum Beispiel über den Paketmanager Ihres Betriebssystems."
|
||||||
|
|
||||||
|
-- Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking "Accept GPL and Install," you agree to the terms of the GPL license, and Pandoc will be installed automatically for you. Software under GPL is free of charge and free to use.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1357200670"] = "Pandoc wird unter der GNU General Public License v2 (GPL) vertrieben. Wenn Sie auf „GPL akzeptieren und installieren“ klicken, stimmen Sie den Bedingungen der GPL-Lizenz zu und Pandoc wird automatisch für Sie installiert. Software unter der GPL ist kostenlos und frei nutzbar."
|
||||||
|
|
||||||
|
-- View the GNU General Public License v2 (GPL)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1587398673"] = "GNU General Public License v2 (GPL) anzeigen"
|
||||||
|
|
||||||
|
-- Reject the GPL licence
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1655899051"] = "GPL-Lizenz ablehnen"
|
||||||
|
|
||||||
|
-- Automatic installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1780479836"] = "Automatische Installation"
|
||||||
|
|
||||||
|
-- Manual installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1814127049"] = "Manuelle Installation"
|
||||||
|
|
||||||
|
-- AI Studio uses the free and open-source third-party app Pandoc to process and retrieve data from local Office files (such as Word files) or to generate Office documents.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T205422394"] = "AI Studio verwendet die kostenlose und quelloffene Drittanbieter-Software Pandoc, um Daten aus lokalen Office-Dateien (wie Word-Dateien) zu verarbeiten und abzurufen oder um Office-Dokumente zu erstellen."
|
||||||
|
|
||||||
|
-- Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking "Accept GPL and download installer," you agree to the terms of the GPL license. Software under GPL is free of charge and free to use.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2084501359"] = "Pandoc wird unter der GNU General Public License v2 (GPL) verbreitet. Wenn Sie auf „GPL akzeptieren und Installer herunterladen“ klicken, stimmen Sie den Bedingungen der GPL-Lizenz zu. Software unter der GPL ist kostenlos und frei nutzbar."
|
||||||
|
|
||||||
|
-- Extract the archive to a folder of your choice, e.g.:
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2094245964"] = "Entpacken Sie das Archiv in einen Ordner Ihrer Wahl, z. B.:"
|
||||||
|
|
||||||
|
-- Pandoc is open-source and free, but if you reject its license, you can't install it and some MindWork AI Studio features will be limited (like the integration of Office files) or unavailable (like the generation of Office files). You can change your decision anytime. Are you sure you want to reject the license?
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2559178004"] = "Pandoc ist Open Source und kostenlos. Wenn Sie die Lizenz jedoch ablehnen, können Sie Pandoc nicht installieren. Dadurch werden einige Funktionen von MindWork AI Studio eingeschränkt (wie die Integration von Office-Dateien) oder stehen nicht zur Verfügung (wie das Erstellen von Office-Dateien). Sie können Ihre Entscheidung jederzeit ändern. Möchten Sie die Lizenz wirklich ablehnen?"
|
||||||
|
|
||||||
|
-- Please wait for the installation to complete...
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2606205182"] = "Bitte warten Sie, bis die Installation abgeschlossen ist..."
|
||||||
|
|
||||||
|
-- Open the folder and copy the full path to the folder where your Pandoc executable file is into your clipboard:
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2946844485"] = "Öffnen Sie den Ordner und kopieren Sie den vollständigen Pfad zu dem Ordner, in dem sich die Pandoc-Programmdatei befindet, in die Zwischenablage:"
|
||||||
|
|
||||||
|
-- Accept the GPL and start the installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2966192331"] = "Akzeptieren Sie die GPL und starten Sie die Installation"
|
||||||
|
|
||||||
|
-- Error loading license text, please consider following the links to read the GPL.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3054618024"] = "Fehler beim Laden des Lizenztexts. Bitte nutzen Sie die Links, um die GPL zu lesen."
|
||||||
|
|
||||||
|
-- Accept the GPL and download the installer
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3104260405"] = "Akzeptieren Sie die GPL und laden Sie das Installationsprogramm herunter"
|
||||||
|
|
||||||
|
-- Add the copied path to your system's or user's PATH environment variable, restart your terminal, and check the installation:
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T313476957"] = "Fügen Sie den kopierten Pfad zur PATH-Umgebungsvariable Ihres Systems oder Benutzers hinzu, starten Sie Ihr Terminal neu und überprüfen Sie die Installation:"
|
||||||
|
|
||||||
|
-- Accept the terms of the GPL license and download the latest archive with the download button below.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3263447722"] = "Akzeptieren Sie die Bedingungen der GPL-Lizenz und laden Sie das neueste Archiv mit dem untenstehenden Download-Button herunter."
|
||||||
|
|
||||||
|
-- Pandoc doesn't seem to be installed on this system. AI Studio can help you install the correct version.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3355132094"] = "Pandoc scheint auf diesem System nicht installiert zu sein. AI Studio kann ihnen helfen, die richtige Version zu installieren."
|
||||||
|
|
||||||
|
-- Close
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3448155331"] = "Schließen"
|
||||||
|
|
||||||
|
-- Pandoc is installed and the version meets the requirements of MindWork AI Studio.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3653795841"] = "Pandoc ist installiert und die Version entspricht den Anforderungen von MindWork AI Studio."
|
||||||
|
|
||||||
|
-- Pandoc is installed, but the version is too old and does not meet the requirements of MindWork AI Studio. AI Studio can help you install a newer version.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3692691761"] = "Pandoc ist installiert, aber die Version ist zu alt und erfüllt nicht die Anforderungen von MindWork AI Studio. AI Studio kann ihnen helfen, eine neuere Version zu installieren."
|
||||||
|
|
||||||
|
-- Execute the installer and follow the instructions.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3730261061"] = "Führen Sie das Installationsprogramm aus und folgen Sie den Anweisungen."
|
||||||
|
|
||||||
|
-- If you want to install Pandoc yourself, follow one of these two guides. The first guide uses an installer and is available for Windows and macOS. Alternatively, you might use a package manager of your operating system to install Pandoc.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3780227601"] = "Wenn Sie Pandoc selbst installieren möchten, folgen Sie einer der beiden Anleitungen. Die erste Anleitung verwendet ein Installationsprogramm und ist für Windows und macOS verfügbar. Alternativ können Sie auch den Paketmanager Ihres Betriebssystems verwenden, um Pandoc zu installieren."
|
||||||
|
|
||||||
|
-- Download installer
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3791603277"] = "Installer herunterladen"
|
||||||
|
|
||||||
|
-- Accept the GPL and download the archive
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3987456907"] = "Akzeptieren Sie die GPL und laden Sie das Archiv herunter"
|
||||||
|
|
||||||
|
-- Reject Pandoc's Licence
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T4092049320"] = "Pandoc-Lizenz ablehnen"
|
||||||
|
|
||||||
|
-- Proceed to the installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T4134878031"] = "Mit der Installation fortfahren"
|
||||||
|
|
||||||
|
-- Re-install Pandoc
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T4152693089"] = "Pandoc neu installieren"
|
||||||
|
|
||||||
|
-- Accept the terms of the GPL license and download the latest installer with the download button below. Eventually, you need to allow the download of the installer in the download window.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T504404155"] = "Akzeptieren Sie die Bedingungen der GPL-Lizenz und laden Sie mit dem untenstehenden Download-Button das neueste Installationsprogramm herunter. Gegebenenfalls müssen Sie den Download des Installationsprogramms im Downloadfenster erlauben."
|
||||||
|
|
||||||
|
-- Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking "Accept the GPL and download the archive," you agree to the terms of the GPL license. Software under GPL is free of charge and free to use.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T523908375"] = "Pandoc wird unter der GNU General Public License v2 (GPL) vertrieben. Wenn Sie auf „GPL akzeptieren und Archiv herunterladen“ klicken, stimmen Sie den Bedingungen der GPL-Lizenz zu. Software unter der GPL ist kostenlos und frei nutzbar."
|
||||||
|
|
||||||
-- Tell the AI what you want it to do for you. What are your goals or are you trying to achieve? Like having the AI address you informally.
|
-- Tell the AI what you want it to do for you. What are your goals or are you trying to achieve? Like having the AI address you informally.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROFILEDIALOG::T1458195391"] = "Teilen Sie der KI mit, was sie machen soll. Was sind ihre Ziele oder was möchten Sie erreichen? Zum Beispiel, dass die KI Sie duzt."
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROFILEDIALOG::T1458195391"] = "Teilen Sie der KI mit, was sie machen soll. Was sind ihre Ziele oder was möchten Sie erreichen? Zum Beispiel, dass die KI Sie duzt."
|
||||||
|
|
||||||
@ -3301,7 +3439,7 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGDATASOURCES::T108494
|
|||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGDATASOURCES::T1096979935"] = "Möchten Sie die Datenquelle „{0}“ vom Typ {1} wirklich löschen?"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGDATASOURCES::T1096979935"] = "Möchten Sie die Datenquelle „{0}“ vom Typ {1} wirklich löschen?"
|
||||||
|
|
||||||
-- Edit Local Directory Data Source
|
-- Edit Local Directory Data Source
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGDATASOURCES::T1215599168"] = "Lokale Ordner-Datenquelle bearbeiten"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGDATASOURCES::T1215599168"] = "Datenquelle bearbeiten: Lokaler Ordner"
|
||||||
|
|
||||||
-- Add Local Directory as Data Source
|
-- Add Local Directory as Data Source
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGDATASOURCES::T1454193397"] = "Lokalen Ordner als Datenquelle hinzufügen"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGDATASOURCES::T1454193397"] = "Lokalen Ordner als Datenquelle hinzufügen"
|
||||||
@ -3325,7 +3463,7 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGDATASOURCES::T214675
|
|||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGDATASOURCES::T221059217"] = "ERI v1 Datenquelle bearbeiten"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGDATASOURCES::T221059217"] = "ERI v1 Datenquelle bearbeiten"
|
||||||
|
|
||||||
-- Edit Local File Data Source
|
-- Edit Local File Data Source
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGDATASOURCES::T2453292893"] = "Lokale Datei-Datenquelle bearbeiten"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGDATASOURCES::T2453292893"] = "Datenquelle bearbeiten: Lokale Datei"
|
||||||
|
|
||||||
-- ERI v1 Data Source Information
|
-- ERI v1 Data Source Information
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGDATASOURCES::T26243729"] = "ERI v1 Datenquellen-Informationen"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SETTINGS::SETTINGSDIALOGDATASOURCES::T26243729"] = "ERI v1 Datenquellen-Informationen"
|
||||||
@ -4035,6 +4173,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1772678682"] = "Diese Bibliothek wird
|
|||||||
-- By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents.
|
-- By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1806897624"] = "Wenn Sie auf den jeweiligen Pfad klicken, wird dieser in die Zwischenablage kopiert. Sie können diese Dateien mit einem Texteditor öffnen, um ihren Inhalt anzusehen."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1806897624"] = "Wenn Sie auf den jeweiligen Pfad klicken, wird dieser in die Zwischenablage kopiert. Sie können diese Dateien mit einem Texteditor öffnen, um ihren Inhalt anzusehen."
|
||||||
|
|
||||||
|
-- Pandoc Installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T185447014"] = "Pandoc-Installation"
|
||||||
|
|
||||||
-- Check for updates
|
-- Check for updates
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1890416390"] = "Nach Updates suchen"
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1890416390"] = "Nach Updates suchen"
|
||||||
|
|
||||||
@ -4053,6 +4194,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2173617769"] = "Diese Bibliothek wird
|
|||||||
-- For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose.
|
-- For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2174764529"] = "Für die sichere Kommunikation zwischen der Benutzeroberfläche und der Laufzeit müssen wir Zertifikate erstellen. Diese Rust-Bibliothek eignet sich hervorragend dafür."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2174764529"] = "Für die sichere Kommunikation zwischen der Benutzeroberfläche und der Laufzeit müssen wir Zertifikate erstellen. Diese Rust-Bibliothek eignet sich hervorragend dafür."
|
||||||
|
|
||||||
|
-- OK
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2246359087"] = "OK"
|
||||||
|
|
||||||
-- We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose.
|
-- We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2273492381"] = "Wir müssen Zufallszahlen erzeugen, z. B. um die Kommunikation zwischen der Benutzeroberfläche und der Laufzeitumgebung abzusichern. Die rand-Bibliothek eignet sich dafür hervorragend."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2273492381"] = "Wir müssen Zufallszahlen erzeugen, z. B. um die Kommunikation zwischen der Benutzeroberfläche und der Laufzeitumgebung abzusichern. Die rand-Bibliothek eignet sich dafür hervorragend."
|
||||||
|
|
||||||
@ -4065,6 +4209,12 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2329884315"] = "Die Programmiersprache
|
|||||||
-- Used PDFium version
|
-- Used PDFium version
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2368247719"] = "Verwendete PDFium-Version"
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2368247719"] = "Verwendete PDFium-Version"
|
||||||
|
|
||||||
|
-- installation provided by the system
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2371107659"] = "Installation vom System bereitgestellt"
|
||||||
|
|
||||||
|
-- Installed Pandoc version: Pandoc is not installed or not available.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2374031539"] = "Installierte Pandoc-Version: Pandoc ist nicht installiert oder nicht verfügbar."
|
||||||
|
|
||||||
-- This library is used to determine the language of the operating system. This is necessary to set the language of the user interface.
|
-- This library is used to determine the language of the operating system. This is necessary to set the language of the user interface.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2557014401"] = "Diese Bibliothek wird verwendet, um die Sprache des Betriebssystems zu erkennen. Dies ist notwendig, um die Sprache der Benutzeroberfläche einzustellen."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2557014401"] = "Diese Bibliothek wird verwendet, um die Sprache des Betriebssystems zu erkennen. Dies ist notwendig, um die Sprache der Benutzeroberfläche einzustellen."
|
||||||
|
|
||||||
@ -4086,6 +4236,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2706940196"] = "Protokolldateien"
|
|||||||
-- This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read.
|
-- This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2726131107"] = "Diese Komponente wird verwendet, um Markdown-Text darzustellen. Das ist wichtig, weil das LLM häufig mit im Markdown-Format formatiertem Text antwortet. Dadurch können wir die Antworten besser lesbar anzeigen."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2726131107"] = "Diese Komponente wird verwendet, um Markdown-Text darzustellen. Das ist wichtig, weil das LLM häufig mit im Markdown-Format formatiertem Text antwortet. Dadurch können wir die Antworten besser lesbar anzeigen."
|
||||||
|
|
||||||
|
-- Determine Pandoc version, please wait...
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2765814390"] = "Pandoc-Version wird ermittelt, bitte warten …"
|
||||||
|
|
||||||
-- 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.
|
-- 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.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2777988282"] = "Code in der Programmiersprache Rust kann als synchron oder asynchron spezifiziert werden. Im Gegensatz zu .NET und der Sprache C# kann Rust asynchronen Code jedoch nicht von selbst ausführen. Dafür benötigt Rust Unterstützung in Form eines Executors. Tokio ist ein solcher Executor."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2777988282"] = "Code in der Programmiersprache Rust kann als synchron oder asynchron spezifiziert werden. Im Gegensatz zu .NET und der Sprache C# kann Rust asynchronen Code jedoch nicht von selbst ausführen. Dafür benötigt Rust Unterstützung in Form eines Executors. Tokio ist ein solcher Executor."
|
||||||
|
|
||||||
@ -4110,6 +4263,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T313276297"] = "Verbinden Sie AI Studio
|
|||||||
-- Have feature ideas? Submit suggestions for future AI Studio enhancements.
|
-- Have feature ideas? Submit suggestions for future AI Studio enhancements.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3178730036"] = "Haben Sie Ideen für neue Funktionen? Senden Sie uns Vorschläge für zukünftige Verbesserungen von AI Studio."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3178730036"] = "Haben Sie Ideen für neue Funktionen? Senden Sie uns Vorschläge für zukünftige Verbesserungen von AI Studio."
|
||||||
|
|
||||||
|
-- Update Pandoc
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3249965383"] = "Pandoc aktualisieren"
|
||||||
|
|
||||||
-- Discover MindWork AI's mission and vision on our official homepage.
|
-- Discover MindWork AI's mission and vision on our official homepage.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3294830584"] = "Entdecken Sie die Mission und Vision von MindWork AI auf unserer offiziellen Homepage."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3294830584"] = "Entdecken Sie die Mission und Vision von MindWork AI auf unserer offiziellen Homepage."
|
||||||
|
|
||||||
@ -4131,9 +4287,18 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3563271893"] = "Motivation"
|
|||||||
-- This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat.
|
-- This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3722989559"] = "Diese Bibliothek wird verwendet, um Excel- und OpenDocument-Tabellendateien zu lesen. Dies ist zum Beispiel notwendig, wenn Tabellen als Datenquelle für einen Chat verwendet werden sollen."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3722989559"] = "Diese Bibliothek wird verwendet, um Excel- und OpenDocument-Tabellendateien zu lesen. Dies ist zum Beispiel notwendig, wenn Tabellen als Datenquelle für einen Chat verwendet werden sollen."
|
||||||
|
|
||||||
|
-- this version does not met the requirements
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3813932670"] = "diese Version erfüllt die Anforderungen nicht"
|
||||||
|
|
||||||
-- 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.
|
-- 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.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3908558992"] = "Jetzt haben wir mehrere Systeme, einige entwickelt in .NET und andere in Rust. Das Datenformat JSON ist dafür zuständig, Daten zwischen beiden Welten zu übersetzen (dies nennt man Serialisierung und Deserialisierung von Daten). In der Rust-Welt übernimmt Serde diese Aufgabe. Das Pendant in der .NET-Welt ist ein fester Bestandteil von .NET und findet sich in System.Text.Json."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3908558992"] = "Jetzt haben wir mehrere Systeme, einige entwickelt in .NET und andere in Rust. Das Datenformat JSON ist dafür zuständig, Daten zwischen beiden Welten zu übersetzen (dies nennt man Serialisierung und Deserialisierung von Daten). In der Rust-Welt übernimmt Serde diese Aufgabe. Das Pendant in der .NET-Welt ist ein fester Bestandteil von .NET und findet sich in System.Text.Json."
|
||||||
|
|
||||||
|
-- Installed Pandoc version
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3983971016"] = "Installierte Pandoc-Version"
|
||||||
|
|
||||||
|
-- Check Pandoc Installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3986423270"] = "Pandoc-Installation prüfen"
|
||||||
|
|
||||||
-- Versions
|
-- Versions
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4010195468"] = "Versionen"
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4010195468"] = "Versionen"
|
||||||
|
|
||||||
@ -4161,9 +4326,15 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T639371534"] = "Haben Sie einen Fehler
|
|||||||
-- 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.
|
-- 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.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T64689067"] = "Diese Rust-Bibliothek wird verwendet, um die Nachrichten der App im Terminal auszugeben. Das ist während der Entwicklung und Fehlersuche hilfreich. Diese Funktion ist zunächst unsichtbar; werden App über das Terminal gestartet, werden die Nachrichten sichtbar."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T64689067"] = "Diese Rust-Bibliothek wird verwendet, um die Nachrichten der App im Terminal auszugeben. Das ist während der Entwicklung und Fehlersuche hilfreich. Diese Funktion ist zunächst unsichtbar; werden App über das Terminal gestartet, werden die Nachrichten sichtbar."
|
||||||
|
|
||||||
|
-- installed by AI Studio
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T833849470"] = "installiert von AI Studio"
|
||||||
|
|
||||||
-- For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose.
|
-- For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T870640199"] = "Für einige Datenübertragungen müssen wir die Daten in Base64 kodieren. Diese Rust-Bibliothek eignet sich dafür hervorragend."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T870640199"] = "Für einige Datenübertragungen müssen wir die Daten in Base64 kodieren. Diese Rust-Bibliothek eignet sich dafür hervorragend."
|
||||||
|
|
||||||
|
-- Install Pandoc
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T986578435"] = "Pandoc installieren"
|
||||||
|
|
||||||
-- Get coding and debugging support from an LLM.
|
-- Get coding and debugging support from an LLM.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ASSISTANTS::T1243850917"] = "Erhalten Sie Unterstützung beim Programmieren und Debuggen durch ein KI-Modell."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ASSISTANTS::T1243850917"] = "Erhalten Sie Unterstützung beim Programmieren und Debuggen durch ein KI-Modell."
|
||||||
|
|
||||||
@ -4998,6 +5169,42 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T816853779"] = "Fehler
|
|||||||
-- Failed to retrieve the authentication methods: the ERI server did not return a valid response.
|
-- Failed to retrieve the authentication methods: the ERI server did not return a valid response.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T984407320"] = "Fehler beim Abrufen der Authentifizierungsmethoden: Der ERI-Server hat keine gültige Antwort zurückgegeben."
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T984407320"] = "Fehler beim Abrufen der Authentifizierungsmethoden: Der ERI-Server hat keine gültige Antwort zurückgegeben."
|
||||||
|
|
||||||
|
-- Was not able to validate the Pandoc installation.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T1364844008"] = "Die Pandoc-Installation konnte nicht überprüft werden."
|
||||||
|
|
||||||
|
-- Installers are not available on {0} systems.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T1640771881"] = "Installationsprogramme sind für {0}-Systemen nicht verfügbar."
|
||||||
|
|
||||||
|
-- Pandoc v{0} was installed successfully.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T1885555132"] = "Pandoc v{0} wurde erfolgreich installiert."
|
||||||
|
|
||||||
|
-- Was not able to check the Pandoc installation.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T2171727146"] = "Die Pandoc-Installation konnte nicht überprüft werden."
|
||||||
|
|
||||||
|
-- Pandoc v{0} is installed, but it doesn't match the required version (v{1}).
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T2299898115"] = "Pandoc v{0} ist installiert, entspricht jedoch nicht der erforderlichen Version (v{1})."
|
||||||
|
|
||||||
|
-- Pandoc v{0} is installed.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T2550598062"] = "Pandoc v{0} ist installiert."
|
||||||
|
|
||||||
|
-- Pandoc v{0} is installed, but it does not match the required version (v{1}).
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T2555465873"] = "Pandoc v{0} ist installiert, entspricht aber nicht der benötigten Version (v{1})."
|
||||||
|
|
||||||
|
-- Pandoc was not installed successfully, because the archive was not found.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T34210248"] = "Pandoc wurde nicht erfolgreich installiert, da das Archiv nicht gefunden wurde."
|
||||||
|
|
||||||
|
-- Pandoc is not available on the system or the process had issues.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T3746116957"] = "Pandoc ist auf dem System nicht verfügbar oder der Vorgang ist auf Probleme gestoßen."
|
||||||
|
|
||||||
|
-- Pandoc was not installed successfully, because the archive type is unknown.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T3962211670"] = "Pandoc wurde nicht erfolgreich installiert, da der Archivtyp unbekannt ist."
|
||||||
|
|
||||||
|
-- It seems that Pandoc is not installed.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T567205144"] = "Es scheint, dass Pandoc nicht installiert ist."
|
||||||
|
|
||||||
|
-- The latest Pandoc version was not found, installing version {0} instead.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T726914939"] = "Die neueste Pandoc-Version wurde nicht gefunden, stattdessen wird Version {0} installiert."
|
||||||
|
|
||||||
-- The table AUTHORS does not exist or is using an invalid syntax.
|
-- The table AUTHORS does not exist or is using an invalid syntax.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1068328139"] = "Die Tabelle AUTHORS existiert nicht oder verwendet eine ungültige Syntax."
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1068328139"] = "Die Tabelle AUTHORS existiert nicht oder verwendet eine ungültige Syntax."
|
||||||
|
|
||||||
|
@ -486,6 +486,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ALLOWEDLLMPROVIDERSEXTENSIONS::T4096
|
|||||||
-- Please describe at least one retrieval process.
|
-- Please describe at least one retrieval process.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1035068989"] = "Please describe at least one retrieval process."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1035068989"] = "Please describe at least one retrieval process."
|
||||||
|
|
||||||
|
-- Local or self-hosted models may work without these limitations and can generate responses faster. AI Studio dynamically adapts its behavior and always tries to achieve the fastest possible data processing.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1047217452"] = "Local or self-hosted models may work without these limitations and can generate responses faster. AI Studio dynamically adapts its behavior and always tries to achieve the fastest possible data processing."
|
||||||
|
|
||||||
-- Please select which types of LLMs users are allowed to use with the data from this ERI server.
|
-- Please select which types of LLMs users are allowed to use with the data from this ERI server.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1047631678"] = "Please select which types of LLMs users are allowed to use with the data from this ERI server."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1047631678"] = "Please select which types of LLMs users are allowed to use with the data from this ERI server."
|
||||||
|
|
||||||
@ -513,9 +516,6 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1261836894"] = "Pleas
|
|||||||
-- You have not yet added any ERI server presets.
|
-- You have not yet added any ERI server presets.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1267931972"] = "You have not yet added any ERI server presets."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1267931972"] = "You have not yet added any ERI server presets."
|
||||||
|
|
||||||
-- <b>Warning:</b> Ports below 1024 are reserved for system services. Your ERI server need to run with elevated permissions (root user).
|
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1287629674"] = "<b>Warning:</b> Ports below 1024 are reserved for system services. Your ERI server need to run with elevated permissions (root user)."
|
|
||||||
|
|
||||||
-- The task of writing the ERI server for you is very complex. Therefore, a very powerful LLM is needed to successfully accomplish this task. Small local models will probably not be sufficient. Instead, try using a large cloud-based or a large self-hosted model.
|
-- The task of writing the ERI server for you is very complex. Therefore, a very powerful LLM is needed to successfully accomplish this task. Small local models will probably not be sufficient. Instead, try using a large cloud-based or a large self-hosted model.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1302705248"] = "The task of writing the ERI server for you is very complex. Therefore, a very powerful LLM is needed to successfully accomplish this task. Small local models will probably not be sufficient. Instead, try using a large cloud-based or a large self-hosted model."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1302705248"] = "The task of writing the ERI server for you is very complex. Therefore, a very powerful LLM is needed to successfully accomplish this task. Small local models will probably not be sufficient. Instead, try using a large cloud-based or a large self-hosted model."
|
||||||
|
|
||||||
@ -537,12 +537,18 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1456749976"] = "Pleas
|
|||||||
-- Delete
|
-- Delete
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1469573738"] = "Delete"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1469573738"] = "Delete"
|
||||||
|
|
||||||
|
-- When you rebuild / re-generate the ERI server code, AI Studio proceeds as follows: All files generated last time will be deleted. All other files you have created remain. Then, the AI generates the new files.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1531680404"] = "When you rebuild / re-generate the ERI server code, AI Studio proceeds as follows: All files generated last time will be deleted. All other files you have created remain. Then, the AI generates the new files."
|
||||||
|
|
||||||
-- Related links:
|
-- Related links:
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1565111217"] = "Related links:"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1565111217"] = "Related links:"
|
||||||
|
|
||||||
-- Please select an ERI specification version for the ERI server.
|
-- Please select an ERI specification version for the ERI server.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1612890554"] = "Please select an ERI specification version for the ERI server."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1612890554"] = "Please select an ERI specification version for the ERI server."
|
||||||
|
|
||||||
|
-- Ports below 1024 are reserved for system services. Your ERI server need to run with elevated permissions (root user).
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T168780641"] = "Ports below 1024 are reserved for system services. Your ERI server need to run with elevated permissions (root user)."
|
||||||
|
|
||||||
-- Write code to file system
|
-- Write code to file system
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1717303021"] = "Write code to file system"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1717303021"] = "Write code to file system"
|
||||||
|
|
||||||
@ -564,6 +570,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T180938091"] = "Delete
|
|||||||
-- Provider selection for generation
|
-- Provider selection for generation
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1840198821"] = "Provider selection for generation"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1840198821"] = "Provider selection for generation"
|
||||||
|
|
||||||
|
-- However, generating all the files takes a certain amount of time.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1862007299"] = "However, generating all the files takes a certain amount of time."
|
||||||
|
|
||||||
-- Should we automatically save any input made?
|
-- Should we automatically save any input made?
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1980659256"] = "Should we automatically save any input made?"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T1980659256"] = "Should we automatically save any input made?"
|
||||||
|
|
||||||
@ -579,8 +588,8 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2034620186"] = "Data
|
|||||||
-- Interactive documentation aka Swagger UI
|
-- Interactive documentation aka Swagger UI
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2064957876"] = "Interactive documentation aka Swagger UI"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2064957876"] = "Interactive documentation aka Swagger UI"
|
||||||
|
|
||||||
-- When you rebuild / re-generate the ERI server code, AI Studio proceeds as follows: All files generated last time will be deleted. All other files you have created remain. Then, the AI generates the new files. <b>But beware:</b> It may happen that the AI generates a file this time that you manually created last time. In this case, your manually created file will then be overwritten. Therefore, you should always create a Git repository and commit or revert all changes before using this assistant. With a diff visualization, you can immediately see where the AI has made changes. It is best to use an IDE suitable for your selected language for this purpose.
|
-- Warning:
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2155983785"] = "When you rebuild / re-generate the ERI server code, AI Studio proceeds as follows: All files generated last time will be deleted. All other files you have created remain. Then, the AI generates the new files. <b>But beware:</b> It may happen that the AI generates a file this time that you manually created last time. In this case, your manually created file will then be overwritten. Therefore, you should always create a Git repository and commit or revert all changes before using this assistant. With a diff visualization, you can immediately see where the AI has made changes. It is best to use an IDE suitable for your selected language for this purpose."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2149175535"] = "Warning:"
|
||||||
|
|
||||||
-- Add Embedding Method
|
-- Add Embedding Method
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2176833082"] = "Add Embedding Method"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2176833082"] = "Add Embedding Method"
|
||||||
@ -609,6 +618,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2417944396"] = "Are y
|
|||||||
-- Data source settings
|
-- Data source settings
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2440619931"] = "Data source settings"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T2440619931"] = "Data source settings"
|
||||||
|
|
||||||
|
-- The LLM may need to generate many files. This reaches the request limit of most providers. Typically, only a certain number of requests can be made per minute, and only a maximum number of tokens can be generated per minute. AI Studio automatically considers this.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T248288139"] = "The LLM may need to generate many files. This reaches the request limit of most providers. Typically, only a certain number of requests can be made per minute, and only a maximum number of tokens can be generated per minute. AI Studio automatically considers this."
|
||||||
|
|
||||||
-- Yes, please write or update all generated code to the file system
|
-- Yes, please write or update all generated code to the file system
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T252707279"] = "Yes, please write or update all generated code to the file system"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T252707279"] = "Yes, please write or update all generated code to the file system"
|
||||||
|
|
||||||
@ -684,18 +696,21 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3316699247"] = "No, j
|
|||||||
-- Other language
|
-- Other language
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3374524465"] = "Other language"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3374524465"] = "Other language"
|
||||||
|
|
||||||
|
-- Important:
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3379345517"] = "Important:"
|
||||||
|
|
||||||
-- ERI Server {0}
|
-- ERI Server {0}
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3443687246"] = "ERI Server {0}"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3443687246"] = "ERI Server {0}"
|
||||||
|
|
||||||
-- You will likely use one or more embedding methods to encode the meaning of your data into a typically high-dimensional vector space. In this case, you will use a vector database to store and search these vectors (called embeddings). However, you don't have to use embedding methods. When your retrieval method works without any embedding, you can ignore this section. An example: You store files on a file server, and your retrieval method works exclusively with file names in the file system, so you don't need embeddings.
|
-- You will likely use one or more embedding methods to encode the meaning of your data into a typically high-dimensional vector space. In this case, you will use a vector database to store and search these vectors (called embeddings). However, you don't have to use embedding methods. When your retrieval method works without any embedding, you can ignore this section. An example: You store files on a file server, and your retrieval method works exclusively with file names in the file system, so you don't need embeddings.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3446047228"] = "You will likely use one or more embedding methods to encode the meaning of your data into a typically high-dimensional vector space. In this case, you will use a vector database to store and search these vectors (called embeddings). However, you don't have to use embedding methods. When your retrieval method works without any embedding, you can ignore this section. An example: You store files on a file server, and your retrieval method works exclusively with file names in the file system, so you don't need embeddings."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3446047228"] = "You will likely use one or more embedding methods to encode the meaning of your data into a typically high-dimensional vector space. In this case, you will use a vector database to store and search these vectors (called embeddings). However, you don't have to use embedding methods. When your retrieval method works without any embedding, you can ignore this section. An example: You store files on a file server, and your retrieval method works exclusively with file names in the file system, so you don't need embeddings."
|
||||||
|
|
||||||
-- <b>Important:</b> The LLM may need to generate many files. This reaches the request limit of most providers. Typically, only a certain number of requests can be made per minute, and only a maximum number of tokens can be generated per minute. AI Studio automatically considers this. <b>However, generating all the files takes a certain amount of time.</b> Local or self-hosted models may work without these limitations and can generate responses faster. AI Studio dynamically adapts its behavior and always tries to achieve the fastest possible data processing.
|
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3485079498"] = "<b>Important:</b> The LLM may need to generate many files. This reaches the request limit of most providers. Typically, only a certain number of requests can be made per minute, and only a maximum number of tokens can be generated per minute. AI Studio automatically considers this. <b>However, generating all the files takes a certain amount of time.</b> Local or self-hosted models may work without these limitations and can generate responses faster. AI Studio dynamically adapts its behavior and always tries to achieve the fastest possible data processing."
|
|
||||||
|
|
||||||
-- Type
|
-- Type
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3512062061"] = "Type"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3512062061"] = "Type"
|
||||||
|
|
||||||
|
-- It may happen that the AI generates a file this time that you manually created last time. In this case, your manually created file will then be overwritten. Therefore, you should always create a Git repository and commit or revert all changes before using this assistant. With a diff visualization, you can immediately see where the AI has made changes. It is best to use an IDE suitable for your selected language for this purpose.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3541842180"] = "It may happen that the AI generates a file this time that you manually created last time. In this case, your manually created file will then be overwritten. Therefore, you should always create a Git repository and commit or revert all changes before using this assistant. With a diff visualization, you can immediately see where the AI has made changes. It is best to use an IDE suitable for your selected language for this purpose."
|
||||||
|
|
||||||
-- Please describe how the selected authentication methods should be used.
|
-- Please describe how the selected authentication methods should be used.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T356079033"] = "Please describe how the selected authentication methods should be used."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T356079033"] = "Please describe how the selected authentication methods should be used."
|
||||||
|
|
||||||
@ -735,6 +750,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3865031940"] = "Actio
|
|||||||
-- ERI specification version
|
-- ERI specification version
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3897494556"] = "ERI specification version"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3897494556"] = "ERI specification version"
|
||||||
|
|
||||||
|
-- But beware:
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3956615326"] = "But beware:"
|
||||||
|
|
||||||
-- Please provide a description for your ERI server. What data will the server retrieve? This description will be used to inform users about the purpose of your ERI server.
|
-- Please provide a description for your ERI server. What data will the server retrieve? This description will be used to inform users about the purpose of your ERI server.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3973182416"] = "Please provide a description for your ERI server. What data will the server retrieve? This description will be used to inform users about the purpose of your ERI server."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::ERI::ASSISTANTERI::T3973182416"] = "Please provide a description for your ERI server. What data will the server retrieve? This description will be used to inform users about the purpose of your ERI server."
|
||||||
|
|
||||||
@ -1521,6 +1539,30 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::DATASOURCESELECTION::T86053874"] = "Avail
|
|||||||
-- Issues
|
-- Issues
|
||||||
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ISSUES::T3229841001"] = "Issues"
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::ISSUES::T3229841001"] = "Issues"
|
||||||
|
|
||||||
|
-- Your Pandoc installation meets the requirements.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T1167365374"] = "Your Pandoc installation meets the requirements."
|
||||||
|
|
||||||
|
-- Please wait while we check the availability of Pandoc.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T1336364299"] = "Please wait while we check the availability of Pandoc."
|
||||||
|
|
||||||
|
-- Pandoc Installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T185447014"] = "Pandoc Installation"
|
||||||
|
|
||||||
|
-- Your Pandoc installation is outdated. Please update it to the latest version to ensure compatibility with all features.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T251757907"] = "Your Pandoc installation is outdated. Please update it to the latest version to ensure compatibility with all features."
|
||||||
|
|
||||||
|
-- Pandoc is not installed or not available. Please install it to use the features that require Pandoc.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T3147551473"] = "Pandoc is not installed or not available. Please install it to use the features that require Pandoc."
|
||||||
|
|
||||||
|
-- Update Pandoc
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T3249965383"] = "Update Pandoc"
|
||||||
|
|
||||||
|
-- Check your Pandoc installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T527187983"] = "Check your Pandoc installation"
|
||||||
|
|
||||||
|
-- Install Pandoc
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MANAGEPANDOCDEPENDENCY::T986578435"] = "Install Pandoc"
|
||||||
|
|
||||||
-- 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.
|
-- 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.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MOTIVATION::T1057189794"] = "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."
|
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::MOTIVATION::T1057189794"] = "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."
|
||||||
|
|
||||||
@ -2439,6 +2481,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T2814869210"
|
|||||||
-- Embedding
|
-- Embedding
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T2838542994"] = "Embedding"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T2838542994"] = "Embedding"
|
||||||
|
|
||||||
|
-- For some data types, such as Office files, MindWork AI Studio requires the open-source application Pandoc.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T3359366900"] = "For some data types, such as Office files, MindWork AI Studio requires the open-source application Pandoc."
|
||||||
|
|
||||||
-- Yes, please send my data to the cloud
|
-- Yes, please send my data to the cloud
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T3572613009"] = "Yes, please send my data to the cloud"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALDIRECTORYDIALOG::T3572613009"] = "Yes, please send my data to the cloud"
|
||||||
|
|
||||||
@ -2553,6 +2598,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T2814869210"] = "
|
|||||||
-- Embedding
|
-- Embedding
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T2838542994"] = "Embedding"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T2838542994"] = "Embedding"
|
||||||
|
|
||||||
|
-- For some data types, such as Office files, MindWork AI Studio requires the open-source application Pandoc.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T3359366900"] = "For some data types, such as Office files, MindWork AI Studio requires the open-source application Pandoc."
|
||||||
|
|
||||||
-- Yes, please send my data to the cloud
|
-- Yes, please send my data to the cloud
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T3572613009"] = "Yes, please send my data to the cloud"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::DATASOURCELOCALFILEDIALOG::T3572613009"] = "Yes, please send my data to the cloud"
|
||||||
|
|
||||||
@ -2748,6 +2796,96 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T900237532"] = "Pro
|
|||||||
-- Cancel
|
-- Cancel
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T900713019"] = "Cancel"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::EMBEDDINGPROVIDERDIALOG::T900713019"] = "Cancel"
|
||||||
|
|
||||||
|
-- Unfortunately, Pandoc's GPL license isn't compatible with the AI Studios licenses. However, software under the GPL is free to use and free of charge. You'll need to accept the GPL license before we can download and install Pandoc for you automatically (recommended). Alternatively, you might download it yourself using the instructions below or install it otherwise, e.g., by using a package manager of your operating system.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1001483402"] = "Unfortunately, Pandoc's GPL license isn't compatible with the AI Studios licenses. However, software under the GPL is free to use and free of charge. You'll need to accept the GPL license before we can download and install Pandoc for you automatically (recommended). Alternatively, you might download it yourself using the instructions below or install it otherwise, e.g., by using a package manager of your operating system."
|
||||||
|
|
||||||
|
-- Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking "Accept GPL and Install," you agree to the terms of the GPL license, and Pandoc will be installed automatically for you. Software under GPL is free of charge and free to use.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1357200670"] = "Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking \"Accept GPL and Install,\" you agree to the terms of the GPL license, and Pandoc will be installed automatically for you. Software under GPL is free of charge and free to use."
|
||||||
|
|
||||||
|
-- View the GNU General Public License v2 (GPL)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1587398673"] = "View the GNU General Public License v2 (GPL)"
|
||||||
|
|
||||||
|
-- Reject the GPL licence
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1655899051"] = "Reject the GPL licence"
|
||||||
|
|
||||||
|
-- Automatic installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1780479836"] = "Automatic installation"
|
||||||
|
|
||||||
|
-- Manual installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T1814127049"] = "Manual installation"
|
||||||
|
|
||||||
|
-- AI Studio uses the free and open-source third-party app Pandoc to process and retrieve data from local Office files (such as Word files) or to generate Office documents.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T205422394"] = "AI Studio uses the free and open-source third-party app Pandoc to process and retrieve data from local Office files (such as Word files) or to generate Office documents."
|
||||||
|
|
||||||
|
-- Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking "Accept GPL and download installer," you agree to the terms of the GPL license. Software under GPL is free of charge and free to use.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2084501359"] = "Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking \"Accept GPL and download installer,\" you agree to the terms of the GPL license. Software under GPL is free of charge and free to use."
|
||||||
|
|
||||||
|
-- Extract the archive to a folder of your choice, e.g.:
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2094245964"] = "Extract the archive to a folder of your choice, e.g.:"
|
||||||
|
|
||||||
|
-- Pandoc is open-source and free, but if you reject its license, you can't install it and some MindWork AI Studio features will be limited (like the integration of Office files) or unavailable (like the generation of Office files). You can change your decision anytime. Are you sure you want to reject the license?
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2559178004"] = "Pandoc is open-source and free, but if you reject its license, you can't install it and some MindWork AI Studio features will be limited (like the integration of Office files) or unavailable (like the generation of Office files). You can change your decision anytime. Are you sure you want to reject the license?"
|
||||||
|
|
||||||
|
-- Please wait for the installation to complete...
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2606205182"] = "Please wait for the installation to complete..."
|
||||||
|
|
||||||
|
-- Open the folder and copy the full path to the folder where your Pandoc executable file is into your clipboard:
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2946844485"] = "Open the folder and copy the full path to the folder where your Pandoc executable file is into your clipboard:"
|
||||||
|
|
||||||
|
-- Accept the GPL and start the installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T2966192331"] = "Accept the GPL and start the installation"
|
||||||
|
|
||||||
|
-- Error loading license text, please consider following the links to read the GPL.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3054618024"] = "Error loading license text, please consider following the links to read the GPL."
|
||||||
|
|
||||||
|
-- Accept the GPL and download the installer
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3104260405"] = "Accept the GPL and download the installer"
|
||||||
|
|
||||||
|
-- Add the copied path to your system's or user's PATH environment variable, restart your terminal, and check the installation:
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T313476957"] = "Add the copied path to your system's or user's PATH environment variable, restart your terminal, and check the installation:"
|
||||||
|
|
||||||
|
-- Accept the terms of the GPL license and download the latest archive with the download button below.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3263447722"] = "Accept the terms of the GPL license and download the latest archive with the download button below."
|
||||||
|
|
||||||
|
-- Pandoc doesn't seem to be installed on this system. AI Studio can help you install the correct version.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3355132094"] = "Pandoc doesn't seem to be installed on this system. AI Studio can help you install the correct version."
|
||||||
|
|
||||||
|
-- Close
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3448155331"] = "Close"
|
||||||
|
|
||||||
|
-- Pandoc is installed and the version meets the requirements of MindWork AI Studio.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3653795841"] = "Pandoc is installed and the version meets the requirements of MindWork AI Studio."
|
||||||
|
|
||||||
|
-- Pandoc is installed, but the version is too old and does not meet the requirements of MindWork AI Studio. AI Studio can help you install a newer version.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3692691761"] = "Pandoc is installed, but the version is too old and does not meet the requirements of MindWork AI Studio. AI Studio can help you install a newer version."
|
||||||
|
|
||||||
|
-- Execute the installer and follow the instructions.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3730261061"] = "Execute the installer and follow the instructions."
|
||||||
|
|
||||||
|
-- If you want to install Pandoc yourself, follow one of these two guides. The first guide uses an installer and is available for Windows and macOS. Alternatively, you might use a package manager of your operating system to install Pandoc.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3780227601"] = "If you want to install Pandoc yourself, follow one of these two guides. The first guide uses an installer and is available for Windows and macOS. Alternatively, you might use a package manager of your operating system to install Pandoc."
|
||||||
|
|
||||||
|
-- Download installer
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3791603277"] = "Download installer"
|
||||||
|
|
||||||
|
-- Accept the GPL and download the archive
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T3987456907"] = "Accept the GPL and download the archive"
|
||||||
|
|
||||||
|
-- Reject Pandoc's Licence
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T4092049320"] = "Reject Pandoc's Licence"
|
||||||
|
|
||||||
|
-- Proceed to the installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T4134878031"] = "Proceed to the installation"
|
||||||
|
|
||||||
|
-- Re-install Pandoc
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T4152693089"] = "Re-install Pandoc"
|
||||||
|
|
||||||
|
-- Accept the terms of the GPL license and download the latest installer with the download button below. Eventually, you need to allow the download of the installer in the download window.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T504404155"] = "Accept the terms of the GPL license and download the latest installer with the download button below. Eventually, you need to allow the download of the installer in the download window."
|
||||||
|
|
||||||
|
-- Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking "Accept the GPL and download the archive," you agree to the terms of the GPL license. Software under GPL is free of charge and free to use.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PANDOCDIALOG::T523908375"] = "Pandoc is distributed under the GNU General Public License v2 (GPL). By clicking \"Accept the GPL and download the archive,\" you agree to the terms of the GPL license. Software under GPL is free of charge and free to use."
|
||||||
|
|
||||||
-- Tell the AI what you want it to do for you. What are your goals or are you trying to achieve? Like having the AI address you informally.
|
-- Tell the AI what you want it to do for you. What are your goals or are you trying to achieve? Like having the AI address you informally.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROFILEDIALOG::T1458195391"] = "Tell the AI what you want it to do for you. What are your goals or are you trying to achieve? Like having the AI address you informally."
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROFILEDIALOG::T1458195391"] = "Tell the AI what you want it to do for you. What are your goals or are you trying to achieve? Like having the AI address you informally."
|
||||||
|
|
||||||
@ -4035,6 +4173,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1772678682"] = "This library is used t
|
|||||||
-- By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents.
|
-- By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1806897624"] = "By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1806897624"] = "By clicking on the respective path, the path is copied to the clipboard. You might open these files with a text editor to view their contents."
|
||||||
|
|
||||||
|
-- Pandoc Installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T185447014"] = "Pandoc Installation"
|
||||||
|
|
||||||
-- Check for updates
|
-- Check for updates
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1890416390"] = "Check for updates"
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T1890416390"] = "Check for updates"
|
||||||
|
|
||||||
@ -4053,6 +4194,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2173617769"] = "This library is used 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.
|
-- For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2174764529"] = "For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2174764529"] = "For the secure communication between the user interface and the runtime, we need to create certificates. This Rust library is great for this purpose."
|
||||||
|
|
||||||
|
-- OK
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2246359087"] = "OK"
|
||||||
|
|
||||||
-- We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose.
|
-- We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2273492381"] = "We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2273492381"] = "We must generate random numbers, e.g., for securing the interprocess communication between the user interface and the runtime. The rand library is great for this purpose."
|
||||||
|
|
||||||
@ -4065,6 +4209,12 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2329884315"] = "The C# language is use
|
|||||||
-- Used PDFium version
|
-- Used PDFium version
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2368247719"] = "Used PDFium version"
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2368247719"] = "Used PDFium version"
|
||||||
|
|
||||||
|
-- installation provided by the system
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2371107659"] = "installation provided by the system"
|
||||||
|
|
||||||
|
-- Installed Pandoc version: Pandoc is not installed or not available.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2374031539"] = "Installed Pandoc version: Pandoc is not installed or not available."
|
||||||
|
|
||||||
-- This library is used to determine the language of the operating system. This is necessary to set the language of the user interface.
|
-- This library is used to determine the language of the operating system. This is necessary to set the language of the user interface.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2557014401"] = "This library is used to determine the language of the operating system. This is necessary to set the language of the user interface."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2557014401"] = "This library is used to determine the language of the operating system. This is necessary to set the language of the user interface."
|
||||||
|
|
||||||
@ -4086,6 +4236,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2706940196"] = "Logbook"
|
|||||||
-- This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read.
|
-- This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2726131107"] = "This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2726131107"] = "This component is used to render Markdown text. This is important because the LLM often responds with Markdown-formatted text, allowing us to present it in a way that is easier to read."
|
||||||
|
|
||||||
|
-- Determine Pandoc version, please wait...
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2765814390"] = "Determine Pandoc version, please wait..."
|
||||||
|
|
||||||
-- 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.
|
-- 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.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2777988282"] = "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."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T2777988282"] = "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."
|
||||||
|
|
||||||
@ -4110,6 +4263,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T313276297"] = "Connect AI Studio to yo
|
|||||||
-- Have feature ideas? Submit suggestions for future AI Studio enhancements.
|
-- Have feature ideas? Submit suggestions for future AI Studio enhancements.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3178730036"] = "Have feature ideas? Submit suggestions for future AI Studio enhancements."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3178730036"] = "Have feature ideas? Submit suggestions for future AI Studio enhancements."
|
||||||
|
|
||||||
|
-- Update Pandoc
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3249965383"] = "Update Pandoc"
|
||||||
|
|
||||||
-- Discover MindWork AI's mission and vision on our official homepage.
|
-- Discover MindWork AI's mission and vision on our official homepage.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3294830584"] = "Discover MindWork AI's mission and vision on our official homepage."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3294830584"] = "Discover MindWork AI's mission and vision on our official homepage."
|
||||||
|
|
||||||
@ -4131,9 +4287,18 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3563271893"] = "Motivation"
|
|||||||
-- This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat.
|
-- This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3722989559"] = "This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3722989559"] = "This library is used to read Excel and OpenDocument spreadsheet files. This is necessary, e.g., for using spreadsheets as a data source for a chat."
|
||||||
|
|
||||||
|
-- this version does not met the requirements
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3813932670"] = "this version does not met the requirements"
|
||||||
|
|
||||||
-- 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.
|
-- 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.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3908558992"] = "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."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3908558992"] = "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."
|
||||||
|
|
||||||
|
-- Installed Pandoc version
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3983971016"] = "Installed Pandoc version"
|
||||||
|
|
||||||
|
-- Check Pandoc Installation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T3986423270"] = "Check Pandoc Installation"
|
||||||
|
|
||||||
-- Versions
|
-- Versions
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4010195468"] = "Versions"
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T4010195468"] = "Versions"
|
||||||
|
|
||||||
@ -4161,9 +4326,15 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T639371534"] = "Did you find a bug or a
|
|||||||
-- 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.
|
-- 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.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T64689067"] = "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."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T64689067"] = "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."
|
||||||
|
|
||||||
|
-- installed by AI Studio
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T833849470"] = "installed by AI Studio"
|
||||||
|
|
||||||
-- For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose.
|
-- For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T870640199"] = "For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T870640199"] = "For some data transfers, we need to encode the data in base64. This Rust library is great for this purpose."
|
||||||
|
|
||||||
|
-- Install Pandoc
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ABOUT::T986578435"] = "Install Pandoc"
|
||||||
|
|
||||||
-- Get coding and debugging support from an LLM.
|
-- Get coding and debugging support from an LLM.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::ASSISTANTS::T1243850917"] = "Get coding and debugging support from an LLM."
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::ASSISTANTS::T1243850917"] = "Get coding and debugging support from an LLM."
|
||||||
|
|
||||||
@ -4998,6 +5169,42 @@ UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T816853779"] = "Failed
|
|||||||
-- Failed to retrieve the authentication methods: the ERI server did not return a valid response.
|
-- Failed to retrieve the authentication methods: the ERI server did not return a valid response.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T984407320"] = "Failed to retrieve the authentication methods: the ERI server did not return a valid response."
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T984407320"] = "Failed to retrieve the authentication methods: the ERI server did not return a valid response."
|
||||||
|
|
||||||
|
-- Was not able to validate the Pandoc installation.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T1364844008"] = "Was not able to validate the Pandoc installation."
|
||||||
|
|
||||||
|
-- Installers are not available on {0} systems.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T1640771881"] = "Installers are not available on {0} systems."
|
||||||
|
|
||||||
|
-- Pandoc v{0} was installed successfully.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T1885555132"] = "Pandoc v{0} was installed successfully."
|
||||||
|
|
||||||
|
-- Was not able to check the Pandoc installation.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T2171727146"] = "Was not able to check the Pandoc installation."
|
||||||
|
|
||||||
|
-- Pandoc v{0} is installed, but it doesn't match the required version (v{1}).
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T2299898115"] = "Pandoc v{0} is installed, but it doesn't match the required version (v{1})."
|
||||||
|
|
||||||
|
-- Pandoc v{0} is installed.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T2550598062"] = "Pandoc v{0} is installed."
|
||||||
|
|
||||||
|
-- Pandoc v{0} is installed, but it does not match the required version (v{1}).
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T2555465873"] = "Pandoc v{0} is installed, but it does not match the required version (v{1})."
|
||||||
|
|
||||||
|
-- Pandoc was not installed successfully, because the archive was not found.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T34210248"] = "Pandoc was not installed successfully, because the archive was not found."
|
||||||
|
|
||||||
|
-- Pandoc is not available on the system or the process had issues.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T3746116957"] = "Pandoc is not available on the system or the process had issues."
|
||||||
|
|
||||||
|
-- Pandoc was not installed successfully, because the archive type is unknown.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T3962211670"] = "Pandoc was not installed successfully, because the archive type is unknown."
|
||||||
|
|
||||||
|
-- It seems that Pandoc is not installed.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T567205144"] = "It seems that Pandoc is not installed."
|
||||||
|
|
||||||
|
-- The latest Pandoc version was not found, installing version {0} instead.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PANDOC::T726914939"] = "The latest Pandoc version was not found, installing version {0} instead."
|
||||||
|
|
||||||
-- The table AUTHORS does not exist or is using an invalid syntax.
|
-- The table AUTHORS does not exist or is using an invalid syntax.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1068328139"] = "The table AUTHORS does not exist or is using an invalid syntax."
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1068328139"] = "The table AUTHORS does not exist or is using an invalid syntax."
|
||||||
|
|
||||||
|
@ -1,58 +1,56 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Formats.Tar;
|
||||||
using System.IO.Compression;
|
using System.IO.Compression;
|
||||||
using System.Runtime.InteropServices;
|
using System.Reflection;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
|
using AIStudio.Tools.Metadata;
|
||||||
using AIStudio.Tools.Services;
|
using AIStudio.Tools.Services;
|
||||||
|
|
||||||
|
using SharedTools;
|
||||||
|
|
||||||
namespace AIStudio.Tools;
|
namespace AIStudio.Tools;
|
||||||
|
|
||||||
public static partial class Pandoc
|
public static partial class Pandoc
|
||||||
{
|
{
|
||||||
private const string CPU_ARCHITECTURE = "win-x64";
|
private static string TB(string fallbackEN) => PluginSystem.I18N.I.T(fallbackEN, typeof(Pandoc).Namespace, nameof(Pandoc));
|
||||||
|
|
||||||
|
private static readonly Assembly ASSEMBLY = Assembly.GetExecutingAssembly();
|
||||||
|
private static readonly MetaDataArchitectureAttribute META_DATA_ARCH = ASSEMBLY.GetCustomAttribute<MetaDataArchitectureAttribute>()!;
|
||||||
|
private static readonly RID CPU_ARCHITECTURE = META_DATA_ARCH.Architecture.ToRID();
|
||||||
|
|
||||||
private const string DOWNLOAD_URL = "https://github.com/jgm/pandoc/releases/download";
|
private const string DOWNLOAD_URL = "https://github.com/jgm/pandoc/releases/download";
|
||||||
private const string LATEST_URL = "https://github.com/jgm/pandoc/releases/latest";
|
private const string LATEST_URL = "https://github.com/jgm/pandoc/releases/latest";
|
||||||
|
|
||||||
private static readonly ILogger LOG = Program.LOGGER_FACTORY.CreateLogger("PandocService");
|
private static readonly ILogger LOG = Program.LOGGER_FACTORY.CreateLogger("Pandoc");
|
||||||
private static readonly Version MINIMUM_REQUIRED_VERSION = new (3, 6);
|
private static readonly Version MINIMUM_REQUIRED_VERSION = new (3, 7, 0, 2);
|
||||||
private static readonly Version FALLBACK_VERSION = new (3, 7, 0, 1);
|
private static readonly Version FALLBACK_VERSION = new (3, 7, 0, 2);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Checks if pandoc is available on the system and can be started as a process or present in AiStudio's data dir
|
/// Prepares a Pandoc process by using the Pandoc process builder.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="rustService">Global rust service to access file system and data dir</param>
|
/// <returns>The Pandoc process builder with default settings.</returns>
|
||||||
/// <param name="showMessages">Controls if snackbars are shown to the user</param>
|
public static PandocProcessBuilder PreparePandocProcess() => PandocProcessBuilder.Create();
|
||||||
/// <returns>True, if pandoc is available and the minimum required version is met, else False.</returns>
|
|
||||||
public static async Task<bool> CheckAvailabilityAsync(RustService rustService, bool showMessages = true)
|
/// <summary>
|
||||||
|
/// Checks if pandoc is available on the system and can be started as a process or is present in AI Studio's data dir.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="rustService">Global rust service to access file system and data dir.</param>
|
||||||
|
/// <param name="showMessages">Controls if snackbars are shown to the user.</param>
|
||||||
|
/// <returns>True, if pandoc is available and the minimum required version is met, else false.</returns>
|
||||||
|
public static async Task<PandocInstallation> CheckAvailabilityAsync(RustService rustService, bool showMessages = true)
|
||||||
{
|
{
|
||||||
var installDir = await GetPandocDataFolder(rustService);
|
|
||||||
var subdirectories = Directory.GetDirectories(installDir);
|
|
||||||
|
|
||||||
if (subdirectories.Length > 1)
|
|
||||||
{
|
|
||||||
await InstallAsync(rustService);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (HasPandoc(installDir)) return true;
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var startInfo = new ProcessStartInfo
|
var preparedProcess = await PreparePandocProcess().AddArgument("--version").BuildAsync(rustService);
|
||||||
{
|
using var process = Process.Start(preparedProcess.StartInfo);
|
||||||
FileName = GetPandocExecutableName(),
|
|
||||||
Arguments = "--version",
|
|
||||||
RedirectStandardOutput = true,
|
|
||||||
UseShellExecute = false,
|
|
||||||
CreateNoWindow = true
|
|
||||||
};
|
|
||||||
using var process = Process.Start(startInfo);
|
|
||||||
if (process == null)
|
if (process == null)
|
||||||
{
|
{
|
||||||
if (showMessages)
|
if (showMessages)
|
||||||
await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Help, "The pandoc process could not be started."));
|
await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Help, TB("Was not able to check the Pandoc installation.")));
|
||||||
LOG.LogInformation("The pandoc process was not started, it was null");
|
|
||||||
return false;
|
LOG.LogInformation("The Pandoc process was not started, it was null");
|
||||||
|
return new(false, TB("Was not able to check the Pandoc installation."), false, string.Empty, preparedProcess.IsLocal);
|
||||||
}
|
}
|
||||||
|
|
||||||
var output = await process.StandardOutput.ReadToEndAsync();
|
var output = await process.StandardOutput.ReadToEndAsync();
|
||||||
@ -60,65 +58,48 @@ public static partial class Pandoc
|
|||||||
if (process.ExitCode != 0)
|
if (process.ExitCode != 0)
|
||||||
{
|
{
|
||||||
if (showMessages)
|
if (showMessages)
|
||||||
await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Error, $"The pandoc process exited unexpectedly."));
|
await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Error, TB("Pandoc is not available on the system or the process had issues.")));
|
||||||
LOG.LogError("The pandoc process was exited with code {ProcessExitCode}", process.ExitCode);
|
|
||||||
return false;
|
LOG.LogError("The Pandoc process was exited with code {ProcessExitCode}", process.ExitCode);
|
||||||
|
return new(false, TB("Pandoc is not available on the system or the process had issues."), false, string.Empty, preparedProcess.IsLocal);
|
||||||
}
|
}
|
||||||
|
|
||||||
var versionMatch = PandocCmdRegex().Match(output);
|
var versionMatch = PandocCmdRegex().Match(output);
|
||||||
if (!versionMatch.Success)
|
if (!versionMatch.Success)
|
||||||
{
|
{
|
||||||
if (showMessages)
|
if (showMessages)
|
||||||
await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Terminal, $"pandoc --version returned an invalid format."));
|
await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Terminal, TB("Was not able to validate the Pandoc installation.")));
|
||||||
LOG.LogError("pandoc --version returned an invalid format:\n {Output}", output);
|
|
||||||
return false;
|
LOG.LogError("Pandoc --version returned an invalid format: {Output}", output);
|
||||||
|
return new(false, TB("Was not able to validate the Pandoc installation."), false, string.Empty, preparedProcess.IsLocal);
|
||||||
}
|
}
|
||||||
|
|
||||||
var versions = versionMatch.Groups[1].Value;
|
var versions = versionMatch.Groups[1].Value;
|
||||||
var installedVersion = Version.Parse(versions);
|
var installedVersion = Version.Parse(versions);
|
||||||
|
var installedVersionString = installedVersion.ToString();
|
||||||
|
|
||||||
if (installedVersion >= MINIMUM_REQUIRED_VERSION)
|
if (installedVersion >= MINIMUM_REQUIRED_VERSION)
|
||||||
{
|
{
|
||||||
if (showMessages)
|
if (showMessages)
|
||||||
await MessageBus.INSTANCE.SendSuccess(new(Icons.Material.Filled.CheckCircle, $"Pandoc {installedVersion.ToString()} is installed."));
|
await MessageBus.INSTANCE.SendSuccess(new(Icons.Material.Filled.CheckCircle, string.Format(TB("Pandoc v{0} is installed."), installedVersionString)));
|
||||||
return true;
|
|
||||||
|
LOG.LogInformation("Pandoc v{0} is installed and matches the required version (v{1})", installedVersionString, MINIMUM_REQUIRED_VERSION.ToString());
|
||||||
|
return new(true, string.Empty, true, installedVersionString, preparedProcess.IsLocal);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (showMessages)
|
if (showMessages)
|
||||||
await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Build, $"Pandoc {installedVersion.ToString()} is installed, but it doesn't match the required version ({MINIMUM_REQUIRED_VERSION.ToString()})."));
|
await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Build, string.Format(TB("Pandoc v{0} is installed, but it doesn't match the required version (v{1})."), installedVersionString, MINIMUM_REQUIRED_VERSION.ToString())));
|
||||||
LOG.LogInformation("Pandoc {Installed} is installed, but it does not match the required version ({Requirement})", installedVersion.ToString(), MINIMUM_REQUIRED_VERSION.ToString());
|
|
||||||
return false;
|
|
||||||
|
|
||||||
|
LOG.LogWarning("Pandoc v{0} is installed, but it does not match the required version (v{1})", installedVersionString, MINIMUM_REQUIRED_VERSION.ToString());
|
||||||
|
return new(true, string.Format(TB("Pandoc v{0} is installed, but it does not match the required version (v{1})."), installedVersionString, MINIMUM_REQUIRED_VERSION.ToString()), false, installedVersionString, preparedProcess.IsLocal);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
if (showMessages)
|
if (showMessages)
|
||||||
await MessageBus.INSTANCE.SendError(new (@Icons.Material.Filled.AppsOutage, "Pandoc is not installed."));
|
await MessageBus.INSTANCE.SendError(new (@Icons.Material.Filled.AppsOutage, TB("It seems that Pandoc is not installed.")));
|
||||||
LOG.LogError("Pandoc is not installed and threw an exception:\n {Message}", e.Message);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static bool HasPandoc(string pandocDirectory)
|
LOG.LogError("Pandoc is not installed and threw an exception: {0}", e.Message);
|
||||||
{
|
return new(false, TB("It seems that Pandoc is not installed."), false, string.Empty, false);
|
||||||
try
|
|
||||||
{
|
|
||||||
var subdirectories = Directory.GetDirectories(pandocDirectory);
|
|
||||||
|
|
||||||
foreach (var subdirectory in subdirectories)
|
|
||||||
{
|
|
||||||
var pandocPath = Path.Combine(subdirectory, "pandoc.exe");
|
|
||||||
if (File.Exists(pandocPath))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
LOG.LogInformation("Pandoc is not installed in the data directory and might have thrown and error:\n{ErrorMessage}", ex.Message);
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,70 +110,79 @@ public static partial class Pandoc
|
|||||||
/// <returns>None</returns>
|
/// <returns>None</returns>
|
||||||
public static async Task InstallAsync(RustService rustService)
|
public static async Task InstallAsync(RustService rustService)
|
||||||
{
|
{
|
||||||
|
var latestVersion = await FetchLatestVersionAsync();
|
||||||
var installDir = await GetPandocDataFolder(rustService);
|
var installDir = await GetPandocDataFolder(rustService);
|
||||||
ClearFolder(installDir);
|
ClearFolder(installDir);
|
||||||
|
|
||||||
|
LOG.LogInformation("Trying to install Pandoc v{0} to '{1}'...", latestVersion, installDir);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!Directory.Exists(installDir))
|
if (!Directory.Exists(installDir))
|
||||||
Directory.CreateDirectory(installDir);
|
Directory.CreateDirectory(installDir);
|
||||||
|
|
||||||
using var client = new HttpClient();
|
// Create a temporary file to download the archive to:
|
||||||
var uri = await GenerateUriAsync();
|
var pandocTempDownloadFile = Path.GetTempFileName();
|
||||||
|
|
||||||
var response = await client.GetAsync(uri);
|
//
|
||||||
if (!response.IsSuccessStatusCode)
|
// Download the latest Pandoc archive from GitHub:
|
||||||
|
//
|
||||||
|
var uri = await GenerateArchiveUriAsync();
|
||||||
|
using (var client = new HttpClient())
|
||||||
{
|
{
|
||||||
await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Error, $"Pandoc was not installed successfully, because the download archive was not found."));
|
var response = await client.GetAsync(uri);
|
||||||
LOG.LogError("Pandoc was not installed, the release archive was not found (Status Code {StatusCode}):\n{Uri}\n{Message}", response.StatusCode, uri, response.RequestMessage);
|
if (!response.IsSuccessStatusCode)
|
||||||
return;
|
{
|
||||||
}
|
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Error, TB("Pandoc was not installed successfully, because the archive was not found.")));
|
||||||
var fileBytes = await response.Content.ReadAsByteArrayAsync();
|
LOG.LogError("Pandoc was not installed successfully, because the archive was not found (status code {0}): url='{1}', message='{2}'", response.StatusCode, uri, response.RequestMessage);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (uri.Contains(".zip"))
|
// Download the archive to the temporary file:
|
||||||
{
|
await using var tempFileStream = File.Create(pandocTempDownloadFile);
|
||||||
var tempZipPath = Path.Join(Path.GetTempPath(), "pandoc.zip");
|
await response.Content.CopyToAsync(tempFileStream);
|
||||||
await File.WriteAllBytesAsync(tempZipPath, fileBytes);
|
|
||||||
ZipFile.ExtractToDirectory(tempZipPath, installDir);
|
|
||||||
File.Delete(tempZipPath);
|
|
||||||
}
|
}
|
||||||
else if (uri.Contains(".tar.gz"))
|
|
||||||
|
if (uri.EndsWith(".zip", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
var tempTarPath = Path.Join(Path.GetTempPath(), "pandoc.tar.gz");
|
ZipFile.ExtractToDirectory(pandocTempDownloadFile, installDir);
|
||||||
await File.WriteAllBytesAsync(tempTarPath, fileBytes);
|
}
|
||||||
ZipFile.ExtractToDirectory(tempTarPath, installDir);
|
else if (uri.EndsWith(".tar.gz", StringComparison.OrdinalIgnoreCase))
|
||||||
File.Delete(tempTarPath);
|
{
|
||||||
|
await using var tgzStream = File.Open(pandocTempDownloadFile, FileMode.Open, FileAccess.Read, FileShare.Read);
|
||||||
|
await using var uncompressedStream = new GZipStream(tgzStream, CompressionMode.Decompress);
|
||||||
|
await TarFile.ExtractToDirectoryAsync(uncompressedStream, installDir, true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Error, $"Pandoc was not installed successfully, because the download archive type is unknown."));
|
await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Error, TB("Pandoc was not installed successfully, because the archive type is unknown.")));
|
||||||
LOG.LogError("Pandoc was not installed, the download archive is unknown:\n {Uri}", uri);
|
LOG.LogError("Pandoc was not installed, the archive is unknown: url='{0}'", uri);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await MessageBus.INSTANCE.SendSuccess(new(Icons.Material.Filled.CheckCircle,
|
File.Delete(pandocTempDownloadFile);
|
||||||
$"Pandoc {await FetchLatestVersionAsync()} was installed successfully."));
|
|
||||||
|
await MessageBus.INSTANCE.SendSuccess(new(Icons.Material.Filled.CheckCircle, string.Format(TB("Pandoc v{0} was installed successfully."), latestVersion)));
|
||||||
|
LOG.LogInformation("Pandoc v{0} was installed successfully.", latestVersion);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"Fehler: {ex.Message}");
|
LOG.LogError(ex, "An error occurred while installing Pandoc.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void ClearFolder(string path)
|
private static void ClearFolder(string path)
|
||||||
{
|
{
|
||||||
if (!Directory.Exists(path)) return;
|
if (!Directory.Exists(path))
|
||||||
|
return;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
foreach (var dir in Directory.GetDirectories(path))
|
Directory.Delete(path, true);
|
||||||
{
|
|
||||||
Directory.Delete(dir, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LOG.LogError(ex, "Error clearing pandoc folder.");
|
LOG.LogError(ex, "Error clearing pandoc installation directory.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,18 +197,17 @@ public static partial class Pandoc
|
|||||||
|
|
||||||
if (!response.IsSuccessStatusCode)
|
if (!response.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
LOG.LogError("Code {StatusCode}: Could not fetch Pandoc's latest page:\n {Response}", response.StatusCode, response.RequestMessage);
|
LOG.LogError("Code {StatusCode}: Could not fetch Pandoc's latest page: {Response}", response.StatusCode, response.RequestMessage);
|
||||||
await MessageBus.INSTANCE.SendWarning(new (Icons.Material.Filled.Warning, $"The latest pandoc version was not found, installing version {FALLBACK_VERSION.ToString()} instead."));
|
await MessageBus.INSTANCE.SendWarning(new (Icons.Material.Filled.Warning, string.Format(TB("The latest Pandoc version was not found, installing version {0} instead."), FALLBACK_VERSION.ToString())));
|
||||||
return FALLBACK_VERSION.ToString();
|
return FALLBACK_VERSION.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
var htmlContent = await response.Content.ReadAsStringAsync();
|
var htmlContent = await response.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
var versionMatch = LatestVersionRegex().Match(htmlContent);
|
var versionMatch = LatestVersionRegex().Match(htmlContent);
|
||||||
if (!versionMatch.Success)
|
if (!versionMatch.Success)
|
||||||
{
|
{
|
||||||
LOG.LogError("The latest version regex returned nothing:\n {Value}", versionMatch.Groups.ToString());
|
LOG.LogError("The latest version regex returned nothing: {0}", versionMatch.Groups.ToString());
|
||||||
await MessageBus.INSTANCE.SendWarning(new (Icons.Material.Filled.Warning, $"The latest pandoc version was not found, installing version {FALLBACK_VERSION.ToString()} instead."));
|
await MessageBus.INSTANCE.SendWarning(new (Icons.Material.Filled.Warning, string.Format(TB("The latest Pandoc version was not found, installing version {0} instead."), FALLBACK_VERSION.ToString())));
|
||||||
return FALLBACK_VERSION.ToString();
|
return FALLBACK_VERSION.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,20 +216,35 @@ public static partial class Pandoc
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reads the systems architecture to find the correct archive
|
/// Reads the systems architecture to find the correct archive.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>Full URI to the right archive in Pandoc's repo</returns>
|
/// <returns>Full URI to the right archive in Pandoc's repository.</returns>
|
||||||
public static async Task<string> GenerateUriAsync()
|
public static async Task<string> GenerateArchiveUriAsync()
|
||||||
{
|
{
|
||||||
var version = await FetchLatestVersionAsync();
|
var version = await FetchLatestVersionAsync();
|
||||||
var baseUri = $"{DOWNLOAD_URL}/{version}/pandoc-{version}-";
|
var baseUri = $"{DOWNLOAD_URL}/{version}/pandoc-{version}-";
|
||||||
return CPU_ARCHITECTURE switch
|
return CPU_ARCHITECTURE switch
|
||||||
{
|
{
|
||||||
"win-x64" => $"{baseUri}windows-x86_64.zip",
|
//
|
||||||
"osx-x64" => $"{baseUri}x86_64-macOS.zip",
|
// Unfortunately, pandoc is not yet available for ARM64 Windows systems,
|
||||||
"osx-arm64" => $"{baseUri}arm64-macOS.zip",
|
// so we have to use the x86_64 version for now. ARM Windows contains
|
||||||
"linux-x64" => $"{baseUri}linux-amd64.tar.gz",
|
// an x86_64 emulation layer, so it should work fine for now.
|
||||||
"linux-arm" => $"{baseUri}linux-arm64.tar.gz",
|
//
|
||||||
|
// Pandoc would be available for ARM64 Windows, but the Haskell compiler
|
||||||
|
// does not support ARM64 Windows yet. Here are the related issues:
|
||||||
|
//
|
||||||
|
// - Haskell compiler: https://gitlab.haskell.org/ghc/ghc/-/issues/24603
|
||||||
|
// - Haskell ARM MR: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13856
|
||||||
|
// - Pandoc ARM64: https://github.com/jgm/pandoc/issues/10095
|
||||||
|
//
|
||||||
|
RID.WIN_X64 or RID.WIN_ARM64 => $"{baseUri}windows-x86_64.zip",
|
||||||
|
|
||||||
|
RID.OSX_X64 => $"{baseUri}x86_64-macOS.zip",
|
||||||
|
RID.OSX_ARM64 => $"{baseUri}arm64-macOS.zip",
|
||||||
|
|
||||||
|
RID.LINUX_X64 => $"{baseUri}linux-amd64.tar.gz",
|
||||||
|
RID.LINUX_ARM64 => $"{baseUri}linux-arm64.tar.gz",
|
||||||
|
|
||||||
_ => string.Empty,
|
_ => string.Empty,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -256,25 +260,34 @@ public static partial class Pandoc
|
|||||||
|
|
||||||
switch (CPU_ARCHITECTURE)
|
switch (CPU_ARCHITECTURE)
|
||||||
{
|
{
|
||||||
case "win-x64":
|
//
|
||||||
|
// Unfortunately, pandoc is not yet available for ARM64 Windows systems,
|
||||||
|
// so we have to use the x86_64 version for now. ARM Windows contains
|
||||||
|
// an x86_64 emulation layer, so it should work fine for now.
|
||||||
|
//
|
||||||
|
// Pandoc would be available for ARM64 Windows, but the Haskell compiler
|
||||||
|
// does not support ARM64 Windows yet. Here are the related issues:
|
||||||
|
//
|
||||||
|
// - Haskell compiler: https://gitlab.haskell.org/ghc/ghc/-/issues/24603
|
||||||
|
// - Haskell ARM MR: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13856
|
||||||
|
// - Pandoc ARM64: https://github.com/jgm/pandoc/issues/10095
|
||||||
|
//
|
||||||
|
case RID.WIN_X64 or RID.WIN_ARM64:
|
||||||
return $"{baseUri}windows-x86_64.msi";
|
return $"{baseUri}windows-x86_64.msi";
|
||||||
case "osx-x64":
|
|
||||||
|
case RID.OSX_X64:
|
||||||
return $"{baseUri}x86_64-macOS.pkg";
|
return $"{baseUri}x86_64-macOS.pkg";
|
||||||
case "osx-arm64":
|
|
||||||
return $"{baseUri}arm64-macOS.pkg\n";
|
case RID.OSX_ARM64:
|
||||||
|
return $"{baseUri}arm64-macOS.pkg";
|
||||||
|
|
||||||
default:
|
default:
|
||||||
await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Terminal, $"Installers are not available on {CPU_ARCHITECTURE} systems."));
|
await MessageBus.INSTANCE.SendError(new (Icons.Material.Filled.Terminal, string.Format(TB("Installers are not available on {0} systems."), CPU_ARCHITECTURE.ToUserFriendlyName())));
|
||||||
return string.Empty;
|
return string.Empty;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
public static async Task<string> GetPandocDataFolder(RustService rustService) => Path.Join(await rustService.GetDataDirectory(), "pandoc");
|
||||||
/// Reads the os platform to determine the used executable name
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>Name of the pandoc executable</returns>
|
|
||||||
private static string GetPandocExecutableName() => RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "pandoc.exe" : "pandoc";
|
|
||||||
|
|
||||||
private static async Task<string> GetPandocDataFolder(RustService rustService) => Path.Join(await rustService.GetDataDirectory(), "pandoc");
|
|
||||||
|
|
||||||
[GeneratedRegex(@"pandoc(?:\.exe)?\s*([0-9]+\.[0-9]+(?:\.[0-9]+)?(?:\.[0-9]+)?)")]
|
[GeneratedRegex(@"pandoc(?:\.exe)?\s*([0-9]+\.[0-9]+(?:\.[0-9]+)?(?:\.[0-9]+)?)")]
|
||||||
private static partial Regex PandocCmdRegex();
|
private static partial Regex PandocCmdRegex();
|
||||||
|
3
app/MindWork AI Studio/Tools/PandocExecutable.cs
Normal file
3
app/MindWork AI Studio/Tools/PandocExecutable.cs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
namespace AIStudio.Tools;
|
||||||
|
|
||||||
|
public readonly record struct PandocExecutable(string Executable, bool IsLocalInstallation);
|
3
app/MindWork AI Studio/Tools/PandocInstallation.cs
Normal file
3
app/MindWork AI Studio/Tools/PandocInstallation.cs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
namespace AIStudio.Tools;
|
||||||
|
|
||||||
|
public readonly record struct PandocInstallation(bool CheckWasSuccessful, string ErrorMessage, bool IsAvailable, string Version, bool IsLocalInstallation);
|
10
app/MindWork AI Studio/Tools/PandocPreparedProcess.cs
Normal file
10
app/MindWork AI Studio/Tools/PandocPreparedProcess.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
namespace AIStudio.Tools;
|
||||||
|
|
||||||
|
public sealed class PandocPreparedProcess(ProcessStartInfo startInfo, bool isLocal)
|
||||||
|
{
|
||||||
|
public ProcessStartInfo StartInfo => startInfo;
|
||||||
|
|
||||||
|
public bool IsLocal => isLocal;
|
||||||
|
}
|
135
app/MindWork AI Studio/Tools/PandocProcessBuilder.cs
Normal file
135
app/MindWork AI Studio/Tools/PandocProcessBuilder.cs
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
using AIStudio.Tools.Metadata;
|
||||||
|
using AIStudio.Tools.Services;
|
||||||
|
|
||||||
|
using SharedTools;
|
||||||
|
|
||||||
|
namespace AIStudio.Tools;
|
||||||
|
|
||||||
|
public sealed class PandocProcessBuilder
|
||||||
|
{
|
||||||
|
private static readonly Assembly ASSEMBLY = Assembly.GetExecutingAssembly();
|
||||||
|
private static readonly MetaDataArchitectureAttribute META_DATA_ARCH = ASSEMBLY.GetCustomAttribute<MetaDataArchitectureAttribute>()!;
|
||||||
|
private static readonly RID CPU_ARCHITECTURE = META_DATA_ARCH.Architecture.ToRID();
|
||||||
|
|
||||||
|
private string? providedInputFile;
|
||||||
|
private string? providedOutputFile;
|
||||||
|
private string? providedInputFormat;
|
||||||
|
private string? providedOutputFormat;
|
||||||
|
|
||||||
|
private readonly List<string> additionalArguments = new();
|
||||||
|
|
||||||
|
private PandocProcessBuilder()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PandocProcessBuilder Create() => new();
|
||||||
|
|
||||||
|
public PandocProcessBuilder WithInputFile(string inputFile)
|
||||||
|
{
|
||||||
|
this.providedInputFile = inputFile;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PandocProcessBuilder WithOutputFile(string outputFile)
|
||||||
|
{
|
||||||
|
this.providedOutputFile = outputFile;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PandocProcessBuilder WithInputFormat(string inputFormat)
|
||||||
|
{
|
||||||
|
this.providedInputFormat = inputFormat;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PandocProcessBuilder WithOutputFormat(string outputFormat)
|
||||||
|
{
|
||||||
|
this.providedOutputFormat = outputFormat;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PandocProcessBuilder AddArgument(string argument)
|
||||||
|
{
|
||||||
|
this.additionalArguments.Add(argument);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<PandocPreparedProcess> BuildAsync(RustService rustService)
|
||||||
|
{
|
||||||
|
var sbArguments = new StringBuilder();
|
||||||
|
|
||||||
|
if(!string.IsNullOrWhiteSpace(this.providedInputFile))
|
||||||
|
sbArguments.Append(this.providedInputFile);
|
||||||
|
|
||||||
|
if(!string.IsNullOrWhiteSpace(this.providedInputFormat))
|
||||||
|
sbArguments.Append($" -f {this.providedInputFormat}");
|
||||||
|
|
||||||
|
if(!string.IsNullOrWhiteSpace(this.providedOutputFormat))
|
||||||
|
sbArguments.Append($" -t {this.providedOutputFormat}");
|
||||||
|
|
||||||
|
foreach (var additionalArgument in this.additionalArguments)
|
||||||
|
sbArguments.Append($" {additionalArgument}");
|
||||||
|
|
||||||
|
if(!string.IsNullOrWhiteSpace(this.providedOutputFile))
|
||||||
|
sbArguments.Append($" -o {this.providedOutputFile}");
|
||||||
|
|
||||||
|
var pandocExecutable = await PandocExecutablePath(rustService);
|
||||||
|
return new (new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = pandocExecutable.Executable,
|
||||||
|
Arguments = sbArguments.ToString(),
|
||||||
|
RedirectStandardOutput = true,
|
||||||
|
RedirectStandardError = true,
|
||||||
|
UseShellExecute = false,
|
||||||
|
CreateNoWindow = true
|
||||||
|
}, pandocExecutable.IsLocalInstallation);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the path to the pandoc executable.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Any local installation of pandoc will be preferred over the system-wide installation.
|
||||||
|
/// When a local installation is found, its absolute path will be returned. In case no local
|
||||||
|
/// installation is found, the name of the pandoc executable will be returned.
|
||||||
|
/// </remarks>
|
||||||
|
/// <param name="rustService">Global rust service to access file system and data dir.</param>
|
||||||
|
/// <returns>Path to the pandoc executable.</returns>
|
||||||
|
private static async Task<PandocExecutable> PandocExecutablePath(RustService rustService)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// First, we try to find the pandoc executable in the data directory.
|
||||||
|
// Any local installation should be preferred over the system-wide installation.
|
||||||
|
//
|
||||||
|
var localInstallationRootDirectory = await Pandoc.GetPandocDataFolder(rustService);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var executableName = PandocExecutableName;
|
||||||
|
var subdirectories = Directory.GetDirectories(localInstallationRootDirectory, "*", SearchOption.AllDirectories);
|
||||||
|
foreach (var subdirectory in subdirectories)
|
||||||
|
{
|
||||||
|
var pandocPath = Path.Combine(subdirectory, executableName);
|
||||||
|
if (File.Exists(pandocPath))
|
||||||
|
return new(pandocPath, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// ignored
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// When no local installation was found, we assume that the pandoc executable is in the system PATH.
|
||||||
|
//
|
||||||
|
return new(PandocExecutableName, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Reads the os platform to determine the used executable name.
|
||||||
|
/// </summary>
|
||||||
|
public static string PandocExecutableName => CPU_ARCHITECTURE is RID.WIN_ARM64 or RID.WIN_X64 ? "pandoc.exe" : "pandoc";
|
||||||
|
}
|
@ -26,13 +26,3 @@ window.clearDiv = function (divName) {
|
|||||||
window.scrollToBottom = function(element) {
|
window.scrollToBottom = function(element) {
|
||||||
element.scrollIntoView({ behavior: 'smooth', block: 'end', inline: 'nearest' });
|
element.scrollIntoView({ behavior: 'smooth', block: 'end', inline: 'nearest' });
|
||||||
}
|
}
|
||||||
|
|
||||||
window.triggerDownload = function(url, filename) {
|
|
||||||
const a = document.createElement('a');
|
|
||||||
a.href = url;
|
|
||||||
a.setAttribute('download', filename);
|
|
||||||
a.style.display = 'none';
|
|
||||||
document.body.appendChild(a);
|
|
||||||
a.click();
|
|
||||||
document.body.removeChild(a);
|
|
||||||
}
|
|
@ -1,3 +1,4 @@
|
|||||||
# v0.9.46, build 221 (2025-06-xx xx:xx UTC)
|
# v0.9.46, build 221 (2025-06-xx xx:xx UTC)
|
||||||
- Added the ability to configure the maximum number of results returned per request for all data sources. Please note that this feature remains in preview and is not visible to all users.
|
- Added the ability to configure the maximum number of results returned per request for all data sources. Please note that this feature remains in preview and is not visible to all users.
|
||||||
- Added more text content to the I18N system & added the German translation for it.
|
- Added more text content to the I18N system & added the German translation for it.
|
||||||
|
- Added the Pandoc integration, which enables us to use Pandoc for data processing (e.g., RAG) and for generating files (e.g., Office documents). We thank Nils `nilskruthoff` for the excellent contribution.
|
@ -59,5 +59,5 @@ public sealed class LocalConstantsAnalyzer : DiagnosticAnalyzer
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static bool IsUpperCase(string name) => name.All(c => char.IsUpper(c) || char.IsDigit(c) || c == '_') &&
|
private static bool IsUpperCase(string name) => name.All(c => char.IsUpper(c) || char.IsDigit(c) || c == '_') &&
|
||||||
!string.IsNullOrEmpty(name) && name.Any(char.IsLetter);
|
!string.IsNullOrWhiteSpace(name) && name.Any(char.IsLetter);
|
||||||
}
|
}
|
@ -7,7 +7,6 @@ use file_format::{FileFormat, Kind};
|
|||||||
use futures::{Stream, StreamExt};
|
use futures::{Stream, StreamExt};
|
||||||
use pdfium_render::prelude::Pdfium;
|
use pdfium_render::prelude::Pdfium;
|
||||||
use tokio::io::AsyncBufReadExt;
|
use tokio::io::AsyncBufReadExt;
|
||||||
use tokio::process::Command;
|
|
||||||
use tokio::sync::mpsc;
|
use tokio::sync::mpsc;
|
||||||
use tokio_stream::wrappers::ReceiverStream;
|
use tokio_stream::wrappers::ReceiverStream;
|
||||||
use rocket::Shutdown;
|
use rocket::Shutdown;
|
||||||
@ -16,6 +15,7 @@ use rocket::tokio::select;
|
|||||||
use rocket::serde::Serialize;
|
use rocket::serde::Serialize;
|
||||||
use rocket::get;
|
use rocket::get;
|
||||||
use crate::api_token::APIToken;
|
use crate::api_token::APIToken;
|
||||||
|
use crate::pandoc::PandocProcessBuilder;
|
||||||
use crate::pdfium::PdfiumInit;
|
use crate::pdfium::PdfiumInit;
|
||||||
|
|
||||||
#[derive(Debug, Serialize)]
|
#[derive(Debug, Serialize)]
|
||||||
@ -255,11 +255,12 @@ async fn convert_with_pandoc(
|
|||||||
from: &str,
|
from: &str,
|
||||||
to: &str,
|
to: &str,
|
||||||
) -> Result<ChunkStream> {
|
) -> Result<ChunkStream> {
|
||||||
let output = Command::new("pandoc")
|
let output = PandocProcessBuilder::new()
|
||||||
.arg(file_path)
|
.with_input_file(file_path)
|
||||||
.args(["-f", from, "-t", to])
|
.with_input_format(from)
|
||||||
.output()
|
.with_output_format(to)
|
||||||
.await?;
|
.build()
|
||||||
|
.command.output().await?;
|
||||||
|
|
||||||
let stream = stream! {
|
let stream = stream! {
|
||||||
if output.status.success() {
|
if output.status.success() {
|
||||||
|
@ -12,3 +12,4 @@ pub mod certificate;
|
|||||||
pub mod file_data;
|
pub mod file_data;
|
||||||
pub mod metadata;
|
pub mod metadata;
|
||||||
pub mod pdfium;
|
pub mod pdfium;
|
||||||
|
pub mod pandoc;
|
169
runtime/src/pandoc.rs
Normal file
169
runtime/src/pandoc.rs
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
use std::path::{Path, PathBuf};
|
||||||
|
use std::fs;
|
||||||
|
use tokio::process::Command;
|
||||||
|
use crate::environment::DATA_DIRECTORY;
|
||||||
|
use crate::metadata::META_DATA;
|
||||||
|
|
||||||
|
pub struct PandocExecutable {
|
||||||
|
pub executable: String,
|
||||||
|
pub is_local_installation: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct PandocPreparedProcess {
|
||||||
|
pub command: Command,
|
||||||
|
pub is_local_installation: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct PandocProcessBuilder {
|
||||||
|
provided_input_file: Option<String>,
|
||||||
|
provided_output_file: Option<String>,
|
||||||
|
provided_input_format: Option<String>,
|
||||||
|
provided_output_format: Option<String>,
|
||||||
|
additional_arguments: Vec<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for PandocProcessBuilder {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self::new()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PandocProcessBuilder {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Self {
|
||||||
|
provided_input_file: None,
|
||||||
|
provided_output_file: None,
|
||||||
|
provided_input_format: None,
|
||||||
|
provided_output_format: None,
|
||||||
|
additional_arguments: Vec::new(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_input_file<S: Into<String>>(mut self, input_file: S) -> Self {
|
||||||
|
self.provided_input_file = Some(input_file.into());
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_output_file<S: Into<String>>(mut self, output_file: S) -> Self {
|
||||||
|
self.provided_output_file = Some(output_file.into());
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_input_format<S: Into<String>>(mut self, input_format: S) -> Self {
|
||||||
|
self.provided_input_format = Some(input_format.into());
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_output_format<S: Into<String>>(mut self, output_format: S) -> Self {
|
||||||
|
self.provided_output_format = Some(output_format.into());
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn add_argument<S: Into<String>>(mut self, argument: S) -> Self {
|
||||||
|
self.additional_arguments.push(argument.into());
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn build(self) -> PandocPreparedProcess {
|
||||||
|
let mut arguments = Vec::new();
|
||||||
|
if let Some(input_file) = &self.provided_input_file {
|
||||||
|
arguments.push(input_file.clone());
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(input_format) = &self.provided_input_format {
|
||||||
|
arguments.push("-f".to_string());
|
||||||
|
arguments.push(input_format.clone());
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(output_format) = &self.provided_output_format {
|
||||||
|
arguments.push("-t".to_string());
|
||||||
|
arguments.push(output_format.clone());
|
||||||
|
}
|
||||||
|
|
||||||
|
for additional_argument in &self.additional_arguments {
|
||||||
|
arguments.push(additional_argument.clone());
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(output_file) = &self.provided_output_file {
|
||||||
|
arguments.push("-o".to_string());
|
||||||
|
arguments.push(output_file.clone());
|
||||||
|
}
|
||||||
|
|
||||||
|
let pandoc_executable = Self::pandoc_executable_path();
|
||||||
|
let mut command = Command::new(&pandoc_executable.executable);
|
||||||
|
command.args(&arguments);
|
||||||
|
|
||||||
|
PandocPreparedProcess {
|
||||||
|
command,
|
||||||
|
is_local_installation: pandoc_executable.is_local_installation,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the path to the pandoc executable.
|
||||||
|
///
|
||||||
|
/// Any local installation of pandoc will be preferred over the system-wide installation.
|
||||||
|
/// When a local installation is found, its absolute path will be returned. In case no local
|
||||||
|
/// installation is found, the name of the pandoc executable will be returned.
|
||||||
|
fn pandoc_executable_path() -> PandocExecutable {
|
||||||
|
// First, we try to find the pandoc executable in the data directory.
|
||||||
|
// Any local installation should be preferred over the system-wide installation.
|
||||||
|
let data_folder = PathBuf::from(DATA_DIRECTORY.get().unwrap());
|
||||||
|
let local_installation_root_directory = data_folder.join("pandoc");
|
||||||
|
|
||||||
|
if local_installation_root_directory.exists() {
|
||||||
|
let executable_name = Self::pandoc_executable_name();
|
||||||
|
|
||||||
|
if let Ok(entries) = fs::read_dir(&local_installation_root_directory) {
|
||||||
|
for entry in entries.flatten() {
|
||||||
|
let path = entry.path();
|
||||||
|
if path.is_dir() {
|
||||||
|
if let Ok(pandoc_path) = Self::find_executable_in_dir(&path, &executable_name) {
|
||||||
|
return PandocExecutable {
|
||||||
|
executable: pandoc_path.to_string_lossy().to_string(),
|
||||||
|
is_local_installation: true,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// When no local installation was found, we assume that the pandoc executable is in the system PATH:
|
||||||
|
PandocExecutable {
|
||||||
|
executable: Self::pandoc_executable_name(),
|
||||||
|
is_local_installation: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn find_executable_in_dir(dir: &Path, executable_name: &str) -> Result<PathBuf, Box<dyn std::error::Error>> {
|
||||||
|
let pandoc_path = dir.join(executable_name);
|
||||||
|
if pandoc_path.exists() && pandoc_path.is_file() {
|
||||||
|
return Ok(pandoc_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recursively search in subdirectories
|
||||||
|
if let Ok(entries) = fs::read_dir(dir) {
|
||||||
|
for entry in entries.flatten() {
|
||||||
|
let path = entry.path();
|
||||||
|
if path.is_dir() {
|
||||||
|
if let Ok(found_path) = Self::find_executable_in_dir(&path, executable_name) {
|
||||||
|
return Ok(found_path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Err("Executable not found".into())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Reads the os platform to determine the used executable name.
|
||||||
|
fn pandoc_executable_name() -> String {
|
||||||
|
let metadata = META_DATA.lock().unwrap();
|
||||||
|
let metadata = metadata.as_ref().unwrap();
|
||||||
|
|
||||||
|
match metadata.architecture.as_str() {
|
||||||
|
"win-arm64" | "win-x64" => "pandoc.exe".to_string(),
|
||||||
|
_ => "pandoc".to_string(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user