Heads up This site is currently under heavy development.
← all tools
◆ AI OBSERVABILITY

LangSmith

snapshot-20260831 commercial

LangSmith is a platform for debugging, testing, and monitoring LLM applications built with LangChain.

Summary

LangSmith is a platform for debugging, testing, and monitoring LLM applications built with LangChain.

Release history

  1. docs update Aug 26, 2026 · issue 008

    LangSmith SaaS (GCP-hosted) can now export to S3 via AWS IAM role assumption, eliminating static credential storage.

    └──▷ USE IT
    Bootstrap the required AWS trust policy for GCP-hosted LangSmith to assume a role for S3 export — avoids storing long-lived AWS credentials in LangSmith.
    hcl
    resource "aws_iam_role" "langsmith_bulk_export" {
      name                 = "langsmith-bulk-export"
      max_session_duration = 43200
      assume_role_policy = jsonencode({
        Principal = {
          Federated = "accounts.google.com"
        }
        Action = "sts:AssumeRoleWithWebIdentity"
        Condition = {
          StringEquals = {
            "accounts.google.com:oaud" = "langsmith-bulk-export"
            "accounts.google.com:sub"  = [
              "110136955440523778103",
              "116331607438151298187",
              "115251468294701876731"
            ]
          }
        }
      })
    }
    • Adds AWS IAM role assumption support for S3 bulk-export destinations on GCP-hosted LangSmith SaaS, allowing credential-free exports using a trusted AWS role ARN instead of static AWS credentials.
    • Supports switching an existing S3 export destination between static credentials and IAM role assumption without recreating the destination.
  2. docs update Aug 26, 2026 · issue 008

    LangSmith lets you add threads directly to a dataset from the UI.

    • Adds the ability to add threads to a dataset from the LangSmith UI.
  3. docs update Aug 26, 2026 · issue 008

    LangSmith adds a Chat interface on the Engine page to investigate detected issues and linked traces via natural language.

    └──▷ HOW TO FIND IT
    When triaging flagged traces in LangSmith Engine, open Chat to quickly understand a detected issue without manually inspecting each linked trace.
    📍In LangSmith, go to Engine › (select an issue) › Chat, then ask 'What went wrong?' or 'Explain the proposed fix'.
    • New Chat interface on the Engine page lets practitioners ask natural-language questions about detected issues and their linked traces, such as 'What went wrong?', 'Why was this flagged?', 'Explain the proposed fix', 'What are my most pressing issues?', and 'How many new issues do I have?'
  4. docs update Aug 25, 2026 · issue 007

    LangSmith S3 export destinations now support switching between static credentials and AWS IAM role assumption via PATCH.

    └──▷ TRY IT
    Switch an existing S3 export destination from static credentials to IAM role assumption so no long-lived keys are stored in LangSmith.
    $ curl -X PATCH https://api.smith.langchain.com/api/v1/export-destinations/<destination_id> \
      -H 'Content-Type: application/json' \
      -H 'X-API-Key: <your_api_key>' \
      -d '{"aws_role_arn": "arn:aws:iam::123456789012:role/LangSmithBulkExportRole"}'
    • Adds aws_role_arn field to the PATCH body for S3 export destinations, enabling LangSmith to assume an AWS IAM role instead of storing static credentials — available on GCP SaaS deployments only.
    • Switching authentication modes (static credentials ↔ IAM role assumption) is now possible without recreating the destination: supplying aws_role_arn clears stored credentials, and supplying static credentials clears the stored role ARN.
    • LangSmith validates any authentication-mode switch with a test write to the destination bucket before saving, returning an error if the new configuration lacks sufficient write permissions.
  5. snapshot-20260831 Aug 10, 2026 · issue 012
    └──▷ TRY IT
    Test a multi-turn thread evaluator against a real conversation before saving it, to confirm it grades correctly on live thread data.
    $ curl -X POST 'https://<your-langsmith-host>/runs/rules/validate' \
      -H 'Content-Type: application/json' \
      -H 'X-Api-Key: <your-api-key>' \
      -d '{"test_thread_id": "<thread-uuid>", "session_id": "<session-uuid>", "evaluator": {"type": "thread", "code": "..."}}'
    Attach user IDs and environment metadata to every trace without changing span emission code, using standard OpenTelemetry resource attributes.
    $ export OTEL_RESOURCE_ATTRIBUTES="user.id=u_12345,deployment.environment=production"
    # Traces will appear in LangSmith with metadata keys otel.resource.user.id and otel.resource.deployment.environment
    Retain gzip bulk export compression on a self-hosted LangSmith deployment instead of accepting the new zstd default.
    $ export FF_BULK_EXPORT_DEFAULT_COMPRESSION=gzip
    • Adds POST /v2/datasets/{dataset_id}/experiment-runs as the supported public API for paginated experiment comparison.
    • Introduces the FF_BULK_EXPORT_DEFAULT_COMPRESSION environment variable to retain gzip compression on self-hosted deployments; all other deployments now default bulk export compression to zstandard (zstd).
    • OpenTelemetry resource attributes set via OTEL_RESOURCE_ATTRIBUTES now appear on traces as metadata namespaced under otel.resource.*, enabling attachment of fields like user IDs without changing span emission.
    • LangSmith MCP tools that fetch runs or thread history now accept project UUIDs in addition to project names.
    • Enforces user-defined monthly trace limits scoped to individual projects and users; new traces exceeding a configured limit are rejected while patches and feedback for accepted traces continue to flow.
    +12 moreshow less
    • Adds a reorderable 'Splits (latest)' column to the experiment comparison view showing each example's current dataset split assignments as chips reflecting live membership.
    • Each split chip in the Splits cell of experiment results and comparison views is now interactive, with an 'Edit splits' action that opens the single-example split picker inline.
    • Thread evaluator config preview now shows only the thread message formats the evaluator actually maps, and displays a locked 'Trace count ≥ 2' filter for managed thread evaluators.
    • Vercel AI SDK traces sent over raw OpenTelemetry now render in the Messages view.
    • Native OpenTelemetry child spans are no longer dropped when they arrive before an SDK-attributed parent span; they are buffered and correctly nested regardless of arrival order.
    • Bulk export of a dataset comparison view now returns a clear 'file is too large to export' error instead of a generic server error when the export exceeds internal size limits.
    • LangSmith now caps reusable evaluators per workspace to prevent unbounded resource growth; contact support for higher limits.
    • When a runs query times out, the runs table now shows a timeout banner instead of a silent failure.
    • LangSmith now preserves traces in multipart ingestion batches when one run has oversized inputs or outputs, replacing oversized fields with a placeholder instead of rejecting the entire batch.
    • Thread pages now show an explicit access-control message when trace loading is denied by ABAC, instead of a generic retrieval error.
    • Authenticated users viewing public runs now see sidebar navigation for their last selected workspace.
    • Thread stats requests that opt into streaming now return main stats first and append feedback stats when ready.
    └──▷ BREAKING ON UPGRADE
    • !Legacy dataset comparison helpers are removed from the public OpenAPI spec and generated SDKs; existing HTTP routes continue to work only for LangSmith UI clients.
    • !Bulk export compression now defaults to zstandard (zstd) on all deployments except self-hosted environments, which retain gzip via the FF_BULK_EXPORT_DEFAULT_COMPRESSION environment variable.
  6. snapshot-20260830 Aug 10, 2026 · issue 011

    LangSmith adds bulk split editing, thread evaluator testing, per-project trace limits, zstd export compression, and OTEL resource attribute tracing.

    └──▷ TRY IT
    Test a multi-turn thread evaluator against a real conversation before saving it to catch mapping or logic errors early.
    $ curl -X POST 'https://<your-langsmith-host>/runs/rules/validate' \
      -H 'Content-Type: application/json' \
      -H 'X-API-Key: <api-key>' \
      -d '{"test_thread_id": "<thread-uuid>", "session_id": "<session-uuid>"}'
    Attach OpenTelemetry resource attributes (e.g. user ID, environment) to LangSmith traces without changing span emission code.
    $ export OTEL_RESOURCE_ATTRIBUTES="user.id=u_123,deployment.environment=production"
    python my_langchain_app.py
    Keep gzip bulk export compression on a self-hosted LangSmith deployment instead of the new zstd default.
    $ export FF_BULK_EXPORT_DEFAULT_COMPRESSION=gzip
    • Adds test_thread_id and session_id parameters to the /runs/rules/validate endpoint to test multi-turn thread evaluators against a real conversation before saving.
    • Supports OTEL_RESOURCE_ATTRIBUTES values on traces as metadata namespaced under otel.resource.*, enabling user IDs and other resource attributes to appear without changing span emission.
    • Adds FF_BULK_EXPORT_DEFAULT_COMPRESSION environment variable to override bulk export compression on self-hosted deployments (default is now zstd; self-hosted retains gzip via this flag).
    • Enforces user-defined monthly trace limits scoped to individual projects and users, rejecting new traces that exceed the configured limit while allowing patches and feedback on accepted traces to continue.
    • Each split chip in experiment results and comparison views now has an interactive 'Edit splits' action to reassign splits without leaving the table.
    +4 moreshow less
    • Bulk export compression now defaults to zstandard (zstd) for improved performance.
    • LangSmith now returns clearer 409 Conflict messages distinguishing duplicate run create from run update payloads.
    • Code evaluator upload now accepts Python entrypoints annotated with PEP 604 union return types (e.g. -> dict | None).
    • Native OpenTelemetry child spans are now buffered and correctly nested when they arrive before an SDK-attributed parent span.
    └──▷ BREAKING ON UPGRADE
    • !Legacy dataset comparison helpers are removed from the public OpenAPI spec and generated SDKs; existing HTTP routes continue to work only for LangSmith UI clients.
  7. snapshot-20260829 Aug 10, 2026 · issue 010

    LangSmith adds project/user trace limits, OTEL resource metadata, thread evaluator testing, bulk split editing, and zstd export compression.

    └──▷ TRY IT
    Attach OpenTelemetry resource attributes — such as a user ID or environment tag — so they appear on LangSmith traces under otel.resource.* without changing your tracer code.
    $ OTEL_RESOURCE_ATTRIBUTES="user.id=u-1234,deployment.environment=production" python my_agent.py
    Test a multi-turn thread evaluator against a real conversation thread before saving it, to verify it grades correctly.
    $ curl -X POST 'https://<your-langsmith-host>/runs/rules/validate' \
      -H 'Content-Type: application/json' \
      -H 'X-Api-Key: <your-api-key>' \
      -d '{"test_thread_id": "<thread-id>", "session_id": "<session-id>", "evaluator": { ... }}'
    On self-hosted deployments, keep gzip compression for bulk exports instead of the new zstd default.
    $ FF_BULK_EXPORT_DEFAULT_COMPRESSION=gzip
    • Adds bulk split management in experiment views — select multiple rows (or all matching current filters) to add, replace, or remove dataset splits, or copy selected examples to another dataset in one action.
    • Custom code evaluators that time out or fail on a run now record an error on that run instead of silently leaving it without feedback.
    • LangSmith returns clearer 409 Conflict messages when duplicate run create or update payloads are submitted, indicating whether the duplicate was a create or update request.
    • Sharing, viewing, or unsharing any run in a trace now operates on the trace root, making every run in a shared trace publicly viewable and opening public run links within the shared trace context.
    • The batched-run ingestion log now emits run_verbs as a list of run_id and verbs objects instead of a map keyed by run UUID, preventing structured-log aggregators from exhausting dynamic field limits.
    └──▷ BREAKING ON UPGRADE
    • !Legacy dataset comparison helpers are removed from the public OpenAPI spec and generated SDKs (existing HTTP routes continue to work for LangSmith UI clients).
  8. snapshot-20260828 Aug 10, 2026 · issue 009

    LangSmith adds project/user trace limits, zstd bulk export, OTEL resource metadata, and thread evaluator improvements

    └──▷ TRY IT
    Attach OpenTelemetry resource attributes (e.g., user ID, environment) to LangSmith traces without modifying span emission code.
    $ export OTEL_RESOURCE_ATTRIBUTES="user.id=u_123,deployment.environment=production"
    # Traces will carry these as otel.resource.user.id and otel.resource.deployment.environment metadata in LangSmith
    Override the default bulk export compression on a self-hosted deployment to keep gzip instead of the new zstd default.
    $ FF_BULK_EXPORT_DEFAULT_COMPRESSION=gzip
    Test a multi-turn thread evaluator against a real conversation before saving it.
    $ curl -X POST 'https://<your-langsmith-host>/runs/rules/validate' \
      -H 'Content-Type: application/json' \
      -d '{"test_thread_id": "<thread_id>", "session_id": "<session_id>"}'
    • Adds POST /v2/datasets/{dataset_id}/experiment-runs as the supported public API for paginated experiment comparison.
    • Bulk export compression now defaults to zstandard (zstd) for improved performance; self-hosted environments retain the gzip default via the FF_BULK_EXPORT_DEFAULT_COMPRESSION environment variable.
    • OpenTelemetry resource attributes set via OTEL_RESOURCE_ATTRIBUTES now appear on traces as metadata namespaced under otel.resource.*, enabling attachment of details like user IDs without changing span emission.
    • LangSmith MCP tools that fetch runs or thread history now accept project UUIDs in addition to project names.
    • Vercel AI SDK traces sent over raw OpenTelemetry now render in the Messages view.
    +9 moreshow less
    • Adds an interactive split chip with an 'Edit splits' action in experiment results and comparison views, enabling per-example split reassignment without leaving the table.
    • Adds an optional, reorderable 'Splits (latest)' column in experiment comparison view showing each example's current dataset split assignments as chips.
    • Enables bulk selection of experiment rows to add, replace, or remove dataset splits, or copy selected examples to another dataset, in one action.
    • Native OpenTelemetry child spans arriving before an SDK-attributed parent span are now buffered and correctly nested regardless of arrival order.
    • LangSmith now preserves traces in multipart ingestion batches when one run has oversized inputs or outputs, replacing oversized fields with a placeholder instead of rejecting the entire batch.
    • The /runs/rules/validate endpoint now supports thread evaluators.
    • The evaluator config now shows a locked 'Trace count >= 2' filter for managed thread evaluators, making it clear they only run on threads with multiple turns.
    • Thread stats requests that opt into streaming now return main stats first and append feedback stats when ready.
    • All time filters in tracing views now query the full retention window instead of falling back to a shorter backend default.
    └──▷ BREAKING ON UPGRADE
    • !Legacy dataset comparison helpers are removed from the public OpenAPI spec and generated SDKs; existing HTTP routes continue to work only for LangSmith UI clients.
    • !The batched-run ingestion log now emits run_verbs as a list of run_id and verbs objects instead of a map keyed by run UUID.
  9. snapshot-20260826 Aug 10, 2026 · issue 008
    └──▷ TRY IT
    Test a multi-turn thread evaluator against a real conversation before saving it, to validate scoring logic end-to-end.
    $ curl -X POST 'https://<langsmith-host>/runs/rules/validate' \
      -H 'Content-Type: application/json' \
      -H 'X-API-Key: <api-key>' \
      -d '{"test_thread_id": "<thread-id>", "session_id": "<session-id>"}'
    Retain gzip compression for bulk exports on a self-hosted LangSmith deployment instead of the new zstd default.
    $ FF_BULK_EXPORT_DEFAULT_COMPRESSION=gzip docker compose up
    Attach OpenTelemetry resource attributes (e.g., user ID, environment) to LangSmith traces as otel.resource.* metadata without changing span emission code.
    $ OTEL_RESOURCE_ATTRIBUTES="user.id=u_123,deployment.environment=production" python my_agent.py
    • Adds test_thread_id and session_id parameters to the /runs/rules/validate endpoint to test multi-turn thread evaluators against real conversations before saving.
    • New POST /v2/datasets/{dataset_id}/experiment-runs public API endpoint for paginated experiment comparison (legacy dataset comparison helpers removed from public OpenAPI spec and generated SDKs).
    • Enforces user-defined monthly trace limits scoped to individual projects and users; new traces exceeding a configured limit are rejected while patches and feedback for already-accepted traces continue.
    • Bulk row actions in experiments now allow selecting multiple (or all filtered) rows to add, replace, or remove dataset splits in one action, or copy selected examples to another dataset.
    • Each split chip in Splits cells across experiment results and comparison views now has an interactive 'Edit splits' action to reassign splits without leaving the table.
    +1 moreshow less
    • Workspace-level cap on reusable evaluators introduced to prevent unbounded resource growth.
    └──▷ BREAKING ON UPGRADE
    • !Legacy dataset comparison helpers are removed from the public OpenAPI spec and generated SDKs (existing HTTP routes continue to work for LangSmith UI clients only).
  10. snapshot-20260825 Aug 10, 2026 · issue 007
    └──▷ TRY IT
    Test a multi-turn thread evaluator against a real conversation before saving it, to catch mapping or logic errors early.
    $ curl -X POST 'https://<your-langsmith-host>/runs/rules/validate' \
      -H 'Content-Type: application/json' \
      -H 'X-API-Key: <your-api-key>' \
      -d '{"test_thread_id": "<thread-uuid>", "session_id": "<session-uuid>", "evaluator": { ... }}'
    Attach deployment metadata (e.g. user ID, service name) to every trace without modifying span emission logic, then filter on otel.resource.* fields in LangSmith.
    $ export OTEL_RESOURCE_ATTRIBUTES='service.name=my-agent,user.id=u_12345'
    Keep the legacy gzip compression for bulk exports on a self-hosted deployment instead of the new zstd default.
    $ export FF_BULK_EXPORT_DEFAULT_COMPRESSION=gzip
    • Adds per-project and per-user monthly trace limits: new traces exceeding a configured limit are rejected, while patches and feedback for already-accepted traces continue to flow through.
    • Bulk row actions in experiment views now let you select multiple rows (or all rows matching current filters) and add, replace, or remove dataset splits in one action, or copy selected examples to another dataset.
    • LangSmith now returns clearer 409 Conflict messages when duplicate run create or update payloads are submitted, indicating whether the duplicate was a create or update request.
    • Custom code evaluators that time out or fail on a run now record an error on that run instead of silently leaving it without feedback.
    • Code evaluator upload now accepts Python entrypoints annotated with PEP 604 union return types (e.g. -> dict | None).
    └──▷ BREAKING ON UPGRADE
    • !Legacy dataset comparison helpers are removed from the public OpenAPI spec and generated SDKs; existing HTTP routes continue to work only for LangSmith UI clients.
  11. snapshot-20260824 Aug 10, 2026 · issue 006

    LangSmith adds thread evaluator API testing, project/user trace limits, zstd bulk export, and OpenTelemetry resource attribute tracing.

    └──▷ TRY IT
    Test a multi-turn thread evaluator against a real conversation before saving it, to validate logic without running a full experiment.
    $ curl -X POST 'https://<your-langsmith-host>/runs/rules/validate' \
      -H 'Content-Type: application/json' \
      -H 'X-API-Key: <your-api-key>' \
      -d '{"test_thread_id": "<thread-id>", "session_id": "<session-id>"}'
    Attach OpenTelemetry resource attributes — such as a user ID — so they appear on LangSmith traces under otel.resource.* without modifying span emission code.
    $ export OTEL_RESOURCE_ATTRIBUTES="user.id=user-123,deployment.environment=production"
    Keep gzip compression for bulk exports on a self-hosted LangSmith deployment instead of adopting the new zstd default.
    $ export FF_BULK_EXPORT_DEFAULT_COMPRESSION=gzip
    • The POST /v2/datasets/{dataset_id}/experiment-runs endpoint is now the supported public API for paginated experiment comparison.
    • The /runs/rules/validate endpoint now supports thread evaluators — pass test_thread_id and session_id to test a multi-turn evaluator against a real conversation before saving.
    • OpenTelemetry resource attributes set via OTEL_RESOURCE_ATTRIBUTES now appear on traces as metadata namespaced under otel.resource.*, enabling user IDs and other span metadata without changing tracer emit logic.
    • Bulk export compression now defaults to zstandard (zstd); self-hosted environments retain gzip as the default via the FF_BULK_EXPORT_DEFAULT_COMPRESSION environment variable.
    • LangSmith now enforces user-defined monthly trace limits scoped to individual projects and users, rejecting new traces that exceed a configured limit while allowing patches and feedback for already-accepted traces.
    +13 moreshow less
    • LangSmith MCP tools that fetch runs or thread history now accept project UUIDs in addition to project names.
    • Vercel AI SDK traces sent over raw OpenTelemetry now render in the Messages view.
    • Adds a reorderable 'Splits (latest)' column to the experiment comparison view showing each example's current dataset split assignments as chips.
    • Bulk row actions in an experiment now allow adding, replacing, or removing dataset splits, or copying selected examples to another dataset, across multiple rows at once.
    • Each split chip in a row's Splits cell in experiment results and comparison views is now interactive, with an 'Edit splits' action opening the single-example split picker.
    • Native OpenTelemetry child spans are no longer dropped when they arrive before an SDK-attributed parent span; they are buffered and correctly nested regardless of arrival order.
    • Sharing, viewing, or unsharing any run in a trace now operates on the trace root, making every run in a shared trace publicly viewable.
    • Thread stats requests that opt into streaming now return the main stats first and add feedback stats incrementally when ready.
    • The batched-run ingestion log now emits run_verbs as a list of run_id and verbs objects instead of a map keyed by run UUID, preventing structured-log aggregators from exhausting dynamic field limits.
    • LangSmith now preserves traces in multipart ingestion batches when one run has oversized inputs or outputs, replacing oversized fields with a placeholder instead of rejecting the entire batch.
    • LangSmith now returns clearer 409 Conflict messages indicating whether a duplicate was a run create or run update request when duplicate payloads are submitted.
    • All time filters in tracing views now query the full retention window instead of falling back to a shorter backend default.
    • Thread pages now show an explicit access-control message when trace loading is denied by ABAC, instead of a generic retrieval error.
    └──▷ BREAKING ON UPGRADE
    • !Legacy dataset comparison helpers are removed from the public OpenAPI spec and generated SDKs; existing HTTP routes continue to work only for LangSmith UI clients.
  12. snapshot-20260823 Aug 10, 2026 · issue 005

    LangSmith adds per-project trace limits, OTEL resource metadata, thread evaluator testing, bulk zstd export, and paginated experiment comparison API.

    └──▷ TRY IT
    Test a multi-turn thread evaluator against a real conversation before saving it, using /runs/rules/validate with the new thread evaluator parameters.
    $ curl -X POST 'https://<your-langsmith-host>/runs/rules/validate' \
      -H 'Content-Type: application/json' \
      -H 'x-api-key: <LANGSMITH_API_KEY>' \
      -d '{"test_thread_id": "<thread-uuid>", "session_id": "<session-uuid>", "evaluator": {"type": "thread", "prompt_id": "<prompt-id>"}}'
    Attach OpenTelemetry resource attributes so user IDs and environment tags surface as otel.resource.* metadata on every trace without changing span emission code.
    $ export OTEL_RESOURCE_ATTRIBUTES="user.id=u_12345,deployment.environment=production,service.version=2.1.0"
    export LANGSMITH_ENDPOINT="https://<your-byoc-endpoint>"
    # Run your application — resource attributes appear as otel.resource.user.id, etc. in LangSmith traces
    • Adds support for test_thread_id and session_id parameters on the /runs/rules/validate endpoint to test a multi-turn thread evaluator against a real conversation before saving.
    • Self-hosted deployments can retain gzip bulk export compression by setting the FF_BULK_EXPORT_DEFAULT_COMPRESSION environment variable; bulk export now defaults to zstandard (zstd) for improved performance.
    • Enables bulk split management in experiment views: select multiple rows (or all rows matching current filters) and add, replace, or remove their dataset splits in one action, or copy selected examples to another dataset.
    • The /runs/rules/validate endpoint now supports thread evaluators.
    • The thread evaluator config preview now shows only the thread message formats the evaluator actually maps, rather than every available format.
    +1 moreshow less
    • Model, prompt, and tool chips in the Experiments table config cells now include a clickable +N overflow badge whose entries expose filter, group-by, open-in-playground, and details actions.
    └──▷ BREAKING ON UPGRADE
    • !Legacy dataset comparison helpers are removed from the public OpenAPI spec and generated SDKs (existing HTTP routes continue to work for LangSmith UI clients only).
    • !The batched-run ingestion log now emits run_verbs as a list of run_id and verbs objects instead of a map keyed by run UUID — structured-log aggregators parsing the old map shape will need to update their parsers.
  13. snapshot-20260822 Aug 10, 2026 · issue 004
    └──▷ TRY IT
    Test a multi-turn thread evaluator against a real conversation before saving it to catch misconfiguration early.
    $ curl -X POST 'https://<langsmith-host>/runs/rules/validate' \
      -H 'Content-Type: application/json' \
      -H 'X-Api-Key: <api-key>' \
      -d '{"test_thread_id": "<thread-id>", "session_id": "<session-id>", "evaluator": { ... }}'
    Attach structured metadata (e.g., user IDs, service version) to every trace from a service without modifying span emission code.
    $ OTEL_RESOURCE_ATTRIBUTES="user.id=u_123,service.version=2.1.0" python my_langsmith_app.py
    Keep gzip bulk export compression on a self-hosted deployment when upgrading, since the new default is zstd.
    $ FF_BULK_EXPORT_DEFAULT_COMPRESSION=gzip
    • Adds POST /v2/datasets/{dataset_id}/experiment-runs as the supported public API for paginated experiment comparison; legacy dataset comparison helpers are removed from the public OpenAPI spec and generated SDKs.
    • Code evaluator upload now accepts Python entrypoints annotated with PEP 604 union return types (e.g., -> dict | None).
    • Authenticated users viewing public runs now see sidebar navigation for their last selected workspace.
    └──▷ BREAKING ON UPGRADE
    • !Legacy dataset comparison helpers are removed from the public OpenAPI spec and generated SDKs; code using those SDK methods must migrate to POST /v2/datasets/{dataset_id}/experiment-runs.
    • !The batched-run ingestion log now emits run_verbs as a list of run_id and verbs objects instead of a map keyed by run UUID, which will break structured-log aggregators or pipelines that expected the previous map format.
  14. snapshot-20260821 Aug 10, 2026 · issue 003

    LangSmith adds thread evaluator APIs, per-project trace limits, zstd bulk export, and OpenTelemetry resource attribute tracing.

    └──▷ TRY IT
    Test a multi-turn thread evaluator against a real conversation before saving it, using the updated /runs/rules/validate endpoint.
    $ curl -X POST 'https://<your-langsmith-host>/runs/rules/validate' \
      -H 'Content-Type: application/json' \
      -H 'X-API-Key: <api-key>' \
      -d '{"test_thread_id": "<thread-id>", "session_id": "<session-id>"}'
    Attach OpenTelemetry resource attributes (e.g. user ID, environment) so they appear on LangSmith traces under otel.resource.* without modifying span emission.
    $ export OTEL_RESOURCE_ATTRIBUTES="user.id=usr_123,deployment.environment=production"
    Retain gzip compression for bulk exports on a self-hosted LangSmith deployment instead of the new zstd default.
    $ export FF_BULK_EXPORT_DEFAULT_COMPRESSION=gzip
    • Bulk export compression now defaults to zstandard (zstd); self-hosted environments retain the gzip default via the FF_BULK_EXPORT_DEFAULT_COMPRESSION environment variable.
    • Enables bulk selection of multiple experiment rows to add, replace, or remove dataset splits in one action, or copy selected examples to another dataset.
    • Native OpenTelemetry child spans are no longer dropped when they arrive before an SDK-attributed parent span; they are buffered and correctly nested regardless of arrival order.
    • Thread stats requests that opt into streaming now return main stats first and append feedback stats when ready.
    • Each example's dataset splits now render as chips in the dataset Examples table with a clickable overflow menu.
    +5 moreshow less
    • Legacy dataset comparison helpers are removed from the public OpenAPI spec and generated SDKs (existing HTTP routes continue to work for LangSmith UI clients).
    • Custom code evaluators that time out or fail now record an error on the run instead of silently leaving it without feedback.
    • When a runs query times out, the runs table now shows a timeout banner.
    • LangSmith now preserves traces in multipart ingestion batches when one run has oversized inputs or outputs, replacing oversized fields with a placeholder instead of rejecting the entire batch.
    • Returns clearer 409 Conflict messages when duplicate run create or update payloads are submitted, indicating whether the duplicate was a create or update request.
    └──▷ BREAKING ON UPGRADE
    • !Legacy dataset comparison helpers are removed from the public OpenAPI spec and generated SDKs; code using those SDK methods must migrate to POST /v2/datasets/{dataset_id}/experiment-runs.
    • !Bulk export compression defaults changed from gzip to zstd on cloud deployments; set FF_BULK_EXPORT_DEFAULT_COMPRESSION to retain gzip on self-hosted environments.
    • !The batched-run ingestion log now emits run_verbs as a list of run_id and verbs objects instead of a map keyed by run UUID; structured-log aggregators parsing the old map format will need to be updated.
  15. snapshot-20260820 Aug 10, 2026 · issue 002

    LangSmith adds bulk split management, thread evaluator testing via API, zstd export compression, project-scoped trace limits, and OpenTelemetry metadata namespacing.

    └──▷ TRY IT
    Test a multi-turn thread evaluator against a real conversation before saving it, to verify it grades correctly on live thread data.
    $ curl -X POST 'https://<langsmith-host>/runs/rules/validate' \
      -H 'Content-Type: application/json' \
      -H 'X-API-Key: <your-api-key>' \
      -d '{"test_thread_id": "<thread-uuid>", "session_id": "<session-uuid>"}'
    Attach user ID and environment metadata to every trace without changing how your tracer emits spans, by setting OpenTelemetry resource attributes at process start.
    $ export OTEL_RESOURCE_ATTRIBUTES="user.id=u_123,deployment.environment=production"
    python my_agent.py
    Keep gzip compression for bulk exports on a self-hosted deployment after the default changes to zstd.
    $ FF_BULK_EXPORT_DEFAULT_COMPRESSION=gzip docker compose up
    • Adds POST /v2/datasets/{dataset_id}/experiment-runs as the supported public API for paginated experiment comparison.
    • The /runs/rules/validate endpoint now accepts test_thread_id and session_id parameters to test multi-turn thread evaluators against a real conversation before saving.
    • Adds FF_BULK_EXPORT_DEFAULT_COMPRESSION environment variable so self-hosted deployments can retain gzip when bulk export compression defaults to zstd.
    • OpenTelemetry resource attributes set via OTEL_RESOURCE_ATTRIBUTES now appear on traces as metadata namespaced under otel.resource.*, enabling user ID and other context attachment without tracer changes.
    • LangSmith now enforces user-defined monthly trace limits scoped to individual projects and users, rejecting new traces over the limit while allowing patches and feedback on already-accepted traces.
    +13 moreshow less
    • Bulk export compression now defaults to zstandard (zstd) for improved performance.
    • Adds a reorderable 'Splits (latest)' column to experiment comparison views, showing each example's live dataset split assignments as chips.
    • Enables bulk split management in experiment views: select multiple rows (or all rows matching current filters) and add, replace, or remove dataset splits, or copy selected examples to another dataset, in one action.
    • Each split chip in experiment results and comparison view rows now exposes an 'Edit splits' action opening the single-example split picker inline.
    • LangSmith MCP tools that fetch runs or thread history now accept project UUIDs in addition to project names.
    • Vercel AI SDK traces sent over raw OpenTelemetry now render in the Messages view.
    • Native OpenTelemetry child spans are buffered and correctly nested when they arrive before an SDK-attributed parent span.
    • Sharing, viewing, or unsharing any run in a trace now operates on the trace root, making every run in a shared trace publicly viewable via a shared link.
    • Thread pages now show an explicit ABAC access-control message when trace loading is denied, instead of a generic error.
    • All time filters in tracing views now query the full retention window instead of falling back to a shorter backend default.
    • Dataset export now returns a clear 'file is too large to export' error instead of a generic server error when the export exceeds internal size limits.
    • The thread evaluator config now shows a locked 'Trace count >= 2' filter for managed thread evaluators, making eligibility criteria explicit.
    • Experiment statistics now refresh promptly for recently run experiments while keeping historical experiment scans bounded.
    └──▷ BREAKING ON UPGRADE
    • !Legacy dataset comparison helpers are removed from the public OpenAPI spec and generated SDKs; existing HTTP routes continue to work for LangSmith UI clients only.
my-toolchain — 0 tools
paste an install list to detect your tools

A brew list, a Brewfile, requirements.txt, a Dockerfile — or just the product names, free-form. Nothing leaves your browser.

    browse all tools →