discourse_ai:
  discourse_ai_enabled:
    default: true
    client: true

  ai_toxicity_enabled:
    default: false
    client: true
  ai_toxicity_inference_service_api_endpoint:
    default: "https://disorder-testing.demo-by-discourse.com"
  ai_toxicity_inference_service_api_endpoint_srv:
    default: ""
    hidden: true
  ai_toxicity_inference_service_api_key:
    default: ""
    secret: true
  ai_toxicity_inference_service_api_model:
    type: enum
    default: unbiased
    choices:
      - unbiased
      - multilingual
      - original
  ai_toxicity_flag_automatically:
    default: false
    client: false
  ai_toxicity_flag_threshold_toxicity:
    default: 80
    client: false
  ai_toxicity_flag_threshold_severe_toxicity:
    default: 30
    client: false
  ai_toxicity_flag_threshold_obscene:
    default: 80
    client: false
  ai_toxicity_flag_threshold_identity_attack:
    default: 60
    client: false
  ai_toxicity_flag_threshold_insult:
    default: 60
    client: false
  ai_toxicity_flag_threshold_threat:
    default: 60
    client: false
  ai_toxicity_flag_threshold_sexual_explicit:
    default: 60
    client: false
  ai_toxicity_groups_bypass:
    type: group_list
    list_type: compact
    default: "3" # 3: @staff
    allow_any: false
    refresh: true

  ai_sentiment_enabled:
    default: false
    client: true
  ai_sentiment_inference_service_api_endpoint:
    default: "https://sentiment-testing.demo-by-discourse.com"
  ai_sentiment_inference_service_api_endpoint_srv:
    default: ""
    hidden: true
  ai_sentiment_inference_service_api_key:
    default: ""
    secret: true
  ai_sentiment_models:
    type: list
    list_type: compact
    default: "emotion"
    allow_any: false
    choices:
      - sentiment
      - emotion

  ai_nsfw_detection_enabled: false
  ai_nsfw_inference_service_api_endpoint:
    default: "https://nsfw-testing.demo-by-discourse.com"
  ai_nsfw_inference_service_api_endpoint_srv:
    default: ""
    hidden: true
  ai_nsfw_inference_service_api_key:
    default: ""
    secret: true
  ai_nsfw_flag_automatically: true
  ai_nsfw_flag_threshold_general: 60
  ai_nsfw_flag_threshold_drawings: 60
  ai_nsfw_flag_threshold_hentai: 60
  ai_nsfw_flag_threshold_porn: 60
  ai_nsfw_flag_threshold_sexy: 70
  ai_nsfw_models:
    type: list
    list_type: compact
    default: "opennsfw2"
    allow_any: false
    choices:
      - opennsfw2
      - nsfw_detector

  ai_openai_gpt35_url: "https://api.openai.com/v1/chat/completions"
  ai_openai_gpt35_16k_url: "https://api.openai.com/v1/chat/completions"
  ai_openai_gpt4o_url: "https://api.openai.com/v1/chat/completions"
  ai_openai_gpt4_url: "https://api.openai.com/v1/chat/completions"
  ai_openai_gpt4_32k_url: "https://api.openai.com/v1/chat/completions"
  ai_openai_gpt4_turbo_url: "https://api.openai.com/v1/chat/completions"
  ai_openai_dall_e_3_url: "https://api.openai.com/v1/images/generations"
  ai_openai_embeddings_url: "https://api.openai.com/v1/embeddings"
  ai_openai_organization: ""
  ai_openai_api_key:
    default: ""
    secret: true
  ai_anthropic_api_key:
    default: ""
    secret: true
  ai_cohere_api_key:
    default: ""
    secret: true
  ai_stability_api_key:
    default: ""
    secret: true
  ai_stability_api_url:
    default: "https://api.stability.ai"
  ai_stability_engine:
    default: "stable-diffusion-xl-1024-v1-0"
    type: enum
    choices:
      - "sd3"
      - "sd3-turbo"
      - "stable-diffusion-xl-1024-v1-0"
      - "stable-diffusion-768-v2-1"
      - "stable-diffusion-v1-5"
  ai_hugging_face_api_url:
    default: ""
  ai_hugging_face_api_key:
    default: ""
    secret: true
  ai_hugging_face_token_limit:
    default: 4096
  ai_hugging_face_model_display_name:
    default: ""
  ai_hugging_face_tei_endpoint:
    default: ""
  ai_hugging_face_tei_endpoint_srv:
    default: ""
    hidden: true
  ai_hugging_face_tei_api_key: ""
  ai_hugging_face_tei_reranker_endpoint:
    default: ""
  ai_hugging_face_tei_reranker_endpoint_srv:
    default: ""
    hidden: true
  ai_hugging_face_tei_reranker_api_key: ""
  ai_google_custom_search_api_key:
    default: ""
    secret: true
  ai_google_custom_search_cx:
    default: ""
  ai_bedrock_access_key_id:
    default: ""
    secret: true
  ai_bedrock_secret_access_key:
    default: ""
    secret: true
  ai_bedrock_region:
    default: "us-east-1"
  ai_cloudflare_workers_account_id:
    default: ""
    secret: true
  ai_cloudflare_workers_api_token:
    default: ""
    secret: true
  ai_gemini_api_key:
    default: ""
    secret: true
  ai_vllm_endpoint:
    default: ""
  ai_vllm_endpoint_srv:
    default: ""
    hidden: true
  ai_vllm_api_key: ""
  ai_llava_endpoint:
    default: ""
  ai_llava_endpoint_srv:
    default: ""
    hidden: true
  ai_llava_api_key: ""
  ai_strict_token_counting:
    default: false
    hidden: true
  ai_ollama_endpoint:
    hidden: true
    default: ""

  composer_ai_helper_enabled:
    default: false
    client: true
    validator: "DiscourseAi::Configuration::LlmDependencyValidator"
  ai_helper_allowed_groups:
    type: group_list
    list_type: compact
    default: "3|14" # 3: @staff, 14: @trust_level_4
    allow_any: false
    refresh: true
  ai_helper_allowed_in_pm:
    default: false
    client: true
  ai_helper_model:
    default: ""
    allow_any: false
    type: enum
    enum: "DiscourseAi::Configuration::LlmEnumerator"
    validator: "DiscourseAi::Configuration::LlmValidator"
  ai_helper_custom_prompts_allowed_groups:
    type: group_list
    list_type: compact
    default: "3" # 3: @staff
    allow_any: false
    refresh: true
  post_ai_helper_allowed_groups:
    type: group_list
    list_type: compact
    default: "3|14" # 3: @staff, 14: @trust_level_4
    allow_any: false
    refresh: true
  ai_helper_automatic_chat_thread_title:
    default: false
  ai_helper_automatic_chat_thread_title_delay:
    default: 5
  ai_helper_illustrate_post_model:
    default: disabled
    type: enum
    choices:
      - stable_diffusion_xl
      - dall_e_3
      - disabled
  ai_helper_enabled_features:
    client: true
    default: "suggestions|context_menu"
    type: list
    list_type: compact
    allow_any: false
    refresh: true
    choices:
      - "suggestions"
      - "context_menu"
      - "image_caption"
  ai_helper_image_caption_model:
    default: "llava"
    type: enum
    choices:
      - "llava"
      - "open_ai:gpt-4-vision-preview"

  ai_embeddings_enabled:
    default: false
    client: true
    validator: "DiscourseAi::Configuration::EmbeddingsModuleValidator"
  ai_embeddings_discourse_service_api_endpoint: ""
  ai_embeddings_discourse_service_api_endpoint_srv:
    default: ""
    hidden: true
  ai_embeddings_discourse_service_api_key:
    default: ""
    secret: true
  ai_embeddings_model:
    type: enum
    default: "bge-large-en"
    allow_any: false
    choices:
      - all-mpnet-base-v2
      - text-embedding-ada-002
      - text-embedding-3-small
      - text-embedding-3-large
      - multilingual-e5-large
      - bge-large-en
      - gemini
      - bge-m3
    validator: "DiscourseAi::Configuration::EmbeddingsModelValidator"
  ai_embeddings_per_post_enabled:
    default: false
    hidden: true
  ai_embeddings_generate_for_pms: false
  ai_embeddings_semantic_related_topics_enabled:
    default: false
    client: true
  ai_embeddings_semantic_related_topics: 5
  ai_embeddings_semantic_related_include_closed_topics: true
  ai_embeddings_backfill_batch_size:
    default: 250
    hidden: true
  ai_embeddings_pg_connection_string:
    default: ""
    hidden: true
  ai_embeddings_semantic_search_enabled:
    default: false
    client: true
    validator: "DiscourseAi::Configuration::LlmDependencyValidator"
  ai_embeddings_semantic_search_hyde_model:
    default: ""
    type: enum
    allow_any: false
    enum: "DiscourseAi::Configuration::LlmEnumerator"
    validator: "DiscourseAi::Configuration::LlmValidator"
  ai_embeddings_semantic_quick_search_enabled:
    default: false
    client: true
    hidden: true

  ai_summarization_discourse_service_api_endpoint: ""
  ai_summarization_discourse_service_api_endpoint_srv:
    default: ""
    hidden: true
  ai_summarization_discourse_service_api_key:
    default: ""
    secret: true

  ai_bot_enabled:
    default: false
    client: true
  ai_bot_enable_chat_warning:
    default: false
    client: true
  ai_bot_debugging_allowed_groups:
    type: group_list
    list_type: compact
    default: ""
    allow_any: false
  ai_bot_allowed_groups:
    type: group_list
    list_type: compact
    default: "3|14" # 3: @staff, 14: @trust_level_4
  # Adding a new bot? Make sure to create a user for it on the seed file and update translations.
  ai_bot_public_sharing_allowed_groups:
    client: false
    type: group_list
    list_type: compact
    default: "1|2" # 1: admins, 2: moderators
    allow_any: false
    refresh: true
  ai_bot_enabled_chat_bots:
    type: list
    default: "gpt-3.5-turbo"
    client: true
    choices:
      - gpt-3.5-turbo
      - gpt-4
      - gpt-4-turbo
      - gpt-4o
      - claude-2
      - gemini-1.5-pro
      - mixtral-8x7B-Instruct-V0.1
      - claude-3-opus
      - claude-3-sonnet
      - claude-3-haiku
      - cohere-command-r-plus
  ai_bot_add_to_header:
    default: true
    client: true
  ai_bot_github_access_token:
    default: ""
    secret: true
  ai_automation_max_triage_per_minute:
    default: 60
    hidden: true
  ai_automation_max_triage_per_post_per_minute:
    default: 2
    hidden: true
