Repository navigation
Conversation
Co-authored-by: Medulla <medulla@tinyhumans.ai>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Warning Review limit reached
This review includes 2 billable files and costs up to $0.50. Or wait 28 minutes for your next included review. View limit detailsLimit details: You’ve used the included review currently available. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (2)
Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e03cef21f6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Tiny Sweeper reviewTiny Sweeper reviewed this change across 6 lane(s) and found 0 active actionable finding(s). Detailed lane evidence and any incomplete work are listed below. State: Incomplete Review snapshot
Completeness: Incomplete What changedThe review could not produce a supported behavioral summary; inspect the cited changed surface and lane details below. FeaturesNone identified with supported citations. TestsNo supported feature-to-test mapping was produced. Test execution is not inferred.
FindingsNo active actionable findings. Could not review: crates/tinytools-agent/src/parse/grammar/tagged.rs, crates/tinytools-agent/src/parse/test/tagged.rs, tinysweeper/tests Before merge
How this fits togetherflowchart LR
n0["..._dsml_invoke_carries_its_name_in_the_body<br/>changed"]:::changed
n1["..._block_does_not_swallow_the_call_after_it<br/>changed"]:::changed
n2["...ed_invoke_after_a_complete_malformed_body<br/>changed"]:::changed
n3["...sed_tag_with_balanced_json_still_recovers<br/>changed"]:::changed
n4["parse_known"]:::impacted
n5["parse_tool_calls"]:::impacted
n6["probe_decided"]:::impacted
n7["parse"]:::impacted
n8["next_opener"]:::impacted
n9["ParsedToolCall"]:::impacted
n0 -->|calls| n5
n0 -->|tests| n5
n0 -->|uses| n7
n1 -->|calls| n4
n2 -->|calls| n4
n3 -->|calls| n7
n4 -->|uses| n7
n5 -->|uses| n9
n6 -->|calls| n8
n7 -->|calls| n5
n7 -->|tests| n5
n7 -->|uses| n9
classDef changed fill:#0d4429,stroke:#238636,color:#e6edf3
classDef impacted fill:#161b22,stroke:#6e7681,color:#c9d1d9
classDef flagged fill:#5a1e02,stroke:#d93f0b,color:#ffffff
classDef blocking fill:#67060c,stroke:#f85149,color:#ffffff
Agent review detailscritique
security
tests
commits
description
e2e
Evidence and run details
|
When a DSML tool call uses an inline name but no explicit name parameter, the recovery loop was incorrectly advancing the cursor past the JSON value and scanning later narrative text for additional calls. This caused spurious extra calls to be extracted from prose that happened to contain JSON-like content. The fix stops the loop after the first call when no name match is present, and also applies the `from_call_object` helper to properly decode stringified and aliased arguments. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
The cursor offset was incorrectly split across two lines, causing a syntax error in the recovery logic for DSML tool calls. This change consolidates the expression onto a single line to ensure correct parsing and offset computation. Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
Auto-committed-on: dragonfly Co-authored-by: Medulla <medulla@tinyhumans.ai>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0e1f94c7a3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| let mut calls = Vec::new(); | ||
| let mut cursor = 0; | ||
| while cursor < after.len() { | ||
| let Some((arguments, json_end)) = extract_first_json_value_with_end(&after[cursor..]) |
There was a problem hiding this comment.
Stop DSML recovery at the group terminator
When a recovered call is followed by </|DSML| calls>, this loop does not treat that marker as a boundary: extract_first_json_value_with_end scans through it and any following narrative for another JSON value. If later prose or an example contains JSON followed by a matching DSML name-parameter fragment, that value is returned as another executable call and the intervening text is removed. Bound each extraction to the first DSML_CALLS_CLOSE_RE match so recovery cannot dispatch content outside the terminated call group.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
tinysweeper found nothing blocking, but could not review everything, so this is not an approval: crates/tinytools-agent/src/parse/grammar/tagged.rs, crates/tinytools-agent/src/parse/test/tagged.rs, tinysweeper/tests.
$0.0012 · 10,540 in / 3,827 out · 2,526 cached (24%) · ladder/vectors, deepseek/deepseek-v4-flash · 612 embedded
description: $0.0002 · 5,980 in / 99 out · 2,014 cached (34%) · deepseek/deepseek-v4-flash
Summary
Recover tool calls in unterminated text
<tool_call>blocks when DeepSeek emits JSON arguments followed by DSML parameter metadata, and preserve calls whose name remains in their JSON object. JSON is parsed before DSML framing is inspected, so tag-like strings inside arguments remain data. Regression coverage includes the reported</script>payload and a following DSML invoke.Closes tinyhumansai/tinyagents#204
Validation
cargo test --manifest-path vendor/tinytools/Cargo.toml -p tinytools-agent— passed (374 tests)cargo fmt --manifest-path vendor/tinytools/Cargo.toml --all -- --check— passedcargo clippy --manifest-path vendor/tinytools/Cargo.toml -p tinytools-agent --lib --all-features -- -D warnings— passedcargo clippy --manifest-path vendor/tinytools/Cargo.toml -p tinytools-agent --all-targets --all-features -- -D warnings— blocked by the pre-existingmanual_assert_eqlint incrates/tinytools-agent/src/parse/test/regressions.rs:130