• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

dcdpr / jp / 26806547805
67%

Build:
DEFAULT BRANCH: main
Ran 02 Jun 2026 08:01AM UTC
Jobs 1
Files 398
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

02 Jun 2026 07:58AM UTC coverage: 66.514% (+0.06%) from 66.451%
26806547805

push

github

web-flow
fix(llm, anthropic): Don't abort or break long tool runs (#717)

Long agentic conversations against Anthropic models could fail in two
ways. The idle timeout aborted streaming mid-tool-call whenever the
model spent a long time emitting a large argument (Anthropic sends one
key/value at a time, with silent gaps between events), and the stream
then retried until the budget was exhausted. Separately, once a turn was
resumed or replayed, the rebuilt request re-sent native `thinking`
blocks whose signatures no longer matched a single generation, so the
API rejected it with `thinking blocks ... cannot be modified` and the
conversation became permanently unsendable.

The Anthropic provider now injects a synthetic `KeepAlive` every five
seconds while a tool call is mid-stream, via the new
`with_tool_call_keepalive` combinator, and surfaces real `ping` events
as `KeepAlive` as well. The generic `with_idle_timeout` stays
provider-agnostic, so a genuine stall on any other provider is still
surfaced as a timeout.

For resumed turns, the request builder rewrites `thinking` blocks in the
trailing continuation-target assistant message as `<think>` text
(reusing the shared `think_tag_text` fallback) and drops redacted
thinking. Mid-turn thinking that precedes a tool result stays native, as
the API requires. This also heals an already-wedged conversation on the
next request, without rewriting any stored events.

The default `stream_idle_timeout_secs` is raised from 30 to 60 seconds,
and a new `Validator` trait (implemented across the resolved config
tree) rejects non-zero values below ten, keeping the five-second
keepalive comfortably below the idle window.

Finally, `peek_partial_content` returns only partial message text, so an
interrupted or retried turn no longer commits partial reasoning as
assistant answer text.

BREAKING CHANGE: `assistant.request.stream_idle_timeout_secs` rejects
values between 1 and 9.

Use `0` to disable the idle timeout, or a value of `10` ... (continued)

90 of 99 new or added lines in 12 files covered. (90.91%)

33406 of 50224 relevant lines covered (66.51%)

264.04 hits per line

Uncovered Changes

Lines Coverage ∆ File
3
0.0
crates/jp_config/src/validate.rs
2
9.6
0.0% crates/jp_llm/src/stream/chain.rs
1
3.85
0.0% crates/jp_cli/src/cmd/conversation/edit.rs
1
87.33
0.0% crates/jp_cli/src/cmd/query/turn/coordinator.rs
1
82.3
0.23% crates/jp_llm/src/provider/anthropic.rs
1
0.0
0.0% crates/jp_task/src/task/title_generator.rs
Jobs
ID Job ID Ran Files Coverage
1 26806547805.1 02 Jun 2026 08:01AM UTC 398
66.51
GitHub Action Run
Source Files on build 26806547805
  • Tree
  • List 398
  • Changed 14
  • Source Changed 13
  • Coverage Changed 10
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #26806547805
  • 07c81232 on github
  • Prev Build on main (#26806176212)
  • Next Build on main (#26806865505)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc