Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion docs/providers/model-presets.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ Use a preset when the provider is listed here. Use a custom `ModelConfig` when y

The constructors do not validate model IDs. They send the `id` you pass through to the provider, which lets you use newly released model IDs before yoagent updates its examples.

**Nothing is priced until the process opts in** — `prices::enable_bundled()` (the bundled data file `src/provider/prices.json`, offline) or `prices::enable_live(..)` (native) — see [Model Pricing](../concepts/pricing.md#enabling-pricing). After that, prices are looked up by `(provider, id)` when the config is built. The named presets (`claude_fable_5`, `claude_fable_5_1`, `claude_opus_5_5`, `claude_opus_5`, `claude_opus_4_8`, `claude_sonnet_5`, `claude_haiku_4_5`, `gpt_5_5`, `gpt_6_astra`, `gpt_6_sol`, `gpt_6_luna`) are all in the snapshot (`cost: Some(CostConfig)`). The OpenAI ones carry a context tier: above 272K prompt tokens the whole request bills at the long-context rates (`gpt_5_5`'s long-band cached-input rate is unverified; see its `note` in the data file). The generic first-party constructors (`anthropic`, `openai`, `openai_responses`, `google`, `xai`, `groq`, `deepseek`, `mistral`, `zai`, `minimax`, `qwen`, `meta`) are priced when the file lists the id — `ModelConfig::anthropic("claude-sonnet-5", ..)` gets `claude_sonnet_5()`'s rates, `meta` prices `muse-spark-1.1`/`-1.2` — and carry `cost: None` otherwise. Gateways and custom endpoints (`custom`, `openai_compat`, `local`, `ollama`, `opencode_zen`, `opencode_go`) are always `cost: None`, since what they bill is not the vendor's list price. `None` means pricing **unknown**, not free; set `config.cost = Some(CostConfig::new(input, output))` yourself if you want cost reporting. The OpenCode presets select the API protocol from the model id — see [OpenCode Zen & Go](opencode.md).
**Nothing is priced until the process opts in** — `prices::enable_bundled()` (the bundled data file `src/provider/prices.json`, offline) or `prices::enable_live(..)` (native) — see [Model Pricing](../concepts/pricing.md#enabling-pricing). After that, prices are looked up by `(provider, id)` when the config is built. The named presets (`claude_fable_5`, `claude_fable_5_1`, `claude_opus_5_5`, `claude_opus_5`, `claude_opus_4_8`, `claude_sonnet_5`, `claude_haiku_4_5`, `gpt_5_5`, `gpt_6_astra`, `gpt_6_sol`, `gpt_6_luna`) are all in the snapshot (`cost: Some(CostConfig)`). The OpenAI ones carry a context tier: above 272K prompt tokens the whole request bills at the long-context rates (`gpt_5_5`'s long-band cached-input rate is unverified; see its `note` in the data file). The generic first-party constructors (`anthropic`, `openai`, `openai_responses`, `google`, `xai`, `groq`, `deepseek`, `mistral`, `zai`, `minimax`, `qwen`, `meta`) are priced when the file lists the id — `ModelConfig::anthropic("claude-sonnet-5", ..)` gets `claude_sonnet_5()`'s rates, `meta` prices `muse-spark-1.1`/`-1.2`, `deepseek` prices `deepseek-flash`/`deepseek-v4-pro`/`deepseek-v4-flash` at the peak rate (see [DeepSeek Models](#deepseek-models)) — and carry `cost: None` otherwise. Gateways and custom endpoints (`custom`, `openai_compat`, `local`, `ollama`, `opencode_zen`, `opencode_go`) are always `cost: None`, since what they bill is not the vendor's list price. `None` means pricing **unknown**, not free; set `config.cost = Some(CostConfig::new(input, output))` yourself if you want cost reporting. The OpenCode presets select the API protocol from the model id — see [OpenCode Zen & Go](opencode.md).

The `claude_*` presets also set `AnthropicCompat::native_structured_output`, so `Agent::prompt_structured` uses the API's native JSON outputs instead of a forced tool call. `claude_fable_5_1` and `claude_opus_5_5` depend on it, because both models reject forced `tool_choice`. `ModelConfig::anthropic(id, name)` infers it (and the thinking mode) from a Claude id, and leaves it off for any other id. See [Structured Outputs](../concepts/structured-outputs.md).

Expand Down Expand Up @@ -149,6 +149,8 @@ let flash = ModelConfig::deepseek("deepseek-flash", "DeepSeek Flash"); // V4.1 F
let pro = ModelConfig::deepseek("deepseek-v4-pro", "DeepSeek V4 Pro");
```

**Pricing** (after `prices::enable_bundled()`): `deepseek-flash` and `deepseek-v4-flash` at $0.30 input / $0.006 cache hit / $1.20 output per million tokens, `deepseek-v4-pro` at $1.32 / $0.044 / $3.96 — DeepSeek's **peak** rates. Off-peak (every hour but 01:00–04:00 and 06:00–10:00 UTC on weekdays) DeepSeek bills half; a `CostConfig` has no time of day, so reported costs are an upper bound and a `Budget` stops early rather than late. To count off-peak rates, install them as an override ([Model Pricing](../concepts/pricing.md#which-constructors-are-priced)).

The legacy names `deepseek-chat` and `deepseek-reasoner` were discontinued on 2026-07-24; requests using them fail. `deepseek-v4-flash` (and `deepseek-v4-flash-vision-exp`) are still accepted, but the V4 Flash model behind them is retired — DeepSeek serves those requests with V4.1 Flash at the Flash price. Prefer `deepseek-flash`.

yoagent also sends DeepSeek's current request shape:
Expand Down
4 changes: 2 additions & 2 deletions integrations/yoagent-frontend/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ crates.io.

| Was here | Now |
|---|---|
| `integrations/yoagent-frontend/` | [`frontend/`](https://github.com/yologdev/yobuild/tree/main/frontend) |
| `integrations/yoagent-frontend/examples/` (`coding_agent`, `handoff_agent`, `minimal_browser`) | [`frontend/examples/`](https://github.com/yologdev/yobuild/tree/main/frontend/examples) |
| `integrations/yoagent-frontend/` | the Rust code: [`src/frontend/`](https://github.com/yologdev/yobuild/tree/main/src/frontend) (no longer a crate of its own); its plugins and web page: [`frontend/`](https://github.com/yologdev/yobuild/tree/main/frontend) |
| `integrations/yoagent-frontend/examples/` (`coding_agent`, `handoff_agent`, `minimal_browser`) | [`examples/`](https://github.com/yologdev/yobuild/tree/main/examples) |
| `scripts/try-coding-agent.sh`, `scripts/try-handoff.sh` | [`scripts/`](https://github.com/yologdev/yobuild/tree/main/scripts) |
| `integrations/yoagent-frontend/plugins/pi-extensions/confirm-dangerous.ts` | [`frontend/plugins/pi-extensions/`](https://github.com/yologdev/yobuild/tree/main/frontend/plugins/pi-extensions) |

Expand Down
2 changes: 1 addition & 1 deletion integrations/yoagent-frontend/examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

The frontend examples (`coding_agent`, `handoff_agent`, `minimal_browser`)
and this page — the handoff agent's stack and measured performance — are now
at **[yobuild/frontend/examples](https://github.com/yologdev/yobuild/tree/main/frontend/examples)**.
at **[yobuild/examples](https://github.com/yologdev/yobuild/tree/main/examples)**.

The last version here is at [`7ca9590`](https://github.com/yologdev/yoagent/tree/7ca9590/integrations/yoagent-frontend/examples).
2 changes: 1 addition & 1 deletion integrations/yoagent-frontend/examples/coding_agent.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
//! Moved: this example now lives in yobuild,
//! https://github.com/yologdev/yobuild/blob/main/frontend/examples/coding_agent.rs
//! https://github.com/yologdev/yobuild/blob/main/examples/coding_agent.rs
//! (the last version here: https://github.com/yologdev/yoagent/blob/7ca9590/integrations/yoagent-frontend/examples/coding_agent.rs).
2 changes: 1 addition & 1 deletion integrations/yoagent-frontend/examples/handoff_agent.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
//! Moved: this example now lives in yobuild,
//! https://github.com/yologdev/yobuild/blob/main/frontend/examples/handoff_agent.rs
//! https://github.com/yologdev/yobuild/blob/main/examples/handoff_agent.rs
//! (the last version here: https://github.com/yologdev/yoagent/blob/7ca9590/integrations/yoagent-frontend/examples/handoff_agent.rs).
2 changes: 1 addition & 1 deletion integrations/yoagent-frontend/examples/minimal_browser.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
//! Moved: this example now lives in yobuild,
//! https://github.com/yologdev/yobuild/blob/main/frontend/examples/minimal_browser.rs
//! https://github.com/yologdev/yobuild/blob/main/examples/minimal_browser.rs
//! (the last version here: https://github.com/yologdev/yoagent/blob/7ca9590/integrations/yoagent-frontend/examples/minimal_browser.rs).
2 changes: 1 addition & 1 deletion scripts/try-coding-agent.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/usr/bin/env bash
# Moved: this script and the examples it runs now live in yobuild.
echo "scripts/try-coding-agent.sh has moved to yobuild: https://github.com/yologdev/yobuild (scripts/try-coding-agent.sh)" >&2
echo "scripts/try-coding-agent.sh has moved to yobuild: https://github.com/yologdev/yobuild/blob/main/scripts/try-coding-agent.sh" >&2
exit 1
2 changes: 1 addition & 1 deletion scripts/try-handoff.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/usr/bin/env bash
# Moved: this script and the examples it runs now live in yobuild.
echo "scripts/try-handoff.sh has moved to yobuild: https://github.com/yologdev/yobuild (scripts/try-handoff.sh)" >&2
echo "scripts/try-handoff.sh has moved to yobuild: https://github.com/yologdev/yobuild/blob/main/scripts/try-handoff.sh" >&2
exit 1
Loading