Skip to content

Implement the medium-priority backlog (items 13, 15-18) - #14

Merged
achildress83 merged 2 commits into
feature/high-priorityfrom
feature/medium-priority
Oct 19, 2026
Merged

achildress83 merged 2 commits into
feature/high-priorityfrom
feature/medium-priority

Conversation

@achildress83

Copy link
Copy Markdown
Contributor

What

Implements the medium-priority items of BACKLOG.md: 13, 15, 16, 17 and 18, and records the live check for 14. Stacked on #13, so the base is feature/high-priority; retarget to main once #13 merges.

Why

  • A transcript saved mid-turn (unanswered tool calls) was sent as-is and rejected with a 400 that is never retried.
  • A handler that is not thread-safe could not opt out of parallel execution.
  • Timeouts were hard-coded per adapter, and the adapter guessed whether a supplied client had chosen its own.
  • OpenAI's o-series models reject parallel_tool_calls, which was sent on every request.
  • A second configure_tracing(), or trace=True with no provider, silently discarded spans.

Changes

  • Resume: unanswered tool calls are run before the first model call, then check_invariants() runs, so a bad transcript raises TranscriptError before any model call.
  • ToolSpec.parallel_safe and @tool(parallel_safe=...): a turn calling an unsafe tool runs all its calls sequentially, in call order.
  • Settings.timeout_seconds and LLM_TIMEOUT_SECONDS: replaces the read timeout of the OpenAI-compatible providers; for Anthropic it is the SDK's overall timeout. An explicit timeout now beats a supplied http_client's.
  • Model-aware quirks: providers.openai.MODEL_QUIRKS and quirks_for_model (o1/o3/o4 omit parallel_tool_calls), plus a quirks= override on build_openai_client.
  • Tracing: one warning for a second configure_tracing() and one for a traced run with no provider installed.
  • Item 14: checked live. o4-mini returns encrypted_content without include, and replay is accepted. No code change.
  • Changelog, docs and backlog updated.

Not done: resuming a turn that paused and then failed (13), other OpenAI families and OpenRouter/Modal in the quirks table (17), and the tracing detection is untested on older OpenTelemetry SDKs (18). ruff and mypy are clean, 586 tests pass, coverage 94.8%.

🤖 Generated with Claude Code

achildress83 and others added 2 commits October 18, 2026 16:21
- Resume: unanswered tool calls in a loaded transcript run before the
  first model call; an invalid transcript raises TranscriptError up front.
- ToolSpec.parallel_safe: a turn calling an unsafe tool runs sequentially.
- Settings.timeout_seconds / LLM_TIMEOUT_SECONDS, passed to every provider
  builder; an explicit timeout beats a supplied http_client's.
- OpenAI model-aware quirks: o-series models do not get parallel_tool_calls.
- Tracing: warn on a second configure_tracing() and on a traced run with no
  provider installed.

Item 14 needs a live call and stays open.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@achildress83
achildress83 merged commit 1760c0a into feature/high-priority Oct 19, 2026
4 checks passed
@achildress83
achildress83 deleted the feature/medium-priority branch October 21, 2026 05:45
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