Skip to main content

Evaluation Framework Backend configuration

Evaluation Framework Backend takes its settings from environment variables. This reference lists them for release 0.5.0, grouped by subsystem, with the defaults of the release's application.yml. It is for platform engineers who run the backend; for how it connects to DIAL Admin, see Connect DIAL Admin.

Spring Boot accepts every property under its relaxed-binding name: upper case, with . and - replaced by _, so test-case.multi-turn.max-turns becomes TEST_CASE_MULTI_TURN_MAX_TURNS. Where application.yml reads a different name, this page lists that name. The upstream configuration guide has the property names; where its defaults differ from application.yml, this page follows application.yml.

Minimum settings​

VariableWhy
POSTGRES_META_DATASOURCE_URL, _USERNAME, _PASSWORDThe meta database. The defaults are for local development.
POSTGRES_ANALYTICS_DATASOURCE_URL, _USERNAME, _PASSWORDThe analytics database.
DIAL_CORE_URLDIAL Core.
DIAL_EF_API_KEYThe backend's Core API key. The backend doesn't start without it.
METRIC_PROVIDERS_DIAL_BASE_URL and METRIC_PROVIDERS_SYNC_ENABLED=trueThe metrics service, and loading its metric catalog.
PROVIDERS_<ID>_ISSUER, _JWKSETURI, _AUDIENCES, _PRINCIPALCLAIMValidation of the tokens DIAL Admin forwards.

Server and endpoints​

VariableDefaultDescription
SERVER_PORT8080Port of the REST API, the health checks, and Swagger UI.
MANAGEMENT_SERVER_PORT9464Port of Spring Boot Actuator.
MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDEhealth,info,prometheus,metricsActuator endpoints served, such as /actuator/prometheus.
MANAGEMENT_ENDPOINT_HEALTH_SHOW_DETAILSwhen_authorizedDetail in /actuator/health: never, when_authorized, or always.
SPRINGDOC_SWAGGER_UI_ENABLEDtrueServe Swagger UI at /swagger-ui.html.
SPRINGDOC_API_DOCS_ENABLEDtrueServe the OpenAPI document at /v3/api-docs.
SERVER_TOMCAT_MAX_HTTP_POST_SIZE10485760Largest request body, in bytes.
VIRTUAL_THREADS_ENABLEDtrueRun request and run workers on virtual threads. Set false only to profile CPU use.

The health checks at /api/v1/health, /api/v1/health/ready, and /api/v1/health/live need no token. The Actuator readiness group includes the dialFileStorage, database, and analyticsDatabase checks; dialFileStorage stays down until the backend finds its file bucket in DIAL Core with DIAL_EF_API_KEY.

Security​

VariableDefaultDescription
CONFIG_REST_SECURITY_MODEoidcoidc validates a JWT on every API call. none turns authentication off; use it only for local development.
CONFIG_REST_SECURITY_DEFAULT_ALLOWEDROLESadminRoles accepted when a provider sets no ALLOWEDROLES.
CONFIG_REST_SECURITY_DISABLE_SWAGGER_AUTHORIZATIONtrueServe Swagger UI and the OpenAPI document without a token.
SECURITY_JWT_USER_CLAIMsubClaim stored as the author of test suites and other entities.
SECURITY_JWT_RESOLVE_USER_NAMEfalseStore the user's display name from DIAL Core's GET /v1/user/info instead of the claim. DIAL Admin shows the stored value in Created by.

Warning

The backend has no per-user authorization yet. Every user it accepts can read and change all datasets, test suites, and runs.

Identity providers​

Each identity provider is a set of PROVIDERS_<ID>_* variables, where <ID> is a name you choose, such as KEYCLOAK. Configure the provider that signs administrators in to DIAL Admin, because Admin forwards that provider's tokens. Lists are comma-separated.

VariableRequiredDescription
PROVIDERS_<ID>_ISSUERYesExpected iss claim: the issuer URL as it appears in the tokens, which is the URL the browser uses.
PROVIDERS_<ID>_JWKSETURIYesURL of the provider's signing keys. It must be reachable from the backend.
PROVIDERS_<ID>_AUDIENCESYesAccepted aud claim values, such as DIAL Admin's client ID.
PROVIDERS_<ID>_PRINCIPALCLAIMYesClaim used as the user's name.
PROVIDERS_<ID>_ROLECLAIMSNoClaims that hold the user's roles. The roles of all listed claims are combined.
PROVIDERS_<ID>_ALLOWEDROLESNoRoles that may call the API. Defaults to CONFIG_REST_SECURITY_DEFAULT_ALLOWEDROLES. A token with none of them is rejected, and the backend logs Access denied for issuer.
PROVIDERS_<ID>_ALIASESNoOther accepted iss values, such as Microsoft Entra ID tenant aliases.

API-key authentication​

With API-key authentication, callers can send a DIAL Core API key in the Api-Key header instead of a JWT. The backend checks the key with DIAL Core's GET /v1/user/info. eval-cli and Application mode need it. It works only in oidc mode.

VariableDefaultDescription
API_KEY_ENABLEDfalseAccept the Api-Key header.
API_KEY_CORE_URL—DIAL Core URL used to check keys. Required when enabled.
API_KEY_KEY_ROLES_MAPPING—JSON object that maps the roles of Core project keys to lists of backend authorities.
API_KEY_JWT_ROLES_MAPPING—JSON object that maps the roles in a per-request key's user claims to lists of backend authorities. At least one of the two mappings must be set.
API_KEY_USER_CLAIMS_ROLE_CLAIMrolesClaim read for roles from a per-request key's user claims, when its issuer matches no identity provider. Otherwise that provider's ROLECLAIMS are used.
API_KEY_CACHE_TTL_SECONDS60How long a checked key is cached.
API_KEY_CACHE_MAX_SIZE10000Maximum cached keys.
API_KEY_REQUEST_TIMEOUT_MS3000Timeout of the call to Core.
API_KEY_STARTUP_PROBEtrueCall Core at startup and fail if it can't be reached.

The two mapping variables were renamed in 0.5.0, without fallback; see Framework Backend 0.5.0.

Application mode​

By default, a run calls the target with the token of the user who started it, so a run that outlasts the token fails. In Application mode, DIAL Core starts the run through an application route and gives it a per-request key instead. The backend's files are then shared with the evaluated deployments through Core.

VariableDefaultDescription
DIAL_APP_PROXY_ENABLEDfalseRun test suites through a DIAL Core application route. Requires API_KEY_ENABLED=true; the backend doesn't start otherwise.
DIAL_APP_PROXY_DEPLOYMENT_NAMEEFName of the application in Core's configuration.
DIAL_APP_PROXY_HEARTBEAT_INTERVAL_MS30000Heartbeat that keeps the connection from Core open.
DIAL_APP_PROXY_TRIGGER_READ_TIMEOUT_MS43200000Timeout of the call that starts a run through Core: 12 hours.

Also raise TEST_SUITE_RUN_SSE_TIMEOUT_MINUTES, such as to 720, so that the status stream outlasts long runs. Register the application in DIAL Core with a route to the backend's run endpoint; this is the form in the upstream configuration guide:

{
"applications": {
"EF": {
"displayName": "Evaluation Framework",
"routes": {
"run_execute": {
"paths": ["/api/internal/runs/[^/]+/execute$"],
"methods": ["POST"],
"rewritePath": true,
"upstreams": [{"endpoint": "http://<EVALUATION_BACKEND_HOST>:8080"}],
"attachmentPaths": {
"requestBody": []
}
}
}
}
}
}
  • The application name must match DIAL_APP_PROXY_DEPLOYMENT_NAME. The 0.5.0 release notes give a fuller version of this entry.
  • The application needs access to the backend's file bucket (DIAL_FILE_STORAGE_BUCKET_ALIAS), so that Core can share test case files with the evaluated deployments.
  • Keep /api/internal/ off the public ingress. The endpoint is authenticated, but only Core needs it.

See Application routes for the route fields.

Databases​

The backend uses two PostgreSQL datasources: meta for datasets, test suites, runs, and metric declarations, and analytics for results and scores. They can be two databases on one server, as in the advanced sample, or two schemas of one database; they can't share a database and schema. The backend applies its Flyway migrations to both at startup, so its database user needs DDL privileges.

VariableDefaultDescription
POSTGRES_META_DATASOURCE_URLjdbc:postgresql://localhost:5432/evaluation_dbJDBC URL of the meta database, without query parameters.
POSTGRES_META_DATASOURCE_USERNAMEpostgresDatabase user.
POSTGRES_META_DATASOURCE_PASSWORDpostgresDatabase password. Override it outside local development.
POSTGRES_META_DATASOURCE_SCHEMApublicSchema of the meta tables.
POSTGRES_META_DATASOURCE_CONNECTION_PARAMS—JDBC query parameters, such as sslmode=require.
POSTGRES_ANALYTICS_DATASOURCE_URLjdbc:postgresql://localhost:5432/evaluation_analytics_dbJDBC URL of the analytics database.
POSTGRES_ANALYTICS_DATASOURCE_USERNAMEpostgresDatabase user.
POSTGRES_ANALYTICS_DATASOURCE_PASSWORDpostgresDatabase password. Override it outside local development.
POSTGRES_ANALYTICS_DATASOURCE_SCHEMApublicSchema of the analytics tables.
POSTGRES_ANALYTICS_DATASOURCE_CONNECTION_PARAMSreWriteBatchedInserts=trueJDBC query parameters.
DATASOURCE_META_AUTH_TYPEbasicbasic uses the user and password. azure uses Microsoft Entra ID tokens for Azure Database for PostgreSQL.
DATASOURCE_ANALYTICS_AUTH_TYPEbasicThe same for the analytics database.
AUTH_AZURE_TYPEnoneSet managed with azure authentication, to use the pod's managed identity. The database user must then be that identity.

DIAL Core​

VariableDefaultDescription
DIAL_CORE_URLhttp://localhost:8085DIAL Core base URL.
DIAL_EF_API_KEY—Required. The backend's Core API key, used for test case files in Core's storage. Calls for deployments, Try Out, runs, and MCP tools use the caller's token.
DIAL_CORE_CONNECT_TIMEOUT_MS5000Connection timeout.
DIAL_CORE_READ_TIMEOUT_MS30000Read timeout of metadata calls, such as the deployment list.
DIAL_CORE_RETRY_MAX_ATTEMPTS3Attempts for failed metadata calls.
DIAL_CORE_RETRY_DELAY_MS1000First retry delay.
DIAL_CORE_RETRY_MULTIPLIER2.0Backoff multiplier.
DIAL_CORE_TRY_OUT_READ_TIMEOUT_MS3600000Read timeout of Try Out calls.
DIAL_MCP_CONNECT_TIMEOUT_MS5000Connection timeout of MCP tool calls through Core.
DIAL_MCP_READ_TIMEOUT_MS120000Read timeout of MCP tool calls.

Files​

Test cases with File fields keep their files in DIAL Core's storage.

VariableDefaultDescription
DIAL_FILE_STORAGE_BUCKET_ALIAS@efAlias used in file references, such as @ef/datasets/<DATASET_ID>/<FILE>. The real bucket is found at runtime.
DIAL_FILE_STORAGE_MAX_FILE_SIZE_BYTES52428800Largest file, 50 MB. Uploads are also limited by SPRING_SERVLET_MULTIPART_MAX_FILE_SIZE (50MB) and SPRING_SERVLET_MULTIPART_MAX_REQUEST_SIZE (55MB).
DIAL_FILE_STORAGE_MAX_FILES_PER_SUITE100Files per test suite.
DIAL_FILE_STORAGE_MAX_FILES_PER_DATASET100Files per dataset.
DIAL_FILE_STORAGE_CONNECT_TIMEOUT_MS5000Connection timeout.
DIAL_FILE_STORAGE_READ_TIMEOUT_MS30000Read timeout.

Run costs​

The run cost figures come from the Analytics data-access service, which the backend queries with the caller's token. In 0.5.0 the backend calls its POST /v1/queries/execute-sql endpoint.

VariableDefaultDescription
DIAL_ADAS_URLhttp://localhost:8087Base URL of the Analytics data-access service.
DIAL_ADAS_CONNECT_TIMEOUT_MS5000Connection timeout.
DIAL_ADAS_READ_TIMEOUT_MS30000Read timeout.
QUERY_DSL_EXTENSION_TEST_SUITE_RUN_COST_ENABLEDfalseAdd each run's total cost to run query results.
QUERY_DSL_EXTENSION_TEST_SUITE_RUN_COST_TIMEOUT_SEC2Deadline of that cost lookup.

Metric providers​

A metric provider is a service with GET /metrics and POST /evaluate, such as Evaluation Metrics. A sync job reads each enabled provider's catalog; during a run, the backend sends each metric to the provider it came from.

VariableDefaultDescription
METRIC_PROVIDERS_SYNC_ENABLEDfalseRun the sync job. Set true; otherwise no provider's metrics are loaded.
METRIC_PROVIDERS_SYNC_CRON-Spring cron expression with seconds, such as 0 */5 * * * * for every five minutes. With -, the job runs once at startup.
METRIC_PROVIDERS_SYNC_FIXED_DELAY_MS0Delay between syncs, used only when the cron is -.
METRIC_PROVIDERS_DIAL_ENABLEDtrueSync the built-in dial provider.
METRIC_PROVIDERS_DIAL_BASE_URLhttp://localhost:8086Base URL of the dial provider: the Evaluation Metrics service, such as http://evaluation-metrics:5000.
METRIC_PROVIDERS_EXTRA_ENABLEDfalseSync the built-in second provider, extra.
METRIC_PROVIDERS_EXTRA_BASE_URLhttp://localhost:8087Base URL of the extra provider. Set it before enabling the provider.
METRIC_PROVIDERS_<ID>_CONNECT_TIMEOUT_MS5000Connection timeout of a provider.
METRIC_PROVIDERS_<ID>_READ_TIMEOUT_MS150000Read timeout of a provider. A provider defined only through environment variables defaults to 30000.

To add a third provider, set both METRIC_PROVIDERS_<ID>_BASE_URL and METRIC_PROVIDERS_<ID>_ENABLED; a provider without ENABLED stops startup. A disabled provider is skipped by the sync job only: its metrics already loaded still run.

Metric evaluation​

VariableDefaultDescription
METRIC_EVALUATION_DEFAULT_CONCURRENCY_PER_PROVIDER5Evaluations sent to one provider at a time.
METRIC_EVAL_PER_RESULT_TIMEOUT_MS150000Time allowed for all metrics of one result. Metrics still running are marked failed.
METRIC_EVALUATION_BATCH_SIZE100Scores buffered before they are written.
METRIC_EVALUATION_RETRY_MAX_RETRIES0Retries of a failed evaluation call.
METRIC_EVALUATION_RETRY_RETRY_DELAY_MS1000First retry delay.
METRIC_EVALUATION_RETRY_RETRY_BACKOFF_MULTIPLIER2.0Backoff multiplier, at least 1.0.
METRIC_EVALUATION_RETRY_MAX_RETRY_DELAY_MS60000Longest retry delay.

Test suite runs​

VariableDefaultDescription
TEST_SUITE_RUN_LIMITS_MAX_CONCURRENT_RUNS_GLOBAL20Runs executing at once across all test suites.
TEST_SUITE_RUN_LIMITS_MAX_CONCURRENT_RUNS_PER_SUITE5Runs executing at once for one test suite.
TEST_SUITE_RUN_RUN_CONFIG_MAX_NUMBER_OF_RUNS64Largest Number of runs per test case.
TEST_SUITE_RUN_EXECUTION_DEFAULT_CONCURRENCY_LEVEL1Test cases executed in parallel in a run, by default.
TEST_SUITE_RUN_EXECUTION_MAX_CONCURRENCY_LEVEL50Upper bound of that parallelism.
TEST_SUITE_RUN_EXEC_DEFAULT_TIMEOUT600000Default timeout of a request to the target, in milliseconds.
TEST_SUITE_RUN_EXEC_MAX_TIMEOUT1200000Upper bound of that timeout.
TEST_SUITE_RUN_EXECUTION_MAX_RESPONSE_SIZE_BYTES5242880Largest stored response, 5 MB; longer responses are cut.
TEST_SUITE_RUN_EXECUTION_RESULT_BATCH_SIZE100Results buffered before they are written.
TEST_SUITE_RUN_EXECUTION_HEADER_BLACKLISTAuthorization, Host, Content-Length, Transfer-Encoding, Connection, traceparent, tracestateHeaders removed from test requests before they are sent.
TEST_SUITE_RUN_RETRY_DEFAULT_MAX_RETRIES0Default retries of a failed request; at most TEST_SUITE_RUN_RETRY_MAX_MAX_RETRIES (10).
TEST_SUITE_RUN_RETRY_DEFAULT_RETRY_DELAY_MS1000Default first retry delay; at most TEST_SUITE_RUN_RETRY_MAX_RETRY_DELAY_MS (60000).
TEST_SUITE_RUN_RETRY_DEFAULT_RETRY_BACKOFF_MULTIPLIER2.0Default backoff multiplier; at most TEST_SUITE_RUN_RETRY_MAX_RETRY_BACKOFF_MULTIPLIER (10.0).
TEST_SUITE_RUN_SSE_TIMEOUT_MINUTES30Timeout of the run status stream that DIAL Admin listens to.
TEST_SUITE_RUN_SSE_CLEANUP_INTERVAL_MS300000Heartbeat interval of status streams.
TEST_SUITE_RUN_RUN_INPUTS_RETENTION_DAYS1Days a finished run's inputs are kept.
SSE_EVENT_PROCESSING_MAX_TOTAL_DURATION_MS3600000Longest time spent reading one streamed response.
JSONATA_EVALUATION_TIMEOUT_MS10000Longest evaluation of one JSONata expression in a request template, response column, or condition.
JSONATA_MAX_RECURSION_DEPTH1000Deepest recursion of one JSONata expression.

Datasets and imports​

VariableDefaultDescription
TEST_CASE_MULTI_TURN_MAX_TURNS10Most turns in a multi-turn test case. Longer test cases are saved but marked invalid, and runs skip them.
CSV_IMPORT_MAX_FILE_SIZE10MBLargest CSV import.
CSV_IMPORT_MAX_ROWS100000Most rows in one import.
CSV_IMPORT_BATCH_SIZE1000Rows written per batch.
CSV_IMPORT_ZIP_MAX_ENTRIES1000Most entries in a ZIP import.
CSV_IMPORT_ZIP_MAX_TOTAL_UNCOMPRESSED_SIZE1GBLargest expanded size of a ZIP import.
CSV_IMPORT_ZIP_MAX_MANIFEST_SIZE1MBLargest manifest.json in a ZIP import.
CSV_EXPORT_PAGE_SIZE500Rows read per page while exporting CSV.
ANALYTICS_RESULTS_CSV_IMPORT_MAX_FILE_SIZE10MBLargest CSV of run results to import, as eval-cli does.
VALIDATION_MAX_TEMPLATE_SIZE_BYTES65536Largest request template.
VALIDATION_MAX_BINDINGS_COUNT64Most input bindings.
VALIDATION_MAX_WARNINGS_PER_CASE5Validation warnings stored per test case.
VALIDATION_REVALIDATION_BATCH_SIZE500Test cases revalidated per batch after a schema change.
VALIDATION_REVALIDATION_TIMEOUT_MINUTES5Longest revalidation task.

API limits​

VariableDefaultDescription
PAGINATION_DEFAULT_SIZE100Page size when a list request sets none.
PAGINATION_MAX_SIZE1000Largest page size.
TEST_CASE_BATCH_MAX_ITEMS256Items in one batch update of test cases.
TEST_CASE_BULK_MAX_OPERATIONS512Operations in one bulk update.
TEST_CASE_BULK_MAX_ITEM_OPERATIONS500Per-row operations in one bulk update.
TEST_CASE_BULK_MAX_IDS_PER_SELECTOR10000IDs one bulk operation selects.
TEST_CASE_BULK_MAX_DELETE_IDS10000IDs in one bulk delete.
ANALYTICS_RESULTS_BATCH_MAX_ITEMS10000Results in one batch write; the body is limited by ANALYTICS_RESULTS_BATCH_MAX_REQUEST_SIZE_BYTES (10485760).
ANALYTICS_EVAL_SUMMARIES_BATCH_MAX_ITEMS10000Scores in one batch write; the body is limited by ANALYTICS_EVAL_SUMMARIES_BATCH_MAX_REQUEST_SIZE_BYTES (10485760).
ANALYTICS_COMPARISON_MAX_UNMATCHED_ROWS5000Rows of one run that a run comparison may leave unmatched. Above it, the comparison fails with 409.

Inbound MCP server​

The backend can serve an MCP endpoint, so that an agent can set up evaluations. In 0.5.0 it has the list_deployments and get_deployment tools. It is authenticated like the REST API.

VariableDefaultDescription
SPRING_AI_MCP_SERVER_ENABLEDfalseServe the MCP endpoint. When off, the endpoint answers 404.
SPRING_AI_MCP_SERVER_PROTOCOLSTATELESSSTATELESS answers each request with one JSON response. STREAMABLE keeps sessions in memory, so it needs one replica or sticky sessions.
SPRING_AI_MCP_SERVER_STREAMABLE_HTTP_MCP_ENDPOINT/mcpPath of the endpoint.

The other SPRING_AI_MCP_SERVER_* variables are listed in the upstream configuration guide.

Telemetry and logs​

VariableDefaultDescription
OTEL_SDK_DISABLEDtrueOpenTelemetry is off. Set false to export traces, metrics, and logs, with the service name ai-dial-evaluation-framework.
OTEL_EXPORTER_OTLP_ENDPOINThttp://localhost:4318OTLP collector endpoint.
OTEL_EXPORTER_OTLP_PROTOCOLhttp/protobufOTLP protocol; grpc also works.
OTEL_TRACES_EXPORTER, OTEL_METRICS_EXPORTER, OTEL_LOGS_EXPORTERotlpExporter of each signal.
GRAFANA_BASE_URL—Grafana URL for trace links. When unset, runs and Try Out have no trace links, and DIAL Admin hides Traces in Grafana.
GRAFANA_TEMPO_DATASOURCE_UIDtempoUID of the Tempo data source in Grafana.
GRAFANA_ORG_ID1Grafana organization in the links.
LOGGING_LEVEL_ROOTINFORoot log level.
LOGGING_LEVEL_COM_EPAM_AIDIALINFOLog level of the backend's own code.
LOGGING_REQUEST_RESPONSE_ENABLEDfalseLog every HTTP request and response with its body.
LOGGER_CONFIGURATION_PATH/app/log-config/logging.levels.jsonFile of log levels that the backend re-reads at runtime.
LOGGER_CONFIGURATION_INTERVAL30Seconds between reads of that file.

Prometheus metrics are at /actuator/prometheus on port 9464. For the collector and scrape setup of the platform, see Tracing and Metrics.

Container​

VariableDescription
JAVA_OPTSJVM options passed to java.
DEBUG_OPTSFurther JVM options, such as a debug agent.
USE_SYSTEM_CA_CERTSAny value imports the certificates mounted in /certificates/ at startup.

Further reading​