Skip to content

Casters: a hung voice is given up in 15 s, GPT-6 casts, and the review's loose ends - #17

Merged
earakely-scale merged 2 commits into
mainfrom
fix/casters-cleanup
Oct 7, 2026
Merged

earakely-scale merged 2 commits into
mainfrom
fix/casters-cleanup

Conversation

@earakely-scale

Copy link
Copy Markdown
Owner

What this does

The voice timeout, GPT-6 support, and the smaller findings left over from the #14 review.

  • A voice that hangs is given up in 15 s, not 45. The line is still captioned. Voices normally take about 2.5 s, at most 8 s. In two of the four smoke runs for Casters: two agents that look the match up and research it, a line at a time #14, the speech service hung, for 45 s of dead air each time.
  • OpenAI's reasoning models can cast. GPT-6 on chat completions rejects max_tokens, and it rejects tools with reasoning on. The caster takes up what the 400 asks for and retries, and the model's calls carry it from then on. Checked live: GPT-6 Luna takes both adjustments, then calls say.
  • A tool refusal in vLLM's words ("requires --enable-auto-tool-choice") turns tools off, as other refusals do. Before, every line failed and the casters went silent.
  • Text alone is not a line while there is time to look things up. "Let me check the standings first" is sent back with a note. On the last round, text is still taken as the line, for models that won't call say.
  • A tool call without an id gets one, so the call and its answer go back with the same id.
  • An argument a lookup doesn't take is ignored and noted, instead of an error that costs a round.
  • battles labels a fight with the turn it was fought, the turn before its entry, as messages and notes are labelled.
  • Small tidy-ups:
    • the Barbarians are named as such, not "the game's own AI";
    • research's unknown-tool error lists jot, not say;
    • the unused Caster.model is gone;
    • an HTTP error's text is read once and kept, so every reader sees it.

Tests

  • 516 pass; ruff is clean.
  • Five new tests, each failing on main:
    • the GPT-6 adjustments;
    • the vLLM refusal;
    • text alone sent back, together with the id fix;
    • the 15 s voice timeout;
    • the battles' turns.

A real match on EC2, with the client view, follows in a comment.

🤖 Generated with Claude Code

earakely-scale and others added 2 commits October 6, 2026 22:41
…odels get what the endpoint asks, and the review's loose ends

- A voicing times out after 15 s, not 45: the line is captioned, and a hung voice no longer means 45 s of dead air
  (it happened in two of four smoke runs).
- A 400 that asks for max_completion_tokens, or for tools without reasoning (GPT-6 on chat completions), is taken
  up and retried, and the model's calls carry it from then on: GPT-6 Luna casts with tools, checked live.
- A tool refusal in vLLM's words ("requires --enable-auto-tool-choice") turns tools off, as other refusals do.
- A reply of text alone while there is time to look things up ("Let me check the standings first") is sent back
  rather than aired; text is still the line on the last round.
- A tool call without an id gets one, so the call and its answer go back with the same.
- An argument a lookup doesn't take is ignored and noted, not an error that costs a round.
- battles labels a fight with the turn it was fought, the turn before its entry, as messages and notes are.
- The Barbarians are the Barbarians, not "the game's own AI"; research's unknown-tool error lists jot, not say;
  the unused Caster.model is gone; an HTTP error's text is read once and kept, so every reader sees it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The casters look the match up and research it, each with its own model if the task says so; the public sol-vs-opus
broadcast ended with Opus conquering America at turn 156, and the private rerun's conquest was called as one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@earakely-scale

Copy link
Copy Markdown
Owner Author

A real match on this branch (EC2, client view)

Setup:

  • Opus 5.5 (Claude Code, Rome) against GPT-6 Sol (Codex, America) on a Tiny map with one AI civilization (Spain), at most 100 turns at a 20 s pace;
  • the env image rebuilt from this branch, with the client;
  • the casters on, with Haiku 4.5 for the play-by-play and Sonnet 5.5 for the analyst;
  • recorded offline with --client-view.

Result: grade 1, in 22.6 minutes.

  • The game: war at turn 39, Washington taken at turn 40 and New York at turn 56, and Sol eliminated at turn 59. That's a conquest.
  • The ending, as Game over is the game's: a seat knocked out no longer ends it for the casters, the viewer and the play page #15 meant it: the casters signed off at GAME OVER with the victory in the data, "Opus 5.5 wins by conquest, 192 to 36". In the public sol-vs-opus broadcast they had signed off a turn early, calling the win "on score".
  • The casters: 122 lines, and no voice timed out.
    • The only error logged was Sonnet 5.5 turning a forced say down, which is handled.
  • Talk: 32 public messages, 18 from Sol and 14 from Opus.
  • Cost: $3.26 for the agents (Opus $2.09, Sol $1.18), plus about $1.50 for the casters.

🤖 Generated with Claude Code

@earakely-scale
earakely-scale merged commit bbfc2ab into main Oct 7, 2026
5 checks passed
@earakely-scale
earakely-scale deleted the fix/casters-cleanup branch October 7, 2026 06:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant