Skip to main content

Config loading

These static settings tell DIAL Core where its config files are, how often to re-read them, how to merge several files, and what to do with an entity that fails validation. They apply to the dynamic configuration from files and from the platform bucket. This page is for platform engineers who manage Core's configuration; it assumes you know how DIAL Core is configured.

Settings​

SettingDefaultDescription
config.files[]The JSON config files to load, in order. Core deep-merges them; a later file overrides keys from an earlier one. A path not found on disk is read from the classpath.
config.reload60000How often Core re-reads the config files and rebuilds the merged configuration, in milliseconds.
config.jsonMergeStrategy.overwriteArraysfalseHow arrays merge across files. false concatenates them; true lets a later file's array replace an earlier one.
config.onInvalidEntityabortWhat a semantic violation does to a rebuild, such as a duplicate deployment ID. abort fails the rebuild and keeps the previous configuration; at startup, Core does not start. skip drops the offending entity alone and records it as invalid.
config.write.softValidationfalseWhen true, a model written through the Configuration API whose only problem is a reference to a missing interceptor is accepted. Other rule violations are still rejected.

How the settings work together​

  • A broken file on reload. If a periodic re-read fails to open, parse, or validate a file, Core keeps the last good configuration and logs a warning, whatever config.onInvalidEntity says.
  • A broken blob. A blob in the platform bucket that cannot be parsed or decrypted is always skipped and recorded.
  • A missing interceptor. A model that references an interceptor that does not exist is checked on every Configuration API write. On a rebuild, it is checked only under skip, which drops the model. Under abort, the model stays a deployment, and requests to it answer 404 Interceptor is not found.
  • Keys with slashes. Under models, interceptors, roles, keys, and routes, a file key shaped like a canonical ID (models/platform/gpt) fails the file load. Any other file key containing / in an entity map is dropped with a warning.

Recorded invalid entities are listed by GET /v1/admin/health/config; see Configuration API.

Example​

{
"config": {
"files": ["/opt/config/models.json", "/opt/config/access.json"],
"reload": 60000,
"jsonMergeStrategy": { "overwriteArrays": false },
"onInvalidEntity": "skip",
"write": { "softValidation": false }
}
}

As an environment variable, pass the array as a JSON string: aidial.config.files: '["/opt/config/config.json"]'.

Further reading​