Skip to content

[None][feat] Enable agent serving evaluation via trace-replay on Scaffolding - #14397

Merged
WeiHaocheng merged 52 commits into
NVIDIA:mainfrom
KleinBlueC:feat/scaffolding-trace-replay
Jul 14, 2026
Merged

[None][feat] Enable agent serving evaluation via trace-replay on Scaffolding#14397
WeiHaocheng merged 52 commits into
NVIDIA:mainfrom
KleinBlueC:feat/scaffolding-trace-replay

Conversation

@KleinBlueC

@KleinBlueC KleinBlueC commented May 21, 2026

Copy link
Copy Markdown
Contributor

PR #14397 Change Summary

New Features

  • Scaffolding trace replay framework — capture real agent request trajectories and replay them offline for benchmarking, KV-cache hit analysis, and parallel-strategy comparison
  • Three new scaffolding agents under contrib/: Coder (sandboxed code-gen + SWE-bench), IterResearch (iterative research with apiary interpreter), and TreeOfThoughtResearch
  • MCP server expansion: reorganized layout plus new servers for Coder, web fetching, Google Search / Scholar, Tavily, and wordllama
  • Two new trtllm-serve endpoints to support the above: POST /v1/tokenize (tokenize-only) and POST /_control/kv_cache/truncate_tokens (token-level KV cache truncation)

Description

I. TRT-LLM Internal Changes

Tiny, server-side only. All exist to give the scaffolding trace-replay client the hooks it needs.

File What changed
serve/openai_protocol.py (+81) New TokenizeRequest / TokenizeResponse / KVCacheTruncateTokensRequest Pydantic models
serve/openai_server.py (+54) New POST /v1/tokenize endpoint (tokenize-only, no executor work); defensive getattr on new KvCacheMetrics fields to avoid HTTP 500 on older bindings
serve/postprocess_handlers.py (+19/-5) Bug fix: streaming /v1/completions chunks now use cmpl-{rsp.id} so clients can join with /perf_metrics, matching the chat-completion path
serve/resource_governor.py (+62) New POST /_control/kv_cache/truncate_tokens (token-level KV cache truncation, bypasses chat template) + namespace alias for the legacy truncate route
tests/test_tokenize_endpoint.py (+263) New unit test for /v1/tokenize

No changes to PyExecutor, scheduler, KVCacheManager, or any core runtime — KV cache truncation reuses the existing TruncateKVCacheRequest control queue.

II. Scaffolding Changes (main body)

A. Trace Replay Framework (new)

Capture real agent request trajectories, then replay them offline for benchmarking, KV-cache hit analysis, and parallel-strategy comparison.

  • Core: scaffolding/execution_trace.py, replay.py, execution_scope.py, utils.py
  • Tooling: examples/scaffolding/trace_replay/run_trace_replay.py, metrics.py, an analysis/ package (aggregation, cache-hit, branch summary, etc.), plus a sample SWE-bench trace

B. New Agents / Controllers (new, all under contrib/)

  • Coder — sandboxed code-gen agent + SWE-bench integration
  • IterResearch — iterative research agent, ships with an apiary Python interpreter
  • TreeOfThoughtResearch — ToT-style research controller

Each agent comes with its own example runner and config.yaml.

C. MCP Server Reorganization

Promotes examples/scaffolding/contrib/mcp/examples/scaffolding/mcp/, drops the old websearch/, and adds new servers: coder/, fetch_webpage/, google_scholar/, google_search/, tavily_search/, wordllama/.

D. Open Deep Research Refactor

Updates to the existing open_deep_research module — primarily reworking message format and system-message caching to play nicely with the replay engine. Example entry point renamed to run_open_deep_research.py and gains a config.yaml.

E. Framework Plumbing

Light edits to existing scaffolding modules (scaffolding_llm.py, controller.py, task.py, worker.py, result.py, benchmark.py, task_collection.py) to wire in trace-capture hooks and replay-engine integration points.

F. Cleanup

The final commits revert local experiment residue (scheduler logging tweaks, pareto-experiment server hacks) and delete redundant scripts / configs.

III. Reviewer Take-aways

  1. Core footprint is tiny — 5 files, all in tensorrt_llm/serve/, all additive
  2. No changes to runtime internals — KV cache truncation reuses existing control-queue plumbing
  3. Scaffolding side is additive: new framework + opt-in contrib/ agents + MCP reorg. Existing users are unaffected
  4. Test coverage: only tests/test_tokenize_endpoint.py. The replay framework and new agents do not ship unit tests in this PR

Test Coverage

PR Checklist

Please review the following before submitting your PR:

  • PR description clearly explains what and why. If using CodeRabbit's summary, please make sure it makes sense.

  • PR Follows TRT-LLM CODING GUIDELINES to the best of your knowledge.

  • Test cases are provided for new code paths (see test instructions)

  • If PR introduces API changes, an appropriate PR label is added - either api-compatible or api-breaking. For api-breaking, include BREAKING in the PR title.

  • Any new dependencies have been scanned for license and vulnerabilities

  • CODEOWNERS updated if ownership changes

  • Documentation updated as needed

  • Update tava architecture diagram if there is a significant design change in PR.

  • The reviewers assigned automatically/manually are appropriate for the PR.

  • Please check this after reviewing the above items as appropriate for this PR.

GitHub Bot Help

To see a list of available CI bot commands, please comment /bot help.

@KleinBlueC
KleinBlueC requested review from a team as code owners May 21, 2026 08:14
@KleinBlueC
KleinBlueC requested a review from a team May 21, 2026 08:14
@KleinBlueC
KleinBlueC requested a review from a team as a code owner May 21, 2026 08:14
@coderabbitai

coderabbitai Bot commented May 21, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Adds Coder/Iter/Open-Deep/ToT agents and runners, multiple MCP servers (tavily, google, fetch_webpage, coder), execution tracing and replay with Pareto analyses/plots, executor decode-deferral and iteration-state logging, KV-retention defaults, benchmark wiring, config/docs updates, and minor build/ignore tweaks.

Changes

End-to-end agents, MCP, trace/replay, executor updates

Layer / File(s) Summary
End-to-end feature additions and wiring
tensorrt_llm/..., examples/scaffolding/..., .extra-llm-api-config.yml, cpp/..., pyproject.toml, .pre-commit-config.yaml, .gitignore
Implements new agents and MCP servers, execution trace/replay/plots, executor scheduling/observability and KV retention defaults, runners/benchmarks, and config/build/docs adjustments.

Sequence Diagram(s)

(skipped)

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

Suggested reviewers

  • venkywonka
  • laikhtewari
  • QiJune
  • joyang-nv
  • Superjomn
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

Due to the large number of review comments, Critical severity comments were prioritized as inline comments.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
examples/scaffolding/benchmarks/coder_benchmark.py (1)

193-204: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Shutdown path drops generation_worker, causing resource-leak risk.

create_coder_resources() returns generation_worker, but async_coder_benchmark() discards it and cleanup only shuts down MCP + LLM. Ensure generation_worker.shutdown() is always called.

Suggested fix
-async def cleanup_coder_resources(llm, mcp_worker):
+async def cleanup_coder_resources(llm, mcp_worker, generation_worker):
     """Cleanup Coder benchmark resources."""
     await mcp_worker.async_shutdown()
     await shutdown_llm(llm)
+    generation_worker.shutdown()
...
-    llm, mcp_worker, _ = await create_coder_resources(args)
+    llm, mcp_worker, generation_worker = await create_coder_resources(args)
...
-        await cleanup_coder_resources(llm, mcp_worker)
+        await cleanup_coder_resources(llm, mcp_worker, generation_worker)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/benchmarks/coder_benchmark.py` around lines 193 - 204,
The shutdown path currently discards the returned generation_worker from
create_coder_resources and never shuts it down; change the unpacking to capture
it (e.g., llm, mcp_worker, generation_worker = await
create_coder_resources(args)) and ensure generation_worker.shutdown() is invoked
in the finally block (either by calling await generation_worker.shutdown() there
or by extending cleanup_coder_resources to accept and shut down
generation_worker and calling that). Update references to
create_coder_resources, the local generation_worker variable, and
cleanup_coder_resources/run_coder_benchmark_core as needed so the worker is
always awaited and cleaned up.
🟡 Minor comments (17)
examples/scaffolding/contrib/Coder/run_coder.py-199-200 (1)

199-200: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Use explicit runtime validation instead of assert for output checks.

assert is not reliable for runtime error handling and can be optimized out. Raise a concrete exception when outputs are missing.

Suggested fix
-        assert result.outputs[0].text is not None
-        print("\nFinal output:\n" + result.outputs[0].text)
+        if not result.outputs or result.outputs[0].text is None:
+            raise RuntimeError("Coder run returned no text output.")
+        print("\nFinal output:\n" + result.outputs[0].text)

As per coding guidelines: “Use built-in Python exception types; use exceptions for error handling, not return values; … raise ValueError instead of assertions.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/contrib/Coder/run_coder.py` around lines 199 - 200,
Replace the runtime assertion with explicit validation: check that
result.outputs exists, has at least one item, and that result.outputs[0].text is
not None (or non-empty) and if the check fails raise a ValueError with a clear
message; update the block around result.outputs[0].text and the print call to
perform this validation before printing so missing outputs produce a concrete
exception instead of relying on assert.
examples/scaffolding/contrib/tree_of_thought_research/config.yaml-1-3 (1)

1-3: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Update stale runner labeling in this ToT config.

Comments still refer to IterResearch and run_iter_research.py, which is misleading for tree_of_thought_research.

Also applies to: 40-40

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/contrib/tree_of_thought_research/config.yaml` around
lines 1 - 3, Update the stale comments in the YAML header that reference
"IterResearch" and "run_iter_research.py": replace the project label with "Tree
of Thought Research" (or the canonical project name "tree_of_thought_research")
and update the runner command reference to the correct runner script (e.g.,
"run_tree_of_thought_research.py" or the actual runner used by this example).
Ensure both occurrences (the header comment and the runner comment) are updated
so the config's comments accurately describe how to pass the file to the MCP
servers and the correct runner.
examples/scaffolding/contrib/open_deep_research/README.md-11-12 (1)

11-12: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix config path resolution in MCP startup snippets.

After cd into each MCP directory, --config examples/scaffolding/... is no longer a valid relative path. Use a directory-relative config path or run from repo root.

Also applies to: 15-16, 19-20

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/contrib/open_deep_research/README.md` around lines 11 -
12, The startup snippets use an invalid repo-root relative config path in the
command "uv run tavily_search.py --config
examples/scaffolding/contrib/open_deep_research/config.yaml"; after you cd into
the MCP directory update the --config value to a directory-relative path (e.g.
--config ../../contrib/open_deep_research/config.yaml) or change the
instructions to run from the repo root, and apply the same replacement to the
other two occurrences noted (the snippets at lines 15-16 and 19-20).
examples/scaffolding/contrib/iter_research/README.md-6-7 (1)

6-7: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix the config path in MCP startup examples.

These commands cd into each tool directory, but still pass a repo-root-style --config path. That path won’t resolve from the new working directory. Use a relative path from the tool directory (or run commands from repo root without cd).

Also applies to: 10-11, 14-15

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/contrib/iter_research/README.md` around lines 6 - 7, The
example command cd's into examples/scaffolding/mcp/tavily_search but still uses
a repo-root style --config path that will not resolve; update the --config
argument in the uv run tavily_search.py invocation to a path relative to the
tool directory (e.g., ../../contrib/iter_research/config.yaml) or remove the cd
and run from the repo root, and make the same relative-path fix for the other
affected examples (lines 10-11 and 14-15) so the --config flag points to a valid
file from the current working directory.
examples/scaffolding/mcp/coder/README.md-7-17 (1)

7-17: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Tool list is missing python_interpreter.

The exposed tools section is currently incomplete and can mislead clients wiring against the documented interface.

Suggested doc fix
 - `update_plan`
+- `python_interpreter`
 - `think`
 - `complete_task`
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/mcp/coder/README.md` around lines 7 - 17, The README's
tool list is missing the python_interpreter tool; update the exposed tools
bullet list in the examples/scaffolding/mcp/coder/README.md to include
`python_interpreter` alongside `read_file`, `list_dir`, `grep_files`, `exec`,
`shell`, `update_plan`, `think`, and `complete_task` so documentation matches
the actual interface implemented (see the `python_interpreter` symbol in the
Coder tools). Ensure the tool name is spelled exactly `python_interpreter` and
placed consistently with the other bullets.
examples/scaffolding/trace_replay/analysis/branch_summary.py-5-10 (1)

5-10: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Replace en dashes with ASCII hyphens in the docstring.

This docstring contains ambiguous Unicode dash characters flagged by Ruff (RUF002), which can fail lint.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/trace_replay/analysis/branch_summary.py` around lines 5
- 10, The docstring in branch_summary.py uses Unicode en dashes (–) in the three
bullet descriptions for by_branch_root, by_branch_depth, and by_system_prompt;
replace those en dashes with ASCII hyphen-minus characters (-) in the docstring
bullets so the lines read "* ``by_branch_root`` - ...", "* ``by_branch_depth`` -
...", and "* ``by_system_prompt`` - ...", then save the file.
examples/scaffolding/trace_replay/analysis/__init__.py-35-60 (1)

35-60: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Sort __all__ to satisfy Ruff (RUF022).

__all__ is currently unsorted and will trip lint in strict setups.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/trace_replay/analysis/__init__.py` around lines 35 - 60,
The exported names list __all__ is unsorted and triggers Ruff RUF022; fix it by
alphabetically sorting the entries in the __all__ list (keep the exact string
names and capitalization intact), e.g., reorder the elements like
"ANNOTATED_TRACE_SUFFIX", "ANNOTATION_FIELDS", "ConversationSegments", ... so
the list is lexicographically sorted; update the __all__ assignment in this
module (search for the __all__ = [...] block) to the sorted sequence.
examples/scaffolding/trace_replay/analysis/blocks.py-27-27 (1)

27-27: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Sort _TokenNode.__slots__ to satisfy Ruff (RUF023).

The __slots__ tuple is not naturally sorted, which can trigger lint failures.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/trace_replay/analysis/blocks.py` at line 27, The
__slots__ tuple on _TokenNode is unsorted and triggers Ruff RUF023; update the
_TokenNode.__slots__ definition to list its slot names in sorted order (e.g.,
alphabetically) so the tuple is deterministic and lint-compliant, ensuring you
modify the __slots__ attribute in the _TokenNode class rather than other
symbols.
examples/scaffolding/trace_replay/README.md-30-56 (1)

30-56: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add a language tag to the fenced code block.

The code fence at this section is missing a language specifier, which triggers markdown lint (MD040).

Suggested fix
-```
+```text
 examples/scaffolding/trace_replay/
 ├── README.md                  -- this file
 ...
-```
+```
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/trace_replay/README.md` around lines 30 - 56, The fenced
code block in the README.md (the tree listing block) is missing a language tag
which triggers MD040; update the opening fence from ``` to an explicit language
tag such as ```text (or ```bash) in the README.md where the
examples/scaffolding/trace_replay/ tree is shown so the block is properly
recognized by markdown linters.
examples/scaffolding/trace_replay/analysis/io.py-1-11 (1)

1-11: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing NVIDIA copyright header.

All TensorRT-LLM source files must contain an NVIDIA copyright header. As per coding guidelines for **/*.py files.

Proposed fix: add copyright header
+# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 """Filesystem helpers: locate trace files, load/write JSON."""
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/trace_replay/analysis/io.py` around lines 1 - 11, Add
the required NVIDIA copyright header at the very top of this Python module
(before the module docstring and imports). Ensure the header matches the
project's standard Python file header used across other .py files and leave the
existing module docstring, imports, and constants (OUTPUT_SUFFIX,
ANNOTATED_TRACE_SUFFIX) unchanged; just prepend the canonical header text as the
first lines of the file.
examples/scaffolding/trace_replay/analysis/streams.py-1-18 (1)

1-18: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing NVIDIA copyright header.

All TensorRT-LLM source files must contain an NVIDIA copyright header. As per coding guidelines for **/*.py files.

Proposed fix: add copyright header
+# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 r"""Synthetic token streams + system-prompt registry.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/trace_replay/analysis/streams.py` around lines 1 - 18,
This file is missing the required NVIDIA copyright header; add the standard
NVIDIA copyright/license header as the very first lines of
examples/scaffolding/trace_replay/analysis/streams.py (before the module
docstring) so it applies to the whole module, ensuring the header format matches
other TensorRT-LLM Python files and includes the correct year/owner and license
identifier; no code changes to SystemPromptRegistry or ConversationSegments are
needed—only prepend the canonical NVIDIA header block to the top of the file.
examples/scaffolding/trace_replay/analysis/compute_cache_hit_trace.py-1-19 (1)

1-19: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing NVIDIA copyright header.

All TensorRT-LLM source files must contain an NVIDIA copyright header with the year of latest modification, using the Apache 2.0 license text. As per coding guidelines for **/*.py files.

Proposed fix: add copyright header
+# Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 r"""CLI: compute the ideal prefix KV-cache hit upper bound for scaffolding traces.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/trace_replay/analysis/compute_cache_hit_trace.py` around
lines 1 - 19, Add the required NVIDIA copyright header with the correct year of
latest modification and the Apache 2.0 license boilerplate at the very top of
the module file compute_cache_hit_trace.py (before the module docstring),
matching the project's standard Python header format used across other `*.py`
files.
examples/scaffolding/trace_replay/pareto/trace_replay_pareto_aggregate.py-43-43 (1)

43-43: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Unused import: defaultdict.

The defaultdict import from collections is never used in this file.

Proposed fix
-from collections import defaultdict
 from datetime import datetime, timezone
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/trace_replay/pareto/trace_replay_pareto_aggregate.py` at
line 43, Remove the unused import "defaultdict" from the top-level import
statement in this file; locate the line that reads "from collections import
defaultdict" and delete it so only necessary imports remain (no other code
changes required).
examples/scaffolding/trace_replay/pareto/trace_replay_client.py-264-306 (1)

264-306: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

File handle fp is not closed on exception before the try block.

If an exception occurs between opening the file at line 268 and entering the try block at line 278, the file handle will leak. The finally block at line 303 only runs if we reach line 278.

Proposed fix: use context manager or move open inside try
     output_path.parent.mkdir(parents=True, exist_ok=True)
-    fp = open(output_path, "w", encoding="utf-8")
 
     def _write_events(events):
         if not events:
             return
         for ev in events:
             fp.write(_json.dumps(ev) + "\n")
         fp.flush()
 
     total = 0
+    fp = open(output_path, "w", encoding="utf-8")
     try:
         while not stop_event.is_set():
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/trace_replay/pareto/trace_replay_client.py` around lines
264 - 306, The file handle fp is opened before the try so it can leak if an
exception occurs before entering the try; move the open(output_path, "w",
encoding="utf-8") into the try (or wrap it with a context manager) so fp is
created inside the try/finally scope and guaranteed to be closed in the existing
finally, and keep the helper _write_events using that fp (or accept fp as a
captured variable) so the existing finally block that calls await
asyncio.to_thread(fp.close) always runs.
tensorrt_llm/scaffolding/contrib/Coder/prompts.py-167-245 (1)

167-245: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Normalize ambiguous unicode punctuation in prompt literals.

These lines contain smart quotes/dashes (, , ) flagged by Ruff RUF001. Replacing them with ASCII equivalents avoids lint noise or CI failures.

Also applies to: 274-276

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tensorrt_llm/scaffolding/contrib/Coder/prompts.py` around lines 167 - 245,
There are smart punctuation characters (’ – ‑) inside the multi-line prompt
string literals in `tensorrt_llm/scaffolding/contrib/Coder/prompts.py` (the
large assistant-guidelines/prompt templates and the later prompt strings around
the subsequent examples); replace all smart quotes and dashes with ASCII
equivalents (`'`, `-`, `--` or `"` as appropriate) in those prompt/template
variables so the literals contain only standard ASCII punctuation and silence
RUF001 lint warnings. Locate the problematic prompt/template string variables in
this module (the main assistant guideline/multi-line prompt block and the later
prompt templates referenced again near the end of the file) and perform a global
replace of `’`→`'`, `–`→`-`, and `‑`→`-` inside those string literals only.
tensorrt_llm/scaffolding/contrib/open_deep_research/README.md-52-64 (1)

52-64: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

The MCP command examples use config paths that won’t resolve from the shown directories.

Because each snippet starts with cd examples/scaffolding/mcp/..., --config examples/scaffolding/... is not cwd-correct.

📝 Suggested fix
 cd examples/scaffolding/mcp/tavily_search && uv run tavily_search.py \
-    --config examples/scaffolding/contrib/open_deep_research/config.yaml
+    --config ../../contrib/open_deep_research/config.yaml
@@
 cd examples/scaffolding/mcp/google_scholar && uv run google_scholar.py \
-    --config examples/scaffolding/contrib/open_deep_research/config.yaml
+    --config ../../contrib/open_deep_research/config.yaml
@@
 cd examples/scaffolding/mcp/fetch_webpage && uv run fetch_webpage.py \
-    --config examples/scaffolding/contrib/open_deep_research/config.yaml
+    --config ../../contrib/open_deep_research/config.yaml
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tensorrt_llm/scaffolding/contrib/open_deep_research/README.md` around lines
52 - 64, The example MCP run commands in README.md use config paths that are
incorrect for the shown cwd; update each command (the ones that run
tavily_search.py, google_scholar.py and fetch_webpage.py) so the --config path
is relative to the current directory (use
../contrib/open_deep_research/config.yaml instead of
examples/scaffolding/contrib/open_deep_research/config.yaml) so the config
resolves when you first run cd examples/scaffolding/mcp/<...> and then uv run
<script>.
tensorrt_llm/scaffolding/contrib/tree_of_thought_research/README.md-25-27 (1)

25-27: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix the example config path for ToT runner.

The command points to iter_research/config.yaml; this README is for tree_of_thought_research.

Proposed fix
 python examples/scaffolding/contrib/tree_of_thought_research/run_tot_research.py \
-  --config examples/scaffolding/contrib/iter_research/config.yaml \
+  --config examples/scaffolding/contrib/tree_of_thought_research/config.yaml \
   --prompt "Use current sources to compare TensorRT-LLM and vLLM for serving LLMs."
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tensorrt_llm/scaffolding/contrib/tree_of_thought_research/README.md` around
lines 25 - 27, Update the example command in the README so the --config path
points to the tree_of_thought_research config instead of iter_research; change
the referenced config from
"examples/scaffolding/contrib/iter_research/config.yaml" to the corresponding
"examples/scaffolding/contrib/tree_of_thought_research/config.yaml" used by the
run_tot_research.py example so the --config passed to run_tot_research.py
matches this README's topic.
🧹 Nitpick comments (6)
examples/scaffolding/contrib/open_deep_research/run_open_deep_research.py (1)

30-67: ⚡ Quick win

Add explicit return types for function definitions.

parse_arguments and main should use explicit return annotations (argparse.Namespace / None) per project typing requirements.

As per coding guidelines, "Static type checking via mypy is opt-in by submodule and highly recommended; always annotate Python functions with return types (use None if no return); make return type explicit".

Also applies to: 107-107

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/contrib/open_deep_research/run_open_deep_research.py`
around lines 30 - 67, Add explicit return type annotations to the function
definitions: annotate parse_arguments() to return argparse.Namespace and
annotate main() to return None; update the def lines for parse_arguments and
main accordingly (no other logic changes) so the module complies with the
project's typing guideline requiring explicit function return types.
examples/scaffolding/contrib/iter_research/run_iter_research.py (1)

23-46: ⚡ Quick win

Add explicit return type annotations to script functions.

parse_arguments and main should declare return types to match the repository typing rule.

As per coding guidelines, "Static type checking via mypy is opt-in by submodule and highly recommended; always annotate Python functions with return types (use None if no return); make return type explicit".

Also applies to: 86-87

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@examples/scaffolding/contrib/iter_research/run_iter_research.py` around lines
23 - 46, Add explicit return type annotations: update parse_arguments to declare
-> argparse.Namespace (or import Namespace and use -> Namespace) and update main
to declare -> None; adjust any type imports (e.g., from argparse import
Namespace or import typing) if necessary to satisfy type checkers, and ensure
the annotated signatures are used where parse_arguments() and main() are defined
(functions named parse_arguments and main).
tensorrt_llm/scaffolding/contrib/open_deep_research/supervisor.py (1)

143-147: ⚡ Quick win

Demote dict-handling concern in open_deep_research/supervisor.py: the scaffold treats tool_call.function.arguments as a JSON string.
MCPCallTask receives tool_call.function.arguments as-is and the MCP worker executes json.loads(task.args); if arguments were a Python dict, it would fail in that path as well, so the TypeError scenario is unlikely in this codebase. Consider aligning supervisor with the existing _parse_tool_arguments helper only for consistency/future-proofing.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tensorrt_llm/scaffolding/contrib/open_deep_research/supervisor.py` around
lines 143 - 147, The supervisor currently blindly json.loads
tool_call.function.arguments which duplicates parsing logic and may mis-handle
dicts; update the code in open_deep_research/supervisor.py to use the shared
parsing helper (_parse_tool_arguments) or a small wrapper that accepts either a
JSON string or a dict and returns a dict, so MCPCallTask still receives the
normalized arguments; locate the json.loads usage around
tool_call.function.arguments and replace it with a call to _parse_tool_arguments
(or equivalent) to ensure consistent parsing with MCPCallTask.
tensorrt_llm/scaffolding/replay.py (1)

520-537: 💤 Low value

Add strict=True to zip() calls in drop verification.

The conv_ids, prefixes, and keeps lists are built in parallel from the same _conversation_token_ids iteration (lines 482-491), so they should always match.

♻️ Suggested fix
-            for conv_id, prefix, keep in zip(conv_ids, prefixes, keeps):
+            for conv_id, prefix, keep in zip(conv_ids, prefixes, keeps, strict=True):

Apply the same fix at line 566.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tensorrt_llm/scaffolding/replay.py` around lines 520 - 537, The parallel
iteration over conv_ids, prefixes, and keeps in the drop verification uses
zip(...) which can silently truncate mismatched iterables; update the zip calls
that iterate these three lists (the one that creates probe GenerationTask with
input_tokens=prefix and records via self._drop_path_stats.record, and the
similar one later) to use zip(..., strict=True) so any length mismatch raises
immediately; locate uses of zip(conv_ids, prefixes, keeps) around the probe
creation and the later drop-verification block and add strict=True to each.
tensorrt_llm/scaffolding/contrib/tree_of_thought_research/tot_research_controllers.py (1)

193-195: 💤 Low value

Add strict=True to zip() for length validation.

The candidates and eval_tasks lists are built in lockstep (lines 183-186), so they should always match. Adding strict=True will catch any future bug that breaks this invariant.

♻️ Suggested fix
-            for branch, eval_task in zip(candidates, eval_tasks):
+            for branch, eval_task in zip(candidates, eval_tasks, strict=True):
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@tensorrt_llm/scaffolding/contrib/tree_of_thought_research/tot_research_controllers.py`
around lines 193 - 195, The loop that pairs candidates and eval_tasks (for
branch, eval_task in zip(candidates, eval_tasks)) silently allows length
mismatches; update that zip call to zip(candidates, eval_tasks, strict=True) to
enforce the invariant and surface any future mismatch bugs, keeping the body
that sets branch.evaluation = eval_task.last_assistant_content() and
branch.score = self._parse_score(branch.evaluation) unchanged.
tensorrt_llm/scaffolding/controller.py (1)

44-47: 💤 Low value

Consider adding strict=True to zip().

The three lists are caller-provided and should always match in length. Adding strict=True would catch mismatches early.

♻️ Suggested fix
-        for controller, tasks, kwargs in zip(controllers, tasks_list,
-                                             kwargs_list):
+        for controller, tasks, kwargs in zip(controllers, tasks_list,
+                                             kwargs_list, strict=True):
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tensorrt_llm/scaffolding/controller.py` around lines 44 - 47, The loop over
controllers, tasks_list, and kwargs_list uses zip(controllers, tasks_list,
kwargs_list) which can silently truncate mismatched lengths; update that zip
call to zip(controllers, tasks_list, kwargs_list, strict=True) to force a
ValueError when lengths differ so mismatches are caught early; this change
affects the loop that builds self.sub_gens by calling controller.process(tasks,
**kwargs) and will surface caller errors immediately.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 1d50885d-31d4-4dfc-8375-1055cdce59c5

📥 Commits

Reviewing files that changed from the base of the PR and between b7c2303 and 72f6b4c.

⛔ Files ignored due to path filters (2)
  • examples/scaffolding/contrib/mcp/weather/uv.lock is excluded by !**/*.lock
  • examples/scaffolding/contrib/open_deep_research/TavilyMCP/uv.lock is excluded by !**/*.lock
📒 Files selected for processing (124)
  • .extra-llm-api-config.yml
  • .gitignore
  • .pre-commit-config.yaml
  • cpp/tensorrt_llm/kernels/cutlass_kernels/CMakeLists.txt
  • examples/scaffolding/benchmarks/__main__.py
  • examples/scaffolding/benchmarks/coder_benchmark.py
  • examples/scaffolding/contrib/Coder/README.md
  • examples/scaffolding/contrib/Coder/run_coder.py
  • examples/scaffolding/contrib/Coder/run_swebench.py
  • examples/scaffolding/contrib/iter_research/README.md
  • examples/scaffolding/contrib/iter_research/config.yaml
  • examples/scaffolding/contrib/iter_research/run_iter_research.py
  • examples/scaffolding/contrib/mcp/README.md
  • examples/scaffolding/contrib/mcp/websearch/.env
  • examples/scaffolding/contrib/mcp/websearch/README.md
  • examples/scaffolding/contrib/mcp/websearch/main.py
  • examples/scaffolding/contrib/mcp/websearch/pyproject.toml
  • examples/scaffolding/contrib/mcp/websearch/websearch.py
  • examples/scaffolding/contrib/open_deep_research/README.md
  • examples/scaffolding/contrib/open_deep_research/TavilyMCP/README.md
  • examples/scaffolding/contrib/open_deep_research/TavilyMCP/pyproject.toml
  • examples/scaffolding/contrib/open_deep_research/TavilyMCP/travily.py
  • examples/scaffolding/contrib/open_deep_research/config.yaml
  • examples/scaffolding/contrib/open_deep_research/run_deep_research.py
  • examples/scaffolding/contrib/open_deep_research/run_open_deep_research.py
  • examples/scaffolding/contrib/tree_of_thought_research/config.yaml
  • examples/scaffolding/contrib/tree_of_thought_research/run_tot_research.py
  • examples/scaffolding/mcp/README.md
  • examples/scaffolding/mcp/coder/README.md
  • examples/scaffolding/mcp/coder/coder_mcp.py
  • examples/scaffolding/mcp/coder/pyproject.toml
  • examples/scaffolding/mcp/e2b/.env.example
  • examples/scaffolding/mcp/e2b/README.md
  • examples/scaffolding/mcp/e2b/e2bserver.py
  • examples/scaffolding/mcp/e2b/main.py
  • examples/scaffolding/mcp/e2b/pyproject.toml
  • examples/scaffolding/mcp/fetch_webpage/__init__.py
  • examples/scaffolding/mcp/fetch_webpage/fetch_webpage.py
  • examples/scaffolding/mcp/fetch_webpage/pyproject.toml
  • examples/scaffolding/mcp/fetch_webpage/visit_controller.py
  • examples/scaffolding/mcp/google_scholar/google_scholar.py
  • examples/scaffolding/mcp/google_scholar/pyproject.toml
  • examples/scaffolding/mcp/google_search/google_search.py
  • examples/scaffolding/mcp/google_search/pyproject.toml
  • examples/scaffolding/mcp/mcptest.py
  • examples/scaffolding/mcp/tavily_search/__init__.py
  • examples/scaffolding/mcp/tavily_search/pyproject.toml
  • examples/scaffolding/mcp/tavily_search/tavily_controller.py
  • examples/scaffolding/mcp/tavily_search/tavily_search.py
  • examples/scaffolding/mcp/weather/pyproject.toml
  • examples/scaffolding/mcp/weather/weather.py
  • examples/scaffolding/mcp/wordllama/README.md
  • examples/scaffolding/mcp/wordllama/main.py
  • examples/scaffolding/mcp/wordllama/pyproject.toml
  • examples/scaffolding/mcp/wordllama/wordllama_serve.py
  • examples/scaffolding/trace_replay/README.md
  • examples/scaffolding/trace_replay/analysis/README.md
  • examples/scaffolding/trace_replay/analysis/__init__.py
  • examples/scaffolding/trace_replay/analysis/aggregation.py
  • examples/scaffolding/trace_replay/analysis/annotate.py
  • examples/scaffolding/trace_replay/analysis/blocks.py
  • examples/scaffolding/trace_replay/analysis/branch_summary.py
  • examples/scaffolding/trace_replay/analysis/cache_hit.py
  • examples/scaffolding/trace_replay/analysis/compute_cache_hit_trace.py
  • examples/scaffolding/trace_replay/analysis/io.py
  • examples/scaffolding/trace_replay/analysis/streams.py
  • examples/scaffolding/trace_replay/metrics.py
  • examples/scaffolding/trace_replay/pareto/README.md
  • examples/scaffolding/trace_replay/pareto/_common.py
  • examples/scaffolding/trace_replay/pareto/trace_replay_client.py
  • examples/scaffolding/trace_replay/pareto/trace_replay_pareto_aggregate.py
  • examples/scaffolding/trace_replay/plots/plot_trace_replay_agent_pareto.py
  • examples/scaffolding/trace_replay/plots/plot_trace_replay_job_pareto.py
  • examples/scaffolding/trace_replay/plots/plot_trace_replay_per_call_hit_curves.py
  • examples/scaffolding/trace_replay/plots/plot_trace_replay_session_hit_pareto.py
  • examples/scaffolding/trace_replay/plots/plot_trace_replay_session_hit_vs_time.py
  • examples/scaffolding/trace_replay/plots/plot_trace_replay_token_pareto.py
  • examples/scaffolding/trace_replay/run_trace_replay.py
  • examples/scaffolding/trace_replay/trace_example/matplotlib__matplotlib-23412/matplotlib__matplotlib-23412.full.trace.json
  • examples/scaffolding/trace_replay/trace_example/matplotlib__matplotlib-23412/matplotlib__matplotlib-23412.trace.json
  • pyproject.toml
  • tensorrt_llm/_torch/pyexecutor/py_executor.py
  • tensorrt_llm/_torch/pyexecutor/scheduler/adp_router.py
  • tensorrt_llm/_torch/pyexecutor/scheduler/scheduler.py
  • tensorrt_llm/_torch/pyexecutor/scheduler/scheduler_v2.py
  • tensorrt_llm/llmapi/llm.py
  • tensorrt_llm/llmapi/llm_args.py
  • tensorrt_llm/scaffolding/__init__.py
  • tensorrt_llm/scaffolding/benchmark.py
  • tensorrt_llm/scaffolding/contrib/Coder/__init__.py
  • tensorrt_llm/scaffolding/contrib/Coder/coder.py
  • tensorrt_llm/scaffolding/contrib/Coder/prompts.py
  • tensorrt_llm/scaffolding/contrib/Coder/swebench.py
  • tensorrt_llm/scaffolding/contrib/Coder/tools.py
  • tensorrt_llm/scaffolding/contrib/iter_research/README.md
  • tensorrt_llm/scaffolding/contrib/iter_research/__init__.py
  • tensorrt_llm/scaffolding/contrib/iter_research/agent.py
  • tensorrt_llm/scaffolding/contrib/iter_research/prompts.py
  • tensorrt_llm/scaffolding/contrib/iter_research/utils.py
  • tensorrt_llm/scaffolding/contrib/open_deep_research/README.md
  • tensorrt_llm/scaffolding/contrib/open_deep_research/prompts.py
  • tensorrt_llm/scaffolding/contrib/open_deep_research/researcher.py
  • tensorrt_llm/scaffolding/contrib/open_deep_research/supervisor.py
  • tensorrt_llm/scaffolding/contrib/open_deep_research/tools.py
  • tensorrt_llm/scaffolding/contrib/tree_of_thought_research/README.md
  • tensorrt_llm/scaffolding/contrib/tree_of_thought_research/__init__.py
  • tensorrt_llm/scaffolding/contrib/tree_of_thought_research/prompts.py
  • tensorrt_llm/scaffolding/contrib/tree_of_thought_research/tools.py
  • tensorrt_llm/scaffolding/contrib/tree_of_thought_research/tot_research_controllers.py
  • tensorrt_llm/scaffolding/controller.py
  • tensorrt_llm/scaffolding/execution_scope.py
  • tensorrt_llm/scaffolding/execution_trace.py
  • tensorrt_llm/scaffolding/replay.py
  • tensorrt_llm/scaffolding/result.py
  • tensorrt_llm/scaffolding/scaffolding_llm.py
  • tensorrt_llm/scaffolding/task.py
  • tensorrt_llm/scaffolding/task_collection.py
  • tensorrt_llm/scaffolding/utils.py
  • tensorrt_llm/scaffolding/worker.py
  • tensorrt_llm/serve/openai_protocol.py
  • tensorrt_llm/serve/openai_server.py
  • tensorrt_llm/serve/postprocess_handlers.py
  • tensorrt_llm/serve/resource_governor.py
  • tests/test_tokenize_endpoint.py
💤 Files with no reviewable changes (10)
  • examples/scaffolding/contrib/open_deep_research/TavilyMCP/pyproject.toml
  • examples/scaffolding/contrib/mcp/README.md
  • examples/scaffolding/contrib/mcp/websearch/.env
  • examples/scaffolding/contrib/open_deep_research/TavilyMCP/README.md
  • examples/scaffolding/contrib/mcp/websearch/pyproject.toml
  • .gitignore
  • examples/scaffolding/contrib/open_deep_research/run_deep_research.py
  • examples/scaffolding/contrib/mcp/websearch/main.py
  • examples/scaffolding/contrib/open_deep_research/TavilyMCP/travily.py
  • examples/scaffolding/contrib/mcp/websearch/websearch.py

Comment thread cpp/tensorrt_llm/kernels/cutlass_kernels/CMakeLists.txt Outdated
Comment thread tensorrt_llm/_torch/pyexecutor/scheduler/adp_router.py Outdated
Comment thread tensorrt_llm/_torch/pyexecutor/scheduler/scheduler.py Outdated
Comment thread tensorrt_llm/_torch/pyexecutor/scheduler/scheduler_v2.py Outdated
Comment thread tensorrt_llm/_torch/pyexecutor/py_executor.py Outdated
Comment thread tensorrt_llm/llmapi/llm_args.py Outdated
Comment thread tensorrt_llm/serve/openai_protocol.py
Comment thread tensorrt_llm/serve/postprocess_handlers.py Outdated
Comment thread .extra-llm-api-config.yml Outdated
Comment thread .gitignore
@KleinBlueC
KleinBlueC force-pushed the feat/scaffolding-trace-replay branch from 5000d85 to 8ac0979 Compare May 25, 2026 12:41
Boreas618 and others added 13 commits May 25, 2026 06:45
Signed-off-by: Ryan Sun <rysun@nvidia.com>
(cherry picked from commit f3869a8)
Signed-off-by: Yi Sun <yisun0618@gmail.com>
(cherry picked from commit fc3bedb)
Signed-off-by: Yi Sun <yisun0618@gmail.com>
(cherry picked from commit beef3b4)
Signed-off-by: Yi Sun <yisun0618@gmail.com>
(cherry picked from commit 4d4197f)
(cherry picked from commit f696ee1)
Signed-off-by: Fred Wei <20514172+WeiHaocheng@users.noreply.github.com>
(cherry picked from commit 1f3d60b)
Signed-off-by: Fred Wei <20514172+WeiHaocheng@users.noreply.github.com>
Signed-off-by: Yi Sun <yisun0618@gmail.com>
(cherry picked from commit 07445f8)
Signed-off-by: Yi Sun <yisun0618@gmail.com>
(cherry picked from commit 1f5410d)
…fy scaffolding tracer

(cherry picked from commit a1e77ac)
Signed-off-by: Fred Wei <20514172+WeiHaocheng@users.noreply.github.com>
(cherry picked from commit f1b9e39)
Signed-off-by: Fred Wei <20514172+WeiHaocheng@users.noreply.github.com>
Signed-off-by: Yi Sun <yisun0618@gmail.com>
(cherry picked from commit c0c020b)
Signed-off-by: Yi Sun <yisun0618@gmail.com>
(cherry picked from commit a950614)
Signed-off-by: kleinc <kleinc@nvidia.com>
(cherry picked from commit 5d1fc08)
@KleinBlueC

Copy link
Copy Markdown
Contributor Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #58580 [ run ] triggered by Bot. Commit: 1a206bb Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #58580 [ run ] completed with state FAILURE. Commit: 1a206bb
/LLM/main/L0_MergeRequest_PR pipeline #47177 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

CI Agent Failure Analysis

Link to invocation

The server registers a RequestValidationError handler that renders
validation failures as HTTP 400 with a {"error": ...} envelope (not the
FastAPI default 422), matching existing client/test contracts. The
tokenize end-to-end test wrongly asserted 422; fix it to expect 400.

Signed-off-by: KleinBlueC <102355066+KleinBlueC@users.noreply.github.com>
Signed-off-by: KleinBlueC <102355066+KleinBlueC@users.noreply.github.com>
@KleinBlueC

Copy link
Copy Markdown
Contributor Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #58746 [ run ] triggered by Bot. Commit: e18ea37 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #58746 [ run ] completed with state FAILURE. Commit: e18ea37
/LLM/main/L0_MergeRequest_PR pipeline #47328 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

CI Agent Failure Analysis

Link to invocation

ChatWithMCPController now reads tool_call.id when creating MCPCallTask,
but the test's dummy ToolCall only carried a function attribute. The
resulting AttributeError was swallowed by the ScaffoldingLlm request
handler, so test_scaffolding_with_chat_mcp_controller failed on the
pre-seeded empty ScaffoldingOutput instead of surfacing the error.

Signed-off-by: KleinBlueC <102355066+KleinBlueC@users.noreply.github.com>
@KleinBlueC

Copy link
Copy Markdown
Contributor Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #58799 [ run ] triggered by Bot. Commit: 1586d38 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #58799 [ run ] completed with state DISABLED
Pipeline is freezed and top-1 instance is under maintenance.

Link to invocation

@KleinBlueC

Copy link
Copy Markdown
Contributor Author

/bot run --disable-fail-fast

1 similar comment

Copy link
Copy Markdown
Collaborator

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #58832 [ run ] triggered by Bot. Commit: 1586d38 Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #58832 [ run ] completed with state SUCCESS. Commit: 1586d38
/LLM/main/L0_MergeRequest_PR pipeline #47385 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

CI Agent Failure Analysis

Link to invocation

@KleinBlueC

Copy link
Copy Markdown
Contributor Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #58853 [ run ] triggered by Bot. Commit: 328a4fd Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #58853 [ run ] completed with state SUCCESS. Commit: 328a4fd
/LLM/main/L0_MergeRequest_PR pipeline #47404 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

CI Agent Failure Analysis

Link to invocation

@KleinBlueC

Copy link
Copy Markdown
Contributor Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #58958 [ run ] triggered by Bot. Commit: 328a4fd Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #58958 [ run ] completed with state SUCCESS. Commit: 328a4fd
/LLM/main/L0_MergeRequest_PR pipeline #47490 completed with status: 'FAILURE'

CI Report

⚠️ Action Required:

  • Please check the failed tests and fix your PR
  • If you cannot view the failures, ask the CI triggerer to share details
  • Once fixed, request an NVIDIA team member to trigger CI again

CI Agent Failure Analysis

Link to invocation

@KleinBlueC

Copy link
Copy Markdown
Contributor Author

/bot run --disable-fail-fast

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #58976 [ run ] triggered by Bot. Commit: 328a4fd Link to invocation

@tensorrt-cicd

Copy link
Copy Markdown
Collaborator

PR_Github #58976 [ run ] completed with state SUCCESS. Commit: 328a4fd
/LLM/main/L0_MergeRequest_PR pipeline #47507 completed with status: 'SUCCESS'

CI Report

Link to invocation

@WeiHaocheng
WeiHaocheng enabled auto-merge (squash) July 13, 2026 14:35

@QiJune QiJune left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@WeiHaocheng
WeiHaocheng merged commit 5ec6f56 into NVIDIA:main Jul 14, 2026
8 checks passed
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.

7 participants