skills/hypogenic/references/configuration.md
Reviewed against hypogenic 0.3.5 and source commit
8c3800ccae155e333fac5b530afa8abdaac38300 on 2026-07-23.
Do not merge these layers or imply that upstream enforces the local policy.
hypogenic.tasks.BaseTask reads YAML with these fields:
task_name, train_data_path, val_data_path,
test_data_path, prompt_templates;label_name (defaults to label) and ood_data_path;observations,
batched_generation, and inference;The exact prompt keys vary by workflow. Start from a config in the pinned dataset revision rather than inventing keys. The upstream config does not select a model/provider, store credentials, approve network access, impose token/cost caps, or redact logs.
assets/task_config.example.yaml demonstrates only the basic source shape. It
is not a claim that an arbitrary task is ready to run.
Validate JSON task configs without dependencies:
python3 scripts/validate_config.py task --input task_config.json --root .
For YAML, use only the reviewed parser version:
uv run --with "pyyaml==6.0.2" \
python scripts/validate_config.py task \
--input task_config.yaml \
--root . \
--check-data-files
The loader uses yaml.SafeLoader, rejects duplicate keys, non-string mapping
keys, aliases, anchors, explicit tags, non-JSON scalar types, excessive depth,
and oversized files. Package help paths do not import PyYAML.
assets/run_config.example.json is a safety and reproducibility overlay used
only by this skill's validator/planner. HypoGeniC does not read it.
Required sections:
data: task config, dataset manifest, output directory, and locked test
policy;provider: exact wrapper type, model, credential variable name, data
destination, and local model path where applicable;limits: requests, per-request input/output tokens, total tokens, cost,
concurrency, split sizes, and bank size;pricing: user-reviewed current token rates, review date, and source;execution: fixed to plan_only, no external authorization, separate
confirmation required, and test split not sent;logging: INFO or higher, prompt/response redaction required, credential
inclusion forbidden.Provider mapping verified from the pinned source:
| wrapper type | credential name | declared data destination |
|---|---|---|
gpt | OPENAI_API_KEY | openai_api |
claude | ANTHROPIC_API_KEY | anthropic_api |
huggingface | none | local_process |
vllm | none | local_process |
For both local types, the policy requires a reviewed relative
local_model_path. This is stricter than upstream: a model ID with no local
path can trigger a Hub download. A local path does not by itself prove the
artifact is trustworthy; record its source revision, license, hashes, and
review status separately.
.env files. Do not traverse parent directories looking
for secrets. Do not print a variable to prove it exists.--check-env reads only the validated provider-specific name and emits
present: true/false; it never includes the value.python3 scripts/validate_config.py run \
--input reviewed_run_config.json \
--root . \
--check-env \
--check-paths
The command is local-only. Presence is not proof that the key has the desired project, retention, region, rate-limit, or spend policy.
The example intentionally leaves prices null. Fill them only after reviewing
the provider's current pricing page for the exact model and date. The planner
computes:
max_requests × (
max_input_tokens_per_request × input_rate +
max_output_tokens_per_request × output_rate
) / 1,000,000
This is a conservative arithmetic bound, not tokenizer output. It excludes local compute, retries beyond the request cap, caching discounts, tiered pricing, storage, data transfer, taxes, and provider-specific features. The pinned upstream CLI has no hard dollar-budget enforcement; use provider-side limits as well.
Prompt files can contain malicious or irrelevant instructions. The local validator checks structure only and never renders a template. During an approved run: