Add documentation for prompt, profile, schema, and main configuration files
This commit is contained in:
48
docs/config/config-yml.md
Normal file
48
docs/config/config-yml.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# Main `config.yml`
|
||||||
|
|
||||||
|
`config.yml` defines application-level defaults used by CLI commands.
|
||||||
|
|
||||||
|
By default, Scriptorium looks for `/etc/scriptorium/config.yml`. You can also pass `--config PATH`.
|
||||||
|
|
||||||
|
## Complete Example
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
prompt_dir: ./prompts
|
||||||
|
profile_dir: ./profiles
|
||||||
|
schema_dir: ./schemas
|
||||||
|
|
||||||
|
server:
|
||||||
|
addr: :8080
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
render_format: text
|
||||||
|
```
|
||||||
|
|
||||||
|
## Available Options
|
||||||
|
|
||||||
|
- `prompt_dir` (optional): Default directory for prompt definition YAML files.
|
||||||
|
- `profile_dir` (optional): Default directory for execution profile YAML files.
|
||||||
|
- `schema_dir` (optional): Base directory for JSON schema files used by `json_schema` validation.
|
||||||
|
|
||||||
|
### `server`
|
||||||
|
|
||||||
|
- `addr` (optional): HTTP server listen address for `scriptorium serve`.
|
||||||
|
|
||||||
|
### `defaults`
|
||||||
|
|
||||||
|
- `render_format` (optional): Default output format for `scriptorium render`.
|
||||||
|
- Allowed values: `text`, `json`.
|
||||||
|
|
||||||
|
## Precedence
|
||||||
|
|
||||||
|
For run/render/serve settings, precedence is:
|
||||||
|
|
||||||
|
1. Explicit CLI flags
|
||||||
|
2. `config.yml`
|
||||||
|
3. Built-in defaults
|
||||||
|
|
||||||
|
## Notes and Rules
|
||||||
|
|
||||||
|
- Unknown YAML fields fail to load (strict decoding).
|
||||||
|
- This file does not accept API keys.
|
||||||
|
- `config.yml` sets directory/server defaults only; prompt/profile content remains in their own files.
|
||||||
41
docs/config/profile-definitions.md
Normal file
41
docs/config/profile-definitions.md
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# Execution Profile Definitions
|
||||||
|
|
||||||
|
Execution Profiles define **how** Scriptorium calls an LLM endpoint.
|
||||||
|
|
||||||
|
A profile file is YAML, typically stored under `profiles/`, for example `profiles/local-quality.yaml`.
|
||||||
|
|
||||||
|
## Complete Example
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
id: local-quality
|
||||||
|
endpoint: http://localhost:8000/v1
|
||||||
|
model: gpt-4.1
|
||||||
|
temperature: 0.0
|
||||||
|
max_tokens: 1200
|
||||||
|
top_p: 1.0
|
||||||
|
timeout_seconds: 180
|
||||||
|
reasoning_effort: medium
|
||||||
|
api_key_env: SCRIPTORIUM_API_KEY
|
||||||
|
extra_params:
|
||||||
|
provider: openrouter
|
||||||
|
route: fallback
|
||||||
|
```
|
||||||
|
|
||||||
|
## Available Options
|
||||||
|
|
||||||
|
- `id` (required): Unique profile identifier used by `--profile` or prompt `default_profile`.
|
||||||
|
- `endpoint` (required): OpenAI-compatible base URL, usually ending in `/v1`.
|
||||||
|
- `model` (required): Model name to request at that endpoint.
|
||||||
|
- `temperature` (optional): Sampling temperature. Valid range is `0` to `2`.
|
||||||
|
- `max_tokens` (optional): Max completion tokens. Must be `>= 0`.
|
||||||
|
- `top_p` (optional): Nucleus sampling parameter. Valid range is `0` to `1`.
|
||||||
|
- `timeout_seconds` (optional): Request timeout in seconds. Must be `>= 0`.
|
||||||
|
- `reasoning_effort` (optional): Provider/model-specific reasoning level string.
|
||||||
|
- `api_key_env` (optional): Environment variable name that holds the API key.
|
||||||
|
- `extra_params` (optional): String key/value map for provider-specific parameters.
|
||||||
|
|
||||||
|
## Notes and Rules
|
||||||
|
|
||||||
|
- Raw API keys are not supported. Do **not** add `api_key` fields.
|
||||||
|
- Unknown YAML fields fail to load (strict decoding).
|
||||||
|
- If `api_key_env` is set, the environment variable must be present when the run executes.
|
||||||
73
docs/config/prompt-definitions.md
Normal file
73
docs/config/prompt-definitions.md
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
# Prompt Definition Files
|
||||||
|
|
||||||
|
Prompt Definitions define **what** Scriptorium should do.
|
||||||
|
|
||||||
|
A prompt file is YAML, typically stored under `prompts/`, for example `prompts/generic.structured_events.yaml`.
|
||||||
|
|
||||||
|
## Complete Example
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
id: generic.structured_events
|
||||||
|
version: "1.0.0"
|
||||||
|
default_profile: local-quality
|
||||||
|
description: Extract events from a transcript into structured JSON.
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
- name: transcript
|
||||||
|
required: true
|
||||||
|
content_type: text/markdown
|
||||||
|
description: Source transcript
|
||||||
|
- name: glossary
|
||||||
|
required: false
|
||||||
|
content_type: text/yaml
|
||||||
|
description: Optional glossary context
|
||||||
|
|
||||||
|
messages:
|
||||||
|
- role: system
|
||||||
|
content: |
|
||||||
|
You are a structured extraction assistant.
|
||||||
|
Return only JSON.
|
||||||
|
- role: user
|
||||||
|
content_file: ./generic.structured_events.user.md
|
||||||
|
|
||||||
|
output:
|
||||||
|
format: json
|
||||||
|
validation_mode: json_schema
|
||||||
|
schema_path: structured_events.schema.json
|
||||||
|
repair_attempts: 1
|
||||||
|
```
|
||||||
|
|
||||||
|
## Available Options
|
||||||
|
|
||||||
|
- `id` (required): Prompt identifier used by `--prompt` / `prompt_id`.
|
||||||
|
- `version` (required): Prompt version string.
|
||||||
|
- `default_profile` (optional): Execution profile ID used when no explicit profile is provided.
|
||||||
|
- `description` (optional): Human-readable description.
|
||||||
|
|
||||||
|
### `inputs[]`
|
||||||
|
|
||||||
|
- `name` (required): Logical input name referenced in templates via `{{input "name"}}`.
|
||||||
|
- `required` (optional): If `true`, run fails when input is missing.
|
||||||
|
- `content_type` (optional): Metadata only (not enforced yet).
|
||||||
|
- `description` (optional): Human-readable input description.
|
||||||
|
|
||||||
|
### `messages[]`
|
||||||
|
|
||||||
|
- `role` (required): Message role such as `system` or `user`.
|
||||||
|
- `content` (optional): Inline Go-template message body.
|
||||||
|
- `content_file` (optional): Path to a template file.
|
||||||
|
|
||||||
|
Each message must set **exactly one** of `content` or `content_file`.
|
||||||
|
|
||||||
|
### `output`
|
||||||
|
|
||||||
|
- `format` (required): One of `text`, `markdown`, `json`.
|
||||||
|
- `validation_mode` (required): One of `none`, `basic`, `json`, `json_schema`.
|
||||||
|
- `schema_path` (required when `validation_mode: json_schema`): Path to JSON Schema file.
|
||||||
|
- `repair_attempts` (required): Number of bounded repair retries (`>= 0`).
|
||||||
|
|
||||||
|
## Notes and Rules
|
||||||
|
|
||||||
|
- Unknown YAML fields fail to load (strict decoding).
|
||||||
|
- `content_file` paths are resolved relative to the prompt YAML file.
|
||||||
|
- For `json_schema` validation mode, Scriptorium also sends provider-level structured output requests automatically.
|
||||||
82
docs/config/schema-definitions.md
Normal file
82
docs/config/schema-definitions.md
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
# JSON Schema Definition Files
|
||||||
|
|
||||||
|
Schema definition files describe the expected JSON output contract for prompts that use:
|
||||||
|
|
||||||
|
- `output.format: json`
|
||||||
|
- `output.validation_mode: json_schema`
|
||||||
|
|
||||||
|
Schema files are JSON, typically stored under `schemas/`, for example `schemas/structured_events.schema.json`.
|
||||||
|
|
||||||
|
## Complete Example
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||||
|
"$id": "https://example.com/schemas/structured-events.schema.json",
|
||||||
|
"title": "Structured Events",
|
||||||
|
"description": "Expected shape for extracted event output",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"summary": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1,
|
||||||
|
"description": "High-level session summary"
|
||||||
|
},
|
||||||
|
"events": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"title": { "type": "string" },
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["discovery", "combat", "social", "travel", "downtime", "other"]
|
||||||
|
},
|
||||||
|
"notes": { "type": "string" }
|
||||||
|
},
|
||||||
|
"required": ["title", "type"],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"minItems": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": ["summary", "events"],
|
||||||
|
"additionalProperties": false,
|
||||||
|
"$defs": {
|
||||||
|
"nonEmptyString": {
|
||||||
|
"type": "string",
|
||||||
|
"minLength": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Available Options
|
||||||
|
|
||||||
|
Scriptorium does not define custom schema keywords. It expects a valid JSON Schema document and passes it to the validator/provider.
|
||||||
|
|
||||||
|
Commonly used JSON Schema options include:
|
||||||
|
|
||||||
|
- `$schema`: Draft identifier URI.
|
||||||
|
- `$id`: Schema identifier URI.
|
||||||
|
- `title`: Human-readable schema title.
|
||||||
|
- `description`: Human-readable schema description.
|
||||||
|
- `type`: Expected JSON type (`object`, `array`, `string`, etc.).
|
||||||
|
- `properties`: Object field definitions.
|
||||||
|
- `required`: Required object fields.
|
||||||
|
- `additionalProperties`: Whether undeclared fields are allowed.
|
||||||
|
- `items`: Array item schema.
|
||||||
|
- `enum`: Allowed literal values.
|
||||||
|
- `const`: Single allowed literal value.
|
||||||
|
- `oneOf`, `anyOf`, `allOf`: Composition rules.
|
||||||
|
- `minimum`, `maximum`: Numeric bounds.
|
||||||
|
- `minLength`, `maxLength`, `pattern`: String constraints.
|
||||||
|
- `minItems`, `maxItems`: Array constraints.
|
||||||
|
- `$defs`: Reusable local definitions.
|
||||||
|
- `$ref`: Reference to another schema/definition.
|
||||||
|
|
||||||
|
## Notes and Rules
|
||||||
|
|
||||||
|
- Schema path comes from prompt `output.schema_path` and is resolved relative to `schema_dir`.
|
||||||
|
- If schema loading fails for `json_schema` mode, the run fails before the LLM request.
|
||||||
|
- Keep schemas strict (`additionalProperties: false`) when you want predictable output shape.
|
||||||
Reference in New Issue
Block a user