Configuration

Enabling Embabel

Annotate your Spring Boot application class to get agentic behavior.

Example:

@SpringBootApplication
public class MyAgentApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyAgentApplication.class, args);
    }
}

This is a normal Spring Boot application class. You can add other Spring Boot annotations as needed.

You also need to add the dependency and configuration for your LLM provider(s) of choice.

Configuration Properties

The following table lists all available configuration properties in Embabel Agent Platform. Properties are organized by their configuration prefix and include default values where applicable. They can be set via application.properties, application.yml, profile-specific configuration files or environment variables, as per standard Spring configuration practices.

Setting default LLM and roles

From ConfigurableModelProviderProperties - configuration for default LLMs and role-based model selection.

PropertyTypeDefaultDescription
embabel.models.default-llmStringgpt-4.1-miniDefault LLM name. It’s good practice to override this in configuration.
embabel.models.default-embedding-modelStringnullDefault embedding model name. Need not be set, in which case it defaults to null.
embabel.models.llmsMap<String, String>{}Map of role to LLM name. Each entry will require an LLM to be registered with the same name. May not include the default LLM.
embabel.models.embedding-servicesMap<String, String>{}Map of role to embedding service name. Does not need to include the default embedding service. You can create as many roles as you wish.

Role-based model selection allows you to assign specific LLMs or embedding services to different roles within your application. For example:

embabel:
  models:
    default-llm: gpt-4o-mini
    default-embedding-model: text-embedding-3-small
    llms:
      cheapest: gpt-4o-mini
      best: gpt-4o
      reasoning: o1-preview
    embedding-services:
      fast: text-embedding-3-small
      accurate: text-embedding-3-large

It’s good practice to decouple your code from specific models in this way.

Platform Configuration

From AgentPlatformProperties - unified configuration for all agent platform properties.

PropertyTypeDefaultDescription
embabel.agent.platform.nameStringembabel-defaultCore platform identity name
embabel.agent.platform.descriptionStringEmbabel Default Agent PlatformPlatform description

Logging Personality

Configuration for agent logging output style and theming.

PropertyTypeDefaultDescription
embabel.agent.logging.personalityString(none)Themed logging messages to add personality to agent output

Available Personality Values

ValueDescription
starwarsStar Wars themed logging messages
severanceSeverance themed logging messages. Praise Kier
colossusColossus: The Forbin Project themed messages
hitchhikerHitchhiker’s Guide to the Galaxy themed messages
montypythonMonty Python themed logging messages

Example Configuration

embabel:
  agent:
    logging:
      personality: hitchhiker

Agent Scanning

From AgentPlatformProperties.ScanningConfig - configures scanning of the classpath for agents.

PropertyTypeDefaultDescription
embabel.agent.platform.scanning.annotationBooleantrueWhether to auto register beans with @Agent and @Agentic annotation
embabel.agent.platform.scanning.beanBooleanfalseWhether to auto register as agents Spring beans of type Agent

Ranking Configuration

From AgentPlatformProperties.RankingConfig - configures ranking of agents and goals based on user input when the platform should choose the agent or goal.

PropertyTypeDefaultDescription
embabel.agent.platform.ranking.llmStringnullName of the LLM to use for ranking, or null to use auto selection
embabel.agent.platform.ranking.max-attemptsInt5Maximum number of attempts to retry ranking
embabel.agent.platform.ranking.backoff-millisLong100Initial backoff time in milliseconds
embabel.agent.platform.ranking.backoff-multiplierDouble5.0Multiplier for backoff time
embabel.agent.platform.ranking.backoff-max-intervalLong180000Maximum backoff time in milliseconds

LLM Operations

From AgentPlatformProperties.LlmOperationsConfig - configuration for LLM operations including prompts and data binding.

PropertyTypeDefaultDescription
embabel.agent.platform.llm-operations.prompts.maybe-prompt-templateStringmaybe_prompt_contributionTemplate for "maybe" prompt, enabling failure result when LLM lacks information
embabel.agent.platform.llm-operations.prompts.generate-examples-by-defaultBooleantrueWhether to generate examples by default
embabel.agent.platform.llm-operations.data-binding.max-attemptsInt10Maximum retry attempts for data binding
embabel.agent.platform.llm-operations.data-binding.fixed-backoff-millisLong30Fixed backoff time in milliseconds between retries

Tool Loop

From ToolLoopConfiguration - configuration for tool loop execution.

PropertyTypeDefaultDescription
embabel.agent.platform.toolloop.typeStringdefaultTool loop type: default (sequential) or parallel (experimental)
embabel.agent.platform.toolloop.max-iterationsInt20Maximum number of tool loop iterations
embabel.agent.platform.toolloop.parallel.per-tool-timeoutDuration30sTimeout for individual tool execution in parallel mode
embabel.agent.platform.toolloop.parallel.batch-timeoutDuration60sTimeout for entire batch of parallel tools
embabel.agent.platform.toolloop.empty-response.max-retriesInt0Maximum consecutive empty-response retries before throwing EmptyLlmResponseException. 0 (default) preserves existing behaviour — the loop exits with blank content. Any value > 0 activates RetryWithFeedbackPolicy.
embabel.agent.platform.toolloop.empty-response.nudge-messageString(see below)Message appended to the conversation as a synthetic UserMessage when the LLM goes silent. Only used when max-retries > 0. Default nudges the model to take one concrete action.
Empty-Response Handling

Weak open-weights chat models (such as gpt-oss-20b or some Qwen variants) occasionally return blank text with no further tool calls after a tool result, when the model has run out of ideas about what to do next. Without intervention the tool loop exits with empty content, which the rendering layer surfaces as EmptyLlmResponseException.

The empty-response configuration controls whether the loop gives the model a second chance. Setting max-retries: 1 activates RetryWithFeedbackPolicy: when an empty response is detected the loop appends the configured nudge message as a synthetic UserMessage and re-invokes the LLM in the same loop iteration. The retry counter is reset on any non-empty response, so retries are bounded per consecutive failure rather than cumulative across the whole loop.

Example for a deployment running a smaller chat model:

embabel:
  agent:
    platform:
      toolloop:
        max-iterations: 30        # raise to give retries headroom
        empty-response:
          max-retries: 1          # one nudge before throwing

For most deployments using strong frontier models the default (max-retries: 0) is correct — empty responses are rare, and the typed exception lets callers handle the case explicitly. This setting is provided to make small / local model deployments more robust without forcing every caller to wrap LLM invocations in their own retry logic.

For programmatic configuration (custom retry counts or messages), inject your own EmptyResponsePolicy bean — the auto-configuration honours @ConditionalOnMissingBean.

Process ID Generation

From AgentPlatformProperties.ProcessIdGenerationConfig - configuration for process ID generation.

PropertyTypeDefaultDescription
embabel.agent.platform.process-id-generation.include-versionBooleanfalseWhether to include version in process ID generation
embabel.agent.platform.process-id-generation.include-agent-nameBooleanfalseWhether to include agent name in process ID generation

Autonomy Configuration

From AgentPlatformProperties.AutonomyConfig - configures thresholds for agent and goal selection. Certainty below thresholds will result in failure to choose an agent or goal.

PropertyTypeDefaultDescription
embabel.agent.platform.autonomy.agent-confidence-cut-offDouble0.6Confidence threshold for agent operations
embabel.agent.platform.autonomy.goal-confidence-cut-offDouble0.6Confidence threshold for goal achievement

Model Provider Configuration

From AgentPlatformProperties.ModelsConfig - model provider integration configurations.

Anthropic
PropertyTypeDefaultDescription
embabel.agent.platform.models.anthropic.max-attemptsInt10Maximum retry attempts
embabel.agent.platform.models.anthropic.backoff-millisLong5000Initial backoff time in milliseconds
embabel.agent.platform.models.anthropic.backoff-multiplierDouble5.0Backoff multiplier
embabel.agent.platform.models.anthropic.backoff-max-intervalLong180000Maximum backoff interval in milliseconds
OpenAI
PropertyTypeDefaultDescription
embabel.agent.platform.models.openai.max-attemptsInt10Maximum retry attempts
embabel.agent.platform.models.openai.backoff-millisLong5000Initial backoff time in milliseconds
embabel.agent.platform.models.openai.backoff-multiplierDouble5.0Backoff multiplier
embabel.agent.platform.models.openai.backoff-max-intervalLong180000Maximum backoff interval in milliseconds
Google GenAI (Native)

Uses the native Google GenAI SDK (spring-ai-google-genai) for direct access to Gemini models with full feature support.

PropertyTypeDefaultDescription
embabel.agent.platform.models.googlegenai.max-attemptsInt10Maximum retry attempts
embabel.agent.platform.models.googlegenai.backoff-millisLong5000Initial backoff time in milliseconds
embabel.agent.platform.models.googlegenai.backoff-multiplierDouble5.0Backoff multiplier
embabel.agent.platform.models.googlegenai.backoff-max-intervalLong180000Maximum backoff interval in milliseconds

Google GenAI models (both LLM and embedding) are configured via the embabel-agent-starter-google-genai starter dependency.

The following embedding models are available:

Model NameModel IDDimensionsPrice (per 1M tokens)
gemini_embedding_001gemini-embedding-0013072$0.15

The following environment variables control authentication:

Environment VariableDescription
GOOGLE_API_KEYAPI key for Google AI Studio authentication
GOOGLE_PROJECT_IDGoogle Cloud project ID (for Vertex AI authentication)
GOOGLE_LOCATIONGoogle Cloud region, e.g., us-central1 (for Vertex AI authentication)

To use Gemini 3 with Vertex AI, you must set GOOGLE_LOCATION=global.

To add new Google GenAI embedding models, edit the configuration file:

embabel-agent-autoconfigure/models/embabel-agent-google-genai-autoconfigure/
  src/main/resources/models/google-genai-models.yml
embedding_models:
  - name: "gemini_embedding_001"
    model_id: "gemini-embedding-001"
    display_name: "Gemini Embedding 001"
    dimensions: 3072
    pricing_model:
      usd_per1m_tokens: 0.15

HTTP Client Configuration

From NettyClientFactoryProperties - configuration for the HTTP client used by model providers (OpenAI, Anthropic, etc.) when making API calls.

Embabel uses Reactor Netty as the HTTP client for improved performance and non-blocking I/O. This is particularly important for LLM API calls which can have long response times.

Dependency Requirement

To use the Netty client, you must manually add the following autoconfiguration dependency to your project:

<dependency>
    <groupId>com.embabel.agent</groupId>
    <artifactId>embabel-agent-netty-client-autoconfigure</artifactId>
</dependency>

For Gradle:

implementation 'com.embabel.agent:embabel-agent-netty-client-autoconfigure'
PropertyTypeDefaultDescription
embabel.agent.platform.http-client.connect-timeoutDuration25sConnection timeout for establishing HTTP connections to model providers
embabel.agent.platform.http-client.read-timeoutDuration1mRead timeout (response timeout) for receiving responses from model providers. Increase this value for models that generate long responses or when using extended thinking features.

Example Configuration

embabel:
  agent:
    platform:
      http-client:
        connect-timeout: 10s
        read-timeout: 10m
When to Adjust Timeouts
  • Long-running LLM calls: If you experience timeout errors during complex reasoning tasks, increase read-timeout
  • Slow network environments: Increase connect-timeout if connection establishment is failing
  • Streaming responses: The read-timeout applies to the initial response; streaming content has its own handling

Server-Sent Events

From AgentPlatformProperties.SseConfig - server-sent events configuration.

PropertyTypeDefaultDescription
embabel.agent.platform.sse.max-buffer-sizeInt100Maximum buffer size for SSE
embabel.agent.platform.sse.max-process-buffersInt1000Maximum number of process buffers

REST Endpoints

From AgentPlatformProperties.RestConfig - toggles for the platform’s built-in REST endpoints. Each flag controls whether the corresponding endpoint is exposed. When disabled, the corresponding controller bean is not registered, so the endpoint is absent from Swagger/OpenAPI documentation and routing rejects calls (HTTP 404, or HTTP 405 if another method remains mapped at the same path).

PropertyTypeDefaultDescription
embabel.agent.platform.rest.process-status-enabledBooleantrueWhether GET /api/v1/process/\{id} (process status) is exposed
embabel.agent.platform.rest.process-kill-enabledBooleantrueWhether DELETE /api/v1/process/\{id} (terminate process) is exposed
embabel.agent.platform.rest.process-events-enabledBooleantrueWhether GET /events/process/\{id} (SSE event stream) is exposed. When disabled, the SSE controller is not registered.

Test Configuration

From AgentPlatformProperties.TestConfig - test configuration.

PropertyTypeDefaultDescription
embabel.agent.platform.test.mock-modeBooleantrueWhether to enable mock mode for testing

Process Repository Configuration

From ProcessRepositoryProperties - configuration for the agent process repository.

PropertyTypeDefaultDescription
embabel.agent.platform.process-repository.window-sizeInt1000Maximum number of agent processes to keep in memory when using default InMemoryAgentProcessRepository. When exceeded, oldest processes are evicted.

Standalone LLM Configuration

LLM Operations Prompts

From LlmOperationsPromptsProperties - properties for ChatClientLlmOperations operations.

PropertyTypeDefaultDescription
embabel.llm-operations.prompts.maybe-prompt-templateStringmaybe_prompt_contributionTemplate to use for the "maybe" prompt, which can enable a failure result if the LLM does not have enough information to create the desired output structure
embabel.llm-operations.prompts.generate-examples-by-defaultBooleantrueWhether to generate examples by default
embabel.llm-operations.prompts.default-timeoutDuration60sDefault timeout for operations
LLM Data Binding

From LlmDataBindingProperties - data binding properties with retry configuration for LLM operations.

PropertyTypeDefaultDescription
embabel.llm-operations.data-binding.max-attemptsInt10Maximum retry attempts for data binding
embabel.llm-operations.data-binding.fixed-backoff-millisLong30Fixed backoff time in milliseconds between retries

Additional Model Providers

AWS Bedrock

From BedrockProperties - AWS Bedrock model configuration properties.

PropertyTypeDefaultDescription
embabel.models.bedrock.modelsList[]List of Bedrock models to configure
embabel.models.bedrock.models[].nameString""Model name
embabel.models.bedrock.models[].knowledge-cutoffString""Knowledge cutoff date
embabel.models.bedrock.models[].input-priceDouble0.0Input token price
embabel.models.bedrock.models[].output-priceDouble0.0Output token price
ONNX Embeddings

From OnnxEmbeddingProperties - configuration for local ONNX embedding models.

PropertyTypeDefaultDescription
embabel.agent.platform.models.onnx.embeddings.enabledBooleantrueWhether to enable ONNX embedding service
embabel.agent.platform.models.onnx.embeddings.model-uriString(HuggingFace all-MiniLM-L6-v2)URI to the ONNX model file (HuggingFace URL or file:// path)
embabel.agent.platform.models.onnx.embeddings.tokenizer-uriString(HuggingFace all-MiniLM-L6-v2)URI to the tokenizer JSON file
embabel.agent.platform.models.onnx.embeddings.dimensionsInt384Embedding dimensions
embabel.agent.platform.models.onnx.embeddings.model-nameStringall-MiniLM-L6-v2Name for the embedding model
embabel.agent.platform.models.onnx.embeddings.cache-dirString~/.embabel/modelsLocal cache directory for downloaded model files
Docker Local Models

From DockerProperties - configuration for Docker local models (OpenAI-compatible).

PropertyTypeDefaultDescription
embabel.docker.models.base-urlStringhttp://localhost:12434/enginesBase URL for Docker model endpoint
embabel.docker.models.max-attemptsInt10Maximum retry attempts
embabel.docker.models.backoff-millisLong2000Initial backoff time in milliseconds
embabel.docker.models.backoff-multiplierDouble5.0Backoff multiplier
embabel.docker.models.backoff-max-intervalLong180000Maximum backoff interval in milliseconds

Was this page helpful?

Share