Skip to content

Configuration Reference

All configuration lives under the sulu_ai_platform key. Configuring the base sulu_ai bundle directly is rejected — the platform bundle derives and prepends that configuration itself.

Full tree with defaults:

# config/packages/sulu_ai_platform.yaml
sulu_ai_platform:
    base_uri: 'https://api.sulu.ai/v1/'    # The base URI for the sulu.ai platform
    api_key: ~                             # REQUIRED — API key from your platform project settings

    webhook:
        secret: ~                          # REQUIRED — generated by sulu:ai:register-webhook

    image_loader:
        allow_insecure_https: true         # Disable TLS certificate verification when loading images
        authorization: null                # String ("Bearer <token>") or {type, value} — see below

    locale_map: {}                         # Map Sulu locales to platform locales — see below

    stores: {}                             # Named datastores exposed as Symfony AI stores

    intelligent_search:
        enabled: false                     # Enable intelligent search services, commands, and routes
        identifier: null                   # Optional intelligent search UUID (default: project default)
        example_ui:
            enabled: false                 # Expose the demo UI at /ai-search
        ip_rate_limit:
            enabled: true                  # Per-IP rate limiting for the public search endpoint
            limit: 10                      # Allowed requests per interval and IP
            interval: 60                   # Interval in seconds

    translator:
        languages: {}                      # Enable/disable individual DeepL languages — see below

    property_type_translation_properties:  # Sub-properties of complex types to translate
        link: ['title']
        teaser_selection: ['items/*/title', 'items/*/description']

    ingestion:
        chunker: markdown                  # "markdown" (default), "section", or a service ID
        chunker_options:
            word_limit: 200                # Target max words per chunk (markdown chunker)

    text_field_types: ['text_line', 'text_area']   # Plain-text property types processed by AI features
    html_field_types: ['text_editor']              # HTML property types processed by AI features

api_key and base_uri

api_key is required and comes from your project settings on the sulu.ai platform. base_uri only needs to be changed for non-production platform environments.

webhook

The webhook secret authenticates configuration updates pushed by the sulu.ai platform (see Operations → Webhook). Generate it with:

php bin/console sulu:ai:register-webhook

The secret is displayed only once — store it immediately.

image_loader

Controls how the bundle fetches image binaries (used by the Media Metadata Generator and media-aware experts).

authorization accepts three forms:

# Direct string
image_loader:
    authorization: 'Bearer %env(IMAGE_TOKEN)%'

# Basic auth
image_loader:
    authorization:
        type: 'basic_auth'
        value: '%env(IMAGE_AUTH)%'      # Format: username:password

# Bearer token
image_loader:
    authorization:
        type: 'bearer_token'
        value: '%env(IMAGE_TOKEN)%'

Typical per-environment setup with Symfony's when@ syntax:

when@dev:
    sulu_ai_platform:
        image_loader:
            allow_insecure_https: true   # *.wip domains, self-signed certificates

when@stage:
    sulu_ai_platform:
        image_loader:
            authorization:
                type: 'basic_auth'
                value: '%env(STAGING_IMAGE_AUTH)%'

locale_map

Maps Sulu locale codes to platform locale codes, with an optional description that gives the AI language context during generation (not used for translations):

locale_map:
    de_ch:
        locale: de
        description: "German for Switzerland (formal, no dialect)"
    de_at:
        locale: de
    en_us: en        # Short form without description

Unmapped locales are passed through unchanged.

intelligent_search and ingestion

See Intelligent Search → Configuration for the full explanation of these options.

translator

translator.languages is a fixed list of DeepL-supported language codes mapped to enabled/disabled. All languages are enabled by default; disable individual ones:

translator:
    languages:
        BG: false
        TR: false

Arbitrary language codes cannot be added — the list is validated against the supported set.

text_field_types, html_field_types, property_type_translation_properties

Control which Sulu property types the full content translation processes. Add custom property types here when your project defines its own text-like field types.