Files
AI-Studio/app/MindWork AI Studio/Plugins/configuration/plugin.lua
T

1748 lines
105 KiB
Lua

require("icon")
-- ------
-- This is an example of a configuration plugin. Please replace
-- the placeholders and assign a valid ID.
-- All IDs should be lower-case.
-- ------
-- The ID for this plugin:
ID = "00000000-0000-0000-0000-000000000000"
-- The icon for the plugin:
ICON_SVG = SVG
-- The name of the plugin:
NAME = "<Company Name> - Configuration for <Department Name>"
-- The description of the plugin:
DESCRIPTION = "This is a pre-defined configuration of <Company Name>"
-- The version of the plugin:
VERSION = "1.0.0"
-- When this plugin was last changed, in UTC, formatted as YYYY-MM-DDTHH:MM:SSZ. Optional.
LAST_CHANGED = "2025-12-31T12:00:00Z"
-- The type of the plugin:
TYPE = "CONFIGURATION"
-- True when this plugin is deployed by an enterprise configuration server:
DEPLOYED_USING_CONFIG_SERVER = false
-- The priority of this configuration plugin. Optional, defaults to 0.
--
-- It only matters when your organization deploys more than one configuration
-- plugin. A plugin with a higher priority is applied later and therefore wins
-- whenever two of your configuration plugins manage the same setting or define
-- the same object, e.g. the same LLM provider.
--
-- A typical setup: deploy one base configuration for everybody with PRIORITY = 0
-- and one configuration per department with PRIORITY = 100. The department
-- configuration may then override the default model, while everything it does
-- not mention stays at the values of the base configuration.
--
-- Give two plugins that must override each other different priorities. With an
-- equal priority, the order is stable but arbitrary.
--
-- The priority never lifts a local configuration plugin above one of your
-- organization: configuration plugins your IT department deployed are always
-- applied first, whatever a local plugin declares.
PRIORITY = 0
-- The authors of the plugin:
AUTHORS = {"<Company Name>"}
-- The support contact for the plugin:
SUPPORT_CONTACT = "<IT Department of Company Name>"
-- The source URL for the plugin. Can be a HTTP(S) URL or an mailto link.
-- You may link to an internal documentation page, a Git repository, or
-- to a support or wiki page.
--
-- A mailto link could look like:
-- SOURCE_URL = "mailto:helpdesk@company.org?subject=Help"
SOURCE_URL = "<Any internal Git repository>"
-- The categories for the plugin:
CATEGORIES = { "CORE" }
-- The target groups for the plugin:
TARGET_GROUPS = { "EVERYONE" }
-- The flag for whether the plugin is maintained:
IS_MAINTAINED = true
-- When the plugin is deprecated, this message will be shown to users:
DEPRECATION_MESSAGE = ""
CONFIG = {}
CONFIG["LLM_PROVIDERS"] = {}
-- An example of a configuration for a self-hosted server:
-- CONFIG["LLM_PROVIDERS"][#CONFIG["LLM_PROVIDERS"]+1] = {
-- ["Id"] = "00000000-0000-0000-0000-000000000000",
-- ["InstanceName"] = "<user-friendly name for the combination of server and model>",
-- ["UsedLLMProvider"] = "SELF_HOSTED",
--
-- -- Allowed values for Host are: LM_STUDIO, LLAMA_CPP, OLLAMA, VLLM, and LLMMAN
-- ["Host"] = "OLLAMA",
-- ["Hostname"] = "<https address of the server>",
--
-- -- Optional: Additional parameters for the API.
-- -- Please refer to the documentation of the selected host for details.
-- -- Might be something like ... \"temperature\": 0.5 ... for one parameter.
-- -- Could be something like ... \"temperature\": 0.5, \"max_tokens\": 1000 ... for multiple parameters.
-- -- Recognized reasoning parameters, such as reasoning_effort, thinking, think, and chat_template_kwargs.enable_thinking, may affect whether AI Studio shows the reasoning icon for this provider.
-- -- Please do not add the enclosing curly braces {} here. Also, no trailing comma is allowed.
-- ["AdditionalJsonApiParameters"] = "",
--
-- -- Optional: tokenizer path for this provider relative to the plugin directory.
-- -- ["TokenizerPath"] = "",
--
-- -- Optional: replace the built-in provider logo with a project-specific icon.
-- -- The path is relative to this plugin.lua and must point to an SVG file inside
-- -- this plugin directory, for example: assets/project-icon.svg. Absolute paths,
-- -- parent-directory segments (..), links leaving the plugin directory, files
-- -- larger than 32 KiB, and files which are not well-formed SVG are rejected.
-- -- An invalid or missing icon logs a warning while the provider still loads
-- -- with its built-in logo. AI Studio shows every icon in an isolated image
-- -- element, so scripts or external references inside an SVG never run; for the
-- -- same reason, the icon cannot inherit colors from the app and has to bring
-- -- its own. Provide a single icon with enough contrast on both light and dark
-- -- surfaces.
-- -- ["IconPath"] = "assets/project-icon.svg",
--
-- -- Optional: expert overrides for the model behind this provider. Missing keys keep the
-- -- automatic answer, and each key contradicts only what it names.
-- --
-- -- What the model can do. Allowed keys are exactly:
-- -- AUDIO_INPUT, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, SPEECH_INPUT, VIDEO_INPUT,
-- -- OPTIONAL_REASONING, ALWAYS_REASONING, REASONING_BY_DEFAULT
-- -- Allowed values are booleans only.
-- -- For default-on reasoning (thinking), set OPTIONAL_REASONING and REASONING_BY_DEFAULT to true.
-- -- ALWAYS_REASONING means the model cannot disable reasoning (thinking).
-- --
-- -- How much the model reads and how many images it takes. Allowed keys are exactly:
-- -- CONTEXT_WINDOW, MAX_IMAGES_PER_MESSAGE, MAX_IMAGES_PER_REQUEST
-- -- Allowed values are whole numbers: tokens greater than zero for the window, and images of
-- -- zero or more for the two limits, where zero means the model is configured to take none.
-- -- These are the same key names a model plugin uses for the same questions, but they say
-- -- something narrower here: a model plugin describes a model wherever it is reached, while
-- -- these describe this one installation of it. State what your deployment actually does --
-- -- for a self-hosted engine, the window your operator configured rather than the one the
-- -- model card advertises.
-- -- CONTEXT_WINDOW feeds the token counter AI Studio shows below the chat input, so a wrong
-- -- number here misleads users about how much room they have left.
-- -- ["CapabilityOverrides"] = {
-- -- ["VIDEO_INPUT"] = false,
-- -- ["CONTEXT_WINDOW"] = 32768,
-- -- ["MAX_IMAGES_PER_REQUEST"] = 4,
-- -- },
--
-- -- Optional: Hugging Face inference provider. Only relevant for UsedLLMProvider = HUGGINGFACE.
-- -- Allowed values are: BASETEN, CEREBRAS, COHERE, DEEPINFRA, FEATHERLESS_AI, FIREWORKS, GROQ,
-- -- NOVITA, NSCALE, OVHCLOUD, PUBLIC_AI, SCALEWAY, TOGETHER_AI, ZAI
-- -- Instead of naming a provider, you may let Hugging Face choose one:
-- -- AUTOMATIC (the fastest), CHEAPEST, or PREFERRED (the order configured in your
-- -- Hugging Face account). An automatic choice also fails over to another provider when the
-- -- selected one is unavailable.
-- -- Note: Hugging Face stopped routing HYPERBOLIC, SAMBANOVA, and NEBIUS_AI_STUDIO in July
-- -- 2026, and HF_INFERENCE_API serves no models we can reach. Configurations still naming one
-- -- of them are treated as if no provider was set, and the user is asked to choose again.
-- -- ["HFInferenceProvider"] = "NOVITA",
--
-- -- Optional: Encrypted API key for cloud providers or secured on-premise models.
-- -- The API key must be encrypted using the enterprise encryption secret.
-- -- Format: "ENC:v2:<base64-encoded encrypted data>", which AI Studio v26.10.1 or newer reads,
-- -- or "ENC:v1:<base64-encoded encrypted data>", which every version of AI Studio reads. Both
-- -- formats use the same secret. DataApp.EnterpriseEncryptionExportFormat below decides which
-- -- one your exports write.
-- -- The encryption secret must be configured via:
-- -- Windows Registry: HKEY_CURRENT_USER\Software\github\MindWork AI Studio\Enterprise IT\config_encryption_secret
-- -- Environment variable: MINDWORK_AI_STUDIO_ENTERPRISE_CONFIG_ENCRYPTION_SECRET
-- -- You can export an encrypted API key from an existing provider using the export button in the settings.
-- -- ["APIKey"] = "ENC:v2:<base64-encoded encrypted data>",
--
-- -- Optional: let each user set their own API key for this otherwise locked provider,
-- -- instead of (or in addition to not) embedding one centrally. Host, model, instance
-- -- name, and every other field stay locked; only the API key becomes editable.
-- -- Mutually exclusive with "APIKey" above: when both are set, the embedded key is
-- -- ignored and a warning is logged. The user's key is preserved in the OS keyring even
-- -- if this configuration is later withdrawn.
-- -- ["AllowUserProvidedAPIKey"] = true,
--
-- -- Optional: ask the user for their API key in a panel on the home page, as long as this
-- -- provider has none. All providers of this plugin which set this option share one panel
-- -- and receive the same key, so the user enters it once. Implies "AllowUserProvidedAPIKey".
-- -- Explain how to obtain the key in CONFIG["USER_API_KEY_PROMPT"], see below.
-- -- ["PromptForUserAPIKey"] = true,
--
-- ["Model"] = {
-- ["Id"] = "<the model ID>",
-- ["DisplayName"] = "<user-friendly name of the model>",
-- }
-- }
-- Transcription providers for voice-to-text functionality:
CONFIG["TRANSCRIPTION_PROVIDERS"] = {}
-- An example of a transcription provider configuration:
-- CONFIG["TRANSCRIPTION_PROVIDERS"][#CONFIG["TRANSCRIPTION_PROVIDERS"]+1] = {
-- ["Id"] = "00000000-0000-0000-0000-000000000000",
-- ["Name"] = "<user-friendly name for the transcription provider>",
-- ["UsedLLMProvider"] = "SELF_HOSTED",
--
-- -- Allowed values for Host are: OLLAMA, VLLM, WHISPER_CPP, and LLMMAN
-- ["Host"] = "WHISPER_CPP",
-- ["Hostname"] = "<https address of the server>",
--
-- -- Optional: project-specific SVG icon. The same path, size, rendering, and
-- -- fallback rules described for IconPath under LLM_PROVIDERS apply here.
-- -- ["IconPath"] = "assets/project-icon.svg",
--
-- -- Optional: Encrypted API key (see LLM_PROVIDERS example for details)
-- -- ["APIKey"] = "ENC:v2:<base64-encoded encrypted data>",
--
-- -- Optional: let each user set their own API key for this otherwise locked transcription
-- -- provider (see LLM_PROVIDERS example for details). Mutually exclusive with "APIKey"
-- -- above: when both are set, the embedded key is ignored and a warning is logged.
-- -- ["AllowUserProvidedAPIKey"] = true,
--
-- -- Optional: ask the user for their API key on the home page, as long as this provider
-- -- has none (see LLM_PROVIDERS example for details). Implies "AllowUserProvidedAPIKey".
-- -- ["PromptForUserAPIKey"] = true,
--
-- -- Optional: Hugging Face inference provider. Only relevant for UsedLLMProvider = HUGGINGFACE.
-- -- Hugging Face transcribes audio through some of its inference providers only, so the choice
-- -- is narrower than for chatting. Allowed values are: DEEPINFRA and TOGETHER_AI. The automatic
-- -- options are not available here, because a transcription request has to name its provider.
-- -- ["HFInferenceProvider"] = "TOGETHER_AI",
--
-- ["Model"] = {
-- ["Id"] = "<the model ID>",
-- ["DisplayName"] = "<user-friendly name of the model>",
-- }
-- }
-- Embedding providers for local RAG (Retrieval-Augmented Generation) functionality:
CONFIG["EMBEDDING_PROVIDERS"] = {}
-- An example of an embedding provider configuration:
-- CONFIG["EMBEDDING_PROVIDERS"][#CONFIG["EMBEDDING_PROVIDERS"]+1] = {
-- ["Id"] = "00000000-0000-0000-0000-000000000000",
-- ["Name"] = "<user-friendly name for the embedding provider>",
-- ["UsedLLMProvider"] = "SELF_HOSTED",
--
-- -- Allowed values for Host are: LM_STUDIO, OLLAMA, VLLM, and LLMMAN
-- ["Host"] = "OLLAMA",
-- ["Hostname"] = "<https address of the server>",
--
-- -- Optional: project-specific SVG icon. The same path, size, rendering, and
-- -- fallback rules described for IconPath under LLM_PROVIDERS apply here.
-- -- ["IconPath"] = "assets/project-icon.svg",
--
-- -- Optional: Encrypted API key (see LLM_PROVIDERS example for details)
-- -- ["APIKey"] = "ENC:v2:<base64-encoded encrypted data>",
--
-- -- Optional: tokenizer path for this provider relative to the plugin directory.
-- -- ["TokenizerPath"] = "",
--
-- -- Optional: maximum number of tokens per embedding chunk. If omitted, AI Studio uses its default.
-- -- ["TokenLimit"] = 8192,
--
-- -- Optional: number of chunks sent to the embedding provider in one request. If omitted, AI Studio sends one chunk per request.
-- -- ["EmbeddingBatchSize"] = 1,
--
-- -- Optional: let each user set their own API key for this otherwise locked embedding
-- -- provider (see LLM_PROVIDERS example for details). Mutually exclusive with "APIKey"
-- -- above: when both are set, the embedded key is ignored and a warning is logged.
-- -- ["AllowUserProvidedAPIKey"] = true,
--
-- -- Optional: ask the user for their API key on the home page, as long as this provider
-- -- has none (see LLM_PROVIDERS example for details). Implies "AllowUserProvidedAPIKey".
-- -- ["PromptForUserAPIKey"] = true,
--
-- -- Optional: Hugging Face inference provider. Only relevant for UsedLLMProvider = HUGGINGFACE.
-- -- Hugging Face serves embeddings through some of its inference providers only, so the choice
-- -- is narrower than for chatting. Allowed values are: DEEPINFRA and TOGETHER_AI. The automatic
-- -- options are not available here, because an embedding request has to name its provider.
-- -- ["HFInferenceProvider"] = "TOGETHER_AI",
--
-- ["Model"] = {
-- ["Id"] = "<the model ID, e.g., nomic-embed-text>",
-- ["DisplayName"] = "<user-friendly name of the model>",
-- }
-- }
-- ERI v1 data sources for retrieval-augmented generation:
--
-- "OutboundDataRestriction" is optional and decides where a chat may still send data once the
-- AI found something in the data source: ONLY_CONFIGURED_SERVICES, ONLY_LINKS_FROM_CHAT, or
-- UNRESTRICTED, see DataSourceSecuritySettings.MinimumOutboundDataRestriction below. Without it,
-- the data source gets ONLY_LINKS_FROM_CHAT, and a value AI Studio cannot read counts as
-- ONLY_CONFIGURED_SERVICES. A data source with the security policy SELF_HOSTED always gets
-- ONLY_CONFIGURED_SERVICES, whatever it says here.
CONFIG["DATA_SOURCES"] = {}
-- Example: ERI v1 data source with a shared access token.
-- CONFIG["DATA_SOURCES"][#CONFIG["DATA_SOURCES"]+1] = {
-- ["Id"] = "00000000-0000-0000-0000-000000000000",
-- ["Name"] = "<user-friendly data source name>",
-- ["Type"] = "ERI_V1",
-- ["Hostname"] = "<https address of the ERI server>",
-- ["Port"] = 443,
-- ["AuthMethod"] = "TOKEN",
-- ["Token"] = "ENC:v2:<base64-encoded encrypted token>",
-- ["SecurityPolicy"] = "SELF_HOSTED",
-- ["OutboundDataRestriction"] = "ONLY_CONFIGURED_SERVICES",
-- ["SelectedRetrievalId"] = "<retrieval process ID from the ERI server>",
-- ["MaxMatches"] = 10,
-- }
-- Example: ERI v1 data source with a shared username and password.
-- CONFIG["DATA_SOURCES"][#CONFIG["DATA_SOURCES"]+1] = {
-- ["Id"] = "00000000-0000-0000-0000-000000000000",
-- ["Name"] = "<user-friendly data source name>",
-- ["Type"] = "ERI_V1",
-- ["Hostname"] = "<https address of the ERI server>",
-- ["Port"] = 443,
-- ["AuthMethod"] = "USERNAME_PASSWORD",
-- ["UsernamePasswordMode"] = "SHARED_USERNAME_AND_PASSWORD",
-- ["Username"] = "<shared username>",
-- ["Password"] = "ENC:v2:<base64-encoded encrypted password>",
-- ["SecurityPolicy"] = "SELF_HOSTED",
-- ["OutboundDataRestriction"] = "ONLY_CONFIGURED_SERVICES",
-- ["SelectedRetrievalId"] = "<retrieval process ID from the ERI server>",
-- ["MaxMatches"] = 10,
-- }
-- Example: ERI v1 data source using the user's username and a shared password.
-- CONFIG["DATA_SOURCES"][#CONFIG["DATA_SOURCES"]+1] = {
-- ["Id"] = "00000000-0000-0000-0000-000000000000",
-- ["Name"] = "<user-friendly data source name>",
-- ["Type"] = "ERI_V1",
-- ["Hostname"] = "<https address of the ERI server>",
-- ["Port"] = 443,
-- ["AuthMethod"] = "USERNAME_PASSWORD",
-- ["UsernamePasswordMode"] = "OS_USERNAME_SHARED_PASSWORD",
-- ["Password"] = "ENC:v2:<base64-encoded encrypted password>",
-- ["SecurityPolicy"] = "SELF_HOSTED",
-- ["OutboundDataRestriction"] = "ONLY_CONFIGURED_SERVICES",
-- ["SelectedRetrievalId"] = "<retrieval process ID from the ERI server>",
-- ["MaxMatches"] = 10,
-- }
-- Mail servers of your organization, offered for new mailboxes:
-- The mailbox dialog lists them before the well-known public providers. Choosing one fills in
-- the host, the port, and the encryption; username and password stay with each user. Large
-- organizations run more than one mail system, so a configuration may define several mail
-- servers, and those of all configurations are offered together.
--
-- Fields:
-- Id Required GUID, which stays the same across versions of your configuration.
-- Name Required name shown to the user, e.g., the name of the mail system.
-- Host Required host name or IP address of the IMAP server, without a scheme
-- or a port.
-- TransportSecurity SSL_ON_CONNECT (the default, TLS from the first byte on) or STARTTLS.
-- There is no way without encryption.
-- Port The default is 993 with SSL_ON_CONNECT and 143 with STARTTLS.
-- UsernameHint Optional text telling users what to enter as their username.
-- HelpUrl Optional http or https address of your instructions, e.g., on how to
-- enable IMAP for a mailbox.
-- An entry with an invalid field is left out as a whole, and the log names the field.
-- To allow mailboxes on these mail servers only, see DataMailboxes.AllowOnlyOrganizationMailServers.
CONFIG["MAILBOX_PROVIDERS"] = {}
-- An example mail server:
-- CONFIG["MAILBOX_PROVIDERS"][#CONFIG["MAILBOX_PROVIDERS"]+1] = {
-- ["Id"] = "00000000-0000-0000-0000-000000000000",
-- ["Name"] = "Exchange (headquarters)",
-- ["Host"] = "imap.example.org",
-- ["TransportSecurity"] = "SSL_ON_CONNECT",
-- ["Port"] = 993,
-- ["UsernameHint"] = "Your account as DOMAIN\\username",
-- ["HelpUrl"] = "https://intranet.example.org/mail/imap",
-- }
CONFIG["SETTINGS"] = {}
-- ------
-- How settings combine when your organization deploys more than one configuration
-- ------
--
-- A configuration with a higher PRIORITY is applied later and wins. This works per
-- setting: everything a later configuration does not mention keeps the value of the
-- configuration below it.
--
-- For a setting that holds a list or a table, the winning configuration replaces the
-- whole collection instead of merging the entries. A department configuration that
-- lists a single entry therefore drops every entry the base configuration had set for
-- that setting. That is intentional: replacing is the only way a department can take
-- something back that the base configuration has set.
--
-- The affected settings below carry a note. Two settings are the exception and add up
-- across configurations instead: DataApp.EnabledPreviewFeatures and
-- DataAssistantPluginAudit.EnterpriseApprovedPlugins.
-- ------
-- ------
-- What happens to a setting when your configuration is removed
-- ------
--
-- AI Studio remembers the value a setting had before a configuration took it over.
-- Once no configuration manages that setting anymore -- because your IT department
-- stopped deploying this configuration, because the user deleted it, or because a test
-- configuration ended -- the user gets that value back. When there is nothing to
-- restore, e.g. for a setting the user had never changed, AI Studio falls back to its
-- own default value.
--
-- One case differs: when you allow users to override a setting and somebody makes use
-- of that, their choice outlives your configuration and stays as it is.
-- ------
-- Both update settings below only ever apply to installations AI Studio is able to update.
-- Installations you rolled out yourself, for example, into C:\Program Files or into a location
-- your users cannot write to, never update themselves, no matter what you configure here. You
-- can therefore leave automatic updates enabled for everybody: your deployments ignore them,
-- while installations your colleagues fetched from GitHub keep updating themselves. Place a file
-- named "managed-installation" next to the program file to mark any other installation as one
-- you maintain. The Enterprise IT documentation describes this in detail.
-- Configure the update check interval:
-- Allowed values are: NO_CHECK, DISABLE_UPDATES, ONCE_STARTUP, HOURLY, DAILY, WEEKLY
-- NO_CHECK disables automatic checks, but users can still check and install updates manually.
-- DISABLE_UPDATES is intended for enterprise configurations and disables all update checks
-- and installations. It is not offered as a selectable option in the normal app settings.
-- CONFIG["SETTINGS"]["DataApp.UpdateInterval"] = "NO_CHECK"
-- Configure how updates are installed:
-- Allowed values are: MANUAL, AUTOMATIC
-- CONFIG["SETTINGS"]["DataApp.UpdateInstallation"] = "MANUAL"
-- Configure the page that should be opened when AI Studio starts.
-- Allowed values are: HOME, CHAT, ASSISTANTS, INFORMATION, PLUGINS, SUPPORTERS, SETTINGS
-- CONFIG["SETTINGS"]["DataApp.StartPage"] = "CHAT"
--
-- Allow users to change the configured start page locally.
-- Allowed values are: true, false
-- When set to true, the configured start page becomes the organization default,
-- but users can still choose another start page in the app settings.
-- CONFIG["SETTINGS"]["DataApp.StartPage.AllowUserOverride"] = true
-- Configure whether AI Studio saves energy while the AI writes its answers.
-- Allowed values are: true, false
-- When set to true, streamed answers are updated once every third second instead of as soon
-- as new text arrives. This helps on battery-powered devices and on virtual desktops, where
-- every redraw of the screen is costly.
-- CONFIG["SETTINGS"]["DataApp.IsSavingEnergy"] = true
-- Configure whether the quick start guide is shown on the welcome page.
-- CONFIG["SETTINGS"]["DataApp.ShowQuickStartGuide"] = false
-- Configure whether the built-in introduction is shown on the welcome page.
-- CONFIG["SETTINGS"]["DataApp.ShowIntroduction"] = false
-- Configure whether the last changelog is shown on the welcome page.
-- CONFIG["SETTINGS"]["DataApp.ShowLastChangelog"] = false
-- Configure whether the vision panel is shown on the welcome page.
-- CONFIG["SETTINGS"]["DataApp.ShowVision"] = false
-- Configure whether AI Studio shows a dialog listing suspicious instructions it
-- removed from external content, together with an explanation of the attack pattern.
-- A short notification is still shown when this setting is disabled.
-- CONFIG["SETTINGS"]["DataApp.ShowPromptInjectionAlert"] = true
-- Configure the master permission to add providers. When set to false, the add
-- buttons stay visible but are disabled regardless of the provider-specific settings.
-- CONFIG["SETTINGS"]["DataApp.AllowUserToAddProvider"] = false
-- Fine-tune the permission to add each provider type. These settings only allow
-- adding providers while DataApp.AllowUserToAddProvider is also true.
-- CONFIG["SETTINGS"]["DataApp.AllowUserToAddLLMProvider"] = false
-- CONFIG["SETTINGS"]["DataApp.AllowUserToAddEmbeddingProvider"] = false
-- CONFIG["SETTINGS"]["DataApp.AllowUserToAddTranscriptionProvider"] = false
-- Prohibit providers, e.g., when your organization must not send any data to them. The list
-- applies to LLM providers, embedding providers, and transcription providers alike. Allowed
-- values are the provider keys of DataConfidence.CustomConfidenceScheme, see below. A name
-- AI Studio does not know is ignored and logged as a warning.
--
-- A prohibition names the operator of an API, not a family of models: prohibiting the API of
-- a model maker keeps AI Studio away from that API, but the models of that maker may remain
-- available through a hub which offers the models of several makers, or on a server of your
-- own. Prohibit these as well if you need to.
--
-- Users can still select a prohibited provider when they add one, but the dialog then only
-- explains that your organization does not allow it. Providers which users set up before stay
-- in their settings, marked as prohibited, and users can delete them. AI Studio no longer
-- offers or contacts them. Once you lift the prohibition, they work again.
--
-- A prohibited provider is always UNTRUSTED, whatever the confidence scheme says. A level which
-- DataConfidence.CustomConfidenceScheme names for it is ignored and logged as a warning, and
-- users cannot change it in the app. Once you lift the prohibition, that level applies again.
--
-- Replaces, does not merge: a configuration with a higher priority replaces the whole list.
-- A configuration which prohibits one more provider has to repeat the providers of the base
-- configuration. Otherwise, these become usable again.
--
-- Available since AI Studio v26.10.1. Older versions ignore this setting. Until all devices
-- run that version, you can in addition use the CUSTOM confidence scheme, set the provider to
-- UNTRUSTED there, and enforce a global minimum confidence level of at least VERY_LOW.
-- CONFIG["SETTINGS"]["DataApp.ProhibitedProviders"] = { "<PROVIDER_KEY>" }
-- Configure the permission to add mailboxes. A mailbox is a data source, not a provider, so
-- DataApp.AllowUserToAddProvider does not apply to it. When set to false, the menu entry for
-- adding a mailbox stays visible but is disabled. Mailboxes the user added before stay; to keep
-- the AI from reading them, switch off the tool collection mailboxes in DataTools.DisabledToolIds.
-- CONFIG["SETTINGS"]["DataApp.AllowUserToAddMailbox"] = false
-- Configure the permission to import an item which somebody exported from AI Studio, such as
-- a chat template a colleague shares. The first setting allows or locks every import, the
-- others one type each; an import needs both. Importing a provider also needs the permission
-- to add it by hand: DataApp.AllowUserToAddProvider and the setting for its kind, see above.
-- When set to false, the import button stays visible but is locked. Importing plugin archives
-- has a setting of its own, see below.
-- CONFIG["SETTINGS"]["DataApp.AllowUserToImportConfigurationSnippets"] = false
-- CONFIG["SETTINGS"]["DataApp.AllowUserToImportProfile"] = false
-- CONFIG["SETTINGS"]["DataApp.AllowUserToImportLLMProvider"] = false
-- CONFIG["SETTINGS"]["DataApp.AllowUserToImportEmbeddingProvider"] = false
-- CONFIG["SETTINGS"]["DataApp.AllowUserToImportTranscriptionProvider"] = false
-- CONFIG["SETTINGS"]["DataApp.AllowUserToImportChatTemplate"] = false
-- CONFIG["SETTINGS"]["DataApp.AllowUserToImportERIDataSource"] = false
-- CONFIG["SETTINGS"]["DataApp.AllowUserToImportDocumentAnalysisPolicy"] = false
-- Configure the user permission to import plugin archives from disk.
-- When set to false, the import button on the plugins page stays visible but is disabled.
-- CONFIG["SETTINGS"]["DataApp.AllowUserToImportPlugins"] = false
-- Configure the user permission to import configuration plugin archives from disk.
-- This is a second gate on top of DataApp.AllowUserToImportPlugins: both must allow the
-- import. Configuration plugins get their own switch because they can do far more than an
-- assistant: they define LLM providers and data sources, and they lock settings. You may
-- therefore let users import assistants while keeping configurations to your IT department.
-- CONFIG["SETTINGS"]["DataApp.AllowUserToImportConfigurationPlugins"] = false
-- Configure the user permission to share or export plugins as archives.
-- When set to false, the share button on the plugins page stays visible but is disabled.
-- On Linux, this button exports the plugin archive instead of using a native share sheet.
-- CONFIG["SETTINGS"]["DataApp.AllowUserToSharePlugins"] = false
-- Configure the user permission to back up the data of AI Studio into a file, e.g. to take it
-- to a new computer. When set to false, the backup button stays visible but is disabled.
-- A backup holds chats and other confidential content in a single file, which can leave the
-- computer on any stick or cloud drive. Secrets such as API keys never go into a backup.
-- CONFIG["SETTINGS"]["DataApp.AllowUserToBackUpData"] = false
-- Configure the user permission to restore the data of AI Studio from a backup file, or to add
-- the chats of a backup. When set to false, the restore button stays visible but is disabled.
-- A backup brings along the locations of documents and local data sources, and those are read
-- again afterward.
-- CONFIG["SETTINGS"]["DataApp.AllowUserToRestoreData"] = false
-- Configure whether administration settings are visible in the UI:
-- CONFIG["SETTINGS"]["DataApp.ShowAdminSettings"] = true
-- Configure the format in which exports encrypt API keys, tokens, and passwords with the
-- enterprise encryption secret. Both formats use the same secret.
-- Allowed values are: V1, V2
-- V2 is protected: AI Studio refuses every value which was encrypted with another secret. It
-- needs AI Studio v26.10.1 or newer on every computer which reads it. V1 is read by every
-- version of AI Studio, and AI Studio keeps reading it for good. New installations start with
-- V2, installations which existed before v26.10.1 keep V1. Keep V1 until every computer in
-- your organization runs v26.10.1 or newer, then switch to V2.
-- CONFIG["SETTINGS"]["DataApp.EnterpriseEncryptionExportFormat"] = "V1"
--
-- Allow users to change the export format locally.
-- Allowed values are: true, false
-- When set to true, the configured format becomes the organization default,
-- but users can still choose another format in the enterprise administration settings.
-- CONFIG["SETTINGS"]["DataApp.EnterpriseEncryptionExportFormat.AllowUserOverride"] = true
-- Configure whether AI answers which users copy or export end with a notice that they were
-- generated using artificial intelligence (AI). The notice is written in the language of the app.
-- It also ends the files of the batch processing. Code blocks, single files or tables taken from
-- an answer, visual briefings, and the results of the prompt optimizer and the assistant builder
-- stay unchanged. The default is false: AI Studio then adds no notice. The Enterprise IT
-- documentation describes what gets the notice.
-- Allowed values are: true, false
-- CONFIG["SETTINGS"]["DataApp.AddAIGeneratedContentDisclosure"] = true
--
-- Allow users to change this setting locally.
-- Allowed values are: true, false
-- When set to true, the configured value becomes the organization default,
-- but users can still switch it on or off in the app settings.
-- CONFIG["SETTINGS"]["DataApp.AddAIGeneratedContentDisclosure.AllowUserOverride"] = true
-- Configure the visibility of preview features:
-- Allowed values are: NONE, RELEASE_CANDIDATE, BETA, ALPHA, PROTOTYPE, EXPERIMENTAL
-- Please note:
-- I: that this setting does not hide features that are already enabled.
-- II: lower levels include all features of the higher levels. E.g. BETA includes RELEASE_CANDIDATE features.
-- CONFIG["SETTINGS"]["DataApp.PreviewVisibility"] = "NONE"
-- Configure the enabled preview features:
-- Allowed values are can be found in https://github.com/MindWorkAI/AI-Studio/blob/main/app/MindWork%20AI%20Studio/Settings/DataModel/PreviewFeatures.cs
-- Examples are PRE_WRITER_MODE_2024 and PRE_RAG_2024.
--
-- Adds up, does not replace: this is the one setting where all configurations
-- contribute together. Enable one preview feature for the whole organization and
-- another one for a single department, and users of that department get both. Each
-- configuration keeps its own contribution, so removing one of them only withdraws
-- the features that this configuration had enabled.
-- CONFIG["SETTINGS"]["DataApp.EnabledPreviewFeatures"] = { "PRE_RAG_2024" }
-- Configure the preselected provider.
-- It must be one of the provider IDs defined in CONFIG["LLM_PROVIDERS"].
-- Please note: using an empty string ("") will lock the preselected provider selection, even though no valid preselected provider is found.
-- CONFIG["SETTINGS"]["DataApp.PreselectedProvider"] = "00000000-0000-0000-0000-000000000000"
-- Configure the preselected profile.
-- It must be one of the profile IDs defined in CONFIG["PROFILES"].
-- Please note: using an empty string ("") will lock the preselected profile selection, even though no valid preselected profile is found.
-- CONFIG["SETTINGS"]["DataApp.PreselectedProfile"] = "00000000-0000-0000-0000-000000000000"
-- Configure chat-specific preselected options.
-- This must be enabled for the chat-specific provider, profile, and chat template to take effect.
-- CONFIG["SETTINGS"]["DataChat.PreselectOptions"] = true
--
-- Configure the preselected provider for chats.
-- It must be one of the provider IDs defined in CONFIG["LLM_PROVIDERS"].
-- CONFIG["SETTINGS"]["DataChat.PreselectedProvider"] = "00000000-0000-0000-0000-000000000000"
--
-- Configure the preselected profile for chats.
-- It must be one of the profile IDs defined in CONFIG["PROFILES"].
-- Please note: using an empty string ("") means chats will use the app default profile.
-- Please note: using "00000000-0000-0000-0000-000000000000" means chats will use no profile.
-- CONFIG["SETTINGS"]["DataChat.PreselectedProfile"] = "00000000-0000-0000-0000-000000000000"
--
-- Configure the preselected chat template for chats.
-- It must be one of the chat template IDs defined in CONFIG["CHAT_TEMPLATES"].
-- Please note: using an empty string ("") or "00000000-0000-0000-0000-000000000000" means chats will use no chat template.
-- CONFIG["SETTINGS"]["DataChat.PreselectedChatTemplate"] = "00000000-0000-0000-0000-000000000000"
--
--
-- Configure default data source options for new chats.
--
-- Controls whether data sources are off by default:
-- CONFIG["SETTINGS"]["DataChat.PreselectedDataSourcesDisabled"] = false
-- Controls how the data sources are searched. Allowed values are:
-- SEMANTIC_SEARCH -> the AI searches the data sources itself, through the tool
-- semantic_search, whenever a question calls for it. This is the default.
-- EVERY_MESSAGE -> AI Studio searches the data sources with every message, before the AI
-- answers.
-- SEMANTIC_SEARCH works only where semantic_search can be offered: the model has to be able to
-- call tools, neither the tools nor semantic_search may be switched off, and the provider has
-- to meet a minimum confidence you set for semantic_search, see DataTools. Otherwise, AI Studio
-- searches with every message instead.
-- With SEMANTIC_SEARCH, no agent takes part: DataChat.PreselectedDataSourcesAutomaticSelection
-- then lets the AI itself choose among all data sources it may use, and
-- DataChat.PreselectedDataSourcesAutomaticValidation has no effect.
-- CONFIG["SETTINGS"]["DataChat.PreselectedDataSourcesRetrievalMode"] = "EVERY_MESSAGE"
-- Controls whether AI Studio asks an agent to choose data sources:
-- CONFIG["SETTINGS"]["DataChat.PreselectedDataSourcesAutomaticSelection"] = true
-- Controls whether retrieved data is validated by an agent:
-- CONFIG["SETTINGS"]["DataChat.PreselectedDataSourcesAutomaticValidation"] = true
-- Must contain IDs from CONFIG["DATA_SOURCES"] or user-configured data sources.
-- IDs from another configuration of your organization work as well: they are resolved
-- against every known data source, not only against the ones defined here. IDs that
-- resolve to nothing are ignored.
--
-- Replaces, does not merge: a configuration with a higher priority replaces this list
-- completely. To keep an entry of the base configuration, list that ID here again.
-- CONFIG["SETTINGS"]["DataChat.PreselectedDataSourceIds"] = {
-- "00000000-0000-0000-0000-000000000000",
-- }
--
-- Configure whether default chat data source options are applied when assistant results are sent to chat.
-- Allowed values are: NO_DATA_SOURCES, APPLY_STANDARD_CHAT_DATA_SOURCE_OPTIONS
-- CONFIG["SETTINGS"]["DataChat.SendToChatDataSourceBehavior"] = "APPLY_STANDARD_CHAT_DATA_SOURCE_OPTIONS"
--
-- Configure whether a chat reads an attached file again when the file changed since it was sent.
-- By default, every later message of a chat sends the AI the content a file had when it was first
-- sent, also when the file changed or is gone by now, and users can look up what the AI received.
-- When enabled, the AI receives the new content of a changed file with the next message. A file
-- which is gone keeps the content it was sent with either way.
-- Allowed values are: true, false
-- CONFIG["SETTINGS"]["DataChat.ReadChangedAttachmentsAgain"] = true
--
-- Allow users to change any configured chat default locally.
-- Allowed values are: true, false
-- CONFIG["SETTINGS"]["DataChat.PreselectOptions.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataChat.PreselectedProvider.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataChat.PreselectedProfile.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataChat.PreselectedChatTemplate.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataChat.PreselectedDataSourcesDisabled.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataChat.PreselectedDataSourcesRetrievalMode.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataChat.PreselectedDataSourcesAutomaticSelection.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataChat.PreselectedDataSourcesAutomaticValidation.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataChat.PreselectedDataSourceIds.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataChat.SendToChatDataSourceBehavior.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataChat.ReadChangedAttachmentsAgain.AllowUserOverride"] = true
-- Configure defaults for the Slide Assistant.
-- Preselection must be enabled for the template, the picture library, and the other defaults
-- below to take effect. It is enabled by default; lock it as well to make sure users cannot do without your
-- template.
-- CONFIG["SETTINGS"]["DataSlideBuilder.PreselectOptions"] = true
--
-- Configure the PowerPoint template of the Slide Assistant.
-- The slides then use the layouts of this presentation or template (.pptx, .potx), and users
-- can create a PowerPoint file from the result. Without a template, the assistant plans an
-- outline only.
--
-- The simplest way is to ship the template with this plugin: put the file next to this
-- plugin.lua, or into a folder below it, and give its path relative to this plugin.lua. The
-- path must stay inside the plugin directory, i.e., no '..' segments and no links pointing
-- out of it. When the file is missing or the path is rejected, AI Studio logs a warning, and
-- this plugin does not manage the template: users keep the one they chose, or have none.
-- CONFIG["SETTINGS"]["DataSlideBuilder.TemplatePath"] = "Corporate.potx"
--
-- An absolute path works as well. It must be readable on every machine, e.g., on a network
-- share or in a folder your software distribution fills; for Flatpak installations, it must
-- be readable inside the sandbox.
-- CONFIG["SETTINGS"]["DataSlideBuilder.TemplatePath"] = "C:\\Templates\\Corporate.potx"
--
-- Configure the footer text for every slide whose layout has a footer, e.g., the name of
-- the organization. Leave it empty for no footer.
-- CONFIG["SETTINGS"]["DataSlideBuilder.PreselectedFooterText"] = ""
--
-- Configure the maximum number of bullet points per slide, all text slots of a slide together,
-- from 1 to 7. Match it to the room for text in the layouts of your template. 0 sets no maximum,
-- and the LLM decides by the room of each layout. AI Studio logs a warning for any other value
-- and ignores it.
-- CONFIG["SETTINGS"]["DataSlideBuilder.PreselectedMaxBulletPointsPerSlide"] = 0
--
-- Configure whether new slides keep the picture placeholders of their layout which they have no
-- picture for. PowerPoint shows them while editing, so users can insert pictures of their own,
-- and hides them in the slide show. By default, the slides leave them out.
-- CONFIG["SETTINGS"]["DataSlideBuilder.PreselectedKeepEmptyPicturePlaceholders"] = false
--
-- Configure the picture library of the Slide Assistant: a folder with pictures and icons, e.g.,
-- the picture library of your organization. The LLM reads only the names of its PNG and JPEG
-- pictures and may place a picture where its name fits a slide. A picture whose name, or the
-- name of one of its folders, starts with "icon" counts as an icon. This includes the folder
-- you name here, so a folder "Icons" holds icons only. Leave it empty for no picture library.
--
-- Ship the folder with this plugin and give its path relative to this plugin.lua, under the
-- same rules as the template above, or give an absolute path, e.g., on a network share. When a
-- locked folder cannot be reached, the assistant plans the slides without it.
-- CONFIG["SETTINGS"]["DataSlideBuilder.PreselectedPictureLibraryPath"] = "Pictures"
--
-- Configure the layout of your template for kinds of slides, e.g., which layout opens each
-- chapter. Give the name of the layout as the slide master of your template shows it. A kind
-- of slide you leave out has no preference, and the LLM decides; a name the template lacks
-- counts as no preference as well.
-- Allowed kinds of slides are, by area:
-- Structure and framing: TITLE, TABLE_OF_CONTENTS, AGENDA, SPEAKER, SPEAKERS, CHAPTER,
-- CHAPTER_SUMMARY, Q_AND_A, ACKNOWLEDGEMENTS, REFERENCES, CLOSING, APPENDIX, IMPRINT
-- General content: CONTENT, LITTLE_CONTENT, MUCH_CONTENT, KEY_MESSAGE, EXECUTIVE_SUMMARY, CONTEXT,
-- RETROSPECTIVE, PICTURE, PICTURES, TABLE, COMPARISON, PROS_AND_CONS, TIMELINE, PROCESS, QUOTE,
-- QUOTES, CODE, FORMULA, FORMULAS, CHECKLIST, NOTE, NOTES, AUDIENCE_QUESTION, FEEDBACK,
-- DISCLAIMER, SUMMARY, OUTLOOK
-- Teaching and workshops: INTRODUCTION_ROUND, EXPECTATIONS, GROUND_RULES, ORGANIZATIONAL_NOTES,
-- LEARNING_OBJECTIVE, LEARNING_OBJECTIVES, EXAMPLE, EXAMPLES, STEP_BY_STEP, EXERCISE,
-- EXERCISE_SOLUTION, GROUP_WORK, POLL, DISCUSSION_PROMPT, REFLECTION, BREAK, DAY_CHANGE
-- Business and projects: VISION, GOAL, GOALS, NARRATIVE, STORY, PROBLEM, PROBLEMS, OPPORTUNITY,
-- OPPORTUNITIES, SWOT, USE_CASE, USE_CASES, USER_STORY, USER_STORIES, ACCEPTANCE_CRITERIA, KPI,
-- KPIS, FORECAST, SCENARIO, SCENARIOS, RISK, RISKS, DEPENDENCY, DEPENDENCIES, RESOURCES, TEAM,
-- PARTNERS, ROADMAP, MILESTONE, MILESTONES, WORK_PACKAGE, WORK_PACKAGES, PROJECT_STATUS,
-- LESSONS_LEARNED, REASON, REASONS, RECOMMENDATION, RECOMMENDATIONS, DECISION_REQUEST, NEXT_STEPS,
-- ACTION_ITEMS, CALL_TO_ACTION
-- Science and research: STATE_OF_RESEARCH, RESEARCH_GAP, RESEARCH_QUESTION, RESEARCH_QUESTIONS,
-- DEFINITION, DEFINITIONS, THEOREM, PROOF, ASSUMPTION, ASSUMPTIONS, DELIMITATION, DELIMITATIONS,
-- THESIS, THESES, HYPOTHESIS, HYPOTHESES, ARGUMENT_CHAIN, COUNTERARGUMENT, COUNTERARGUMENTS,
-- METHODOLOGY, STUDY_DESIGN, EXPERIMENTAL_SETUP, DATA, RESULT, RESULTS, INTERPRETATION,
-- LIMITATIONS, CONTRIBUTION, FUNDING
-- Medicine: PATIENT_CASE, MEDICAL_HISTORY, CLINICAL_FINDINGS, IMAGING, LAB_VALUES, DIAGNOSIS,
-- DIFFERENTIAL_DIAGNOSES, THERAPY, MEDICATION, COURSE_OF_DISEASE, PROGNOSIS, ADVERSE_EVENTS,
-- GUIDELINE_RECOMMENDATION, STUDY_POPULATION, ENDPOINTS, ETHICS_APPROVAL
-- Law: FACTS_OF_THE_CASE, LEGAL_QUESTION, LEGAL_QUESTIONS, LEGAL_PROVISION, LEGAL_PROVISIONS,
-- EXAMINATION_SCHEME, DISPUTE_OF_OPINIONS, POSITIONS_OF_THE_PARTIES, PIECE_OF_EVIDENCE,
-- PIECES_OF_EVIDENCE, RULING, RULINGS, LEGAL_COMMENTARY, LEGAL_COMMENTARIES, CONTRACT_CLAUSE,
-- CONTRACT_CLAUSES, LEGAL_CONSEQUENCES, DEADLINES
-- A kind in the singular, e.g., RISK, shows one item prominently; its plural, e.g., RISKS, shows
-- several items together.
--
-- Replaces, does not merge: the table applies as a whole, also with AllowUserOverride.
-- CONFIG["SETTINGS"]["DataSlideBuilder.PreselectedLayouts"] = {
-- ["TITLE"] = "Title Slide",
-- ["CHAPTER"] = "Section Header",
-- ["CONTENT"] = "Title and Content",
-- }
--
-- Preselect what the presentation does with the slides your template carries, by their number in the
-- file, starting with 1 and counting hidden slides. OMIT leaves a slide out, KEEP keeps it as it is,
-- and EDIT lets the LLM write new content into it; a slide without room for content stays unchanged
-- instead. A slide you do not name is left out. This applies only to the template above.
-- Replaces, does not merge: the table applies as a whole, also with AllowUserOverride.
-- CONFIG["SETTINGS"]["DataSlideBuilder.PreselectedTemplateSlideUses"] = {
-- [1] = "KEEP",
-- [4] = "EDIT",
-- }
--
-- Allow users to choose another template or change the defaults locally.
-- CONFIG["SETTINGS"]["DataSlideBuilder.PreselectOptions.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataSlideBuilder.TemplatePath.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataSlideBuilder.PreselectedFooterText.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataSlideBuilder.PreselectedMaxBulletPointsPerSlide.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataSlideBuilder.PreselectedKeepEmptyPicturePlaceholders.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataSlideBuilder.PreselectedPictureLibraryPath.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataSlideBuilder.PreselectedLayouts.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataSlideBuilder.PreselectedTemplateSlideUses.AllowUserOverride"] = true
-- Configure defaults for the Batch Processing Assistant.
-- Preselection must be enabled for the remaining batch settings to take effect.
-- CONFIG["SETTINGS"]["DataBatchProcessing.PreselectOptions"] = true
--
-- Configure the default input and output folders.
-- Leave the input folder empty to require a selection for every new batch run.
-- Leave the output folder empty to use the ai-results subfolder of the input folder.
-- CONFIG["SETTINGS"]["DataBatchProcessing.InputDirectory"] = ""
-- CONFIG["SETTINGS"]["DataBatchProcessing.OutputDirectory"] = ""
--
-- Configure the default file patterns and whether subfolders as well as hidden files and folders are included.
-- Separate multiple patterns with semicolons.
-- CONFIG["SETTINGS"]["DataBatchProcessing.FilePatterns"] = "*.pdf;*.docx;*.pptx;*.xlsx;*.md;*.txt;*.jpg;*.jpeg;*.png;*.webp;*.gif;*.bmp;*.tif;*.tiff;*.mp3;*.wav;*.wave;*.aac;*.flac;*.ogg;*.opus;*.m4a;*.m4b;*.wma;*.alac;*.aif;*.aiff;*.caf;*.mp4;*.m4v;*.avi;*.mkv;*.mov;*.wmv;*.flv;*.webm"
-- CONFIG["SETTINGS"]["DataBatchProcessing.IncludeSubdirectories"] = false
-- CONFIG["SETTINGS"]["DataBatchProcessing.IncludeHiddenFilesAndFolders"] = false
--
-- Configure the files and folders which are left out, even when a file pattern selects them.
-- Separate entries with semicolons or line breaks. An entry which ends with a slash excludes every
-- folder of that name; every other entry is a file name pattern. An empty string excludes nothing
-- beyond the metadata of operating systems, which is always left out. The default is:
-- CONFIG["SETTINGS"]["DataBatchProcessing.ExcludePatterns"] = "node_modules/; bower_components/; Pods/; venv/; env/; __pycache__/; bin/; obj/; Debug/; Release/; target/; build/; dist/; DerivedData/; cmake-build-*/; TestResults/; htmlcov/; *.vmwarevm/; *.pvm/; *.utm/; package-lock.json; yarn.lock; pnpm-lock.yaml; packages.lock.json; Cargo.lock; poetry.lock; Pipfile.lock; composer.lock; Gemfile.lock; go.sum; *.min.js; *.min.css; *.js.map; *.css.map; *tokenizer.json; *.exe; *.dll; *.so; *.dylib; *.pdb; *.db; *.db3; *.db-*; *.sqlite; *.sqlite3; *.sqlite-*; *.vmdk; *.vdi; *.vhd; *.vhdx; *.qcow2; *.hdd; *.hds; *.iso; *.dmg; *.img"
--
-- Configure the size limit in megabytes. Larger files are left out of a batch run. The value must
-- be at least 1; the default is 1024, i.e., 1 GB.
-- CONFIG["SETTINGS"]["DataBatchProcessing.MaxFileSizeMegabytes"] = 1024
--
-- Configure the default instruction source.
-- Allowed values are: FREE_PROMPT, FILE_IMPORT, POLICY
-- CONFIG["SETTINGS"]["DataBatchProcessing.PromptSource"] = "FREE_PROMPT"
-- CONFIG["SETTINGS"]["DataBatchProcessing.FreePrompt"] = "Summarize each document."
-- CONFIG["SETTINGS"]["DataBatchProcessing.PromptFilePath"] = ""
--
-- The policy ID must reference an entry in CONFIG["DOCUMENT_ANALYSIS_POLICIES"] or a
-- user-configured policy. It is used only when PromptSource is POLICY.
-- CONFIG["SETTINGS"]["DataBatchProcessing.PreselectedPolicyId"] = ""
--
-- Configure the default output mode.
-- Allowed values are: INDIVIDUAL_FILES, TABLE_ONLY
-- CONFIG["SETTINGS"]["DataBatchProcessing.OutputMode"] = "INDIVIDUAL_FILES"
--
-- Configure the file format of the individual result files. Used only when the output
-- mode is INDIVIDUAL_FILES. Everything except MARKDOWN is converted by Pandoc, which
-- AI Studio installs on demand.
-- Allowed values are: MICROSOFT_WORD, OPEN_DOCUMENT_TEXT, LATEX, MARKDOWN, HTML
-- CONFIG["SETTINGS"]["DataBatchProcessing.ResultFileFormat"] = "MARKDOWN"
--
-- CONFIG["SETTINGS"]["DataBatchProcessing.CsvFileName"] = "batch-results.csv"
-- CONFIG["SETTINGS"]["DataBatchProcessing.ResultColumnHeader"] = "Result"
-- Allowed CSV separator values are: COMMA, SEMICOLON, PIPE, TAB, CUSTOM
-- A custom separator must be exactly one punctuation or symbol character.
-- CONFIG["SETTINGS"]["DataBatchProcessing.CsvSeparator"] = "SEMICOLON"
-- CONFIG["SETTINGS"]["DataBatchProcessing.CustomCsvSeparator"] = "^"
--
-- Enforce the lower end of the random pause between files for the organization.
-- The value must be between 6 and 300 seconds. Users can configure only the upper
-- end of the interval while this setting is managed by a configuration plugin.
-- CONFIG["SETTINGS"]["DataBatchProcessing.MinimumDelaySeconds"] = 12
--
-- Configure the minimum provider confidence and the default provider.
-- Allowed confidence values are: NONE, UNTRUSTED, UNKNOWN, VERY_LOW, LOW, MODERATE, MEDIUM, HIGH
-- A policy can require a higher minimum confidence; the stricter level wins.
-- CONFIG["SETTINGS"]["DataBatchProcessing.MinimumProviderConfidence"] = "NONE"
-- CONFIG["SETTINGS"]["DataBatchProcessing.PreselectedProvider"] = "00000000-0000-0000-0000-000000000000"
--
-- Allow users to change individual managed batch defaults locally.
-- CONFIG["SETTINGS"]["DataBatchProcessing.PreselectOptions.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.InputDirectory.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.OutputDirectory.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.FilePatterns.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.IncludeSubdirectories.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.IncludeHiddenFilesAndFolders.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.ExcludePatterns.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.MaxFileSizeMegabytes.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.PromptSource.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.FreePrompt.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.PromptFilePath.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.PreselectedPolicyId.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.OutputMode.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.ResultFileFormat.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.CsvFileName.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.ResultColumnHeader.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.CsvSeparator.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.CustomCsvSeparator.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.MinimumProviderConfidence.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataBatchProcessing.PreselectedProvider.AllowUserOverride"] = true
-- Configure the transcription provider for voice-to-text functionality.
-- It must be one of the transcription provider IDs defined in CONFIG["TRANSCRIPTION_PROVIDERS"].
-- Without a selected transcription provider, dictation and transcription features will be disabled.
-- Please note: using an empty string ("") will lock the selection and disable dictation/transcription.
-- CONFIG["SETTINGS"]["DataApp.UseTranscriptionProvider"] = "00000000-0000-0000-0000-000000000000"
-- Configure the Opus bitrate used when normalizing uploaded audio/video for transcription.
-- Allowed values are: KBPS_32, KBPS_64, KBPS_128, KBPS_256
-- Higher bitrates improve transcription accuracy on noisy or quiet recordings, at the cost of
-- a larger upload to the transcription provider. KBPS_128 is recommended.
-- Please note: this bitrate applies whenever a recording has to be re-encoded. A file which already
-- is a single mono 48 kHz Opus track in a WebM container and stays below 25 MiB is forwarded to the
-- transcription provider unchanged, keeping the bitrate it was created with.
-- CONFIG["SETTINGS"]["DataApp.OpusBitrate"] = "KBPS_32"
--
-- Allow the user to change the Opus bitrate even though your organization set a default above:
-- CONFIG["SETTINGS"]["DataApp.OpusBitrate.AllowUserOverride"] = true
-- Configure which assistants should be hidden from the UI.
-- Allowed values are:
-- GRAMMAR_SPELLING_ASSISTANT, ICON_FINDER_ASSISTANT, REWRITE_ASSISTANT,
-- PROMPT_OPTIMIZER_ASSISTANT, TRANSLATION_ASSISTANT, AGENDA_ASSISTANT,
-- CODING_ASSISTANT, TEXT_SUMMARIZER_ASSISTANT, EMAIL_ASSISTANT,
-- LEGAL_CHECK_ASSISTANT, SYNONYMS_ASSISTANT, MY_TASKS_ASSISTANT,
-- JOB_POSTING_ASSISTANT, BIAS_DAY_ASSISTANT, ERI_ASSISTANT,
-- DOCUMENT_ANALYSIS_ASSISTANT, BATCH_PROCESSING_ASSISTANT, SLIDE_BUILDER_ASSISTANT,
-- VISUAL_BRIEFING_ASSISTANT, I18N_ASSISTANT,
-- LOG_VIEWER_ASSISTANT
--
-- Replaces, does not merge: a configuration with a higher priority replaces this list
-- completely. This is what lets a department show an assistant again that the base
-- configuration hides. The department configuration must then list every other
-- assistant that is supposed to stay hidden, otherwise those become visible too.
-- CONFIG["SETTINGS"]["DataApp.HiddenAssistants"] = { "ERI_ASSISTANT", "I18N_ASSISTANT" }
-- Configure organization defaults for the Visual Briefing Assistant.
-- The assistant turns documents, images, audio, and video into a self-contained interactive
-- briefing. All settings below are defaults for new briefings; users can change them per briefing.
--
-- Configure the preselected provider for briefing builds.
-- It must be one of the provider IDs defined in CONFIG["LLM_PROVIDERS"].
-- CONFIG["SETTINGS"]["DataVisualBriefing.PreselectedProvider"] = "00000000-0000-0000-0000-000000000000"
--
-- Configure the preselected profile for briefing builds.
-- It must be one of the profile IDs defined in CONFIG["PROFILES"].
-- CONFIG["SETTINGS"]["DataVisualBriefing.PreselectedProfile"] = "00000000-0000-0000-0000-000000000000"
--
-- Configure the language the briefing content is written in.
-- Allowed values are: AS_IS, EN_US, EN_GB, ZH_CN, HI_IN, ES_ES, FR_FR, DE_DE, DE_CH, DE_AT,
-- JA_JP, RU_RU, OTHER
-- AS_IS keeps the language of the source material.
-- Please note: AI Studio's own texts inside an exported briefing, such as the footer and the
-- reset button, are always US English regardless of this setting.
-- CONFIG["SETTINGS"]["DataVisualBriefing.PreselectedTargetLanguage"] = "EN_US"
--
-- Configure a free-form language, used only when PreselectedTargetLanguage is "OTHER".
-- Any language name is allowed, for example "Swiss German" or "Brazilian Portuguese".
-- CONFIG["SETTINGS"]["DataVisualBriefing.PreselectedOtherLanguage"] = ""
--
-- Configure the audience the briefing is written for. These four settings steer wording,
-- level of detail, and which evidence is emphasized.
--
-- Allowed values are: UNSPECIFIED, STUDENTS, SCIENTISTS, LAWYERS, INVESTORS, ENGINEERS,
-- SOFTWARE_DEVELOPERS, JOURNALISTS, HEALTHCARE_PROFESSIONALS, PUBLIC_OFFICIALS,
-- BUSINESS_PROFESSIONALS
-- CONFIG["SETTINGS"]["DataVisualBriefing.PreselectedAudienceProfile"] = "UNSPECIFIED"
--
-- Allowed values are: UNSPECIFIED, CHILDREN, TEENAGERS, ADULTS
-- CONFIG["SETTINGS"]["DataVisualBriefing.PreselectedAudienceAgeGroup"] = "UNSPECIFIED"
--
-- Allowed values are: UNSPECIFIED, TRAINEES, INDIVIDUAL_CONTRIBUTORS, TEAM_LEADS, MANAGERS,
-- EXECUTIVES, BOARD_MEMBERS
-- CONFIG["SETTINGS"]["DataVisualBriefing.PreselectedAudienceOrganizationalLevel"] = "UNSPECIFIED"
--
-- Allowed values are: UNSPECIFIED, NON_EXPERTS, BASIC, INTERMEDIATE, EXPERTS
-- CONFIG["SETTINGS"]["DataVisualBriefing.PreselectedAudienceExpertise"] = "UNSPECIFIED"
--
-- Configure whether each briefing component lists the source files it was derived from.
-- Allowed values are: true, false
-- CONFIG["SETTINGS"]["DataVisualBriefing.ShowSourceReferences"] = true
--
-- Configure whether images are downscaled and re-encoded before they are embedded.
-- Allowed values are: true, false
-- Images are always embedded in the exported file. With true, images larger than 2560 pixels on
-- their longest edge are scaled down, which keeps exported briefings substantially smaller.
-- With false, the original image bytes are embedded unchanged.
-- CONFIG["SETTINGS"]["DataVisualBriefing.OptimizeImages"] = true
--
-- Configure the minimum provider confidence required to build a briefing.
-- Allowed values are: NONE, VERY_LOW, LOW, MODERATE, MEDIUM, HIGH
-- Source material is sent to the selected provider, so this acts as a guard for confidential
-- documents. Providers below this level cannot be selected in the assistant.
-- CONFIG["SETTINGS"]["DataVisualBriefing.MinimumProviderConfidence"] = "NONE"
-- Configure defaults for the Assistant Builder.
-- Preselection must be enabled for the remaining Assistant Builder settings to take effect.
-- CONFIG["SETTINGS"]["DataAssistantBuilder.PreselectOptions"] = true
--
-- Configure the preselected provider for building assistants.
-- It must be one of the provider IDs defined in CONFIG["LLM_PROVIDERS"].
-- Without a preselected provider, the Assistant Builder uses the app-wide default provider.
-- CONFIG["SETTINGS"]["DataAssistantBuilder.PreselectedProvider"] = "00000000-0000-0000-0000-000000000000"
--
-- Configure the language in which the generated assistants answer.
-- Allowed values are: AS_IS, EN_US, EN_GB, ZH_CN, HI_IN, ES_ES, FR_FR, DE_DE, DE_CH, DE_AT,
-- JA_JP, RU_RU, OTHER
-- AS_IS leaves the output language of the generated assistants open.
-- CONFIG["SETTINGS"]["DataAssistantBuilder.PreselectedOutputLanguage"] = "AS_IS"
--
-- Configure a free-form language, used only when PreselectedOutputLanguage is "OTHER".
-- CONFIG["SETTINGS"]["DataAssistantBuilder.PreselectedOtherOutputLanguage"] = ""
--
-- Configure the minimum provider confidence required to build assistants.
-- Allowed values are: NONE, UNTRUSTED, UNKNOWN, VERY_LOW, LOW, MODERATE, MEDIUM, HIGH
-- Providers below this level cannot be selected in the Assistant Builder. This minimum applies
-- only while preselection is enabled; the app-wide minimum confidence applies in any case.
-- CONFIG["SETTINGS"]["DataAssistantBuilder.MinimumProviderConfidence"] = "NONE"
--
-- Allow users to change individual managed Assistant Builder defaults locally.
-- CONFIG["SETTINGS"]["DataAssistantBuilder.PreselectOptions.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataAssistantBuilder.PreselectedProvider.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataAssistantBuilder.PreselectedOutputLanguage.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataAssistantBuilder.PreselectedOtherOutputLanguage.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataAssistantBuilder.MinimumProviderConfidence.AllowUserOverride"] = true
-- Configure enterprise approvals for assistant plugins.
-- Each approval is matched only by the current SHA-256 hash over all Lua files
-- in the assistant plugin folder, in canonical sorted order.
-- When the hash matches, the assistant plugin is treated as SAFE immediately and
-- no user-run security audit is required.
-- You can generate the exact hash with the build-script command:
-- dotnet run --project app/Build -- assistant-plugin-hash "<plugin-dir>" --lua-snippet
--
-- Only works in configurations your configuration server deploys. An approval marks an
-- assistant plugin as safe without any audit, and AI Studio then tells users that their
-- organization approved it. A configuration plugin that a user placed locally therefore
-- cannot approve anything: AI Studio ignores its approvals and writes a warning to the
-- log. This is decided by where the plugin is stored, not by DEPLOYED_USING_CONFIG_SERVER.
--
-- Adds up, does not replace: approvals of all your configurations are combined, so a
-- department configuration can approve additional assistant plugins without repeating
-- the approvals of the base configuration. Each configuration keeps its own approvals,
-- so removing one of them only withdraws the approvals it had granted.
--
-- An approval only says that a plugin is safe. Whether it is enabled is a second
-- decision, and without the optional Activate field it stays with your colleagues: the
-- assistant is approved, and everybody switches it on themselves. Set Activate to have
-- AI Studio enable it instead. AllowUserOverride works as it does for every setting:
-- without it, your colleagues cannot switch the assistant off; with it, you only provide
-- a default, which AI Studio applies once and then leaves alone.
--
-- Activate AllowUserOverride Result
-- ------------------------------------------------------------------------
-- absent any approved, everybody enables it themselves
-- true true enabled for everybody, may be switched off
-- true absent enabled for everybody, cannot be switched off
--
-- Activating needs more than the approval: AI Studio only enables an assistant plugin
-- your organization actually rolled out, i.e. one below .config or .config-tests, or one
-- marked with DEPLOYED_USING_CONFIG_SERVER. An approval alone is matched by hash and would
-- otherwise also cover a copy a user placed themselves, which you can neither update nor
-- withdraw. Such a copy stays approved, but nobody's settings are changed for it.
--
-- When two of your configurations approve the same hash, any Activate wins, while the
-- freedom to switch the assistant off survives only if every configuration asking for the
-- activation grants it.
-- CONFIG["SETTINGS"]["DataAssistantPluginAudit.EnterpriseApprovedPlugins"] = {
-- {
-- ["PluginHash"] = "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
-- ["DisplayName"] = "Name of Plugin",
-- ["Comment"] = "Optional comment",
-- ["ApprovedBy"] = "Optional Approver",
-- ["ApprovedAtUtc"] = "2026-07-02T09:30:00Z",
-- ["Activate"] = true,
-- ["AllowUserOverride"] = true,
-- }
-- }
-- Configure a global shortcut for starting and stopping dictation.
--
-- The format follows the Rust and Tauri conventions. Especially,
-- when you want to use the CTRL key on Windows (or the CMD key on macOS),
-- please use "CmdOrControl" as the key name. All parts of the shortcut
-- must be separated by a plus sign (+).
--
-- Examples are: "CmdOrControl+Shift+D", "Alt+F9", "F8"
-- CONFIG["SETTINGS"]["DataApp.ShortcutVoiceRecording"] = "CmdOrControl+1"
-- Configure whether tools are available at all. The default is true.
-- When tools are disabled globally, tool selection is hidden in chats and assistants,
-- but the global tool settings remain available to administrators.
-- CONFIG["SETTINGS"]["DataTools.EnableTools"] = false
-- Tools and tool collections:
-- Some tools only make sense together, e.g., searching, reading, and counting mails. They form a
-- tool collection: users select it as one, it needs one minimum provider confidence, and you
-- switch it off as one. The model still calls each of its tools by name. Wherever the settings
-- below, chat templates, or document analysis policies ask for a tool ID, use the ID of the
-- collection for such tools. A tool which belongs to no collection keeps its own ID.
-- The ID of a tool in a collection stands for its whole collection: naming it switches off the
-- whole collection or sets its confidence, and of several levels set for a collection and its
-- tools, the highest applies.
-- Collection IDs include: mailboxes (search_mails, read_mail, and count_mails; while the mailbox
-- preview is enabled)
-- Disable individual tools or tool collections by their stable ID. The default is an empty set.
-- Unknown IDs are safely ignored and can be deployed before a future tool is installed.
-- semantic_search lets the model search the data sources of a chat itself. Nobody selects it:
-- it offers itself whenever a chat has data sources to search. Disabling it makes AI Studio
-- search the data sources with every message instead, the way it does for models without
-- tool usage.
-- Users can switch off further tools themselves in the tool settings, e.g., one they never need.
-- They can never switch on a tool you disable here.
-- CONFIG["SETTINGS"]["DataTools.DisabledToolIds"] = { "web_search" }
-- Configure the minimum provider confidence level required for individual tools or tool
-- collections.
-- Tool IDs include: web_search, read_web_page, search_confluence, semantic_search
-- Collection IDs include: mailboxes
-- Allowed values are: NONE, UNTRUSTED, VERY_LOW, LOW, MODERATE, MEDIUM, HIGH
-- Defaults: web_search = VERY_LOW, read_web_page = VERY_LOW, search_confluence = HIGH,
-- semantic_search = NONE, mailboxes = VERY_LOW
-- search_confluence always searches with a HIGH-confidence provider only, whatever value is
-- set here.
-- semantic_search offers a provider only the data sources whose own confidence level it meets,
-- so it needs no minimum of its own. A provider below a minimum set here has the data sources
-- searched with every message instead.
-- CONFIG["SETTINGS"]["DataTools.MinimumProviderConfidenceByToolId"] = {
-- ["web_search"] = "VERY_LOW",
-- ["read_web_page"] = "VERY_LOW",
-- ["search_confluence"] = "HIGH",
-- ["semantic_search"] = "NONE",
-- ["mailboxes"] = "VERY_LOW"
-- }
-- Configure the settings of individual tools. Keys are "<tool ID>.<field name>", values are
-- always strings. This works for every tool, including tools added by plugins, because nothing
-- here needs to be known to AI Studio in advance. Settings belong to the tool, also when it is
-- part of a tool collection, so these keys always start with the tool ID.
--
-- Two tables decide how firmly a value applies:
-- LockedToolSettings - the user cannot change it, and it is reapplied on every update.
-- DefaultToolSettings - pre-fills the setting; a value the user saves afterwards wins.
--
-- A tool field marked as secret, such as an API key, can be rolled out as well — but only
-- encrypted with the enterprise encryption secret, in the same "ENC:v2:<base64>" or
-- "ENC:v1:<base64>" form the providers above use, and only through LockedToolSettings. A locked
-- secret leaves whatever the user entered untouched, so their own key returns when you stop
-- deploying yours. A plaintext secret is refused with a warning in the log rather than used.
--
-- Field names of the Web Search tool. At least one of its search services has to be configured
-- before the tool can be used; which one you pick is up to you, since all three can be rolled
-- out from here:
-- searxng.baseUrl SearXNG HTTP(S) root URL or /search endpoint. The instance
-- must have the JSON format enabled, i.e. "json" listed under
-- search.formats in its settings.yml. Public instances usually
-- serve only the web interface and block automated requests,
-- so use an instance your organization operates.
-- staan.apiKey Secret. Staan API key, encrypted as described above and set
-- through LockedToolSettings, or entered by the user in the
-- tool's settings dialog.
-- staan.market Which market Staan searches when the AI model asks for a
-- language Staan does not offer, or for none in particular.
-- Staan searches one market at a time and cannot search
-- without one. Allowed values are: de-de, en-us, fr-fr.
-- tavily.apiKey Secret. Tavily API key, encrypted as described above and set
-- through LockedToolSettings, or entered by the user in the
-- tool's settings dialog.
-- tavily.searchDepth How thoroughly Tavily searches. A basic search costs one
-- request of the account's monthly quota, an advanced search
-- costs two. Allowed values are: basic, advanced.
-- backendStrategy What to do when more than one search service is configured.
-- FAILOVER asks them one after another until one returns hits.
-- PARALLEL asks all of them at once and combines their
-- results, which uses one request of every service per search.
-- SPECIFIC asks only the preferred service. The default is
-- FAILOVER. Allowed values are: FAILOVER, PARALLEL, SPECIFIC.
-- primaryBackend Which search service to ask first, and the only one asked
-- with the SPECIFIC strategy. Left empty, the services are
-- asked in a fixed order. Allowed values are: SEARXNG, STAAN,
-- TAVILY.
-- defaultLanguage Required. IETF language tag such as "de-DE", or "all" for no
-- restriction. Without a language many search engines return
-- no results at all, so the tool counts as unconfigured while
-- this is empty.
-- defaultSafeSearch How strictly the search services filter explicit results. A
-- service that cannot filter at all is not asked while this is
-- set to MODERATE or STRICT, which currently applies to Staan.
-- Allowed values are: OFF, MODERATE, STRICT.
-- maxResults Result count, as an integer string.
-- searchTimeoutSeconds Search request timeout in seconds.
-- pageTimeoutSeconds Per-page timeout in seconds.
-- allPagesRetrievalTimeoutSeconds Overall page-retrieval timeout in seconds.
-- maxTotalContentCharacters Total content-character budget.
-- minContentCharactersPerResult Per-result content allocation.
--
-- Field names of the Read Web Page tool:
-- timeoutSeconds Page-loading timeout in seconds.
-- maxContentCharacters Content-character limit.
-- freeAddressChoice Whether the AI may read web addresses it chose itself. Allowed values are:
-- OFF -> the AI reads only addresses which appear in the chat, such as in
-- a message, an attached document, or a data source, or which a
-- tool returned, such as a search hit. AI Studio refuses every
-- other address. This is the default.
-- ON -> the AI may also choose addresses itself.
-- allowedPrivateHosts Comma-separated private or VPN host patterns. Public pages need not be
-- listed. Wildcards match subdomains only, so add the root domain
-- separately. Allowed private hosts require a provider with HIGH
-- confidence. AI Studio only tries the current user's operating-system
-- sign-in for explicitly allowed HTTPS targets when that provider
-- requirement is met, and it never reuses browser cookies. Allowed
-- private hosts count as services configured in AI Studio: a chat which
-- read internal content may still read them, see below.
-- internalPageOutboundDataRestriction
-- Where a chat may send data once it read internal content: a page with
-- a private or VPN address, a page of the Confluence wiki configured for
-- search_confluence, whatever its address, or a search of that wiki. Only
-- the page reached after all redirects counts. A web search or an address
-- the AI writes could otherwise carry internal content to third parties.
-- The same level applies to the search_confluence tool. A chat keeps the
-- level it had when it read the content. Allowed values are:
-- ONLY_CONFIGURED_SERVICES -> the chat reads only pages of the wiki and of
-- the allowed private hosts, and no web
-- search runs.
-- ONLY_LINKS_FROM_CHAT -> the chat also reads pages whose addresses
-- stand in the chat, written by the user or
-- returned by a tool, exactly as they stand
-- there. No web search runs, and the AI
-- cannot choose addresses outside the wiki
-- and the allowed private hosts. This is the
-- default.
-- UNRESTRICTED -> no restriction beyond the ones of each tool.
-- Lock it to ONLY_CONFIGURED_SERVICES when the AI must not even choose which
-- of the given links to follow.
--
-- Field names of the Search Confluence tool, which supports Confluence Data Center. Confluence
-- Cloud is not supported yet.
-- baseUrl Required HTTPS root URL of the Confluence Data Center wiki, including its
-- context path if present, for example https://wiki.example.org/confluence/.
-- Search loads dosearchsite.action with the same web-page reader as
-- read_web_page and uses the current user's operating-system sign-in when the
-- wiki has a private or VPN address. Redirects outside this URL are refused. A
-- provider must have HIGH confidence to receive search results.
-- timeoutSeconds Search request timeout in seconds, at most 120. Default: 30.
-- Selecting search_confluence also selects read_web_page, which opens the pages found. If your
-- wiki has a private or VPN address, add its host to read_web_page.allowedPrivateHosts as well.
-- Where a chat may send data after a search is set by read_web_page.internalPageOutboundDataRestriction.
--
-- CONFIG["SETTINGS"]["DataTools.LockedToolSettings"] = {
-- ["web_search.searxng.baseUrl"] = "https://searxng.example.org/",
-- ["web_search.defaultLanguage"] = "de-DE",
-- ["web_search.backendStrategy"] = "FAILOVER",
-- ["web_search.tavily.apiKey"] = "ENC:v2:<base64-encoded encrypted data>",
-- ["read_web_page.freeAddressChoice"] = "OFF",
-- ["read_web_page.allowedPrivateHosts"] = "example.org, *.example.org",
-- ["read_web_page.internalPageOutboundDataRestriction"] = "ONLY_LINKS_FROM_CHAT",
-- ["search_confluence.baseUrl"] = "https://wiki.example.org/confluence/"
-- }
--
-- CONFIG["SETTINGS"]["DataTools.DefaultToolSettings"] = {
-- ["web_search.maxResults"] = "5",
-- ["web_search.defaultSafeSearch"] = "MODERATE",
-- ["web_search.tavily.searchDepth"] = "basic",
-- ["read_web_page.timeoutSeconds"] = "30",
-- ["search_confluence.timeoutSeconds"] = "30"
-- }
-- Configure the HTTP timeout for external requests, in seconds.
-- The default is 3600 (1 hour).
-- CONFIG["SETTINGS"]["DataApp.HttpClientTimeoutSeconds"] = 3600
-- Configure whether requests to self-hosted servers name the feature of AI Studio which sent them.
-- Only self-hosted providers and LiteLLM receive these details; cloud providers never do.
-- When set to true, their requests carry a User-Agent such as
-- "MindWorkAIStudio/26.10.1 (win-x64) Component/TRANSLATION_ASSISTANT", which lets the operators
-- of these servers see which features are used. The default is false: AI Studio then sends no
-- User-Agent at all. The Enterprise IT documentation describes what is sent, and what to clarify
-- before you switch it on.
-- Allowed values are: true, false
-- CONFIG["SETTINGS"]["DataApp.ShareFeatureUsageWithSelfHostedServerOperators"] = true
--
-- Allow users to change this setting locally.
-- Allowed values are: true, false
-- When set to true, the configured value becomes the organization default,
-- but users can still switch it on or off in the app settings.
-- CONFIG["SETTINGS"]["DataApp.ShareFeatureUsageWithSelfHostedServerOperators.AllowUserOverride"] = true
-- Configure additional root certificates for external HTTPS requests.
--
-- This is intended for managed Linux/Flatpak deployments where organization-internal
-- HTTPS certificates chain to a private root CA that is not visible inside the sandbox.
-- The file must be a PEM bundle with one or more root CA certificates and must be
-- readable by AI Studio.
--
-- IMPORTANT: A configuration plugin cannot fix the very first download of that same
-- configuration plugin. For bootstrapping enterprise configuration downloads, deploy
-- the equivalent environment variables before AI Studio starts:
--
-- MINDWORK_AI_STUDIO_EXTERNAL_HTTP_CUSTOM_ROOT_CERTIFICATES_ENABLED=true
-- MINDWORK_AI_STUDIO_EXTERNAL_HTTP_CUSTOM_ROOT_CERTIFICATE_BUNDLE_PATH=/path/in/sandbox/company-root-cas.pem
-- MINDWORK_AI_STUDIO_EXTERNAL_HTTP_CUSTOM_ROOT_CERTIFICATE_ALLOWED_HOSTS=*.intra.example.org;data.example.org
--
-- Replaces, does not merge: a configuration with a higher priority replaces the host
-- list completely. Deploy this setting in one configuration only, or repeat every host
-- of the base configuration. Otherwise, hosts of the base configuration silently stop
-- trusting your root certificates.
--
-- CONFIG["SETTINGS"]["DataApp.ExternalHttpCustomRootCertificatesEnabled"] = true
-- CONFIG["SETTINGS"]["DataApp.ExternalHttpCustomRootCertificateBundlePath"] = "/path/in/sandbox/company-root-cas.pem"
-- CONFIG["SETTINGS"]["DataApp.ExternalHttpCustomRootCertificateAllowedHosts"] = { "*.intra.example.org", "eri.example.org" }
-- Configure provider confidence settings.
-- These settings apply to LLM providers, embedding providers, and transcription providers.
--
-- Configure a predefined confidence scheme.
-- Allowed values are: TRUST_ALL, TRUST_USA_EUROPE, TRUST_USA, TRUST_EUROPE, TRUST_ASIA, LOCAL_TRUST_ONLY, CUSTOM
-- CONFIG["SETTINGS"]["DataConfidence.ConfidenceScheme"] = "TRUST_EUROPE"
--
-- Configure whether users can still change the confidence scheme locally.
-- Allowed values are: true, false
-- When set to true, the configured confidence scheme becomes the organization default,
-- but users can still choose another scheme in the app settings.
-- CONFIG["SETTINGS"]["DataConfidence.ConfidenceScheme.AllowUserOverride"] = true
--
-- Configure whether confidence levels are shown in the UI.
-- CONFIG["SETTINGS"]["DataConfidence.ShowProviderConfidence"] = true
--
-- Configure an app-wide minimum confidence level.
-- Allowed values are: NONE, VERY_LOW, LOW, MODERATE, MEDIUM, HIGH
-- CONFIG["SETTINGS"]["DataConfidence.EnforceGlobalMinimumConfidence"] = true
-- CONFIG["SETTINGS"]["DataConfidence.GlobalMinimumConfidence"] = "MEDIUM"
--
-- Configure whether users can change the app-wide minimum confidence level locally.
-- CONFIG["SETTINGS"]["DataConfidence.EnforceGlobalMinimumConfidence.AllowUserOverride"] = false
-- CONFIG["SETTINGS"]["DataConfidence.GlobalMinimumConfidence.AllowUserOverride"] = false
--
-- Configure a custom confidence scheme.
-- This is used when DataConfidence.ConfidenceScheme is set to CUSTOM.
-- Allowed provider keys are: OPEN_AI, ANTHROPIC, MISTRAL, GOOGLE, X, DEEP_SEEK, ALIBABA_CLOUD,
-- PERPLEXITY, OPEN_ROUTER, HETZNER, IONOS, LITE_LLM, REQUESTY, FIREWORKS, GROQ, HUGGINGFACE,
-- SELF_HOSTED, HELMHOLTZ, GWDG
-- Allowed confidence values are: UNTRUSTED, VERY_LOW, LOW, MODERATE, MEDIUM, HIGH
--
-- A provider which DataApp.ProhibitedProviders names is always UNTRUSTED. Its level in this
-- table is ignored and logged as a warning, see DataApp.ProhibitedProviders above.
--
-- Replaces, does not merge: a configuration with a higher priority replaces the whole
-- table. Every configuration that sets this must therefore list all providers it wants
-- to cover. A partial table is not completed from the configuration below it, and the
-- providers left out fall back to the app default.
-- CONFIG["SETTINGS"]["DataConfidence.CustomConfidenceScheme"] = {
-- ["OPEN_AI"] = "MODERATE",
-- ["ANTHROPIC"] = "MODERATE",
-- ["MISTRAL"] = "HIGH",
-- ["GOOGLE"] = "LOW",
-- ["X"] = "LOW",
-- ["DEEP_SEEK"] = "LOW",
-- ["ALIBABA_CLOUD"] = "LOW",
-- ["PERPLEXITY"] = "MODERATE",
-- ["OPEN_ROUTER"] = "MODERATE",
-- ["HETZNER"] = "HIGH",
-- ["IONOS"] = "HIGH",
-- ["LITE_LLM"] = "MODERATE",
-- ["REQUESTY"] = "MODERATE",
-- ["FIREWORKS"] = "MODERATE",
-- ["GROQ"] = "MODERATE",
-- ["HUGGINGFACE"] = "MODERATE",
-- ["SELF_HOSTED"] = "HIGH",
-- ["HELMHOLTZ"] = "HIGH",
-- ["GWDG"] = "HIGH",
-- }
--
-- Configure whether users can change the custom confidence scheme locally.
-- CONFIG["SETTINGS"]["DataConfidence.CustomConfidenceScheme.AllowUserOverride"] = false
--
-- Configure provider instances trusted by your organization for data-source security checks.
-- These IDs may refer to LLM providers, embedding providers, or transcription providers
-- defined in this configuration. Trusted providers are treated like self-hosted providers
-- only for data-source security checks and related local data warnings. This trust does not
-- meet a required confidence level, for example of a local data source or a private web page;
-- raise the provider's level in the custom confidence scheme above for that.
--
-- Replaces, does not merge: a configuration with a higher priority replaces this list
-- completely, so providers trusted by the base configuration lose that status. Repeat
-- them here to keep them trusted.
-- CONFIG["SETTINGS"]["DataSourceSecuritySettings.TrustedProviderIds"] = {
-- "00000000-0000-0000-0000-000000000000",
-- "00000000-0000-0000-0000-000000000001",
-- }
-- Configure the least strict outbound data restriction a data source may have, i.e., a local
-- file, a local folder, or an external data source (ERI server). Each data source decides where
-- a chat may still send data once the AI found something in it:
-- ONLY_CONFIGURED_SERVICES Only services configured in AI Studio, such as your data sources,
-- your Confluence, or the allowed private hosts of the tool Read Web
-- Page. No other web pages, no web search.
-- ONLY_LINKS_FROM_CHAT Also web pages whose addresses stand in the chat, written by the
-- user or returned by a tool. No web search, and no addresses the AI
-- chooses itself outside the configured services.
-- UNRESTRICTED Every tool the user selected.
-- A data source set to a less strict level gets this one whenever its passages reach a chat, and
-- the dialog of the data source no longer offers the less strict levels. An external data source
-- which only self-hosted providers may use always gets ONLY_CONFIGURED_SERVICES. A chat which
-- found something before keeps the level it got then. The default is UNRESTRICTED, which leaves
-- the choice to the user. New data sources start with ONLY_LINKS_FROM_CHAT either way.
-- CONFIG["SETTINGS"]["DataSourceSecuritySettings.MinimumOutboundDataRestriction"] = "ONLY_LINKS_FROM_CHAT"
-- Configure the least strict outbound data restriction a mailbox may have. Mails come from
-- strangers and may contain instructions meant for the AI, so each mailbox decides where a chat
-- may still send data once it has read mails from it:
-- ONLY_CONFIGURED_SERVICES Only services configured in AI Studio, such as the mailbox itself
-- or your Confluence. No web pages, no web search.
-- ONLY_LINKS_FROM_CHAT Also web pages whose addresses stand in the chat, written by the
-- user or returned by a tool. No web search, and no addresses the AI
-- chooses itself.
-- UNRESTRICTED Every tool the user selected.
-- A mailbox set to a less strict level gets this one whenever its mails reach a chat, and the
-- mailbox dialog no longer offers the less strict levels. A chat which read mails before keeps
-- the level it got then, until it reads mails again. The default is UNRESTRICTED, which leaves
-- the choice to the user. New mailboxes start with ONLY_CONFIGURED_SERVICES either way.
-- CONFIG["SETTINGS"]["DataMailboxes.MinimumOutboundDataRestriction"] = "ONLY_LINKS_FROM_CHAT"
-- Configure whether mailboxes may only be on the mail servers your configurations offer in
-- CONFIG["MAILBOX_PROVIDERS"]. The default is false. When set to true, AI Studio connects to no
-- other IMAP server: before every connection, it compares the host of the mailbox with the hosts
-- of those mail servers; port and encryption make no difference. A mailbox a user added on another
-- server before stops synchronizing at once, and the AI no longer reads it. Its local index stays,
-- so the mailbox comes back as it was, should you allow its server again. Without any mail server
-- in CONFIG["MAILBOX_PROVIDERS"], this blocks every mailbox.
-- CONFIG["SETTINGS"]["DataMailboxes.AllowOnlyOrganizationMailServers"] = true
-- Configure a pause between two indexing steps of local data sources, i.e., files, folders, and
-- mailboxes. AI Studio indexes large data sources in steps of a few minutes. Between two steps, it
-- waits for a random number of seconds between the lower and the upper bound, both included. This
-- spares an embedding server which many users share: a single user with large folders or
-- mailboxes no longer keeps it busy for hours. The pause applies after every step which worked on
-- documents, also when the same data source carries on. Time which passes anyway counts toward
-- it. Both values must be between 0 and 300 seconds. The default is 0 for both, i.e., no pause.
-- You may set one bound or both. A bound you set wins, and AI Studio adjusts the other one to it.
-- Should the upper bound be below the lower bound, the lower bound wins.
-- CONFIG["SETTINGS"]["DataDataSourceIndexing.MinimumPauseBetweenStepsSeconds"] = 30
-- CONFIG["SETTINGS"]["DataDataSourceIndexing.MaximumPauseBetweenStepsSeconds"] = 90
--
-- Allow users to change the bounds, so that your values are only defaults:
-- CONFIG["SETTINGS"]["DataDataSourceIndexing.MinimumPauseBetweenStepsSeconds.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataDataSourceIndexing.MaximumPauseBetweenStepsSeconds.AllowUserOverride"] = true
-- Configure the data source selection agent.
-- This agent is used when chat data source options enable AI-based data source selection.
-- The provider must be one of the provider IDs defined in CONFIG["LLM_PROVIDERS"].
-- CONFIG["SETTINGS"]["DataAgentDataSourceSelection.PreselectAgentOptions"] = true
-- CONFIG["SETTINGS"]["DataAgentDataSourceSelection.PreselectedAgentProvider"] = "00000000-0000-0000-0000-000000000000"
-- CONFIG["SETTINGS"]["DataAgentDataSourceSelection.PreselectAgentOptions.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataAgentDataSourceSelection.PreselectedAgentProvider.AllowUserOverride"] = true
-- Configure the retrieval context validation agent.
-- This agent is used when retrieval context validation is enabled globally and chat data source options enable AI-based validation.
-- The provider must be one of the provider IDs defined in CONFIG["LLM_PROVIDERS"].
-- CONFIG["SETTINGS"]["DataAgentRetrievalContextValidation.EnableRetrievalContextValidation"] = true
-- CONFIG["SETTINGS"]["DataAgentRetrievalContextValidation.PreselectAgentOptions"] = true
-- CONFIG["SETTINGS"]["DataAgentRetrievalContextValidation.PreselectedAgentProvider"] = "00000000-0000-0000-0000-000000000000"
-- CONFIG["SETTINGS"]["DataAgentRetrievalContextValidation.NumParallelValidations"] = 3
-- CONFIG["SETTINGS"]["DataAgentRetrievalContextValidation.EnableRetrievalContextValidation.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataAgentRetrievalContextValidation.PreselectAgentOptions.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataAgentRetrievalContextValidation.PreselectedAgentProvider.AllowUserOverride"] = true
-- CONFIG["SETTINGS"]["DataAgentRetrievalContextValidation.NumParallelValidations.AllowUserOverride"] = true
-- Configure assistant plugin security audits.
--
-- Configure whether assistant plugins must be audited before users can activate them.
-- CONFIG["SETTINGS"]["DataAssistantPluginAudit.RequireAuditBeforeActivation"] = true
--
-- Configure a dedicated provider for assistant plugin audits.
-- It must be one of the provider IDs defined in CONFIG["LLM_PROVIDERS"].
-- Without a selected audit provider, AI Studio uses the app-wide default provider.
-- CONFIG["SETTINGS"]["DataAssistantPluginAudit.PreselectedAgentProvider"] = "00000000-0000-0000-0000-000000000000"
--
-- Configure the minimum audit level assistant plugins must meet.
-- Allowed values are: UNKNOWN, DANGEROUS, CAUTION, SAFE
-- CONFIG["SETTINGS"]["DataAssistantPluginAudit.MinimumLevel"] = "CAUTION"
--
-- Configure whether activation is blocked when the audit result is below the minimum level.
-- CONFIG["SETTINGS"]["DataAssistantPluginAudit.BlockActivationBelowMinimum"] = true
--
-- Configure whether new or changed assistant plugins are audited automatically in the background.
-- CONFIG["SETTINGS"]["DataAssistantPluginAudit.AutomaticallyAuditAssistants"] = false
--
-- Configure whether users can change assistant plugin audit settings locally.
-- CONFIG["SETTINGS"]["DataAssistantPluginAudit.RequireAuditBeforeActivation.AllowUserOverride"] = false
-- CONFIG["SETTINGS"]["DataAssistantPluginAudit.PreselectedAgentProvider.AllowUserOverride"] = false
-- CONFIG["SETTINGS"]["DataAssistantPluginAudit.MinimumLevel.AllowUserOverride"] = false
-- CONFIG["SETTINGS"]["DataAssistantPluginAudit.BlockActivationBelowMinimum.AllowUserOverride"] = false
-- CONFIG["SETTINGS"]["DataAssistantPluginAudit.AutomaticallyAuditAssistants.AllowUserOverride"] = false
-- Example chat templates for this configuration:
CONFIG["CHAT_TEMPLATES"] = {}
-- A simple example chat template:
-- CONFIG["CHAT_TEMPLATES"][#CONFIG["CHAT_TEMPLATES"]+1] = {
-- ["Id"] = "00000000-0000-0000-0000-000000000000",
-- ["Name"] = "<user-friendly name of the chat template>",
-- ["SystemPrompt"] = "You are <Company Name>'s helpful AI assistant for <Department Name>. Your task is ...",
-- ["PredefinedUserPrompt"] = "Please help me with ...",
-- ["AllowProfileUsage"] = true,
-- ["ExampleConversation"] = {
-- {
-- -- Allowed values are: USER, AI, SYSTEM
-- ["Role"] = "USER",
-- ["Content"] = "Hello! Can you help me with a quick task?"
-- },
-- {
-- -- Allowed values are: USER, AI, SYSTEM
-- ["Role"] = "AI",
-- ["Content"] = "Of course. What do you need?"
-- }
-- }
-- }
-- An example chat template with file attachments:
-- This template automatically attaches specified files when the user selects it.
-- CONFIG["CHAT_TEMPLATES"][#CONFIG["CHAT_TEMPLATES"]+1] = {
-- ["Id"] = "00000000-0000-0000-0000-000000000001",
-- ["Name"] = "Document Analysis Template",
-- ["SystemPrompt"] = "You are an expert document analyst. Please analyze the attached documents and provide insights.",
-- ["PredefinedUserPrompt"] = "Please analyze the attached company guidelines and summarize the key points.",
-- ["AllowProfileUsage"] = true,
-- -- Optional: Pre-attach files that will be automatically included when using this template.
-- -- These files will be loaded when the user selects this chat template.
-- -- Note: File paths can be absolute paths that are accessible to all users, or relative paths
-- -- inside this plugin folder, for example "attachments/00000000-0000-0000-0000-000000000001/Guidelines.pdf".
-- ["FileAttachments"] = {
-- "G:\\Company\\Documents\\Guidelines.pdf",
-- "G:\\Company\\Documents\\CompanyPolicies.docx"
-- },
-- ["ExampleConversation"] = {
-- {
-- ["Role"] = "USER",
-- ["Content"] = "I have attached the company documents for analysis."
-- },
-- {
-- ["Role"] = "AI",
-- ["Content"] = "Thank you. I'll analyze the documents and provide a comprehensive summary."
-- }
-- }
-- }
-- An example chat template which preselects tools and data sources:
-- Both are optional and independent of each other. Leaving a field out is not the same as
-- leaving it empty:
--
-- ToolIds omitted -> the chat starts with the tools set as its default
-- ToolIds = {} -> the chat starts with no tools at all
-- DataSourceOptions omitted -> the chat starts with the data source defaults
-- DataSourceOptions = { ... } -> the chat starts with exactly what this table says
--
-- Both are a preselection, not a limit: users change either of them in the chat as usual.
-- CONFIG["CHAT_TEMPLATES"][#CONFIG["CHAT_TEMPLATES"]+1] = {
-- ["Id"] = "00000000-0000-0000-0000-000000000002",
-- ["Name"] = "Intranet Research",
-- ["SystemPrompt"] = "You are <Company Name>'s research assistant. Answer from our own documents and say where each answer comes from.",
-- ["AllowProfileUsage"] = true,
--
-- -- Optional: the tools a chat with this template starts with, by tool or collection ID.
-- -- A tool ID unknown to the installation is ignored, and so is a tool your
-- -- organization switched off. A tool has to meet the confidence requirements of the
-- -- provider in use, so it may stay unavailable even though this template names it.
-- -- Tool IDs include: web_search, read_web_page, search_confluence
-- -- Collection IDs include: mailboxes
-- -- Selecting search_confluence also selects read_web_page. semantic_search cannot be
-- -- selected here: it offers itself whenever the chat has data sources to search.
-- ["ToolIds"] = {
-- "read_web_page",
-- },
--
-- -- Optional: the data source options a chat with this template starts with.
-- -- Every field inside is optional as well. DisableDataSources defaults to false here,
-- -- because writing this table at all says that the template wants data sources;
-- -- RetrievalMode defaults to SEMANTIC_SEARCH, and the other three default to false and
-- -- an empty list.
-- ["DataSourceOptions"] = {
-- -- Set to true to start the chat with data sources switched off.
-- ["DisableDataSources"] = false,
--
-- -- How the data sources are searched, with the same values and the same fallback
-- -- as DataChat.PreselectedDataSourcesRetrievalMode: SEMANTIC_SEARCH lets the AI
-- -- search them itself whenever a question calls for it, EVERY_MESSAGE lets AI Studio
-- -- search them with every message. With SEMANTIC_SEARCH, no agent takes part:
-- -- AutomaticDataSourceSelection then lets the AI itself choose among all data
-- -- sources it may use, and AutomaticValidation has no effect.
-- ["RetrievalMode"] = "EVERY_MESSAGE",
--
-- -- Let an agent choose the fitting data sources for each question. When true,
-- -- PreselectedDataSourceIds is not used.
-- ["AutomaticDataSourceSelection"] = false,
--
-- -- Let an agent check whether the retrieved data fits the question.
-- ["AutomaticValidation"] = true,
--
-- -- Must contain IDs from CONFIG["DATA_SOURCES"] or user-configured data sources.
-- -- IDs from another configuration of your organization work as well: they are
-- -- resolved against every known data source, not only against the ones defined
-- -- here. IDs that resolve to nothing are ignored.
-- ["PreselectedDataSourceIds"] = {
-- "00000000-0000-0000-0000-000000000000",
-- },
-- },
-- }
-- An example chat template which preselects a provider, a profile, and a workspace:
-- All three are optional and independent of each other, and leaving one out keeps what a
-- chat starts with anyway. They are a preselection, not a limit: users change the provider
-- and the profile in the chat as usual, and move the chat to another workspace. The IDs may
-- name a provider or profile of this configuration, which keeps its ID on every computer, or
-- one of another configuration of your organization.
-- CONFIG["CHAT_TEMPLATES"][#CONFIG["CHAT_TEMPLATES"]+1] = {
-- ["Id"] = "00000000-0000-0000-0000-000000000003",
-- ["Name"] = "Mail Assistant",
-- ["SystemPrompt"] = "You help <Company Name>'s employees read, sort, and answer their mails.",
-- ["AllowProfileUsage"] = true,
--
-- -- Optional: the provider, and with it the model, a chat with this template starts with.
-- -- Must be an ID from CONFIG["LLM_PROVIDERS"] or of a provider of another configuration.
-- -- The provider has to meet the confidence level required for chats. A provider which
-- -- does not, or an ID which resolves to nothing, is ignored, and the chat starts with
-- -- the provider it would start with anyway.
-- ["ProviderId"] = "11111111-1111-1111-1111-111111111111",
--
-- -- Optional: the profile a chat with this template starts with.
-- -- Must be an ID from CONFIG["PROFILES"] or of a profile of another configuration.
-- -- "00000000-0000-0000-0000-000000000000" starts the chat without a profile, whatever
-- -- the user chose as their default. An ID which resolves to nothing is ignored, and the
-- -- chat starts with the default profile of the user. The whole field is ignored when
-- -- AllowProfileUsage is false.
-- ["ProfileId"] = "22222222-2222-2222-2222-222222222222",
--
-- -- Optional: the workspace, by its name, that keeps the chats started with this template.
-- -- The workspace is created with the first message of such a chat, when it does not exist
-- -- yet. It only applies where a chat would otherwise be a disappearing chat: a chat users
-- -- start in a workspace on purpose, for example, from the workspace list, stays there, and
-- -- so does every chat while workspaces are switched off. An assistant chat launcher which
-- -- names a workspace keeps its own.
-- ["WorkspaceName"] = "Mails",
-- }
-- Introduction texts shown as expansion panels on the welcome page:
CONFIG["INTRODUCTIONS"] = {}
-- An example introduction:
-- CONFIG["INTRODUCTIONS"][#CONFIG["INTRODUCTIONS"]+1] = {
-- ["Id"] = "00000000-0000-0000-0000-000000000000",
-- ["Title"] = "Welcome to Your Organization's AI Studio",
-- ["Version"] = "1",
-- ["Index"] = 1,
-- ["Markdown"] = [===[
-- ## Getting Started
--
-- This AI Studio installation is managed by your organization.
-- Please use the preconfigured providers and follow your internal
-- AI usage guidelines.
--
-- Further information is available in the [internal wiki](https://example.org/wiki).
-- ]===]
-- }
-- What AI Studio tells users in the panel on the home page which asks for their API key. It asks
-- as long as a provider of this plugin which sets "PromptForUserAPIKey" has no API key. AI Studio
-- checks the key the user enters with the first of these providers which can list its models,
-- and then stores it for all of them. A key the provider refuses is not stored. When no provider
-- can check the key, or the provider is out of reach, AI Studio stores the key with a warning.
-- Markdown is required, Title is optional. Without this table, AI Studio shows a generic request.
-- CONFIG["USER_API_KEY_PROMPT"] = {
-- ["Title"] = "Please add your API key",
-- ["Markdown"] = [===[
-- To use the AI models of your organization, you need a personal API key:
--
-- 1. Open [Open WebUI](https://example.org) and sign in.
-- 2. Click your profile picture, then "Settings" and "Account".
-- 3. Create an API key, copy it, and paste it below.
-- ]===]
-- }
-- Mandatory infos that users must explicitly accept before using AI Studio:
-- AI Studio asks users again when Version, Title, or Markdown change.
-- Changing Version additionally allows the UI to communicate that a new version is available.
CONFIG["MANDATORY_INFOS"] = {}
-- An example mandatory info:
-- CONFIG["MANDATORY_INFOS"][#CONFIG["MANDATORY_INFOS"]+1] = {
-- ["Id"] = "00000000-0000-0000-0000-000000000000",
-- ["Title"] = "AI Usage Requirements",
-- ["Version"] = "1",
-- ["Markdown"] = [===[
-- ## Usage Requirements
--
-- Before using this AI offering, please ensure that:
--
-- - you have completed the required internal training,
-- - generated output is clearly labeled where necessary,
-- - results are reviewed by a human before reuse,
-- - all internal policies and applicable law are followed.
--
-- Further information is available in the [internal wiki](https://example.org/wiki).
-- ]===],
-- ["AcceptButtonText"] = "Yes, I comply with these requirements",
-- ["RejectButtonText"] = "Stop. I do not agree to these requirements"
-- }
-- Document analysis policies for this configuration:
CONFIG["DOCUMENT_ANALYSIS_POLICIES"] = {}
-- An example document analysis policy:
-- CONFIG["DOCUMENT_ANALYSIS_POLICIES"][#CONFIG["DOCUMENT_ANALYSIS_POLICIES"]+1] = {
-- ["Id"] = "00000000-0000-0000-0000-000000000000",
-- ["PolicyName"] = "Compliance Summary Policy",
-- ["PolicyDescription"] = "Summarizes compliance-relevant clauses, obligations, and deadlines found in provided documents.",
--
-- ["AnalysisRules"] = [===[
-- Focus on compliance obligations, deadlines, and required actions.
-- Ignore marketing content and high-level summaries.
-- Flag any ambiguous or missing information.
-- ]===],
--
-- ["OutputRules"] = [===[
-- Provide a Markdown report with headings for Obligations, Deadlines,
-- and Open Questions.
-- ]===],
--
-- -- Optional: minimum provider confidence required for this policy.
-- -- Allowed values are: NONE, VERY_LOW, LOW, MODERATE, MEDIUM, HIGH
-- ["MinimumProviderConfidence"] = "MEDIUM",
--
-- -- Optional: the tools an analysis with this policy may use, by tool or collection ID.
-- -- This is a limit, not a preselection: a tool which is not listed here cannot be
-- -- used for this policy. Omitting the list, or leaving it empty, means no tools.
-- -- A listed tool must still meet the confidence requirements of the provider in
-- -- use, so a tool may stay unavailable even though this policy permits it.
-- -- Tool IDs include: web_search, read_web_page, search_confluence
-- -- Collection IDs include: mailboxes
-- -- Allowing search_confluence also allows read_web_page.
-- ["AllowedToolIds"] = { "web_search" },
--
-- -- Optional: preselect a provider or profile by ID.
-- -- The IDs must exist in CONFIG["LLM_PROVIDERS"] or CONFIG["PROFILES"].
-- ["PreselectedProvider"] = "00000000-0000-0000-0000-000000000000",
-- ["PreselectedProfile"] = "00000000-0000-0000-0000-000000000000",
--
-- -- Optional: hide the policy definition section in the UI.
-- -- When set to true, users will only see the document selection interface
-- -- and cannot view or modify the policy settings.
-- -- This is useful for enterprise configurations where policy details should remain hidden.
-- -- Allowed values are: true, false (default: false)
-- ["HidePolicyDefinition"] = false
-- }
-- Profiles for this configuration:
CONFIG["PROFILES"] = {}
-- A simple profile template:
-- CONFIG["PROFILES"][#CONFIG["PROFILES"]+1] = {
-- ["Id"] = "00000000-0000-0000-0000-000000000000",
-- ["Name"] = "<user-friendly name of the profile>",
-- ["NeedToKnow"] = "I like to cook in my free time. My favorite meal is ...",
-- ["Actions"] = "Please always ensure the portion size is ..."
-- }