# Model cards — WP 27 One card per model or provider used or planned. Prices are USD per 1M tokens (input / cached input / output) as entered in `LLMCfg.price_assumptions` (`experiments/config.py`); source: provider pricing pages fetched 2026-10-27 (OpenAI) and Anthropic's published price table. The budget tracker (`llm/budget.py`) prices every call from this table; unknown model ids are priced at the most expensive known output price. Every run manifest stores the table it used. ## 1. gpt-5.4-nano (OpenAI) — primary model | Field | Value | |---|---| | Model id / snapshot | `gpt-5.4-nano` (alias; the dated snapshot returned in `response.model` is recorded per decision via `request_id` and the manifest) | | Price | 0.20 / 0.02 / 1.25 | | Measured usage (2026-10-27, prompt v1) | ≈ 760 input, ≈ 230 output tokens per decision, of which ≈ 150 reasoning tokens at `reasoning.effort = low` → ≈ 0.00044 USD per decision (planning figure 0.0005) | | API / format | Responses API; `text.format = {type: json_schema, name: trading_decision, strict: true}`; `instructions` = frozen system prompt; `store = False`; `prompt_cache_key = ma-v1-` | | Reasoning / sampling | `reasoning.effort = low`; `temperature` not sent (rejected by the gpt-5 family); no seed parameter | | Known non-determinism | Sampling at the provider; identical prompts may yield different decisions across calls; replay is exact only from the SQLite cache | | Data retention | `store=False`: responses are not kept in the account's response store; OpenAI's standard abuse-monitoring retention applies (no zero-data-retention agreement) | | Role in design | All dose–response, mechanism and safeguard cells; single-prompt baseline of the diversity arm; source of the frozen library | | Status | **Live** (key valid 2026-10-27) | ## 2. gpt-5.4-mini (OpenAI) — second model for the mix arm | Field | Value | |---|---| | Model id | `gpt-5.4-mini` | | Price | 0.75 / 0.075 / 4.50 | | Usage assumption | Same token profile as nano (760 / 230) → ≈ 0.0016 USD per decision; **TBD** from a one-seed check before T2 (reasoning tokens may differ) | | API / format / reasoning | As gpt-5.4-nano | | Role | `mini_25` (model-quality control), `mix_25` (two-model mix), `mini_25_equalusd` (fairness) | | Status | Live-capable; not yet called; note the engineering item on mixing two OpenAI models in one run (`protocol.md` §5.2 note ii) | ## 3. gpt-5-nano (OpenAI) — cheap alternative / robustness | Field | Value | |---|---| | Model id | `gpt-5-nano` | | Price | 0.05 / 0.005 / 0.40 | | Usage assumption | 760 / 230 → ≈ 0.00013 USD per decision (TBD) | | API / format / reasoning | As gpt-5.4-nano | | Role | Optional "previous-generation" replication of `share_25` if budget remains after T6; not in the 40 USD plan | | Status | Live-capable; not planned in the confirmatory tiers | ## 4. claude-haiku-5-5 (Anthropic) — planned cross-provider model | Field | Value | |---|---| | Model id | `claude-haiku-5-5` | | Price (Anthropic published table) | 0.10 / 0.01 / 0.50 | | Usage assumption | 760 / 230 → ≈ 0.00019 USD per decision (TBD; no reasoning-token accounting in the adapter) | | API / format | Messages API; `output_config.format = {type: json_schema, schema}`; `output_config.effort = low`; system prompt with `cache_control: ephemeral`; no `thinking` parameter sent; `stop_reason = refusal` mapped to an invalid decision | | Known non-determinism | Provider sampling; no seed | | Data retention | Anthropic standard API retention (no zero-data-retention agreement) | | Role | Cross-provider replication of `share_25` and a nano + haiku mix cell | | Status | **Blocked** — the Anthropic key available on 2026-10-27 is rejected (HTTP 401 invalid x-api-key). The adapter is implemented and the cells are dry-run with the mock provider mapped to this model id; they enter the design only with a valid key and approved budget | ## 5. claude-sonnet-5-5 (Anthropic) — planned frontier-model cell | Field | Value | |---|---| | Model id | `claude-sonnet-5-5` | | Price (Anthropic published table) | 2.00 / 0.20 / 10.00 | | Usage assumption | 760 / 230 → ≈ 0.0038 USD per decision (TBD); one `share_25` run ≈ 2.6 USD | | API / format / retention | As claude-haiku-5-5 | | Role | At most a 2-seed "frontier model" comparison of `share_25`; outside the 40 USD plan | | Status | **Blocked** (same key issue); mock dry-run only | ## 6. mock-v1 (local) — deterministic stand-in | Field | Value | |---|---| | Implementation | `llm/providers/mock.py`: parses the canonical user message (mid, public PV, private signal, holdings, free cash) and applies a seeded value-plus-noise rule; 60 % limit / 40 % market orders; `invalid_rate` = 5 % (half non-JSON, half schema-invalid); `herd_bias` knob adds a common tilt to every mock agent | | Price | 0 / 0 / 0 (tokens approximated by word counts) | | Determinism | Fully seeded (`PCG64(seed)`); reproducible | | Role | Dry-run of every cell; CRN and validation tests; σ floors; `herd_bias` sweeps as a sanity check of the coordination metrics | | Status | Live (local). **Not evidence about LLM behaviour** | ## 7. library (local) — frozen nearest-neighbour replay | Field | Value | |---|---| | Implementation | `llm/library.py`: 7 standardized features of the observation (mispricing vs public PV, momentum, signal, inventory and cash ratios, spread, open-order flag); returns the recorded decision of one of the 5 nearest neighbours (seeded draw), limit price rescaled to the current mid | | Source | Valid decisions recorded in the T1 gpt-5.4-nano runs (`results/library/gpt-5.4-nano_single.npz`) | | Price | 0 | | Role | Scale arm at N = 1,000 and the "cached" side of the cached-vs-online comparison; runs are labelled provider `library` | | Caveat | Not an adaptive agent; out-of-support at large N must be reported (distance diagnostics, `protocol.md` §5.4) | | Status | Implemented; unused until T1 exists |