Hybrid is a topology of LangSmith Deployment (agent hosting), not a separate observability product: Agent Servers run in your infrastructure and send traces to LangSmith Cloud or to a self-hosted instance via LANGSMITH_ENDPOINT.
Observability only (no agent hosting) works on Cloud or self-hosted: run the app anywhere and send traces.
Licensing: the SDKs are MIT-licensed; the platform is a commercial product. Self-hosting and BYOC require an Enterprise contract.
For a QA team
Start on Cloud with a dedicated project for CI traffic. Move to self-hosted or BYOC only when prompts, inputs or outputs may not leave your network.
The region is fixed by the URL where the account was created. An organization cannot span regions and cannot be migrated between them; features and prices are the same everywhere.
Region
UI
API (LANGSMITH_ENDPOINT)
Location
GCP US (default)
https://smith.langchain.com
https://api.smith.langchain.com
us-central1 (Iowa)
GCP EU
https://eu.smith.langchain.com
https://eu.api.smith.langchain.com
europe-west4 (Netherlands)
GCP APAC
https://apac.smith.langchain.com
https://apac.api.smith.langchain.com
australia-southeast1 (Sydney)
AWS US
https://aws.smith.langchain.com
https://aws.api.smith.langchain.com
us-east-2 (Ohio)
Billing and payment data are stored in the US regardless of region.
BYOC data planes are placed in a chosen AWS region (US, Canada, EU, APAC); the control plane (users, roles, billing, SSO, API keys) stays in us-east-2.
LANGSMITH_PROJECT (default default), created on first trace
LANGSMITH_AGENT_ID + LANGSMITH_AGENT_ENVIRONMENT
Retention tier set on
The project
Each environment
Alerts, evaluators, dashboards scoped to
One project
One environment of one agent
# project addressingexportLANGSMITH_PROJECT=checkout-ci
# agent addressing (langsmith >= 0.14.9, agent-based workspaces)exportLANGSMITH_AGENT_ID=checkout# 1-63 chars: lowercase letters, digits, hyphensexportLANGSMITH_AGENT_ENVIRONMENT=development# local | development | staging | production
An agent or a project — never both. Setting both is a warning, and passing address and project_name together in code raises LangSmithUserError.
In code: @traceable(address=ls.agent_address("checkout", "production")) or tracing_context(address=...). The address argument is marked beta in the SDK.
In an agent-based workspace, the first trace to a new LANGSMITH_PROJECT name creates an agent of that name with the project as its Production environment.
Self-hosted instances reject agent-addressed runs with HTTP 403.
Separate trust boundaries (teams, customers) by workspace; separate environments (CI, staging, production) by project or environment.
Code version stored as revision_id in run metadata
LANGSMITH_RUNS_ENDPOINTS
—
JSON list of replica destinations; cannot be combined with LANGSMITH_ENDPOINT
LANGSMITH_TRACING_MODE
langsmith
langsmith, hybrid or otel export mode
LANGSMITH_OTEL_ENABLED, LANGSMITH_OTEL_ONLY
false
Legacy switches for hybrid / OTLP-only export
LANGCHAIN_* names (LANGCHAIN_PROJECT, LANGCHAIN_API_KEY) are legacy aliases of the LANGSMITH_* variables.
Other LANGSMITH_* variables, except secret-like names (containing key, secret, token, password, ...), are copied into run metadata. Do not store sensitive values in them.
Without environment variables, pass a client explicitly:
importlangsmithaslsclient=ls.Client(api_key="lsv2_pt_...",api_url="https://eu.api.smith.langchain.com",workspace_id="<workspace-id>")withls.tracing_context(client=client,project_name="ci-run",enabled=True):run_app()# everything traced inside goes to that workspace and project
Profiles keep several setups side by side (langsmith profile create eu --api-url https://eu.api.smith.langchain.com --workspace-id <id>, then LANGSMITH_PROFILE=eu). The profile file holds secrets: chmod 600, never commit it.
Typical QA setup: QA engineers are Editors on the test workspace (create datasets, annotate, run experiments) and Viewers on production; CI uses a workspace-scoped service key; the production app uses a tracing key.
Experiment runs; traces upgraded by the actions below
The tier is a property of the project (per environment in agent workspaces); changing it affects new traces only. Enterprise can customize the extended period per workspace up to the SaaS maximum.
Auto-upgrade to extended (and the higher price) happens when an online evaluator or automation rule with retention extension matches a run, or when feedback is created through the SDK/API with extend_trace_retention=True (the Python default). UI feedback, notes and manually adding runs to a queue do not upgrade.
Datasets are never deleted by retention: copy valuable runs into a dataset. Monitoring charts keep working after base traces expire.
Self-hosted: TTL is enabled in the Helm chart (config.ttl); chart defaults are 14 days (shortlived) and 400 days (longlived), and Enterprise sets the extended period per workspace in the UI.
Limits worth knowing: 25,000 runs per trace; HTTP 429 when rate or plan limits are hit (the SDK batches up to 100 runs per request).