config.yml, endpoints.yml, and domain.yml.
Configuration File
Theconfig.yml file defines how your Rasa assistant processes user messages. It specifies which components, policies, and language settings your assistant will use.
Hereβs the minimal configuration required to run a CALM assistant:
config.yml
Recipe
- Rasa provides a default graph recipe:
default.v1. For most projects, the default value is sufficient. - In case youβre running ML experiments or ablation studies and want to add a custom graph recipe, this guide has you covered.
Language
- TheΒ
languageΒ key sets the primary language your assistant supports. Use aΒ two-letter ISO 639-1 codeΒ (e.g.,Β"en"Β for English). - The
additional_languagesΒ key lists codes of other languages your assistant supports.
Pipeline
TheΒpipelineΒ section lists the components that process the latest user message and produceΒ commandsΒ for the conversation. The main component in your pipeline is theΒ LLMCommandGenerator.
Policies
TheΒpoliciesΒ key lists theΒ dialogue policies your assistant will use to progress the conversation. For CALM, you need at least theΒ FlowPolicy. It doesnβt require any additional configuration parameters.
πΒ Learn more about policies
Assistant ID
Theassistant_id key defines the unique identifier of your assistant. This ID is included in every eventβs metadata, alongside the model ID.
Use a distinct value to help differentiate between multiple deployed assistants.
Endpoints
TheΒendpoints.ymlΒ file defines how your assistant connects to key services β like where to store conversations, execute custom actions, fetch trained models, or generate responses.
Below are the main parameters you can configure.
Tracker Store β Where conversations are stored
Thetracker_store determines where Rasa keeps track of conversations. This is where your assistant remembers past interactions and makes decisions based on conversation context. You can store trackers in a file, a database (like PostgreSQL or MongoDB), or other storage backends.
πΒ How to configure tracker stores
Event Broker β Where conversation events are sent
Conversation history is comprised of events β every user message, action, or slot update is one. Theevent_broker sends these to other systems (e.g. for monitoring, analytics, or syncing with a data warehouse). Itβs especially useful in production setups.
πΒ How to configure event brokers
Action Endpoint β Where custom code runs
When your assistant needs to do something dynamic β like fetching user data or making an API call β it uses custom actions. Theaction_endpoint tells Rasa where your action server is running so it can call it when needed.
πΒ How to configure action server
A2A Server β Expose Rasa as a sub-agent
When an external orchestrator invokes your assistant over the Agent-to-Agent (A2A) protocol, add ana2a_server block to endpoints.yml.
Rasa registers A2A JSON-RPC routes on the same port as REST and channel webhooks.
This is the inverse of integrating external agents via A2A, where Rasa is the orchestrator. Here, Rasa is the sub-agent that external systems discover and call.
Requires start_session_after_expiry: false in domain.yml and SANIC_WORKERS=1 per replica.
πΒ How to expose Rasa as an A2A sub-agent
πΒ A2A Server configuration reference
Models β Where trained models live
TheΒmodelsΒ section lets you configure remote model storage, such as a cloud bucket or server, where Rasa can automatically fetch the latest trained model at runtime. This is useful for CI/CD workflows where models are trained and uploaded externally.
πΒ How to configure model storage
Model Groups β LLM and embedding models
Themodel_groups section is used to define LLMs and embedding models used by features like retrieval, rephraser, and command generator. You specify provider, type, and settings for each group.
πΒ How to configure model groups
Lock Stores β Prevent processing conflicts
Thelock_store manages conversation-level locks to ensure that only one message processor handles a message at a time. This prevents race conditions when multiple messages for the same user arrive close together β a common scenario in voice assistants or high-traffic setups.
Message processors are tied to Rasa processes, and deployment setup affects the lock store you should use:
- Single Rasa process (typically for development): the in-memory lock store is sufficient.
- Multiple Rasa processes in one pod (i.e. multiple Sanic workers): use the
RedisLockStoreorConcurrentRedisLockStore. - Multiple Rasa processes across multiple pods: we recommend using the
ConcurrentRedisLockStore, as described here.
Vector Stores β Enterprise search and flow retrieval
If your assistant uses Enterprise Search Policy, thevector_store allows you to define where the vector embeddings of the source documents are stored. It can also be used to connect to a search API that returns a set of relevant documents given a keyword or a search query.
πΒ How to configure Enterprise Search (RAG)
π How to customize flow retrieval
NLG Server β External response generator
If you want the assistantβs responses to be generated dynamically by an external system (like an LLM-based server), you can configure annlg endpoint. This allows you to update responses without retraining your model.
To use this, the endpoint must point to an HTTP server with aΒ /nlgΒ path. For example:
Contextual Response Rephraser β Rephrase responses with LLMs
Rasaβs built-in rephraser can automatically rewrite your templated responses using an LLM. It preserves intent and facts while making responses sound more natural or varied based on conversation context. To enable it:Silence Handling β Timeout before triggering fallback
Thesilence_timeout setting controls how long the assistant waits for a response before assuming the user is silent. Silence timeouts help your assistant handle situations where the user doesnβt respond. For now, this setting only works with voice-stream channels, such as:
- Twilio Media Streams
- Browser Audio
- Genesys
- Jambonz Stream
- Audiocodes Stream
Domain
Thedomain.yml file defines the universe your assistant operates in β including its responses, memory (slots), and supported actions.
Example:
domain.yml
Whatβs in the Domain
- Responses: Templated messages your assistant can send.
- Slots: Data your assistant stores about the user.
- Actions: Logic or service calls your assistant can perform.
- Session Configuration: Controls when conversations reset.