9.8 KiB
Weatherreporter Configuration
Weatherreporter reads YAML configuration. The default path is:
/usr/local/etc/weatherreporter/config.yml
If the default file is absent, Weatherreporter uses built-in defaults. An
explicit --config PATH must exist. Values are applied in this order:
- built-in defaults;
- the configuration file, when present; and
- the
--unitsand--tzcommand-line overrides.
Environment variables do not override configuration fields. Output flags select operator-owned destinations for one command and do not change configuration.
Maintained Examples
- minimal-config.yml is the smallest useful collection and generation configuration.
- config.yml is a representative production-oriented configuration using synthetic endpoints and no credentials.
- weather-light-local-profile.yml
is a complete endpoint-only override for the embedded
weather-lightprofile.
The configuration examples are loaded by the configuration test suite. The profile example is inspected through the Promptkit adapter test suite.
Minimal Configuration
weather_api:
base_url: https://weather.api.example.com/
weather_api.base_url is required for workflows that collect weather data.
All omitted fields use their built-in defaults.
Field Reference
weather_api
| Field | Default | Rules |
|---|---|---|
base_url |
empty | Absolute Weather API URL. Required for collection and generation. |
timeout |
10s |
Must be greater than zero. |
precision |
0 |
Must be zero or greater. Sent as the Weather API precision query value. |
units |
us |
Required Weather API units query value; --units overrides it for one command. |
timezone |
America/Chicago |
Required report and Weather API timezone; --tz overrides it for one command. |
format |
json |
Required and must be json. |
Timezone values may be IANA names, configured aliases such as Chicago and
Stl, US timezone abbreviations, or UTC offsets such as -5 and +09:30.
location
location supplies descriptive prompt context; it does not choose a Weather
API endpoint or configure multiple forecast locations.
| Field | Default |
|---|---|
id |
home |
name |
Brentwood |
region |
St. Louis Metro |
The prompt-facing location timezone is derived from the effective
weather_api.timezone after command-line overrides.
secrets
secrets.directory defaults to empty, which disables secret loading. When it
is set, every regular file directly in that directory is loaded after the file
and command-line overrides. A file basename must match
[A-Za-z_][A-Za-z0-9_]*; it becomes an environment variable name, and the
file contents replace any existing value. One trailing LF or CRLF is removed.
Missing directories, unreadable files, subdirectories, symlinks, non-regular files, and invalid names fail configuration loading. Put only secret values in this directory, never in the YAML file.
notify.distributor
Distributor notification is disabled by default. Its fields are:
| Field | Default | Rules when notification is enabled |
|---|---|---|
enabled |
false |
Activates Distributor notification validation. |
endpoint |
https://distributor.example.com |
Must be an absolute URL. |
token_env |
DISTRIBUTOR_UPLOAD_TOKEN |
Must name a valid environment variable. |
timeout |
30s |
Must be greater than zero. |
failure_policy |
error |
Must be error. |
pipeline_id_template |
empty | Required single-report pipeline ID template. |
bundle_id_template |
weatherreporter.{location_id}.{report_id} |
Required single-report bundle ID template. |
idempotency_key_template |
{bundle_id}.{run_id} |
Required single-report idempotency-key template. |
batch.enabled |
true |
Activates batch notification validation when Distributor notification is enabled. |
batch.pipeline_id_template |
weatherreporter |
Required when batch notification is enabled. |
batch.bundle_id_template |
weatherreporter.{location_id}.{batch} |
Required when batch notification is enabled. |
batch.idempotency_key_template |
{bundle_id}.{batch_run_id} |
Required when batch notification is enabled. |
The upload token is read from the environment variable named by token_env.
Use secrets.directory when a file-backed secret is appropriate.
Single-report bundle templates accept location_id, report_id, run_id,
artifact_group, batch_output_name, valid_start_date, valid_end_date,
valid_start_time, valid_end_time, valid_start_stamp, valid_end_stamp,
Pipeline and idempotency-key templates may also use bundle_id. Dates use
YYYY-MM-DD; times use HHMM; and stamps use YYYY-MM-DDTHHMM in the
effective report timezone.
Batch bundle and pipeline templates accept location_id, batch,
batch_run_id, and batch_started_date; batch idempotency-key templates may
also use bundle_id. batch_started_date is the batch start date in the
effective report timezone.
reports.<report>.distributor.path_templates overrides the default ordered
Distributor paths for that report. Each rendered path must be a unique relative
path with / separators. Backslashes, empty segments, . and .. segments,
manifest.json, and the reserved Distributor sidecar basename are rejected.
The default paths are:
| Report | Paths |
|---|---|
hourly |
hourly/index.md |
daily |
daily/{valid_start_date}/{run_id}.md, daily/{valid_start_date}/index.md |
today |
daily/{valid_start_date}/{run_id}.md, daily/{valid_start_date}/index.md, today/index.md |
tomorrow |
daily/{valid_start_date}/{run_id}.md, daily/{valid_start_date}/index.md, tomorrow/index.md |
See the operations guide for notification timing, uploaded output selection, and failure handling.
missing_source
missing_source.default defaults to warn and accepts error, warn, or
none. missing_source.sources optionally overrides that policy by source.
Hourly forecast data is required for generated reports. Supported optional
source keys are observations, current, narrative, alerts, discussion,
weather_story, and spc_convective_outlooks.
promptkit
Promptkit configuration selects the executor and prompt/profile checks for
every generate and run command. A top-level scriptorium: configuration
key is rejected with a migration error; it is not translated or ignored.
Prompt debug capture has no YAML setting. Use --llm-debug-dir PATH on an
individual generate or run command when explicitly needed.
| Field | Default | Rules |
|---|---|---|
profile |
empty | Optional global profile selection for every report in one command. When empty, each exact prompt version selects its declared default. |
profile_file |
empty | Optional external Promptkit profile file. It cannot be combined with profile_dir. A same-ID profile completely replaces Weatherreporter's embedded definition. |
profile_dir |
empty | Optional external Promptkit profile directory. It cannot be combined with profile_file. A same-ID profile completely replaces Weatherreporter's embedded definition. |
timeout |
2m |
Must be greater than zero. |
local.endpoint |
empty | Optional absolute URL for the conventional local backend. A blank endpoint leaves it unregistered. |
local.concurrency_limit |
1 |
Maximum local backend concurrency. 0 is unlimited; negative values are invalid. |
profile selects an ID; profile_file and profile_dir supply definitions.
They are separate decisions. An explicit profile applies to every selected
report. Otherwise Hourly selects weather-light, while Daily, Today, and
Tomorrow select weather-balanced through their exact 2.0.0 prompt
definitions.
Promptkit resolves a selected profile definition from a test or embedding
consumer's explicit in-memory profile, then the configured profile_file or
profile_dir, then Weatherreporter's embedded catalog, and finally Promptkit's
built-in catalog. Sources provide complete definitions; fields are never
merged. A matching malformed external profile fails rather than using the
embedded definition. The Promptkit integration guide
owns the catalog and precedence details.
To replace the default Hourly definition with a local OpenAI-compatible
endpoint, set profile_file to a copy of
weather-light-local-profile.yml.
The example has no credential and should be edited for the local endpoint and
model before use. An alternative profile may use backend: local; in that
case promptkit.local.endpoint supplies the conventional local backend
endpoint.
dayparts
dayparts is a non-empty list of named local-time windows used in forecast
derivation. Every item needs name, start, and end; start and end use
HH:MM. Defaults are overnight (00:00–06:00), morning
(06:00–10:00), midday (10:00–15:00), afternoon
(15:00–17:00), and evening (17:00–24:00).
reports
reports optionally overrides a report's ordered deterministic modules and
Distributor path templates. Omit a report entry to retain its defaults.
Supported report keys are daily, today, tomorrow, and hourly; hyphens
and underscores are equivalent.
Each report entry can contain:
deterministic_modules: an ordered list of module IDs, or objects withidand optionaloptions.distributor.path_templates: an optional, non-empty ordered list of Distributor paths for that report.
Unknown reports and modules, duplicate modules, incompatible report-module combinations, duplicate stanza names, invalid path templates, and invalid module options fail configuration loading. The accepted module IDs and module option contracts are documented in the module contract internals.