Skip to main content
Version: 5.1

Knowledge Bases

A Knowledge Base is a managed store of documents that your integration can index and query. It provides a consistent interface for adding content, retrieving the most relevant chunks for a given query, and removing stale content, regardless of the underlying storage technology.

In WSO2 Integrator, a Knowledge Base is the single object the RAG ingest, retrieve, and delete-by-filter nodes talk to. It uses three pluggable parts (a Vector Store, an Embedding Provider, and a Chunker) and exposes a small surface for indexing chunks and retrieving the most relevant ones.

Available actions​

Every Knowledge Base exposes the same three actions in the right-side Knowledge Bases panel.

ActionWhat it doesRequired parametersOptional parameters
IngestTakes documents (or chunks), runs them through the configured Chunker, embeds each chunk via the Embedding Provider, and persists the vectors in the Vector Store.Documents (a single document, an array of documents, or an array of chunks).None.
RetrieveReturns the chunks most similar to a query, optionally filtered by metadata. The everyday read action.Query (the search text).Top K (default 10, use -1 for all). Filters (metadata filter).
Delete By FilterRemoves every chunk whose metadata matches the given filter. The standard way to evict an old version of a document before re-ingesting.Filters (the metadata filter).None.

Each Retrieve result has the matched chunk and a similarityScore. RAG flows usually pass the result list straight to ai:augmentUserQuery, which packages it together with the user's question into a single message ready for generate.

Where to find knowledge bases​

Two places, both equivalent:

  • Add Node panel > AI > RAG > Knowledge Base.
  • Right-side Knowledge Bases panel > + Add Knowledge Base.
Right-side Knowledge Bases panel showing the search bar and a + Add Knowledge Base button at the top of an empty list.Right-side Knowledge Bases panel showing the search bar and a + Add Knowledge Base button at the top of an empty list.

Either one opens the Select Knowledge Base picker, listing all supported types with a search bar at the top:

Select Knowledge Base picker with a search bar and four cards: Vector Knowledge Base, WSO2 Cloud Knowledge Base, the Bedrock Knowledge Bases group (2 options, available in ballerinax/ai.aws.bedrock) expanded to show Bedrock Managed Knowledge Base and Bedrock Self-Managed Knowledge Base, and Azure AI Search Knowledge Base.Select Knowledge Base picker with a search bar and four cards: Vector Knowledge Base, WSO2 Cloud Knowledge Base, the Bedrock Knowledge Bases group (2 options, available in ballerinax/ai.aws.bedrock) expanded to show Bedrock Managed Knowledge Base and Bedrock Self-Managed Knowledge Base, and Azure AI Search Knowledge Base.

Supported knowledge bases​

Knowledge BaseModuleStorage
Vector Knowledge Baseballerina/aiAny Vector Store
AWS Bedrock (Managed and Self-Managed)ballerinax/ai.aws.bedrockAn Amazon Bedrock knowledge base
Azure AI Search Knowledge Baseballerinax/ai.azureAzure AI Search index
WSO2 Cloud Knowledge Baseballerinax/ai.wso2.integrationKnowledge base service in WSO2 Cloud

Vector Knowledge Base​

The default implementation. You combine a Vector Store, an Embedding Provider, and a Chunker into a single connection that the rest of your RAG flows share.

Create form​

Create Vector Knowledge Base form showing three required pluggable fields: Vector Store (with + Create New Vector Store link), Embedding Model (with + Create New Embedding Model link), Chunker (default ai:AUTO, with + Create New Chunker link). Below: Knowledge Base Name aiVectorknowledgebase, Result Type ai:VectorKnowledgeBase.Create Vector Knowledge Base form showing three required pluggable fields: Vector Store (with + Create New Vector Store link), Embedding Model (with + Create New Embedding Model link), Chunker (default ai:AUTO, with + Create New Chunker link). Below: Knowledge Base Name aiVectorknowledgebase, Result Type ai:VectorKnowledgeBase.
FieldRequiredDefaultAvailable values
Vector StoreYesN/AAny saved Vector Store connection. Click + Create New Vector Store to make one inline.
Embedding ModelYesN/AAny saved Embedding Provider connection. Use the same provider on ingest and retrieve. Embeddings from different providers are not interchangeable.
ChunkerNoai:AUTOai:AUTO (chunker chosen automatically based on document type), ai:DISABLE (no chunking; each document becomes one chunk), or any saved Chunker connection.

There are no Advanced Configurations on the Vector Knowledge Base itself. Every knob lives on the underlying Vector Store, Embedding Provider, or Chunker connection.


AWS Bedrock​

An Amazon Bedrock knowledge base stores, chunks, embeds, and searches your documents inside your own AWS account and region. The package ships two knowledge bases, one for each kind of Bedrock knowledge base:

Knowledge baseVector storeWhen to use
Bedrock Managed Knowledge BaseRun by Bedrock. Nothing to provision. Search is always hybrid (keyword and semantic).You don't want to run a vector store.
Bedrock Self-Managed Knowledge BaseYour own, already provisioned: Amazon OpenSearch Serverless, Amazon OpenSearch Service managed cluster, Amazon S3 Vectors, Amazon Aurora PostgreSQL, Amazon Neptune Analytics, Pinecone, Redis Enterprise Cloud, or MongoDB Atlas.You already run one of these stores, or you need control over indexing and ranking.

In the Select Knowledge Base picker, both are grouped under one Bedrock Knowledge Bases card.

Official website: Amazon Bedrock Knowledge Bases.

Unlike the Vector Knowledge Base above, neither Bedrock knowledge base takes a Vector Store or Embedding Model connection: Bedrock embeds the documents and talks to the vector store itself.

Both knowledge bases work in one of two ways:

  • Attach by ID. Pass the ID of a knowledge base you already set up in AWS, for example KB12345678. Retrieve searches every data source on it, including content that AWS connectors such as Amazon S3, SharePoint, or Confluence sync in. Ingest and Delete By Filter also need the knowledge base to have a Custom data source; creating the connection fails, with a message saying why, if it has none.
  • Find or create by name. Pass a definition record. If a knowledge base with that name exists, the connection attaches to it, after checking that its role, embedding model, and storage match the definition. If none exists, the connection creates the knowledge base and a Custom data source. If more than one has that name, creating the connection fails and lists their IDs.
warning

Find or create is meant for a single instance, a local run, or a first-time setup. If two instances of your integration start at the same moment, both can create a knowledge base with the same name, and every later start then fails until you delete one. For a deployment with replicas or restarts, create the knowledge base once and pass its ID.

Create form​

Create form for the Bedrock Managed Knowledge Base, titled 'ai.aws.bedrock : Knowledge Base', showing Knowledge Base (required, hint 'An existing knowledge base ID, or a definition to find or create by name'), Authentication and Region (required), then Data Source ID (default ()), Chunker (default ai:AUTO, with + Create New Chunker), and Reranking Model (hint: Bedrock's managed reranking when unset; RERANKING_NONE turns it off).Create form for the Bedrock Managed Knowledge Base, titled 'ai.aws.bedrock : Knowledge Base', showing Knowledge Base (required, hint 'An existing knowledge base ID, or a definition to find or create by name'), Authentication and Region (required), then Data Source ID (default ()), Chunker (default ai:AUTO, with + Create New Chunker), and Reranking Model (hint: Bedrock's managed reranking when unset; RERANKING_NONE turns it off).

Both AWS Bedrock knowledge bases have the same create form fields, except reranking: Reranking Model on the Managed form, Reranking on the Self-Managed form.

FieldRequiredDefaultAvailable values
Knowledge BaseYes—A knowledge base ID (10 characters, for example KB12345678; an ARN is not accepted), or a definition record to find or create by name: ManagedKnowledgeBaseDefinition (Managed) or SelfManagedKnowledgeBaseDefinition (Self-Managed). See Definition records. The knowledge base must be ACTIVE, and of the matching kind: a Managed connection can't attach to a self-managed knowledge base, or the other way round.
AuthenticationYes—auth:DEFAULT_CREDENTIALS, or one of the records in AWS authentication options except Bedrock API key.
RegionYes—The AWS region the knowledge base is in, for example us-east-1. There is no default.
Data Source IDNo() (detected)The ID of the Custom data source that Ingest writes to and Delete By Filter deletes from. Leave empty when the knowledge base has exactly one Custom data source. Leave it empty also when a definition creates a new knowledge base; the new one gets its data source from the definition.
ChunkerNo() (detected)ai:AUTO, ai:DISABLE, or any saved Chunker connection. Client-side chunking before Ingest. Leave empty to follow the data source: ai:DISABLE when Bedrock chunks the documents, ai:AUTO when the data source's chunking strategy is NONE. Setting a chunker when Bedrock chunks the documents fails, because Bedrock would split them again.
Reranking Model (Managed only)No() (Bedrock default: managed reranking)RERANKING_NONE, RERANKING_MANAGED. Whether Bedrock reranks the results with its managed reranker. Managed reranking is not available on a knowledge base created with your own embedding model.
Reranking (Self-Managed only)No() (no reranking)modelArn, optional numberOfRerankedResults. Reranks the results with a Bedrock reranker model. numberOfRerankedResults can't be higher than Number Of Results; creating the connection fails if it is.
Endpoint ConfigurationNo() (derived from Region)fips (AWS offers FIPS endpoints for knowledge bases only in us-east-1 and us-west-2), customEndpoint. A customEndpoint is used for both Bedrock knowledge base endpoints, so it suits a mock or a single gateway. For a VPC endpoint, enable private DNS and leave this empty. dualstack is not supported.
Ingest TimeoutNo300Seconds. How long Ingest waits for the documents to be indexed.
warning

Knowledge bases don't accept Bedrock API keys. AWS doesn't allow API keys on the Agents for Amazon Bedrock APIs that knowledge bases use, so the Authentication field has no API key option. See Use an Amazon Bedrock API key.

The identity needs bedrock:Retrieve for Retrieve, and the direct ingestion permissions for Ingest and Delete By Filter. Without them, these actions fail with AccessDenied.

Advanced configurations​

Create form for the Bedrock Self-Managed Knowledge Base scrolled to Endpoint Configuration and Ingest Timeout (default 300), then Advanced Configurations expanded showing Number Of Results (hint 'Upper limit on results per retrieval (1-100)'), Override Search Type (No Selection), HTTP Config, and Retry Config.Create form for the Bedrock Self-Managed Knowledge Base scrolled to Endpoint Configuration and Ingest Timeout (default 300), then Advanced Configurations expanded showing Number Of Results (hint 'Upper limit on results per retrieval (1-100)'), Override Search Type (No Selection), HTTP Config, and Retry Config.
FieldKnowledge baseDefaultAvailable valuesWhat it controls
Number Of ResultsBoth() (follows Top K, up to 100)1 to 100The most results Bedrock returns per search request. Bedrock can return fewer. Top K on the Retrieve action still limits the total.
Override Search TypeSelf-Managed() (Bedrock chooses)SEARCH_SEMANTIC, SEARCH_HYBRIDVector-only or hybrid (vector and keyword) search. Hybrid search needs a store with a filterable text field. The AWS API reference lists only OpenSearch Serverless; the AWS user guide also lists Aurora PostgreSQL and MongoDB Atlas. Leave empty unless your store supports it.
Retry ConfigBothmaxRetries 3, initialDelay 1.0, maxDelay 20.0, backoffFactor 2.0RecordBackoff for throttling and transient errors (408, 429, 500, 502, 503, 504).
HTTP ConfigBoth()RecordThe Standard HTTP advanced configurations, grouped in one record. There is no Service URL; use Endpoint Configuration.

Definition records​

Use a definition record in Knowledge Base to find or create a knowledge base by name.

ManagedKnowledgeBaseDefinition (Bedrock Managed Knowledge Base):

FieldRequiredDefaultWhat it controls
nameYes—Knowledge base name, and the lookup key. Letters and digits, optionally separated by single _ or - characters.
serviceRoleArnYes—ARN of the IAM role Bedrock uses to manage the knowledge base.
descriptionNo()Description.
dataSourceNo{name: "ballerina-custom-source"}The Custom data source created with the knowledge base: name, optional description.
embeddingModelNo() (Bedrock's own model)Your own embedding model, as embeddingModelArn. The connection always sets 1024 dimensions and FLOAT32, which AWS requires for a managed knowledge base. Supported models: Amazon Titan Text Embeddings V2, Cohere Embed English v3, Cohere Embed Multilingual v3, Cohere Embed v4, and Amazon Nova Multimodal Embeddings. This can't be changed later, and rules out RERANKING_MANAGED.
kmsKeyArnNo() (AWS managed key)A customer-managed KMS key for the stored data.
readyTimeoutNo300Seconds to wait for a new knowledge base and data source to become ready.

SelfManagedKnowledgeBaseDefinition (Bedrock Self-Managed Knowledge Base):

FieldRequiredDefaultWhat it controls
nameYes—Knowledge base name, and the lookup key. Letters and digits, optionally separated by single _ or - characters.
serviceRoleArnYes—ARN of the IAM role Bedrock uses to manage the knowledge base. It also needs access to your vector store. See Knowledge base permissions.
descriptionNo()Description.
embeddingModelArnYes—ARN of the Bedrock embedding model, for example arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-embed-text-v2:0.
embeddingModelNo() (model defaults)dimensions and embeddingDataType (EMBEDDING_FLOAT32, or EMBEDDING_BINARY on OpenSearch only). dimensions must match your vector index.
storageConfigurationYes—Your vector store, as one of OpenSearchServerlessStorage, OpenSearchManagedClusterStorage, S3VectorsStorage, RdsStorage, NeptuneAnalyticsStorage, PineconeStorage, RedisEnterpriseCloudStorage, or MongoDbAtlasStorage. The store must already exist.
dataSourceNo{name: "ballerina-custom-source"}The Custom data source: name, optional description, chunkingStrategy (FIXED_SIZE or NONE), and for FIXED_SIZE, maxTokens (300) and overlapPercentage (20). Set NONE to chunk with a Chunker instead. The strategy can't be changed later.
readyTimeoutNo300Seconds to wait for a new knowledge base and data source to become ready.
note

The vector store must already exist. AWS can create a vector store for you only from the console, not through the API. Create it with the console, Terraform, or AWS CDK first, then reference it in storageConfiguration.

Action behavior​

  • Ingest waits until every document is indexed, or until Ingest Timeout passes, so a Retrieve right after it finds the documents. It accepts text only. A document with an id in its metadata replaces the earlier document with the same id. When the connection splits a document into several chunks, the chunks get the IDs <id>#0, <id>#1, and so on.
  • Retrieve filter support depends on the vector store. AWS notes that in and nin filters are best supported on OpenSearch Serverless and Neptune Analytics, and that MongoDB Atlas needs filters configured in its vector index before filtering works. See Manual metadata filtering.
  • Delete By Filter needs at least one filter condition, so it can't delete everything by accident. It deletes only from the connection's own Custom data source (the one Ingest writes to); content in other data sources is left alone. It searches that data source to find the matching documents, so use it for cleanup rather than on every request. If some documents can't be deleted or confirmed, it still deletes the rest and returns an error that names them. Running it again usually deletes the rest.

Azure AI Search Knowledge Base​

A Knowledge Base that stores chunks directly in Azure AI Search and uses Azure's hybrid (vector + keyword + semantic) retrieval. Use this when your team already runs Azure AI Search or when you want Azure's semantic ranker on top of vector search.

Official website: Azure AI Search.

Unlike the Vector Knowledge Base, this one talks to Azure AI Search directly. There is no separate Vector Store connection. The Embedding Provider is optional because Azure can do its own integrated vectorization.

Create form​

The form opens with Service URL, API Key, Index, Embedding Model, Chunker, and the start of Verbose:

Create Azure AI Search Knowledge Base form showing Service Url, Api Key, Index, Embedding Model (optional, with Create New Embedding Model link), Chunker (default AUTO, with Create New Chunker link), and the start of Verbose (default false).Create Azure AI Search Knowledge Base form showing Service Url, Api Key, Index, Embedding Model (optional, with Create New Embedding Model link), Chunker (default AUTO, with Create New Chunker link), and the start of Verbose (default false).
FieldRequiredDefaultAvailable values
Service URLYesN/AService URL of your Azure AI Search instance.
API KeyYesN/AAPI key for authenticating with the Azure AI Search service.
IndexYesN/AThe name of an existing search index, or a search:SearchIndex definition (a record describing the index schema). When creating a new index, ensure it contains one key field of type string.
Embedding ModelNo()Any saved Embedding Provider connection. Used for query and ingest if provided. Leave empty to rely on Azure AI Search's integrated vectorization.
ChunkerNoai:AUTOai:AUTO, ai:DISABLE, or any saved Chunker connection.

Scrolling further shows Verbose, API Version, Content Field Name, Search Client Connection Config, Index Client Connection Config, and Semantic Configuration Name:

Create Azure AI Search Knowledge Base form showing Verbose (default false), Api Version (default 2025-09-01), Content Field Name (default content), Search Client Connection Config (default {}), Index Client Connection Config (default {}), and the start of Semantic Configuration Name.Create Azure AI Search Knowledge Base form showing Verbose (default false), Api Version (default 2025-09-01), Content Field Name (default content), Search Client Connection Config (default {}), Index Client Connection Config (default {}), and the start of Semantic Configuration Name.
FieldDefaultAvailable valuesWhat it controls
Verbosefalsetrue, falseWhether to enable verbose logging during ingest and retrieve. Useful when debugging.
API Version2025-09-01Azure AI Search API version stringThe Azure AI Search REST API version to use.
Content Field Name"content"StringThe name of the field in the index that contains the main chunk content.
Search Client Connection Config{}RecordConnection configuration for the Azure AI Search service client. Required only when Index is provided as a search:SearchIndex definition (i.e. when the connector creates the index for you). See Standard HTTP Advanced Configurations for available knobs.
Index Client Connection Config{}RecordConnection configuration for the Azure AI Search index client. See Standard HTTP Advanced Configurations for available knobs.
Semantic Configuration Name()String or emptyThe name of the semantic configuration to use for semantic search. Leave empty for plain vector / keyword search.

Scrolling to the bottom shows Knowledge Base Name and Result Type:

Bottom of the Create Azure AI Search Knowledge Base form showing Content Field Name, Search Client Connection Config, Index Client Connection Config, Semantic Configuration Name, Knowledge Base Name set to azureAisearchknowledgebase, and Result Type locked to azure:AiSearchKnowledgeBase.Bottom of the Create Azure AI Search Knowledge Base form showing Content Field Name, Search Client Connection Config, Index Client Connection Config, Semantic Configuration Name, Knowledge Base Name set to azureAisearchknowledgebase, and Result Type locked to azure:AiSearchKnowledgeBase.

The connector analyzes the index schema on init: it identifies the key field, every vector field, and verifies the content field exists. If you use Azure AI Search's integrated vectorization, you don't need to provide an Embedding Model.


WSO2 Cloud Knowledge Base​

A Knowledge Base that's deployed in WSO2 Cloud. If you don't already have a WSO2 Cloud Knowledge Base deployed in your organization, create the knowledge base in WSO2 Cloud first. It is provisioned and managed there.

Connect to an existing knowledge base​

Selecting WSO2 Cloud Knowledge Base lists the knowledge bases available in your WSO2 Cloud organization, above a Manually Config WSO2 Cloud Knowledge Base card. You need to be signed in to WSO2 Cloud with a project selected for the list to appear; if none exist yet, only the manual-config card is shown:

WSO2 Cloud Knowledge Bases picker with a search bar and a Manually Config WSO2 Cloud Knowledge Base card ('Add configurations for the Knowledge Base...'). No existing knowledge bases are listed in this organization.WSO2 Cloud Knowledge Bases picker with a search bar and a Manually Config WSO2 Cloud Knowledge Base card ('Add configurations for the Knowledge Base...'). No existing knowledge bases are listed in this organization.

Choosing an existing knowledge base opens the create form with its service URL and credentials already filled in; the credentials are supplied by the environment when the integration runs, so no secrets are stored in your project:

Create WSO2 Cloud Knowledge Base form with the Service URL and Knowledge Base Authentication Configuration fields already filled in from the selected knowledge base.Create WSO2 Cloud Knowledge Base form with the Service URL and Knowledge Base Authentication Configuration fields already filled in from the selected knowledge base.

Configure manually​

Choose Manually Config WSO2 Cloud Knowledge Base to open a blank form and enter the details yourself. The form opens with Service URL, Knowledge Base Authentication Configuration, Minimum Similarity Threshold, Cohere Reranker API Key, Cohere Reranker Model, Reranker Top N, and the start of HTTP Version:

Create WSO2 Cloud Knowledge Base form showing Service URL, Knowledge Base Authentication Configuration (default {auth: {token: ''}}), Minimum Similarity Threshold (default 0.7), Cohere Reranker API Key, Cohere Reranker Model, Reranker Top N (default 5), and the start of HTTP Version (default 2.0).Create WSO2 Cloud Knowledge Base form showing Service URL, Knowledge Base Authentication Configuration (default {auth: {token: ''}}), Minimum Similarity Threshold (default 0.7), Cohere Reranker API Key, Cohere Reranker Model, Reranker Top N (default 5), and the start of HTTP Version (default 2.0).
FieldRequiredDefaultAvailable values
Service URLYesN/AThe endpoint of the knowledge base service in WSO2 Cloud.
Knowledge Base Authentication ConfigurationYesN/AA bearer token, or OAuth2 client credentials (Token URL, Client ID, Client Secret). Knowledge bases connected from WSO2 Cloud use OAuth2 client credentials.
Minimum Similarity ThresholdNo0.7Decimal 0–1. The lowest similarity score a chunk can have and still be returned by Retrieve.
Cohere Reranker API KeyNo()String or empty. API key for the Cohere reranker. Leave empty to skip reranking.
Cohere Reranker ModelNo()String or empty. The Cohere reranker model to use when reranking is enabled.
Reranker Top NNo5Integer. The number of chunks to keep after reranking.

Scrolling further shows the standard HTTP inline fields: HTTP1 Settings, HTTP2 Settings, Timeout, Forwarded, Cache Configuration, and the start of Compression:

Middle of the Create WSO2 Cloud Knowledge Base form showing HTTP1 Settings (default {}), HTTP2 Settings (default {}), Timeout (default 0.0d), Forwarded (default empty), Cache Configuration (default {}), and the start of Compression (default AUTO).Middle of the Create WSO2 Cloud Knowledge Base form showing HTTP1 Settings (default {}), HTTP2 Settings (default {}), Timeout (default 0.0d), Forwarded (default empty), Cache Configuration (default {}), and the start of Compression (default AUTO).

Continuing the scroll shows Response Limit Configuration and Payload Validation, then the collapsed Advanced Configurations toggle, and finally Knowledge Base Name and Result Type:

Bottom of the Create WSO2 Cloud Knowledge Base form showing Response Limit Configuration (default {}), Payload Validation (default false), the collapsed Advanced Configurations toggle, Knowledge Base Name set to integrationCloudknowledgebase, and Result Type locked to integration:CloudKnowledgeBase.Bottom of the Create WSO2 Cloud Knowledge Base form showing Response Limit Configuration (default {}), Payload Validation (default false), the collapsed Advanced Configurations toggle, Knowledge Base Name set to integrationCloudknowledgebase, and Result Type locked to integration:CloudKnowledgeBase.

Advanced configurations​

Expanding Advanced Configurations shows Pool Configuration, Circuit Breaker Configuration, Retry Configuration, Secure Socket Configuration, and Proxy Configuration, the same fields as the Standard HTTP advanced configurations section on the Model Providers page:

Create WSO2 Cloud Knowledge Base form with Advanced Configurations expanded showing Pool Configuration (default {}), Circuit Breaker Configuration (default {}), Retry Configuration (default {}), Secure Socket Configuration (default {}), and Proxy Configuration (default {}).Create WSO2 Cloud Knowledge Base form with Advanced Configurations expanded showing Pool Configuration (default {}), Circuit Breaker Configuration (default {}), Retry Configuration (default {}), Secure Socket Configuration (default {}), and Proxy Configuration (default {}).

Selecting a knowledge base​

SituationRecommended
Most projects, especially new onesVector Knowledge Base with In-Memory (dev) or Pinecone / Pgvector / Weaviate / Milvus (prod).
Already on AWS, or want AWS to handle chunking and embeddingAWS Bedrock: Managed if you don't want to run a vector store, Self-Managed if you already run one.
Knowledge base provisioned and managed in WSO2 CloudWSO2 Cloud Knowledge Base.
Already running Azure AI Search; need keyword + vector + semantic rankerAzure AI Search Knowledge Base.
Need a custom retrieval source (search engine, graph DB, hand-rolled)Implement the ai:KnowledgeBase contract yourself; the rest of the integration won't change.

What's next​

  • Chunkers — How documents are split before ingest.
  • Direct LLM Calls — One-shot generate calls without an agent loop.
  • Natural Functions — Ballerina functions whose body is plain English, evaluated at runtime by an LLM.