mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2025-07-04 00:22:56 +00:00
Added more text content to the I18N system (#446)
This commit is contained in:
parent
cfc2103b43
commit
7a08baf99b
@ -2,14 +2,16 @@ namespace AIStudio.Assistants.EMail;
|
|||||||
|
|
||||||
public static class WritingStylesExtensions
|
public static class WritingStylesExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => Tools.PluginSystem.I18N.I.T(fallbackEN, typeof(WritingStylesExtensions).Namespace, nameof(WritingStylesExtensions));
|
||||||
|
|
||||||
public static string Name(this WritingStyles style) => style switch
|
public static string Name(this WritingStyles style) => style switch
|
||||||
{
|
{
|
||||||
WritingStyles.ACADEMIC => "Academic",
|
WritingStyles.ACADEMIC => TB("Academic"),
|
||||||
WritingStyles.PERSONAL => "Personal",
|
WritingStyles.PERSONAL => TB("Personal"),
|
||||||
WritingStyles.BUSINESS_FORMAL => "Business formal",
|
WritingStyles.BUSINESS_FORMAL => TB("Business formal"),
|
||||||
WritingStyles.BUSINESS_INFORMAL => "Business informal",
|
WritingStyles.BUSINESS_INFORMAL => TB("Business informal"),
|
||||||
|
|
||||||
_ => "Not specified",
|
_ => TB("Not specified"),
|
||||||
};
|
};
|
||||||
|
|
||||||
public static string Prompt(this WritingStyles style) => style switch
|
public static string Prompt(this WritingStyles style) => style switch
|
||||||
|
@ -133,6 +133,21 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::ASSISTANTEMAIL::T759263763"] = "De
|
|||||||
-- Please select a target language for the e-mail.
|
-- Please select a target language for the e-mail.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::ASSISTANTEMAIL::T891073054"] = "Please select a target language for the e-mail."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::ASSISTANTEMAIL::T891073054"] = "Please select a target language for the e-mail."
|
||||||
|
|
||||||
|
-- Personal
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T1851428013"] = "Personal"
|
||||||
|
|
||||||
|
-- Academic
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T2055733914"] = "Academic"
|
||||||
|
|
||||||
|
-- Business informal
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T4031465193"] = "Business informal"
|
||||||
|
|
||||||
|
-- Business formal
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T477550214"] = "Business formal"
|
||||||
|
|
||||||
|
-- Not specified
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::EMAIL::WRITINGSTYLESEXTENSIONS::T641241064"] = "Not specified"
|
||||||
|
|
||||||
-- Please provide a text as input. You might copy the desired text from a document or a website.
|
-- Please provide a text as input. You might copy the desired text from a document or a website.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::GRAMMARSPELLING::ASSISTANTGRAMMARSPELLING::T137304886"] = "Please provide a text as input. You might copy the desired text from a document or a website."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::GRAMMARSPELLING::ASSISTANTGRAMMARSPELLING::T137304886"] = "Please provide a text as input. You might copy the desired text from a document or a website."
|
||||||
|
|
||||||
@ -256,6 +271,48 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::ASSISTANTREWRITEIMPROVE::
|
|||||||
-- Please provide a custom language.
|
-- Please provide a custom language.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::ASSISTANTREWRITEIMPROVE::T656744944"] = "Please provide a custom language."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::ASSISTANTREWRITEIMPROVE::T656744944"] = "Please provide a custom language."
|
||||||
|
|
||||||
|
-- Passive voice
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::SENTENCESTRUCTUREEXTENSIONS::T132535068"] = "Passive voice"
|
||||||
|
|
||||||
|
-- Active voice
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::SENTENCESTRUCTUREEXTENSIONS::T3548001825"] = "Active voice"
|
||||||
|
|
||||||
|
-- Not Specified
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::SENTENCESTRUCTUREEXTENSIONS::T4281286216"] = "Not Specified"
|
||||||
|
|
||||||
|
-- Scientific (scientific papers, research reports)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T1488581017"] = "Scientific (scientific papers, research reports)"
|
||||||
|
|
||||||
|
-- Technical (manuals, documentation)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T1577933546"] = "Technical (manuals, documentation)"
|
||||||
|
|
||||||
|
-- Changelog (release notes, version history)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T1755311660"] = "Changelog (release notes, version history)"
|
||||||
|
|
||||||
|
-- Literary (fiction, poetry)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T1823468337"] = "Literary (fiction, poetry)"
|
||||||
|
|
||||||
|
-- Journalistic (magazines, newspapers, news)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T302304243"] = "Journalistic (magazines, newspapers, news)"
|
||||||
|
|
||||||
|
-- Everyday (personal texts, social media)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T3607558508"] = "Everyday (personal texts, social media)"
|
||||||
|
|
||||||
|
-- Business (business emails, reports, presentations)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T3674741297"] = "Business (business emails, reports, presentations)"
|
||||||
|
|
||||||
|
-- Legal (legal texts, contracts)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T3749505397"] = "Legal (legal texts, contracts)"
|
||||||
|
|
||||||
|
-- Academic (essays, seminar papers)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T4090727535"] = "Academic (essays, seminar papers)"
|
||||||
|
|
||||||
|
-- Not specified
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T641241064"] = "Not specified"
|
||||||
|
|
||||||
|
-- Marketing (advertisements, sales texts)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::REWRITEIMPROVE::WRITINGSTYLESEXTENSIONS::T945714286"] = "Marketing (advertisements, sales texts)"
|
||||||
|
|
||||||
-- Your word or phrase
|
-- Your word or phrase
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::SYNONYM::ASSISTANTSYNONYMS::T1847246020"] = "Your word or phrase"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::SYNONYM::ASSISTANTSYNONYMS::T1847246020"] = "Your word or phrase"
|
||||||
|
|
||||||
@ -316,6 +373,27 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::ASSISTANTTEXTSUMMARIZER::
|
|||||||
-- Your expertise
|
-- Your expertise
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::ASSISTANTTEXTSUMMARIZER::T970222193"] = "Your expertise"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::ASSISTANTTEXTSUMMARIZER::T970222193"] = "Your expertise"
|
||||||
|
|
||||||
|
-- No change in complexity
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T1001090711"] = "No change in complexity"
|
||||||
|
|
||||||
|
-- Teen language, e.g., for teenagers
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T1177455058"] = "Teen language, e.g., for teenagers"
|
||||||
|
|
||||||
|
-- Scientific language for experts in this field
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T2687197281"] = "Scientific language for experts in this field"
|
||||||
|
|
||||||
|
-- Scientific language for experts from other fields (interdisciplinary)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T2931193867"] = "Scientific language for experts from other fields (interdisciplinary)"
|
||||||
|
|
||||||
|
-- Popular science language, e.g., for people interested in science
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T3161914110"] = "Popular science language, e.g., for people interested in science"
|
||||||
|
|
||||||
|
-- Everyday language, e.g., for adults
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T3382050522"] = "Everyday language, e.g., for adults"
|
||||||
|
|
||||||
|
-- Simple language, e.g., for children
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TEXTSUMMARIZER::COMPLEXITYEXTENSIONS::T530584375"] = "Simple language, e.g., for children"
|
||||||
|
|
||||||
-- Please select a target language.
|
-- Please select a target language.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TRANSLATION::ASSISTANTTRANSLATION::T1173859091"] = "Please select a target language."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::TRANSLATION::ASSISTANTTRANSLATION::T1173859091"] = "Please select a target language."
|
||||||
|
|
||||||
@ -1240,6 +1318,9 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T2842060373"] = "Instance Na
|
|||||||
-- Show available models
|
-- Show available models
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T3763891899"] = "Show available models"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T3763891899"] = "Show available models"
|
||||||
|
|
||||||
|
-- Model selection
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T416738168"] = "Model selection"
|
||||||
|
|
||||||
-- Host
|
-- Host
|
||||||
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T808120719"] = "Host"
|
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::PROVIDERDIALOG::T808120719"] = "Host"
|
||||||
|
|
||||||
@ -2530,6 +2611,228 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::WRITER::T3948127789"] = "Suggestion"
|
|||||||
-- Your stage directions
|
-- Your stage directions
|
||||||
UI_TEXT_CONTENT["AISTUDIO::PAGES::WRITER::T779923726"] = "Your stage directions"
|
UI_TEXT_CONTENT["AISTUDIO::PAGES::WRITER::T779923726"] = "Your stage directions"
|
||||||
|
|
||||||
|
-- Tried to communicate with the LLM provider '{0}'. The API key might be invalid. The provider message is: '{1}'
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1073493061"] = "Tried to communicate with the LLM provider '{0}'. The API key might be invalid. The provider message is: '{1}'"
|
||||||
|
|
||||||
|
-- Tried to stream the LLM provider '{0}' answer. There were some problems with the stream. The message is: '{1}'
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1487597412"] = "Tried to stream the LLM provider '{0}' answer. There were some problems with the stream. The message is: '{1}'"
|
||||||
|
|
||||||
|
-- Tried to communicate with the LLM provider '{0}'. The required message format might be changed. The provider message is: '{1}'
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1674355816"] = "Tried to communicate with the LLM provider '{0}'. The required message format might be changed. The provider message is: '{1}'"
|
||||||
|
|
||||||
|
-- Tried to stream the LLM provider '{0}' answer. Was not able to read the stream. The message is: '{1}'
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T1856278860"] = "Tried to stream the LLM provider '{0}' answer. Was not able to read the stream. The message is: '{1}'"
|
||||||
|
|
||||||
|
-- Tried to communicate with the LLM provider '{0}'. Even after {1} retries, there were some problems with the request. The provider message is: '{2}'
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T2249520705"] = "Tried to communicate with the LLM provider '{0}'. Even after {1} retries, there were some problems with the request. The provider message is: '{2}'"
|
||||||
|
|
||||||
|
-- Tried to communicate with the LLM provider '{0}'. Something was not found. The provider message is: '{1}'
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T2780552614"] = "Tried to communicate with the LLM provider '{0}'. Something was not found. The provider message is: '{1}'"
|
||||||
|
|
||||||
|
-- Tried to communicate with the LLM provider '{0}'. There were some problems with the request. The provider message is: '{1}'
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T3573577433"] = "Tried to communicate with the LLM provider '{0}'. There were some problems with the request. The provider message is: '{1}'"
|
||||||
|
|
||||||
|
-- Tried to communicate with the LLM provider '{0}'. The server might be down or having issues. The provider message is: '{1}'
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T3806716694"] = "Tried to communicate with the LLM provider '{0}'. The server might be down or having issues. The provider message is: '{1}'"
|
||||||
|
|
||||||
|
-- Tried to communicate with the LLM provider '{0}'. The provider is overloaded. The message is: '{1}'
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T4179546180"] = "Tried to communicate with the LLM provider '{0}'. The provider is overloaded. The message is: '{1}'"
|
||||||
|
|
||||||
|
-- Tried to communicate with the LLM provider '{0}'. You might not be able to use this provider from your location. The provider message is: '{1}'
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::BASEPROVIDER::T862369179"] = "Tried to communicate with the LLM provider '{0}'. You might not be able to use this provider from your location. The provider message is: '{1}'"
|
||||||
|
|
||||||
|
-- The trust level of this provider **has not yet** been thoroughly **investigated and evaluated**. We do not know if your data is safe.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T1014558951"] = "The trust level of this provider **has not yet** been thoroughly **investigated and evaluated**. We do not know if your data is safe."
|
||||||
|
|
||||||
|
-- You or your organization operate the LLM locally or within your trusted network. In terms of data processing and security, this is the best possible way.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T2124364471"] = "You or your organization operate the LLM locally or within your trusted network. In terms of data processing and security, this is the best possible way."
|
||||||
|
|
||||||
|
-- The provider is located in the EU and is subject to the **GDPR** (General Data Protection Regulation). Additionally, the provider states that **your data is not used for training**.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T3010553924"] = "The provider is located in the EU and is subject to the **GDPR** (General Data Protection Regulation). Additionally, the provider states that **your data is not used for training**."
|
||||||
|
|
||||||
|
-- No provider selected. Please select a provider to get see its confidence level.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T3368531176"] = "No provider selected. Please select a provider to get see its confidence level."
|
||||||
|
|
||||||
|
-- The provider operates its service from the USA and is subject to **US jurisdiction**. In case of suspicion, authorities in the USA can access your data. However, **your data is not used for training** purposes.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T3528165925"] = "The provider operates its service from the USA and is subject to **US jurisdiction**. In case of suspicion, authorities in the USA can access your data. However, **your data is not used for training** purposes."
|
||||||
|
|
||||||
|
-- The provider operates its service from the USA and is subject to **U.S. jurisdiction**. In case of suspicion, authorities in the USA can access your data. Please inform yourself about the use of your data. We do not know if your data is safe.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T3788466789"] = "The provider operates its service from the USA and is subject to **U.S. jurisdiction**. In case of suspicion, authorities in the USA can access your data. Please inform yourself about the use of your data. We do not know if your data is safe."
|
||||||
|
|
||||||
|
-- The provider operates its service from China. In case of suspicion, authorities in the respective countries of operation may access your data. However, **your data is not used for training** purposes.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCE::T991875725"] = "The provider operates its service from China. In case of suspicion, authorities in the respective countries of operation may access your data. However, **your data is not used for training** purposes."
|
||||||
|
|
||||||
|
-- Medium
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T163471254"] = "Medium"
|
||||||
|
|
||||||
|
-- Moderate
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T177463328"] = "Moderate"
|
||||||
|
|
||||||
|
-- Unknown confidence level
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T1811522309"] = "Unknown confidence level"
|
||||||
|
|
||||||
|
-- No provider selected
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T2897045472"] = "No provider selected"
|
||||||
|
|
||||||
|
-- Low
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T2984088865"] = "Low"
|
||||||
|
|
||||||
|
-- Untrusted
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T3063224793"] = "Untrusted"
|
||||||
|
|
||||||
|
-- High
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T3188327965"] = "High"
|
||||||
|
|
||||||
|
-- Very Low
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::CONFIDENCELEVELEXTENSIONS::T786675843"] = "Very Low"
|
||||||
|
|
||||||
|
-- Self-hosted
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::LLMPROVIDERSEXTENSIONS::T146444217"] = "Self-hosted"
|
||||||
|
|
||||||
|
-- No provider selected
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::LLMPROVIDERSEXTENSIONS::T2897045472"] = "No provider selected"
|
||||||
|
|
||||||
|
-- Unknown
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::PROVIDER::LLMPROVIDERSEXTENSIONS::T3424652889"] = "Unknown"
|
||||||
|
|
||||||
|
-- Navigation never expands, but there are tooltips
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1095779033"] = "Navigation never expands, but there are tooltips"
|
||||||
|
|
||||||
|
-- Check every day
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1112287590"] = "Check every day"
|
||||||
|
|
||||||
|
-- Toggle the overlay: the chat uses all the space, workspaces are temporarily shown
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1114668646"] = "Toggle the overlay: the chat uses all the space, workspaces are temporarily shown"
|
||||||
|
|
||||||
|
-- Sidebar is always visible: show the workspaces next to the chat all the time
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1149606444"] = "Sidebar is always visible: show the workspaces next to the chat all the time"
|
||||||
|
|
||||||
|
-- Always use the default chat provider when loading chats
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1188453609"] = "Always use the default chat provider when loading chats"
|
||||||
|
|
||||||
|
-- Show also prototype features: these are works in progress; expect bugs and missing features
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1245257804"] = "Show also prototype features: these are works in progress; expect bugs and missing features"
|
||||||
|
|
||||||
|
-- No key is sending the input
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1311973034"] = "No key is sending the input"
|
||||||
|
|
||||||
|
-- Navigation never expands, no tooltips
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1402851833"] = "Navigation never expands, no tooltips"
|
||||||
|
|
||||||
|
-- Store chats automatically
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1664293672"] = "Store chats automatically"
|
||||||
|
|
||||||
|
-- Once at startup
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T184455356"] = "Once at startup"
|
||||||
|
|
||||||
|
-- No automatic update checks
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1874928511"] = "No automatic update checks"
|
||||||
|
|
||||||
|
-- Always expand navigation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T1991359958"] = "Always expand navigation"
|
||||||
|
|
||||||
|
-- Show also experimental features: these are experimental; expect bugs, missing features, many changes
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2091731959"] = "Show also experimental features: these are experimental; expect bugs, missing features, many changes"
|
||||||
|
|
||||||
|
-- Use the latest LLM provider, which was used before; use the default chat provider initially
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2128088682"] = "Use the latest LLM provider, which was used before; use the default chat provider initially"
|
||||||
|
|
||||||
|
-- Navigation expands on mouse hover
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2195945406"] = "Navigation expands on mouse hover"
|
||||||
|
|
||||||
|
-- Also show features ready for release; these should be stable
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2301448762"] = "Also show features ready for release; these should be stable"
|
||||||
|
|
||||||
|
-- Check every week
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T238099712"] = "Check every week"
|
||||||
|
|
||||||
|
-- Delete disappearing chats older than 1 year
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2405705561"] = "Delete disappearing chats older than 1 year"
|
||||||
|
|
||||||
|
-- Store chats manually
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2520325466"] = "Store chats manually"
|
||||||
|
|
||||||
|
-- Enter is sending the input
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2537778562"] = "Enter is sending the input"
|
||||||
|
|
||||||
|
-- Not yet specified
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2566503670"] = "Not yet specified"
|
||||||
|
|
||||||
|
-- No minimum confidence level chosen
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2828607242"] = "No minimum confidence level chosen"
|
||||||
|
|
||||||
|
-- Do not specify the language
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2960082609"] = "Do not specify the language"
|
||||||
|
|
||||||
|
-- Delete disappearing chats older than 7 days
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2975140581"] = "Delete disappearing chats older than 7 days"
|
||||||
|
|
||||||
|
-- Always use the default chat provider for new chats
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T2976921892"] = "Always use the default chat provider for new chats"
|
||||||
|
|
||||||
|
-- Also show features in beta: these are almost ready for release; expect some bugs
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3061414822"] = "Also show features in beta: these are almost ready for release; expect some bugs"
|
||||||
|
|
||||||
|
-- Check every hour
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3137986690"] = "Check every hour"
|
||||||
|
|
||||||
|
-- Delete disappearing chats older than 180 days
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3491430707"] = "Delete disappearing chats older than 180 days"
|
||||||
|
|
||||||
|
-- Disable workspaces
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3612390107"] = "Disable workspaces"
|
||||||
|
|
||||||
|
-- Toggle the sidebar: show the workspaces next to the chat when desired
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T3711207137"] = "Toggle the sidebar: show the workspaces next to the chat when desired"
|
||||||
|
|
||||||
|
-- Also show features in alpha: these are in development; expect bugs and missing features
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T4146964761"] = "Also show features in alpha: these are in development; expect bugs and missing features"
|
||||||
|
|
||||||
|
-- All preview features are hidden
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T4289410063"] = "All preview features are hidden"
|
||||||
|
|
||||||
|
-- When possible, use the LLM provider which was used for each chat in the first place
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T75376144"] = "When possible, use the LLM provider which was used for each chat in the first place"
|
||||||
|
|
||||||
|
-- No automatic maintenance for disappearing chats; old chats will never be deleted
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T803751240"] = "No automatic maintenance for disappearing chats; old chats will never be deleted"
|
||||||
|
|
||||||
|
-- Delete disappearing chats older than 90 days
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T869922627"] = "Delete disappearing chats older than 90 days"
|
||||||
|
|
||||||
|
-- Modifier key + enter is sending the input
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T870850829"] = "Modifier key + enter is sending the input"
|
||||||
|
|
||||||
|
-- Delete disappearing chats older than 30 days
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::CONFIGURATIONSELECTDATAFACTORY::T937754037"] = "Delete disappearing chats older than 30 days"
|
||||||
|
|
||||||
|
-- This data source can be used with any LLM provider. Your data may be sent to a cloud-based provider.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T1531417967"] = "This data source can be used with any LLM provider. Your data may be sent to a cloud-based provider."
|
||||||
|
|
||||||
|
-- This data source can only be used with a self-hosted LLM provider. Your data will not be sent to any cloud-based provider.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T3187068849"] = "This data source can only be used with a self-hosted LLM provider. Your data will not be sent to any cloud-based provider."
|
||||||
|
|
||||||
|
-- Please select a security policy
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T3511915070"] = "Please select a security policy"
|
||||||
|
|
||||||
|
-- The security of the data source is not specified yet. You cannot use this data source until you specify a security policy.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T4056804813"] = "The security of the data source is not specified yet. You cannot use this data source until you specify a security policy."
|
||||||
|
|
||||||
|
-- Unknown security policy
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCESECURITYEXTENSIONS::T4277536697"] = "Unknown security policy"
|
||||||
|
|
||||||
|
-- Local File
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCETYPEEXTENSION::T1687345358"] = "Local File"
|
||||||
|
|
||||||
|
-- External ERI Server (v1)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCETYPEEXTENSION::T3020093889"] = "External ERI Server (v1)"
|
||||||
|
|
||||||
|
-- None
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCETYPEEXTENSION::T810547195"] = "None"
|
||||||
|
|
||||||
|
-- Local Directory
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::DATASOURCETYPEEXTENSION::T926703547"] = "Local Directory"
|
||||||
|
|
||||||
-- Unknown option
|
-- Unknown option
|
||||||
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3964902774"] = "Unknown option"
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3964902774"] = "Unknown option"
|
||||||
|
|
||||||
@ -2538,3 +2841,657 @@ UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T3988034
|
|||||||
|
|
||||||
-- Choose the language automatically, based on your system language.
|
-- Choose the language automatically, based on your system language.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T485389934"] = "Choose the language automatically, based on your system language."
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::LANGBEHAVIOREXTENSIONS::T485389934"] = "Choose the language automatically, based on your system language."
|
||||||
|
|
||||||
|
-- Writer Mode: Experiments about how to write long texts using AI
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T158702544"] = "Writer Mode: Experiments about how to write long texts using AI"
|
||||||
|
|
||||||
|
-- Read PDF: Preview of our PDF reading system where you can read and extract text from PDF files
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T1847148141"] = "Read PDF: Preview of our PDF reading system where you can read and extract text from PDF files"
|
||||||
|
|
||||||
|
-- Plugins: Preview of our plugin system where you can extend the functionality of the app
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2056842933"] = "Plugins: Preview of our plugin system where you can extend the functionality of the app"
|
||||||
|
|
||||||
|
-- RAG: Preview of our RAG implementation where you can refer your files or integrate enterprise data within your company
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2708939138"] = "RAG: Preview of our RAG implementation where you can refer your files or integrate enterprise data within your company"
|
||||||
|
|
||||||
|
-- Unknown preview feature
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::PREVIEWFEATURESEXTENSIONS::T2722827307"] = "Unknown preview feature"
|
||||||
|
|
||||||
|
-- Use no data sources, when sending an assistant result to a chat
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::SENDTOCHATDATASOURCEBEHAVIOREXTENSIONS::T1223925477"] = "Use no data sources, when sending an assistant result to a chat"
|
||||||
|
|
||||||
|
-- Unknown behavior
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::SENDTOCHATDATASOURCEBEHAVIOREXTENSIONS::T1394162669"] = "Unknown behavior"
|
||||||
|
|
||||||
|
-- Apply standard chat data source options, when sending an assistant result to a chat
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::SENDTOCHATDATASOURCEBEHAVIOREXTENSIONS::T2129722199"] = "Apply standard chat data source options, when sending an assistant result to a chat"
|
||||||
|
|
||||||
|
-- Always use dark theme
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::THEMESEXTENSIONS::T197192304"] = "Always use dark theme"
|
||||||
|
|
||||||
|
-- Synchronized with the operating system settings
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::THEMESEXTENSIONS::T1987547483"] = "Synchronized with the operating system settings"
|
||||||
|
|
||||||
|
-- Unknown setting
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::THEMESEXTENSIONS::T4107955313"] = "Unknown setting"
|
||||||
|
|
||||||
|
-- Always use light theme
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::DATAMODEL::THEMESEXTENSIONS::T534715610"] = "Always use light theme"
|
||||||
|
|
||||||
|
-- Use no profile
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::SETTINGS::PROFILE::T2205839602"] = "Use no profile"
|
||||||
|
|
||||||
|
-- SSO (Kerberos)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T268552140"] = "SSO (Kerberos)"
|
||||||
|
|
||||||
|
-- Access Token
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T2891154022"] = "Access Token"
|
||||||
|
|
||||||
|
-- Unknown authentication method
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T3296465240"] = "Unknown authentication method"
|
||||||
|
|
||||||
|
-- None
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T810547195"] = "None"
|
||||||
|
|
||||||
|
-- Username & Password
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::AUTHMETHODSV1EXTENSIONS::T863358904"] = "Username & Password"
|
||||||
|
|
||||||
|
-- Spanish (Spain)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T1269145091"] = "Spanish (Spain)"
|
||||||
|
|
||||||
|
-- German (Germany)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T133055431"] = "German (Germany)"
|
||||||
|
|
||||||
|
-- Other
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T1849229205"] = "Other"
|
||||||
|
|
||||||
|
-- German (Switzerland)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T1914931075"] = "German (Switzerland)"
|
||||||
|
|
||||||
|
-- German (Austria)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T1992157553"] = "German (Austria)"
|
||||||
|
|
||||||
|
-- Japanese (Japan)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T2064802889"] = "Japanese (Japan)"
|
||||||
|
|
||||||
|
-- French (France)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T2496010681"] = "French (France)"
|
||||||
|
|
||||||
|
-- Please select the target language
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T2536245199"] = "Please select the target language"
|
||||||
|
|
||||||
|
-- Do not specify the language
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T2960082609"] = "Do not specify the language"
|
||||||
|
|
||||||
|
-- Hindi (India)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T3245596873"] = "Hindi (India)"
|
||||||
|
|
||||||
|
-- Chinese (Simplified)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T3441562249"] = "Chinese (Simplified)"
|
||||||
|
|
||||||
|
-- English (US)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T3729684486"] = "English (US)"
|
||||||
|
|
||||||
|
-- English (UK)
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T3730964414"] = "English (UK)"
|
||||||
|
|
||||||
|
-- Do not change the language
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMMONLANGUAGEEXTENSIONS::T658789330"] = "Do not change the language"
|
||||||
|
|
||||||
|
-- Coding Assistant
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T1082499335"] = "Coding Assistant"
|
||||||
|
|
||||||
|
-- E-Mail Assistant
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T1185802704"] = "E-Mail Assistant"
|
||||||
|
|
||||||
|
-- My Tasks Assistant
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T1546040625"] = "My Tasks Assistant"
|
||||||
|
|
||||||
|
-- Grammar & Spelling Assistant
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T166453786"] = "Grammar & Spelling Assistant"
|
||||||
|
|
||||||
|
-- Legal Check Assistant
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T1886447798"] = "Legal Check Assistant"
|
||||||
|
|
||||||
|
-- Job Posting Assistant
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T2212811874"] = "Job Posting Assistant"
|
||||||
|
|
||||||
|
-- Icon Finder Assistant
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T2457005512"] = "Icon Finder Assistant"
|
||||||
|
|
||||||
|
-- Text Summarizer Assistant
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T2684676843"] = "Text Summarizer Assistant"
|
||||||
|
|
||||||
|
-- Synonym Assistant
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T2921123194"] = "Synonym Assistant"
|
||||||
|
|
||||||
|
-- Translation Assistant
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T3887962308"] = "Translation Assistant"
|
||||||
|
|
||||||
|
-- Agenda Assistant
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T4034795997"] = "Agenda Assistant"
|
||||||
|
|
||||||
|
-- ERI Server
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T4204533420"] = "ERI Server"
|
||||||
|
|
||||||
|
-- Rewrite Assistant
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T4262148639"] = "Rewrite Assistant"
|
||||||
|
|
||||||
|
-- Localization Assistant
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T446674624"] = "Localization Assistant"
|
||||||
|
|
||||||
|
-- New Chat
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::COMPONENTSEXTENSIONS::T826248509"] = "New Chat"
|
||||||
|
|
||||||
|
-- Trust LLM providers from the USA
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T1748300640"] = "Trust LLM providers from the USA"
|
||||||
|
|
||||||
|
-- Configure your own confidence scheme
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T2017415465"] = "Configure your own confidence scheme"
|
||||||
|
|
||||||
|
-- Trust LLM providers from the USA and Europe
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T2498514901"] = "Trust LLM providers from the USA and Europe"
|
||||||
|
|
||||||
|
-- Unknown confidence scheme
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T292756058"] = "Unknown confidence scheme"
|
||||||
|
|
||||||
|
-- Trust LLM providers from Asia
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T3016210842"] = "Trust LLM providers from Asia"
|
||||||
|
|
||||||
|
-- Trust LLM providers from Europe
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T357239630"] = "Trust LLM providers from Europe"
|
||||||
|
|
||||||
|
-- Trust only local LLM providers
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T3893997203"] = "Trust only local LLM providers"
|
||||||
|
|
||||||
|
-- Trust all LLM providers
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::CONFIDENCESCHEMESEXTENSIONS::T4107860491"] = "Trust all LLM providers"
|
||||||
|
|
||||||
|
-- The related data is not allowed to be sent to any LLM provider. This means that this data source cannot be used at the moment.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::DATAMODEL::PROVIDERTYPEEXTENSIONS::T1555790630"] = "The related data is not allowed to be sent to any LLM provider. This means that this data source cannot be used at the moment."
|
||||||
|
|
||||||
|
-- The related data can be sent to any provider, regardless of where it is hosted (cloud or self-hosted).
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::DATAMODEL::PROVIDERTYPEEXTENSIONS::T2031831095"] = "The related data can be sent to any provider, regardless of where it is hosted (cloud or self-hosted)."
|
||||||
|
|
||||||
|
-- The related data can be sent to a provider that is hosted by the same organization, either on-premises or locally. Cloud-based providers are not allowed.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::DATAMODEL::PROVIDERTYPEEXTENSIONS::T2943101676"] = "The related data can be sent to a provider that is hosted by the same organization, either on-premises or locally. Cloud-based providers are not allowed."
|
||||||
|
|
||||||
|
-- Unknown configuration. This data source cannot be used at the moment.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::DATAMODEL::PROVIDERTYPEEXTENSIONS::T647911863"] = "Unknown configuration. This data source cannot be used at the moment."
|
||||||
|
|
||||||
|
-- Failed to execute the retrieval request: the request was canceled either by the user or due to a timeout.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1270753490"] = "Failed to execute the retrieval request: the request was canceled either by the user or due to a timeout."
|
||||||
|
|
||||||
|
-- Failed to retrieve the embedding information: the ERI server did not return a valid response.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1368217771"] = "Failed to retrieve the embedding information: the ERI server did not return a valid response."
|
||||||
|
|
||||||
|
-- Failed to retrieve the password.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1460025425"] = "Failed to retrieve the password."
|
||||||
|
|
||||||
|
-- Failed to authenticate with the ERI server. Code: {0}, Reason: {1}
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1741376192"] = "Failed to authenticate with the ERI server. Code: {0}, Reason: {1}"
|
||||||
|
|
||||||
|
-- Failed to retrieve the security requirements: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1931074357"] = "Failed to retrieve the security requirements: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"
|
||||||
|
|
||||||
|
-- Failed to execute the retrieval request due to an exception: {0}
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1951868505"] = "Failed to execute the retrieval request due to an exception: {0}"
|
||||||
|
|
||||||
|
-- Failed to execute the retrieval request: the ERI server did not return a valid response.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T1978354870"] = "Failed to execute the retrieval request: the ERI server did not return a valid response."
|
||||||
|
|
||||||
|
-- Failed to retrieve the security requirements: the ERI server did not return a valid response.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T231684456"] = "Failed to retrieve the security requirements: the ERI server did not return a valid response."
|
||||||
|
|
||||||
|
-- Failed to authenticate with the server: the response was invalid.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2332248448"] = "Failed to authenticate with the server: the response was invalid."
|
||||||
|
|
||||||
|
-- Failed to retrieve the embedding information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2368384424"] = "Failed to retrieve the embedding information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"
|
||||||
|
|
||||||
|
-- Failed to retrieve the authentication methods: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2482165925"] = "Failed to retrieve the authentication methods: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"
|
||||||
|
|
||||||
|
-- The authentication method is not supported yet.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2536034936"] = "The authentication method is not supported yet."
|
||||||
|
|
||||||
|
-- Failed to authenticate with the ERI server: the response was invalid.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2549452166"] = "Failed to authenticate with the ERI server: the response was invalid."
|
||||||
|
|
||||||
|
-- Failed to retrieve the retrieval information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2558778293"] = "Failed to retrieve the retrieval information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"
|
||||||
|
|
||||||
|
-- Failed to authenticate with the ERI server: the request was canceled either by the user or due to a timeout.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2673501628"] = "Failed to authenticate with the ERI server: the request was canceled either by the user or due to a timeout."
|
||||||
|
|
||||||
|
-- Failed to authenticate with the ERI server due to an exception: {0}
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T2858189239"] = "Failed to authenticate with the ERI server due to an exception: {0}"
|
||||||
|
|
||||||
|
-- Failed to retrieve the security requirements: the request was canceled either by the user or due to a timeout.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T286437836"] = "Failed to retrieve the security requirements: the request was canceled either by the user or due to a timeout."
|
||||||
|
|
||||||
|
-- Failed to retrieve the security requirements due to an exception: {0}
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3221004295"] = "Failed to retrieve the security requirements due to an exception: {0}"
|
||||||
|
|
||||||
|
-- Failed to retrieve the data source information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3290521480"] = "Failed to retrieve the data source information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"
|
||||||
|
|
||||||
|
-- Failed to retrieve the data source information due to an exception: {0}
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3354496288"] = "Failed to retrieve the data source information due to an exception: {0}"
|
||||||
|
|
||||||
|
-- Failed to retrieve the authentication methods due to an exception: {0}
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3366487415"] = "Failed to retrieve the authentication methods due to an exception: {0}"
|
||||||
|
|
||||||
|
-- Failed to retrieve the authentication methods: the request was canceled either by the user or due to a timeout.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3654094460"] = "Failed to retrieve the authentication methods: the request was canceled either by the user or due to a timeout."
|
||||||
|
|
||||||
|
-- Failed to retrieve the retrieval information: the ERI server did not return a valid response.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3721797352"] = "Failed to retrieve the retrieval information: the ERI server did not return a valid response."
|
||||||
|
|
||||||
|
-- Failed to retrieve the retrieval information: the request was canceled either by the user or due to a timeout.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3809548876"] = "Failed to retrieve the retrieval information: the request was canceled either by the user or due to a timeout."
|
||||||
|
|
||||||
|
-- Failed to retrieve the retrieval information due to an exception: {0}
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T3862033799"] = "Failed to retrieve the retrieval information due to an exception: {0}"
|
||||||
|
|
||||||
|
-- Failed to retrieve the data source information: the ERI server did not return a valid response.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T4006612619"] = "Failed to retrieve the data source information: the ERI server did not return a valid response."
|
||||||
|
|
||||||
|
-- Failed to retrieve the embedding information: the request was canceled either by the user or due to a timeout.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T469891013"] = "Failed to retrieve the embedding information: the request was canceled either by the user or due to a timeout."
|
||||||
|
|
||||||
|
-- Failed to execute the retrieval request: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T615338311"] = "Failed to execute the retrieval request: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"
|
||||||
|
|
||||||
|
-- Failed to retrieve the data source information: the request was canceled either by the user or due to a timeout.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T690733413"] = "Failed to retrieve the data source information: the request was canceled either by the user or due to a timeout."
|
||||||
|
|
||||||
|
-- Failed to retrieve the embedding information due to an exception: {0}
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T765050112"] = "Failed to retrieve the embedding information due to an exception: {0}"
|
||||||
|
|
||||||
|
-- Failed to retrieve the access token.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::ERICLIENT::ERICLIENTV1::T816853779"] = "Failed to retrieve the access token."
|
||||||
|
|
||||||
|
-- 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."
|
||||||
|
|
||||||
|
-- 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."
|
||||||
|
|
||||||
|
-- The field NAME does not exist or is not a valid string.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1340447036"] = "The field NAME does not exist or is not a valid string."
|
||||||
|
|
||||||
|
-- The field SOURCE_URL does not exist or is not a valid string.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1421846488"] = "The field SOURCE_URL does not exist or is not a valid string."
|
||||||
|
|
||||||
|
-- The field VERSION does not exist or is not a valid string.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T148801541"] = "The field VERSION does not exist or is not a valid string."
|
||||||
|
|
||||||
|
-- The table CATEGORIES does not exist or is using an invalid syntax.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1505723383"] = "The table CATEGORIES does not exist or is using an invalid syntax."
|
||||||
|
|
||||||
|
-- The table TARGET_GROUPS is empty or is not a valid table of strings. Valid target groups are: {0}.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1619769690"] = "The table TARGET_GROUPS is empty or is not a valid table of strings. Valid target groups are: {0}."
|
||||||
|
|
||||||
|
-- The field ID is empty. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX).
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T1733171739"] = "The field ID is empty. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)."
|
||||||
|
|
||||||
|
-- The field VERSION is empty. The version number must be formatted as string in the major.minor.patch format (X.X.X).
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2115845776"] = "The field VERSION is empty. The version number must be formatted as string in the major.minor.patch format (X.X.X)."
|
||||||
|
|
||||||
|
-- The field ID does not exist or is not a valid string.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2203072274"] = "The field ID does not exist or is not a valid string."
|
||||||
|
|
||||||
|
-- The field DESCRIPTION is empty. The description must be a non-empty string.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2262604281"] = "The field DESCRIPTION is empty. The description must be a non-empty string."
|
||||||
|
|
||||||
|
-- The field DESCRIPTION does not exist or is not a valid string.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T229488255"] = "The field DESCRIPTION does not exist or is not a valid string."
|
||||||
|
|
||||||
|
-- The field SOURCE_URL is not a valid URL. The URL must start with 'http://' or 'https://'.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2320984047"] = "The field SOURCE_URL is not a valid URL. The URL must start with 'http://' or 'https://'."
|
||||||
|
|
||||||
|
-- The field VERSION is not a valid version number. The version number must be formatted as string in the major.minor.patch format (X.X.X).
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2538827536"] = "The field VERSION is not a valid version number. The version number must be formatted as string in the major.minor.patch format (X.X.X)."
|
||||||
|
|
||||||
|
-- The table AUTHORS is empty. At least one author must be specified.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T2981832540"] = "The table AUTHORS is empty. At least one author must be specified."
|
||||||
|
|
||||||
|
-- The field SUPPORT_CONTACT is empty. The support contact must be a non-empty string.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T3524814526"] = "The field SUPPORT_CONTACT is empty. The support contact must be a non-empty string."
|
||||||
|
|
||||||
|
-- The UI_TEXT_CONTENT table does not exist or is not a valid table.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T3667396132"] = "The UI_TEXT_CONTENT table does not exist or is not a valid table."
|
||||||
|
|
||||||
|
-- The field NAME is empty. The name must be a non-empty string.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T3763759727"] = "The field NAME is empty. The name must be a non-empty string."
|
||||||
|
|
||||||
|
-- The field DEPRECATION_MESSAGE does not exist, is not a valid string. This message is optional: use an empty string to indicate that the plugin is not deprecated.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T3890922974"] = "The field DEPRECATION_MESSAGE does not exist, is not a valid string. This message is optional: use an empty string to indicate that the plugin is not deprecated."
|
||||||
|
|
||||||
|
-- The field SUPPORT_CONTACT does not exist or is not a valid string.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T4189964941"] = "The field SUPPORT_CONTACT does not exist or is not a valid string."
|
||||||
|
|
||||||
|
-- The table TARGET_GROUPS does not exist or is using an invalid syntax.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T447530369"] = "The table TARGET_GROUPS does not exist or is using an invalid syntax."
|
||||||
|
|
||||||
|
-- The field ID is not a valid GUID / UUID. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX).
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T471697173"] = "The field ID is not a valid GUID / UUID. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)."
|
||||||
|
|
||||||
|
-- The table CATEGORIES is empty. At least one category is necessary. Valid categories are: {0}.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T529114360"] = "The table CATEGORIES is empty. At least one category is necessary. Valid categories are: {0}."
|
||||||
|
|
||||||
|
-- The field IS_MAINTAINED does not exist or is not a valid boolean.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINBASE::T773237915"] = "The field IS_MAINTAINED does not exist or is not a valid boolean."
|
||||||
|
|
||||||
|
-- Writing
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1011777007"] = "Writing"
|
||||||
|
|
||||||
|
-- Software Development
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1025369409"] = "Software Development"
|
||||||
|
|
||||||
|
-- Business
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T131837803"] = "Business"
|
||||||
|
|
||||||
|
-- Music
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1481252212"] = "Music"
|
||||||
|
|
||||||
|
-- Unknown plugin category
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1585885320"] = "Unknown plugin category"
|
||||||
|
|
||||||
|
-- Weather
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T1726658099"] = "Weather"
|
||||||
|
|
||||||
|
-- Industry
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T208409567"] = "Industry"
|
||||||
|
|
||||||
|
-- Art
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2449163306"] = "Art"
|
||||||
|
|
||||||
|
-- Sports
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2465108186"] = "Sports"
|
||||||
|
|
||||||
|
-- Technology
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2499534031"] = "Technology"
|
||||||
|
|
||||||
|
-- Health
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2556511663"] = "Health"
|
||||||
|
|
||||||
|
-- Utility
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2587055103"] = "Utility"
|
||||||
|
|
||||||
|
-- Shopping
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2704337693"] = "Shopping"
|
||||||
|
|
||||||
|
-- Fitness
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T2892517655"] = "Fitness"
|
||||||
|
|
||||||
|
-- Food
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T3179069417"] = "Food"
|
||||||
|
|
||||||
|
-- Gaming
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T3246118672"] = "Gaming"
|
||||||
|
|
||||||
|
-- News
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T3421767782"] = "News"
|
||||||
|
|
||||||
|
-- Entertainment
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T3562575449"] = "Entertainment"
|
||||||
|
|
||||||
|
-- Education
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T379048501"] = "Education"
|
||||||
|
|
||||||
|
-- AI Studio Core
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T4005865962"] = "AI Studio Core"
|
||||||
|
|
||||||
|
-- Social
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T4177547506"] = "Social"
|
||||||
|
|
||||||
|
-- Political
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T4245273692"] = "Political"
|
||||||
|
|
||||||
|
-- Fiction
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T616807299"] = "Fiction"
|
||||||
|
|
||||||
|
-- Travel
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T745861401"] = "Travel"
|
||||||
|
|
||||||
|
-- None
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T810547195"] = "None"
|
||||||
|
|
||||||
|
-- Party
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T850565431"] = "Party"
|
||||||
|
|
||||||
|
-- Science
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T904504157"] = "Science"
|
||||||
|
|
||||||
|
-- Content Creation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINCATEGORYEXTENSIONS::T914642375"] = "Content Creation"
|
||||||
|
|
||||||
|
-- The field IETF_TAG does not exist or is not a valid string.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T1796010240"] = "The field IETF_TAG does not exist or is not a valid string."
|
||||||
|
|
||||||
|
-- The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T3376221777"] = "The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code."
|
||||||
|
|
||||||
|
-- The field IETF_TAG is empty. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T3877047896"] = "The field IETF_TAG is empty. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code."
|
||||||
|
|
||||||
|
-- The field LANG_NAME is empty. Use a valid language name.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T4112586014"] = "The field LANG_NAME is empty. Use a valid language name."
|
||||||
|
|
||||||
|
-- The field LANG_NAME does not exist or is not a valid string.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINLANGUAGE::T4204700759"] = "The field LANG_NAME does not exist or is not a valid string."
|
||||||
|
|
||||||
|
-- Artists
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T1142248183"] = "Artists"
|
||||||
|
|
||||||
|
-- Children
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T188567026"] = "Children"
|
||||||
|
|
||||||
|
-- Industrial workers
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T2520336817"] = "Industrial workers"
|
||||||
|
|
||||||
|
-- Students
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T2905889225"] = "Students"
|
||||||
|
|
||||||
|
-- Scientists
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T332785734"] = "Scientists"
|
||||||
|
|
||||||
|
-- Adults
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3335941460"] = "Adults"
|
||||||
|
|
||||||
|
-- No target group
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3644477204"] = "No target group"
|
||||||
|
|
||||||
|
-- Business professionals
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3670621687"] = "Business professionals"
|
||||||
|
|
||||||
|
-- Teenagers
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3696960735"] = "Teenagers"
|
||||||
|
|
||||||
|
-- Unknown target group
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T384321997"] = "Unknown target group"
|
||||||
|
|
||||||
|
-- Office workers
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T3873911022"] = "Office workers"
|
||||||
|
|
||||||
|
-- Teachers
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T48460338"] = "Teachers"
|
||||||
|
|
||||||
|
-- Everyone
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T622959000"] = "Everyone"
|
||||||
|
|
||||||
|
-- Software developers
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTARGETGROUPEXTENSIONS::T831424531"] = "Software developers"
|
||||||
|
|
||||||
|
-- Theme plugin
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T1682350097"] = "Theme plugin"
|
||||||
|
|
||||||
|
-- Unknown plugin type
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T2313808600"] = "Unknown plugin type"
|
||||||
|
|
||||||
|
-- Assistant plugin
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T2321563994"] = "Assistant plugin"
|
||||||
|
|
||||||
|
-- Language plugin
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T2370593926"] = "Language plugin"
|
||||||
|
|
||||||
|
-- Configuration plugin
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::PLUGINSYSTEM::PLUGINTYPEEXTENSIONS::T3353383632"] = "Configuration plugin"
|
||||||
|
|
||||||
|
-- Standard augmentation process
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::AUGMENTATIONPROCESSES::AUGMENTATIONONE::T1072508429"] = "Standard augmentation process"
|
||||||
|
|
||||||
|
-- This is the standard augmentation process, which uses all retrieval contexts to augment the chat thread.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::AUGMENTATIONPROCESSES::AUGMENTATIONONE::T3240406069"] = "This is the standard augmentation process, which uses all retrieval contexts to augment the chat thread."
|
||||||
|
|
||||||
|
-- Automatic AI data source selection with heuristik source reduction
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::DATASOURCESELECTIONPROCESSES::AGENTICSRCSELWITHDYNHEUR::T2339257645"] = "Automatic AI data source selection with heuristik source reduction"
|
||||||
|
|
||||||
|
-- Automatically selects the appropriate data sources based on the last prompt. Applies a heuristic reduction at the end to reduce the number of data sources.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::DATASOURCESELECTIONPROCESSES::AGENTICSRCSELWITHDYNHEUR::T648937779"] = "Automatically selects the appropriate data sources based on the last prompt. Applies a heuristic reduction at the end to reduce the number of data sources."
|
||||||
|
|
||||||
|
-- This RAG process filters data sources, automatically selects appropriate sources, optionally allows manual source selection, retrieves data, and automatically validates the retrieval context.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::RAGPROCESSES::AISRCSELWITHRETCTXVAL::T3047786484"] = "This RAG process filters data sources, automatically selects appropriate sources, optionally allows manual source selection, retrieves data, and automatically validates the retrieval context."
|
||||||
|
|
||||||
|
-- AI source selection with AI retrieval context validation
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::RAG::RAGPROCESSES::AISRCSELWITHRETCTXVAL::T3775725978"] = "AI source selection with AI retrieval context validation"
|
||||||
|
|
||||||
|
-- PDF Files
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T3108466742"] = "PDF Files"
|
||||||
|
|
||||||
|
-- All Image Files
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T4086723714"] = "All Image Files"
|
||||||
|
|
||||||
|
-- Text Files
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T639143005"] = "Text Files"
|
||||||
|
|
||||||
|
-- All Office Files
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::RUST::FILETYPEFILTER::T709668067"] = "All Office Files"
|
||||||
|
|
||||||
|
-- Failed to delete the API key due to an API issue.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::APIKEYS::T3658273365"] = "Failed to delete the API key due to an API issue."
|
||||||
|
|
||||||
|
-- Failed to get the API key due to an API issue.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::APIKEYS::T3875720022"] = "Failed to get the API key due to an API issue."
|
||||||
|
|
||||||
|
-- Successfully copied the text to your clipboard
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::CLIPBOARD::T3351807428"] = "Successfully copied the text to your clipboard"
|
||||||
|
|
||||||
|
-- Failed to copy the text to your clipboard.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::CLIPBOARD::T3724548108"] = "Failed to copy the text to your clipboard."
|
||||||
|
|
||||||
|
-- Failed to delete the secret data due to an API issue.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::SECRETS::T2303057928"] = "Failed to delete the secret data due to an API issue."
|
||||||
|
|
||||||
|
-- Failed to get the secret data due to an API issue.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::RUSTSERVICE::SECRETS::T4007657575"] = "Failed to get the secret data due to an API issue."
|
||||||
|
|
||||||
|
-- No update found.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::SERVICES::UPDATESERVICE::T1015418291"] = "No update found."
|
||||||
|
|
||||||
|
-- The hostname is not a valid HTTP(S) URL.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1013354736"] = "The hostname is not a valid HTTP(S) URL."
|
||||||
|
|
||||||
|
-- The connection test failed. Please check the connection settings.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T132896331"] = "The connection test failed. Please check the connection settings."
|
||||||
|
|
||||||
|
-- Please select an embedding provider.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1461238528"] = "Please select an embedding provider."
|
||||||
|
|
||||||
|
-- The file does not exist. Please select a valid file.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T148464502"] = "The file does not exist. Please select a valid file."
|
||||||
|
|
||||||
|
-- Please select one retrieval process.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1515898234"] = "Please select one retrieval process."
|
||||||
|
|
||||||
|
-- This data source can only be used with a self-hosted LLM provider. Please change the security policy.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1728967730"] = "This data source can only be used with a self-hosted LLM provider. Please change the security policy."
|
||||||
|
|
||||||
|
-- The username must not be empty.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1829419906"] = "The username must not be empty."
|
||||||
|
|
||||||
|
-- The hostname must start with either http:// or https://
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T193387467"] = "The hostname must start with either http:// or https://"
|
||||||
|
|
||||||
|
-- Please enter a hostname, e.g., http://localhost
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T1990396672"] = "Please enter a hostname, e.g., http://localhost"
|
||||||
|
|
||||||
|
-- Please select one valid authentication method.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T2025964684"] = "Please select one valid authentication method."
|
||||||
|
|
||||||
|
-- The name must not exceed 40 characters.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T2160507967"] = "The name must not exceed 40 characters."
|
||||||
|
|
||||||
|
-- Please select your security policy.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T2250909198"] = "Please select your security policy."
|
||||||
|
|
||||||
|
-- Please test the connection before saving.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T285470497"] = "Please test the connection before saving."
|
||||||
|
|
||||||
|
-- Please enter your secure access token.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3086932434"] = "Please enter your secure access token."
|
||||||
|
|
||||||
|
-- The path does not exist. Please select a valid directory.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3146272446"] = "The path does not exist. Please select a valid directory."
|
||||||
|
|
||||||
|
-- The path must not be empty. Please select a directory.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3202118305"] = "The path must not be empty. Please select a directory."
|
||||||
|
|
||||||
|
-- The name must not be empty.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3243861903"] = "The name must not be empty."
|
||||||
|
|
||||||
|
-- Please enter your password.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3888492477"] = "Please enter your password."
|
||||||
|
|
||||||
|
-- The port must be between 1 and 65535.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T3965971107"] = "The port must be between 1 and 65535."
|
||||||
|
|
||||||
|
-- The name is already used by another data source. Please choose a different name.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T4001510395"] = "The name is already used by another data source. Please choose a different name."
|
||||||
|
|
||||||
|
-- Please acknowledge that you are aware of the cloud embedding implications.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T490875633"] = "Please acknowledge that you are aware of the cloud embedding implications."
|
||||||
|
|
||||||
|
-- The file path must not be empty. Please select a file.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T878007824"] = "The file path must not be empty. Please select a file."
|
||||||
|
|
||||||
|
-- Please enter the secret necessary for authentication.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::DATASOURCEVALIDATION::T968385876"] = "Please enter the secret necessary for authentication."
|
||||||
|
|
||||||
|
-- The hostname is not a valid HTTP(S) URL.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1013354736"] = "The hostname is not a valid HTTP(S) URL."
|
||||||
|
|
||||||
|
-- The instance name must not exceed 40 characters.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1117188308"] = "The instance name must not exceed 40 characters."
|
||||||
|
|
||||||
|
-- Please enter a hostname, e.g., http://localhost:1234
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T125334762"] = "Please enter a hostname, e.g., http://localhost:1234"
|
||||||
|
|
||||||
|
-- The instance name must be unique; the chosen name is already in use.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1301966140"] = "The instance name must be unique; the chosen name is already in use."
|
||||||
|
|
||||||
|
-- Please select a provider.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T1809312323"] = "Please select a provider."
|
||||||
|
|
||||||
|
-- The hostname must start with either http:// or https://
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T193387467"] = "The hostname must start with either http:// or https://"
|
||||||
|
|
||||||
|
-- Please select a host.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T2257097222"] = "Please select a host."
|
||||||
|
|
||||||
|
-- Please enter an API key.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T3550629491"] = "Please enter an API key."
|
||||||
|
|
||||||
|
-- Please enter an instance name.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T3999823516"] = "Please enter an instance name."
|
||||||
|
|
||||||
|
-- Please select an Hugging Face inference provider.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T497939286"] = "Please select an Hugging Face inference provider."
|
||||||
|
|
||||||
|
-- Please select a model.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::VALIDATION::PROVIDERVALIDATION::T818893091"] = "Please select a model."
|
||||||
|
|
||||||
|
-- Delete Chat
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::TOOLS::WORKSPACEBEHAVIOUR::T2244038752"] = "Delete Chat"
|
||||||
|
@ -2,12 +2,14 @@ namespace AIStudio.Assistants.RewriteImprove;
|
|||||||
|
|
||||||
public static class SentenceStructureExtensions
|
public static class SentenceStructureExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => Tools.PluginSystem.I18N.I.T(fallbackEN, typeof(SentenceStructureExtensions).Namespace, nameof(SentenceStructureExtensions));
|
||||||
|
|
||||||
public static string Name(this SentenceStructure sentenceStructure) => sentenceStructure switch
|
public static string Name(this SentenceStructure sentenceStructure) => sentenceStructure switch
|
||||||
{
|
{
|
||||||
SentenceStructure.ACTIVE => "Active voice",
|
SentenceStructure.ACTIVE => TB("Active voice"),
|
||||||
SentenceStructure.PASSIVE => "Passive voice",
|
SentenceStructure.PASSIVE => TB("Passive voice"),
|
||||||
|
|
||||||
_ => "Not Specified",
|
_ => TB("Not Specified"),
|
||||||
};
|
};
|
||||||
|
|
||||||
public static string Prompt(this SentenceStructure sentenceStructure) => sentenceStructure switch
|
public static string Prompt(this SentenceStructure sentenceStructure) => sentenceStructure switch
|
||||||
|
@ -2,20 +2,22 @@ namespace AIStudio.Assistants.RewriteImprove;
|
|||||||
|
|
||||||
public static class WritingStylesExtensions
|
public static class WritingStylesExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => Tools.PluginSystem.I18N.I.T(fallbackEN, typeof(WritingStylesExtensions).Namespace, nameof(WritingStylesExtensions));
|
||||||
|
|
||||||
public static string Name(this WritingStyles style) => style switch
|
public static string Name(this WritingStyles style) => style switch
|
||||||
{
|
{
|
||||||
WritingStyles.EVERYDAY => "Everyday (personal texts, social media)",
|
WritingStyles.EVERYDAY => TB("Everyday (personal texts, social media)"),
|
||||||
WritingStyles.BUSINESS => "Business (business emails, reports, presentations)",
|
WritingStyles.BUSINESS => TB("Business (business emails, reports, presentations)"),
|
||||||
WritingStyles.SCIENTIFIC => "Scientific (scientific papers, research reports)",
|
WritingStyles.SCIENTIFIC => TB("Scientific (scientific papers, research reports)"),
|
||||||
WritingStyles.JOURNALISTIC => "Journalistic (magazines, newspapers, news)",
|
WritingStyles.JOURNALISTIC => TB("Journalistic (magazines, newspapers, news)"),
|
||||||
WritingStyles.LITERARY => "Literary (fiction, poetry)",
|
WritingStyles.LITERARY => TB("Literary (fiction, poetry)"),
|
||||||
WritingStyles.TECHNICAL => "Technical (manuals, documentation)",
|
WritingStyles.TECHNICAL => TB("Technical (manuals, documentation)"),
|
||||||
WritingStyles.MARKETING => "Marketing (advertisements, sales texts)",
|
WritingStyles.MARKETING => TB("Marketing (advertisements, sales texts)"),
|
||||||
WritingStyles.ACADEMIC => "Academic (essays, seminar papers)",
|
WritingStyles.ACADEMIC => TB("Academic (essays, seminar papers)"),
|
||||||
WritingStyles.LEGAL => "Legal (legal texts, contracts)",
|
WritingStyles.LEGAL => TB("Legal (legal texts, contracts)"),
|
||||||
WritingStyles.CHANGELOG => "Changelog (release notes, version history)",
|
WritingStyles.CHANGELOG => TB("Changelog (release notes, version history)"),
|
||||||
|
|
||||||
_ => "Not specified",
|
_ => TB("Not specified"),
|
||||||
};
|
};
|
||||||
|
|
||||||
public static string Prompt(this WritingStyles style) => style switch
|
public static string Prompt(this WritingStyles style) => style switch
|
||||||
|
@ -2,18 +2,20 @@ namespace AIStudio.Assistants.TextSummarizer;
|
|||||||
|
|
||||||
public static class ComplexityExtensions
|
public static class ComplexityExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => Tools.PluginSystem.I18N.I.T(fallbackEN, typeof(ComplexityExtensions).Namespace, nameof(ComplexityExtensions));
|
||||||
|
|
||||||
public static string Name(this Complexity complexity) => complexity switch
|
public static string Name(this Complexity complexity) => complexity switch
|
||||||
{
|
{
|
||||||
Complexity.NO_CHANGE => "No change in complexity",
|
Complexity.NO_CHANGE => TB("No change in complexity"),
|
||||||
|
|
||||||
Complexity.SIMPLE_LANGUAGE => "Simple language, e.g., for children",
|
Complexity.SIMPLE_LANGUAGE => TB("Simple language, e.g., for children"),
|
||||||
Complexity.TEEN_LANGUAGE => "Teen language, e.g., for teenagers",
|
Complexity.TEEN_LANGUAGE => TB("Teen language, e.g., for teenagers"),
|
||||||
Complexity.EVERYDAY_LANGUAGE => "Everyday language, e.g., for adults",
|
Complexity.EVERYDAY_LANGUAGE => TB("Everyday language, e.g., for adults"),
|
||||||
Complexity.POPULAR_SCIENCE_LANGUAGE => "Popular science language, e.g., for people interested in science",
|
Complexity.POPULAR_SCIENCE_LANGUAGE => TB("Popular science language, e.g., for people interested in science"),
|
||||||
Complexity.SCIENTIFIC_LANGUAGE_FIELD_EXPERTS => "Scientific language for experts in this field",
|
Complexity.SCIENTIFIC_LANGUAGE_FIELD_EXPERTS => TB("Scientific language for experts in this field"),
|
||||||
Complexity.SCIENTIFIC_LANGUAGE_OTHER_EXPERTS => "Scientific language for experts from other fields (interdisciplinary)",
|
Complexity.SCIENTIFIC_LANGUAGE_OTHER_EXPERTS => TB("Scientific language for experts from other fields (interdisciplinary)"),
|
||||||
|
|
||||||
_ => "No change in complexity",
|
_ => TB("No change in complexity"),
|
||||||
};
|
};
|
||||||
|
|
||||||
public static string Prompt(this Complexity complexity, string expertInField) => complexity switch
|
public static string Prompt(this Complexity complexity, string expertInField) => complexity switch
|
||||||
|
@ -79,7 +79,7 @@
|
|||||||
@* ReSharper restore Asp.Entity *@
|
@* ReSharper restore Asp.Entity *@
|
||||||
}
|
}
|
||||||
|
|
||||||
<MudField FullWidth="true" Label="Model selection" Variant="Variant.Outlined" Class="mb-3">
|
<MudField FullWidth="true" Label="@T("Model selection")" Variant="Variant.Outlined" Class="mb-3">
|
||||||
<MudStack Row="@true" AlignItems="AlignItems.Center" StretchItems="StretchItems.End">
|
<MudStack Row="@true" AlignItems="AlignItems.Center" StretchItems="StretchItems.End">
|
||||||
@if (this.DataLLMProvider.IsLLMModelProvidedManually())
|
@if (this.DataLLMProvider.IsLLMModelProvidedManually())
|
||||||
{
|
{
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -142,7 +142,6 @@ public sealed class ProviderAlibabaCloud(ILogger logger) : BaseProvider("https:/
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
private async Task<IEnumerable<Model>> LoadModels(string[] prefixes, CancellationToken token, string? apiKeyProvisional = null)
|
private async Task<IEnumerable<Model>> LoadModels(string[] prefixes, CancellationToken token, string? apiKeyProvisional = null)
|
||||||
{
|
{
|
||||||
var secretKey = apiKeyProvisional switch
|
var secretKey = apiKeyProvisional switch
|
||||||
|
@ -4,6 +4,7 @@ using System.Text.Json;
|
|||||||
|
|
||||||
using AIStudio.Chat;
|
using AIStudio.Chat;
|
||||||
using AIStudio.Settings;
|
using AIStudio.Settings;
|
||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
using AIStudio.Tools.Services;
|
using AIStudio.Tools.Services;
|
||||||
|
|
||||||
namespace AIStudio.Provider;
|
namespace AIStudio.Provider;
|
||||||
@ -13,6 +14,8 @@ namespace AIStudio.Provider;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class BaseProvider : IProvider, ISecretId
|
public abstract class BaseProvider : IProvider, ISecretId
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(BaseProvider).Namespace, nameof(BaseProvider));
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The HTTP client to use it for all requests.
|
/// The HTTP client to use it for all requests.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -119,7 +122,7 @@ public abstract class BaseProvider : IProvider, ISecretId
|
|||||||
|
|
||||||
if (nextResponse.StatusCode is HttpStatusCode.Forbidden)
|
if (nextResponse.StatusCode is HttpStatusCode.Forbidden)
|
||||||
{
|
{
|
||||||
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Block, $"Tried to communicate with the LLM provider '{this.InstanceName}'. You might not be able to use this provider from your location. The provider message is: '{nextResponse.ReasonPhrase}'"));
|
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Block, string.Format(TB("Tried to communicate with the LLM provider '{0}'. You might not be able to use this provider from your location. The provider message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase)));
|
||||||
this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}').");
|
this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}').");
|
||||||
errorMessage = nextResponse.ReasonPhrase;
|
errorMessage = nextResponse.ReasonPhrase;
|
||||||
break;
|
break;
|
||||||
@ -127,7 +130,7 @@ public abstract class BaseProvider : IProvider, ISecretId
|
|||||||
|
|
||||||
if(nextResponse.StatusCode is HttpStatusCode.BadRequest)
|
if(nextResponse.StatusCode is HttpStatusCode.BadRequest)
|
||||||
{
|
{
|
||||||
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, $"Tried to communicate with the LLM provider '{this.InstanceName}'. The required message format might be changed. The provider message is: '{nextResponse.ReasonPhrase}'"));
|
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, string.Format(TB("Tried to communicate with the LLM provider '{0}'. The required message format might be changed. The provider message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase)));
|
||||||
this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}').");
|
this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}').");
|
||||||
errorMessage = nextResponse.ReasonPhrase;
|
errorMessage = nextResponse.ReasonPhrase;
|
||||||
break;
|
break;
|
||||||
@ -135,7 +138,7 @@ public abstract class BaseProvider : IProvider, ISecretId
|
|||||||
|
|
||||||
if(nextResponse.StatusCode is HttpStatusCode.NotFound)
|
if(nextResponse.StatusCode is HttpStatusCode.NotFound)
|
||||||
{
|
{
|
||||||
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, $"Tried to communicate with the LLM provider '{this.InstanceName}'. Something was not found. The provider message is: '{nextResponse.ReasonPhrase}'"));
|
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, string.Format(TB("Tried to communicate with the LLM provider '{0}'. Something was not found. The provider message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase)));
|
||||||
this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}').");
|
this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}').");
|
||||||
errorMessage = nextResponse.ReasonPhrase;
|
errorMessage = nextResponse.ReasonPhrase;
|
||||||
break;
|
break;
|
||||||
@ -143,7 +146,7 @@ public abstract class BaseProvider : IProvider, ISecretId
|
|||||||
|
|
||||||
if(nextResponse.StatusCode is HttpStatusCode.Unauthorized)
|
if(nextResponse.StatusCode is HttpStatusCode.Unauthorized)
|
||||||
{
|
{
|
||||||
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Key, $"Tried to communicate with the LLM provider '{this.InstanceName}'. The API key might be invalid. The provider message is: '{nextResponse.ReasonPhrase}'"));
|
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Key, string.Format(TB("Tried to communicate with the LLM provider '{0}'. The API key might be invalid. The provider message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase)));
|
||||||
this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}').");
|
this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}').");
|
||||||
errorMessage = nextResponse.ReasonPhrase;
|
errorMessage = nextResponse.ReasonPhrase;
|
||||||
break;
|
break;
|
||||||
@ -151,7 +154,7 @@ public abstract class BaseProvider : IProvider, ISecretId
|
|||||||
|
|
||||||
if(nextResponse.StatusCode is HttpStatusCode.InternalServerError)
|
if(nextResponse.StatusCode is HttpStatusCode.InternalServerError)
|
||||||
{
|
{
|
||||||
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, $"Tried to communicate with the LLM provider '{this.InstanceName}'. The server might be down or having issues. The provider message is: '{nextResponse.ReasonPhrase}'"));
|
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, string.Format(TB("Tried to communicate with the LLM provider '{0}'. The server might be down or having issues. The provider message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase)));
|
||||||
this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}').");
|
this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}').");
|
||||||
errorMessage = nextResponse.ReasonPhrase;
|
errorMessage = nextResponse.ReasonPhrase;
|
||||||
break;
|
break;
|
||||||
@ -159,7 +162,7 @@ public abstract class BaseProvider : IProvider, ISecretId
|
|||||||
|
|
||||||
if(nextResponse.StatusCode is HttpStatusCode.ServiceUnavailable)
|
if(nextResponse.StatusCode is HttpStatusCode.ServiceUnavailable)
|
||||||
{
|
{
|
||||||
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, $"Tried to communicate with the LLM provider '{this.InstanceName}'. The provider is overloaded. The message is: '{nextResponse.ReasonPhrase}'"));
|
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, string.Format(TB("Tried to communicate with the LLM provider '{0}'. The provider is overloaded. The message is: '{1}'"), this.InstanceName, nextResponse.ReasonPhrase)));
|
||||||
this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}').");
|
this.logger.LogError($"Failed request with status code {nextResponse.StatusCode} (message = '{nextResponse.ReasonPhrase}').");
|
||||||
errorMessage = nextResponse.ReasonPhrase;
|
errorMessage = nextResponse.ReasonPhrase;
|
||||||
break;
|
break;
|
||||||
@ -176,7 +179,7 @@ public abstract class BaseProvider : IProvider, ISecretId
|
|||||||
|
|
||||||
if(retry >= MAX_RETRIES || !string.IsNullOrWhiteSpace(errorMessage))
|
if(retry >= MAX_RETRIES || !string.IsNullOrWhiteSpace(errorMessage))
|
||||||
{
|
{
|
||||||
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, $"Tried to communicate with the LLM provider '{this.InstanceName}'. Even after {MAX_RETRIES} retries, there were some problems with the request. The provider message is: '{errorMessage}'"));
|
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, string.Format(TB("Tried to communicate with the LLM provider '{0}'. Even after {1} retries, there were some problems with the request. The provider message is: '{2}'"), this.InstanceName, MAX_RETRIES, errorMessage)));
|
||||||
return new HttpRateLimitedStreamResult(false, true, errorMessage ?? $"Failed after {MAX_RETRIES} retries; no provider message available", response);
|
return new HttpRateLimitedStreamResult(false, true, errorMessage ?? $"Failed after {MAX_RETRIES} retries; no provider message available", response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,7 +207,7 @@ public abstract class BaseProvider : IProvider, ISecretId
|
|||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Stream, $"Tried to communicate with the LLM provider '{this.InstanceName}'. There were some problems with the request. The provider message is: '{e.Message}'"));
|
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Stream, string.Format(TB("Tried to communicate with the LLM provider '{0}'. There were some problems with the request. The provider message is: '{1}'"), this.InstanceName, e.Message)));
|
||||||
this.logger.LogError($"Failed to stream chat completion from {providerName} '{this.InstanceName}': {e.Message}");
|
this.logger.LogError($"Failed to stream chat completion from {providerName} '{this.InstanceName}': {e.Message}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -221,7 +224,7 @@ public abstract class BaseProvider : IProvider, ISecretId
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Stream, $"Tried to stream the LLM provider '{this.InstanceName}' answer. There were some problems with the stream. The message is: '{e.Message}'"));
|
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Stream, string.Format(TB("Tried to stream the LLM provider '{0}' answer. There were some problems with the stream. The message is: '{1}'"), this.InstanceName, e.Message)));
|
||||||
this.logger.LogWarning($"Failed to read the end-of-stream state from {providerName} '{this.InstanceName}': {e.Message}");
|
this.logger.LogWarning($"Failed to read the end-of-stream state from {providerName} '{this.InstanceName}': {e.Message}");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -242,7 +245,7 @@ public abstract class BaseProvider : IProvider, ISecretId
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Stream, $"Tried to stream the LLM provider '{this.InstanceName}' answer. Was not able to read the stream. The message is: '{e.Message}'"));
|
await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.Stream, string.Format(TB("Tried to stream the LLM provider '{0}' answer. Was not able to read the stream. The message is: '{1}'"), this.InstanceName, e.Message)));
|
||||||
this.logger.LogError($"Failed to read the stream from {providerName} '{this.InstanceName}': {e.Message}");
|
this.logger.LogError($"Failed to read the stream from {providerName} '{this.InstanceName}': {e.Message}");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
using AIStudio.Settings;
|
using AIStudio.Settings;
|
||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Provider;
|
namespace AIStudio.Provider;
|
||||||
|
|
||||||
public sealed record Confidence
|
public sealed record Confidence
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(Confidence).Namespace, nameof(Confidence));
|
||||||
|
|
||||||
public ConfidenceLevel Level { get; private init; } = ConfidenceLevel.UNKNOWN;
|
public ConfidenceLevel Level { get; private init; } = ConfidenceLevel.UNKNOWN;
|
||||||
|
|
||||||
public string Region { get; private init; } = string.Empty;
|
public string Region { get; private init; } = string.Empty;
|
||||||
@ -29,42 +32,42 @@ public sealed record Confidence
|
|||||||
public static readonly Confidence NONE = new()
|
public static readonly Confidence NONE = new()
|
||||||
{
|
{
|
||||||
Level = ConfidenceLevel.NONE,
|
Level = ConfidenceLevel.NONE,
|
||||||
Description = "No provider selected. Please select a provider to get see its confidence level.",
|
Description = TB("No provider selected. Please select a provider to get see its confidence level."),
|
||||||
};
|
};
|
||||||
|
|
||||||
public static readonly Confidence USA_HUB = new()
|
public static readonly Confidence USA_HUB = new()
|
||||||
{
|
{
|
||||||
Level = ConfidenceLevel.UNKNOWN,
|
Level = ConfidenceLevel.UNKNOWN,
|
||||||
Description = "The provider operates its service from the USA and is subject to **U.S. jurisdiction**. In case of suspicion, authorities in the USA can access your data. Please inform yourself about the use of your data. We do not know if your data is safe.",
|
Description = TB("The provider operates its service from the USA and is subject to **U.S. jurisdiction**. In case of suspicion, authorities in the USA can access your data. Please inform yourself about the use of your data. We do not know if your data is safe."),
|
||||||
};
|
};
|
||||||
|
|
||||||
public static readonly Confidence UNKNOWN = new()
|
public static readonly Confidence UNKNOWN = new()
|
||||||
{
|
{
|
||||||
Level = ConfidenceLevel.UNKNOWN,
|
Level = ConfidenceLevel.UNKNOWN,
|
||||||
Description = "The trust level of this provider **has not yet** been thoroughly **investigated and evaluated**. We do not know if your data is safe.",
|
Description = TB("The trust level of this provider **has not yet** been thoroughly **investigated and evaluated**. We do not know if your data is safe."),
|
||||||
};
|
};
|
||||||
|
|
||||||
public static readonly Confidence USA_NO_TRAINING = new()
|
public static readonly Confidence USA_NO_TRAINING = new()
|
||||||
{
|
{
|
||||||
Level = ConfidenceLevel.MODERATE,
|
Level = ConfidenceLevel.MODERATE,
|
||||||
Description = "The provider operates its service from the USA and is subject to **US jurisdiction**. In case of suspicion, authorities in the USA can access your data. However, **your data is not used for training** purposes.",
|
Description = TB("The provider operates its service from the USA and is subject to **US jurisdiction**. In case of suspicion, authorities in the USA can access your data. However, **your data is not used for training** purposes."),
|
||||||
};
|
};
|
||||||
|
|
||||||
public static readonly Confidence CHINA_NO_TRAINING = new()
|
public static readonly Confidence CHINA_NO_TRAINING = new()
|
||||||
{
|
{
|
||||||
Level = ConfidenceLevel.MODERATE,
|
Level = ConfidenceLevel.MODERATE,
|
||||||
Description = "The provider operates its service from China. In case of suspicion, authorities in the respective countries of operation may access your data. However, **your data is not used for training** purposes.",
|
Description = TB("The provider operates its service from China. In case of suspicion, authorities in the respective countries of operation may access your data. However, **your data is not used for training** purposes."),
|
||||||
};
|
};
|
||||||
|
|
||||||
public static readonly Confidence GDPR_NO_TRAINING = new()
|
public static readonly Confidence GDPR_NO_TRAINING = new()
|
||||||
{
|
{
|
||||||
Level = ConfidenceLevel.MEDIUM,
|
Level = ConfidenceLevel.MEDIUM,
|
||||||
Description = "The provider is located in the EU and is subject to the **GDPR** (General Data Protection Regulation). Additionally, the provider states that **your data is not used for training**.",
|
Description = TB("The provider is located in the EU and is subject to the **GDPR** (General Data Protection Regulation). Additionally, the provider states that **your data is not used for training**."),
|
||||||
};
|
};
|
||||||
|
|
||||||
public static readonly Confidence SELF_HOSTED = new()
|
public static readonly Confidence SELF_HOSTED = new()
|
||||||
{
|
{
|
||||||
Level = ConfidenceLevel.HIGH,
|
Level = ConfidenceLevel.HIGH,
|
||||||
Description = "You or your organization operate the LLM locally or within your trusted network. In terms of data processing and security, this is the best possible way.",
|
Description = TB("You or your organization operate the LLM locally or within your trusted network. In terms of data processing and security, this is the best possible way."),
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -1,21 +1,24 @@
|
|||||||
using AIStudio.Settings;
|
using AIStudio.Settings;
|
||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Provider;
|
namespace AIStudio.Provider;
|
||||||
|
|
||||||
public static class ConfidenceLevelExtensions
|
public static class ConfidenceLevelExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ConfidenceLevelExtensions).Namespace, nameof(ConfidenceLevelExtensions));
|
||||||
|
|
||||||
public static string GetName(this ConfidenceLevel level) => level switch
|
public static string GetName(this ConfidenceLevel level) => level switch
|
||||||
{
|
{
|
||||||
ConfidenceLevel.NONE => "No provider selected",
|
ConfidenceLevel.NONE => TB("No provider selected"),
|
||||||
|
|
||||||
ConfidenceLevel.UNTRUSTED => "Untrusted",
|
ConfidenceLevel.UNTRUSTED => TB("Untrusted"),
|
||||||
ConfidenceLevel.VERY_LOW => "Very Low",
|
ConfidenceLevel.VERY_LOW => TB("Very Low"),
|
||||||
ConfidenceLevel.LOW => "Low",
|
ConfidenceLevel.LOW => TB("Low"),
|
||||||
ConfidenceLevel.MODERATE => "Moderate",
|
ConfidenceLevel.MODERATE => TB("Moderate"),
|
||||||
ConfidenceLevel.MEDIUM => "Medium",
|
ConfidenceLevel.MEDIUM => TB("Medium"),
|
||||||
ConfidenceLevel.HIGH => "High",
|
ConfidenceLevel.HIGH => TB("High"),
|
||||||
|
|
||||||
_ => "Unknown confidence level",
|
_ => TB("Unknown confidence level"),
|
||||||
};
|
};
|
||||||
|
|
||||||
public static string GetColor(this ConfidenceLevel level, SettingsManager settingsManager) => (level, settingsManager.IsDarkMode) switch
|
public static string GetColor(this ConfidenceLevel level, SettingsManager settingsManager) => (level, settingsManager.IsDarkMode) switch
|
||||||
|
@ -12,6 +12,7 @@ using AIStudio.Provider.OpenAI;
|
|||||||
using AIStudio.Provider.SelfHosted;
|
using AIStudio.Provider.SelfHosted;
|
||||||
using AIStudio.Provider.X;
|
using AIStudio.Provider.X;
|
||||||
using AIStudio.Settings;
|
using AIStudio.Settings;
|
||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
using Host = AIStudio.Provider.SelfHosted.Host;
|
using Host = AIStudio.Provider.SelfHosted.Host;
|
||||||
|
|
||||||
@ -19,6 +20,8 @@ namespace AIStudio.Provider;
|
|||||||
|
|
||||||
public static class LLMProvidersExtensions
|
public static class LLMProvidersExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(LLMProvidersExtensions).Namespace, nameof(LLMProvidersExtensions));
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns the human-readable name of the provider.
|
/// Returns the human-readable name of the provider.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -26,7 +29,7 @@ public static class LLMProvidersExtensions
|
|||||||
/// <returns>The human-readable name of the provider.</returns>
|
/// <returns>The human-readable name of the provider.</returns>
|
||||||
public static string ToName(this LLMProviders llmProvider) => llmProvider switch
|
public static string ToName(this LLMProviders llmProvider) => llmProvider switch
|
||||||
{
|
{
|
||||||
LLMProviders.NONE => "No provider selected",
|
LLMProviders.NONE => TB("No provider selected"),
|
||||||
|
|
||||||
LLMProviders.OPEN_AI => "OpenAI",
|
LLMProviders.OPEN_AI => "OpenAI",
|
||||||
LLMProviders.ANTHROPIC => "Anthropic",
|
LLMProviders.ANTHROPIC => "Anthropic",
|
||||||
@ -40,12 +43,12 @@ public static class LLMProvidersExtensions
|
|||||||
LLMProviders.FIREWORKS => "Fireworks.ai",
|
LLMProviders.FIREWORKS => "Fireworks.ai",
|
||||||
LLMProviders.HUGGINGFACE => "Hugging Face",
|
LLMProviders.HUGGINGFACE => "Hugging Face",
|
||||||
|
|
||||||
LLMProviders.SELF_HOSTED => "Self-hosted",
|
LLMProviders.SELF_HOSTED => TB("Self-hosted"),
|
||||||
|
|
||||||
LLMProviders.HELMHOLTZ => "Helmholtz Blablador",
|
LLMProviders.HELMHOLTZ => "Helmholtz Blablador",
|
||||||
LLMProviders.GWDG => "GWDG SAIA",
|
LLMProviders.GWDG => "GWDG SAIA",
|
||||||
|
|
||||||
_ => "Unknown",
|
_ => TB("Unknown"),
|
||||||
};
|
};
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -26,6 +26,8 @@ public readonly record struct ConfigurationSelectData<T>(string Name, T Value);
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static class ConfigurationSelectDataFactory
|
public static class ConfigurationSelectDataFactory
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ConfigurationSelectDataFactory).Namespace, nameof(ConfigurationSelectDataFactory));
|
||||||
|
|
||||||
public static IEnumerable<ConfigurationSelectData<LangBehavior>> GetLangBehaviorData()
|
public static IEnumerable<ConfigurationSelectData<LangBehavior>> GetLangBehaviorData()
|
||||||
{
|
{
|
||||||
foreach (var behavior in Enum.GetValues<LangBehavior>())
|
foreach (var behavior in Enum.GetValues<LangBehavior>())
|
||||||
@ -43,65 +45,65 @@ public static class ConfigurationSelectDataFactory
|
|||||||
|
|
||||||
public static IEnumerable<ConfigurationSelectData<LoadingChatProviderBehavior>> GetLoadingChatProviderBehavior()
|
public static IEnumerable<ConfigurationSelectData<LoadingChatProviderBehavior>> GetLoadingChatProviderBehavior()
|
||||||
{
|
{
|
||||||
yield return new("When possible, use the LLM provider which was used for each chat in the first place", LoadingChatProviderBehavior.USE_CHAT_PROVIDER_IF_AVAILABLE);
|
yield return new(TB("When possible, use the LLM provider which was used for each chat in the first place"), LoadingChatProviderBehavior.USE_CHAT_PROVIDER_IF_AVAILABLE);
|
||||||
yield return new("Use the latest LLM provider, which was used before; use the default chat provider initially", LoadingChatProviderBehavior.ALWAYS_USE_LATEST_CHAT_PROVIDER);
|
yield return new(TB("Use the latest LLM provider, which was used before; use the default chat provider initially"), LoadingChatProviderBehavior.ALWAYS_USE_LATEST_CHAT_PROVIDER);
|
||||||
yield return new("Always use the default chat provider when loading chats", LoadingChatProviderBehavior.ALWAYS_USE_DEFAULT_CHAT_PROVIDER);
|
yield return new(TB("Always use the default chat provider when loading chats"), LoadingChatProviderBehavior.ALWAYS_USE_DEFAULT_CHAT_PROVIDER);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<ConfigurationSelectData<AddChatProviderBehavior>> GetAddChatProviderBehavior()
|
public static IEnumerable<ConfigurationSelectData<AddChatProviderBehavior>> GetAddChatProviderBehavior()
|
||||||
{
|
{
|
||||||
yield return new("Use the latest LLM provider, which was used before; use the default chat provider initially", AddChatProviderBehavior.ADDED_CHATS_USE_LATEST_PROVIDER);
|
yield return new(TB("Use the latest LLM provider, which was used before; use the default chat provider initially"), AddChatProviderBehavior.ADDED_CHATS_USE_LATEST_PROVIDER);
|
||||||
yield return new("Always use the default chat provider for new chats", AddChatProviderBehavior.ADDED_CHATS_USE_DEFAULT_PROVIDER);
|
yield return new(TB("Always use the default chat provider for new chats"), AddChatProviderBehavior.ADDED_CHATS_USE_DEFAULT_PROVIDER);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<ConfigurationSelectData<SendBehavior>> GetSendBehaviorData()
|
public static IEnumerable<ConfigurationSelectData<SendBehavior>> GetSendBehaviorData()
|
||||||
{
|
{
|
||||||
yield return new("No key is sending the input", SendBehavior.NO_KEY_IS_SENDING);
|
yield return new(TB("No key is sending the input"), SendBehavior.NO_KEY_IS_SENDING);
|
||||||
yield return new("Modifier key + enter is sending the input", SendBehavior.MODIFER_ENTER_IS_SENDING);
|
yield return new(TB("Modifier key + enter is sending the input"), SendBehavior.MODIFER_ENTER_IS_SENDING);
|
||||||
yield return new("Enter is sending the input", SendBehavior.ENTER_IS_SENDING);
|
yield return new(TB("Enter is sending the input"), SendBehavior.ENTER_IS_SENDING);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<ConfigurationSelectData<UpdateBehavior>> GetUpdateBehaviorData()
|
public static IEnumerable<ConfigurationSelectData<UpdateBehavior>> GetUpdateBehaviorData()
|
||||||
{
|
{
|
||||||
yield return new("No automatic update checks", UpdateBehavior.NO_CHECK);
|
yield return new(TB("No automatic update checks"), UpdateBehavior.NO_CHECK);
|
||||||
yield return new("Once at startup", UpdateBehavior.ONCE_STARTUP);
|
yield return new(TB("Once at startup"), UpdateBehavior.ONCE_STARTUP);
|
||||||
yield return new("Check every hour", UpdateBehavior.HOURLY);
|
yield return new(TB("Check every hour"), UpdateBehavior.HOURLY);
|
||||||
yield return new("Check every day", UpdateBehavior.DAILY);
|
yield return new(TB("Check every day"), UpdateBehavior.DAILY);
|
||||||
yield return new ("Check every week", UpdateBehavior.WEEKLY);
|
yield return new (TB("Check every week"), UpdateBehavior.WEEKLY);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<ConfigurationSelectData<WorkspaceStorageBehavior>> GetWorkspaceStorageBehaviorData()
|
public static IEnumerable<ConfigurationSelectData<WorkspaceStorageBehavior>> GetWorkspaceStorageBehaviorData()
|
||||||
{
|
{
|
||||||
yield return new("Disable workspaces", WorkspaceStorageBehavior.DISABLE_WORKSPACES);
|
yield return new(TB("Disable workspaces"), WorkspaceStorageBehavior.DISABLE_WORKSPACES);
|
||||||
yield return new("Store chats automatically", WorkspaceStorageBehavior.STORE_CHATS_AUTOMATICALLY);
|
yield return new(TB("Store chats automatically"), WorkspaceStorageBehavior.STORE_CHATS_AUTOMATICALLY);
|
||||||
yield return new("Store chats manually", WorkspaceStorageBehavior.STORE_CHATS_MANUALLY);
|
yield return new(TB("Store chats manually"), WorkspaceStorageBehavior.STORE_CHATS_MANUALLY);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<ConfigurationSelectData<WorkspaceStorageTemporaryMaintenancePolicy>> GetWorkspaceStorageTemporaryMaintenancePolicyData()
|
public static IEnumerable<ConfigurationSelectData<WorkspaceStorageTemporaryMaintenancePolicy>> GetWorkspaceStorageTemporaryMaintenancePolicyData()
|
||||||
{
|
{
|
||||||
yield return new("No automatic maintenance for temporary chats", WorkspaceStorageTemporaryMaintenancePolicy.NO_AUTOMATIC_MAINTENANCE);
|
yield return new(TB("No automatic maintenance for disappearing chats; old chats will never be deleted"), WorkspaceStorageTemporaryMaintenancePolicy.NO_AUTOMATIC_MAINTENANCE);
|
||||||
yield return new("Delete temporary chats older than 7 days", WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_7_DAYS);
|
yield return new(TB("Delete disappearing chats older than 7 days"), WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_7_DAYS);
|
||||||
yield return new("Delete temporary chats older than 30 days", WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_30_DAYS);
|
yield return new(TB("Delete disappearing chats older than 30 days"), WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_30_DAYS);
|
||||||
yield return new("Delete temporary chats older than 90 days", WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_90_DAYS);
|
yield return new(TB("Delete disappearing chats older than 90 days"), WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_90_DAYS);
|
||||||
yield return new("Delete temporary chats older than 180 days", WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_180_DAYS);
|
yield return new(TB("Delete disappearing chats older than 180 days"), WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_180_DAYS);
|
||||||
yield return new("Delete temporary chats older than 1 year", WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_365_DAYS);
|
yield return new(TB("Delete disappearing chats older than 1 year"), WorkspaceStorageTemporaryMaintenancePolicy.DELETE_OLDER_THAN_365_DAYS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<ConfigurationSelectData<WorkspaceDisplayBehavior>> GetWorkspaceDisplayBehaviorData()
|
public static IEnumerable<ConfigurationSelectData<WorkspaceDisplayBehavior>> GetWorkspaceDisplayBehaviorData()
|
||||||
{
|
{
|
||||||
yield return new("Toggle the overlay: the chat uses all the space, workspaces are temporarily shown", WorkspaceDisplayBehavior.TOGGLE_OVERLAY);
|
yield return new(TB("Toggle the overlay: the chat uses all the space, workspaces are temporarily shown"), WorkspaceDisplayBehavior.TOGGLE_OVERLAY);
|
||||||
yield return new("Toggle the sidebar: show the workspaces next to the chat when desired", WorkspaceDisplayBehavior.TOGGLE_SIDEBAR);
|
yield return new(TB("Toggle the sidebar: show the workspaces next to the chat when desired"), WorkspaceDisplayBehavior.TOGGLE_SIDEBAR);
|
||||||
yield return new("Sidebar is always visible: show the workspaces next to the chat all the time", WorkspaceDisplayBehavior.SIDEBAR_ALWAYS_VISIBLE);
|
yield return new(TB("Sidebar is always visible: show the workspaces next to the chat all the time"), WorkspaceDisplayBehavior.SIDEBAR_ALWAYS_VISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<ConfigurationSelectData<PreviewVisibility>> GetPreviewVisibility()
|
public static IEnumerable<ConfigurationSelectData<PreviewVisibility>> GetPreviewVisibility()
|
||||||
{
|
{
|
||||||
yield return new("All preview features are hidden", PreviewVisibility.NONE);
|
yield return new(TB("All preview features are hidden"), PreviewVisibility.NONE);
|
||||||
yield return new("Also show features ready for release; these should be stable", PreviewVisibility.RELEASE_CANDIDATE);
|
yield return new(TB("Also show features ready for release; these should be stable"), PreviewVisibility.RELEASE_CANDIDATE);
|
||||||
yield return new("Also show features in beta: these are almost ready for release; expect some bugs", PreviewVisibility.BETA);
|
yield return new(TB("Also show features in beta: these are almost ready for release; expect some bugs"), PreviewVisibility.BETA);
|
||||||
yield return new("Also show features in alpha: these are in development; expect bugs and missing features", PreviewVisibility.ALPHA);
|
yield return new(TB("Also show features in alpha: these are in development; expect bugs and missing features"), PreviewVisibility.ALPHA);
|
||||||
yield return new("Show also prototype features: these are works in progress; expect bugs and missing features", PreviewVisibility.PROTOTYPE);
|
yield return new(TB("Show also prototype features: these are works in progress; expect bugs and missing features"), PreviewVisibility.PROTOTYPE);
|
||||||
yield return new("Show also experimental features: these are experimental; expect bugs, missing features, many changes", PreviewVisibility.EXPERIMENTAL);
|
yield return new(TB("Show also experimental features: these are experimental; expect bugs, missing features, many changes"), PreviewVisibility.EXPERIMENTAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<ConfigurationSelectData<PreviewFeatures>> GetPreviewFeaturesData(SettingsManager settingsManager)
|
public static IEnumerable<ConfigurationSelectData<PreviewFeatures>> GetPreviewFeaturesData(SettingsManager settingsManager)
|
||||||
@ -118,10 +120,10 @@ public static class ConfigurationSelectDataFactory
|
|||||||
|
|
||||||
public static IEnumerable<ConfigurationSelectData<NavBehavior>> GetNavBehaviorData()
|
public static IEnumerable<ConfigurationSelectData<NavBehavior>> GetNavBehaviorData()
|
||||||
{
|
{
|
||||||
yield return new("Navigation expands on mouse hover", NavBehavior.EXPAND_ON_HOVER);
|
yield return new(TB("Navigation expands on mouse hover"), NavBehavior.EXPAND_ON_HOVER);
|
||||||
yield return new("Navigation never expands, but there are tooltips", NavBehavior.NEVER_EXPAND_USE_TOOLTIPS);
|
yield return new(TB("Navigation never expands, but there are tooltips"), NavBehavior.NEVER_EXPAND_USE_TOOLTIPS);
|
||||||
yield return new("Navigation never expands, no tooltips", NavBehavior.NEVER_EXPAND_NO_TOOLTIPS);
|
yield return new(TB("Navigation never expands, no tooltips"), NavBehavior.NEVER_EXPAND_NO_TOOLTIPS);
|
||||||
yield return new("Always expand navigation", NavBehavior.ALWAYS_EXPAND);
|
yield return new(TB("Always expand navigation"), NavBehavior.ALWAYS_EXPAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<ConfigurationSelectData<IconSources>> GetIconSourcesData()
|
public static IEnumerable<ConfigurationSelectData<IconSources>> GetIconSourcesData()
|
||||||
@ -140,7 +142,7 @@ public static class ConfigurationSelectDataFactory
|
|||||||
{
|
{
|
||||||
foreach (var language in Enum.GetValues<CommonLanguages>())
|
foreach (var language in Enum.GetValues<CommonLanguages>())
|
||||||
if(language is CommonLanguages.AS_IS)
|
if(language is CommonLanguages.AS_IS)
|
||||||
yield return new("Not yet specified", language);
|
yield return new(TB("Not yet specified"), language);
|
||||||
else
|
else
|
||||||
yield return new(language.Name(), language);
|
yield return new(language.Name(), language);
|
||||||
}
|
}
|
||||||
@ -149,7 +151,7 @@ public static class ConfigurationSelectDataFactory
|
|||||||
{
|
{
|
||||||
foreach (var language in Enum.GetValues<CommonLanguages>())
|
foreach (var language in Enum.GetValues<CommonLanguages>())
|
||||||
if(language is CommonLanguages.AS_IS)
|
if(language is CommonLanguages.AS_IS)
|
||||||
yield return new("Do not specify the language", language);
|
yield return new(TB("Do not specify the language"), language);
|
||||||
else
|
else
|
||||||
yield return new(language.Name(), language);
|
yield return new(language.Name(), language);
|
||||||
}
|
}
|
||||||
@ -211,7 +213,7 @@ public static class ConfigurationSelectDataFactory
|
|||||||
foreach (var level in Enum.GetValues<ConfidenceLevel>())
|
foreach (var level in Enum.GetValues<ConfidenceLevel>())
|
||||||
{
|
{
|
||||||
if(level is ConfidenceLevel.NONE)
|
if(level is ConfidenceLevel.NONE)
|
||||||
yield return new("No minimum confidence level chosen", level);
|
yield return new(TB("No minimum confidence level chosen"), level);
|
||||||
|
|
||||||
if(level < minimumLevel)
|
if(level < minimumLevel)
|
||||||
continue;
|
continue;
|
@ -1,25 +1,29 @@
|
|||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Settings.DataModel;
|
namespace AIStudio.Settings.DataModel;
|
||||||
|
|
||||||
public static class DataSourceSecurityExtensions
|
public static class DataSourceSecurityExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(DataSourceSecurityExtensions).Namespace, nameof(DataSourceSecurityExtensions));
|
||||||
|
|
||||||
public static string ToSelectionText(this DataSourceSecurity security) => security switch
|
public static string ToSelectionText(this DataSourceSecurity security) => security switch
|
||||||
{
|
{
|
||||||
DataSourceSecurity.NOT_SPECIFIED => "Please select a security policy",
|
DataSourceSecurity.NOT_SPECIFIED => TB("Please select a security policy"),
|
||||||
|
|
||||||
DataSourceSecurity.ALLOW_ANY => "This data source can be used with any LLM provider. Your data may be sent to a cloud-based provider.",
|
DataSourceSecurity.ALLOW_ANY => TB("This data source can be used with any LLM provider. Your data may be sent to a cloud-based provider."),
|
||||||
DataSourceSecurity.SELF_HOSTED => "This data source can only be used with a self-hosted LLM provider. Your data will not be sent to any cloud-based provider.",
|
DataSourceSecurity.SELF_HOSTED => TB("This data source can only be used with a self-hosted LLM provider. Your data will not be sent to any cloud-based provider."),
|
||||||
|
|
||||||
_ => "Unknown security policy"
|
_ => TB("Unknown security policy")
|
||||||
};
|
};
|
||||||
|
|
||||||
public static string ToInfoText(this DataSourceSecurity security) => security switch
|
public static string ToInfoText(this DataSourceSecurity security) => security switch
|
||||||
{
|
{
|
||||||
DataSourceSecurity.NOT_SPECIFIED => "The security of the data source is not specified yet. You cannot use this data source until you specify a security policy.",
|
DataSourceSecurity.NOT_SPECIFIED => TB("The security of the data source is not specified yet. You cannot use this data source until you specify a security policy."),
|
||||||
|
|
||||||
DataSourceSecurity.ALLOW_ANY => "This data source can be used with any LLM provider. Your data may be sent to a cloud-based provider.",
|
DataSourceSecurity.ALLOW_ANY => TB("This data source can be used with any LLM provider. Your data may be sent to a cloud-based provider."),
|
||||||
DataSourceSecurity.SELF_HOSTED => "This data source can only be used with a self-hosted LLM provider. Your data will not be sent to any cloud-based provider.",
|
DataSourceSecurity.SELF_HOSTED => TB("This data source can only be used with a self-hosted LLM provider. Your data will not be sent to any cloud-based provider."),
|
||||||
|
|
||||||
_ => "Unknown security policy"
|
_ => TB("Unknown security policy")
|
||||||
};
|
};
|
||||||
|
|
||||||
public static TextColor GetColor(this DataSourceSecurity security) => security switch
|
public static TextColor GetColor(this DataSourceSecurity security) => security switch
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Settings.DataModel;
|
namespace AIStudio.Settings.DataModel;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -5,6 +7,8 @@ namespace AIStudio.Settings.DataModel;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static class DataSourceTypeExtension
|
public static class DataSourceTypeExtension
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(DataSourceTypeExtension).Namespace, nameof(DataSourceTypeExtension));
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get the display name of the data source type.
|
/// Get the display name of the data source type.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -12,10 +16,10 @@ public static class DataSourceTypeExtension
|
|||||||
/// <returns>The display name of the data source type.</returns>
|
/// <returns>The display name of the data source type.</returns>
|
||||||
public static string GetDisplayName(this DataSourceType type) => type switch
|
public static string GetDisplayName(this DataSourceType type) => type switch
|
||||||
{
|
{
|
||||||
DataSourceType.LOCAL_FILE => "Local File",
|
DataSourceType.LOCAL_FILE => TB("Local File"),
|
||||||
DataSourceType.LOCAL_DIRECTORY => "Local Directory",
|
DataSourceType.LOCAL_DIRECTORY => TB("Local Directory"),
|
||||||
DataSourceType.ERI_V1 => "External ERI Server (v1)",
|
DataSourceType.ERI_V1 => TB("External ERI Server (v1)"),
|
||||||
|
|
||||||
_ => "None",
|
_ => TB("None"),
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -1,16 +1,20 @@
|
|||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Settings.DataModel;
|
namespace AIStudio.Settings.DataModel;
|
||||||
|
|
||||||
public static class PreviewFeaturesExtensions
|
public static class PreviewFeaturesExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(PreviewFeaturesExtensions).Namespace, nameof(PreviewFeaturesExtensions));
|
||||||
|
|
||||||
public static string GetPreviewDescription(this PreviewFeatures feature) => feature switch
|
public static string GetPreviewDescription(this PreviewFeatures feature) => feature switch
|
||||||
{
|
{
|
||||||
PreviewFeatures.PRE_WRITER_MODE_2024 => "Writer Mode: Experiments about how to write long texts using AI",
|
PreviewFeatures.PRE_WRITER_MODE_2024 => TB("Writer Mode: Experiments about how to write long texts using AI"),
|
||||||
PreviewFeatures.PRE_RAG_2024 => "RAG: Preview of our RAG implementation where you can refer your files or integrate enterprise data within your company",
|
PreviewFeatures.PRE_RAG_2024 => TB("RAG: Preview of our RAG implementation where you can refer your files or integrate enterprise data within your company"),
|
||||||
|
|
||||||
PreviewFeatures.PRE_PLUGINS_2025 => "Plugins: Preview of our plugin system where you can extend the functionality of the app",
|
PreviewFeatures.PRE_PLUGINS_2025 => TB("Plugins: Preview of our plugin system where you can extend the functionality of the app"),
|
||||||
PreviewFeatures.PRE_READ_PDF_2025 => "Read PDF: Preview of our PDF reading system where you can read and extract text from PDF files",
|
PreviewFeatures.PRE_READ_PDF_2025 => TB("Read PDF: Preview of our PDF reading system where you can read and extract text from PDF files"),
|
||||||
|
|
||||||
_ => "Unknown preview feature"
|
_ => TB("Unknown preview feature")
|
||||||
};
|
};
|
||||||
|
|
||||||
public static bool IsEnabled(this PreviewFeatures feature, SettingsManager settingsManager) => settingsManager.ConfigurationData.App.EnabledPreviewFeatures.Contains(feature);
|
public static bool IsEnabled(this PreviewFeatures feature, SettingsManager settingsManager) => settingsManager.ConfigurationData.App.EnabledPreviewFeatures.Contains(feature);
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Settings.DataModel;
|
namespace AIStudio.Settings.DataModel;
|
||||||
|
|
||||||
public static class SendToChatDataSourceBehaviorExtensions
|
public static class SendToChatDataSourceBehaviorExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(SendToChatDataSourceBehaviorExtensions).Namespace, nameof(SendToChatDataSourceBehaviorExtensions));
|
||||||
|
|
||||||
public static string Description(this SendToChatDataSourceBehavior behavior) => behavior switch
|
public static string Description(this SendToChatDataSourceBehavior behavior) => behavior switch
|
||||||
{
|
{
|
||||||
SendToChatDataSourceBehavior.NO_DATA_SOURCES => "Use no data sources, when sending an assistant result to a chat",
|
SendToChatDataSourceBehavior.NO_DATA_SOURCES => TB("Use no data sources, when sending an assistant result to a chat"),
|
||||||
SendToChatDataSourceBehavior.APPLY_STANDARD_CHAT_DATA_SOURCE_OPTIONS => "Apply standard chat data source options, when sending an assistant result to a chat",
|
SendToChatDataSourceBehavior.APPLY_STANDARD_CHAT_DATA_SOURCE_OPTIONS => TB("Apply standard chat data source options, when sending an assistant result to a chat"),
|
||||||
|
|
||||||
_ => "Unknown behavior",
|
_ => TB("Unknown behavior"),
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -1,13 +1,17 @@
|
|||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Settings.DataModel;
|
namespace AIStudio.Settings.DataModel;
|
||||||
|
|
||||||
public static class ThemesExtensions
|
public static class ThemesExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ThemesExtensions).Namespace, nameof(ThemesExtensions));
|
||||||
|
|
||||||
public static string GetName(this Themes theme) => theme switch
|
public static string GetName(this Themes theme) => theme switch
|
||||||
{
|
{
|
||||||
Themes.SYSTEM => "Synchronized with the operating system settings",
|
Themes.SYSTEM => TB("Synchronized with the operating system settings"),
|
||||||
Themes.LIGHT => "Always use light theme",
|
Themes.LIGHT => TB("Always use light theme"),
|
||||||
Themes.DARK => "Always use dark theme",
|
Themes.DARK => TB("Always use dark theme"),
|
||||||
|
|
||||||
_ => "Unknown setting",
|
_ => TB("Unknown setting"),
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -1,10 +1,14 @@
|
|||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Settings;
|
namespace AIStudio.Settings;
|
||||||
|
|
||||||
public readonly record struct Profile(uint Num, string Id, string Name, string NeedToKnow, string Actions)
|
public readonly record struct Profile(uint Num, string Id, string Name, string NeedToKnow, string Actions)
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(Profile).Namespace, nameof(Profile));
|
||||||
|
|
||||||
public static readonly Profile NO_PROFILE = new()
|
public static readonly Profile NO_PROFILE = new()
|
||||||
{
|
{
|
||||||
Name = "Use no profile",
|
Name = TB("Use no profile"),
|
||||||
NeedToKnow = string.Empty,
|
NeedToKnow = string.Empty,
|
||||||
Actions = string.Empty,
|
Actions = string.Empty,
|
||||||
Id = Guid.Empty.ToString(),
|
Id = Guid.Empty.ToString(),
|
||||||
|
@ -1,16 +1,19 @@
|
|||||||
using AIStudio.Tools.ERIClient.DataModel;
|
using AIStudio.Tools.ERIClient.DataModel;
|
||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Tools;
|
namespace AIStudio.Tools;
|
||||||
|
|
||||||
public static class AuthMethodsV1Extensions
|
public static class AuthMethodsV1Extensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(AuthMethodsV1Extensions).Namespace, nameof(AuthMethodsV1Extensions));
|
||||||
|
|
||||||
public static string DisplayName(this AuthMethod authMethod) => authMethod switch
|
public static string DisplayName(this AuthMethod authMethod) => authMethod switch
|
||||||
{
|
{
|
||||||
AuthMethod.NONE => "None",
|
AuthMethod.NONE => TB("None"),
|
||||||
AuthMethod.USERNAME_PASSWORD => "Username & Password",
|
AuthMethod.USERNAME_PASSWORD => TB("Username & Password"),
|
||||||
AuthMethod.KERBEROS => "SSO (Kerberos)",
|
AuthMethod.KERBEROS => TB("SSO (Kerberos)"),
|
||||||
AuthMethod.TOKEN => "Access Token",
|
AuthMethod.TOKEN => TB("Access Token"),
|
||||||
|
|
||||||
_ => "Unknown authentication method",
|
_ => TB("Unknown authentication method"),
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -1,23 +1,27 @@
|
|||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Tools;
|
namespace AIStudio.Tools;
|
||||||
|
|
||||||
public static class CommonLanguageExtensions
|
public static class CommonLanguageExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(CommonLanguageExtensions).Namespace, nameof(CommonLanguageExtensions));
|
||||||
|
|
||||||
public static string Name(this CommonLanguages language) => language switch
|
public static string Name(this CommonLanguages language) => language switch
|
||||||
{
|
{
|
||||||
CommonLanguages.AS_IS => "Do not change the language",
|
CommonLanguages.AS_IS => TB("Do not change the language"),
|
||||||
|
|
||||||
CommonLanguages.EN_US => "English (US)",
|
CommonLanguages.EN_US => TB("English (US)"),
|
||||||
CommonLanguages.EN_GB => "English (UK)",
|
CommonLanguages.EN_GB => TB("English (UK)"),
|
||||||
CommonLanguages.ZH_CN => "Chinese (Simplified)",
|
CommonLanguages.ZH_CN => TB("Chinese (Simplified)"),
|
||||||
CommonLanguages.HI_IN => "Hindi (India)",
|
CommonLanguages.HI_IN => TB("Hindi (India)"),
|
||||||
CommonLanguages.ES_ES => "Spanish (Spain)",
|
CommonLanguages.ES_ES => TB("Spanish (Spain)"),
|
||||||
CommonLanguages.FR_FR => "French (France)",
|
CommonLanguages.FR_FR => TB("French (France)"),
|
||||||
CommonLanguages.DE_DE => "German (Germany)",
|
CommonLanguages.DE_DE => TB("German (Germany)"),
|
||||||
CommonLanguages.DE_AT => "German (Austria)",
|
CommonLanguages.DE_AT => TB("German (Austria)"),
|
||||||
CommonLanguages.DE_CH => "German (Switzerland)",
|
CommonLanguages.DE_CH => TB("German (Switzerland)"),
|
||||||
CommonLanguages.JA_JP => "Japanese (Japan)",
|
CommonLanguages.JA_JP => TB("Japanese (Japan)"),
|
||||||
|
|
||||||
_ => "Other",
|
_ => TB("Other"),
|
||||||
};
|
};
|
||||||
|
|
||||||
public static string ToIETFTag(this CommonLanguages language) => language switch
|
public static string ToIETFTag(this CommonLanguages language) => language switch
|
||||||
@ -56,7 +60,7 @@ public static class CommonLanguageExtensions
|
|||||||
public static string NameSelecting(this CommonLanguages language)
|
public static string NameSelecting(this CommonLanguages language)
|
||||||
{
|
{
|
||||||
if(language is CommonLanguages.AS_IS)
|
if(language is CommonLanguages.AS_IS)
|
||||||
return "Please select the target language";
|
return TB("Please select the target language");
|
||||||
|
|
||||||
return language.Name();
|
return language.Name();
|
||||||
}
|
}
|
||||||
@ -64,7 +68,7 @@ public static class CommonLanguageExtensions
|
|||||||
public static string NameSelectingOptional(this CommonLanguages language)
|
public static string NameSelectingOptional(this CommonLanguages language)
|
||||||
{
|
{
|
||||||
if(language is CommonLanguages.AS_IS)
|
if(language is CommonLanguages.AS_IS)
|
||||||
return "Do not specify the language";
|
return TB("Do not specify the language");
|
||||||
|
|
||||||
return language.Name();
|
return language.Name();
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,14 @@ using System.Diagnostics.CodeAnalysis;
|
|||||||
|
|
||||||
using AIStudio.Provider;
|
using AIStudio.Provider;
|
||||||
using AIStudio.Settings;
|
using AIStudio.Settings;
|
||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Tools;
|
namespace AIStudio.Tools;
|
||||||
|
|
||||||
public static class ComponentsExtensions
|
public static class ComponentsExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ComponentsExtensions).Namespace, nameof(ComponentsExtensions));
|
||||||
|
|
||||||
public static bool AllowSendTo(this Components component) => component switch
|
public static bool AllowSendTo(this Components component) => component switch
|
||||||
{
|
{
|
||||||
Components.NONE => false,
|
Components.NONE => false,
|
||||||
@ -26,22 +29,22 @@ public static class ComponentsExtensions
|
|||||||
|
|
||||||
public static string Name(this Components component) => component switch
|
public static string Name(this Components component) => component switch
|
||||||
{
|
{
|
||||||
Components.GRAMMAR_SPELLING_ASSISTANT => "Grammar & Spelling Assistant",
|
Components.GRAMMAR_SPELLING_ASSISTANT => TB("Grammar & Spelling Assistant"),
|
||||||
Components.TEXT_SUMMARIZER_ASSISTANT => "Text Summarizer Assistant",
|
Components.TEXT_SUMMARIZER_ASSISTANT => TB("Text Summarizer Assistant"),
|
||||||
Components.ICON_FINDER_ASSISTANT => "Icon Finder Assistant",
|
Components.ICON_FINDER_ASSISTANT => TB("Icon Finder Assistant"),
|
||||||
Components.TRANSLATION_ASSISTANT => "Translation Assistant",
|
Components.TRANSLATION_ASSISTANT => TB("Translation Assistant"),
|
||||||
Components.REWRITE_ASSISTANT => "Rewrite Assistant",
|
Components.REWRITE_ASSISTANT => TB("Rewrite Assistant"),
|
||||||
Components.AGENDA_ASSISTANT => "Agenda Assistant",
|
Components.AGENDA_ASSISTANT => TB("Agenda Assistant"),
|
||||||
Components.CODING_ASSISTANT => "Coding Assistant",
|
Components.CODING_ASSISTANT => TB("Coding Assistant"),
|
||||||
Components.EMAIL_ASSISTANT => "E-Mail Assistant",
|
Components.EMAIL_ASSISTANT => TB("E-Mail Assistant"),
|
||||||
Components.LEGAL_CHECK_ASSISTANT => "Legal Check Assistant",
|
Components.LEGAL_CHECK_ASSISTANT => TB("Legal Check Assistant"),
|
||||||
Components.SYNONYMS_ASSISTANT => "Synonym Assistant",
|
Components.SYNONYMS_ASSISTANT => TB("Synonym Assistant"),
|
||||||
Components.MY_TASKS_ASSISTANT => "My Tasks Assistant",
|
Components.MY_TASKS_ASSISTANT => TB("My Tasks Assistant"),
|
||||||
Components.JOB_POSTING_ASSISTANT => "Job Posting Assistant",
|
Components.JOB_POSTING_ASSISTANT => TB("Job Posting Assistant"),
|
||||||
Components.ERI_ASSISTANT => "ERI Server",
|
Components.ERI_ASSISTANT => TB("ERI Server"),
|
||||||
Components.I18N_ASSISTANT => "Localization Assistant",
|
Components.I18N_ASSISTANT => TB("Localization Assistant"),
|
||||||
|
|
||||||
Components.CHAT => "New Chat",
|
Components.CHAT => TB("New Chat"),
|
||||||
|
|
||||||
_ => Enum.GetName(typeof(Components), component)!,
|
_ => Enum.GetName(typeof(Components), component)!,
|
||||||
};
|
};
|
||||||
|
@ -1,18 +1,22 @@
|
|||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Tools;
|
namespace AIStudio.Tools;
|
||||||
|
|
||||||
public static class ConfidenceSchemesExtensions
|
public static class ConfidenceSchemesExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ConfidenceSchemesExtensions).Namespace, nameof(ConfidenceSchemesExtensions));
|
||||||
|
|
||||||
public static string GetListDescription(this ConfidenceSchemes scheme) => scheme switch
|
public static string GetListDescription(this ConfidenceSchemes scheme) => scheme switch
|
||||||
{
|
{
|
||||||
ConfidenceSchemes.TRUST_ALL => "Trust all LLM providers",
|
ConfidenceSchemes.TRUST_ALL => TB("Trust all LLM providers"),
|
||||||
ConfidenceSchemes.TRUST_USA_EUROPE => "Trust LLM providers from the USA and Europe",
|
ConfidenceSchemes.TRUST_USA_EUROPE => TB("Trust LLM providers from the USA and Europe"),
|
||||||
ConfidenceSchemes.TRUST_USA => "Trust LLM providers from the USA",
|
ConfidenceSchemes.TRUST_USA => TB("Trust LLM providers from the USA"),
|
||||||
ConfidenceSchemes.TRUST_EUROPE => "Trust LLM providers from Europe",
|
ConfidenceSchemes.TRUST_EUROPE => TB("Trust LLM providers from Europe"),
|
||||||
ConfidenceSchemes.TRUST_ASIA => "Trust LLM providers from Asia",
|
ConfidenceSchemes.TRUST_ASIA => TB("Trust LLM providers from Asia"),
|
||||||
ConfidenceSchemes.LOCAL_TRUST_ONLY => "Trust only local LLM providers",
|
ConfidenceSchemes.LOCAL_TRUST_ONLY => TB("Trust only local LLM providers"),
|
||||||
|
|
||||||
ConfidenceSchemes.CUSTOM => "Configure your own confidence scheme",
|
ConfidenceSchemes.CUSTOM => TB("Configure your own confidence scheme"),
|
||||||
|
|
||||||
_ => "Unknown confidence scheme"
|
_ => TB("Unknown confidence scheme"),
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -1,13 +1,17 @@
|
|||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Tools.ERIClient.DataModel;
|
namespace AIStudio.Tools.ERIClient.DataModel;
|
||||||
|
|
||||||
public static class ProviderTypeExtensions
|
public static class ProviderTypeExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ProviderTypeExtensions).Namespace, nameof(ProviderTypeExtensions));
|
||||||
|
|
||||||
public static string Explain(this ProviderType providerType) => providerType switch
|
public static string Explain(this ProviderType providerType) => providerType switch
|
||||||
{
|
{
|
||||||
ProviderType.NONE => "The related data is not allowed to be sent to any LLM provider. This means that this data source cannot be used at the moment.",
|
ProviderType.NONE => TB("The related data is not allowed to be sent to any LLM provider. This means that this data source cannot be used at the moment."),
|
||||||
ProviderType.ANY => "The related data can be sent to any provider, regardless of where it is hosted (cloud or self-hosted).",
|
ProviderType.ANY => TB("The related data can be sent to any provider, regardless of where it is hosted (cloud or self-hosted)."),
|
||||||
ProviderType.SELF_HOSTED => "The related data can be sent to a provider that is hosted by the same organization, either on-premises or locally. Cloud-based providers are not allowed.",
|
ProviderType.SELF_HOSTED => TB("The related data can be sent to a provider that is hosted by the same organization, either on-premises or locally. Cloud-based providers are not allowed."),
|
||||||
|
|
||||||
_ => "Unknown configuration. This data source cannot be used at the moment.",
|
_ => TB("Unknown configuration. This data source cannot be used at the moment."),
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -3,12 +3,15 @@ using System.Text.Json;
|
|||||||
|
|
||||||
using AIStudio.Settings;
|
using AIStudio.Settings;
|
||||||
using AIStudio.Tools.ERIClient.DataModel;
|
using AIStudio.Tools.ERIClient.DataModel;
|
||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
using AIStudio.Tools.Services;
|
using AIStudio.Tools.Services;
|
||||||
|
|
||||||
namespace AIStudio.Tools.ERIClient;
|
namespace AIStudio.Tools.ERIClient;
|
||||||
|
|
||||||
public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), IERIClient
|
public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource), IERIClient
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ERIClientV1).Namespace, nameof(ERIClientV1));
|
||||||
|
|
||||||
#region Implementation of IERIClient
|
#region Implementation of IERIClient
|
||||||
|
|
||||||
public async Task<APIResponse<List<AuthScheme>>> GetAuthMethodsAsync(CancellationToken cancellationToken = default)
|
public async Task<APIResponse<List<AuthScheme>>> GetAuthMethodsAsync(CancellationToken cancellationToken = default)
|
||||||
@ -21,7 +24,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = $"Failed to retrieve the authentication methods: there was an issue communicating with the ERI server. Code: {response.StatusCode}, Reason: {response.ReasonPhrase}"
|
Message = string.Format(TB("Failed to retrieve the authentication methods: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"), response.StatusCode, response.ReasonPhrase)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,7 +34,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to retrieve the authentication methods: the ERI server did not return a valid response."
|
Message = TB("Failed to retrieve the authentication methods: the ERI server did not return a valid response.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +49,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to retrieve the authentication methods: the request was canceled either by the user or due to a timeout."
|
Message = TB("Failed to retrieve the authentication methods: the request was canceled either by the user or due to a timeout.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@ -54,7 +57,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = $"Failed to retrieve the authentication methods due to an exception: {e.Message}"
|
Message = string.Format(TB("Failed to retrieve the authentication methods due to an exception: {0}"), e.Message)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -76,7 +79,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = $"Failed to authenticate with the ERI server. Code: {noneAuthResponse.StatusCode}, Reason: {noneAuthResponse.ReasonPhrase}"
|
Message = string.Format(TB("Failed to authenticate with the ERI server. Code: {0}, Reason: {1}"), noneAuthResponse.StatusCode, noneAuthResponse.ReasonPhrase)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,7 +89,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to authenticate with the ERI server: the response was invalid."
|
Message = TB("Failed to authenticate with the ERI server: the response was invalid.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,7 +111,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to retrieve the password."
|
Message = TB("Failed to retrieve the password.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,7 +133,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = $"Failed to authenticate with the ERI server. Code: {usernamePasswordAuthResponse.StatusCode}, Reason: {usernamePasswordAuthResponse.ReasonPhrase}"
|
Message = string.Format(TB("Failed to authenticate with the ERI server. Code: {0}, Reason: {1}"), usernamePasswordAuthResponse.StatusCode, usernamePasswordAuthResponse.ReasonPhrase)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,7 +143,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to authenticate with the server: the response was invalid."
|
Message = TB("Failed to authenticate with the server: the response was invalid.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,7 +165,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to retrieve the access token."
|
Message = TB("Failed to retrieve the access token.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,7 +184,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = $"Failed to authenticate with the ERI server. Code: {tokenAuthResponse.StatusCode}, Reason: {tokenAuthResponse.ReasonPhrase}"
|
Message = string.Format(TB("Failed to authenticate with the ERI server. Code: {0}, Reason: {1}"), tokenAuthResponse.StatusCode, tokenAuthResponse.ReasonPhrase)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,7 +194,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to authenticate with the ERI server: the response was invalid."
|
Message = TB("Failed to authenticate with the ERI server: the response was invalid.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,7 +211,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "The authentication method is not supported yet."
|
Message = TB("The authentication method is not supported yet.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -217,7 +220,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to authenticate with the ERI server: the request was canceled either by the user or due to a timeout."
|
Message = TB("Failed to authenticate with the ERI server: the request was canceled either by the user or due to a timeout.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@ -225,7 +228,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = $"Failed to authenticate with the ERI server due to an exception: {e.Message}"
|
Message = string.Format(TB("Failed to authenticate with the ERI server due to an exception: {0}"), e.Message)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -243,7 +246,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = $"Failed to retrieve the data source information: there was an issue communicating with the ERI server. Code: {response.StatusCode}, Reason: {response.ReasonPhrase}"
|
Message = string.Format(TB("Failed to retrieve the data source information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"), response.StatusCode, response.ReasonPhrase)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -253,7 +256,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to retrieve the data source information: the ERI server did not return a valid response."
|
Message = TB("Failed to retrieve the data source information: the ERI server did not return a valid response.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -268,7 +271,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to retrieve the data source information: the request was canceled either by the user or due to a timeout."
|
Message = TB("Failed to retrieve the data source information: the request was canceled either by the user or due to a timeout.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@ -276,7 +279,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = $"Failed to retrieve the data source information due to an exception: {e.Message}"
|
Message = string.Format(TB("Failed to retrieve the data source information due to an exception: {0}"), e.Message)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -294,7 +297,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = $"Failed to retrieve the embedding information: there was an issue communicating with the ERI server. Code: {response.StatusCode}, Reason: {response.ReasonPhrase}"
|
Message = string.Format(TB("Failed to retrieve the embedding information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"), response.StatusCode, response.ReasonPhrase)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,7 +307,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to retrieve the embedding information: the ERI server did not return a valid response."
|
Message = TB("Failed to retrieve the embedding information: the ERI server did not return a valid response.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -319,7 +322,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to retrieve the embedding information: the request was canceled either by the user or due to a timeout."
|
Message = TB("Failed to retrieve the embedding information: the request was canceled either by the user or due to a timeout.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@ -327,7 +330,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = $"Failed to retrieve the embedding information due to an exception: {e.Message}"
|
Message = string.Format(TB("Failed to retrieve the embedding information due to an exception: {0}"), e.Message)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -345,7 +348,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = $"Failed to retrieve the retrieval information: there was an issue communicating with the ERI server. Code: {response.StatusCode}, Reason: {response.ReasonPhrase}"
|
Message = string.Format(TB("Failed to retrieve the retrieval information: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"), response.StatusCode, response.ReasonPhrase)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -355,7 +358,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to retrieve the retrieval information: the ERI server did not return a valid response."
|
Message = TB("Failed to retrieve the retrieval information: the ERI server did not return a valid response.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -370,7 +373,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to retrieve the retrieval information: the request was canceled either by the user or due to a timeout."
|
Message = TB("Failed to retrieve the retrieval information: the request was canceled either by the user or due to a timeout.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@ -378,7 +381,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = $"Failed to retrieve the retrieval information due to an exception: {e.Message}"
|
Message = string.Format(TB("Failed to retrieve the retrieval information due to an exception: {0}"), e.Message)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -399,7 +402,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = $"Failed to execute the retrieval request: there was an issue communicating with the ERI server. Code: {response.StatusCode}, Reason: {response.ReasonPhrase}"
|
Message = string.Format(TB("Failed to execute the retrieval request: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"), response.StatusCode, response.ReasonPhrase)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -409,7 +412,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to execute the retrieval request: the ERI server did not return a valid response."
|
Message = TB("Failed to execute the retrieval request: the ERI server did not return a valid response.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -424,7 +427,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to execute the retrieval request: the request was canceled either by the user or due to a timeout."
|
Message = TB("Failed to execute the retrieval request: the request was canceled either by the user or due to a timeout.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@ -432,7 +435,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = $"Failed to execute the retrieval request due to an exception: {e.Message}"
|
Message = string.Format(TB("Failed to execute the retrieval request due to an exception: {0}"), e.Message)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -450,7 +453,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = $"Failed to retrieve the security requirements: there was an issue communicating with the ERI server. Code: {response.StatusCode}, Reason: {response.ReasonPhrase}"
|
Message = string.Format(TB("Failed to retrieve the security requirements: there was an issue communicating with the ERI server. Code: {0}, Reason: {1}"), response.StatusCode, response.ReasonPhrase)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -460,7 +463,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to retrieve the security requirements: the ERI server did not return a valid response."
|
Message = TB("Failed to retrieve the security requirements: the ERI server did not return a valid response.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -475,7 +478,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = "Failed to retrieve the security requirements: the request was canceled either by the user or due to a timeout."
|
Message = TB("Failed to retrieve the security requirements: the request was canceled either by the user or due to a timeout.")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@ -483,7 +486,7 @@ public class ERIClientV1(IERIDataSource dataSource) : ERIClientBase(dataSource),
|
|||||||
return new()
|
return new()
|
||||||
{
|
{
|
||||||
Successful = false,
|
Successful = false,
|
||||||
Message = $"Failed to retrieve the security requirements due to an exception: {e.Message}"
|
Message = string.Format(TB("Failed to retrieve the security requirements due to an exception: {0}"), e.Message)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ public class I18N : ILang
|
|||||||
public static readonly I18N I = new();
|
public static readonly I18N I = new();
|
||||||
private static readonly ILogger<I18N> LOG = Program.LOGGER_FACTORY.CreateLogger<I18N>();
|
private static readonly ILogger<I18N> LOG = Program.LOGGER_FACTORY.CreateLogger<I18N>();
|
||||||
|
|
||||||
private ILanguagePlugin language = PluginFactory.BaseLanguage;
|
private ILanguagePlugin? language = PluginFactory.BaseLanguage;
|
||||||
|
|
||||||
private I18N()
|
private I18N()
|
||||||
{
|
{
|
||||||
@ -18,12 +18,18 @@ public class I18N : ILang
|
|||||||
public string T(string fallbackEN)
|
public string T(string fallbackEN)
|
||||||
{
|
{
|
||||||
LOG.LogWarning("Using I18N.I.T without namespace and type is probably wrong, because the I18N key collection process of the build system will not find those keys.");
|
LOG.LogWarning("Using I18N.I.T without namespace and type is probably wrong, because the I18N key collection process of the build system will not find those keys.");
|
||||||
|
if(this.language is not null)
|
||||||
return this.GetText(this.language, fallbackEN);
|
return this.GetText(this.language, fallbackEN);
|
||||||
|
|
||||||
|
return fallbackEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string T(string fallbackEN, string? typeNamespace, string? typeName)
|
public string T(string fallbackEN, string? typeNamespace, string? typeName)
|
||||||
{
|
{
|
||||||
|
if(this.language is not null)
|
||||||
return this.GetText(this.language, fallbackEN, typeNamespace, typeName);
|
return this.GetText(this.language, fallbackEN, typeNamespace, typeName);
|
||||||
|
|
||||||
|
return fallbackEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -8,6 +8,8 @@ namespace AIStudio.Tools.PluginSystem;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract partial class PluginBase : IPluginMetadata
|
public abstract partial class PluginBase : IPluginMetadata
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(PluginBase).Namespace, nameof(PluginBase));
|
||||||
|
|
||||||
private readonly IReadOnlyCollection<string> baseIssues;
|
private readonly IReadOnlyCollection<string> baseIssues;
|
||||||
protected readonly LuaState state;
|
protected readonly LuaState state;
|
||||||
|
|
||||||
@ -155,21 +157,21 @@ public abstract partial class PluginBase : IPluginMetadata
|
|||||||
{
|
{
|
||||||
if (!this.state.Environment["ID"].TryRead<string>(out var idText))
|
if (!this.state.Environment["ID"].TryRead<string>(out var idText))
|
||||||
{
|
{
|
||||||
message = "The field ID does not exist or is not a valid string.";
|
message = TB("The field ID does not exist or is not a valid string.");
|
||||||
id = Guid.Empty;
|
id = Guid.Empty;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Guid.TryParse(idText, out id))
|
if (!Guid.TryParse(idText, out id))
|
||||||
{
|
{
|
||||||
message = "The field ID is not a valid GUID / UUID. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX).";
|
message = TB("The field ID is not a valid GUID / UUID. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX).");
|
||||||
id = Guid.Empty;
|
id = Guid.Empty;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(id == Guid.Empty)
|
if(id == Guid.Empty)
|
||||||
{
|
{
|
||||||
message = "The field ID is empty. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX).";
|
message = TB("The field ID is empty. The ID must be formatted in the 8-4-4-4-12 format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX).");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,14 +189,14 @@ public abstract partial class PluginBase : IPluginMetadata
|
|||||||
{
|
{
|
||||||
if (!this.state.Environment["NAME"].TryRead(out name))
|
if (!this.state.Environment["NAME"].TryRead(out name))
|
||||||
{
|
{
|
||||||
message = "The field NAME does not exist or is not a valid string.";
|
message = TB("The field NAME does not exist or is not a valid string.");
|
||||||
name = string.Empty;
|
name = string.Empty;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(string.IsNullOrWhiteSpace(name))
|
if(string.IsNullOrWhiteSpace(name))
|
||||||
{
|
{
|
||||||
message = "The field NAME is empty. The name must be a non-empty string.";
|
message = TB("The field NAME is empty. The name must be a non-empty string.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,14 +214,14 @@ public abstract partial class PluginBase : IPluginMetadata
|
|||||||
{
|
{
|
||||||
if (!this.state.Environment["DESCRIPTION"].TryRead(out description))
|
if (!this.state.Environment["DESCRIPTION"].TryRead(out description))
|
||||||
{
|
{
|
||||||
message = "The field DESCRIPTION does not exist or is not a valid string.";
|
message = TB("The field DESCRIPTION does not exist or is not a valid string.");
|
||||||
description = string.Empty;
|
description = string.Empty;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(string.IsNullOrWhiteSpace(description))
|
if(string.IsNullOrWhiteSpace(description))
|
||||||
{
|
{
|
||||||
message = "The field DESCRIPTION is empty. The description must be a non-empty string.";
|
message = TB("The field DESCRIPTION is empty. The description must be a non-empty string.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,21 +239,21 @@ public abstract partial class PluginBase : IPluginMetadata
|
|||||||
{
|
{
|
||||||
if (!this.state.Environment["VERSION"].TryRead<string>(out var versionText))
|
if (!this.state.Environment["VERSION"].TryRead<string>(out var versionText))
|
||||||
{
|
{
|
||||||
message = "The field VERSION does not exist or is not a valid string.";
|
message = TB("The field VERSION does not exist or is not a valid string.");
|
||||||
version = PluginVersion.NONE;
|
version = PluginVersion.NONE;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!PluginVersion.TryParse(versionText, out version))
|
if (!PluginVersion.TryParse(versionText, out version))
|
||||||
{
|
{
|
||||||
message = "The field VERSION is not a valid version number. The version number must be formatted as string in the major.minor.patch format (X.X.X).";
|
message = TB("The field VERSION is not a valid version number. The version number must be formatted as string in the major.minor.patch format (X.X.X).");
|
||||||
version = PluginVersion.NONE;
|
version = PluginVersion.NONE;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(version == PluginVersion.NONE)
|
if(version == PluginVersion.NONE)
|
||||||
{
|
{
|
||||||
message = "The field VERSION is empty. The version number must be formatted as string in the major.minor.patch format (X.X.X).";
|
message = TB("The field VERSION is empty. The version number must be formatted as string in the major.minor.patch format (X.X.X).");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,7 +272,7 @@ public abstract partial class PluginBase : IPluginMetadata
|
|||||||
if (!this.state.Environment["AUTHORS"].TryRead<LuaTable>(out var authorsTable))
|
if (!this.state.Environment["AUTHORS"].TryRead<LuaTable>(out var authorsTable))
|
||||||
{
|
{
|
||||||
authors = [];
|
authors = [];
|
||||||
message = "The table AUTHORS does not exist or is using an invalid syntax.";
|
message = TB("The table AUTHORS does not exist or is using an invalid syntax.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -282,7 +284,7 @@ public abstract partial class PluginBase : IPluginMetadata
|
|||||||
authors = authorList.ToArray();
|
authors = authorList.ToArray();
|
||||||
if(authorList.Count == 0)
|
if(authorList.Count == 0)
|
||||||
{
|
{
|
||||||
message = "The table AUTHORS is empty. At least one author must be specified.";
|
message = TB("The table AUTHORS is empty. At least one author must be specified.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,13 +303,13 @@ public abstract partial class PluginBase : IPluginMetadata
|
|||||||
if (!this.state.Environment["SUPPORT_CONTACT"].TryRead(out contact))
|
if (!this.state.Environment["SUPPORT_CONTACT"].TryRead(out contact))
|
||||||
{
|
{
|
||||||
contact = string.Empty;
|
contact = string.Empty;
|
||||||
message = "The field SUPPORT_CONTACT does not exist or is not a valid string.";
|
message = TB("The field SUPPORT_CONTACT does not exist or is not a valid string.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(string.IsNullOrWhiteSpace(contact))
|
if(string.IsNullOrWhiteSpace(contact))
|
||||||
{
|
{
|
||||||
message = "The field SUPPORT_CONTACT is empty. The support contact must be a non-empty string.";
|
message = TB("The field SUPPORT_CONTACT is empty. The support contact must be a non-empty string.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,14 +328,14 @@ public abstract partial class PluginBase : IPluginMetadata
|
|||||||
if (!this.state.Environment["SOURCE_URL"].TryRead(out url))
|
if (!this.state.Environment["SOURCE_URL"].TryRead(out url))
|
||||||
{
|
{
|
||||||
url = string.Empty;
|
url = string.Empty;
|
||||||
message = "The field SOURCE_URL does not exist or is not a valid string.";
|
message = TB("The field SOURCE_URL does not exist or is not a valid string.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!url.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase) && !url.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase))
|
if (!url.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase) && !url.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase))
|
||||||
{
|
{
|
||||||
url = string.Empty;
|
url = string.Empty;
|
||||||
message = "The field SOURCE_URL is not a valid URL. The URL must start with 'http://' or 'https://'.";
|
message = TB("The field SOURCE_URL is not a valid URL. The URL must start with 'http://' or 'https://'.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -352,7 +354,7 @@ public abstract partial class PluginBase : IPluginMetadata
|
|||||||
if (!this.state.Environment["CATEGORIES"].TryRead<LuaTable>(out var categoriesTable))
|
if (!this.state.Environment["CATEGORIES"].TryRead<LuaTable>(out var categoriesTable))
|
||||||
{
|
{
|
||||||
categories = [];
|
categories = [];
|
||||||
message = "The table CATEGORIES does not exist or is using an invalid syntax.";
|
message = TB("The table CATEGORIES does not exist or is using an invalid syntax.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -365,7 +367,7 @@ public abstract partial class PluginBase : IPluginMetadata
|
|||||||
categories = categoryList.ToArray();
|
categories = categoryList.ToArray();
|
||||||
if(categoryList.Count == 0)
|
if(categoryList.Count == 0)
|
||||||
{
|
{
|
||||||
message = $"The table CATEGORIES is empty. At least one category is necessary. Valid categories are: {CommonTools.GetAllEnumValues(PluginCategory.NONE)}.";
|
message = string.Format(TB("The table CATEGORIES is empty. At least one category is necessary. Valid categories are: {0}."), CommonTools.GetAllEnumValues(PluginCategory.NONE));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -384,7 +386,7 @@ public abstract partial class PluginBase : IPluginMetadata
|
|||||||
if (!this.state.Environment["TARGET_GROUPS"].TryRead<LuaTable>(out var targetGroupsTable))
|
if (!this.state.Environment["TARGET_GROUPS"].TryRead<LuaTable>(out var targetGroupsTable))
|
||||||
{
|
{
|
||||||
targetGroups = [];
|
targetGroups = [];
|
||||||
message = "The table TARGET_GROUPS does not exist or is using an invalid syntax.";
|
message = TB("The table TARGET_GROUPS does not exist or is using an invalid syntax.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -397,7 +399,7 @@ public abstract partial class PluginBase : IPluginMetadata
|
|||||||
targetGroups = targetGroupList.ToArray();
|
targetGroups = targetGroupList.ToArray();
|
||||||
if(targetGroups.Length == 0)
|
if(targetGroups.Length == 0)
|
||||||
{
|
{
|
||||||
message = "The table TARGET_GROUPS is empty or is not a valid table of strings. Valid target groups are: {CommonTools.GetAllEnumValues(PluginTargetGroup.NONE)}.";
|
message = string.Format(TB("The table TARGET_GROUPS is empty or is not a valid table of strings. Valid target groups are: {0}."), CommonTools.GetAllEnumValues(PluginTargetGroup.NONE));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -416,7 +418,7 @@ public abstract partial class PluginBase : IPluginMetadata
|
|||||||
if (!this.state.Environment["IS_MAINTAINED"].TryRead(out isMaintained))
|
if (!this.state.Environment["IS_MAINTAINED"].TryRead(out isMaintained))
|
||||||
{
|
{
|
||||||
isMaintained = false;
|
isMaintained = false;
|
||||||
message = "The field IS_MAINTAINED does not exist or is not a valid boolean.";
|
message = TB("The field IS_MAINTAINED does not exist or is not a valid boolean.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -435,7 +437,7 @@ public abstract partial class PluginBase : IPluginMetadata
|
|||||||
if (!this.state.Environment["DEPRECATION_MESSAGE"].TryRead(out deprecationMessage))
|
if (!this.state.Environment["DEPRECATION_MESSAGE"].TryRead(out deprecationMessage))
|
||||||
{
|
{
|
||||||
deprecationMessage = string.Empty;
|
deprecationMessage = string.Empty;
|
||||||
message = "The field DEPRECATION_MESSAGE does not exist, is not a valid string. This message is optional: use an empty string to indicate that the plugin is not deprecated.";
|
message = TB("The field DEPRECATION_MESSAGE does not exist, is not a valid string. This message is optional: use an empty string to indicate that the plugin is not deprecated.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -453,7 +455,7 @@ public abstract partial class PluginBase : IPluginMetadata
|
|||||||
{
|
{
|
||||||
if (!this.state.Environment["UI_TEXT_CONTENT"].TryRead<LuaTable>(out var textTable))
|
if (!this.state.Environment["UI_TEXT_CONTENT"].TryRead<LuaTable>(out var textTable))
|
||||||
{
|
{
|
||||||
message = "The UI_TEXT_CONTENT table does not exist or is not a valid table.";
|
message = TB("The UI_TEXT_CONTENT table does not exist or is not a valid table.");
|
||||||
pluginContent = [];
|
pluginContent = [];
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -2,37 +2,39 @@ namespace AIStudio.Tools.PluginSystem;
|
|||||||
|
|
||||||
public static class PluginCategoryExtensions
|
public static class PluginCategoryExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(PluginCategoryExtensions).Namespace, nameof(PluginCategoryExtensions));
|
||||||
|
|
||||||
public static string GetName(this PluginCategory type) => type switch
|
public static string GetName(this PluginCategory type) => type switch
|
||||||
{
|
{
|
||||||
PluginCategory.NONE => "None",
|
PluginCategory.NONE => TB("None"),
|
||||||
PluginCategory.CORE => "AI Studio Core",
|
PluginCategory.CORE => TB("AI Studio Core"),
|
||||||
|
|
||||||
PluginCategory.BUSINESS => "Business",
|
PluginCategory.BUSINESS => TB("Business"),
|
||||||
PluginCategory.INDUSTRY => "Industry",
|
PluginCategory.INDUSTRY => TB("Industry"),
|
||||||
PluginCategory.UTILITY => "Utility",
|
PluginCategory.UTILITY => TB("Utility"),
|
||||||
PluginCategory.SOFTWARE_DEVELOPMENT => "Software Development",
|
PluginCategory.SOFTWARE_DEVELOPMENT => TB("Software Development"),
|
||||||
PluginCategory.GAMING => "Gaming",
|
PluginCategory.GAMING => TB("Gaming"),
|
||||||
PluginCategory.EDUCATION => "Education",
|
PluginCategory.EDUCATION => TB("Education"),
|
||||||
PluginCategory.ENTERTAINMENT => "Entertainment",
|
PluginCategory.ENTERTAINMENT => TB("Entertainment"),
|
||||||
PluginCategory.SOCIAL => "Social",
|
PluginCategory.SOCIAL => TB("Social"),
|
||||||
PluginCategory.SHOPPING => "Shopping",
|
PluginCategory.SHOPPING => TB("Shopping"),
|
||||||
PluginCategory.TRAVEL => "Travel",
|
PluginCategory.TRAVEL => TB("Travel"),
|
||||||
PluginCategory.HEALTH => "Health",
|
PluginCategory.HEALTH => TB("Health"),
|
||||||
PluginCategory.FITNESS => "Fitness",
|
PluginCategory.FITNESS => TB("Fitness"),
|
||||||
PluginCategory.FOOD => "Food",
|
PluginCategory.FOOD => TB("Food"),
|
||||||
PluginCategory.PARTY => "Party",
|
PluginCategory.PARTY => TB("Party"),
|
||||||
PluginCategory.SPORTS => "Sports",
|
PluginCategory.SPORTS => TB("Sports"),
|
||||||
PluginCategory.NEWS => "News",
|
PluginCategory.NEWS => TB("News"),
|
||||||
PluginCategory.WEATHER => "Weather",
|
PluginCategory.WEATHER => TB("Weather"),
|
||||||
PluginCategory.MUSIC => "Music",
|
PluginCategory.MUSIC => TB("Music"),
|
||||||
PluginCategory.POLITICAL => "Political",
|
PluginCategory.POLITICAL => TB("Political"),
|
||||||
PluginCategory.SCIENCE => "Science",
|
PluginCategory.SCIENCE => TB("Science"),
|
||||||
PluginCategory.TECHNOLOGY => "Technology",
|
PluginCategory.TECHNOLOGY => TB("Technology"),
|
||||||
PluginCategory.ART => "Art",
|
PluginCategory.ART => TB("Art"),
|
||||||
PluginCategory.FICTION => "Fiction",
|
PluginCategory.FICTION => TB("Fiction"),
|
||||||
PluginCategory.WRITING => "Writing",
|
PluginCategory.WRITING => TB("Writing"),
|
||||||
PluginCategory.CONTENT_CREATION => "Content Creation",
|
PluginCategory.CONTENT_CREATION => TB("Content Creation"),
|
||||||
|
|
||||||
_ => "Unknown plugin category",
|
_ => TB("Unknown plugin category"),
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -4,6 +4,7 @@ namespace AIStudio.Tools.PluginSystem;
|
|||||||
|
|
||||||
public sealed class PluginLanguage : PluginBase, ILanguagePlugin
|
public sealed class PluginLanguage : PluginBase, ILanguagePlugin
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(PluginLanguage).Namespace, nameof(PluginLanguage));
|
||||||
private static readonly ILogger<PluginLanguage> LOGGER = Program.LOGGER_FACTORY.CreateLogger<PluginLanguage>();
|
private static readonly ILogger<PluginLanguage> LOGGER = Program.LOGGER_FACTORY.CreateLogger<PluginLanguage>();
|
||||||
|
|
||||||
private readonly Dictionary<string, string> content = [];
|
private readonly Dictionary<string, string> content = [];
|
||||||
@ -53,28 +54,28 @@ public sealed class PluginLanguage : PluginBase, ILanguagePlugin
|
|||||||
{
|
{
|
||||||
if (!this.state.Environment["IETF_TAG"].TryRead(out readLangCultureTag))
|
if (!this.state.Environment["IETF_TAG"].TryRead(out readLangCultureTag))
|
||||||
{
|
{
|
||||||
message = "The field IETF_TAG does not exist or is not a valid string.";
|
message = TB("The field IETF_TAG does not exist or is not a valid string.");
|
||||||
readLangCultureTag = string.Empty;
|
readLangCultureTag = string.Empty;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(readLangCultureTag))
|
if (string.IsNullOrWhiteSpace(readLangCultureTag))
|
||||||
{
|
{
|
||||||
message = "The field IETF_TAG is empty. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code.";
|
message = TB("The field IETF_TAG is empty. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code.");
|
||||||
readLangCultureTag = string.Empty;
|
readLangCultureTag = string.Empty;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (readLangCultureTag.Length != 5)
|
if (readLangCultureTag.Length != 5)
|
||||||
{
|
{
|
||||||
message = "The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code.";
|
message = TB("The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code.");
|
||||||
readLangCultureTag = string.Empty;
|
readLangCultureTag = string.Empty;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (readLangCultureTag[2] != '-')
|
if (readLangCultureTag[2] != '-')
|
||||||
{
|
{
|
||||||
message = "The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code.";
|
message = TB("The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code.");
|
||||||
readLangCultureTag = string.Empty;
|
readLangCultureTag = string.Empty;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -83,7 +84,7 @@ public sealed class PluginLanguage : PluginBase, ILanguagePlugin
|
|||||||
for (var i = 0; i < 2; i++)
|
for (var i = 0; i < 2; i++)
|
||||||
if (!char.IsLower(readLangCultureTag[i]))
|
if (!char.IsLower(readLangCultureTag[i]))
|
||||||
{
|
{
|
||||||
message = "The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code.";
|
message = TB("The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code.");
|
||||||
readLangCultureTag = string.Empty;
|
readLangCultureTag = string.Empty;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -92,7 +93,7 @@ public sealed class PluginLanguage : PluginBase, ILanguagePlugin
|
|||||||
for (var i = 3; i < 5; i++)
|
for (var i = 3; i < 5; i++)
|
||||||
if (!char.IsUpper(readLangCultureTag[i]))
|
if (!char.IsUpper(readLangCultureTag[i]))
|
||||||
{
|
{
|
||||||
message = "The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code.";
|
message = TB("The field IETF_TAG is not a valid IETF tag. Use a valid IETF tag like 'en-US'. The first part is the language, the second part is the country code.");
|
||||||
readLangCultureTag = string.Empty;
|
readLangCultureTag = string.Empty;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -105,14 +106,14 @@ public sealed class PluginLanguage : PluginBase, ILanguagePlugin
|
|||||||
{
|
{
|
||||||
if (!this.state.Environment["LANG_NAME"].TryRead(out readLangName))
|
if (!this.state.Environment["LANG_NAME"].TryRead(out readLangName))
|
||||||
{
|
{
|
||||||
message = "The field LANG_NAME does not exist or is not a valid string.";
|
message = TB("The field LANG_NAME does not exist or is not a valid string.");
|
||||||
readLangName = string.Empty;
|
readLangName = string.Empty;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(readLangName))
|
if (string.IsNullOrWhiteSpace(readLangName))
|
||||||
{
|
{
|
||||||
message = "The field LANG_NAME is empty. Use a valid language name.";
|
message = TB("The field LANG_NAME is empty. Use a valid language name.");
|
||||||
readLangName = string.Empty;
|
readLangName = string.Empty;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -2,24 +2,26 @@ namespace AIStudio.Tools.PluginSystem;
|
|||||||
|
|
||||||
public static class PluginTargetGroupExtensions
|
public static class PluginTargetGroupExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(PluginTargetGroupExtensions).Namespace, nameof(PluginTargetGroupExtensions));
|
||||||
|
|
||||||
public static string Name(this PluginTargetGroup group) => group switch
|
public static string Name(this PluginTargetGroup group) => group switch
|
||||||
{
|
{
|
||||||
PluginTargetGroup.NONE => "No target group",
|
PluginTargetGroup.NONE => TB("No target group"),
|
||||||
|
|
||||||
PluginTargetGroup.EVERYONE => "Everyone",
|
PluginTargetGroup.EVERYONE => TB("Everyone"),
|
||||||
PluginTargetGroup.CHILDREN => "Children",
|
PluginTargetGroup.CHILDREN => TB("Children"),
|
||||||
PluginTargetGroup.TEENAGERS => "Teenagers",
|
PluginTargetGroup.TEENAGERS => TB("Teenagers"),
|
||||||
PluginTargetGroup.STUDENTS => "Students",
|
PluginTargetGroup.STUDENTS => TB("Students"),
|
||||||
PluginTargetGroup.ADULTS => "Adults",
|
PluginTargetGroup.ADULTS => TB("Adults"),
|
||||||
|
|
||||||
PluginTargetGroup.INDUSTRIAL_WORKERS => "Industrial workers",
|
PluginTargetGroup.INDUSTRIAL_WORKERS => TB("Industrial workers"),
|
||||||
PluginTargetGroup.OFFICE_WORKERS => "Office workers",
|
PluginTargetGroup.OFFICE_WORKERS => TB("Office workers"),
|
||||||
PluginTargetGroup.BUSINESS_PROFESSIONALS => "Business professionals",
|
PluginTargetGroup.BUSINESS_PROFESSIONALS => TB("Business professionals"),
|
||||||
PluginTargetGroup.SOFTWARE_DEVELOPERS => "Software developers",
|
PluginTargetGroup.SOFTWARE_DEVELOPERS => TB("Software developers"),
|
||||||
PluginTargetGroup.SCIENTISTS => "Scientists",
|
PluginTargetGroup.SCIENTISTS => TB("Scientists"),
|
||||||
PluginTargetGroup.TEACHERS => "Teachers",
|
PluginTargetGroup.TEACHERS => TB("Teachers"),
|
||||||
PluginTargetGroup.ARTISTS => "Artists",
|
PluginTargetGroup.ARTISTS => TB("Artists"),
|
||||||
|
|
||||||
_ => "Unknown target group",
|
_ => TB("Unknown target group"),
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -2,14 +2,16 @@ namespace AIStudio.Tools.PluginSystem;
|
|||||||
|
|
||||||
public static class PluginTypeExtensions
|
public static class PluginTypeExtensions
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(PluginTypeExtensions).Namespace, nameof(PluginTypeExtensions));
|
||||||
|
|
||||||
public static string GetName(this PluginType type) => type switch
|
public static string GetName(this PluginType type) => type switch
|
||||||
{
|
{
|
||||||
PluginType.LANGUAGE => "Language plugin",
|
PluginType.LANGUAGE => TB("Language plugin"),
|
||||||
PluginType.ASSISTANT => "Assistant plugin",
|
PluginType.ASSISTANT => TB("Assistant plugin"),
|
||||||
PluginType.CONFIGURATION => "Configuration plugin",
|
PluginType.CONFIGURATION => TB("Configuration plugin"),
|
||||||
PluginType.THEME => "Theme plugin",
|
PluginType.THEME => TB("Theme plugin"),
|
||||||
|
|
||||||
_ => "Unknown plugin type",
|
_ => TB("Unknown plugin type"),
|
||||||
};
|
};
|
||||||
|
|
||||||
public static string GetDirectory(this PluginType type) => type switch
|
public static string GetDirectory(this PluginType type) => type switch
|
||||||
|
@ -4,21 +4,24 @@ using AIStudio.Agents;
|
|||||||
using AIStudio.Chat;
|
using AIStudio.Chat;
|
||||||
using AIStudio.Provider;
|
using AIStudio.Provider;
|
||||||
using AIStudio.Settings;
|
using AIStudio.Settings;
|
||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Tools.RAG.AugmentationProcesses;
|
namespace AIStudio.Tools.RAG.AugmentationProcesses;
|
||||||
|
|
||||||
public sealed class AugmentationOne : IAugmentationProcess
|
public sealed class AugmentationOne : IAugmentationProcess
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(AugmentationOne).Namespace, nameof(AugmentationOne));
|
||||||
|
|
||||||
#region Implementation of IAugmentationProcess
|
#region Implementation of IAugmentationProcess
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public string TechnicalName => "AugmentationOne";
|
public string TechnicalName => "AugmentationOne";
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public string UIName => "Standard augmentation process";
|
public string UIName => TB("Standard augmentation process");
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public string Description => "This is the standard augmentation process, which uses all retrieval contexts to augment the chat thread.";
|
public string Description => TB("This is the standard augmentation process, which uses all retrieval contexts to augment the chat thread.");
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public async Task<ChatThread> ProcessAsync(IProvider provider, IContent lastPrompt, ChatThread chatThread, IReadOnlyList<IRetrievalContext> retrievalContexts, CancellationToken token = default)
|
public async Task<ChatThread> ProcessAsync(IProvider provider, IContent lastPrompt, ChatThread chatThread, IReadOnlyList<IRetrievalContext> retrievalContexts, CancellationToken token = default)
|
||||||
|
@ -3,21 +3,24 @@ using AIStudio.Chat;
|
|||||||
using AIStudio.Components;
|
using AIStudio.Components;
|
||||||
using AIStudio.Provider;
|
using AIStudio.Provider;
|
||||||
using AIStudio.Settings;
|
using AIStudio.Settings;
|
||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Tools.RAG.DataSourceSelectionProcesses;
|
namespace AIStudio.Tools.RAG.DataSourceSelectionProcesses;
|
||||||
|
|
||||||
public class AgenticSrcSelWithDynHeur : IDataSourceSelectionProcess
|
public class AgenticSrcSelWithDynHeur : IDataSourceSelectionProcess
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(AgenticSrcSelWithDynHeur).Namespace, nameof(AgenticSrcSelWithDynHeur));
|
||||||
|
|
||||||
#region Implementation of IDataSourceSelectionProcess
|
#region Implementation of IDataSourceSelectionProcess
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public string TechnicalName => "AgenticSrcSelWithDynHeur";
|
public string TechnicalName => "AgenticSrcSelWithDynHeur";
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public string UIName => "Automatic AI data source selection with heuristik source reduction";
|
public string UIName => TB("Automatic AI data source selection with heuristik source reduction");
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public string Description => "Automatically selects the appropriate data sources based on the last prompt. Applies a heuristic reduction at the end to reduce the number of data sources.";
|
public string Description => TB("Automatically selects the appropriate data sources based on the last prompt. Applies a heuristic reduction at the end to reduce the number of data sources.");
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public async Task<DataSelectionResult> SelectDataSourcesAsync(IProvider provider, IContent lastPrompt, ChatThread chatThread, AllowedSelectedDataSources dataSources, CancellationToken token = default)
|
public async Task<DataSelectionResult> SelectDataSourcesAsync(IProvider provider, IContent lastPrompt, ChatThread chatThread, AllowedSelectedDataSources dataSources, CancellationToken token = default)
|
||||||
|
@ -2,6 +2,7 @@ using AIStudio.Chat;
|
|||||||
using AIStudio.Provider;
|
using AIStudio.Provider;
|
||||||
using AIStudio.Settings;
|
using AIStudio.Settings;
|
||||||
using AIStudio.Settings.DataModel;
|
using AIStudio.Settings.DataModel;
|
||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
using AIStudio.Tools.RAG.AugmentationProcesses;
|
using AIStudio.Tools.RAG.AugmentationProcesses;
|
||||||
using AIStudio.Tools.RAG.DataSourceSelectionProcesses;
|
using AIStudio.Tools.RAG.DataSourceSelectionProcesses;
|
||||||
using AIStudio.Tools.Services;
|
using AIStudio.Tools.Services;
|
||||||
@ -10,16 +11,18 @@ namespace AIStudio.Tools.RAG.RAGProcesses;
|
|||||||
|
|
||||||
public sealed class AISrcSelWithRetCtxVal : IRagProcess
|
public sealed class AISrcSelWithRetCtxVal : IRagProcess
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(AISrcSelWithRetCtxVal).Namespace, nameof(AISrcSelWithRetCtxVal));
|
||||||
|
|
||||||
#region Implementation of IRagProcess
|
#region Implementation of IRagProcess
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public string TechnicalName => "AISrcSelWithRetCtxVal";
|
public string TechnicalName => "AISrcSelWithRetCtxVal";
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public string UIName => "AI source selection with AI retrieval context validation";
|
public string UIName => TB("AI source selection with AI retrieval context validation");
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public string Description => "This RAG process filters data sources, automatically selects appropriate sources, optionally allows manual source selection, retrieves data, and automatically validates the retrieval context.";
|
public string Description => TB("This RAG process filters data sources, automatically selects appropriate sources, optionally allows manual source selection, retrieves data, and automatically validates the retrieval context.");
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public async Task<ChatThread> ProcessAsync(IProvider provider, IContent lastPrompt, ChatThread chatThread, CancellationToken token = default)
|
public async Task<ChatThread> ProcessAsync(IProvider provider, IContent lastPrompt, ChatThread chatThread, CancellationToken token = default)
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
// ReSharper disable NotAccessedPositionalProperty.Global
|
// ReSharper disable NotAccessedPositionalProperty.Global
|
||||||
|
|
||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Tools.Rust;
|
namespace AIStudio.Tools.Rust;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -8,11 +11,13 @@ namespace AIStudio.Tools.Rust;
|
|||||||
/// <param name="FilterExtensions">The file extensions associated with the filter.</param>
|
/// <param name="FilterExtensions">The file extensions associated with the filter.</param>
|
||||||
public readonly record struct FileTypeFilter(string FilterName, string[] FilterExtensions)
|
public readonly record struct FileTypeFilter(string FilterName, string[] FilterExtensions)
|
||||||
{
|
{
|
||||||
public static FileTypeFilter PDF => new("PDF Files", ["pdf"]);
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(FileTypeFilter).Namespace, nameof(FileTypeFilter));
|
||||||
|
|
||||||
public static FileTypeFilter Text => new("Text Files", ["txt", "md"]);
|
public static FileTypeFilter PDF => new(TB("PDF Files"), ["pdf"]);
|
||||||
|
|
||||||
public static FileTypeFilter AllOffice => new("All Office Files", ["docx", "xlsx", "pptx", "doc", "xls", "ppt", "pdf"]);
|
public static FileTypeFilter Text => new(TB("Text Files"), ["txt", "md"]);
|
||||||
|
|
||||||
public static FileTypeFilter AllImages => new("All Image Files", ["jpg", "jpeg", "png", "gif", "bmp", "tiff"]);
|
public static FileTypeFilter AllOffice => new(TB("All Office Files"), ["docx", "xlsx", "pptx", "doc", "xls", "ppt", "pdf"]);
|
||||||
|
|
||||||
|
public static FileTypeFilter AllImages => new(TB("All Image Files"), ["jpg", "jpeg", "png", "gif", "bmp", "tiff"]);
|
||||||
}
|
}
|
@ -1,9 +1,12 @@
|
|||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
using AIStudio.Tools.Rust;
|
using AIStudio.Tools.Rust;
|
||||||
|
|
||||||
namespace AIStudio.Tools.Services;
|
namespace AIStudio.Tools.Services;
|
||||||
|
|
||||||
public sealed partial class RustService
|
public sealed partial class RustService
|
||||||
{
|
{
|
||||||
|
private static string TB_APIKeys(string fallbackEN) => I18N.I.T(fallbackEN, typeof(RustService).Namespace, $"{nameof(RustService)}.APIKeys");
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Try to get the API key for the given secret ID.
|
/// Try to get the API key for the given secret ID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -12,13 +15,15 @@ public sealed partial class RustService
|
|||||||
/// <returns>The requested secret.</returns>
|
/// <returns>The requested secret.</returns>
|
||||||
public async Task<RequestedSecret> GetAPIKey(ISecretId secretId, bool isTrying = false)
|
public async Task<RequestedSecret> GetAPIKey(ISecretId secretId, bool isTrying = false)
|
||||||
{
|
{
|
||||||
|
static string TB(string fallbackEN) => TB_APIKeys(fallbackEN);
|
||||||
|
|
||||||
var secretRequest = new SelectSecretRequest($"provider::{secretId.SecretId}::{secretId.SecretName}::api_key", Environment.UserName, isTrying);
|
var secretRequest = new SelectSecretRequest($"provider::{secretId.SecretId}::{secretId.SecretName}::api_key", Environment.UserName, isTrying);
|
||||||
var result = await this.http.PostAsJsonAsync("/secrets/get", secretRequest, this.jsonRustSerializerOptions);
|
var result = await this.http.PostAsJsonAsync("/secrets/get", secretRequest, this.jsonRustSerializerOptions);
|
||||||
if (!result.IsSuccessStatusCode)
|
if (!result.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
if(!isTrying)
|
if(!isTrying)
|
||||||
this.logger!.LogError($"Failed to get the API key for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'");
|
this.logger!.LogError($"Failed to get the API key for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'");
|
||||||
return new RequestedSecret(false, new EncryptedText(string.Empty), "Failed to get the API key due to an API issue.");
|
return new RequestedSecret(false, new EncryptedText(string.Empty), TB("Failed to get the API key due to an API issue."));
|
||||||
}
|
}
|
||||||
|
|
||||||
var secret = await result.Content.ReadFromJsonAsync<RequestedSecret>(this.jsonRustSerializerOptions);
|
var secret = await result.Content.ReadFromJsonAsync<RequestedSecret>(this.jsonRustSerializerOptions);
|
||||||
@ -36,13 +41,15 @@ public sealed partial class RustService
|
|||||||
/// <returns>The store secret response.</returns>
|
/// <returns>The store secret response.</returns>
|
||||||
public async Task<StoreSecretResponse> SetAPIKey(ISecretId secretId, string key)
|
public async Task<StoreSecretResponse> SetAPIKey(ISecretId secretId, string key)
|
||||||
{
|
{
|
||||||
|
static string TB(string fallbackEN) => TB_APIKeys(fallbackEN);
|
||||||
|
|
||||||
var encryptedKey = await this.encryptor!.Encrypt(key);
|
var encryptedKey = await this.encryptor!.Encrypt(key);
|
||||||
var request = new StoreSecretRequest($"provider::{secretId.SecretId}::{secretId.SecretName}::api_key", Environment.UserName, encryptedKey);
|
var request = new StoreSecretRequest($"provider::{secretId.SecretId}::{secretId.SecretName}::api_key", Environment.UserName, encryptedKey);
|
||||||
var result = await this.http.PostAsJsonAsync("/secrets/store", request, this.jsonRustSerializerOptions);
|
var result = await this.http.PostAsJsonAsync("/secrets/store", request, this.jsonRustSerializerOptions);
|
||||||
if (!result.IsSuccessStatusCode)
|
if (!result.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
this.logger!.LogError($"Failed to store the API key for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'");
|
this.logger!.LogError($"Failed to store the API key for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'");
|
||||||
return new StoreSecretResponse(false, "Failed to get the API key due to an API issue.");
|
return new StoreSecretResponse(false, TB("Failed to get the API key due to an API issue."));
|
||||||
}
|
}
|
||||||
|
|
||||||
var state = await result.Content.ReadFromJsonAsync<StoreSecretResponse>(this.jsonRustSerializerOptions);
|
var state = await result.Content.ReadFromJsonAsync<StoreSecretResponse>(this.jsonRustSerializerOptions);
|
||||||
@ -59,12 +66,14 @@ public sealed partial class RustService
|
|||||||
/// <returns>The delete secret response.</returns>
|
/// <returns>The delete secret response.</returns>
|
||||||
public async Task<DeleteSecretResponse> DeleteAPIKey(ISecretId secretId)
|
public async Task<DeleteSecretResponse> DeleteAPIKey(ISecretId secretId)
|
||||||
{
|
{
|
||||||
|
static string TB(string fallbackEN) => TB_APIKeys(fallbackEN);
|
||||||
|
|
||||||
var request = new SelectSecretRequest($"provider::{secretId.SecretId}::{secretId.SecretName}::api_key", Environment.UserName, false);
|
var request = new SelectSecretRequest($"provider::{secretId.SecretId}::{secretId.SecretName}::api_key", Environment.UserName, false);
|
||||||
var result = await this.http.PostAsJsonAsync("/secrets/delete", request, this.jsonRustSerializerOptions);
|
var result = await this.http.PostAsJsonAsync("/secrets/delete", request, this.jsonRustSerializerOptions);
|
||||||
if (!result.IsSuccessStatusCode)
|
if (!result.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
this.logger!.LogError($"Failed to delete the API key for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'");
|
this.logger!.LogError($"Failed to delete the API key for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'");
|
||||||
return new DeleteSecretResponse{Success = false, WasEntryFound = false, Issue = "Failed to delete the API key due to an API issue."};
|
return new DeleteSecretResponse{Success = false, WasEntryFound = false, Issue = TB("Failed to delete the API key due to an API issue.")};
|
||||||
}
|
}
|
||||||
|
|
||||||
var state = await result.Content.ReadFromJsonAsync<DeleteSecretResponse>(this.jsonRustSerializerOptions);
|
var state = await result.Content.ReadFromJsonAsync<DeleteSecretResponse>(this.jsonRustSerializerOptions);
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
using AIStudio.Tools.Rust;
|
using AIStudio.Tools.Rust;
|
||||||
|
|
||||||
namespace AIStudio.Tools.Services;
|
namespace AIStudio.Tools.Services;
|
||||||
|
|
||||||
public sealed partial class RustService
|
public sealed partial class RustService
|
||||||
{
|
{
|
||||||
|
private static string TB_Clipboard(string fallbackEN) => I18N.I.T(fallbackEN, typeof(RustService).Namespace, $"{nameof(RustService)}.Clipboard");
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tries to copy the given text to the clipboard.
|
/// Tries to copy the given text to the clipboard.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -11,7 +14,9 @@ public sealed partial class RustService
|
|||||||
/// <param name="text">The text to copy to the clipboard.</param>
|
/// <param name="text">The text to copy to the clipboard.</param>
|
||||||
public async Task CopyText2Clipboard(ISnackbar snackbar, string text)
|
public async Task CopyText2Clipboard(ISnackbar snackbar, string text)
|
||||||
{
|
{
|
||||||
var message = "Successfully copied the text to your clipboard";
|
static string TB(string fallbackEN) => TB_Clipboard(fallbackEN);
|
||||||
|
|
||||||
|
var message = TB("Successfully copied the text to your clipboard");
|
||||||
var iconColor = Color.Error;
|
var iconColor = Color.Error;
|
||||||
var severity = Severity.Error;
|
var severity = Severity.Error;
|
||||||
try
|
try
|
||||||
@ -21,7 +26,7 @@ public sealed partial class RustService
|
|||||||
if (!response.IsSuccessStatusCode)
|
if (!response.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
this.logger!.LogError($"Failed to copy the text to the clipboard due to an network error: '{response.StatusCode}'");
|
this.logger!.LogError($"Failed to copy the text to the clipboard due to an network error: '{response.StatusCode}'");
|
||||||
message = "Failed to copy the text to your clipboard.";
|
message = TB("Failed to copy the text to your clipboard.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -29,7 +34,7 @@ public sealed partial class RustService
|
|||||||
if (!state.Success)
|
if (!state.Success)
|
||||||
{
|
{
|
||||||
this.logger!.LogError("Failed to copy the text to the clipboard.");
|
this.logger!.LogError("Failed to copy the text to the clipboard.");
|
||||||
message = "Failed to copy the text to your clipboard.";
|
message = TB("Failed to copy the text to your clipboard.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
using AIStudio.Tools.Rust;
|
using AIStudio.Tools.Rust;
|
||||||
|
|
||||||
namespace AIStudio.Tools.Services;
|
namespace AIStudio.Tools.Services;
|
||||||
|
|
||||||
public sealed partial class RustService
|
public sealed partial class RustService
|
||||||
{
|
{
|
||||||
|
private static string TB_Secrets(string fallbackEN) => I18N.I.T(fallbackEN, typeof(RustService).Namespace, $"{nameof(RustService)}.Secrets");
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Try to get the secret data for the given secret ID.
|
/// Try to get the secret data for the given secret ID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -12,13 +15,15 @@ public sealed partial class RustService
|
|||||||
/// <returns>The requested secret.</returns>
|
/// <returns>The requested secret.</returns>
|
||||||
public async Task<RequestedSecret> GetSecret(ISecretId secretId, bool isTrying = false)
|
public async Task<RequestedSecret> GetSecret(ISecretId secretId, bool isTrying = false)
|
||||||
{
|
{
|
||||||
|
static string TB(string fallbackEN) => TB_Secrets(fallbackEN);
|
||||||
|
|
||||||
var secretRequest = new SelectSecretRequest($"secret::{secretId.SecretId}::{secretId.SecretName}", Environment.UserName, isTrying);
|
var secretRequest = new SelectSecretRequest($"secret::{secretId.SecretId}::{secretId.SecretName}", Environment.UserName, isTrying);
|
||||||
var result = await this.http.PostAsJsonAsync("/secrets/get", secretRequest, this.jsonRustSerializerOptions);
|
var result = await this.http.PostAsJsonAsync("/secrets/get", secretRequest, this.jsonRustSerializerOptions);
|
||||||
if (!result.IsSuccessStatusCode)
|
if (!result.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
if(!isTrying)
|
if(!isTrying)
|
||||||
this.logger!.LogError($"Failed to get the secret data for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'");
|
this.logger!.LogError($"Failed to get the secret data for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'");
|
||||||
return new RequestedSecret(false, new EncryptedText(string.Empty), "Failed to get the secret data due to an API issue.");
|
return new RequestedSecret(false, new EncryptedText(string.Empty), TB("Failed to get the secret data due to an API issue."));
|
||||||
}
|
}
|
||||||
|
|
||||||
var secret = await result.Content.ReadFromJsonAsync<RequestedSecret>(this.jsonRustSerializerOptions);
|
var secret = await result.Content.ReadFromJsonAsync<RequestedSecret>(this.jsonRustSerializerOptions);
|
||||||
@ -36,13 +41,15 @@ public sealed partial class RustService
|
|||||||
/// <returns>The store secret response.</returns>
|
/// <returns>The store secret response.</returns>
|
||||||
public async Task<StoreSecretResponse> SetSecret(ISecretId secretId, string secretData)
|
public async Task<StoreSecretResponse> SetSecret(ISecretId secretId, string secretData)
|
||||||
{
|
{
|
||||||
|
static string TB(string fallbackEN) => TB_Secrets(fallbackEN);
|
||||||
|
|
||||||
var encryptedSecret = await this.encryptor!.Encrypt(secretData);
|
var encryptedSecret = await this.encryptor!.Encrypt(secretData);
|
||||||
var request = new StoreSecretRequest($"secret::{secretId.SecretId}::{secretId.SecretName}", Environment.UserName, encryptedSecret);
|
var request = new StoreSecretRequest($"secret::{secretId.SecretId}::{secretId.SecretName}", Environment.UserName, encryptedSecret);
|
||||||
var result = await this.http.PostAsJsonAsync("/secrets/store", request, this.jsonRustSerializerOptions);
|
var result = await this.http.PostAsJsonAsync("/secrets/store", request, this.jsonRustSerializerOptions);
|
||||||
if (!result.IsSuccessStatusCode)
|
if (!result.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
this.logger!.LogError($"Failed to store the secret data for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'");
|
this.logger!.LogError($"Failed to store the secret data for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'");
|
||||||
return new StoreSecretResponse(false, "Failed to get the secret data due to an API issue.");
|
return new StoreSecretResponse(false, TB("Failed to get the secret data due to an API issue."));
|
||||||
}
|
}
|
||||||
|
|
||||||
var state = await result.Content.ReadFromJsonAsync<StoreSecretResponse>(this.jsonRustSerializerOptions);
|
var state = await result.Content.ReadFromJsonAsync<StoreSecretResponse>(this.jsonRustSerializerOptions);
|
||||||
@ -59,12 +66,14 @@ public sealed partial class RustService
|
|||||||
/// <returns>The delete secret response.</returns>
|
/// <returns>The delete secret response.</returns>
|
||||||
public async Task<DeleteSecretResponse> DeleteSecret(ISecretId secretId)
|
public async Task<DeleteSecretResponse> DeleteSecret(ISecretId secretId)
|
||||||
{
|
{
|
||||||
|
static string TB(string fallbackEN) => TB_Secrets(fallbackEN);
|
||||||
|
|
||||||
var request = new SelectSecretRequest($"secret::{secretId.SecretId}::{secretId.SecretName}", Environment.UserName, false);
|
var request = new SelectSecretRequest($"secret::{secretId.SecretId}::{secretId.SecretName}", Environment.UserName, false);
|
||||||
var result = await this.http.PostAsJsonAsync("/secrets/delete", request, this.jsonRustSerializerOptions);
|
var result = await this.http.PostAsJsonAsync("/secrets/delete", request, this.jsonRustSerializerOptions);
|
||||||
if (!result.IsSuccessStatusCode)
|
if (!result.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
this.logger!.LogError($"Failed to delete the secret data for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'");
|
this.logger!.LogError($"Failed to delete the secret data for secret ID '{secretId.SecretId}' due to an API issue: '{result.StatusCode}'");
|
||||||
return new DeleteSecretResponse{Success = false, WasEntryFound = false, Issue = "Failed to delete the secret data due to an API issue."};
|
return new DeleteSecretResponse{Success = false, WasEntryFound = false, Issue = TB("Failed to delete the secret data due to an API issue.")};
|
||||||
}
|
}
|
||||||
|
|
||||||
var state = await result.Content.ReadFromJsonAsync<DeleteSecretResponse>(this.jsonRustSerializerOptions);
|
var state = await result.Content.ReadFromJsonAsync<DeleteSecretResponse>(this.jsonRustSerializerOptions);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using AIStudio.Settings;
|
using AIStudio.Settings;
|
||||||
using AIStudio.Settings.DataModel;
|
using AIStudio.Settings.DataModel;
|
||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
|
|
||||||
@ -7,6 +8,8 @@ namespace AIStudio.Tools.Services;
|
|||||||
|
|
||||||
public sealed class UpdateService : BackgroundService, IMessageBusReceiver
|
public sealed class UpdateService : BackgroundService, IMessageBusReceiver
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(UpdateService).Namespace, nameof(UpdateService));
|
||||||
|
|
||||||
private static bool IS_INITIALIZED;
|
private static bool IS_INITIALIZED;
|
||||||
private static ISnackbar? SNACKBAR;
|
private static ISnackbar? SNACKBAR;
|
||||||
|
|
||||||
@ -118,7 +121,7 @@ public sealed class UpdateService : BackgroundService, IMessageBusReceiver
|
|||||||
{
|
{
|
||||||
if (notifyUserWhenNoUpdate)
|
if (notifyUserWhenNoUpdate)
|
||||||
{
|
{
|
||||||
SNACKBAR!.Add("No update found.", Severity.Normal, config =>
|
SNACKBAR!.Add(TB("No update found."), Severity.Normal, config =>
|
||||||
{
|
{
|
||||||
config.Icon = Icons.Material.Filled.Update;
|
config.Icon = Icons.Material.Filled.Update;
|
||||||
config.IconSize = Size.Large;
|
config.IconSize = Size.Large;
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
using AIStudio.Settings.DataModel;
|
using AIStudio.Settings.DataModel;
|
||||||
using AIStudio.Tools.ERIClient.DataModel;
|
using AIStudio.Tools.ERIClient.DataModel;
|
||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Tools.Validation;
|
namespace AIStudio.Tools.Validation;
|
||||||
|
|
||||||
public sealed class DataSourceValidation
|
public sealed class DataSourceValidation
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(DataSourceValidation).Namespace, nameof(DataSourceValidation));
|
||||||
|
|
||||||
public Func<string> GetSecretStorageIssue { get; init; } = () => string.Empty;
|
public Func<string> GetSecretStorageIssue { get; init; } = () => string.Empty;
|
||||||
|
|
||||||
public Func<string> GetPreviousDataSourceName { get; init; } = () => string.Empty;
|
public Func<string> GetPreviousDataSourceName { get; init; } = () => string.Empty;
|
||||||
@ -26,13 +29,13 @@ public sealed class DataSourceValidation
|
|||||||
public string? ValidatingHostname(string hostname)
|
public string? ValidatingHostname(string hostname)
|
||||||
{
|
{
|
||||||
if(string.IsNullOrWhiteSpace(hostname))
|
if(string.IsNullOrWhiteSpace(hostname))
|
||||||
return "Please enter a hostname, e.g., http://localhost";
|
return TB("Please enter a hostname, e.g., http://localhost");
|
||||||
|
|
||||||
if(!hostname.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase) && !hostname.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase))
|
if(!hostname.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase) && !hostname.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase))
|
||||||
return "The hostname must start with either http:// or https://";
|
return TB("The hostname must start with either http:// or https://");
|
||||||
|
|
||||||
if(!Uri.TryCreate(hostname, UriKind.Absolute, out _))
|
if(!Uri.TryCreate(hostname, UriKind.Absolute, out _))
|
||||||
return "The hostname is not a valid HTTP(S) URL.";
|
return TB("The hostname is not a valid HTTP(S) URL.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -40,7 +43,7 @@ public sealed class DataSourceValidation
|
|||||||
public string? ValidatePort(int port)
|
public string? ValidatePort(int port)
|
||||||
{
|
{
|
||||||
if(port is < 1 or > 65535)
|
if(port is < 1 or > 65535)
|
||||||
return "The port must be between 1 and 65535.";
|
return TB("The port must be between 1 and 65535.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -48,14 +51,14 @@ public sealed class DataSourceValidation
|
|||||||
public string? ValidateSecurityPolicy(DataSourceSecurity securityPolicy)
|
public string? ValidateSecurityPolicy(DataSourceSecurity securityPolicy)
|
||||||
{
|
{
|
||||||
if(securityPolicy is DataSourceSecurity.NOT_SPECIFIED)
|
if(securityPolicy is DataSourceSecurity.NOT_SPECIFIED)
|
||||||
return "Please select your security policy.";
|
return TB("Please select your security policy.");
|
||||||
|
|
||||||
var dataSourceSecurity = this.GetSecurityRequirements();
|
var dataSourceSecurity = this.GetSecurityRequirements();
|
||||||
if (dataSourceSecurity is null)
|
if (dataSourceSecurity is null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if(dataSourceSecurity.Value.AllowedProviderType is ProviderType.SELF_HOSTED && securityPolicy is not DataSourceSecurity.SELF_HOSTED)
|
if(dataSourceSecurity.Value.AllowedProviderType is ProviderType.SELF_HOSTED && securityPolicy is not DataSourceSecurity.SELF_HOSTED)
|
||||||
return "This data source can only be used with a self-hosted LLM provider. Please change the security policy.";
|
return TB("This data source can only be used with a self-hosted LLM provider. Please change the security policy.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -66,7 +69,7 @@ public sealed class DataSourceValidation
|
|||||||
return null;
|
return null;
|
||||||
|
|
||||||
if(string.IsNullOrWhiteSpace(username))
|
if(string.IsNullOrWhiteSpace(username))
|
||||||
return "The username must not be empty.";
|
return TB("The username must not be empty.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -84,10 +87,10 @@ public sealed class DataSourceValidation
|
|||||||
if (string.IsNullOrWhiteSpace(secret))
|
if (string.IsNullOrWhiteSpace(secret))
|
||||||
return authMethod switch
|
return authMethod switch
|
||||||
{
|
{
|
||||||
AuthMethod.TOKEN => "Please enter your secure access token.",
|
AuthMethod.TOKEN => TB("Please enter your secure access token."),
|
||||||
AuthMethod.USERNAME_PASSWORD => "Please enter your password.",
|
AuthMethod.USERNAME_PASSWORD => TB("Please enter your password."),
|
||||||
|
|
||||||
_ => "Please enter the secret necessary for authentication."
|
_ => TB("Please enter the secret necessary for authentication.")
|
||||||
};
|
};
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@ -96,7 +99,7 @@ public sealed class DataSourceValidation
|
|||||||
public string? ValidateRetrievalProcess(RetrievalInfo retrievalInfo)
|
public string? ValidateRetrievalProcess(RetrievalInfo retrievalInfo)
|
||||||
{
|
{
|
||||||
if(retrievalInfo == default)
|
if(retrievalInfo == default)
|
||||||
return "Please select one retrieval process.";
|
return TB("Please select one retrieval process.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -104,14 +107,14 @@ public sealed class DataSourceValidation
|
|||||||
public string? ValidatingName(string dataSourceName)
|
public string? ValidatingName(string dataSourceName)
|
||||||
{
|
{
|
||||||
if(string.IsNullOrWhiteSpace(dataSourceName))
|
if(string.IsNullOrWhiteSpace(dataSourceName))
|
||||||
return "The name must not be empty.";
|
return TB("The name must not be empty.");
|
||||||
|
|
||||||
if (dataSourceName.Length > 40)
|
if (dataSourceName.Length > 40)
|
||||||
return "The name must not exceed 40 characters.";
|
return TB("The name must not exceed 40 characters.");
|
||||||
|
|
||||||
var lowerName = dataSourceName.ToLowerInvariant();
|
var lowerName = dataSourceName.ToLowerInvariant();
|
||||||
if(lowerName != this.GetPreviousDataSourceName() && this.GetUsedDataSourceNames().Contains(lowerName))
|
if(lowerName != this.GetPreviousDataSourceName() && this.GetUsedDataSourceNames().Contains(lowerName))
|
||||||
return "The name is already used by another data source. Please choose a different name.";
|
return TB("The name is already used by another data source. Please choose a different name.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -119,10 +122,10 @@ public sealed class DataSourceValidation
|
|||||||
public string? ValidatePath(string path)
|
public string? ValidatePath(string path)
|
||||||
{
|
{
|
||||||
if(string.IsNullOrWhiteSpace(path))
|
if(string.IsNullOrWhiteSpace(path))
|
||||||
return "The path must not be empty. Please select a directory.";
|
return TB("The path must not be empty. Please select a directory.");
|
||||||
|
|
||||||
if(!Directory.Exists(path))
|
if(!Directory.Exists(path))
|
||||||
return "The path does not exist. Please select a valid directory.";
|
return TB("The path does not exist. Please select a valid directory.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -130,10 +133,10 @@ public sealed class DataSourceValidation
|
|||||||
public string? ValidateFilePath(string filePath)
|
public string? ValidateFilePath(string filePath)
|
||||||
{
|
{
|
||||||
if(string.IsNullOrWhiteSpace(filePath))
|
if(string.IsNullOrWhiteSpace(filePath))
|
||||||
return "The file path must not be empty. Please select a file.";
|
return TB("The file path must not be empty. Please select a file.");
|
||||||
|
|
||||||
if(!File.Exists(filePath))
|
if(!File.Exists(filePath))
|
||||||
return "The file does not exist. Please select a valid file.";
|
return TB("The file does not exist. Please select a valid file.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -141,7 +144,7 @@ public sealed class DataSourceValidation
|
|||||||
public string? ValidateEmbeddingId(string embeddingId)
|
public string? ValidateEmbeddingId(string embeddingId)
|
||||||
{
|
{
|
||||||
if(string.IsNullOrWhiteSpace(embeddingId))
|
if(string.IsNullOrWhiteSpace(embeddingId))
|
||||||
return "Please select an embedding provider.";
|
return TB("Please select an embedding provider.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -149,7 +152,7 @@ public sealed class DataSourceValidation
|
|||||||
public string? ValidateUserAcknowledgedCloudEmbedding(bool value)
|
public string? ValidateUserAcknowledgedCloudEmbedding(bool value)
|
||||||
{
|
{
|
||||||
if(this.GetSelectedCloudEmbedding() && !value)
|
if(this.GetSelectedCloudEmbedding() && !value)
|
||||||
return "Please acknowledge that you are aware of the cloud embedding implications.";
|
return TB("Please acknowledge that you are aware of the cloud embedding implications.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -157,10 +160,10 @@ public sealed class DataSourceValidation
|
|||||||
public string? ValidateTestedConnection()
|
public string? ValidateTestedConnection()
|
||||||
{
|
{
|
||||||
if(!this.GetTestedConnection())
|
if(!this.GetTestedConnection())
|
||||||
return "Please test the connection before saving.";
|
return TB("Please test the connection before saving.");
|
||||||
|
|
||||||
if(!this.GetTestedConnectionResult())
|
if(!this.GetTestedConnectionResult())
|
||||||
return "The connection test failed. Please check the connection settings.";
|
return TB("The connection test failed. Please check the connection settings.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -168,7 +171,7 @@ public sealed class DataSourceValidation
|
|||||||
public string? ValidateAuthMethod(AuthMethod authMethod)
|
public string? ValidateAuthMethod(AuthMethod authMethod)
|
||||||
{
|
{
|
||||||
if(!this.GetAvailableAuthMethods().Contains(authMethod))
|
if(!this.GetAvailableAuthMethods().Contains(authMethod))
|
||||||
return "Please select one valid authentication method.";
|
return TB("Please select one valid authentication method.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,15 @@
|
|||||||
using AIStudio.Provider;
|
using AIStudio.Provider;
|
||||||
using AIStudio.Provider.HuggingFace;
|
using AIStudio.Provider.HuggingFace;
|
||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
using Host = AIStudio.Provider.SelfHosted.Host;
|
using Host = AIStudio.Provider.SelfHosted.Host;
|
||||||
|
|
||||||
namespace AIStudio.Tools.Validation;
|
namespace AIStudio.Tools.Validation;
|
||||||
|
|
||||||
public sealed class ProviderValidation
|
public sealed class ProviderValidation
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ProviderValidation).Namespace, nameof(ProviderValidation));
|
||||||
|
|
||||||
public Func<LLMProviders> GetProvider { get; init; } = () => LLMProviders.NONE;
|
public Func<LLMProviders> GetProvider { get; init; } = () => LLMProviders.NONE;
|
||||||
|
|
||||||
public Func<string> GetAPIKeyStorageIssue { get; init; } = () => string.Empty;
|
public Func<string> GetAPIKeyStorageIssue { get; init; } = () => string.Empty;
|
||||||
@ -22,13 +26,13 @@ public sealed class ProviderValidation
|
|||||||
return null;
|
return null;
|
||||||
|
|
||||||
if(string.IsNullOrWhiteSpace(hostname))
|
if(string.IsNullOrWhiteSpace(hostname))
|
||||||
return "Please enter a hostname, e.g., http://localhost:1234";
|
return TB("Please enter a hostname, e.g., http://localhost:1234");
|
||||||
|
|
||||||
if(!hostname.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase) && !hostname.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase))
|
if(!hostname.StartsWith("http://", StringComparison.InvariantCultureIgnoreCase) && !hostname.StartsWith("https://", StringComparison.InvariantCultureIgnoreCase))
|
||||||
return "The hostname must start with either http:// or https://";
|
return TB("The hostname must start with either http:// or https://");
|
||||||
|
|
||||||
if(!Uri.TryCreate(hostname, UriKind.Absolute, out _))
|
if(!Uri.TryCreate(hostname, UriKind.Absolute, out _))
|
||||||
return "The hostname is not a valid HTTP(S) URL.";
|
return TB("The hostname is not a valid HTTP(S) URL.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -43,7 +47,7 @@ public sealed class ProviderValidation
|
|||||||
return apiKeyStorageIssue;
|
return apiKeyStorageIssue;
|
||||||
|
|
||||||
if(string.IsNullOrWhiteSpace(apiKey))
|
if(string.IsNullOrWhiteSpace(apiKey))
|
||||||
return "Please enter an API key.";
|
return TB("Please enter an API key.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -51,15 +55,15 @@ public sealed class ProviderValidation
|
|||||||
public string? ValidatingInstanceName(string instanceName)
|
public string? ValidatingInstanceName(string instanceName)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(instanceName))
|
if (string.IsNullOrWhiteSpace(instanceName))
|
||||||
return "Please enter an instance name.";
|
return TB("Please enter an instance name.");
|
||||||
|
|
||||||
if (instanceName.Length > 40)
|
if (instanceName.Length > 40)
|
||||||
return "The instance name must not exceed 40 characters.";
|
return TB("The instance name must not exceed 40 characters.");
|
||||||
|
|
||||||
// The instance name must be unique:
|
// The instance name must be unique:
|
||||||
var lowerInstanceName = instanceName.ToLowerInvariant();
|
var lowerInstanceName = instanceName.ToLowerInvariant();
|
||||||
if (lowerInstanceName != this.GetPreviousInstanceName() && this.GetUsedInstanceNames().Contains(lowerInstanceName))
|
if (lowerInstanceName != this.GetPreviousInstanceName() && this.GetUsedInstanceNames().Contains(lowerInstanceName))
|
||||||
return "The instance name must be unique; the chosen name is already in use.";
|
return TB("The instance name must be unique; the chosen name is already in use.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -70,7 +74,7 @@ public sealed class ProviderValidation
|
|||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (model == default)
|
if (model == default)
|
||||||
return "Please select a model.";
|
return TB("Please select a model.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -78,7 +82,7 @@ public sealed class ProviderValidation
|
|||||||
public string? ValidatingProvider(LLMProviders llmProvider)
|
public string? ValidatingProvider(LLMProviders llmProvider)
|
||||||
{
|
{
|
||||||
if (llmProvider == LLMProviders.NONE)
|
if (llmProvider == LLMProviders.NONE)
|
||||||
return "Please select a provider.";
|
return TB("Please select a provider.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -89,7 +93,7 @@ public sealed class ProviderValidation
|
|||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (host == Host.NONE)
|
if (host == Host.NONE)
|
||||||
return "Please select a host.";
|
return TB("Please select a host.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -100,7 +104,7 @@ public sealed class ProviderValidation
|
|||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (inferenceProvider is HFInferenceProvider.NONE)
|
if (inferenceProvider is HFInferenceProvider.NONE)
|
||||||
return "Please select an Hugging Face inference provider.";
|
return TB("Please select an Hugging Face inference provider.");
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -5,11 +5,14 @@ using System.Text.Json.Serialization;
|
|||||||
using AIStudio.Chat;
|
using AIStudio.Chat;
|
||||||
using AIStudio.Dialogs;
|
using AIStudio.Dialogs;
|
||||||
using AIStudio.Settings;
|
using AIStudio.Settings;
|
||||||
|
using AIStudio.Tools.PluginSystem;
|
||||||
|
|
||||||
namespace AIStudio.Tools;
|
namespace AIStudio.Tools;
|
||||||
|
|
||||||
public static class WorkspaceBehaviour
|
public static class WorkspaceBehaviour
|
||||||
{
|
{
|
||||||
|
private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(WorkspaceBehaviour).Namespace, nameof(WorkspaceBehaviour));
|
||||||
|
|
||||||
public static readonly JsonSerializerOptions JSON_OPTIONS = new()
|
public static readonly JsonSerializerOptions JSON_OPTIONS = new()
|
||||||
{
|
{
|
||||||
WriteIndented = true,
|
WriteIndented = true,
|
||||||
@ -97,13 +100,13 @@ public static class WorkspaceBehaviour
|
|||||||
{
|
{
|
||||||
"Message", (chat.WorkspaceId == Guid.Empty) switch
|
"Message", (chat.WorkspaceId == Guid.Empty) switch
|
||||||
{
|
{
|
||||||
true => $"Are you sure you want to delete the temporary chat '{chat.Name}'?",
|
true => TB($"Are you sure you want to delete the temporary chat '{chat.Name}'?"),
|
||||||
false => $"Are you sure you want to delete the chat '{chat.Name}' in the workspace '{workspaceName}'?",
|
false => TB($"Are you sure you want to delete the chat '{chat.Name}' in the workspace '{workspaceName}'?"),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
var dialogReference = await dialogService.ShowAsync<ConfirmDialog>("Delete Chat", dialogParameters, Dialogs.DialogOptions.FULLSCREEN);
|
var dialogReference = await dialogService.ShowAsync<ConfirmDialog>(TB("Delete Chat"), dialogParameters, Dialogs.DialogOptions.FULLSCREEN);
|
||||||
var dialogResult = await dialogReference.Result;
|
var dialogResult = await dialogReference.Result;
|
||||||
if (dialogResult is null || dialogResult.Canceled)
|
if (dialogResult is null || dialogResult.Canceled)
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user