Skip to content

Fix what the LangChain receiver and plugin lost before 0.6.0 - #83

Merged
wu-sheng merged 2 commits into
mainfrom
fix/langchain-review
Oct 18, 2026
Merged

wu-sheng merged 2 commits into
mainfrom
fix/langchain-review

Conversation

@wu-sheng

Copy link
Copy Markdown
Member

Fixes from the release review of 0.6.0 for the LangChain receiver and the LangChain plugin.

The receiver and collector

  • A run's arrivals in one request are read together. A completion that came before its start in one multipart
    request lost its answer and its provider body, and a failed tool could be joined to the wrong call. Every arrival of
    a run is now merged (earlier start, later end), and a response lands after its request even when it came first.
    Neither LangSmith client measured sends that order; a hand-written one can.
  • A run named only by its path. LangSmith JS with autoBatchTracing: false sends PATCH /runs/{id} with no id in
    the body, which was refused with 400, so every run's end was lost. The id is taken from the path; a body id that
    disagrees is refused. Receiver and collector share one rule.
  • A model call traced on its own. A root chat model run's inputs.messages is a list of lists, which the reader
    took for a flat list, so the person's question did not land as external input.
  • Pending trace memory. A long-running trace kept every descendant run id for ever. A trace now forgets a run when
    the run is forgotten, keeping the runs a remembered run ran inside.

The plugin

  • Which project a tool's changes are filed under. The plugin took the project from the environment, while a
    tracer given project_name put the run under another one, so changes landed under the wrong conversation. The plugin
    now sends a tool's begin record once both it and the tracer have been told of the tool's start, with the project of
    the tracer that traces the tool's run. A tool no tracer traces, or traced with tracing turned off, records nothing,
    since there is no run to join its changes to. The limits of what it can tell are on the plugin's setup page.
  • CI installs langchain-core and langsmith at the versions the capture harness measured, so these tests run there.

Checked

  • make check passes; the plugin's 27 tests pass with LangChain installed. Every collector test lands and parses
    twice, and each guard was proven by reverting it.

An update written before its run's start in one request was completed
only from the arrivals before it. It had no kind, landed as a graph's own
run, and a model call's answer and response body were lost. Every arrival
of a request is now remembered before any is completed. A run's arrivals
in a request are read together, with the earlier start and the later end,
so a failed tool is not joined to a call the model made after the tool
failed. A response body lands after its run's request, so its reply is
read against that request instead of saying there was none.

PATCH /runs/{id} with a body that carries no id was refused by the
receiver and by the collector. LangSmith JS 0.10.8 sends its updates so
when it does not batch, so none of the runs it traced finished. The run is
now the one the path names, and a body that names another run is refused.
The receiver reads a single run by the collector's own rule.

A chat model at the root of its trace holds its messages as a list per
prompt. They were read as one flat list, so the question never opened the
conversation, and with provider bodies off it was not landed. A model
run's messages are now read in both forms.

A trace kept every run it ever saw while any run of it kept arriving, past
the day and the 50,000 runs that bound what is remembered, and every
request saved them all again. A trace now forgets a run when the run is
forgotten, and keeps the runs a remembered run ran inside.

The LangChain plugin filed a tool's changes under the project the
environment names, while a tracer given a project in code sends the run
to that project. It now watches LangChain's tracer start each tool run,
keeping the start a coroutine function when it is one, and reads the
project from the run. The begin, whose scan comes before the tool runs,
is sent by whichever of the tracer and the plugin is told second, which
LangChain does before the tool runs, and once sent no other begin is sent
for the run. A begin whose tracer never comes, as when the tool is
cancelled between the two, is dropped after ten minutes. A tool no tracer
traces, or one traced with tracing turned off, records nothing. A tracer
whose start cannot be wrapped is left alone, and the plugin then files
changes under the environment's project.

CI installs langchain-core and langsmith, at the versions the capture
harness measured, before the shim tests, so the tests of which project a
traced run belongs to run there instead of skipping.
@wu-sheng wu-sheng added this to the 0.6.0 milestone Oct 18, 2026
@wu-sheng
wu-sheng merged commit 57444f1 into main Oct 18, 2026
24 checks passed
@wu-sheng
wu-sheng deleted the fix/langchain-review branch October 18, 2026 15:24
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