170 lines
8.0 KiB
Markdown
170 lines
8.0 KiB
Markdown
# Configuration Reference
|
|
|
|
This is the canonical reference for Scriptorium application settings and the
|
|
prompt, profile, and schema files those settings select. For command syntax,
|
|
see the [CLI reference](cli.md); for HTTP request shapes, limits, and outcomes,
|
|
see the [HTTP API reference](api.md).
|
|
|
|
## Discovery And Precedence
|
|
|
|
Application settings are resolved in this order:
|
|
|
|
1. built-in defaults;
|
|
2. a configuration file; then
|
|
3. CLI overrides.
|
|
|
|
When `--config` is omitted, Scriptorium searches
|
|
`/usr/local/etc/scriptorium/config.yml` and then `/etc/scriptorium/config.yml`.
|
|
If neither exists, it uses built-in defaults. An explicit `--config` path must
|
|
exist and decode successfully.
|
|
|
|
The maintained [minimal configuration](../examples/config.yml) and
|
|
[full configuration](../examples/config.full.yml) are copyable examples.
|
|
|
|
## Application Configuration File
|
|
|
|
Configuration is strict YAML: unknown fields are rejected. Empty string values
|
|
do not override a prior value. Raw API-key fields are not accepted.
|
|
|
|
| Field | Default | Meaning |
|
|
| --- | --- | --- |
|
|
| `prompt_dir` | unset | Directory containing prompt-definition YAML. `run`, `render`, and `serve` require an effective value. |
|
|
| `profile_dir` | unset | Directory containing custom profile YAML. Built-in profiles remain available. |
|
|
| `schema_dir` | `.` | Base directory for relative JSON Schema paths. |
|
|
| `server.addr` | `:8080` | Address used by `serve`. |
|
|
| `server.artifact_root` | unset | Root that enables HTTP `file` input references. |
|
|
| `server.max_request_bytes` | `16777216` | Maximum encoded HTTP request body bytes; `0` disables the limit. |
|
|
| `server.max_artifact_bytes` | `16777216` | Maximum HTTP file-input artifact bytes; `0` disables the limit. |
|
|
| `server.max_response_bytes` | `16777216` | Maximum encoded HTTP response bytes; `0` disables the limit. |
|
|
| `defaults.render_format` | `text` | Default `render` output format: `text` or `json`. |
|
|
|
|
The three size fields must be zero or greater. The HTTP contract defines how
|
|
each limit is enforced and reported. `server.artifact_root` configures the
|
|
deployment boundary; see the [HTTP API reference](api.md) for request-path and
|
|
containment behavior, and [operations](operations.md) for deployment handling.
|
|
|
|
## Prompt Definition Files
|
|
|
|
Prompt definitions are strict YAML files anywhere below `prompt_dir`. A prompt
|
|
is selected by its YAML `id`, not by file path; nested directories are only for
|
|
organization. See [maintained prompt examples](../examples/prompts/).
|
|
|
|
| Field | Required | Meaning |
|
|
| --- | --- | --- |
|
|
| `id` | yes | Prompt identifier. |
|
|
| `version` | yes | Prompt version. |
|
|
| `default_profile` | no | Profile used when a request omits a profile ID. |
|
|
| `description` | no | Human-readable description. |
|
|
| `session_id` | no | Go-template string rendered from request variables and sent to a compatible provider when non-empty. |
|
|
| `inputs` | no | Declared input metadata. |
|
|
| `messages` | yes | Chat-message templates. |
|
|
| `output` | yes | Output format and validation contract. |
|
|
|
|
### Inputs And Messages
|
|
|
|
Each `inputs` item has a required `name` and optional `required`,
|
|
`content_type`, and `description` fields. Input names must be unique.
|
|
|
|
Each message has a required `role`, exactly one of `content` or `content_file`,
|
|
and optional `cache_control`. A `content_file` path is relative to the prompt
|
|
file. `cache_control.type` must be `ephemeral`; its optional `ttl` is `1h`.
|
|
|
|
`session_id` uses the same template variables as messages. Empty rendered
|
|
values are omitted. A rendered value may contain at most 256 Unicode code
|
|
points.
|
|
|
|
### Output Contract
|
|
|
|
| Field | Required | Values or behavior |
|
|
| --- | --- | --- |
|
|
| `format` | yes | `text`, `markdown`, or `json`. |
|
|
| `validation_mode` | yes | `none`, `basic`, `json`, or `json_schema`. |
|
|
| `schema_path` | for `json_schema` | Schema path, relative to `schema_dir` unless absolute. |
|
|
| `repair_attempts` | no | Integer greater than or equal to `0`; omitted means `0`. |
|
|
|
|
## Profile Definition Files
|
|
|
|
Profiles are strict YAML files anywhere below `profile_dir`. A profile is
|
|
selected by YAML `id`; nested directories are organizational. See the
|
|
[maintained profile examples](../examples/profiles/).
|
|
|
|
| Field | Required | Meaning |
|
|
| --- | --- | --- |
|
|
| `id` | yes | Profile identifier. |
|
|
| `endpoint` | yes | OpenAI-compatible base URL, including its API version path when needed. |
|
|
| `model` | yes | Provider model name. |
|
|
| `temperature` | no | Number from `0` through `2`. |
|
|
| `max_tokens` | no | Integer zero or greater. |
|
|
| `top_p` | no | Number from `0` through `1`. |
|
|
| `timeout_seconds` | no | Integer zero or greater. |
|
|
| `service_tier` | no | Non-empty provider-specific request tier. |
|
|
| `reasoning_effort` | no | Non-empty provider-specific reasoning setting. |
|
|
| `api_key_env` | no | Environment-variable name containing the API key. |
|
|
| `extra_params` | no | JSON-compatible provider-specific outbound request fields. |
|
|
|
|
Execution defaults before profile and request overrides are `temperature: 0`,
|
|
`max_tokens: 0`, `top_p: 1`, and `timeout_seconds: 600`. Profile numeric values
|
|
merge by non-zero value. Request overrides preserve presence, so an explicit
|
|
zero can override a profile value.
|
|
|
|
Custom profiles take precedence over built-ins with the same ID. Invalid custom
|
|
profiles are errors; they do not fall back to a built-in profile. Raw `api_key`
|
|
is rejected. Use `api_key_env`, or the public Go package's request-scoped key
|
|
mechanism described in the [package contract](consumers/pkg-scriptorium.md).
|
|
|
|
`extra_params` keys must be non-empty and cannot be `model`, `session_id`,
|
|
`messages`, `temperature`, `max_tokens`, `top_p`, `service_tier`,
|
|
`reasoning_effort`, or `response_format`.
|
|
|
|
### Built-In Profile Catalog
|
|
|
|
Each embedded profile uses `OPENROUTER_API_KEY`.
|
|
|
|
| Provider | ID | Model |
|
|
| --- | --- | --- |
|
|
| aion-labs | `aion-2` | `aion-labs/aion-2.0` |
|
|
| anthropic | `claude-fable-latest` | `~anthropic/claude-fable-latest` |
|
|
| anthropic | `claude-haiku-latest` | `~anthropic/claude-haiku-latest` |
|
|
| anthropic | `claude-opus-latest` | `~anthropic/claude-opus-latest` |
|
|
| anthropic | `claude-sonnet-latest` | `~anthropic/claude-sonnet-latest` |
|
|
| deepseek | `deepseek-3-2` | `deepseek/deepseek-v3.2` |
|
|
| deepseek | `deepseek-4-flash` | `deepseek/deepseek-v4-flash` |
|
|
| deepseek | `deepseek-4-pro` | `deepseek/deepseek-v4-pro` |
|
|
| google | `gemini-2-flash` | `google/gemini-2.5-flash` |
|
|
| google | `gemini-2-flash-lite` | `google/gemini-2.5-flash-lite` |
|
|
| google | `gemini-2-pro` | `google/gemini-2.5-pro` |
|
|
| google | `gemini-3-flash-lite` | `google/gemini-3.1-flash-lite` |
|
|
| google | `gemini-flash-latest` | `~google/gemini-flash-latest` |
|
|
| google | `gemini-pro-latest` | `~google/gemini-pro-latest` |
|
|
| google | `gemma-4-31b` | `google/gemma-4-31b-it:exacto` |
|
|
| minimax | `minimax-m2` | `minimax/minimax-m2.5` |
|
|
| minimax | `minimax-m3` | `minimax/minimax-m3` |
|
|
| mistral | `mistral-large-2512` | `mistralai/mistral-large-2512` |
|
|
| mistral | `mistral-medium-3-5` | `mistralai/mistral-medium-3-5` |
|
|
| mistral | `mistral-small-3` | `mistralai/mistral-small-3.2-24b-instruct` |
|
|
| mistral | `mistral-small-4` | `mistralai/mistral-small-2603` |
|
|
| nvidia | `nemotron-3-ultra` | `nvidia/nemotron-3-ultra-550b-a55b` |
|
|
| openai | `gpt-5-mini` | `openai/gpt-5.4-mini` |
|
|
| openai | `gpt-5-nano` | `openai/gpt-5.4-nano` |
|
|
|
|
## Schemas
|
|
|
|
Schemas are JSON files, normally below `schema_dir`. `json_schema` output
|
|
requires a `schema_path`. Relative paths resolve from `schema_dir`; absolute
|
|
paths are used directly. Referenced nested schemas use relative paths and are
|
|
not discovered by basename. An unreadable or invalid schema is a runtime
|
|
validation error; generated content that fails JSON or schema validation is a
|
|
validation result.
|
|
|
|
## Credentials
|
|
|
|
Keep secrets in environment variables. Store only an environment-variable name
|
|
in `api_key_env`; do not place raw keys in configuration, prompt or profile
|
|
files, CLI arguments, examples, or HTTP payloads.
|
|
|
|
## Related References
|
|
|
|
- [CLI reference](cli.md)
|
|
- [HTTP API reference](api.md)
|
|
- [OpenAI-compatible outbound contract](integrations/openai-compatible-chat.md)
|