discourse/plugins/discourse-ai/config/locales/server.en.yml
Sam 8d5ba0dd84
FEATURE: Improve workflow node filtering (#40977)
Expand post listing filters to support regular/all post types, action
posts, whispers, and additional topic statuses while preserving guardian
visibility.

Allow AI agent workflow nodes to choose an LLM override, fall back to
agent/site defaults, and respect agents that force their default LLM.

---------

Co-authored-by: Joffrey JAFFEUX <j.jaffeux@gmail.com>
2026-06-17 13:45:55 +02:00

1025 lines
58 KiB
YAML
Vendored

en:
activerecord:
attributes:
llm_model:
name: "Model ID"
max_prompt_tokens: "Context window"
dashboard:
problem:
ai_llm_status:
one: "<a href='%{base_path}/admin/plugins/discourse-ai/ai-llms/%{target}/edit'>%{model_name}</a> needs attention. In the past hour, it failed to respond %{failed_calls} out of %{total_calls} times."
other: "<a href='%{base_path}/admin/plugins/discourse-ai/ai-llms/%{target}/edit'>%{model_name}</a> needs attention. Over the last %{count} hours, it failed to respond %{failed_calls} out of %{total_calls} times."
ai_credit_soft_limit: "%{model_name} has only %{percentage_remaining}% of credits remaining. Credits will reset at %{reset_date}. <a href='%{url}'>View AI models</a>"
ai_credit_hard_limit: "You have run out of AI credits for %{model_name}. AI features will be unavailable until %{reset_date}. <a href='%{url}'>View AI models</a>"
discourse_automation:
ai:
flag_types:
review: "Add post to review queue"
review_hide: "Add post to review queue and hide post"
review_delete: "Add post to review queue and delete post"
review_delete_silence: "Add post to review queue, delete post and silence user"
spam: "Flag as spam and hide post"
spam_silence: "Flag as spam, hide post and silence user"
scriptables:
ai_tool_action:
title: AI Tool Action
description: Execute an AI tool when the automation triggers
llm_agent_triage:
title: Triage posts using AI Agent
description: "Respond to posts using a specific AI agent"
llm_triage:
title: Triage posts using AI
description: "Triage posts using a large language model"
flagged_post: |
<div>Response from the model:</div>
<p>%{llm_response}</p>
<b>Triggered by the <a href="%{base_path}/admin/plugins/automation/%{automation_id}">%{automation_name}</a> rule.</b>
notify_author_pm:
subject: "Your post was temporarily removed for review"
body: |
Hi @%{username},
Your post in “%{topic_title}” was temporarily removed and placed in our review queue for a moderator to look at. If approved, it will be restored automatically.
Reference: %{post_url}
llm_report:
title: Periodic report using AI
description: "Periodic report based on a large language model"
llm_tagger:
title: Tag topics using AI
description: "Automatically tag topics using AI"
site_settings:
discourse_ai_enabled: "Enable the discourse AI plugin."
enable_ai_bot_starred_conversations: "Allow users to star AI bot conversations and show them in a Starred sidebar section."
ai_default_llm_model: "The default LLM model to use for all AI features"
ai_artifact_security: "The AI artifact system generates IFRAMEs with runnable code. Strict mode forces an extra click to run code. Lax mode runs code immediately. Hybrid mode allows user to supply data-ai-artifact-autorun to show right away. Disabled mode disables the artifact system."
ai_toxicity_enabled: "Enable the toxicity module."
ai_toxicity_inference_service_api_endpoint: "URL where the API is running for the toxicity module"
ai_toxicity_inference_service_api_key: "API key for the toxicity API"
ai_toxicity_inference_service_api_model: "Model to use for inference. Multilingual model works with Italian, French, Russian, Portuguese, Spanish and Turkish."
ai_toxicity_flag_automatically: "Automatically flag posts / chat messages that are above the configured thresholds."
ai_toxicity_flag_threshold_toxicity: "Toxicity: a rude, disrespectful, or unreasonable comment that is somewhat likely to make you leave a discussion or give up on sharing your perspective"
ai_toxicity_flag_threshold_severe_toxicity: "Severe Toxicity: a very hateful, aggressive, or disrespectful comment that is very likely to make you leave a discussion or give up on sharing your perspective"
ai_toxicity_flag_threshold_obscene: "Obscene"
ai_toxicity_flag_threshold_identity_attack: "Identity Attack"
ai_toxicity_flag_threshold_insult: "Insult"
ai_toxicity_flag_threshold_threat: "Threat"
ai_toxicity_flag_threshold_sexual_explicit: "Sexual Explicit"
ai_toxicity_groups_bypass: "Users on those groups will not have their posts classified by the toxicity module."
ai_sentiment_enabled: "Enable the sentiment module."
ai_sentiment_inference_service_api_endpoint: "URL where the API is running for the sentiment module"
ai_sentiment_inference_service_api_key: "API key for the sentiment API"
ai_sentiment_model_configs: "Classification model endpoints to use for inference. Sentiment classifies posts as positive, neutral, or negative. Emotion classifies posts across supported emotion labels."
ai_sentiment_models: "Classification model endpoints to use for inference. Sentiment classifies posts as positive, neutral, or negative. Emotion classifies posts across supported emotion labels."
ai_sentiment_sentiment_classification_strategy: "Sentiment classification backend."
ai_sentiment_sentiment_agent: "Agent to use for sentiment classification when the sentiment backend is agent."
ai_sentiment_emotion_classification_strategy: "Emotion classification backend."
ai_sentiment_emotion_agent: "Agent to use for emotion classification when the emotion backend is agent."
ai_nsfw_detection_enabled: "Enable the NSFW module."
ai_nsfw_inference_service_api_endpoint: "URL where the API is running for the NSFW module"
ai_nsfw_inference_service_api_key: "API key for the NSFW API"
ai_nsfw_flag_automatically: "Automatically flag NSFW posts that are above the configured thresholds."
ai_nsfw_flag_threshold_general: "General Threshold for an image to be considered NSFW."
ai_nsfw_flag_threshold_drawings: "Threshold for a drawing to be considered NSFW."
ai_nsfw_flag_threshold_hentai: "Threshold for an image classified as hentai to be considered NSFW."
ai_nsfw_flag_threshold_porn: "Threshold for an image classified as porn to be considered NSFW."
ai_nsfw_flag_threshold_sexy: "Threshold for an image classified as sexy to be considered NSFW."
ai_nsfw_models: "Models to use for NSFW inference."
ai_spam_detection_enabled: "Enable the AI spam detection module"
ai_spam_detection_max_post_count: "Maximum number of posts a user can have before they are no longer scanned for spam"
ai_spam_detection_max_trust_level: "Maximum trust level of users to scan for spam"
ai_openai_api_key: "API key for OpenAI API. ONLY used for Image creation and edits. For GPT use the LLM config tab"
ai_helper_enabled: "Enable the AI helper."
composer_ai_helper_allowed_groups: "Users on these groups will see the AI helper button in the composer."
ai_helper_allowed_in_pm: "Enable the composer's AI helper in PMs."
ai_helper_automatic_chat_thread_title_delay: "Delay in minutes before the AI helper automatically sets the chat thread title."
ai_helper_automatic_chat_thread_title: "Automatically set the chat thread titles based on thread contents."
ai_helper_enabled_features: "Select the features to enable in the AI helper."
post_ai_helper_allowed_groups: "User groups allowed to access AI Helper features in posts"
ai_helper_post_illustrator_agent: "The agent to use for the AI helper's illustrate post feature. Note: you must also create an image generation tool (Admin > Plugins > Discourse AI > Tools) for this feature to work."
ai_helper_chat_thread_title_agent: "The agent to use for generating chat thread titles."
ai_embeddings_selected_model: "Use the selected model for generating embeddings."
ai_embeddings_generate_for_pms: "Generate embeddings for personal messages."
ai_embeddings_semantic_related_topics_enabled: "Use Semantic Search for related topics."
ai_embeddings_semantic_related_topics: "Maximum number of topics to show in related topic section."
ai_embeddings_backfill_batch_size: "Number of embeddings to backfill every 15 minutes."
ai_embeddings_semantic_search_enabled: "Enable full-page semantic search."
ai_embeddings_semantic_search_use_hyde: "Use HyDE for semantic full page search. Uses an LLM to create an hypothetical post from the user search term to help with matches."
ai_embeddings_semantic_quick_search_enabled: "Enable semantic search option in search menu popup."
ai_embeddings_semantic_related_include_closed_topics: "Include closed topics in semantic search results"
ai_embeddings_semantic_related_age_penalty: "Apply exponential age penalty to topics in semantic search results. 0.0 = no penalty, 0.3 = gentle bias toward recently active content, 1.0+ = strong recency bias."
ai_embeddings_semantic_related_age_time_scale: "Time scale in days for age penalty calculation. Topics inactive this many days receive ~50% penalty with penalty=1.0. Use 365 for yearly scale, 90 for quarterly scale."
ai_embeddings_per_post_enabled: Generate embeddings for each post
ai_admin_dashboard_enabled: "Enable AI features on the admin dashboard."
ai_admin_dashboard_highlights_agent: "Agent that explains notable community shifts on the admin dashboard."
ai_summarization_enabled: "Enable the summarize feature"
ai_summarization_agent: "Agent to use for summarize feature"
ai_pm_summarization_allowed_groups: "Groups allowed to create and view summaries in PMs."
ai_summary_gists_enabled: "Generate brief summaries of latest replies in topics automatically"
ai_summary_backfill_maximum_topics_per_hour: "Number of topic summaries to backfill per hour."
ai_bot_enabled: "Enable the AI Bot module."
ai_bot_enabled_llms: "LLMs available to select for AI bot conversations"
ai_bot_enable_chat_warning: "Display a warning when PM chat is initiated. Can be overridden by editing the translation string: discourse_ai.ai_bot.pm_warning"
ai_bot_allowed_groups: "When the GPT Bot has access to the PM, it will reply to members of these groups."
ai_bot_debugging_allowed_groups: "Allow these groups to see a debug button on posts which displays the raw AI request and response"
ai_bot_public_sharing_allowed_groups: "Allow these groups to share AI personal messages with the public via a unique publicly available link. Note: if your site requires login, shares will also require login."
ai_bot_add_to_header: "Display a button in the header to start a PM with an AI Bot"
ai_bot_add_to_community_section: "Display a link in the sidebar community section to start a PM with an AI Bot"
ai_bot_github_access_token: "GitHub access token for use with GitHub AI tools (required for search support)"
ai_bot_enable_docked_composer: "Enable the docked chat-style composer for AI bot conversations instead of the standard floating composer."
ai_discover_enabled: "Enable the discovery search feature"
ai_discover_agent: "Agent to use for discovery search feature"
ai_google_custom_search_api_key: "API key for the Google Custom Search API see: https://developers.google.com/custom-search"
ai_google_custom_search_cx: "CX for Google Custom Search API"
ai_discord_search_enabled: "Enables the Discord search feature"
ai_discord_app_id: "The ID of the Discord application you would like to connect Discord search to"
ai_discord_app_public_key: "The public key of the Discord application you would like to connect Discord search to"
ai_discord_search_mode: "Select the search mode to use for Discord search"
ai_discord_search_agent: "The agent to use for Discord search."
ai_discord_allowed_guilds: "Discord guilds (servers) where the bot is allowed to search"
ai_translation_enabled: "Enable the AI translation feature"
ai_translation_excluded_categories: "Content in these categories will not be translated. Leave empty to translate content in all categories, including private categories."
ai_translation_personal_messages: "Controls which personal messages are translated. 'none' disables PM translation. 'group' translates only group PMs. 'all' translates all PMs."
ai_translation_include_bot_content: "When enabled, content written by bots (user IDs below 0) will also be sent for translation."
ai_translation_max_post_length: "The maximum number of characters for a post to be translated. Posts longer than this will not be translated."
ai_translation_backfill_max_age_days: "The maximum age of a post and topic to be translated. Posts and topics older than this will not be translated. 0 disables backfilling, but will not disable translation of new posts."
ai_translation_backfill_hourly_rate: "The number of posts and topics to translate per hour during backfill operations. Set to 0 to disable automatic backfilling of translations for existing content."
ai_translation_backfill_parallel_jobs: "The number of parallel post localization jobs to run per backfill cycle. Higher values increase throughput but consume more resources."
ai_usage_rollup_after_days: "Number of days to keep per-request AI usage stats before rolling them into daily aggregates. Set to 0 to disable rollups."
ai_audit_logs_purge_after_days: "Delete AI API audit logs older than this many days. Defaults to about 6 months. Set to 0 to keep indefinitely."
reviewables:
reasons:
flagged_by_toxicity: The AI plugin flagged this after classifying it as toxic.
flagged_by_nsfw: The AI plugin flagged this after classifying at least one of the attached images as NSFW.
reports:
sentiment_analysis:
title: "Sentiment analysis"
description: "This report provides sentiment analysis for posts, grouped by category, with positive, negative, and neutral scores for each post and category."
overall_sentiment:
title: "Overall sentiment"
description: 'The chart compares the number of posts classified as either positive or negative. These are calculated when positive or negative scores > the set threshold score. This means neutral posts are not shown. Personal messages (PMs) are also excluded. Classified with "cardiffnlp/twitter-roberta-base-sentiment-latest"'
xaxis: "Positive(%)"
yaxis: "Date"
emotion_admiration:
title: 🤩 Admiration
description: "Posts classified with the emotion admiration via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_amusement:
title: 😄 Amusement
description: "Posts classified with the emotion amusement via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_anger:
title: 😠 Anger
description: "Posts classified with the emotion anger via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_annoyance:
title: 😒 Annoyance
description: "Posts classified with the emotion annoyance via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_approval:
title: 👍 Approval
description: "Posts classified with the emotion approval via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_caring:
title: 🤗 Caring
description: "Posts classified with the emotion caring via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_confusion:
title: 😕 Confusion
description: "Posts classified with the emotion confusion via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_curiosity:
title: 🤔 Curiosity
description: "Posts classified with the emotion curiosity via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_desire:
title: 😍 Desire
description: "Posts classified with the emotion desire via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_disappointment:
title: 😞 Disappointment
description: "Posts classified with the emotion disappointment via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_disapproval:
title: 👎 Disapproval
description: "Posts classified with the emotion disapproval via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_disgust:
title: 🤢 Disgust
description: "Posts classified with the emotion disgust via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_embarrassment:
title: 😳 Embarrassment
description: "Posts classified with the emotion embarrassment via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_excitement:
title: 🤪 Excitement
description: "Posts classified with the emotion excitement via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_fear:
title: 😨 Fear
description: "Posts classified with the emotion fear via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_gratitude:
title: 🙏 Gratitude
description: "Posts classified with the emotion gratitude via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_grief:
title: 😢 Grief
description: "Posts classified with the emotion grief via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_joy:
title: 😊 Joy
description: "Posts classified with the emotion joy via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_love:
title: ❤️ Love
description: "Posts classified with the emotion love via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_nervousness:
title: 😰 Nervousness
description: "Posts classified with the emotion nervousness via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_neutral:
title: 😐 Neutral
description: "Posts classified with the emotion neutral via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_optimism:
title: 🌟 Optimism
description: "Posts classified with the emotion optimism via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_pride:
title: 🦁 Pride
description: "Posts classified with the emotion pride via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_realization:
title: 💡 Realization
description: "Posts classified with the emotion realization via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_relief:
title: 😌 Relief
description: "Posts classified with the emotion relief via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_remorse:
title: 😔 Remorse
description: "Posts classified with the emotion remorse via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_sadness:
title: 😭 Sadness
description: "Posts classified with the emotion sadness via AI, using the model 'SamLowe/roberta-base-go_emotions'."
emotion_surprise:
title: 😲 Surprise
description: "Posts classified with the emotion surprise via AI, using the model 'SamLowe/roberta-base-go_emotions'."
discourse_ai:
ai_artifact:
errors:
max_keys_exceeded:
one: "You can only have %{count} key in the artifact."
other: "You can only have %{count} keys in the artifact."
link: "Show in new tab"
copy_embed: "Copy embed"
view_source: "View Source"
view_changes: "View Changes"
change_description: "Change Description"
copied: "Copied to clipboard"
unknown_model: "Unknown AI model"
discourse_workflows:
ai_agent:
errors:
locked_default_llm_missing: "Agent '%{agent}' is locked to its default LLM, but no valid default LLM is configured"
llm_not_found: "LLM model with id %{llm_model_id} not found"
no_llm_configured: "No LLM is configured for agent '%{agent}'. Select an LLM model or configure an agent/site default LLM."
tools:
custom_name: "%{name} (custom)"
presets:
browse_web_jina:
name: "Browse web (jina.ai)"
exchange_rate:
name: "Exchange rate"
stock_quote:
name: "Stock quote (AlphaVantage)"
image_generation_category:
name: "Image generation..."
image_generation_custom:
name: "Custom"
image_generation_openai:
name: "OpenAI"
image_generation_gemini:
name: "Nano Banana"
image_generation_flux:
name: "FLUX 1.1 Pro"
image_generation_flux2:
name: "FLUX 2 Pro"
empty_tool:
name: "Start from blank..."
name:
characters: "must only include numbers, letters, and underscores"
secret_contracts:
invalid_payload: "Secret contracts must be an array."
invalid_contract: "Secret contract at index %{index} is invalid."
alias_required: "Secret contract at index %{index} must include an alias."
alias_too_long: "Secret alias `%{alias}` is too long."
alias_invalid: "Secret alias `%{alias}` must only include numbers, letters, and underscores."
alias_not_unique: "Secret alias `%{alias}` is duplicated."
secret_bindings:
invalid_payload: "Secret bindings must be an array."
secret_not_found: "The selected credential does not exist."
alias_not_declared: "Alias `%{alias}` is not declared in this tool."
secret_runtime:
alias_not_declared: "Credential alias `%{alias}` is not declared for this tool."
missing_binding: "Credential alias `%{alias}` is required but not bound."
missing_required_aliases: "Missing required credential bindings for aliases: %{aliases}."
secret_not_found: "Credential alias `%{alias}` is bound to a missing credential."
unknown_error: "Unable to resolve the requested credential."
mcp_servers:
secret_not_found: "The selected credential does not exist."
invalid_url_not_https: "must be a valid HTTPS URL"
invalid_url_not_reachable: "must resolve to a publicly accessible address"
oauth_client_id_required: "OAuth client ID is required for manual client registration."
errors:
invalid_response: "The MCP server returned an invalid response."
request_failed: "The MCP server request failed with status %{status}."
session_expired: "The MCP session expired."
timeout: "The MCP server request timed out."
oauth_authorization_required: "OAuth authorization is required before this MCP server can be used. Connect it to %{issuer} from the admin UI."
oauth_discovery_failed: "Unable to discover OAuth authorization details for this MCP server."
oauth_discovery_failed_with_status: "OAuth discovery failed with status %{status}."
oauth_not_configured: "OAuth is not configured for this MCP server."
oauth_refresh_token_missing: "The OAuth refresh token is missing. Reconnect this MCP server."
oauth_save_before_connect: "Save the MCP server before testing the OAuth connection."
oauth_state_invalid: "The OAuth authorization state is invalid or has expired. Start the connection again."
oauth_token_exchange_failed: "The OAuth token exchange failed with status %{status}."
oauth_https_required: "OAuth requires your site to be served over HTTPS."
oauth_callback_failed: "OAuth connection failed: %{message}"
oauth_refresh_token_required: "The OAuth authorization server did not return a refresh token. Adjust the advanced OAuth options and reconnect this MCP server."
oauth_client_metadata_public_https_required: "Client metadata document registration requires a public HTTPS site URL. Current client metadata URL: %{url}"
oauth_registration_endpoint_missing: "The OAuth authorization server does not advertise a registration endpoint."
oauth_manual_client_registration_required: "The OAuth authorization server %{issuer} does not advertise dynamic client registration. Switch this MCP server to Manual client credentials and provide a registered OAuth client ID."
oauth_client_secret_required: "The OAuth authorization server %{issuer} requires token endpoint client authentication (%{methods}). Configure manual client credentials with a client secret."
oauth_token_endpoint_auth_method_unsupported: "The OAuth authorization server %{issuer} only advertises unsupported token endpoint client authentication methods (%{methods}). This MCP server currently supports none, client_secret_basic, and client_secret_post."
oauth_client_registration_failed: "Dynamic client registration failed with status %{status}."
oauth_client_registration_failed_no_id: "Dynamic client registration succeeded but no client_id was returned."
oauth_authorization_params_invalid: "OAuth authorization params must be a JSON object."
oauth_token_params_invalid: "OAuth token params must be a JSON object."
ai_helper:
errors:
completion_request_failed: "Something went wrong while trying to provide suggestions. Please, try again."
no_illustrator_agent: "Post Illustrator agent is not configured. Please check your site settings."
no_image_generation_tool: "Post Illustrator agent must have an image generation tool attached. Please configure an image generation tool for this agent in the admin panel."
no_image_generated: "Failed to generate image. Please try again or check your tool configuration."
llm_model_not_configured: "No language model is configured for image generation. Please configure a default language model in your site settings."
unknown_error: "An unexpected error occurred while generating thumbnails. Please try again."
prompts:
translate: Translate to %{language}
generate_titles: Suggest topic titles
proofread: Proofread text
markdown_table: Generate Markdown table
custom_prompt: "Custom Prompt"
explain: "Explain"
illustrate_post: "Illustrate Post"
replace_dates: "Smart dates"
image_caption:
attribution: "Captioned by AI"
share_ai:
read_more: "Read full transcript"
onebox_title: "AI Conversation with %{llm_name}"
formatted_excerpt: "AI Conversation with %{llm_name}:\n %{excerpt}"
title: "%{title} - AI Conversation - %{site_name}"
errors:
not_allowed: "You are not allowed to share this topic"
other_people_in_pm: "Personal messages with other humans cannot be shared publicly"
other_content_in_pm: "Personal messages containing posts from other people cannot be shared publicly"
failed_to_share: "Failed to share the conversation"
conversation_deleted: "Conversation share deleted successfully"
spam_detection:
flag_reason: "Flagged as spam by <a href='%{url}'>Discourse AI</a>"
silence_reason: "User silenced automatically by <a href='%{url}'>Discourse AI</a>"
invalid_error_type: "Invalid error type provided"
unexpected: "An unexpected error occurred"
bot_user_update_failed: "Failed to update the spam scanning bot user"
configuration_missing: "The AI spam detection configuration is missing. Add configuration in the 'Admin > Plugins > Discourse AI > Spam' before enabling."
logging_subject: "Spam detection"
ai_bot:
reply_error: "Sorry, it looks like our system encountered an unexpected issue while trying to reply.\n\n[details='Error details']\n%{details}\n[/details]"
default_pm_prefix: "[Untitled AI bot PM]"
thinking: "Thinking"
tool_pending_approval: "This action requires moderator approval before it can be executed."
agents:
default_llm_required: "Default LLM model is required prior to enabling Chat"
cannot_delete_system_agent: "System agents cannot be deleted, please disable it instead"
cannot_edit_system_agent: "System agents can only be renamed, you may not edit tools or system prompt, instead disable and make a copy"
cannot_have_duplicate_tools: "Can not have duplicate tools"
native_tool_requires_forced_llm: "Provider-native tools require a default LLM with \"Force default LLM\" enabled"
native_tool_unsupported_by_llm: "The selected default LLM does not support one of the enabled provider-native tools"
admin_dashboard_highlights:
name: "Admin Dashboard Highlights"
description: "Writes the brief readout shown at the top of the admin dashboard, explaining what changed and what deserves attention this period"
github_helper:
name: "GitHub Helper"
description: "AI Bot specialized in assisting with GitHub-related tasks and questions"
general:
name: Forum Helper
description: "General purpose AI Bot capable of performing various tasks"
artist:
name: Artist
description: "AI Bot specialized in generating images"
designer:
name: Designer
description: "AI Bot specialized in generating and editing images"
forum_researcher:
name: Forum Researcher
description: "AI Bot specialized in deep research for the forum"
sql_helper:
name: SQL Helper
description: "AI Bot specialized in helping craft SQL queries on this Discourse instance"
settings_explorer:
name: Settings Explorer
description: "AI Bot specialized in helping explore Discourse site settings"
researcher:
name: Web Researcher
description: "AI Bot with Google access that can both search and read web pages"
creative:
name: Creative
description: "AI Bot with no external integrations specialized in creative tasks"
dall_e3:
name: "DALL-E 3"
description: "AI Bot specialized in generating images using DALL-E 3"
discourse_helper:
name: "Discourse Helper"
description: "AI Bot specialized in helping with Discourse related tasks"
web_artifact_creator:
name: "Web Artifact Creator"
description: "AI Bot specialized in creating interactive web artifacts"
summarizer:
name: "Summarizer"
description: "Default agent used to power AI summaries"
short_summarizer:
name: "Summarizer (short form)"
description: "Default agent used to power AI short summaries for topic lists' items"
concept_finder:
name: "Concept Finder"
description: "AI Bot specialized in identifying concepts and themes in content"
concept_matcher:
name: "Concept Matcher"
description: "AI Bot specialized in matching content against existing concepts"
concept_deduplicator:
name: "Concept Deduplicator"
description: "AI Bot specialized in deduplicating concepts"
custom_prompt:
name: "Custom prompt"
description: "Default agent powering the Helper's custom prompt feature"
smart_dates:
name: "Smart dates"
description: "Default agent powering the Helper's smart dates feature"
markdown_table_generator:
name: "Markdown table generator"
description: "Default agent powering the Helper's generate Markdown table feature"
post_illustrator:
name: "Post illustrator"
description: "Generates images to illustrate posts using available image generation tools"
proofreader:
name: "Proofreader"
description: "Default agent powering the Helper's proofread text feature"
titles_generator:
name: "Titles generator"
description: "Default agent powering the Helper's suggest topic titles feature"
tutor:
name: "Tutor"
description: "Default agent powering the Helper's explain feature"
translator:
name: "Translator"
description: "Default agent powering the Helper's translator feature"
image_captioner:
name: "Image captions"
description: "Default agent powering the Helper's image caption feature"
locale_detector:
name: "Locale detector"
description: "Powers the translation feature by detecting the locale of a given text (posts, titles, etc.)"
post_raw_translator:
name: "Post translator"
description: "Powers the translation feature by translating posts containing Discourse Markdown"
topic_title_translator:
name: "Topic title translator"
description: "Powers the translation feature by translating topic titles"
short_text_translator:
name: "Short text translator"
description: "Powers the translation feature by as a generic text translator, used for short texts like category names or tags"
spam_detector:
name: "Spam detector"
description: "Default agent powering our Spam detection feature"
content_creator:
name: "Content creator"
description: "Default agent powering HyDE search"
report_runner:
name: "Report runner"
description: "Default agent used in the report automation script"
discover:
name: "Discover"
description: "Default agent used in the discoveries feature (complimentary search)"
chat_thread_titler:
name: "Chat Thread Titler"
description: "Default agent powering automatic chat thread title generation"
sentiment_classifier:
name: "Sentiment classifier"
description: "Default agent powering sentiment classification"
emotion_classifier:
name: "Emotion classifier"
description: "Default agent powering emotion classification"
topic_not_found: "Summary unavailable, topic not found!"
summarizing: "Summarizing topic"
searching: "Searching for: '%{query}'"
tool_options:
researcher:
researcher_llm:
name: "LLM"
description: "Language model to use for research (default to current agent's LLM)"
max_tokens_per_batch:
name: "Maximum tokens per batch"
description: "Maximum number of tokens to use for each batch in the research"
max_tokens_per_post:
name: "Maximum tokens per post"
description: "Maximum number of tokens to use for each post in the research"
max_results:
name: "Maximum number of results"
description: "Maximum number of results to include in a filter"
include_private:
name: "Include private"
description: "Include private topics in the filters"
create_artifact:
creator_llm:
name: "LLM"
description: "Language model to use for artifact creation"
update_artifact:
editor_llm:
name: "LLM"
description: "Language model to use for artifact edits"
update_algorithm:
name: "Update Algorithm"
description: "Ask LLM to fully replace, or use diff to update"
do_not_echo_artifact:
name: "Do Not Echo Artifact"
description: "Will limit costs however effectiveness of Artifact updates will be reduced"
google:
base_query:
name: "Base Search Query"
description: "Base query to use when searching. Examples: 'site:example.com' will only include results from example.com, before:2022-01-01 will only includes results from 2021 and earlier. This text is prepended to the search query."
read:
read_private:
name: "Read Private"
description: "Allow access to all topics user has access to (by default only public topics are included)"
search:
search_private:
name: "Search Private"
description: "Include all topics user has access to in search results (by default only public topics are included)"
max_results:
name: "Maximum number of results"
description: "Maximum number of results to include in the search - if empty default rules will be used and count will be scaled depending on model used. Highest value is 100."
base_query:
name: "Base Search Query"
description: "Base query to use when searching. Example: '#urgent' will prepend '#urgent' to the search query and only include topics with the urgent category or tag."
flag_post:
flag_type:
name: "Flag Type"
description: "Controls whether the post is reviewed, hidden, deleted, or treated as spam."
native_tools:
web_search:
name: "Web Search (native)"
help: "Lets the model search the web using the provider's built-in search, when the agent is forced to a supported LLM."
web_fetch:
name: "Web Fetch (native)"
help: "Lets the model open and read web pages using the provider's built-in web access, when the agent is forced to a supported LLM."
tool_summary:
read_artifact: "Read a web artifact"
search_uploaded_documents: "Search uploaded documents"
update_artifact: "Update a web artifact"
create_artifact: "Create web artifact"
web_browser: "Browse Web"
github_search_files: "GitHub search files"
github_search_code: "GitHub code search"
github_file_content: "GitHub file content"
github_diff: "GitHub diff"
random_picker: "Random Picker"
categories: "List categories"
flag_post: "Flag post"
close_topic: "Close topic"
unlist_topic: "Unlist topic"
lock_post: "Lock post"
delete_topic: "Delete topic"
edit_post: "Edit post"
edit_tags: "Edit tags"
edit_category: "Edit category"
set_topic_timer: "Set topic timer"
set_slow_mode: "Set slow mode"
move_posts: "Move posts"
grant_badge: "Grant badge"
list_reviewables: "List review queue"
perform_reviewable_action: "Review queue action"
add_reviewable_note: "Add review queue note"
assign: "Assign topic"
mark_as_solved: "Mark as solved"
search: "Search"
tags: "List tags"
time: "Time"
summarize: "Summarize"
image: "Generate image"
google: "Search Google"
read: "Read topic"
setting_context: "Look up site setting context"
schema: "Look up database schema"
search_settings: "Searching site settings"
dall_e: "Generate image"
search_meta_discourse: "Search Meta Discourse"
javascript_evaluator: "Evaluate JavaScript"
create_image: "Creating image"
edit_image: "Editing image"
researcher: "Researching"
researcher_dry_run: "Preparing research"
tool_help:
read_artifact: "Read a web artifact using the AI Bot"
search_uploaded_documents: "Search documents uploaded to this agent"
update_artifact: "Update a web artifact using the AI Bot"
create_artifact: "Create a web artifact using the AI Bot"
web_browser: "Browse web page using the AI Bot"
github_search_code: "Search for code in a GitHub repository"
github_search_files: "Search for files in a GitHub repository"
github_file_content: "Retrieve content of files from a GitHub repository"
github_diff: "Retrieve a GitHub pull request or commit diff"
random_picker: "Pick a random number or a random element of a list"
categories: "List all publicly visible categories on the forum"
flag_post: "Flag the current post for staff review"
close_topic: "Close or open a topic"
unlist_topic: "List or unlist a topic"
lock_post: "Lock or unlock a post"
delete_topic: "Delete a topic"
edit_post: "Edit the content of a post"
edit_tags: "Edit the tags on a topic"
edit_category: "Move a topic to a different category"
set_topic_timer: "Set a timer on a topic to close, open, delete, or bump it"
set_slow_mode: "Enable or disable slow mode on a topic"
move_posts: "Move posts to a new or existing topic"
grant_badge: "Grant a badge to a user"
list_reviewables: "List pending review queue items with optional filtering"
perform_reviewable_action: "Perform an action on a review queue item"
add_reviewable_note: "Add a note to a review queue item"
assign: "Assign or unassign a topic to a user or group"
mark_as_solved: "Mark or unmark a post as the accepted solution"
search: "Search all public topics on the forum"
tags: "List all tags on the forum"
time: "Find time in various time zones"
summary: "Summarize a topic"
image: "Generate image using Stable Diffusion"
create_image: "Generate image using Open AI GPT image model"
edit_image: "Edit image using Open AI GPT image model"
google: "Search Google for a query"
read: "Read public topic on the forum"
setting_context: "Look up site setting context"
schema: "Look up database schema"
search_settings: "Search site settings"
dall_e: "Generate image using DALL-E 3"
search_meta_discourse: "Search Meta Discourse"
javascript_evaluator: "Evaluate JavaScript"
researcher: "Research forum information using the AI Bot"
tool_description:
read_artifact: "Read a web artifact using the AI Bot"
search_uploaded_documents:
one: "Found %{count} uploaded document excerpt for '%{query}'"
other: "Found %{count} uploaded document excerpts for '%{query}'"
update_artifact: "Updated a web artifact using the AI Bot"
create_artifact: "Created a web artifact: %{name} - %{specification}"
web_browser: "Reading <a href='%{url}'>%{url}</a>"
github_search_files: "Searched for '%{keywords}' in %{repo}/%{branch}"
github_search_code: "Searched for '%{query}' in %{repo}"
github_diff: "<a href='%{url}'>%{repo} %{ref}</a>"
github_file_content: "Retrieved content of %{file_paths} from %{repo_name}@%{branch}"
random_picker: "Picking from %{options}, picked: %{result}"
flag_post: "Flagging post %{post_id} (flag_post: %{flag_post})"
close_topic: "Closing topic %{topic_id} (closed: %{closed})"
unlist_topic: "Unlisting topic %{topic_id} (unlisted: %{unlisted})"
lock_post: "Locking post %{post_id} (locked: %{locked})"
delete_topic: "Deleting topic %{topic_id} (deleted: %{deleted})"
edit_post: "Editing post %{post_id}"
edit_tags: "Editing tags on topic %{topic_id}: %{tags}"
edit_category: "Moving topic %{topic_id} to category %{category_id}"
set_topic_timer: "Setting %{timer_type} timer on topic %{topic_id} (%{duration_hours}h)"
set_slow_mode: "Setting slow mode on topic %{topic_id} (%{slow_mode_seconds}s)"
move_posts: "Moving posts %{post_ids} from topic %{topic_id}"
grant_badge: "Granting badge '%{badge_name}' to %{username}"
list_reviewables: "Listing review queue items (type: %{type})"
perform_reviewable_action: "Performing %{action} on reviewable %{reviewable_id}"
add_reviewable_note: "Adding note to reviewable %{reviewable_id}"
assign: "Assigning topic %{topic_id} (assigned: %{assigned})"
mark_as_solved: "Marking post %{post_id} as solved (solved: %{solved})"
read: "Reading: <a href='%{url}'>%{title}</a>"
time: "Time in %{timezone} is %{time}"
summarize: "Summarized <a href='%{url}'>%{title}</a>"
dall_e: "%{prompt}"
create_image: "%{prompt}"
edit_image: "%{prompt}"
image: "%{prompt}"
categories:
one: "Found %{count} category"
other: "Found %{count} categories"
tags:
one: "Found %{count} tag"
other: "Found %{count} tags"
search:
one: "Found %{count} <a href='%{url}'>result</a> for '%{query}'"
other: "Found %{count} <a href='%{url}'>results</a> for '%{query}'"
search_meta_discourse:
one: "Found %{count} <a href='%{url}'>result</a> for '%{query}'"
other: "Found %{count} <a href='%{url}'>results</a> for '%{query}'"
google:
one: "Found %{count} <a href='%{url}'>result</a> for '%{query}'"
other: "Found %{count} <a href='%{url}'>results</a> for '%{query}'"
setting_context: "Reading context for: %{setting_name}"
schema: "%{tables}"
researcher_dry_run:
one: "Proposed goals: %{goals}\n\nFound %{count} post matching '%{filter}'"
other: "Proposed goals: %{goals}\n\nFound %{count} posts matching '%{filter}'"
researcher:
one: "Researching: %{goals}\n\nFound %{count} post matching '%{filter}'"
other: "Researching: %{goals}\n\nFound %{count} posts matching '%{filter}'"
search_settings:
one: "Found %{count} result for '%{query}'"
other: "Found %{count} results for '%{query}'"
discoveries:
continue_conversation:
title: "Discovery conversation: Search for %{query}"
raw: "In my search for %{query}, you showed me the following information:\n\n%{context}\n\nLet's continue the conversation."
flag_post:
errors:
no_context: "No post context available for flagging."
no_reason: "A reason is required to flag a post."
invalid_flag_type: "Invalid flag type."
skipped: "Verdict was false; no flag was created."
already_flagged: "Post is already flagged for review."
flagged: "Post flagged for review."
reason: "AI bot flagged this post.\n\nReason: %{reason}"
close_topic:
errors:
not_found: "Topic not found."
not_allowed: "You are not allowed to close or open this topic."
no_reason: "A reason is required to close or open a topic."
success: "Topic updated successfully."
unlist_topic:
errors:
not_found: "Topic not found."
not_allowed: "You are not allowed to unlist or list this topic."
no_reason: "A reason is required to unlist or list a topic."
success: "Topic updated successfully."
lock_post:
errors:
not_found: "Post not found."
not_allowed: "You are not allowed to lock or unlock this post."
no_reason: "A reason is required to lock or unlock a post."
success: "Post updated successfully."
delete_topic:
errors:
not_found: "Topic not found."
not_allowed: "You are not allowed to delete or recover this topic."
no_reason: "A reason is required to delete or recover a topic."
success: "Topic updated successfully."
edit_post:
errors:
not_found: "Post not found."
not_allowed: "You are not allowed to edit this post."
nothing_to_edit: "Either raw or title must be provided."
no_reason: "An edit reason is required."
revision_failed: "Failed to revise the post."
success: "Post edited successfully."
edit_tags:
errors:
not_found: "Topic not found."
not_allowed: "You are not allowed to edit tags on this topic."
no_reason: "A reason is required to edit tags."
tagging_disabled: "Tagging is not enabled on this site."
success: "Tags updated successfully."
edit_category:
errors:
not_found: "Topic not found."
not_allowed: "You are not allowed to move this topic."
category_not_found: "Category not found."
no_reason: "A reason is required to move a topic."
revision_failed: "Failed to move the topic."
success: "Topic moved successfully."
set_topic_timer:
errors:
not_found: "Topic not found."
not_allowed: "You are not allowed to set a timer on this topic."
no_reason: "A reason is required to set a topic timer."
invalid_timer_type: "Invalid timer type. Must be one of: close, open, delete, silent_close, bump."
success: "Topic timer updated successfully."
set_slow_mode:
errors:
not_found: "Topic not found."
not_allowed: "You are not allowed to set slow mode on this topic."
no_reason: "A reason is required to set slow mode."
success: "Slow mode updated successfully."
move_posts:
errors:
not_found: "Topic not found."
not_allowed: "You are not allowed to move posts in this topic."
no_reason: "A reason is required to move posts."
no_posts: "No post IDs provided."
no_destination: "Either destination_topic_id or new_title must be provided."
move_failed: "Failed to move posts."
success: "Posts moved successfully."
grant_badge:
errors:
user_not_found: "User not found."
badge_not_found: "Badge not found."
not_allowed: "You are not allowed to grant badges."
no_reason: "A reason is required to grant a badge."
badge_disabled: "Badge is not enabled."
grant_failed: "Failed to grant badge."
success: "Badge granted successfully."
assign:
errors:
plugin_not_installed: "The discourse-assign plugin is not installed."
not_found: "Topic not found."
not_allowed: "You are not allowed to assign this topic."
no_reason: "A reason is required to assign or unassign a topic."
assignee_not_found: "User or group not found."
assign_failed: "Failed to assign topic."
success: "Topic assignment updated successfully."
mark_as_solved:
errors:
plugin_not_installed: "The discourse-solved plugin is not installed."
no_reason: "A reason is required to mark or unmark a post as solved."
action_failed: "Failed to update the solved status."
success: "Solved status updated successfully."
list_reviewables:
errors:
not_allowed: "You are not allowed to view the review queue"
invalid_type: "Invalid reviewable type"
invalid_status: "Invalid status. Must be one of: pending, approved, rejected, ignored, deleted, reviewed, all."
empty: "No review queue items found matching the given filters"
found:
one: "Found %{count} review queue item"
other: "Found %{count} review queue items"
perform_reviewable_action:
errors:
not_allowed: "You are not allowed to access the review queue"
not_found: "Review queue item not found"
no_reason: "A reason is required to perform an action on a review queue item"
invalid_action: "Invalid action '%{action}'. Available actions: %{available}"
conflict: "This review queue item was updated by someone else. Please try again"
action_failed: "Failed to perform the action"
success: "Successfully performed '%{action}' on review queue item %{reviewable_id}"
add_reviewable_note:
errors:
not_allowed: "You are not allowed to access the review queue"
not_found: "Review queue item not found"
no_note: "A note is required to add a note to a review queue item"
failed: "Failed to add the note"
success: "Successfully added a note to review queue item %{reviewable_id}"
reviewables:
ai_tool_action:
title: "AI Tool Action"
approve:
title: "Approve"
reject:
title: "Reject"
target_missing: "The tool action target no longer exists."
tool_not_found: "Tool '%{tool_name}' is no longer available."
bot_user_missing: "The bot user no longer exists."
execution_error: "Tool execution failed: %{error}"
summarization:
configuration_hint:
one: "Configure the `%{setting}` setting first."
other: "Configure these settings first: %{settings}"
chat:
no_targets: "There were no messages during the selected period."
sentiment:
reports:
overall_sentiment: "Overall sentiment (Positive - Negative)"
post_emotion:
sadness: "Sadness 😢"
surprise: "Surprise 😱"
neutral: "Neutral 😐"
fear: "Fear 😨"
anger: "Anger 😡"
joy: "Joy 😀"
disgust: "Disgust 🤢"
sentiment_analysis:
positive: "Positive"
negative: "Negative"
neutral: "Neutral"
discord:
configuration:
agent_user_required: "The Discord search agent must have an associated user before Discord agent mode can be enabled."
llm:
configuration:
create_llm: "You need to setup an LLM before enabling this feature"
disable_modules_first: "You must disable these modules first: %{settings}"
set_llm_first: "Set %{setting} first"
model_unreachable: "We couldn't get a response from this model. Check your settings first."
empty_response: "The model returned an empty response."
invalid_seeded_model: "You can't use this model with this feature"
invalid_agent_response_format: "The selected agent must have a response format with a boolean field names \"spam\""
must_select_model: "You must select a LLM first"
invalid_llm_id: "The selected LLM model is not valid"
endpoints:
not_configured: "%{display_name} (not configured)"
configuration_hint:
one: "Make sure the `%{settings}` setting was configured."
other: "Make sure these settings were configured: %{settings}"
delete_failed:
one: "We couldn't delete this model because %{settings} is using it. Update the setting and try again."
other: "We couldn't delete this model because %{settings} are using it. Update the settings and try again."
cannot_edit_builtin: "You can't edit a built-in model."
agents:
malformed_examples: "The given examples have the wrong format."
embeddings:
delete_failed: "This model is currently in use. Update the `ai embeddings selected model` first."
cannot_edit_builtin: "You can't edit a built-in model."
secret_required: "A credential must be selected"
secret_not_found: "The selected credential does not exist"
configuration:
disable_embeddings: "You have to disable 'ai embeddings enabled' first."
choose_model: "Set 'ai embeddings selected model' first."
model_test_failed: "We failed to generate a test embedding with this model. Check it's correctly configured."
secrets:
delete_failed_in_use: "This credential is currently in use by one or more LLMs, embeddings, or tools and cannot be deleted."
llm_models:
missing_provider_param: "%{param} can't be blank"
secret_required: "A credential must be selected"
secret_not_found: "The selected credential does not exist"
bedrock_invalid_url: "Please complete all the fields to use this model."
bedrock_missing_auth: "AWS Bedrock requires either Access Key ID or Role ARN to be configured"
ai_staff_action_logger:
updated: "updated"
set: "set"
removed: "removed"
translation:
errors:
disabled: "The AI translation feature is not fully configured."
all_posts_translated: "All posts in this topic are already translated."
llm_credit_allocation:
limit_exceeded_user: "This community has reached its AI credit limit for today. Please try again after %{reset_time} or contact your site administrator for more information."
limit_exceeded_admin: "You have reached your AI credit limit. Please try again after %{reset_time}."
errors:
quota_exceeded: "You have exceeded the quota for this model. Please try again in %{relative_time}."
quota_required: "You must specify maximum tokens or usages for this model"
no_query_specified: The query parameter is required, please specify it.
no_user_for_agent: The agent specified does not have a user associated with it.
agent_not_found: "The agent specified does not exist. Check the agent_name or agent_id params (legacy: persona_name or persona_id)."
no_user_specified: The username or the user_unique_id parameter is required, please specify it.
user_not_found: The user specified does not exist. Check the username param.
agent_disabled: "The agent specified is disabled. Check the agent_name or agent_id params (legacy: persona_name or persona_id)."
no_default_llm: The agent must have a default_llm defined.
user_not_allowed: The user is not allowed to participate in the topic.
invalid_stream_resume_token: The resume_token is invalid or has expired.
no_tool_results_specified: The tool_results parameter is required when resuming a stream.
invalid_custom_tools: "The custom_tools parameter is invalid: %{details}"
duplicate_custom_tools: "The custom_tools parameter contains duplicate tool names: %{names}"
too_many_custom_tools: "The custom_tools parameter can include at most %{max} tools."
custom_tool_definition_too_large: "Each custom tool definition must be at most %{max} bytes."
invalid_stream_param: "The %{key} parameter is invalid: %{details}"
expected_array: "expected an array"
expected_object: "expected an object"
ambiguous_tool_results: "Specify either tool_results or tool_result, not both."
invalid_tool_results: "The tool_results parameter is invalid: %{details}"
too_many_tool_results: "The tool_results parameter can include at most %{max} items."
no_pending_tool_calls: There are no pending tool calls for this resume token.
missing_tool_results: "Missing tool results for tool_call_id(s): %{ids}"
unexpected_tool_results: "Unexpected tool results for tool_call_id(s): %{ids}"
invalid_tool_result_content: "The tool result for %{id} must include content"
tool_result_content_too_large: "Each tool result content payload must be at most %{max} bytes."
stream_reply_max_resume_rounds_reached: Reached maximum custom tool resume rounds (%{max}).
stream_reply_state_too_large: "The stream state is too large to persist (max %{max} bytes)."
stream_reply_unexpected_error: An unexpected error occurred while streaming the reply.
prompt_message_length: The message %{idx} is over the 1000 character limit.
agent_already_exists: Agent with the name %{name} already exists.
custom_tool_exists:
one: "Custom tool with the name %{names} already exists."
other: "Custom tools with the names %{names} already exist."
mcp_server_missing: "The following MCP servers are not configured on this site: %{names}."
mcp_server_tools_not_found: "No matching tools from MCP server %{name} are available on this site."