Self-hosted version requirement: Access to alerts requires Helm chart version 0.10.3 or later.
Effective observability in LLM applications requires proactive detection of failures, performance degradations, and regressions. LangSmith’s alerts feature helps identify critical issues such as:
API rate limit violations from model providers.
Latency increases for your application.
Application changes that affect feedback scores reflecting end-user experience.
Unexpected cost spikes from LLM usage.
Alerts in LangSmith are scoped to one trace container, requiring separate configuration for each one you monitor. Which container that is depends on how your workspace is organized.
Agent-based workspaces. This section applies if your workspace organizes traces by agent and environment. To check, look at the control at the top left: it names your workspace. If it shows the LangSmith logo instead, and the sidebar has an Application section with an application picker, your workspace is project-based. Skip this section and read Tracing projects.
An alert is scoped to one environment of one agent. Alerting on production behavior therefore does not require a filter that excludes test traffic, because the environment already excludes it.
Project-based workspaces. This section applies if your workspace organizes traces by tracing project. To check, look at the control at the top left. In a project-based workspace, it shows the LangSmith logo, and the sidebar has an Application section with an application picker. If the control shows your workspace name instead, your workspace is agent-based. Skip this section and read Agent Registry.
An alert is scoped to one tracing project.
Alerts can route to Slack, PagerDuty, Dynatrace, or any HTTP endpoint via webhook. The Webhook tab includes example recipes for Microsoft Teams, email, Slack on self-hosted deployments, and Google Chat (which requires middleware).
In the UI, navigate to the tracing project you would like to configure alerts for, or to the agent environment in an agent-based workspace. Click the Alerts icon on the top right-hand corner of the page to view existing alerts for it and set up a new alert.
Tracks the latency of your application to alert on spikes and performance bottlenecks.
Additionally, for Errors and Latency, you can use the filter builder to stack conditions on fields such as Status, Run Type, Tag, and Error. For example, you can scope an error alert to runs where Status is error, Run Type is llm, Tag is support_agent, and Error matches RateLimitExceeded.Alert filters combine conditions with AND only. For the filter syntax that alert rules accept through the API, refer to Alert filters.
Aggregation Method: Average, Percentage, or Count.
Comparison Operator: >=, <=, or exceeds threshold.
Threshold Value: Numerical value triggering the alert.
Aggregation Window: Time period for metric calculation (choose between 5 or 15 minutes).
Feedback Key (Feedback Score alerts only): Specific feedback metric to monitor.
Example: The configuration in the screenshot would generate an alert when more than 5% of runs within the past 5 minutes result in errors.You can preview alert behavior over a historical time window to understand how many datapoints, and which ones, would have triggered an alert at a chosen threshold (indicated in red). For example, setting an average latency threshold of 60 seconds for a project lets you visualize potential alerts, as shown in the following screenshot.
Send alert notifications directly to a Slack channel using LangSmith’s native Slack integration.
The native Slack notification type is available on LangSmith Cloud and on self-hosted deployments with a configured Slack app. If your self-hosted deployment does not support that connection, use the webhook Slack recipe in the Webhook tab.
Prerequisites
A Slack workspace connected to your LangSmith organization. If you have not connected one yet, LangSmith will prompt you to do so inline when you configure this notification type.
In the Notification Settings section of your alert setup, select Slack.
Click the channel selector. If no Slack workspace is linked yet, click Connect Slack and complete the OAuth flow to authorize the configured Slack app.
Select the workspace and channel from the dropdown. Click the refresh icon if the channel does not appear immediately.
Click Save to save the notification configuration.
LangSmith joins the selected public channel when it first delivers a message, if needed. To post to a private channel, invite the configured Slack app to that channel in Slack first.
When an alert triggers, LangSmith posts a structured Slack message that includes:
Headline: The alert name and your LangSmith workspace name.
Detail line: The metric attribute, triggered value, comparison operator, configured threshold, aggregation method, and time window — for example: Total Cost: $12.50 ≥ $5.00 · avg · 30 min.
Action buttons: View Alert (links to the alert preview in LangSmith) and View Runs (links to the filtered runs that triggered the alert).
Configure PagerDuty as a notification channel using PagerDuty’s Events API v2. This integration allows critical LLM application issues to trigger PagerDuty incidents, enabling rapid response through your established incident management workflow.Prerequisites
An active PagerDuty account with administrator access
Appropriate service-level permissions in PagerDuty
If on a custom deployment of LangSmith, make sure there are no firewall settings blocking egress traffic from LangSmith services.
To receive the same alert again within an hour of it being triggered, you must resolve the active incident created by the alert in PagerDuty.
In the notification section of your alert set-up in LangSmith, select PagerDuty
Click the key icon to save the Integration Key as a Workspace secret or select an existing Workspace secret. As a best practice, we recommend saving the Integration Key as a Workspace Secret rather than adding it directly. This will allow you to reuse the same key across alerts for a workspace.
Configure additional notification options:
Severity: Maps to PagerDuty incident priority
Send a test alert by clicking Send Test Alert
Verify the incident is triggered by PagerDuty and contains relevant LangSmith alert information
Verify the Integration Key is entered correctly in LangSmith
Ensure the PagerDuty service is active and not in maintenance mode
Check that your PagerDuty account has Events API v2 enabled
If an alert trigger appears to be missing in PagerDuty, check whether the expected trigger occurred within one hour of a previous trigger from the same alert rule, and whether the incident created by the previous alert is still open.
Review network connectivity if your LangSmith instance is behind a firewall
Configure Dynatrace as a notification channel using Dynatrace’s Events API v2. This integration sends LangSmith alert events to your Dynatrace environment, enabling correlation with your broader infrastructure monitoring.Prerequisites
An active Dynatrace environment (SaaS or Managed).
A Dynatrace API access token with the events.ingest scope.
If you are working from a custom deployment of LangSmith, make sure there are no firewall settings blocking egress traffic from LangSmith services.
In the Notifications Settings for your alert setup in LangSmith, select Dynatrace.
Enter your Dynatrace environment URL.
Click the key icon to save the API token as a workspace secret or select an existing workspace secret. As a best practice, save the API token as a workspace secret rather than adding it directly. This allows you to reuse the same token across alerts for a workspace.
Configure additional notification options:
Event Type: Select the Dynatrace event type (e.g., CUSTOM_ALERT, ERROR_EVENT)
Send a test alert by clicking Send Test Notification.
Verify the event appears in your Dynatrace environment.
Webhooks enable integration with custom services and third-party platforms by sending HTTP POST requests when alert conditions are triggered. Use webhooks to forward alert data to ticketing systems, chat applications, or custom monitoring solutions.Prerequisites
An endpoint that can receive HTTP POST requests
Appropriate authentication credentials for your receiving service (if required)
In the Monitoring section of the LangSmith UI under the Alerts tab, click + Alert to create a. new alert.In the Notification Settings section, complete the webhook configuration with the following parameters:Required fields
URL: The complete URL of your receiving endpoint
Example: https://api.example.com/incident-webhook
Optional fields
Headers: JSON key-value pairs sent with the webhook request
Common headers include:
Authorization: For authentication tokens
Content-Type: Usually set to application/json (default)
X-Source: To identify the source as LangSmith
If no headers, use {}
Request Body Template: Customize the JSON payload sent to your endpoint
Default: LangSmith sends the payload defined and the following additional key-value pairs appended to the payload:
project_name: Name of the LangSmith project the alert is scoped to.
workspace_name: Name of the LangSmith workspace.
alert_rule_id: A UUID to identify the LangSmith alert. This can be used as a de-duplication key in the webhook service.
alert_rule_name: The name of the alert rule.
alert_rule_description: The description of the alert rule (empty string if none set).
alert_rule_type: The type of alert (as of 04/01/2025 all alerts are of type threshold).
alert_rule_attribute: The attribute associated with the alert rule - error_count, feedback_score, latency, or cost.
alert_rule_url: A direct link to the alert rule in LangSmith.
runs_url: A direct link to the runs that triggered the alert in LangSmith.
triggered_metric_value: The value of the metric at the time the threshold was triggered.
triggered_threshold: The threshold that triggered the alert.
timestamp: The timestamp that triggered the alert.
LangSmith does not perform template substitution on the request body. The auto-populated fields above are merged into the outgoing JSON as top-level keys, alongside the body you configure. Placeholder syntax like {alert_rule_name} is sent verbatim to the receiving service. It only resolves to a real value if the receiver itself can extract fields from the incoming JSON (for example, a Power Automate Workflow, an AWS Lambda, or a custom HTTP handler).
Ensure any authentication headers are properly formatted
Check that your receiving endpoint accepts POST requests
Examine your endpoint’s logs for received but rejected requests
Verify your custom payload template is valid JSON format
Send Test Alert does not validate the downstream response. The UI reports your configuration is working correctly and the test notification was delivered even if the receiving endpoint returned an error (for example, a 400 or 422 rejection). Always verify receipt on the receiver side, check your endpoint’s logs or the target platform’s message history, rather than relying solely on the LangSmith success message.
Select the workspace where you want to install the app.
Click Create App.
Step 2: Configure bot permissions
In the left sidebar of your Slack app configuration, click OAuth & Permissions.
Scroll down to Bot Token Scopes under Scopes and click Add an OAuth Scope.
Add the following scopes:
chat:write (Send messages as the app).
chat:write.public (Send messages to channels the app is not in).
channels:read (View basic channel information).
Step 3: Install the app to your workspace
Scroll up to the top of the OAuth & Permissions page.
Click Install to Workspace.
Review the permissions and click Allow.
Copy the Bot User OAuth Token that appears (begins with xoxb-).
Step 4: Add the bot to a Slack channelAdd the bot to the specific channel you want to receive alerts in. You can add a bot to a Slack channel by mentioning it in the message field (e.g., @botname).You also need the channel ID to configure the webhook alert in LangSmith. You can find the channel ID by opening channel details > About.Step 5: Configure the webhook alert in LangSmith
In LangSmith, navigate to your tracing project, or to your agent environment.
Select Alerts > Create Alert.
Define your alert metrics and conditions.
In the notification section, select Webhook.
Configure the webhook with the following settings:
Webhook URL
https://slack.com/api/chat.postMessage
Headers
Replace xoxb-your-token-here with your Bot’s User OAuth Token
It is required to fill in the {channel_id} from the value found in Step 4.
The remaining fields: alert_name, project_name and project_url optionally add additional context to the alert message. You can find your project_url in the browser’s URL bar. Copy the portion up to but not including any query parameters.
{ "channel": "{channel_id}", "text": "{alert_name} triggered for {project_name}", "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": "🚨{alert_name} has been triggered" } }, { "type": "section", "text": { "type": "mrkdwn", "text": "Please check the following link for more information:" } }, { "type": "section", "text": { "type": "mrkdwn", "text": "<{project-url}|View in LangSmith>" } } ]}
Click Save to activate the webhook configuration.
Step 6: Test the integration
In the LangSmith alert configuration, click Test Alert.
Check your specified Slack channel for the test notification.
Verify that the message contains the expected alert information.
(Optional) Step 7: Link to the alert preview in the request bodyAfter creating an alert, you can optionally link to its preview in the webhook’s request body.To configure this:
Save your alert.
Find your saved alert in the alerts table and click it.
Copy the displayed URL.
Click “Edit Alert”.
Replace the existing project URL with the copied alert preview URL.
Configure Microsoft Teams notifications via webhook
Here is an example for configuring LangSmith alerts to send notifications to a Microsoft Teams channel using the Workflows app (Power Automate). This approach is recommended because it extracts fields from the incoming JSON within the flow, so the auto-populated LangSmith alert fields render correctly in the Teams message.
Microsoft’s legacy Office 365 Incoming Webhook connectors are being retired. Use the Workflows app for new integrations.
Prerequisites
Access to a Microsoft Teams workspace with permissions to add Workflows.
A LangSmith tracing project, or an agent environment, to set up alerts.
Step 1: Create a Workflow in Teams
In Microsoft Teams, navigate to the channel where you want to receive alerts.
Click the … (More options) menu next to the channel name.
Select Workflows.
Search for and select the Post to a channel when a webhook request is received template.
Sign in to confirm the connections, then click Next.
Confirm the team and channel where alerts should be posted, then click Add workflow.
Copy the generated HTTP POST URL—use this in LangSmith.
Step 2: Customize the message in Power Automate (optional)The default workflow posts the raw JSON body as a card. To format alert details, edit the flow in Power Automate:
In the Adaptive Card field, reference incoming fields using triggerOutputs()?['body/alert_rule_name'], triggerOutputs()?['body/project_name'], triggerOutputs()?['body/triggered_metric_value'], triggerOutputs()?['body/triggered_threshold'], triggerOutputs()?['body/timestamp'], and triggerOutputs()?['body/alert_rule_url'].
Save the flow.
Step 3: Configure the webhook alert in LangSmith
In LangSmith, navigate to your tracing project, or to your agent environment.
Select Alerts > Create Alert.
Define your alert metrics and conditions.
In the notification section, select Webhook.
Configure the webhook with the following settings:
Webhook URLPaste the HTTP POST URL from your Teams Workflow:
Request Body TemplateLangSmith automatically merges the auto-populated alert fields (alert_rule_name, project_name, triggered_metric_value, triggered_threshold, timestamp, alert_rule_url, and others) into the request body as top-level JSON keys. Power Automate reads these fields directly from the incoming payload, so an empty body is sufficient:
{}
Click Save to activate the webhook configuration.
Step 4: Test the integration
In the LangSmith alert configuration, click Send Test Alert.
Check your specified Teams channel for the test notification.
Verify that the card contains the expected alert information.
Reference implementationFor a working example that translates LangSmith webhook payloads (threshold alerts, run rules, and generic events) into formatted Teams Adaptive Cards, see the langsmith-teams-webhook sample repo. The sample runs as a small Python service in front of a Teams Workflow URL, which avoids customizing the Power Automate flow itself.
Configure email notifications via webhook
Here is an example for configuring LangSmith alerts to send email notifications using SendGrid’s Mail Send API. You can use any transactional email provider that exposes an HTTP API (e.g., Mailgun, Amazon SES, Postmark).Prerequisites
A SendGrid account with a verified sender identity.
A SendGrid API key with Mail Send permissions.
A LangSmith tracing project, or an agent environment, to set up alerts.
Replace alerts@your-company.com with your verified sender address and oncall@your-company.com with the recipient address. SendGrid does not extract fields from arbitrary top-level JSON keys, so this example uses a fixed subject and body. To include alert-specific values in the email, route the LangSmith webhook through a middleware (such as a Power Automate flow, AWS Lambda, or Zapier webhook) that reads the incoming payload and renders the SendGrid request.
{ "personalizations": [ { "to": [ { "email": "oncall@your-company.com" } ], "subject": "LangSmith alert triggered" } ], "from": { "email": "alerts@your-company.com", "name": "LangSmith Alerts" }, "content": [ { "type": "text/plain", "value": "A LangSmith alert was triggered. Open your LangSmith workspace to view the alert details, including the project, metric value, threshold, and timestamp." } ]}
Click Save to activate the webhook configuration.
Step 4: Test the integration
In the LangSmith alert configuration, click Send Test Alert.
Check the recipient inbox for the test notification.
Verify the email contains the expected alert information.
Using other email providersThe same pattern works with other transactional email APIs that accept static authentication headers. Change the Webhook URL and Headers to match your provider:
Provider
Webhook URL
Auth header format
Mailgun
https://api.mailgun.net/v3/{your-domain}/messages
Authorization: Basic <base64(api:<key>)>
Postmark
https://api.postmarkapp.com/email
X-Postmark-Server-Token: <token>
Adjust the Request Body Template to match each provider’s expected payload format. Amazon SES is not directly compatible because the SES API requires per-request AWS SigV4 signing, which cannot be expressed as a static header. To use SES, route through a middleware (for example, a Lambda function with an HTTP trigger).
Configure Google Chat notifications via webhook (requires middleware)
Google Chat’s incoming webhook API (spaces.messages.create) only accepts the text field at the top level. Because LangSmith merges all 12 alert metadata keys into the request body as top-level fields, Google Chat rejects every request with a 400 error:
Invalid JSON payload received. Unknown name "project_name" at 'message': Cannot find field.
There is no Request Body Template that avoids this, even a minimal body such as {"text": "hello", "project_name": "x"} will fail. A translation layer (middleware) is required, similar to the Amazon SES note in the email recipe.Option A: Cloud Run or Cloud Functions middleware (recommended)This approach uses a small HTTP handler that receives the LangSmith webhook, extracts the relevant fields, and forwards a clean {"text": "..."} payload to a Google Chat space webhook URL.Prerequisites
A Google Chat space with an incoming webhook configured. In Google Chat, open the space, then go to Apps & integrations > Add webhooks, create a webhook, and copy the URL.
A Google Cloud project with Cloud Run or Cloud Functions enabled, or equivalent hosting.
Step 1: Deploy the handlerDeploy the following Python function as a Cloud Run service or Cloud Function:
import jsonimport osimport reimport urllib.requestfrom urllib.parse import urlparseALLOWED_LINK_HOSTS = {"smith.langchain.com"}def build_text(payload): def safe(v): # Strip angle brackets to prevent <url|label> link injection return re.sub(r"[<>]", "", str(v if v is not None else "")) parsed = urlparse(str(payload.get("runs_url") or "")) trusted = parsed.scheme == "https" and parsed.hostname in ALLOWED_LINK_HOSTS return ( f"*{safe(payload.get('alert_rule_name'))}* triggered for " f"`{safe(payload.get('project_name'))}`\n" f"{safe(payload.get('alert_rule_attribute'))}: " f"{safe(payload.get('triggered_metric_value'))} " f"(threshold {safe(payload.get('triggered_threshold'))})" + (f"\n<{parsed.geturl()}|View runs>" if trusted else "") )def handler(request): if request.headers.get("X-Webhook-Secret") != os.environ["LANGSMITH_SHARED_SECRET"]: return ("forbidden", 403) payload = request.get_json(silent=True) or {} urllib.request.urlopen( urllib.request.Request( os.environ["GCHAT_WEBHOOK_URL"], data=json.dumps({"text": build_text(payload)}).encode(), headers={"Content-Type": "application/json"}, method="POST", ), timeout=10, ) return ("ok", 200)
Set the following environment variables for the deployed function:
GCHAT_WEBHOOK_URL: The Google Chat space webhook URL.
LANGSMITH_SHARED_SECRET: A secret string you choose (used to authenticate incoming requests from LangSmith).
Step 2: Configure the webhook alert in LangSmithPoint the LangSmith webhook at your deployed handler’s URL.Webhook URL
The metadata fields (alert_rule_name, project_name, runs_url, etc.) are merged into the body by LangSmith regardless of what you put here, so an empty body is sufficient.
Do not strip * or _ from alert field values in your handler. These characters are also used in Google Chat’s basic text formatting, but they appear in LangSmith identifiers (such as run_count). Stripping them will corrupt field names in the message.
Google Chat enforces a write rate limit of 1 message per second per space, shared across all webhooks writing to that space. If you have multiple LangSmith alerts routing to the same space and they fire simultaneously, some messages may be dropped.
Option B: Google Apps Script (no infrastructure required)Google Apps Script can serve as lightweight middleware without deploying any cloud infrastructure.Create a new Apps Script project at script.google.com, paste the following, and deploy it as a web app (execute as yourself, access to anyone):
function doPost(e) { var payload = JSON.parse(e.postData.contents); var secret = e.parameter.secret; // shared secret passed as query param if (secret !== PropertiesService.getScriptProperties().getProperty("LANGSMITH_SHARED_SECRET")) { return ContentService.createTextOutput("forbidden").setMimeType(ContentService.MimeType.TEXT); } var text = "*" + (payload.alert_rule_name || "") + "* triggered for `" + (payload.project_name || "") + "`\n" + (payload.alert_rule_attribute || "") + ": " + (payload.triggered_metric_value || "") + " (threshold " + (payload.triggered_threshold || "") + ")"; UrlFetchApp.fetch(PropertiesService.getScriptProperties().getProperty("GCHAT_WEBHOOK_URL"), { method: "post", contentType: "application/json", payload: JSON.stringify({ text: text }), }); return ContentService.createTextOutput("ok").setMimeType(ContentService.MimeType.TEXT);}
Set GCHAT_WEBHOOK_URL and LANGSMITH_SHARED_SECRET in Project Settings > Script Properties.
Apps Script web apps cannot read custom HTTP request headers, so the shared secret must be passed as a query string parameter (?secret=...) rather than a header. Include it in the LangSmith webhook URL rather than the Headers field.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Docs by LangChain","description":"Documentation for LangSmith, Fleet, and our open source packages.","colors":{"primary":"#161F34","light":"#7FC8FF","dark":"#006DDD"},"logo":{"light":"https://mintcdn.com/langchain-5e9cc07a/nQm-sjd_MByLhgeW/images/brand/langchain-docs-dark-blue.png?fit=max\u0026auto=format\u0026n=nQm-sjd_MByLhgeW\u0026q=85\u0026s=5babf1a1962208fd7eed942fa2432ecb","dark":"https://mintcdn.com/langchain-5e9cc07a/nQm-sjd_MByLhgeW/images/brand/langchain-docs-light-blue.png?fit=max\u0026auto=format\u0026n=nQm-sjd_MByLhgeW\u0026q=85\u0026s=0bcd2a1f2599ed228bcedf0f535b45b1"},"favicon":{"light":"https://mintcdn.com/langchain-5e9cc07a/8njVp3mXF3LrAS1d/images/brand/docs-favicon.png?fit=max\u0026auto=format\u0026n=8njVp3mXF3LrAS1d\u0026q=85\u0026s=a61c2b4666f558992e1fd44750b08465","dark":"https://mintcdn.com/langchain-5e9cc07a/8njVp3mXF3LrAS1d/images/brand/docs-favicon.png?fit=max\u0026auto=format\u0026n=8njVp3mXF3LrAS1d\u0026q=85\u0026s=a61c2b4666f558992e1fd44750b08465"},"appearance":{"default":"system","strict":false},"background":{"color":{"light":"#FFFFFF","dark":"#030710"}},"navbar":{"links":[{"icon":"message","href":"https://chat.langchain.com/","label":"Ask AI"},{"icon":"brand-github","href":"https://github.com/langchain-ai","label":"GitHub"}],"primary":{"type":"button","label":"Try LangSmith","href":"https://smith.langchain.com/"}},"footer":{"socials":{"github":"https://github.com/langchain-ai","x":"https://x.com/LangChain","linkedin":"https://www.linkedin.com/company/langchain","youtube":"https://www.youtube.com/@LangChain"},"links":[{"header":"Resources","items":[{"label":"Forum","href":"https://forum.langchain.com/"},{"label":"Changelog","href":"https://changelog.langchain.com/"},{"label":"LangChain Academy","href":"https://academy.langchain.com/"},{"label":"Contact Sales","href":"https://www.langchain.com/contact-sales"}]},{"header":"Company","items":[{"label":"Home","href":"https://langchain.com/"},{"label":"Trust Center","href":"https://trust.langchain.com/"},{"label":"Careers","href":"https://langchain.com/careers"},{"label":"Blog","href":"https://blog.langchain.com/"}]}]},"seo":{"metatags":{"canonical":"https://docs.langchain.com","google-site-verification":"9_2KHeJwmEdwgncBRk1MsKxriZz7Sc21EJdbfCxkTEo"}},"fonts":{"heading":{"family":"TWK Lausanne","weight":700,"source":"fonts/TWKLausanne-700.woff2","format":"woff2"},"body":{"family":"Inter","weight":400}},"icons":{"library":"tabler"},"styling":{"eyebrows":"breadcrumbs","codeblocks":{"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}},"latex":true},"integrations":{"gtm":{"tagId":"GTM-MBBX68ST"}},"banner":{"content":"Interrupt is coming to San Francisco March 24–25 | [Get early bird pricing now](https://interrupt.langchain.com/)","dismissible":true},"errors":{"404":{"redirect":false,"title":"Page not found","description":"We couldn't find the page you were looking for."}},"contextual":{"options":["copy","view",{"title":"llms.txt","description":"Open llms.txt for this site","icon":"file","href":"https://docs.langchain.com/llms.txt"},"chatgpt","claude","mcp","cursor","vscode"],"display":"header"},"interaction":{"drilldown":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"langchain-5e9cc07a","hasAudioNarration":false,"actualSubdomain":"langchain-5e9cc07a","customDomains":["docs.langchain.com"],"gitSource":{"type":"github","owner":"langchain-ai","repo":"docs","deployBranch":"prod","contentDirectory":"build","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aea62e92a80ffd58d477d5e","collectionId":"d5422aa8-5ae3-489d-8a8f-4c4abf97295d","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aea62e92a80ffd58d477d5e"},"feedback":{"thumbs":true,"edits":false,"issues":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aea62e92a80ffd58d477d5e","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"AGENT DEVELOPMENT LIFECYCLE","count":1513},{"language":"default","tag":"Reference","count":766},{"language":"default","tag":"Monitor","count":704},{"language":"default","tag":"LangSmith REST API","count":596},{"language":"default","tag":"Build","count":480},{"language":"default","tag":"Deploy","count":251},{"language":"default","tag":"TypeScript","count":250},{"language":"default","tag":"Python","count":230},{"language":"default","tag":"PRODUCTS AND SETUP","count":214},{"language":"default","tag":"Get started","count":183}],"searchSettings":{"maxResults":10,"showContentSnippets":true,"isFiltersEnabled":false}},"assistantConfig":{"enableAskAiButton":false,"enableAskAiSearchBar":true,"deflection":{"enabled":false,"email":"support@langchain.dev"}},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6pfjptAgt5VM-kVkqdyU8n1ioa2Hdgv-s.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6pfjptAgt5VM-kVkqdyU8n1ioa0Xdgv-s.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6pfjptAgt5VM-kVkqdyU8n1ioa2ndgv-s.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6pfjptAgt5VM-kVkqdyU8n1ioa23dgv-s.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6pfjptAgt5VM-kVkqdyU8n1ioa1Xdg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6sfjptAgt5VM-kVkqdyU8n1ioSJlR1jcoQLNg.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6sfjptAgt5VM-kVkqdyU8n1ioSJlR1hMoQLNg.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6sfjptAgt5VM-kVkqdyU8n1ioSJlR1j8oQLNg.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6sfjptAgt5VM-kVkqdyU8n1ioSJlR1jsoQLNg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6sfjptAgt5VM-kVkqdyU8n1ioSJlR1gMoQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6sfjptAgt5VM-kVkqdyU8n1ioSClN1jcoQLNg.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6sfjptAgt5VM-kVkqdyU8n1ioSClN1hMoQLNg.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6sfjptAgt5VM-kVkqdyU8n1ioSClN1j8oQLNg.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6sfjptAgt5VM-kVkqdyU8n1ioSClN1jsoQLNg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6sfjptAgt5VM-kVkqdyU8n1ioSClN1gMoQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6sfjptAgt5VM-kVkqdyU8n1ioSblJ1jcoQLNg.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6sfjptAgt5VM-kVkqdyU8n1ioSblJ1hMoQLNg.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6sfjptAgt5VM-kVkqdyU8n1ioSblJ1j8oQLNg.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6sfjptAgt5VM-kVkqdyU8n1ioSblJ1jsoQLNg.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: italic;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6sfjptAgt5VM-kVkqdyU8n1ioSblJ1gMoQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n1iIq129k.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n1isq129k.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n1iAq129k.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n1iEq129k.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F63fjptAgt5VM-kVkqdyU8n1i8q1w.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3twJwl1FgtIU.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3twJwlRFgtIU.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3twJwl9FgtIU.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3twJwl5FgtIU.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3twJwlBFgg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3vAOwl1FgtIU.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3vAOwlRFgtIU.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3vAOwl9FgtIU.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3vAOwl5FgtIU.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3vAOwlBFgg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3pQPwl1FgtIU.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3pQPwlRFgtIU.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* vietnamese */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3pQPwl9FgtIU.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3pQPwl5FgtIU.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'IBM Plex Mono';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/ibmplexmono/v20/-F6qfjptAgt5VM-kVkqdyU8n3pQPwlBFgg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n:root{--font-family-headings-custom:'TWK Lausanne', sans-serif;--font-family-body-custom:'Inter', sans-serif;--font-weight-body-custom:400;--font-inter:'Inter', sans-serif}@font-face{font-family:'TWK Lausanne';src:url(/fonts/TWKLausanne-250.woff2) format('woff2');font-weight:250;font-style:normal;font-display:swap}@font-face{font-family:'TWK Lausanne';src:url(/fonts/TWKLausanne-250Italic.woff2) format('woff2');font-weight:250;font-style:italic;font-display:swap}@font-face{font-family:'TWK Lausanne';src:url(/fonts/TWKLausanne-300.woff2) format('woff2');font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:'TWK Lausanne';src:url(/fonts/TWKLausanne-300Italic.woff2) format('woff2');font-weight:300;font-style:italic;font-display:swap}@font-face{font-family:'TWK Lausanne';src:url(/fonts/TWKLausanne-350.woff2) format('woff2');font-weight:350;font-style:normal;font-display:swap}@font-face{font-family:'TWK Lausanne';src:url(/fonts/TWKLausanne-350Italic.woff2) format('woff2');font-weight:350;font-style:italic;font-display:swap}@font-face{font-family:'TWK Lausanne';src:url(/fonts/TWKLausanne-400Italic.woff2) format('woff2');font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:'TWK Lausanne';src:url(/fonts/TWKLausanne-400.woff2) format('woff2');font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:'TWK Lausanne';src:url(/fonts/TWKLausanne-600.woff2) format('woff2');font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:'TWK Lausanne';src:url(/fonts/TWKLausanne-600Italic.woff2) format('woff2');font-weight:600;font-style:italic;font-display:swap}@font-face{font-family:'TWK Lausanne';src:url(/fonts/TWKLausanne-700.woff2) format('woff2');font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:'TWK Lausanne';src:url(/fonts/TWKLausanne-700Italic.woff2) format('woff2');font-weight:700;font-style:italic;font-display:swap}.mdx-content,.prose,.prose li,.prose p,[class*=prose],article,body{font-family:'Inter',sans-serif!important;color:#030710!important}.dark .mdx-content,.dark .prose,.dark .prose li,.dark .prose p,.dark [class*=prose],.dark article,.dark body,.dark h1,.dark h2,.dark h3,.dark h4{color:#fff!important}.prose b,.prose b a,.prose strong,.prose strong a,[class*=prose] b,[class*=prose] b a,[class*=prose] strong,[class*=prose] strong a,b,b a,strong,strong a{font-weight:700!important}code,kbd,pre,samp{font-family:'IBM Plex Mono',monospace!important}.dark :not(pre)>code{background-color:#161f34!important}[data-callout-type] :not(pre)>code{background-color:#ffffff20!important}h1,h2,h3,h4{font-family:'TWK Lausanne',sans-serif!important;color:#030710!important}[data-callout-type] :is(h1, h2, h3, h4){color:inherit!important}[data-component-part=card-title]{font-family:'TWK Lausanne',sans-serif!important}.dark .card img[src*=\".svg\"],.dark [data-component-part=card-icon] img[src*=\".svg\"],.dark img[src*=engine-icon-no-bg-dark]{filter:invert(1)}.dark .card img[src*=engine-icon-no-bg-dark],.dark [data-component-part=card-icon] img[src*=engine-icon-no-bg-dark]{content:url(/images/brand/engine-icon-no-bg-light.svg);filter:none}#sidebar-title{font-weight:600!important}:where(.h-\\\\[1lh\\\\].flex.items-center.flex-1.justify-end),:where([class*=\"h-[1lh]\"][class*=\"items-center\"][class*=\"flex-1\"][class*=\"justify-end\"]){flex:0 0 auto!important;width:fit-content!important}:where(.h-\\\\[1lh\\\\].flex.items-center.flex-1.justify-end) svg,:where([class*=\"h-[1lh]\"][class*=\"items-center\"][class*=\"flex-1\"][class*=\"justify-end\"]) svg{flex-shrink:0!important}.prose,[class*=prose]{--tw-prose-counters:currentColor!important;--tw-prose-bullets:currentColor!important}.mdx-content li::marker{font-family:'Inter',sans-serif!important}.mdx-content li>span[data-as=p]+span[data-rmiz],.prose li>span[data-as=p]+span[data-rmiz],[class*=prose] li>span[data-as=p]+span[data-rmiz],article li>span[data-as=p]+span[data-rmiz]{display:block;margin-top:2em;margin-bottom:2em}a code{color:inherit!important;text-decoration:underline!important;text-underline-offset:3px!important}.mermaid{text-align:center;display:flex;justify-content:center}.mermaid .edgeLabel p,.mermaid .nodeLabel p{font-family:inherit!important}.sandbox-diagram,.sandbox-diagram-container,.sandbox-diagram-link{width:100%}.sandbox-diagram{height:auto}.sandbox-diagram-link{display:block;text-decoration:none!important}#pagination,.dark .sandbox-diagram-link[data-diagram-theme=light],.sandbox-diagram-link[data-diagram-theme=dark]{display:none}.dark .sandbox-diagram-link[data-diagram-theme=dark]{display:block}.skills-composition-diagram{margin:1.5rem 0 2rem;text-align:center}.skills-composition-diagram img{width:100%;max-width:920px;border-radius:16px;display:inline-block}#banner a,.dark .nodeLabel,.dark .nodeLabel p{color:inherit!important}.dark .edgeLabel,.dark .edgeLabel p,.dark .edgeLabel span{color:#cce9ff!important}.dark .edgeLabel p,.dark span.edgeLabel{background-color:#030710!important}.dark .edgeLabel .labelBkg,.dark .edgeLabel rect{fill:#030710!important}.dark .cluster-label div,.dark .cluster-label p,.dark .cluster-label span{color:#cce9ff!important}.dark .cluster-label text,.dark .cluster-label tspan,.dark .mermaid .messageText,.dark .mermaid text.actor,.dark .mermaid text.actor tspan{fill:#cce9ff!important}.dark .cluster-label span p{background-color:transparent!important}.dark .labelText,.dark .loopText,.dark .messageText,.dark .noteText,.dark text.actor{fill:#cce9ff}.dark .mermaid rect.actor{fill:#161f34!important}.content table td,.content table th,.markdown table td,.markdown table th,.prose table td,.prose table th,[class*=prose] table td,[class*=prose] table th,article table td,article table th{vertical-align:middle!important;line-height:1.5!important}.sandbox-impact-table table td{vertical-align:top!important}.sandbox-impact{display:inline-block;margin-bottom:.375rem;padding:.125rem .5rem;border-radius:.25rem;font-size:.75rem;font-weight:600;line-height:1.5}.sandbox-impact--api{background-color:#fef3c7;color:#78350f}.sandbox-impact--host{background-color:#fdf3ff;color:#504b5f}.sandbox-impact--pool{background-color:#f8e8e6;color:#634643}.sandbox-impact--data{background-color:#fce8e6;color:#7d2a24}.sandbox-impact--cache{background-color:#e5f4ff;color:#2f4b68}.dark .sandbox-impact--api{background-color:#5c3a0e;color:#fde68a}.dark .sandbox-impact--host{background-color:#161f34;color:#d5c3f7}.dark .sandbox-impact--pool{background-color:#161f34;color:#fbb0a5}.dark .sandbox-impact--data{background-color:#634643;color:#fce8e6}.dark .sandbox-impact--cache{background-color:#161f34;color:#cce9ff}.prose-gray.text-lg.mt-2{display:none!important}.compact-first-col [data-table-wrapper]{overflow-x:visible!important}.compact-first-col table{table-layout:auto!important;width:100%!important}.compact-first-col table td,.compact-first-col table th{min-width:0!important}.compact-first-col table td:first-child,.compact-first-col table th:first-child{width:1%!important;white-space:nowrap!important}.deepagents-eval-category-matrix{display:block;width:100%}.deepagents-eval-category-matrix table{width:auto!important;min-width:0!important;max-width:100%;table-layout:auto!important}.deepagents-eval-category-matrix table td,.deepagents-eval-category-matrix table th{min-width:0!important;box-sizing:border-box}.deepagents-eval-category-matrix table td:not(:first-child),.deepagents-eval-category-matrix table th:not(:first-child){white-space:nowrap;width:1%;padding-left:.5rem;padding-right:.5rem;vertical-align:top}.home-page .columns.card-group{grid-template-columns:minmax(0,1fr)!important}@media (min-width:640px){.home-page .columns.card-group{grid-template-columns:repeat(var(--cols, 1),minmax(0,1fr))!important}}:root:has(.home-page) .source-links,body:has(.home-page) .source-links{display:none!important}.home-page~:is(.callout, [data-callout-type]){display:none!important}[data-callout-type=note]{background-color:#e0edf8!important;border-color:#7ba3c9!important}[data-callout-type=note] [data-component-part=callout-content],[data-callout-type=note] [data-component-part=callout-content] *{color:#1e3a52!important}[data-callout-type=note] [data-component-part=callout-icon] svg{color:#2c5282!important}.dark [data-callout-type=note]{background-color:#2a3f5f!important;border-color:#3d5a80!important}.dark [data-callout-type=note] [data-component-part=callout-content],.dark [data-callout-type=note] [data-component-part=callout-content] *,.dark [data-callout-type=note] [data-component-part=callout-icon] svg{color:#d6eeff!important}[data-callout-type=check],[data-callout-type=tip]{background-color:#d4e8a8!important;border-color:#8da042!important}[data-callout-type=check] [data-component-part=callout-content],[data-callout-type=check] [data-component-part=callout-content] *,[data-callout-type=tip] [data-component-part=callout-content],[data-callout-type=tip] [data-component-part=callout-content] *{color:#2d3319!important}[data-callout-type=check] [data-component-part=callout-icon] svg,[data-callout-type=tip] [data-component-part=callout-icon] svg{color:#5a6b1f!important}.dark [data-callout-type=check],.dark [data-callout-type=tip]{background-color:#2e3900!important;border-color:#6e8900!important}.dark [data-callout-type=check] [data-component-part=callout-content],.dark [data-callout-type=check] [data-component-part=callout-content] *,.dark [data-callout-type=check] [data-component-part=callout-icon] svg,.dark [data-callout-type=tip] [data-component-part=callout-content],.dark [data-callout-type=tip] [data-component-part=callout-content] *,.dark [data-callout-type=tip] [data-component-part=callout-icon] svg{color:#c3e796!important}[data-callout-type=warning]{background-color:#fef3c7!important;border-color:#d97706!important}[data-callout-type=warning] [data-component-part=callout-content],[data-callout-type=warning] [data-component-part=callout-content] *{color:#78350f!important}[data-callout-type=warning] [data-component-part=callout-icon] svg{color:#b45309!important}.dark [data-callout-type=warning]{background-color:#5c3a0e!important;border-color:#b45309!important}.dark [data-callout-type=warning] [data-component-part=callout-content],.dark [data-callout-type=warning] [data-component-part=callout-content] *,.dark [data-callout-type=warning] [data-component-part=callout-icon] svg{color:#fde68a!important}[data-callout-type=danger]{background-color:#fce8e6!important;border-color:#c75a52!important}[data-callout-type=danger] [data-component-part=callout-content],[data-callout-type=danger] [data-component-part=callout-content] *{color:#7d2a24!important}[data-callout-type=danger] [data-component-part=callout-icon] svg{color:#b91c1c!important}.dark [data-callout-type=danger]{background-color:rgb(239 68 68/.15)!important;border-color:rgb(239 68 68/.4)!important}.dark [data-callout-type=danger] [data-component-part=callout-content],.dark [data-callout-type=danger] [data-component-part=callout-content] *{color:#fecaca!important}.dark [data-callout-type=danger] [data-component-part=callout-icon] svg{color:#fca5a5!important}[data-callout-type=info]{background-color:#fafafa!important;border-color:#d1d5db!important}[data-callout-type=info] [data-component-part=callout-content],[data-callout-type=info] [data-component-part=callout-content] *{color:#374151!important}[data-callout-type=info] [data-component-part=callout-icon] svg{color:#6b7280!important}.dark [data-callout-type=info]{background-color:#27272a!important;border-color:#52525b!important}.dark [data-callout-type=info] [data-component-part=callout-content],.dark [data-callout-type=info] [data-component-part=callout-content] *,.dark [data-callout-type=info] [data-component-part=callout-icon] svg{color:#d4d4d8!important}[data-callout-type=example]{background-color:#f8e0ed!important;border-color:#c9a8b8!important}[data-callout-type=example] [data-component-part=callout-content],[data-callout-type=example] [data-component-part=callout-content] *{color:#4a3540!important}[data-callout-type=example] [data-component-part=callout-icon] svg{color:#735a6c!important}.dark [data-callout-type=example],[data-callout-type=question]{background-color:#4a3d52!important;border-color:#735a6c!important}.dark [data-callout-type=example] [data-component-part=callout-content],.dark [data-callout-type=example] [data-component-part=callout-content] *,.dark [data-callout-type=example] [data-component-part=callout-icon] svg{color:#e8d4dc!important}[data-callout-type=question]{background-color:#e8e0ec!important}[data-callout-type=question] [data-component-part=callout-content],[data-callout-type=question] [data-component-part=callout-content] *{color:#3d3142!important}[data-callout-type=question] [data-component-part=callout-icon] svg{color:#5a4a62!important}.dark [data-callout-type=question]{background-color:rgb(115 90 108/.25)!important;border-color:#735a6c!important}.dark [data-callout-type=question] [data-component-part=callout-content],.dark [data-callout-type=question] [data-component-part=callout-content] *{color:#e8d4ec!important}.dark [data-callout-type=question] [data-component-part=callout-icon] svg{color:#d5c3d7!important}[data-callout-type=callout]{background-color:#ede9fe!important;border-color:#7c3aed!important}[data-callout-type=callout] [data-component-part=callout-content],[data-callout-type=callout] [data-component-part=callout-content] *{color:#4c1d95!important}[data-callout-type=callout] [data-component-part=callout-icon] svg{color:#6d28d9!important}.dark [data-callout-type=callout]{background-color:rgb(124 58 237/.15)!important;border-color:#7c3aed!important}.dark [data-callout-type=callout] [data-component-part=callout-content],.dark [data-callout-type=callout] [data-component-part=callout-content] *{color:#e9d5ff!important}.dark [data-callout-type=callout] [data-component-part=callout-icon] svg{color:#c4b5fd!important}[data-callout-type] [data-component-part=prompt-action-copy-button],[data-callout-type] [data-component-part=prompt-action-copy-button] *{color:#fff!important}[data-callout-type] [data-component-part=prompt-action-cursor-button],[data-callout-type] [data-component-part=prompt-action-cursor-button] *{color:#1c1917!important}[data-callout-type] [data-component-part=prompt-action-cursor-button]{border-color:#e7e5e4!important}.dark [data-callout-type] [data-component-part=prompt-action-cursor-button],.dark [data-callout-type] [data-component-part=prompt-action-cursor-button] *{color:#fafaf9!important}.dark [data-callout-type] [data-component-part=prompt-action-cursor-button]{border-color:#44403c!important}.source-links [data-callout-type]{background-color:#eef2f7!important;border-color:#dde2e9!important}.source-links [data-callout-type] [data-component-part=callout-content],.source-links [data-callout-type] [data-component-part=callout-content] *,.source-links [data-callout-type] [data-component-part=callout-icon] svg{color:#5c6370!important}.source-links [data-callout-type] [data-component-part=callout-icon] svg{background-color:#5c6370!important}.dark .source-links [data-callout-type] a,.source-links [data-callout-type] a{color:inherit!important;text-decoration-color:currentColor!important}.dark .source-links [data-callout-type]{background-color:#1e2028!important;border-color:#2a2d38!important}.dark .source-links [data-callout-type] [data-component-part=callout-content],.dark .source-links [data-callout-type] [data-component-part=callout-content] *,.dark .source-links [data-callout-type] [data-component-part=callout-icon] svg{color:#8b8f99!important}.dark .source-links [data-callout-type] [data-component-part=callout-icon] svg{background-color:#8b8f99!important}.card{background-color:transparent!important}.card.card-tip,[data-component=card].card-tip{background-color:#d4e8a8!important;border-color:#8da042!important}.card.card-tip [data-component-part=card-content],.card.card-tip [data-component-part=card-content] *,.card.card-tip [data-component-part=card-title],.card.card-tip a,.card.card-tip p,[data-component=card].card-tip [data-component-part=card-content],[data-component=card].card-tip [data-component-part=card-content] *,[data-component=card].card-tip [data-component-part=card-title],[data-component=card].card-tip a,[data-component=card].card-tip p{color:#2d3319!important}.card.card-tip [data-component-part=card-icon] svg,[data-component=card].card-tip [data-component-part=card-icon] svg{color:#5a6b1f!important}.dark .card.card-tip,.dark [data-component=card].card-tip{background-color:#2e3900!important;border-color:#6e8900!important}.dark .card.card-tip [data-component-part=card-content],.dark .card.card-tip [data-component-part=card-content] *,.dark .card.card-tip [data-component-part=card-icon] svg,.dark .card.card-tip [data-component-part=card-title],.dark .card.card-tip a,.dark .card.card-tip p,.dark [data-component=card].card-tip [data-component-part=card-content],.dark [data-component=card].card-tip [data-component-part=card-content] *,.dark [data-component=card].card-tip [data-component-part=card-icon] svg,.dark [data-component=card].card-tip [data-component-part=card-title],.dark [data-component=card].card-tip a,.dark [data-component=card].card-tip p{color:#c3e796!important}.dark .card:not(.card-tip),.dark [data-component=card]:not(.card-tip){border-color:#4f5d73!important}.dark [class*=border-][class*=rounded],.dark [data-radix-collection-item],.dark [data-radix-popper-content-wrapper] *,.dark [role=combobox],.dark [role=listbox],.dark [role=menu],.dark button[class*=border],.dark details,.dark details>summary,.dark table *{border-color:#4f5d73!important}.dark table a{color:#7fc8ff!important;text-decoration:underline!important;text-decoration-color:#7fc8ff!important;text-underline-offset:2px}table.products-page td.tdlist,table.products-page th.tdlist{vertical-align:top!important}[data-component-part=tabs-list]{-webkit-mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 1.5rem),transparent 100%);mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 1.5rem),transparent 100%)}@supports (animation-timeline:scroll()){[data-component-part=tabs-list]{animation:tabs-overflow-mask linear both;animation-timeline:scroll(self inline)}@keyframes tabs-overflow-mask{0%{-webkit-mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 1.5rem),transparent 100%);mask-image:linear-gradient(to right,#000 0,#000 calc(100% - 1.5rem),transparent 100%)}1%,99%{-webkit-mask-image:linear-gradient(to right,transparent 0,#000 1.5rem,#000 calc(100% - 1.5rem),transparent 100%);mask-image:linear-gradient(to right,transparent 0,#000 1.5rem,#000 calc(100% - 1.5rem),transparent 100%)}to{-webkit-mask-image:linear-gradient(to right,transparent 0,#000 1.5rem,#000 100%);mask-image:linear-gradient(to right,transparent 0,#000 1.5rem,#000 100%)}}}html.hide-language-dropdown .nav-dropdown-trigger,html[data-current-path$=\"/deepagents/code/overview\"] .breadcrumb-list,html[data-current-path$=\"/deepagents/code/overview\"] breadcrumb-list{display:none!important}.adl-engine{position:relative;max-width:1180px;margin:2.5rem auto;container-type:inline-size;display:flex;flex-direction:column;align-items:center}.adl-engine-box{text-align:center;background:#e5f4ff;border:1.5px solid #006ddd;border-radius:16px;padding:1.4cqw 3cqw;margin-bottom:2cqw}.adl-engine-title{font-weight:600;font-size:clamp(20px,3.2cqw,34px);color:#0a1929;text-decoration:none}.adl-engine-title:hover{text-decoration:underline}.adl-engine-tagline{font-size:clamp(13px,1.9cqw,22px);color:#40668d;margin-top:.4cqw}.adl-board{position:relative;width:100%;max-width:1100px;margin:1.5rem auto 0;aspect-ratio:1200/780;container-type:inline-size;z-index:1}.adl-arrows{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0}.adl-arrow{stroke:#6aa3d0;stroke-width:2;stroke-dasharray:3 6;fill:none}.adl-arrow-head{fill:#6aa3d0}.adl-panel{position:absolute;box-sizing:border-box;border-radius:16px;background:#e5f4ff;border:1.5px solid #006ddd;padding:1.4cqw;display:flex;flex-direction:column;gap:1cqw;z-index:1}.adl-panel-title{color:#00355c;font-weight:600;font-size:clamp(13px,2cqw,22px);line-height:1.1}.adl-pills{display:grid;grid-template-columns:1fr 1fr;gap:.8cqw;flex:1;align-content:center}.adl-pill{display:flex;align-items:center;justify-content:center;text-align:center;background:#fff;border:1px solid #b8d8f0;border-radius:8px;color:#0a3553;font-size:clamp(9px,1.25cqw,14px);font-weight:500;text-decoration:none;padding:.7cqw .4cqw;line-height:1.15;transition:background .15s ease,border-color .15s ease,color .15s ease}.adl-pill:hover{background:#cde7fa;border-color:#006ddd;color:#003f7a}.adl-hub{position:absolute;left:50%;top:43.5%;transform:translate(-50%,-50%);flex-direction:column;gap:1cqw;z-index:1}.adl-govern,.adl-hub,.adl-hub-pill{display:flex;align-items:center}.adl-hub-pill{justify-content:center;text-align:center;background:#33415a;color:#fff;border-radius:12px;font-size:clamp(12px,1.7cqw,20px);font-weight:600;text-decoration:none;padding:1cqw 2.2cqw;white-space:nowrap;transition:background .15s ease}a.adl-hub-pill:hover{background:#45577a}.adl-govern{position:absolute;left:38%;width:24%;top:84%;flex-direction:column;gap:.8cqw;z-index:1}.adl-govern-title{color:#006ddd;font-weight:600;font-size:clamp(12px,1.8cqw,20px)}.adl-govern .adl-pill{width:75%}.dark .adl-arrow{stroke:#4a7ca0}.dark .adl-arrow-head{fill:#4a7ca0}.dark .adl-panel{background:#102a3f;border-color:#4ba8e8}.dark .adl-panel-title{color:#b8d8f0}.dark .adl-pill{background:#0d1b27;border-color:#2c4a66;color:#cce5fb}.dark .adl-pill:hover{background:#1a3a52;border-color:#6cb6ee;color:#fff}.dark .adl-govern-title{color:#6cb6ee}.dark .adl-engine-title{color:#e6f4ff}.dark .adl-engine-tagline{color:#6cb6ee}.dark .adl-engine-box{background:#102a3f;border-color:#4ba8e8}.dark .adl-hub-pill{background:#1b2737;color:#cfe0f2}.dark a.adl-hub-pill:hover{background:#27374d}.integration-downloads-table td,.integration-downloads-table th{text-align:left}.integration-downloads-table th[data-sortable=true]{cursor:pointer;user-select:none;white-space:nowrap}.integration-downloads-table th[data-sortable=true]::after{content:\" \\2195\";opacity:.35;font-size:.85em}.integration-downloads-table th[aria-sort=ascending]::after{content:\" \\2191\";opacity:1}.integration-downloads-table th[aria-sort=descending]::after{content:\" \\2193\";opacity:1}.integration-downloads-table th[data-sortable=true]:hover{color:#006ddd}.dark .integration-downloads-table th[data-sortable=true]:hover{color:#7fc8ff}html[data-current-path=\"/langsmith/self-hosted-changelog\"] .changelog-chapter-heading{font-size:clamp(2rem,4vw,2.625rem);line-height:1.15;font-weight:700;border-top:2px solid currentColor;padding-top:1.25rem}.changelog-chapter-index{display:grid;gap:.75rem;padding-top:1rem;border-top:1px solid #cddfee;font-size:.875rem;line-height:1.5}#changelog-chapters-sidebar{margin:1.5rem 0 0 2.5rem}#changelog-chapters-inline{margin:1.5rem 0}.changelog-chapter-links{display:flex;flex-wrap:wrap;gap:.75rem 1rem}#changelog-chapters-sidebar .changelog-chapter-links{flex-direction:column}.changelog-chapter-links a{color:#40668d;text-decoration:none}.changelog-chapter-links a:hover{text-decoration:underline}.changelog-chapter-links a:focus-visible{outline:2px solid currentColor;outline-offset:4px}.dark .changelog-chapter-index{border-color:#31445e}.dark .changelog-chapter-links a{color:#a7c5de}@media (min-width:1280px){#changelog-chapters-inline:not(.changelog-chapter-index-fallback){display:none}}.registry-diagram{border:2px solid #40668d;border-radius:16px;padding:16px 16px 4px}.dark .registry-diagram{border-color:#2f4b68}.registry-diagram-title{text-align:center;font-weight:600;margin:0 0 8px}.registry-diagram [data-component-part=card-content-container]{display:flex;flex-direction:column;align-items:center;text-align:center}.registry-diagram .registry-diagram-foundation{background-color:#e5f4ff!important;border-color:#006ddd!important}.dark .registry-diagram .registry-diagram-foundation{background-color:#161f34!important;border-color:#40668d!important}"}],"page":{"pagePath":"langsmith/alerts","slug":"/langsmith/alerts","pageMetadata":{"title":"Alerts in LangSmith","sidebarTitle":"Alerts","description":null,"href":"/langsmith/alerts"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,Callout,CodeBlock,Heading,Info,Note,OptimizedImage,Tab,Table,Tabs,Tip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!Callout)_missingMdxReference(`Callout`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Self-hosted version requirement`}),`: Access to alerts requires Helm chart version `,_jsx(_components.strong,{children:`0.10.3`}),` or later.`]})}),`\n`,_jsx(_components.p,{children:`Effective observability in LLM applications requires proactive detection of failures, performance degradations, and regressions. LangSmith’s alerts feature helps identify critical issues such as:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`API rate limit violations from model providers.`}),`\n`,_jsx(_components.li,{children:`Latency increases for your application.`}),`\n`,_jsx(_components.li,{children:`Application changes that affect feedback scores reflecting end-user experience.`}),`\n`,_jsx(_components.li,{children:`Unexpected cost spikes from LLM usage.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Alerts in LangSmith are scoped to one `,_jsx(_components.a,{href:`/langsmith/observability-concepts#trace-containers`,children:`trace container`}),`, requiring separate configuration for each one you monitor. Which container that is depends on how your workspace is organized.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Agent-based workspaces.`}),` This section applies if your workspace organizes traces by `,_jsx(_components.a,{href:`/langsmith/agent-registry`,children:`agent and environment`}),`. To check, look at the control at the top left: it names your workspace. If it shows the LangSmith logo instead, and the sidebar has an `,_jsx(_components.strong,{children:`Application`}),` section with an application picker, your workspace is project-based. Skip this section and read `,_jsx(_components.a,{href:`/langsmith/observability-concepts#tracing-projects`,children:`Tracing projects`}),`.`]})}),`\n`,_jsxs(_components.p,{children:[`An alert is scoped to one `,_jsx(_components.a,{href:`/langsmith/agent-environments#select-an-environment`,children:`environment`}),` of one `,_jsx(_components.a,{href:`/langsmith/agent-registry#agent`,children:`agent`}),`. Alerting on production behavior therefore does not require a filter that excludes test traffic, because the environment already excludes it.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Project-based workspaces.`}),` This section applies if your workspace organizes traces by `,_jsx(_components.a,{href:`/langsmith/observability-concepts#tracing-projects`,children:`tracing project`}),`. To check, look at the control at the top left. In a project-based workspace, it shows the LangSmith logo, and the sidebar has an `,_jsx(_components.strong,{children:`Application`}),` section with an application picker. If the control shows your workspace name instead, your workspace is agent-based. Skip this section and read `,_jsx(_components.a,{href:`/langsmith/agent-registry`,children:`Agent Registry`}),`.`]})}),`\n`,_jsx(_components.p,{children:`An alert is scoped to one tracing project.`}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`Alerts can `,_jsx(_components.a,{href:`#step-4-configure-notification-channel`,children:`route`}),` to Slack, PagerDuty, Dynatrace, or any HTTP endpoint via webhook. The `,_jsx(_components.strong,{children:`Webhook`}),` tab includes `,_jsx(_components.a,{href:`#example-recipes`,children:`example recipes`}),` for Microsoft Teams, email, Slack on self-hosted deployments, and Google Chat (which requires middleware).`]})}),`\n`,_jsx(_components.p,{children:`Follow these steps to configure an alert.`}),`\n`,_jsx(Heading,{level:`2`,id:`step-1-navigate-to-create-alert`,children:`Step 1: Navigate to create alert`}),`\n`,_jsxs(_components.p,{children:[`In the `,_jsx(_components.a,{href:`https://smith.langchain.com?utm_source=docs\u0026utm_medium=cta\u0026utm_campaign=langsmith-signup\u0026utm_content=langsmith-alerts`,children:`UI`}),`, navigate to the tracing project you would like to configure alerts for, or to the agent environment in an agent-based workspace. Click the `,_jsx(_components.strong,{children:`Alerts`}),` icon on the top right-hand corner of the page to view existing alerts for it and set up a new alert.`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-2-select-metric-type`,children:`Step 2: Select metric type`}),`\n`,_jsx(_components.p,{children:`LangSmith provides threshold-based alerting on the following metrics:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Metric Type`}),_jsx(_components.th,{children:`Description`}),_jsx(_components.th,{children:`Use Case`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Run Count`})}),_jsxs(_components.td,{children:[`Tracks the total number of `,_jsx(_components.a,{href:`/langsmith/observability-concepts#runs`,children:`runs`}),` over a time window.`]}),_jsx(_components.td,{children:`Monitor whether a pipeline is producing runs at the expected volume and alert when it drops unexpectedly.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Cost`})}),_jsx(_components.td,{children:`Tracks the total cost of runs over a time window.`}),_jsxs(_components.td,{children:[`Monitor LLM spending to alert when costs exceed expected thresholds. Requires `,_jsx(_components.a,{href:`/langsmith/cost-tracking`,children:`cost tracking`}),` to be configured.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Errors`})}),_jsx(_components.td,{children:`Tracks runs with an error status. Alert on total error count or error percent (rate of errored runs out of all runs).`}),_jsx(_components.td,{children:`Monitor for failures in an application, or alert when the error rate exceeds an acceptable threshold.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Feedback Score`})}),_jsx(_components.td,{children:`Measures the average feedback score.`}),_jsxs(_components.td,{children:[`Track `,_jsx(_components.a,{href:`/langsmith/attach-user-feedback`,children:`feedback from end users`}),` or `,_jsx(_components.a,{href:`/langsmith/online-evaluations-llm-as-judge`,children:`online evaluation results`}),` to alert on regressions.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Latency`})}),_jsx(_components.td,{children:`Measures average run execution time.`}),_jsx(_components.td,{children:`Tracks the latency of your application to alert on spikes and performance bottlenecks.`})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Additionally, for `,_jsx(_components.strong,{children:`Errors`}),` and `,_jsx(_components.strong,{children:`Latency`}),`, you can use the filter builder to stack conditions on fields such as `,_jsx(_components.strong,{children:`Status`}),`, `,_jsx(_components.strong,{children:`Run Type`}),`, `,_jsx(_components.strong,{children:`Tag`}),`, and `,_jsx(_components.strong,{children:`Error`}),`. For example, you can scope an error alert to runs where `,_jsx(_components.strong,{children:`Status`}),` is `,_jsx(_components.code,{children:`error`}),`, `,_jsx(_components.strong,{children:`Run Type`}),` is `,_jsx(_components.code,{children:`llm`}),`, `,_jsx(_components.strong,{children:`Tag`}),` is `,_jsx(_components.code,{children:`support_agent`}),`, and `,_jsx(_components.strong,{children:`Error`}),` matches `,_jsx(_components.code,{children:`RateLimitExceeded`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Alert filters combine conditions with AND only. For the filter syntax that alert rules accept through the API, refer to `,_jsx(_components.a,{href:`/langsmith/trace-query-syntax#alert-filters`,children:`Alert filters`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`step-3-define-alert-conditions`,children:`Step 3: Define alert conditions`}),`\n`,_jsx(_components.p,{children:`Alert conditions consist of several components:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Aggregation Method`}),`: Average, Percentage, or Count.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Comparison Operator`}),`: `,_jsx(_components.code,{children:`>=`}),`, `,_jsx(_components.code,{children:`\u003c=`}),`, or exceeds threshold.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Threshold Value`}),`: Numerical value triggering the alert.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Aggregation Window`}),`: Time period for metric calculation (choose between 5 or 15 minutes).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Feedback Key`}),` (Feedback Score alerts only): Specific feedback metric to monitor.`]}),`\n`]}),`\n`,_jsx(`div`,{style:{textAlign:`center`},children:_jsx(OptimizedImage,{src:`https://mintcdn.com/langchain-5e9cc07a/aKRoUGXX6ygp4DlC/langsmith/images/define-conditions.png?fit=max\u0026auto=format\u0026n=aKRoUGXX6ygp4DlC\u0026q=85\u0026s=d92406d84dec4f1b827b82a989df30b9`,alt:`Alert Condition Configuration`,\"data-og-width\":`597`,width:`597`,\"data-og-height\":`112`,height:`112`,\"data-path\":`langsmith/images/define-conditions.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/langchain-5e9cc07a/aKRoUGXX6ygp4DlC/langsmith/images/define-conditions.png?w=280\u0026fit=max\u0026auto=format\u0026n=aKRoUGXX6ygp4DlC\u0026q=85\u0026s=3311a45f1a32527a54c71d4966fdac3b 280w, https://mintcdn.com/langchain-5e9cc07a/aKRoUGXX6ygp4DlC/langsmith/images/define-conditions.png?w=560\u0026fit=max\u0026auto=format\u0026n=aKRoUGXX6ygp4DlC\u0026q=85\u0026s=6ed12bea3c447c20bfff16e4e58d27e6 560w, https://mintcdn.com/langchain-5e9cc07a/aKRoUGXX6ygp4DlC/langsmith/images/define-conditions.png?w=840\u0026fit=max\u0026auto=format\u0026n=aKRoUGXX6ygp4DlC\u0026q=85\u0026s=78955506ecd68ba0bac2ea7053837d6e 840w, https://mintcdn.com/langchain-5e9cc07a/aKRoUGXX6ygp4DlC/langsmith/images/define-conditions.png?w=1100\u0026fit=max\u0026auto=format\u0026n=aKRoUGXX6ygp4DlC\u0026q=85\u0026s=4a0bf3da7b34bdd56777a350315b3f6a 1100w, https://mintcdn.com/langchain-5e9cc07a/aKRoUGXX6ygp4DlC/langsmith/images/define-conditions.png?w=1650\u0026fit=max\u0026auto=format\u0026n=aKRoUGXX6ygp4DlC\u0026q=85\u0026s=56a4a9e40b9c2a870b999c52dd13dd68 1650w, https://mintcdn.com/langchain-5e9cc07a/aKRoUGXX6ygp4DlC/langsmith/images/define-conditions.png?w=2500\u0026fit=max\u0026auto=format\u0026n=aKRoUGXX6ygp4DlC\u0026q=85\u0026s=5207fb3afe3b40873280d9f23e3e0e24 2500w`})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Example:`}),` The configuration in the screenshot would generate an alert when more than 5% of runs within the past 5 minutes result in errors.`]}),`\n`,_jsx(_components.p,{children:`You can preview alert behavior over a historical time window to understand how many datapoints, and which ones, would have triggered an alert at a chosen threshold (indicated in red). For example, setting an average latency threshold of 60 seconds for a project lets you visualize potential alerts, as shown in the following screenshot.`}),`\n`,_jsx(`div`,{style:{textAlign:`center`},children:_jsx(OptimizedImage,{src:`https://mintcdn.com/langchain-5e9cc07a/E8FdemkcQxROovD9/langsmith/images/alert-preview.png?fit=max\u0026auto=format\u0026n=E8FdemkcQxROovD9\u0026q=85\u0026s=d7f26bce1113c50bec8f5853c6448415`,alt:`Alert Metrics`,\"data-og-width\":`863`,width:`863`,\"data-og-height\":`545`,height:`545`,\"data-path\":`langsmith/images/alert-preview.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/langchain-5e9cc07a/E8FdemkcQxROovD9/langsmith/images/alert-preview.png?w=280\u0026fit=max\u0026auto=format\u0026n=E8FdemkcQxROovD9\u0026q=85\u0026s=a508e02a73579624ae120276664e0e6a 280w, https://mintcdn.com/langchain-5e9cc07a/E8FdemkcQxROovD9/langsmith/images/alert-preview.png?w=560\u0026fit=max\u0026auto=format\u0026n=E8FdemkcQxROovD9\u0026q=85\u0026s=4f7c5616752dfea80a346be50532f442 560w, https://mintcdn.com/langchain-5e9cc07a/E8FdemkcQxROovD9/langsmith/images/alert-preview.png?w=840\u0026fit=max\u0026auto=format\u0026n=E8FdemkcQxROovD9\u0026q=85\u0026s=dd7d2d27fdb2335640d5ac43b6747baf 840w, https://mintcdn.com/langchain-5e9cc07a/E8FdemkcQxROovD9/langsmith/images/alert-preview.png?w=1100\u0026fit=max\u0026auto=format\u0026n=E8FdemkcQxROovD9\u0026q=85\u0026s=abbaea739f003fcbe97ee00e55e68927 1100w, https://mintcdn.com/langchain-5e9cc07a/E8FdemkcQxROovD9/langsmith/images/alert-preview.png?w=1650\u0026fit=max\u0026auto=format\u0026n=E8FdemkcQxROovD9\u0026q=85\u0026s=55672ba9518816caf74921bc26694ffa 1650w, https://mintcdn.com/langchain-5e9cc07a/E8FdemkcQxROovD9/langsmith/images/alert-preview.png?w=2500\u0026fit=max\u0026auto=format\u0026n=E8FdemkcQxROovD9\u0026q=85\u0026s=f67b99c4b5d709b1756d5b674a20dba1 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`step-4-configure-notification-channel`,children:`Step 4: Configure notification channel`}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Slack`,id:`slack`,\"data-child-heading-ids\":`[\"1-configure-the-slack-notification\",\"2-test-the-integration\",\"notification-format\"]`,children:[_jsx(_components.p,{children:`Send alert notifications directly to a Slack channel using LangSmith’s native Slack integration.`}),_jsx(Note,{children:_jsxs(_components.p,{children:[`The native Slack notification type is available on LangSmith Cloud and on self-hosted deployments with a `,_jsx(_components.a,{href:`/langsmith/self-host-slack`,children:`configured Slack app`}),`. If your self-hosted deployment does not support that connection, use the `,_jsx(_components.a,{href:`#example-recipes`,children:`webhook Slack recipe`}),` in the `,_jsx(_components.strong,{children:`Webhook`}),` tab.`]})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Prerequisites`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`A Slack workspace connected to your LangSmith organization. If you have not connected one yet, LangSmith will prompt you to do so inline when you configure this notification type.`}),`\n`]}),_jsx(Heading,{level:`3`,id:`1-configure-the-slack-notification`,children:`1. Configure the Slack notification`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Notification Settings`}),` section of your alert setup, select `,_jsx(_components.strong,{children:`Slack`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click the channel selector. If no Slack workspace is linked yet, click `,_jsx(_components.strong,{children:`Connect Slack`}),` and complete the OAuth flow to authorize the configured Slack app.`]}),`\n`,_jsx(_components.li,{children:`Select the workspace and channel from the dropdown. Click the refresh icon if the channel does not appear immediately.`}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Save`}),` to save the notification configuration.`]}),`\n`]}),_jsx(_components.p,{children:`LangSmith joins the selected public channel when it first delivers a message, if needed. To post to a private channel, invite the configured Slack app to that channel in Slack first.`}),_jsx(Heading,{level:`3`,id:`2-test-the-integration`,children:`2. Test the integration`}),_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Send Test Notification`}),` to verify that LangSmith can reach the channel. Check the channel for the test message.`]}),_jsx(Heading,{level:`3`,id:`notification-format`,children:`Notification format`}),_jsx(_components.p,{children:`When an alert triggers, LangSmith posts a structured Slack message that includes:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Headline`}),`: The alert name and your LangSmith workspace name.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Detail line`}),`: The metric attribute, triggered value, comparison operator, configured threshold, aggregation method, and time window — for example: `,_jsx(_components.code,{children:`Total Cost: $12.50 ≥ $5.00 · avg · 30 min`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Action buttons`}),`: `,_jsx(_components.strong,{children:`View Alert`}),` (links to the alert preview in LangSmith) and `,_jsx(_components.strong,{children:`View Runs`}),` (links to the filtered runs that triggered the alert).`]}),`\n`]})]}),_jsxs(Tab,{title:`PagerDuty`,id:`pagerduty`,\"data-child-heading-ids\":`[\"1-create-a-service-in-pagerduty\",\"2-obtain-integration-key\",\"3-configure-langsmith-alert-with-pagerduty\",\"troubleshooting\",\"additional-resources\"]`,children:[_jsxs(_components.p,{children:[`Configure PagerDuty as a notification channel using PagerDuty’s `,_jsx(_components.a,{href:`https://developer.pagerduty.com/docs/events-api-v2-overview`,children:`Events API v2`}),`. This integration allows critical LLM application issues to trigger PagerDuty incidents, enabling rapid response through your established incident management workflow.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Prerequisites`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`An active PagerDuty account with administrator access`}),`\n`,_jsx(_components.li,{children:`Appropriate service-level permissions in PagerDuty`}),`\n`]}),_jsx(_components.p,{children:`If on a custom deployment of LangSmith, make sure there are no firewall settings blocking egress traffic from LangSmith services.`}),_jsx(Heading,{level:`3`,id:`1-create-a-service-in-pagerduty`,children:`1. Create a Service in PagerDuty`}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Log in to your PagerDuty account`}),`\n`,_jsxs(_components.li,{children:[`Navigate to `,_jsx(_components.strong,{children:`Services > Service Directory`})]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`+ New Service`})]}),`\n`,_jsxs(_components.li,{children:[`Complete the following fields:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Name`}),`: Provide a descriptive name (e.g., “LangSmith Monitoring”)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Description`}),`: Add details about the monitored application`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Escalation Policy`}),`: Select the appropriate team escalation policy`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Integration Type`}),`: Select “Events API V2”`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Add Service`}),` to create the service`]}),`\n`]}),_jsx(Heading,{level:`3`,id:`2-obtain-integration-key`,children:`2. Obtain integration key`}),_jsx(_components.p,{children:`After creating the service, retrieve the Integration Key:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`From the `,_jsx(_components.strong,{children:`Service Directory`}),`, locate and click on your newly created service`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Select the `,_jsx(_components.strong,{children:`Integrations`}),` tab`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsx(_components.p,{children:`Find the “Events API V2” integration`}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[`Copy the `,_jsx(_components.strong,{children:`Integration Key`}),` (a 32-character alphanumeric string)`]}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/langchain-5e9cc07a/H9jA2WRyA-MV4-H0/langsmith/images/pager-duty.png?fit=max\u0026auto=format\u0026n=H9jA2WRyA-MV4-H0\u0026q=85\u0026s=c46b2b6d7d262bacd653c9c144bec21a`,alt:`PagerDuty Integration Key Location`,\"data-og-width\":`1396`,width:`1396`,\"data-og-height\":`729`,height:`729`,\"data-path\":`langsmith/images/pager-duty.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/langchain-5e9cc07a/H9jA2WRyA-MV4-H0/langsmith/images/pager-duty.png?w=280\u0026fit=max\u0026auto=format\u0026n=H9jA2WRyA-MV4-H0\u0026q=85\u0026s=43a8e30931ba2984a19cac03bdd0bad9 280w, https://mintcdn.com/langchain-5e9cc07a/H9jA2WRyA-MV4-H0/langsmith/images/pager-duty.png?w=560\u0026fit=max\u0026auto=format\u0026n=H9jA2WRyA-MV4-H0\u0026q=85\u0026s=42211c67b5d2bb825590ce8215ed52f3 560w, https://mintcdn.com/langchain-5e9cc07a/H9jA2WRyA-MV4-H0/langsmith/images/pager-duty.png?w=840\u0026fit=max\u0026auto=format\u0026n=H9jA2WRyA-MV4-H0\u0026q=85\u0026s=67fe2d15b47a1a7e7414c50aa986bcb1 840w, https://mintcdn.com/langchain-5e9cc07a/H9jA2WRyA-MV4-H0/langsmith/images/pager-duty.png?w=1100\u0026fit=max\u0026auto=format\u0026n=H9jA2WRyA-MV4-H0\u0026q=85\u0026s=66a1d304604dbdd30fb5060aeb49930a 1100w, https://mintcdn.com/langchain-5e9cc07a/H9jA2WRyA-MV4-H0/langsmith/images/pager-duty.png?w=1650\u0026fit=max\u0026auto=format\u0026n=H9jA2WRyA-MV4-H0\u0026q=85\u0026s=a367fb2bf27853224ac797e9ab9cd8af 1650w, https://mintcdn.com/langchain-5e9cc07a/H9jA2WRyA-MV4-H0/langsmith/images/pager-duty.png?w=2500\u0026fit=max\u0026auto=format\u0026n=H9jA2WRyA-MV4-H0\u0026q=85\u0026s=b1ab69691048531de163ecbded0d2e53 2500w`}),`\n`]}),`\n`]}),_jsx(Heading,{level:`3`,id:`3-configure-langsmith-alert-with-pagerduty`,children:`3. Configure LangSmith alert with PagerDuty`}),_jsx(Info,{children:_jsx(_components.p,{children:`To receive the same alert again within an hour of it being triggered, you must resolve the active incident created by the alert in PagerDuty.`})}),_jsx(OptimizedImage,{src:`https://mintcdn.com/langchain-5e9cc07a/H9jA2WRyA-MV4-H0/langsmith/images/pagerduty-setup.png?fit=max\u0026auto=format\u0026n=H9jA2WRyA-MV4-H0\u0026q=85\u0026s=f277b7801c893695d72cebce7356c37c`,alt:`PagerDuty Setup`,\"data-og-width\":`590`,width:`590`,\"data-og-height\":`413`,height:`413`,\"data-path\":`langsmith/images/pagerduty-setup.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/langchain-5e9cc07a/H9jA2WRyA-MV4-H0/langsmith/images/pagerduty-setup.png?w=280\u0026fit=max\u0026auto=format\u0026n=H9jA2WRyA-MV4-H0\u0026q=85\u0026s=79f4ffdd9e99e165787f53ca132ce1a2 280w, https://mintcdn.com/langchain-5e9cc07a/H9jA2WRyA-MV4-H0/langsmith/images/pagerduty-setup.png?w=560\u0026fit=max\u0026auto=format\u0026n=H9jA2WRyA-MV4-H0\u0026q=85\u0026s=564b9fb25cbf206fd43557d77c496b3b 560w, https://mintcdn.com/langchain-5e9cc07a/H9jA2WRyA-MV4-H0/langsmith/images/pagerduty-setup.png?w=840\u0026fit=max\u0026auto=format\u0026n=H9jA2WRyA-MV4-H0\u0026q=85\u0026s=3d3ba9875c24e80f58baa7c35e2ae2fb 840w, https://mintcdn.com/langchain-5e9cc07a/H9jA2WRyA-MV4-H0/langsmith/images/pagerduty-setup.png?w=1100\u0026fit=max\u0026auto=format\u0026n=H9jA2WRyA-MV4-H0\u0026q=85\u0026s=32b0a1a277fd024c545e1c874a6d2044 1100w, https://mintcdn.com/langchain-5e9cc07a/H9jA2WRyA-MV4-H0/langsmith/images/pagerduty-setup.png?w=1650\u0026fit=max\u0026auto=format\u0026n=H9jA2WRyA-MV4-H0\u0026q=85\u0026s=b7f4e89138a4fb833e6b157cd1a160e1 1650w, https://mintcdn.com/langchain-5e9cc07a/H9jA2WRyA-MV4-H0/langsmith/images/pagerduty-setup.png?w=2500\u0026fit=max\u0026auto=format\u0026n=H9jA2WRyA-MV4-H0\u0026q=85\u0026s=085827e70f83cbf0af66976defd93e1a 2500w`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the notification section of your alert set-up in LangSmith, select `,_jsx(_components.strong,{children:`PagerDuty`})]}),`\n`,_jsx(_components.li,{children:`Click the key icon to save the Integration Key as a Workspace secret or select an existing Workspace secret. As a best practice, we recommend saving the Integration Key as a Workspace Secret rather than adding it directly. This will allow you to reuse the same key across alerts for a workspace.`}),`\n`,_jsxs(_components.li,{children:[`Configure additional notification options:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Severity`}),`: Maps to PagerDuty incident priority`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Send a test alert by clicking `,_jsx(_components.strong,{children:`Send Test Alert`})]}),`\n`,_jsx(_components.li,{children:`Verify the incident is triggered by PagerDuty and contains relevant LangSmith alert information`}),`\n`]}),_jsx(Heading,{level:`3`,id:`troubleshooting`,children:`Troubleshooting`}),_jsx(_components.p,{children:`If incidents are not being created in PagerDuty:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Verify the Integration Key is entered correctly in LangSmith`}),`\n`,_jsx(_components.li,{children:`Ensure the PagerDuty service is active and not in maintenance mode`}),`\n`,_jsx(_components.li,{children:`Check that your PagerDuty account has Events API v2 enabled`}),`\n`,_jsx(_components.li,{children:`If an alert trigger appears to be missing in PagerDuty, check whether the expected trigger occurred within one hour of a previous trigger from the same alert rule, and whether the incident created by the previous alert is still open.`}),`\n`,_jsx(_components.li,{children:`Review network connectivity if your LangSmith instance is behind a firewall`}),`\n`]}),_jsx(Heading,{level:`3`,id:`additional-resources`,children:`Additional resources`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://developer.pagerduty.com/docs/events-api-v2/overview/`,children:`PagerDuty Events API v2 Documentation`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://support.pagerduty.com/docs/services-and-integrations`,children:`PagerDuty Integration Guide`})}),`\n`]})]}),_jsxs(Tab,{title:`Dynatrace`,id:`dynatrace`,\"data-child-heading-ids\":`[\"1-create-an-api-token-in-dynatrace\",\"2-obtain-your-dynatrace-environment-url\",\"3-configure-langsmith-alert-with-dynatrace\",\"troubleshooting-2\",\"additional-resources-2\"]`,children:[_jsxs(_components.p,{children:[`Configure Dynatrace as a notification channel using Dynatrace’s `,_jsx(_components.a,{href:`https://docs.dynatrace.com/docs/dynatrace-api/environment-api/events-v2/post-event`,children:`Events API v2`}),`. This integration sends LangSmith alert events to your Dynatrace environment, enabling correlation with your broader infrastructure monitoring.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Prerequisites`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`An active Dynatrace environment (SaaS or Managed).`}),`\n`,_jsxs(_components.li,{children:[`A Dynatrace API access token with the `,_jsx(_components.code,{children:`events.ingest`}),` scope.`]}),`\n`]}),_jsxs(_components.p,{children:[`If you are working from a custom `,_jsx(_components.a,{href:`/langsmith/self-hosted`,children:`deployment`}),` of LangSmith, make sure there are no firewall settings blocking egress traffic from LangSmith services.`]}),_jsx(Heading,{level:`3`,id:`1-create-an-api-token-in-dynatrace`,children:`1. Create an API token in Dynatrace`}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Log in to your Dynatrace environment.`}),`\n`,_jsxs(_components.li,{children:[`Navigate to `,_jsx(_components.strong,{children:`Access Tokens`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Generate new token`}),`.`]}),`\n`,_jsx(_components.li,{children:`Provide a descriptive name (e.g., “LangSmith Alerts”).`}),`\n`,_jsxs(_components.li,{children:[`Under `,_jsx(_components.strong,{children:`Scopes`}),`, search for and enable `,_jsx(_components.code,{children:`events.ingest`}),` (Ingest events).`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Generate token`}),`.`]}),`\n`,_jsx(_components.li,{children:`Copy the generated token and store it securely. The token is only displayed once.`}),`\n`]}),_jsx(Heading,{level:`3`,id:`2-obtain-your-dynatrace-environment-url`,children:`2. Obtain your Dynatrace environment URL`}),_jsx(_components.p,{children:`Your Dynatrace environment URL follows this format:`}),_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-latte catppuccin-mocha`,style:{backgroundColor:`#eff1f5`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#4c4f69`,\"--shiki-dark\":`#cdd6f4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`https://{your-environment-id}.live.dynatrace.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(_components.p,{children:`You can find your environment ID in the browser URL bar when logged in to Dynatrace.`}),_jsx(Heading,{level:`3`,id:`3-configure-langsmith-alert-with-dynatrace`,children:`3. Configure LangSmith alert with Dynatrace`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Notifications Settings`}),` for your alert setup in LangSmith, select `,_jsx(_components.strong,{children:`Dynatrace`}),`.`]}),`\n`,_jsx(_components.li,{children:`Enter your Dynatrace environment URL.`}),`\n`,_jsx(_components.li,{children:`Click the key icon to save the API token as a workspace secret or select an existing workspace secret. As a best practice, save the API token as a workspace secret rather than adding it directly. This allows you to reuse the same token across alerts for a workspace.`}),`\n`,_jsxs(_components.li,{children:[`Configure additional notification options:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Event Type`}),`: Select the Dynatrace event type (e.g., `,_jsx(_components.code,{children:`CUSTOM_ALERT`}),`, `,_jsx(_components.code,{children:`ERROR_EVENT`}),`)`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`Send a test alert by clicking `,_jsx(_components.strong,{children:`Send Test Notification`}),`.`]}),`\n`,_jsx(_components.li,{children:`Verify the event appears in your Dynatrace environment.`}),`\n`]}),_jsx(Heading,{level:`3`,id:`troubleshooting-2`,children:`Troubleshooting`}),_jsx(_components.p,{children:`If events are not appearing in Dynatrace:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Verify the API token has the `,_jsx(_components.code,{children:`events.ingest`}),` scope and is not expired.`]}),`\n`,_jsx(_components.li,{children:`Ensure the environment URL is correct and includes your environment ID.`}),`\n`,_jsxs(_components.li,{children:[`Confirm the `,_jsx(_components.code,{children:`Authorization`}),` header format uses `,_jsx(_components.code,{children:`Api-Token`}),` (not `,_jsx(_components.code,{children:`Bearer`}),`).`]}),`\n`,_jsx(_components.li,{children:`Check that your Dynatrace environment is active and accessible.`}),`\n`,_jsx(_components.li,{children:`Review network connectivity if your LangSmith instance is behind a firewall.`}),`\n`]}),_jsx(Heading,{level:`3`,id:`additional-resources-2`,children:`Additional resources`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://docs.dynatrace.com/docs/dynatrace-api/environment-api/events-v2/post-event`,children:`Dynatrace Events API v2 Documentation`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://docs.dynatrace.com/docs/manage/access-control/access-tokens`,children:`Dynatrace Access Tokens`})}),`\n`]})]}),_jsxs(Tab,{title:`Webhook`,id:`webhook`,\"data-child-heading-ids\":`[\"1-prepare-your-receiving-endpoint\",\"2-configure-webhook-parameters\",\"3-test-the-webhook\",\"troubleshooting-3\",\"security-considerations\",\"example-recipes\",\"additional-resources-3\"]`,children:[_jsx(_components.p,{children:`Webhooks enable integration with custom services and third-party platforms by sending HTTP POST requests when alert conditions are triggered. Use webhooks to forward alert data to ticketing systems, chat applications, or custom monitoring solutions.`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Prerequisites`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`An endpoint that can receive HTTP POST requests`}),`\n`,_jsx(_components.li,{children:`Appropriate authentication credentials for your receiving service (if required)`}),`\n`]}),_jsx(Heading,{level:`3`,id:`1-prepare-your-receiving-endpoint`,children:`1. Prepare your receiving endpoint`}),_jsx(_components.p,{children:`Before configuring the webhook in LangSmith, ensure your receiving endpoint:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Accepts HTTP POST requests`}),`\n`,_jsx(_components.li,{children:`Can process JSON payloads`}),`\n`,_jsx(_components.li,{children:`Is accessible from external services`}),`\n`,_jsx(_components.li,{children:`Has appropriate authentication mechanisms (if required)`}),`\n`]}),_jsx(_components.p,{children:`If on a custom deployment of LangSmith, make sure there are no firewall settings blocking egress traffic from LangSmith services.`}),_jsx(Heading,{level:`3`,id:`2-configure-webhook-parameters`,children:`2. Configure webhook parameters`}),_jsxs(_components.p,{children:[`In the `,_jsx(_components.strong,{children:`Monitoring`}),` section of the `,_jsx(_components.a,{href:`https://smith.langchain.com?utm_source=docs\u0026utm_medium=cta\u0026utm_campaign=langsmith-signup\u0026utm_content=langsmith-alerts`,children:`LangSmith UI`}),` under the `,_jsx(_components.strong,{children:`Alerts`}),` tab, click `,_jsx(_components.strong,{children:`+ Alert`}),` to create a. new alert.`]}),_jsxs(_components.p,{children:[`In the `,_jsx(_components.strong,{children:`Notification Settings`}),` section, complete the webhook configuration with the following parameters:`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Required fields`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`URL`}),`: The complete URL of your receiving endpoint`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Example: `,_jsx(_components.code,{children:`https://api.example.com/incident-webhook`})]}),`\n`]}),`\n`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Optional fields`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Headers`}),`: JSON key-value pairs sent with the webhook request`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Common headers include:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`Authorization`}),`: For authentication tokens`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`Content-Type`}),`: Usually set to `,_jsx(_components.code,{children:`application/json`}),` (default)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`X-Source`}),`: To identify the source as LangSmith`]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`If no headers, use `,_jsx(_components.code,{children:`{}`})]}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Request Body Template`}),`: Customize the JSON payload sent to your endpoint`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Default: LangSmith sends the payload defined and the following additional key-value pairs appended to the payload:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`project_name`}),`: Name of the LangSmith project the alert is scoped to.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`workspace_name`}),`: Name of the LangSmith workspace.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`alert_rule_id`}),`: A UUID to identify the LangSmith alert. This can be used as a de-duplication key in the webhook service.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`alert_rule_name`}),`: The name of the alert rule.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`alert_rule_description`}),`: The description of the alert rule (empty string if none set).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`alert_rule_type`}),`: The type of alert (as of 04/01/2025 all alerts are of type `,_jsx(_components.code,{children:`threshold`}),`).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`alert_rule_attribute`}),`: The attribute associated with the alert rule - `,_jsx(_components.code,{children:`error_count`}),`, `,_jsx(_components.code,{children:`feedback_score`}),`, `,_jsx(_components.code,{children:`latency`}),`, or `,_jsx(_components.code,{children:`cost`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`alert_rule_url`}),`: A direct link to the alert rule in LangSmith.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`runs_url`}),`: A direct link to the runs that triggered the alert in LangSmith.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`triggered_metric_value`}),`: The value of the metric at the time the threshold was triggered.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`triggered_threshold`}),`: The threshold that triggered the alert.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`timestamp`}),`: The timestamp that triggered the alert.`]}),`\n`]}),`\n`]}),`\n`]}),`\n`]}),`\n`]}),_jsx(Info,{children:_jsxs(_components.p,{children:[`LangSmith does not perform template substitution on the request body. The auto-populated fields above are merged into the outgoing JSON as top-level keys, alongside the body you configure. Placeholder syntax like `,_jsx(_components.code,{children:`{alert_rule_name}`}),` is sent verbatim to the receiving service. It only resolves to a real value if the receiver itself can extract fields from the incoming JSON (for example, a Power Automate Workflow, an AWS Lambda, or a custom HTTP handler).`]})}),_jsx(Heading,{level:`3`,id:`3-test-the-webhook`,children:`3. Test the webhook`}),_jsxs(_components.p,{children:[`Click `,_jsx(_components.strong,{children:`Send Test Alert`}),` to send the webhook notification to ensure the notification works as intended.`]}),_jsx(Heading,{level:`3`,id:`troubleshooting-3`,children:`Troubleshooting`}),_jsx(_components.p,{children:`If webhook notifications are not being delivered:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Verify the webhook URL is correct and accessible`}),`\n`,_jsx(_components.li,{children:`Ensure any authentication headers are properly formatted`}),`\n`,_jsx(_components.li,{children:`Check that your receiving endpoint accepts POST requests`}),`\n`,_jsx(_components.li,{children:`Examine your endpoint’s logs for received but rejected requests`}),`\n`,_jsx(_components.li,{children:`Verify your custom payload template is valid JSON format`}),`\n`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Send Test Alert does not validate the downstream response.`}),` The UI reports `,_jsx(_components.strong,{children:`your configuration is working correctly and the test notification was delivered`}),` even if the receiving endpoint returned an error (for example, a 400 or 422 rejection). Always verify receipt on the receiver side, check your endpoint’s logs or the target platform’s message history, rather than relying solely on the LangSmith success message.`]})}),_jsx(Heading,{level:`3`,id:`security-considerations`,children:`Security considerations`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Use HTTPS for your webhook endpoints`}),`\n`,_jsx(_components.li,{children:`Implement authentication for your webhook endpoint`}),`\n`,_jsx(_components.li,{children:`Consider adding a shared secret in your headers to verify webhook sources`}),`\n`,_jsx(_components.li,{children:`Validate incoming webhook requests before processing them`}),`\n`]}),_jsx(Heading,{level:`3`,id:`example-recipes`,children:`Example recipes`}),_jsxs(Accordion,{title:`Configure Slack notifications via webhook`,id:`configure-slack-notifications-via-webhook`,children:[_jsxs(_components.p,{children:[`Here is an example for configuring LangSmith alerts to send notifications to Slack channels using the `,_jsx(_components.a,{href:`https://api.slack.com/methods/chat.postMessage`,children:_jsx(_components.code,{children:`chat.postMessage`})}),` API.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Prerequisites`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Access to a Slack workspace.`}),`\n`,_jsx(_components.li,{children:`A LangSmith tracing project, or an agent environment, to set up alerts.`}),`\n`,_jsx(_components.li,{children:`Permissions to create Slack applications.`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Step 1: Create a Slack app`})}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Visit the `,_jsx(_components.a,{href:`https://api.slack.com/apps`,children:`Slack API Applications page`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Create New App`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`From scratch`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Provide an `,_jsx(_components.strong,{children:`App Name`}),` (e.g., “LangSmith Alerts”).`]}),`\n`,_jsx(_components.li,{children:`Select the workspace where you want to install the app.`}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Create App`}),`.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Step 2: Configure bot permissions`})}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the left sidebar of your Slack app configuration, click `,_jsx(_components.strong,{children:`OAuth \u0026 Permissions`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Scroll down to `,_jsx(_components.strong,{children:`Bot Token Scopes`}),` under `,_jsx(_components.strong,{children:`Scopes`}),` and click `,_jsx(_components.strong,{children:`Add an OAuth Scope`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Add the following scopes:`,`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`chat:write`}),` (Send messages as the app).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`chat:write.public`}),` (Send messages to channels the app is not in).`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`channels:read`}),` (View basic channel information).`]}),`\n`]}),`\n`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Step 3: Install the app to your workspace`})}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Scroll up to the top of the `,_jsx(_components.strong,{children:`OAuth \u0026 Permissions`}),` page.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Install to Workspace`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Review the permissions and click `,_jsx(_components.strong,{children:`Allow`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Copy the `,_jsx(_components.strong,{children:`Bot User OAuth Token`}),` that appears (begins with `,_jsx(_components.code,{children:`xoxb-`}),`).`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Step 4: Add the bot to a Slack channel`})}),_jsxs(_components.p,{children:[`Add the bot to the specific channel you want to receive alerts in. You can add a bot to a Slack channel by mentioning it in the message field (e.g., `,_jsx(_components.code,{children:`@botname`}),`).`]}),_jsx(_components.p,{children:`You also need the channel ID to configure the webhook alert in LangSmith. You can find the channel ID by opening channel details > About.`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Step 5: Configure the webhook alert in LangSmith`})}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`In LangSmith, navigate to your tracing project, or to your agent environment.`}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Alerts > Create Alert`}),`.`]}),`\n`,_jsx(_components.li,{children:`Define your alert metrics and conditions.`}),`\n`,_jsxs(_components.li,{children:[`In the notification section, select `,_jsx(_components.strong,{children:`Webhook`}),`.`]}),`\n`,_jsx(_components.li,{children:`Configure the webhook with the following settings:`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Webhook URL`})}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-latte catppuccin-mocha`,style:{backgroundColor:`#eff1f5`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#4c4f69`,\"--shiki-dark\":`#cdd6f4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`https:`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#9399B2`,\"--shiki-dark-font-style\":`italic`},children:`//slack.com/api/chat.postMessage`})]}),`\n`]})})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Headers`}),`\n`,_jsxs(Note,{children:[`Replace `,_jsx(_components.code,{children:`xoxb-your-token-here`}),` with your Bot’s User OAuth Token`]})]}),_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-latte catppuccin-mocha`,style:{backgroundColor:`#eff1f5`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#4c4f69`,\"--shiki-dark\":`#cdd6f4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`Content-Type`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"application/json\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`Authorization`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"Bearer xoxb-your-token-here\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`}`})}),`\n`]})})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Request Body Template`}),`\n`,_jsxs(Note,{children:[`It is required to fill in the `,_jsx(_components.code,{children:`{channel_id}`}),` from the value found in Step 4. `,_jsx(`br`,{}),_jsx(`br`,{}),`The remaining fields: `,_jsx(_components.code,{children:`alert_name`}),`, `,_jsx(_components.code,{children:`project_name`}),` and `,_jsx(_components.code,{children:`project_url`}),` optionally add additional context to the alert message. You can find your `,_jsx(_components.code,{children:`project_url`}),` in the browser’s URL bar. Copy the portion up to but not including any query parameters.`]})]}),_jsx(CodeBlock,{filename:``,numberOfLines:`27`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-latte catppuccin-mocha`,style:{backgroundColor:`#eff1f5`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#4c4f69`,\"--shiki-dark\":`#cdd6f4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`27`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`channel`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"{channel_id}\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`text`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"{alert_name} triggered for {project_name}\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`blocks`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`type`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"section\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`text`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`type`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"mrkdwn\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`text`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"🚨{alert_name} has been triggered\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`type`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"section\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`text`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`type`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"mrkdwn\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`text`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"Please check the following link for more information:\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`type`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"section\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`text`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`type`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"mrkdwn\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`text`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"\u003c{project-url}|View in LangSmith>\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`}`})}),`\n`]})})}),_jsxs(_components.ol,{start:`6`,children:[`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Save`}),` to activate the webhook configuration.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Step 6: Test the integration`})}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the LangSmith alert configuration, click `,_jsx(_components.strong,{children:`Test Alert`}),`.`]}),`\n`,_jsx(_components.li,{children:`Check your specified Slack channel for the test notification.`}),`\n`,_jsx(_components.li,{children:`Verify that the message contains the expected alert information.`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`(Optional) Step 7: Link to the alert preview in the request body`})}),_jsx(_components.p,{children:`After creating an alert, you can optionally link to its preview in the webhook’s request body.`}),_jsx(OptimizedImage,{src:`https://mintcdn.com/langchain-5e9cc07a/E8FdemkcQxROovD9/langsmith/images/alert-preview-pane.png?fit=max\u0026auto=format\u0026n=E8FdemkcQxROovD9\u0026q=85\u0026s=286ebb8f90bafbdcacf9a0602aaf749c`,alt:`Alert Preview Pane`,\"data-og-width\":`832`,width:`832`,\"data-og-height\":`773`,height:`773`,\"data-path\":`langsmith/images/alert-preview-pane.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/langchain-5e9cc07a/E8FdemkcQxROovD9/langsmith/images/alert-preview-pane.png?w=280\u0026fit=max\u0026auto=format\u0026n=E8FdemkcQxROovD9\u0026q=85\u0026s=20a409a30bff44a1a8bb1b79a6a2216b 280w, https://mintcdn.com/langchain-5e9cc07a/E8FdemkcQxROovD9/langsmith/images/alert-preview-pane.png?w=560\u0026fit=max\u0026auto=format\u0026n=E8FdemkcQxROovD9\u0026q=85\u0026s=414bb4719617bd23452273c73327d601 560w, https://mintcdn.com/langchain-5e9cc07a/E8FdemkcQxROovD9/langsmith/images/alert-preview-pane.png?w=840\u0026fit=max\u0026auto=format\u0026n=E8FdemkcQxROovD9\u0026q=85\u0026s=6bc7bc7aaee65f7f4afac42102047ad2 840w, https://mintcdn.com/langchain-5e9cc07a/E8FdemkcQxROovD9/langsmith/images/alert-preview-pane.png?w=1100\u0026fit=max\u0026auto=format\u0026n=E8FdemkcQxROovD9\u0026q=85\u0026s=491244ac56f6f4bcbb64419b267df0fe 1100w, https://mintcdn.com/langchain-5e9cc07a/E8FdemkcQxROovD9/langsmith/images/alert-preview-pane.png?w=1650\u0026fit=max\u0026auto=format\u0026n=E8FdemkcQxROovD9\u0026q=85\u0026s=d47f5ba127c3f61e3cb7498f8b7568fe 1650w, https://mintcdn.com/langchain-5e9cc07a/E8FdemkcQxROovD9/langsmith/images/alert-preview-pane.png?w=2500\u0026fit=max\u0026auto=format\u0026n=E8FdemkcQxROovD9\u0026q=85\u0026s=6a70706db839b2d211024116ba19acef 2500w`}),_jsx(_components.p,{children:`To configure this:`}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Save your alert.`}),`\n`,_jsx(_components.li,{children:`Find your saved alert in the alerts table and click it.`}),`\n`,_jsx(_components.li,{children:`Copy the displayed URL.`}),`\n`,_jsx(_components.li,{children:`Click “Edit Alert”.`}),`\n`,_jsx(_components.li,{children:`Replace the existing project URL with the copied alert preview URL.`}),`\n`]})]}),_jsxs(Accordion,{title:`Configure Microsoft Teams notifications via webhook`,id:`configure-microsoft-teams-notifications-via-webhook`,children:[_jsxs(_components.p,{children:[`Here is an example for configuring LangSmith alerts to send notifications to a Microsoft Teams channel using the `,_jsx(_components.a,{href:`https://support.microsoft.com/en-us/office/create-incoming-webhooks-with-workflows-for-microsoft-teams-8ae491c7-0394-4861-ba59-055e33f75498`,children:`Workflows app`}),` (Power Automate). This approach is recommended because it extracts fields from the incoming JSON within the flow, so the auto-populated LangSmith alert fields render correctly in the Teams message.`]}),_jsx(Note,{children:_jsx(_components.p,{children:`Microsoft’s legacy Office 365 Incoming Webhook connectors are being retired. Use the Workflows app for new integrations.`})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Prerequisites`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Access to a Microsoft Teams workspace with permissions to add Workflows.`}),`\n`,_jsx(_components.li,{children:`A LangSmith tracing project, or an agent environment, to set up alerts.`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Step 1: Create a Workflow in Teams`})}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`In Microsoft Teams, navigate to the channel where you want to receive alerts.`}),`\n`,_jsxs(_components.li,{children:[`Click the `,_jsx(_components.strong,{children:`…`}),` (More options) menu next to the channel name.`]}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Workflows`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Search for and select the `,_jsx(_components.strong,{children:`Post to a channel when a webhook request is received`}),` template.`]}),`\n`,_jsxs(_components.li,{children:[`Sign in to confirm the connections, then click `,_jsx(_components.strong,{children:`Next`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Confirm the team and channel where alerts should be posted, then click `,_jsx(_components.strong,{children:`Add workflow`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Copy the generated `,_jsx(_components.strong,{children:`HTTP POST URL`}),`—use this in LangSmith.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Step 2: Customize the message in Power Automate (optional)`})}),_jsx(_components.p,{children:`The default workflow posts the raw JSON body as a card. To format alert details, edit the flow in Power Automate:`}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Open the `,_jsx(_components.a,{href:`https://make.powerautomate.com`,children:`Power Automate portal`}),` and edit the workflow you created.`]}),`\n`,_jsxs(_components.li,{children:[`Click the `,_jsx(_components.strong,{children:`Post card in a chat or channel`}),` action.`]}),`\n`,_jsxs(_components.li,{children:[`In the `,_jsx(_components.strong,{children:`Adaptive Card`}),` field, reference incoming fields using `,_jsx(_components.code,{children:`triggerOutputs()?['body/alert_rule_name']`}),`, `,_jsx(_components.code,{children:`triggerOutputs()?['body/project_name']`}),`, `,_jsx(_components.code,{children:`triggerOutputs()?['body/triggered_metric_value']`}),`, `,_jsx(_components.code,{children:`triggerOutputs()?['body/triggered_threshold']`}),`, `,_jsx(_components.code,{children:`triggerOutputs()?['body/timestamp']`}),`, and `,_jsx(_components.code,{children:`triggerOutputs()?['body/alert_rule_url']`}),`.`]}),`\n`,_jsx(_components.li,{children:`Save the flow.`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Step 3: Configure the webhook alert in LangSmith`})}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`In LangSmith, navigate to your tracing project, or to your agent environment.`}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Alerts > Create Alert`}),`.`]}),`\n`,_jsx(_components.li,{children:`Define your alert metrics and conditions.`}),`\n`,_jsxs(_components.li,{children:[`In the notification section, select `,_jsx(_components.strong,{children:`Webhook`}),`.`]}),`\n`,_jsx(_components.li,{children:`Configure the webhook with the following settings:`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Webhook URL`})}),_jsx(_components.p,{children:`Paste the HTTP POST URL from your Teams Workflow:`}),_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-latte catppuccin-mocha`,style:{backgroundColor:`#eff1f5`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#4c4f69`,\"--shiki-dark\":`#cdd6f4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`https://prod-XX.westus.logic.azure.com:443/workflows/.../triggers/manual/paths/invoke?...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Headers`})}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-latte catppuccin-mocha`,style:{backgroundColor:`#eff1f5`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#4c4f69`,\"--shiki-dark\":`#cdd6f4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`Content-Type`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"application/json\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`}`})}),`\n`]})})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Request Body Template`})}),_jsxs(_components.p,{children:[`LangSmith automatically merges the auto-populated alert fields (`,_jsx(_components.code,{children:`alert_rule_name`}),`, `,_jsx(_components.code,{children:`project_name`}),`, `,_jsx(_components.code,{children:`triggered_metric_value`}),`, `,_jsx(_components.code,{children:`triggered_threshold`}),`, `,_jsx(_components.code,{children:`timestamp`}),`, `,_jsx(_components.code,{children:`alert_rule_url`}),`, and others) into the request body as top-level JSON keys. Power Automate reads these fields directly from the incoming payload, so an empty body is sufficient:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-latte catppuccin-mocha`,style:{backgroundColor:`#eff1f5`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#4c4f69`,\"--shiki-dark\":`#cdd6f4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`1`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`{}`})}),`\n`]})})}),_jsxs(_components.ol,{start:`6`,children:[`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Save`}),` to activate the webhook configuration.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Step 4: Test the integration`})}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the LangSmith alert configuration, click `,_jsx(_components.strong,{children:`Send Test Alert`}),`.`]}),`\n`,_jsx(_components.li,{children:`Check your specified Teams channel for the test notification.`}),`\n`,_jsx(_components.li,{children:`Verify that the card contains the expected alert information.`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Reference implementation`})}),_jsxs(_components.p,{children:[`For a working example that translates LangSmith webhook payloads (threshold alerts, run rules, and generic events) into formatted Teams Adaptive Cards, see the `,_jsx(_components.a,{href:`https://github.com/langchain-samples/langsmith-teams-webhook`,children:`langsmith-teams-webhook`}),` sample repo. The sample runs as a small Python service in front of a Teams Workflow URL, which avoids customizing the Power Automate flow itself.`]})]}),_jsxs(Accordion,{title:`Configure email notifications via webhook`,id:`configure-email-notifications-via-webhook`,children:[_jsxs(_components.p,{children:[`Here is an example for configuring LangSmith alerts to send email notifications using `,_jsx(_components.a,{href:`https://docs.sendgrid.com/api-reference/mail-send/mail-send`,children:`SendGrid’s Mail Send API`}),`. You can use any transactional email provider that exposes an HTTP API (e.g., Mailgun, Amazon SES, Postmark).`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Prerequisites`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`A SendGrid account with a verified sender identity.`}),`\n`,_jsxs(_components.li,{children:[`A SendGrid API key with `,_jsx(_components.strong,{children:`Mail Send`}),` permissions.`]}),`\n`,_jsx(_components.li,{children:`A LangSmith tracing project, or an agent environment, to set up alerts.`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Step 1: Create a SendGrid API key`})}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Log in to your `,_jsx(_components.a,{href:`https://app.sendgrid.com`,children:`SendGrid dashboard`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Navigate to `,_jsx(_components.strong,{children:`Settings > API Keys`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Create API Key`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Choose `,_jsx(_components.strong,{children:`Restricted Access`}),` and enable `,_jsx(_components.strong,{children:`Mail Send > Full Access`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Create \u0026 View`}),`, copy the key, and store it securely.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Step 2: Verify your sender email`})}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In SendGrid, navigate to `,_jsx(_components.strong,{children:`Settings > Sender Authentication`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Complete either `,_jsx(_components.strong,{children:`Domain Authentication`}),` (recommended) or `,_jsx(_components.strong,{children:`Single Sender Verification`}),` for the address you want to send from.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Step 3: Configure the webhook alert in LangSmith`})}),_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`In LangSmith, navigate to your tracing project, or to your agent environment.`}),`\n`,_jsxs(_components.li,{children:[`Select `,_jsx(_components.strong,{children:`Alerts > Create Alert`}),`.`]}),`\n`,_jsx(_components.li,{children:`Define your alert metrics and conditions.`}),`\n`,_jsxs(_components.li,{children:[`In the notification section, select `,_jsx(_components.strong,{children:`Webhook`}),`.`]}),`\n`,_jsx(_components.li,{children:`Configure the webhook with the following settings:`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Webhook URL`})}),_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-latte catppuccin-mocha`,style:{backgroundColor:`#eff1f5`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#4c4f69`,\"--shiki-dark\":`#cdd6f4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`https://api.sendgrid.com/v3/mail/send`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Headers`})}),_jsxs(Note,{children:[`Replace `,_jsx(_components.code,{children:`SG.your-api-key-here`}),` with your SendGrid API key.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-latte catppuccin-mocha`,style:{backgroundColor:`#eff1f5`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#4c4f69`,\"--shiki-dark\":`#cdd6f4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`Content-Type`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"application/json\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`Authorization`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"Bearer SG.your-api-key-here\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`}`})}),`\n`]})})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Request Body Template`})}),_jsx(Note,{children:_jsxs(_components.p,{children:[`Replace `,_jsx(_components.code,{children:`alerts@your-company.com`}),` with your verified sender address and `,_jsx(_components.code,{children:`oncall@your-company.com`}),` with the recipient address. SendGrid does not extract fields from arbitrary top-level JSON keys, so this example uses a fixed subject and body. To include alert-specific values in the email, route the LangSmith webhook through a middleware (such as a Power Automate flow, AWS Lambda, or Zapier webhook) that reads the incoming payload and renders the SendGrid request.`]})}),_jsx(CodeBlock,{filename:``,numberOfLines:`22`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-latte catppuccin-mocha`,style:{backgroundColor:`#eff1f5`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#4c4f69`,\"--shiki-dark\":`#cdd6f4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`22`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`personalizations`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`to`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`email`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"oncall@your-company.com\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`subject`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"LangSmith alert triggered\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` ],`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`from`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`email`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"alerts@your-company.com\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`name`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"LangSmith Alerts\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`content`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`type`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"text/plain\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`value`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"A LangSmith alert was triggered. Open your LangSmith workspace to view the alert details, including the project, metric value, threshold, and timestamp.\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`}`})}),`\n`]})})}),_jsxs(_components.ol,{start:`6`,children:[`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Save`}),` to activate the webhook configuration.`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Step 4: Test the integration`})}),_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`In the LangSmith alert configuration, click `,_jsx(_components.strong,{children:`Send Test Alert`}),`.`]}),`\n`,_jsx(_components.li,{children:`Check the recipient inbox for the test notification.`}),`\n`,_jsx(_components.li,{children:`Verify the email contains the expected alert information.`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Using other email providers`})}),_jsxs(_components.p,{children:[`The same pattern works with other transactional email APIs that accept static authentication headers. Change the `,_jsx(_components.strong,{children:`Webhook URL`}),` and `,_jsx(_components.strong,{children:`Headers`}),` to match your provider:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Provider`}),_jsx(_components.th,{children:`Webhook URL`}),_jsx(_components.th,{children:`Auth header format`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Mailgun`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`https://api.mailgun.net/v3/{your-domain}/messages`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`Authorization: Basic \u003cbase64(api:\u003ckey>)>`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Postmark`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`https://api.postmarkapp.com/email`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`X-Postmark-Server-Token: \u003ctoken>`})})]})]})]}),_jsxs(_components.p,{children:[`Adjust the `,_jsx(_components.strong,{children:`Request Body Template`}),` to match each provider’s expected payload format. Amazon SES is not directly compatible because the SES API requires per-request AWS SigV4 signing, which cannot be expressed as a static header. To use SES, route through a middleware (for example, a Lambda function with an HTTP trigger).`]})]}),_jsxs(Accordion,{title:`Configure Google Chat notifications via webhook (requires middleware)`,id:`configure-google-chat-notifications-via-webhook-requires-middleware`,children:[_jsxs(_components.p,{children:[`Google Chat’s incoming webhook API (`,_jsx(_components.code,{children:`spaces.messages.create`}),`) only accepts the `,_jsx(_components.code,{children:`text`}),` field at the top level. Because LangSmith merges all 12 alert metadata keys into the request body as top-level fields, Google Chat rejects every request with a 400 error:`]}),_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-latte catppuccin-mocha`,style:{backgroundColor:`#eff1f5`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#4c4f69`,\"--shiki-dark\":`#cdd6f4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Invalid JSON payload received. Unknown name \"project_name\" at 'message': Cannot find field.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsxs(_components.p,{children:[`There is no Request Body Template that avoids this, even a minimal body such as `,_jsx(_components.code,{children:`{\"text\": \"hello\", \"project_name\": \"x\"}`}),` will fail. `,_jsx(_components.strong,{children:`A translation layer (middleware) is required`}),`, similar to the Amazon SES note in the `,_jsx(_components.a,{href:`#configure-email-notifications-via-webhook`,children:`email recipe`}),`.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option A: Cloud Run or Cloud Functions middleware (recommended)`})}),_jsxs(_components.p,{children:[`This approach uses a small HTTP handler that receives the LangSmith webhook, extracts the relevant fields, and forwards a clean `,_jsx(_components.code,{children:`{\"text\": \"...\"}`}),` payload to a Google Chat space webhook URL.`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Prerequisites`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`A Google Chat space with an incoming webhook configured. In Google Chat, open the space, then go to `,_jsx(_components.strong,{children:`Apps \u0026 integrations`}),` > `,_jsx(_components.strong,{children:`Add webhooks`}),`, create a webhook, and copy the URL.`]}),`\n`,_jsx(_components.li,{children:`A Google Cloud project with Cloud Run or Cloud Functions enabled, or equivalent hosting.`}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Step 1: Deploy the handler`})}),_jsx(_components.p,{children:`Deploy the following Python function as a Cloud Run service or Cloud Function:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`38`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-latte catppuccin-mocha`,style:{backgroundColor:`#eff1f5`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#4c4f69`,\"--shiki-dark\":`#cdd6f4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`38`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:`import`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` json`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:`import`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` os`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:`import`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` re`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:`import`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` urllib`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`request`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:`from`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` urllib`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`parse `}),_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:`import`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` urlparse`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`ALLOWED_LINK_HOSTS `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` {`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"smith.langchain.com\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`}`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:`def`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:` build_text`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#E64553`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:`payload`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` def`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:` safe`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#E64553`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:`v`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`):`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#9399B2`,\"--shiki-dark-font-style\":`italic`},children:` # Strip angle brackets to prevent \u003curl|label> link injection`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` return`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` re`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`sub`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#A6E3A1`,\"--shiki-dark-font-style\":`italic`},children:`r`}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`[`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\u003c>`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`]`}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`}),_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#CBA6F7`,\"--shiki-dark-font-style\":`italic`},children:` str`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`v `}),_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:`if`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` v `}),_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:`is`}),_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` not`}),_jsx(_components.span,{style:{color:`#FE640B`,\"--shiki-dark\":`#FAB387`},children:` None`}),_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` else`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`))`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` parsed `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:` urlparse`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#CBA6F7`,\"--shiki-dark-font-style\":`italic`},children:`str`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`payload`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`get`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"runs_url\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`)`}),_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` or`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`))`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` trusted `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` parsed`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`scheme `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`==`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"https\"`}),_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` and`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` parsed`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`hostname `}),_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:`in`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` ALLOWED_LINK_HOSTS`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` return`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` (`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#A6E3A1`,\"--shiki-dark-font-style\":`italic`},children:` f`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"*`}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`{`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`safe`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`payload`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`get`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`'alert_rule_name'`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`))`}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`}`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`* triggered for \"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#A6E3A1`,\"--shiki-dark-font-style\":`italic`},children:` f`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:'\"`'}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`{`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`safe`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`payload`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`get`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`'project_name'`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`))`}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`}`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:\"`\"}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`\\\\n`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#A6E3A1`,\"--shiki-dark-font-style\":`italic`},children:` f`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`{`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`safe`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`payload`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`get`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`'alert_rule_attribute'`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`))`}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`}`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`: \"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#A6E3A1`,\"--shiki-dark-font-style\":`italic`},children:` f`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`{`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`safe`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`payload`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`get`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`'triggered_metric_value'`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`))`}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`}`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#A6E3A1`,\"--shiki-dark-font-style\":`italic`},children:` f`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"(threshold `}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`{`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`safe`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`payload`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`get`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`'triggered_threshold'`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`))`}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`}`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`)\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:` +`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` (`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#A6E3A1`,\"--shiki-dark-font-style\":`italic`},children:`f`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`\\\\n`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`{`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`parsed`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`geturl`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`()`}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`}`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`|View runs>\"`}),_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` if`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` trusted `}),_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:`else`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` )`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:`def`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:` handler`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#E64553`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:`request`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` if`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` request`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`headers`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`get`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"X-Webhook-Secret\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`)`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:` !=`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` os`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#E64553`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:`environ`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`[`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#A6E3A1`,\"--shiki-dark-font-style\":`italic`},children:`LANGSMITH_SHARED_SECRET`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`]:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` return`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` (`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"forbidden\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`}),_jsx(_components.span,{style:{color:`#FE640B`,\"--shiki-dark\":`#FAB387`},children:` 403`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` payload `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` request`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`get_json`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#E64553`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:`silent`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#FE640B`,\"--shiki-dark\":`#FAB387`},children:`True`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`)`}),_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` or`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` {}`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` urllib`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`request`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`urlopen`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` urllib`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`request`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`Request`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` os`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#E64553`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:`environ`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`[`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#A6E3A1`,\"--shiki-dark-font-style\":`italic`},children:`GCHAT_WEBHOOK_URL`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#E64553`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` data`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`json`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`dumps`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`({`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"text\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:` build_text`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`payload`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`)}).`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`encode`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#E64553`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` headers`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`{`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"Content-Type\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"application/json\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`},`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#E64553`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` method`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"POST\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` ),`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#E64553`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:` timeout`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#FE640B`,\"--shiki-dark\":`#FAB387`},children:`10`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` )`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` return`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` (`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"ok\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`}),_jsx(_components.span,{style:{color:`#FE640B`,\"--shiki-dark\":`#FAB387`},children:` 200`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`)`})]}),`\n`]})})}),_jsx(_components.p,{children:`Set the following environment variables for the deployed function:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`GCHAT_WEBHOOK_URL`}),`: The Google Chat space webhook URL.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`LANGSMITH_SHARED_SECRET`}),`: A secret string you choose (used to authenticate incoming requests from LangSmith).`]}),`\n`]}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Step 2: Configure the webhook alert in LangSmith`})}),_jsx(_components.p,{children:`Point the LangSmith webhook at your deployed handler’s URL.`}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Webhook URL`})}),_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-latte catppuccin-mocha`,style:{backgroundColor:`#eff1f5`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#4c4f69`,\"--shiki-dark\":`#cdd6f4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`https://\u003cyour-cloud-run-service-url>/`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Headers`})}),_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-latte catppuccin-mocha`,style:{backgroundColor:`#eff1f5`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#4c4f69`,\"--shiki-dark\":`#cdd6f4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`Content-Type`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"application/json\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` \"`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-dark\":`#89B4FA`},children:`X-Webhook-Secret`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"\u003cyour-shared-secret>\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`}`})}),`\n`]})})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Request Body Template`})}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-latte catppuccin-mocha`,style:{backgroundColor:`#eff1f5`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#4c4f69`,\"--shiki-dark\":`#cdd6f4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`1`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`{}`})}),`\n`]})})}),_jsxs(_components.p,{children:[`The metadata fields (`,_jsx(_components.code,{children:`alert_rule_name`}),`, `,_jsx(_components.code,{children:`project_name`}),`, `,_jsx(_components.code,{children:`runs_url`}),`, etc.) are merged into the body by LangSmith regardless of what you put here, so an empty body is sufficient.`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`Do not strip `,_jsx(_components.code,{children:`*`}),` or `,_jsx(_components.code,{children:`_`}),` from alert field values in your handler. These characters are also used in Google Chat’s basic text formatting, but they appear in LangSmith identifiers (such as `,_jsx(_components.code,{children:`run_count`}),`). Stripping them will corrupt field names in the message.`]})}),_jsx(Note,{children:_jsxs(_components.p,{children:[`Google Chat enforces a write rate limit of `,_jsx(_components.strong,{children:`1 message per second per space`}),`, shared across all webhooks writing to that space. If you have multiple LangSmith alerts routing to the same space and they fire simultaneously, some messages may be dropped.`]})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`Option B: Google Apps Script (no infrastructure required)`})}),_jsx(_components.p,{children:`Google Apps Script can serve as lightweight middleware without deploying any cloud infrastructure.`}),_jsxs(_components.p,{children:[`Create a new Apps Script project at `,_jsx(_components.a,{href:`https://script.google.com`,children:`script.google.com`}),`, paste the following, and deploy it as a web app (execute as yourself, access to anyone):`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`17`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes catppuccin-latte catppuccin-mocha`,style:{backgroundColor:`#eff1f5`,\"--shiki-dark-bg\":`#1e1e2e`,color:`#4c4f69`,\"--shiki-dark\":`#cdd6f4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`17`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:`function`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:` doPost`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`(`}),_jsx(_components.span,{style:{color:`#E64553`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#EBA0AC`,\"--shiki-dark-font-style\":`italic`},children:`e`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`)`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` var`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` payload `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#FE640B`,\"--shiki-dark\":`#FAB387`},children:` JSON`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`parse`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`(e`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`postData`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`contents)`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` var`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` secret `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`=`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` e`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`parameter`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`secret`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`;`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#9399B2`,\"--shiki-dark-font-style\":`italic`},children:` // shared secret passed as query param`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` if`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` (secret `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`!==`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` PropertiesService`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`getScriptProperties`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`()`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`getProperty`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`(`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"LANGSMITH_SHARED_SECRET\"`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`)) `}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` return`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` ContentService`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`createTextOutput`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`(`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"forbidden\"`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`)`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`setMimeType`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`(ContentService`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`MimeType`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#FE640B`,\"--shiki-dark\":`#FAB387`},children:`TEXT`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`)`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` }`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` var`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` text `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`=`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"*\"`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:` +`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` (payload`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`alert_rule_name `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`||`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"\"`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`) `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`+`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:' \"* triggered for `\"'}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:` +`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` (payload`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`project_name `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`||`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"\"`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`) `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`+`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:' \"`'}),_jsx(_components.span,{style:{color:`#EA76CB`,\"--shiki-dark\":`#F5C2E7`},children:`\\\\n`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:` +`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` (payload`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`alert_rule_attribute `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`||`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"\"`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`) `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`+`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \": \"`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:` +`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` (payload`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`triggered_metric_value `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`||`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"\"`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`) `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`+`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \" (threshold \"`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:` +`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` (payload`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`triggered_threshold `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`||`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"\"`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`) `}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`+`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \")\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` UrlFetchApp`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`fetch`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`(PropertiesService`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`getScriptProperties`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`()`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`getProperty`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`(`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"GCHAT_WEBHOOK_URL\"`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`)`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` method`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"post\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` contentType`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`:`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:` \"application/json\"`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` payload`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`:`}),_jsx(_components.span,{style:{color:`#FE640B`,\"--shiki-dark\":`#FAB387`},children:` JSON`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`stringify`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`(`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`{`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` text`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`:`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` text `}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`}`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`)`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:` }`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`)`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8839EF`,\"--shiki-dark\":`#CBA6F7`},children:` return`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:` ContentService`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`createTextOutput`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`(`}),_jsx(_components.span,{style:{color:`#40A02B`,\"--shiki-dark\":`#A6E3A1`},children:`\"ok\"`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`)`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#1E66F5`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#89B4FA`,\"--shiki-dark-font-style\":`italic`},children:`setMimeType`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`(ContentService`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`MimeType`}),_jsx(_components.span,{style:{color:`#179299`,\"--shiki-dark\":`#94E2D5`},children:`.`}),_jsx(_components.span,{style:{color:`#FE640B`,\"--shiki-dark\":`#FAB387`},children:`TEXT`}),_jsx(_components.span,{style:{color:`#4C4F69`,\"--shiki-dark\":`#CDD6F4`},children:`)`}),_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#7C7F93`,\"--shiki-dark\":`#9399B2`},children:`}`})}),`\n`]})})}),_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`GCHAT_WEBHOOK_URL`}),` and `,_jsx(_components.code,{children:`LANGSMITH_SHARED_SECRET`}),` in `,_jsx(_components.strong,{children:`Project Settings > Script Properties`}),`.`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`Apps Script web apps cannot read custom HTTP request headers, so the shared secret must be passed as a `,_jsx(_components.strong,{children:`query string parameter`}),` (`,_jsx(_components.code,{children:`?secret=...`}),`) rather than a header. Include it in the LangSmith webhook URL rather than the Headers field.`]})})]}),_jsx(Heading,{level:`3`,id:`additional-resources-3`,children:`Additional resources`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://api.slack.com/methods/chat.postMessage`,children:`Slack chat.postMessage API Documentation`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://app.slack.com/block-kit-builder/`,children:`Slack Block Kit Builder`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://support.microsoft.com/en-us/office/create-incoming-webhooks-with-workflows-for-microsoft-teams-8ae491c7-0394-4861-ba59-055e33f75498`,children:`Create incoming webhooks with Workflows for Microsoft Teams`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://learn.microsoft.com/en-us/power-automate/`,children:`Power Automate documentation`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/langchain-samples/langsmith-teams-webhook`,children:`langsmith-teams-webhook sample repo`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://docs.sendgrid.com/api-reference/mail-send/mail-send`,children:`SendGrid Mail Send API Documentation`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://developers.google.com/chat/how-tos/webhooks`,children:`Google Chat incoming webhooks`})}),`\n`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`best-practices`,children:`Best practices`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Adjust sensitivity based on application criticality`}),`\n`,_jsx(_components.li,{children:`Start with broader thresholds and refine based on observed patterns`}),`\n`,_jsx(_components.li,{children:`Ensure alert routing reaches appropriate on-call personnel`}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsxs(`div`,{className:`source-links`,children:[_jsx(Callout,{icon:`terminal-2`,children:_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/use-these-docs`,children:`Connect these docs`}),` to your agent of choice via MCP for real-time answers.`]})}),_jsx(Callout,{icon:`edit`,children:_jsxs(_components.p,{children:[_jsx(_components.a,{href:`https://github.com/langchain-ai/docs/edit/main/src/langsmith/alerts.mdx`,children:`Edit this page on GitHub`}),` or `,_jsx(_components.a,{href:`https://github.com/langchain-ai/docs/issues/new/choose`,children:`file an issue`}),`.`]})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}},"config":{},"pageMetadata":{"title":"Alerts in LangSmith","sidebarTitle":"Alerts","description":null,"href":"/langsmith/alerts"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Step 1: Navigate to create alert","slug":"step-1-navigate-to-create-alert","depth":2,"children":[]},{"title":"Step 2: Select metric type","slug":"step-2-select-metric-type","depth":2,"children":[]},{"title":"Step 3: Define alert conditions","slug":"step-3-define-alert-conditions","depth":2,"children":[]},{"title":"Step 4: Configure notification channel","slug":"step-4-configure-notification-channel","depth":2,"children":[{"title":"1. Configure the Slack notification","slug":"1-configure-the-slack-notification","depth":3,"children":[],"tabId":"slack"},{"title":"2. Test the integration","slug":"2-test-the-integration","depth":3,"children":[],"tabId":"slack"},{"title":"Notification format","slug":"notification-format","depth":3,"children":[],"tabId":"slack"},{"title":"1. Create a Service in PagerDuty","slug":"1-create-a-service-in-pagerduty","depth":3,"children":[],"tabId":"pagerduty"},{"title":"2. Obtain integration key","slug":"2-obtain-integration-key","depth":3,"children":[],"tabId":"pagerduty"},{"title":"3. Configure LangSmith alert with PagerDuty","slug":"3-configure-langsmith-alert-with-pagerduty","depth":3,"children":[],"tabId":"pagerduty"},{"title":"Troubleshooting","slug":"troubleshooting","depth":3,"children":[],"tabId":"pagerduty"},{"title":"Additional resources","slug":"additional-resources","depth":3,"children":[],"tabId":"pagerduty"},{"title":"1. Create an API token in Dynatrace","slug":"1-create-an-api-token-in-dynatrace","depth":3,"children":[],"tabId":"dynatrace"},{"title":"2. Obtain your Dynatrace environment URL","slug":"2-obtain-your-dynatrace-environment-url","depth":3,"children":[],"tabId":"dynatrace"},{"title":"3. Configure LangSmith alert with Dynatrace","slug":"3-configure-langsmith-alert-with-dynatrace","depth":3,"children":[],"tabId":"dynatrace"},{"title":"Troubleshooting","slug":"troubleshooting-2","depth":3,"children":[],"tabId":"dynatrace"},{"title":"Additional resources","slug":"additional-resources-2","depth":3,"children":[],"tabId":"dynatrace"},{"title":"1. Prepare your receiving endpoint","slug":"1-prepare-your-receiving-endpoint","depth":3,"children":[],"tabId":"webhook"},{"title":"2. Configure webhook parameters","slug":"2-configure-webhook-parameters","depth":3,"children":[],"tabId":"webhook"},{"title":"3. Test the webhook","slug":"3-test-the-webhook","depth":3,"children":[],"tabId":"webhook"},{"title":"Troubleshooting","slug":"troubleshooting-3","depth":3,"children":[],"tabId":"webhook"},{"title":"Security considerations","slug":"security-considerations","depth":3,"children":[],"tabId":"webhook"},{"title":"Example recipes","slug":"example-recipes","depth":3,"children":[],"tabId":"webhook"},{"title":"Additional resources","slug":"additional-resources-3","depth":3,"children":[],"tabId":"webhook"}]},{"title":"Best practices","slug":"best-practices","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/langchain-5e9cc07a/8e2bdc5fa13bae3b/language-toggle.js","/_mintlify/custom/langchain-5e9cc07a/e53df5e6c631412e/ChatLangChainEmbed.js","/_mintlify/custom/langchain-5e9cc07a/de0c938f8f025ce1/integration-downloads-table.js","/_mintlify/custom/langchain-5e9cc07a/bf5a14ed20580d69/default-changelog-filter.js","/_mintlify/custom/langchain-5e9cc07a/2b68992dd6b93a5a/changelog-navigation.js"],"subdomain":"langchain-5e9cc07a","siteName":"Docs by LangChain","title":"Alerts in LangSmith - Docs by LangChain","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-03T16:42:59.742Z","originalFileLocation":"langsmith/alerts.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"Docs by LangChain\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/langchain-5e9cc07a/YSQua9Gt91yRswvJ/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/langchain-5e9cc07a/YSQua9Gt91yRswvJ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/langchain-5e9cc07a/YSQua9Gt91yRswvJ/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/langchain-5e9cc07a/YSQua9Gt91yRswvJ/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/langchain-5e9cc07a/YSQua9Gt91yRswvJ/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/langchain-5e9cc07a/YSQua9Gt91yRswvJ/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/langchain-5e9cc07a/YSQua9Gt91yRswvJ/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/langchain-5e9cc07a/YSQua9Gt91yRswvJ/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/langchain-5e9cc07a/YSQua9Gt91yRswvJ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Alerts in LangSmith - Docs by LangChain\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Docs by LangChain\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.langchain.com/langsmith/alerts\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://langchain-5e9cc07a.mintlify.app/_mintlify/api/og/v2?division=Monitoring+%26+alerting\u0026amp;title=Alerts+in+LangSmith\u0026amp;theme=5f787871cd9e0fc0371614e6\u0026amp;signature=0e108b323d84491153224162274bd07819fa3ad7bde42704b8af3ba4c2f8be66\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Alerts in LangSmith - Docs by LangChain\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://langchain-5e9cc07a.mintlify.app/_mintlify/api/og/v2?division=Monitoring+%26+alerting\u0026amp;title=Alerts+in+LangSmith\u0026amp;theme=5f787871cd9e0fc0371614e6\u0026amp;signature=0e108b323d84491153224162274bd07819fa3ad7bde42704b8af3ba4c2f8be66\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/langchain-5e9cc07a/YSQua9Gt91yRswvJ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Docs by LangChain\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#161F34\">\u003cmeta data-mint-head name=\"google-site-verification\" content=\"9_2KHeJwmEdwgncBRk1MsKxriZz7Sc21EJdbfCxkTEo\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.langchain.com/langsmith/alerts\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/langsmith/alerts.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.langchain.com/#organization\",\"name\":\"Docs by LangChain\",\"url\":\"https://docs.langchain.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/langchain-5e9cc07a/nQm-sjd_MByLhgeW/images/brand/langchain-docs-dark-blue.png?fit=max\u0026auto=format\u0026n=nQm-sjd_MByLhgeW\u0026q=85\u0026s=5babf1a1962208fd7eed942fa2432ecb\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.langchain.com#website\",\"name\":\"Docs by LangChain\",\"url\":\"https://docs.langchain.com\",\"publisher\":{\"@id\":\"https://docs.langchain.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.langchain.com/langsmith/alerts#webpage\",\"url\":\"https://docs.langchain.com/langsmith/alerts\",\"name\":\"Alerts in LangSmith\",\"dateModified\":\"2026-11-03T16:42:59.742Z\",\"isPartOf\":{\"@id\":\"https://docs.langchain.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.langchain.com/langsmith/alerts#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.langchain.com/langsmith/alerts#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Monitoring \u0026 alerting\",\"item\":\"https://docs.langchain.com/langsmith/dashboards\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Alerts in LangSmith\",\"item\":\"https://docs.langchain.com/langsmith/alerts\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.langchain.com/langsmith/alerts#article\",\"headline\":\"Alerts in LangSmith\",\"name\":\"Alerts in LangSmith\",\"url\":\"https://docs.langchain.com/langsmith/alerts\",\"mainEntityOfPage\":{\"@id\":\"https://docs.langchain.com/langsmith/alerts#webpage\"},\"dateModified\":\"2026-11-03T16:42:59.742Z\",\"publisher\":{\"@id\":\"https://docs.langchain.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.langchain.com#website\"}}]}\u003c/script>","siteName":"Docs by LangChain","nav":{"global":null,"products":[{"product":"AGENT DEVELOPMENT LIFECYCLE","menu":[{"item":"Home","icon":"home","description":"Get started","pages":[{"title":null,"sidebarTitle":"Home","mode":"custom","href":""}]},{"item":"Build","icon":"hammer","description":"Build agents with open source","dropdowns":[{"dropdown":"Python","icon":{"style":"regular","name":"brand-python"},"tabs":[{"tab":"Overview","pages":[{"title":"Build","sidebarTitle":"Overview","mode":"custom","icon":"hammer","href":"/build-overview"}]},{"tab":"Managed Deep Agents","pages":[{"group":"Get started","tag":"BETA","pages":[{"title":"Managed Deep Agents","sidebarTitle":"Overview","href":"/langsmith/python/managed-deep-agents-overview"},{"title":"Managed Deep Agents quickstart","sidebarTitle":"Quickstart","href":"/langsmith/python/managed-deep-agents-quickstart"},{"title":"Managed Deep Agents project structure","sidebarTitle":"Project structure","href":"/langsmith/python/managed-deep-agents-project-structure"},{"title":"Move from Deep Agents to Managed Deep Agents","sidebarTitle":"Move from Deep Agents","href":"/langsmith/python/managed-deep-agents-migrate"}]},{"group":"Agent capabilities","pages":[{"title":"Define a Managed Deep Agent","sidebarTitle":"Agent definition","href":"/langsmith/python/managed-deep-agents-agent-definition"},{"title":"Add instructions to Managed Deep Agents","sidebarTitle":"Instructions","href":"/langsmith/python/managed-deep-agents-instructions"},{"title":"Add skills to Managed Deep Agents","sidebarTitle":"Skills","href":"/langsmith/python/managed-deep-agents-skills"},{"title":"Add custom tools to Managed Deep Agents","sidebarTitle":"Tools","href":"/langsmith/python/managed-deep-agents-tools"},{"title":"Built-in search powered by Parallel","sidebarTitle":"Built-in search","href":"/langsmith/python/managed-deep-agents-search"},{"title":"Manage connections","sidebarTitle":"Connections","href":"/langsmith/python/managed-deep-agents-connections"},{"title":"Connect to MCP servers","sidebarTitle":"MCP","href":"/langsmith/python/managed-deep-agents-mcp-connectors"},{"title":"Add custom middleware to Managed Deep Agents","sidebarTitle":"Middleware","href":"/langsmith/python/managed-deep-agents-middleware"},{"title":"Add memory to Managed Deep Agents","sidebarTitle":"Memory","href":"/langsmith/python/managed-deep-agents-memory"},{"title":"Add a sandbox to Managed Deep Agents","sidebarTitle":"Sandboxes","href":"/langsmith/python/managed-deep-agents-sandboxes"},{"title":"Browser use","sidebarTitle":"Browser use","href":"/langsmith/python/managed-deep-agents-browser-use"},{"title":"Subagents","sidebarTitle":"Subagents","href":"/langsmith/python/managed-deep-agents-subagents"},{"title":"Add identity to Managed Deep Agents","sidebarTitle":"Identity","href":"/langsmith/python/managed-deep-agents-identity"},{"group":"Channels","expanded":false,"pages":[{"title":"Connect Managed Deep Agents to channels","sidebarTitle":"Overview","href":"/langsmith/python/managed-deep-agents-channels"},{"title":"Connect a Managed Deep Agent to Slack","sidebarTitle":"Slack","href":"/langsmith/python/managed-deep-agents-channels-slack"},{"title":"Connect a Managed Deep Agent over HTTP","sidebarTitle":"HTTP","href":"/langsmith/python/managed-deep-agents-channels-http"},{"title":"Prompt Slack users with agent-owned interrupts","sidebarTitle":"Agent-owned interrupts","href":"/langsmith/python/managed-deep-agents-agent-owned-interrupts"}]},{"title":"Add schedules to Managed Deep Agents","sidebarTitle":"Schedules","href":"/langsmith/python/managed-deep-agents-schedules"},{"title":"Evaluate Managed Deep Agents","sidebarTitle":"Evals","href":"/langsmith/python/managed-deep-agents-evals"},{"title":"Managed Deep Agents runtime","sidebarTitle":"Runtime","href":"/langsmith/python/managed-deep-agents-runtime"}]},{"group":"Build and deploy","pages":[{"title":"Develop locally with LangSmith Studio","sidebarTitle":"Local Studio","href":"/langsmith/python/managed-deep-agents-local-development"},{"title":"Add a custom search tool, memory, and a schedule","sidebarTitle":"Build a scheduled agent","href":"/langsmith/python/managed-deep-agents-tutorial"},{"title":"Deploy a Managed Deep Agent","sidebarTitle":"Deploy an agent","href":"/langsmith/python/managed-deep-agents-deploy"},{"title":"Connect MCP clients to a Managed Deep Agent","sidebarTitle":"MCP endpoint","href":"/langsmith/python/managed-deep-agents-mcp-endpoint"},{"title":"Build a custom frontend for a Managed Deep Agent","sidebarTitle":"Custom frontend","href":"/langsmith/python/managed-deep-agents-custom-frontend"},{"title":"Manage Context Hub for Managed Deep Agents","sidebarTitle":"Context Hub","href":"/langsmith/python/managed-deep-agents-context-hub"},{"title":"Managed Deep Agents CLI reference","sidebarTitle":"CLI reference","href":"/langsmith/python/managed-deep-agents-cli"},{"title":"Changelog","url":"https://github.com/langchain-ai/managed-deepagents/blob/main/CHANGELOG.md","href":"/langsmith/python/managed-deep-agents-changelog"}]}]},{"tab":"Deep Agents","pages":[{"title":"Deep Agents overview","sidebarTitle":"Overview","href":"/oss/python/deepagents/overview"},{"group":"Get started","pages":[{"title":"Quickstart","href":"/oss/python/deepagents/quickstart"},{"title":"Customize Deep Agents","sidebarTitle":"Customization","href":"/oss/python/deepagents/customization"},{"title":"Models","href":"/oss/python/deepagents/models"},{"title":"Comparison with Claude Agent SDK","sidebarTitle":"Comparison with Claude Agent SDK","href":"/oss/python/deepagents/comparison"},{"title":"Changelog","url":"https://docs.langchain.com/oss/python/releases/changelog","href":"/oss/python/deepagents/changelog-py"}]},{"group":"Deployment","pages":[{"title":"Managed Deep Agents","sidebarTitle":"Managed Deep Agents","tag":"BETA","url":"/langsmith/python/managed-deep-agents-overview","href":"/langsmith/python/managed-deep-agents"},{"group":"Going to production","root":{"title":"Going to production","href":"/oss/python/deepagents/going-to-production"},"pages":[{"title":"Fault tolerance","href":"/oss/python/deepagents/fault-tolerance"}]}]},{"group":"Execution environment","expanded":true,"pages":[{"title":"Tools","href":"/oss/python/deepagents/tools"},{"title":"Backends","href":"/oss/python/deepagents/backends"},{"title":"Permissions","href":"/oss/python/deepagents/permissions"},{"title":"Multimodal inputs and outputs","sidebarTitle":"Multimodality","href":"/oss/python/deepagents/multimodal"},{"title":"Sandboxes","sidebarTitle":"Sandboxes","href":"/oss/python/deepagents/sandboxes"},{"title":"Browser use","href":"/oss/python/deepagents/browser-use"},{"title":"Interpreters","tag":"Beta","href":"/oss/python/deepagents/interpreters"},{"title":"Event streaming","tag":"Beta","href":"/oss/python/deepagents/event-streaming"},{"title":"Streaming","href":"/oss/python/deepagents/streaming"}]},{"group":"Context management","expanded":true,"pages":[{"title":"Skills","href":"/oss/python/deepagents/skills"},{"title":"Memory","href":"/oss/python/deepagents/memory"},{"title":"Retrieval","href":"/oss/python/deepagents/retrieval"},{"title":"Context engineering in Deep Agents","sidebarTitle":"Context engineering","href":"/oss/python/deepagents/context-engineering"},{"title":"Profiles","tag":"Beta","href":"/oss/python/deepagents/profiles"},{"title":"OpenWiki","sidebarTitle":"OpenWiki","url":"/oss/openwiki/overview","href":"/oss/python/deepagents/openwiki"}]},{"group":"Delegation","expanded":true,"pages":[{"title":"Subagents","href":"/oss/python/deepagents/subagents"},{"title":"Dynamic subagents","tag":"Beta","href":"/oss/python/deepagents/dynamic-subagents"},{"title":"Async subagents","href":"/oss/python/deepagents/async-subagents"}]},{"group":"Steering","expanded":true,"pages":[{"title":"Human-in-the-loop","href":"/oss/python/deepagents/human-in-the-loop"},{"title":"Grading rubrics","tag":"Beta","href":"/oss/python/deepagents/rubric"}]},{"group":"Middleware","expanded":true,"pages":[{"title":"Middleware overview","sidebarTitle":"Overview","href":"/oss/python/langchain/middleware/overview"},{"title":"Prebuilt middleware","href":"/oss/python/langchain/middleware/built-in"},{"title":"Custom middleware","href":"/oss/python/langchain/middleware/custom"}]},{"group":"Frontend","pages":[{"title":"Overview","href":"/oss/python/deepagents/frontend/overview"},{"group":"Patterns","pages":[{"title":"Subagent streaming","href":"/oss/python/deepagents/frontend/subagent-streaming"},{"title":"Todo list","href":"/oss/python/deepagents/frontend/todo-list"},{"title":"Sandbox","href":"/oss/python/deepagents/frontend/sandbox"}]}]},{"group":"Protocols","pages":[{"title":"Agent Client Protocol (ACP)","href":"/oss/python/deepagents/acp"},{"title":"Model Context Protocol","sidebarTitle":"MCP with LangChain","url":"/oss/python/langchain/mcp","href":"/oss/python/deepagents/mcp"},{"title":"A2A server","sidebarTitle":"A2A with LangSmith","url":"/langsmith/server-a2a","href":"/oss/python/deepagents/a2a"},{"title":"Agent User Interaction Protocol (AG-UI)","sidebarTitle":"AG-UI","href":"/oss/python/deepagents/ag-ui"}]}]},{"tab":"LangChain","pages":[{"title":"LangChain overview","sidebarTitle":"Overview","href":"/oss/python/langchain/overview"},{"group":"Get started","pages":[{"title":"Install LangChain","sidebarTitle":"Install","href":"/oss/python/langchain/install"},{"title":"Quickstart","href":"/oss/python/langchain/quickstart"},{"title":"Changelog","url":"https://docs.langchain.com/oss/python/releases/changelog","href":"/oss/python/langchain/changelog-py"},{"title":"Philosophy","mode":"wide","href":"/oss/python/langchain/philosophy"}]},{"group":"Core components","pages":[{"title":"Agents","href":"/oss/python/langchain/agents"},{"title":"Models","href":"/oss/python/langchain/models"},{"title":"Messages","href":"/oss/python/langchain/messages"},{"title":"Tools","href":"/oss/python/langchain/tools"},{"title":"Short-term memory","href":"/oss/python/langchain/short-term-memory"},{"title":"Event streaming","href":"/oss/python/langchain/event-streaming"},{"title":"Streaming","href":"/oss/python/langchain/streaming"},{"title":"Structured output","href":"/oss/python/langchain/structured-output"}]},{"group":"Middleware","pages":[{"title":"Middleware overview","sidebarTitle":"Overview","href":"/oss/python/langchain/middleware/overview"},{"title":"Prebuilt middleware","href":"/oss/python/langchain/middleware/built-in"},{"title":"Custom middleware","href":"/oss/python/langchain/middleware/custom"}]},{"group":"Frontend","pages":[{"title":"Overview","href":"/oss/python/langchain/frontend/overview"},{"group":"Patterns","pages":[{"title":"Markdown messages","href":"/oss/python/langchain/frontend/markdown-messages"},{"title":"Tool calling","href":"/oss/python/langchain/frontend/tool-calling"},{"title":"Headless tools","href":"/oss/python/langchain/frontend/headless-tools"},{"title":"Human-in-the-Loop","href":"/oss/python/langchain/frontend/human-in-the-loop"},{"title":"Branching chat","href":"/oss/python/langchain/frontend/branching-chat"},{"title":"Reasoning tokens","href":"/oss/python/langchain/frontend/reasoning-tokens"},{"title":"Structured output","href":"/oss/python/langchain/frontend/structured-output"},{"title":"Message queues","href":"/oss/python/langchain/frontend/message-queues"},{"title":"Join \u0026 rejoin streams","href":"/oss/python/langchain/frontend/join-rejoin"},{"title":"Time travel","href":"/oss/python/langchain/frontend/time-travel"},{"group":"Generative UI","pages":[{"title":"Generative UI overview","sidebarTitle":"Overview","href":"/oss/python/langchain/frontend/generative-ui-overview"},{"title":"Controlled generative UI","sidebarTitle":"Controlled","href":"/oss/python/langchain/frontend/controlled-generative-ui"},{"title":"Declarative generative UI","sidebarTitle":"Declarative","href":"/oss/python/langchain/frontend/declarative-generative-ui"},{"title":"Open-ended generative UI","sidebarTitle":"Open-ended","href":"/oss/python/langchain/frontend/open-ended-generative-ui"}]}]},{"group":"Integrations","pages":[{"title":"Overview","href":"/oss/python/langchain/frontend/integrations/overview"},{"title":"CopilotKit","href":"/oss/python/langchain/frontend/integrations/copilotkit"},{"title":"AI Elements","href":"/oss/python/langchain/frontend/integrations/ai-elements"},{"title":"assistant-ui","href":"/oss/python/langchain/frontend/integrations/assistant-ui"},{"title":"OpenUI","href":"/oss/python/langchain/frontend/integrations/openui"}]}]},{"group":"Advanced usage","pages":[{"title":"Guardrails","href":"/oss/python/langchain/guardrails"},{"title":"Runtime","href":"/oss/python/langchain/runtime"},{"title":"Context engineering in agents","sidebarTitle":"Context engineering","href":"/oss/python/langchain/context-engineering"},{"group":"MCP","pages":[{"title":"Model Context Protocol (MCP)","sidebarTitle":"Overview","href":"/oss/python/langchain/mcp/index"},{"title":"Tools","href":"/oss/python/langchain/mcp/tools"},{"title":"Connections","href":"/oss/python/langchain/mcp/connections"},{"title":"Authentication","href":"/oss/python/langchain/mcp/auth"}]},{"title":"Human-in-the-loop","href":"/oss/python/langchain/human-in-the-loop"},{"group":"Multi-agent","pages":[{"title":"Multi-agent","sidebarTitle":"Overview","href":"/oss/python/langchain/multi-agent/index"},{"title":"Subagents","href":"/oss/python/langchain/multi-agent/subagents"},{"title":"Handoffs","href":"/oss/python/langchain/multi-agent/handoffs"},{"title":"Skills","href":"/oss/python/langchain/multi-agent/skills"},{"title":"Router","href":"/oss/python/langchain/multi-agent/router"},{"title":"Custom workflow","href":"/oss/python/langchain/multi-agent/custom-workflow"}]},{"title":"Retrieval","href":"/oss/python/deepagents/retrieval"},{"title":"Long-term memory","href":"/oss/python/langchain/long-term-memory"}]},{"group":"Agent development","pages":[{"title":"LangSmith Studio","sidebarTitle":"LangSmith Studio","href":"/oss/python/langchain/studio"},{"group":"Test","pages":[{"title":"Test","sidebarTitle":"Overview","href":"/oss/python/langchain/test/index"},{"title":"Unit testing","href":"/oss/python/langchain/test/unit-testing"},{"title":"Integration testing","href":"/oss/python/langchain/test/integration-testing"},{"title":"Agent Evals","href":"/oss/python/langchain/test/evals"}]},{"title":"Agent Chat UI","href":"/oss/python/langchain/ui"}]},{"group":"Production","pages":[{"title":"Deployment","sidebarTitle":"Deployment","href":"/oss/python/langchain/deploy"},{"title":"LangSmith Observability","sidebarTitle":"Observability","href":"/oss/python/langchain/observability"}]}]},{"tab":"LangGraph","pages":[{"title":"LangGraph overview","sidebarTitle":"Overview","href":"/oss/python/langgraph/overview"},{"group":"Get started","pages":[{"title":"Quickstart","href":"/oss/python/langgraph/quickstart"},{"title":"Choosing between Graph and Functional APIs","sidebarTitle":"Choosing APIs","href":"/oss/python/langgraph/choosing-apis"},{"title":"Changelog","url":"https://docs.langchain.com/oss/python/releases/changelog","href":"/oss/python/langgraph/changelog-py"}]},{"group":"Capabilities","pages":[{"title":"Persistence","href":"/oss/python/langgraph/persistence"},{"title":"Checkpointers","href":"/oss/python/langgraph/checkpointers"},{"title":"Stores","href":"/oss/python/langgraph/stores"},{"title":"Fault tolerance","href":"/oss/python/langgraph/fault-tolerance"},{"title":"Event streaming","href":"/oss/python/langgraph/event-streaming"},{"title":"Streaming","href":"/oss/python/langgraph/streaming"},{"title":"Interrupts","href":"/oss/python/langgraph/interrupts"},{"title":"Use time-travel","sidebarTitle":"Time travel","href":"/oss/python/langgraph/use-time-travel"},{"title":"Memory","href":"/oss/python/langgraph/add-memory"},{"title":"Subgraphs","sidebarTitle":"Subgraphs","href":"/oss/python/langgraph/use-subgraphs"}]},{"group":"Patterns","pages":[{"title":"Workflows and agents","sidebarTitle":"Workflows + agents","href":"/oss/python/langgraph/workflows-agents"}]},{"group":"Build with the Graph API","pages":[{"title":"Thinking in the Graph API","sidebarTitle":"Thinking in the Graph API","href":"/oss/python/langgraph/thinking-in-graph-api"},{"title":"Build checklist for the Graph API","sidebarTitle":"Build checklist","href":"/oss/python/langgraph/use-graph-api"},{"title":"Graph API overview","sidebarTitle":"Graph API","href":"/oss/python/langgraph/graph-api"},{"title":"Define and update state","sidebarTitle":"Define and update state","href":"/oss/python/langgraph/graph-api-state"},{"title":"Build sequences, branches, and loops","sidebarTitle":"Control flow","href":"/oss/python/langgraph/graph-api-control-flow"},{"title":"Use Send and Command","sidebarTitle":"Send and Command","href":"/oss/python/langgraph/graph-api-send-command"},{"title":"Configure nodes","sidebarTitle":"Configure nodes","href":"/oss/python/langgraph/graph-api-nodes"},{"title":"Visualize your graph","sidebarTitle":"Visualize your graph","href":"/oss/python/langgraph/graph-api-visualize"}]},{"group":"Deployment","pages":[{"title":"Run a local server","sidebarTitle":"Local server","href":"/oss/python/langgraph/local-server"},{"title":"Application structure","href":"/oss/python/langgraph/application-structure"},{"title":"Test","href":"/oss/python/langgraph/test"},{"title":"Backward compatibility","href":"/oss/python/langgraph/backward-compatibility"},{"title":"LangSmith Studio","href":"/oss/python/langgraph/studio"},{"title":"Agent Chat UI","href":"/oss/python/langgraph/ui"},{"title":"Deployment","sidebarTitle":"Deployment","href":"/oss/python/langgraph/deploy"},{"title":"LangSmith Observability","href":"/oss/python/langgraph/observability"}]},{"group":"Frontend","pages":[{"title":"Overview","href":"/oss/python/langgraph/frontend/overview"},{"title":"Graph execution","href":"/oss/python/langgraph/frontend/graph-execution"},{"title":"Custom stream channels","href":"/oss/python/langgraph/frontend/custom-stream-channels"}]},{"group":"Advanced","pages":[{"group":"Build with the Functional API","pages":[{"title":"Thinking in the Functional API","sidebarTitle":"Thinking in the Functional API","href":"/oss/python/langgraph/thinking-in-functional-api"},{"title":"Build checklist for the Functional API","sidebarTitle":"Build checklist","href":"/oss/python/langgraph/use-functional-api"},{"title":"Functional API overview","sidebarTitle":"Functional API","href":"/oss/python/langgraph/functional-api"},{"title":"Compose Functional API workflows","sidebarTitle":"Workflows","href":"/oss/python/langgraph/functional-api-workflows"},{"title":"Configure Functional API tasks","sidebarTitle":"Tasks","href":"/oss/python/langgraph/functional-api-tasks"},{"title":"Stream with the Functional API","sidebarTitle":"Streaming","href":"/oss/python/langgraph/functional-api-streaming"},{"title":"Add human-in-the-loop with the Functional API","sidebarTitle":"Human-in-the-loop","href":"/oss/python/langgraph/functional-api-human-in-the-loop"},{"title":"Add memory with the Functional API","sidebarTitle":"Memory","href":"/oss/python/langgraph/functional-api-memory"}]},{"title":"LangGraph runtime","sidebarTitle":"Runtime","href":"/oss/python/langgraph/pregel"}]},{"title":"Studio","url":"https://docs.langchain.com/langsmith/studio","href":"/oss/python/studio"}]},{"tab":"OpenWiki","pages":[{"title":"OpenWiki","sidebarTitle":"Overview","mode":"wide","href":"/oss/openwiki/overview"},{"title":"Quickstart","sidebarTitle":"Quickstart","href":"/oss/openwiki/quickstart"},{"group":"Modes","pages":[{"title":"Code mode","sidebarTitle":"Code mode","href":"/oss/openwiki/code-mode"},{"title":"Personal mode","sidebarTitle":"Personal mode","href":"/oss/openwiki/personal-mode"}]},{"title":"Coding-agent integrations","sidebarTitle":"Integrations","href":"/oss/openwiki/integrations"},{"title":"Search and link wikis","sidebarTitle":"Search and link","href":"/oss/openwiki/search-and-link"},{"title":"Visualize your wiki","sidebarTitle":"Visualize","href":"/oss/openwiki/visualize"},{"title":"Command reference","sidebarTitle":"CLI reference","href":"/oss/openwiki/cli-reference"},{"title":"Customize OpenWiki","sidebarTitle":"Customize OpenWiki","href":"/oss/openwiki/customize"},{"title":"Model providers","sidebarTitle":"Providers","href":"/oss/openwiki/providers"},{"title":"Automate updates","sidebarTitle":"Automate updates","href":"/oss/openwiki/automate-updates"},{"title":"Changelog","url":"https://github.com/langchain-ai/openwiki/releases","href":"/oss/openwiki/changelog"}]},{"tab":"Integrations","pages":[{"title":"LangChain Python integrations","sidebarTitle":"LangChain integrations","mode":"wide","href":"/oss/python/integrations/providers/overview"},{"title":"All LangChain Python integration providers","sidebarTitle":"All providers","mode":"wide","href":"/oss/python/integrations/providers/all_providers"},{"group":"Popular Providers","icon":"users-group","pages":[{"title":"OpenAI integrations","sidebarTitle":"OpenAI","href":"/oss/python/integrations/providers/openai"},{"title":"Anthropic (Claude) integrations","sidebarTitle":"Anthropic","href":"/oss/python/integrations/providers/anthropic"},{"title":"Google integrations","sidebarTitle":"Google","href":"/oss/python/integrations/providers/google"},{"title":"AWS (Amazon) integrations","sidebarTitle":"AWS","href":"/oss/python/integrations/providers/aws"},{"title":"NVIDIA","href":"/oss/python/integrations/providers/nvidia"},{"title":"Hugging Face integrations","sidebarTitle":"Hugging Face","href":"/oss/python/integrations/providers/huggingface"},{"title":"Microsoft integrations","sidebarTitle":"Microsoft","href":"/oss/python/integrations/providers/microsoft"},{"title":"Ollama integrations","sidebarTitle":"Ollama","href":"/oss/python/integrations/providers/ollama"},{"title":"Groq integrations","sidebarTitle":"Groq","href":"/oss/python/integrations/providers/groq"},{"title":"Fireworks integrations","sidebarTitle":"Fireworks","href":"/oss/python/integrations/providers/fireworks"},{"title":"Browserbase integrations","href":"/oss/python/integrations/providers/browserbase"}]},{"group":"Integrations by component","icon":"plug","pages":[{"title":"Chat model integrations","sidebarTitle":"Chat models","mode":"wide","href":"/oss/python/integrations/chat/index"},{"title":"Tool integrations","sidebarTitle":"Tools and toolkits","href":"/oss/python/integrations/tools/index"},{"title":"Middleware integrations","sidebarTitle":"Middleware","href":"/oss/python/integrations/middleware/index"},{"title":"Sandbox integrations","sidebarTitle":"Sandboxes","href":"/oss/python/integrations/sandboxes/index"},{"title":"Backend integrations","sidebarTitle":"Backends","href":"/oss/python/integrations/backends/index"},{"title":"Checkpointer integrations","sidebarTitle":"Checkpointers","href":"/oss/python/integrations/checkpointers/index"},{"title":"Store integrations","sidebarTitle":"Stores","href":"/oss/python/integrations/long-term-memory/index"},{"title":"Retriever integrations","sidebarTitle":"Retrievers","href":"/oss/python/integrations/retrievers/index"},{"title":"Text splitter integrations","sidebarTitle":"Text splitters","href":"/oss/python/integrations/splitters/index"},{"title":"Embedding model integrations","sidebarTitle":"Embedding models","href":"/oss/python/integrations/embeddings/index"},{"title":"Vector store integrations","sidebarTitle":"Vector stores","href":"/oss/python/integrations/vectorstores/index"},{"title":"Document loader integrations","sidebarTitle":"Document loaders","href":"/oss/python/integrations/document_loaders/index"}]}]},{"tab":"Learn","pages":[{"title":"Learn","href":"/oss/python/learn"},{"group":"Tutorials","icon":"code","pages":[{"group":"Deep Agents","expanded":true,"pages":[{"title":"Build a data analysis agent","sidebarTitle":"Data Analysis","href":"/oss/python/deepagents/data-analysis"},{"title":"Build a deep research agent","sidebarTitle":"Deep Research","href":"/oss/python/deepagents/deep-research"},{"title":"Build a content builder agent","sidebarTitle":"Content Builder","href":"/oss/python/deepagents/content-builder"},{"title":"Retrieval Augmented Generation (RAG) with Deep Agents","sidebarTitle":"RAG","href":"/oss/python/deepagents/rag"}]},{"group":"LangChain","expanded":true,"pages":[{"title":"Build a data analysis agent from scratch","sidebarTitle":"Deep Agent","href":"/oss/python/langchain/deep-agent-from-scratch"},{"title":"Build a semantic search engine with LangChain","sidebarTitle":"Semantic search","href":"/oss/python/langchain/knowledge-base"},{"title":"Build a SQL agent","sidebarTitle":"SQL agent","href":"/oss/python/langchain/sql-agent"},{"title":"Build a voice agent with LangChain","sidebarTitle":"Voice agent","href":"/oss/python/langchain/voice-agent"}]},{"group":"Multi-agent","expanded":true,"pages":[{"title":"Build a personal assistant with subagents","sidebarTitle":"Subagents: Personal assistant","href":"/oss/python/langchain/multi-agent/subagents-personal-assistant"},{"title":"Build customer support with handoffs","sidebarTitle":"Handoffs: Customer support","href":"/oss/python/langchain/multi-agent/handoffs-customer-support"},{"title":"Build a multi-source knowledge base with routing","sidebarTitle":"Router: Knowledge base","href":"/oss/python/langchain/multi-agent/router-knowledge-base"},{"title":"Build a SQL assistant with on-demand skills","sidebarTitle":"Skills: SQL assistant","href":"/oss/python/langchain/multi-agent/skills-sql-assistant"}]},{"group":"LangGraph","expanded":true,"pages":[{"title":"Build a custom RAG agent with LangGraph","sidebarTitle":"Custom RAG agent","href":"/oss/python/langgraph/agentic-rag"},{"title":"Build a custom SQL agent","sidebarTitle":"Custom SQL agent","href":"/oss/python/langgraph/sql-agent"}]}]},{"group":"Conceptual overviews","icon":"book","pages":[{"title":"Runtimes, frameworks, and harnesses","sidebarTitle":"LangChain vs. LangGraph vs. Deep Agents","href":"/oss/python/concepts/products"},{"title":"Providers and models","href":"/oss/python/concepts/providers-and-models"},{"title":"Component architecture","href":"/oss/python/langchain/component-architecture"},{"title":"Memory overview","sidebarTitle":"Memory","href":"/oss/python/concepts/memory"},{"title":"Context overview","sidebarTitle":"Context","href":"/oss/python/concepts/context"},{"title":"Human-in-the-loop overview","sidebarTitle":"Human-in-the-loop","href":"/oss/python/concepts/human-in-the-loop"},{"title":"Graph API overview","sidebarTitle":"Graph API","href":"/oss/python/langgraph/graph-api"},{"title":"Functional API overview","sidebarTitle":"Functional API","href":"/oss/python/langgraph/functional-api"}]},{"group":"Additional resources","icon":"list","pages":[{"title":"Use docs programmatically","href":"/use-these-docs"},{"title":"LangChain Academy","url":"https://academy.langchain.com/","href":"/oss/python/langchain/academy"},{"title":"Case studies","href":"/oss/python/langgraph/case-studies"},{"title":"Get help","href":"/oss/python/langchain/get-help"}]}]},{"tab":"Reference","pages":[{"title":"Reference","sidebarTitle":"Overview","href":"/oss/python/reference/overview"},{"group":"Reference","pages":[{"title":"Deep Agents","url":"https://reference.langchain.com/python/deepagents","href":"/oss/python/reference/deepagents-python"},{"title":"LangChain SDK","url":"https://reference.langchain.com/python/langchain","href":"/oss/python/reference/langchain-python"},{"title":"LangGraph SDK","url":"https://reference.langchain.com/python/langgraph","href":"/oss/python/reference/langgraph-python"},{"title":"Integrations","url":"https://reference.langchain.com/python/integrations/overview","href":"/oss/python/reference/integrations-python"},{"title":"Errors","sidebarTitle":"Errors","href":"/oss/python/common-errors"}]},{"group":"Releases","pages":[{"title":"Versioning","href":"/oss/python/versioning"},{"title":"Changelog","sidebarTitle":"Changelog","href":"/oss/python/releases/changelog"},{"group":"Releases","boost":0.5,"pages":[{"title":"What's new in LangChain v1","sidebarTitle":"LangChain v1","href":"/oss/python/releases/langchain-v1"},{"title":"What's new in LangGraph v1","sidebarTitle":"LangGraph v1","href":"/oss/python/releases/langgraph-v1"}]},{"group":"Migration guides","boost":0.5,"pages":[{"title":"LangChain v1 migration guide","sidebarTitle":"LangChain v1","href":"/oss/python/migrate/langchain-v1"},{"title":"LangGraph v1 migration guide","sidebarTitle":"LangGraph v1","href":"/oss/python/migrate/langgraph-v1"},{"title":"Migrate from langgraph-supervisor","sidebarTitle":"langgraph-supervisor","href":"/oss/python/migrate/langgraph-supervisor"},{"title":"Migrate from langchain-mcp-adapters","sidebarTitle":"langchain-mcp-adapters","href":"/oss/python/migrate/langchain-mcp-adapters"}]}]},{"group":"Policies","pages":[{"title":"Release policy","href":"/oss/python/release-policy"},{"title":"Security policy","sidebarTitle":"Security","href":"/oss/python/security-policy"}]}]},{"tab":"Contribute","pages":[{"title":"Contributing","sidebarTitle":"Overview","href":"/oss/python/contributing/overview"},{"group":"Contribute","boost":0.5,"icon":"heart-plus","pages":[{"title":"Contributing to documentation","sidebarTitle":"Documentation","href":"/oss/python/contributing/documentation"},{"title":"Contributing to code","sidebarTitle":"Code","href":"/oss/python/contributing/code"},{"group":"Integrations","pages":[{"title":"Contributing integrations","sidebarTitle":"Guide","href":"/oss/python/contributing/integrations-langchain"},{"title":"Implement a LangChain integration","sidebarTitle":"Implement","href":"/oss/python/contributing/implement-langchain"},{"title":"Using standard tests","sidebarTitle":"Standard tests","href":"/oss/python/contributing/standard-tests-langchain"},{"title":"Publish an integration","sidebarTitle":"Publish","href":"/oss/python/contributing/publish-langchain"},{"title":"Co-marketing","href":"/oss/python/contributing/comarketing"}]}]}]}]},{"dropdown":"TypeScript","icon":{"style":"regular","name":"brand-typescript"},"tabs":[{"tab":"Overview","pages":[{"title":"Build","sidebarTitle":"Overview","mode":"custom","icon":"hammer","href":"/build-overview"}]},{"tab":"Managed Deep Agents","pages":[{"group":"Get started","tag":"BETA","pages":[{"title":"Managed Deep Agents","sidebarTitle":"Overview","href":"/langsmith/javascript/managed-deep-agents-overview"},{"title":"Managed Deep Agents quickstart","sidebarTitle":"Quickstart","href":"/langsmith/javascript/managed-deep-agents-quickstart"},{"title":"Managed Deep Agents project structure","sidebarTitle":"Project structure","href":"/langsmith/javascript/managed-deep-agents-project-structure"},{"title":"Move from Deep Agents to Managed Deep Agents","sidebarTitle":"Move from Deep Agents","href":"/langsmith/javascript/managed-deep-agents-migrate"}]},{"group":"Agent capabilities","pages":[{"title":"Define a Managed Deep Agent","sidebarTitle":"Agent definition","href":"/langsmith/javascript/managed-deep-agents-agent-definition"},{"title":"Add instructions to Managed Deep Agents","sidebarTitle":"Instructions","href":"/langsmith/javascript/managed-deep-agents-instructions"},{"title":"Add skills to Managed Deep Agents","sidebarTitle":"Skills","href":"/langsmith/javascript/managed-deep-agents-skills"},{"title":"Add custom tools to Managed Deep Agents","sidebarTitle":"Tools","href":"/langsmith/javascript/managed-deep-agents-tools"},{"title":"Built-in search powered by Parallel","sidebarTitle":"Built-in search","href":"/langsmith/javascript/managed-deep-agents-search"},{"title":"Manage connections","sidebarTitle":"Connections","href":"/langsmith/javascript/managed-deep-agents-connections"},{"title":"Connect to MCP servers","sidebarTitle":"MCP","href":"/langsmith/javascript/managed-deep-agents-mcp-connectors"},{"title":"Add custom middleware to Managed Deep Agents","sidebarTitle":"Middleware","href":"/langsmith/javascript/managed-deep-agents-middleware"},{"title":"Add memory to Managed Deep Agents","sidebarTitle":"Memory","href":"/langsmith/javascript/managed-deep-agents-memory"},{"title":"Add a sandbox to Managed Deep Agents","sidebarTitle":"Sandboxes","href":"/langsmith/javascript/managed-deep-agents-sandboxes"},{"title":"Browser use","sidebarTitle":"Browser use","href":"/langsmith/javascript/managed-deep-agents-browser-use"},{"title":"Subagents","sidebarTitle":"Subagents","href":"/langsmith/javascript/managed-deep-agents-subagents"},{"title":"Add identity to Managed Deep Agents","sidebarTitle":"Identity","href":"/langsmith/javascript/managed-deep-agents-identity"},{"group":"Channels","expanded":false,"pages":[{"title":"Connect Managed Deep Agents to channels","sidebarTitle":"Overview","href":"/langsmith/javascript/managed-deep-agents-channels"},{"title":"Connect a Managed Deep Agent to Slack","sidebarTitle":"Slack","href":"/langsmith/javascript/managed-deep-agents-channels-slack"},{"title":"Connect a Managed Deep Agent over HTTP","sidebarTitle":"HTTP","href":"/langsmith/javascript/managed-deep-agents-channels-http"},{"title":"Prompt Slack users with agent-owned interrupts","sidebarTitle":"Agent-owned interrupts","href":"/langsmith/javascript/managed-deep-agents-agent-owned-interrupts"}]},{"title":"Add schedules to Managed Deep Agents","sidebarTitle":"Schedules","href":"/langsmith/javascript/managed-deep-agents-schedules"},{"title":"Evaluate Managed Deep Agents","sidebarTitle":"Evals","href":"/langsmith/javascript/managed-deep-agents-evals"},{"title":"Managed Deep Agents runtime","sidebarTitle":"Runtime","href":"/langsmith/javascript/managed-deep-agents-runtime"}]},{"group":"Build and deploy","pages":[{"title":"Develop locally with LangSmith Studio","sidebarTitle":"Local Studio","href":"/langsmith/javascript/managed-deep-agents-local-development"},{"title":"Add a custom search tool, memory, and a schedule","sidebarTitle":"Build a scheduled agent","href":"/langsmith/javascript/managed-deep-agents-tutorial"},{"title":"Deploy a Managed Deep Agent","sidebarTitle":"Deploy an agent","href":"/langsmith/javascript/managed-deep-agents-deploy"},{"title":"Connect MCP clients to a Managed Deep Agent","sidebarTitle":"MCP endpoint","href":"/langsmith/javascript/managed-deep-agents-mcp-endpoint"},{"title":"Build a custom frontend for a Managed Deep Agent","sidebarTitle":"Custom frontend","href":"/langsmith/javascript/managed-deep-agents-custom-frontend"},{"title":"Manage Context Hub for Managed Deep Agents","sidebarTitle":"Context Hub","href":"/langsmith/javascript/managed-deep-agents-context-hub"},{"title":"Managed Deep Agents CLI reference","sidebarTitle":"CLI reference","href":"/langsmith/javascript/managed-deep-agents-cli"},{"title":"Changelog","url":"https://github.com/langchain-ai/managed-deepagents/blob/main/CHANGELOG.md","href":"/langsmith/javascript/managed-deep-agents-changelog"}]}]},{"tab":"Deep Agents","pages":[{"title":"Deep Agents overview","sidebarTitle":"Overview","href":"/oss/javascript/deepagents/overview"},{"group":"Get started","pages":[{"title":"Quickstart","href":"/oss/javascript/deepagents/quickstart"},{"title":"Customize Deep Agents","sidebarTitle":"Customization","href":"/oss/javascript/deepagents/customization"},{"title":"Models","href":"/oss/javascript/deepagents/models"},{"title":"Comparison with Claude Agent SDK","sidebarTitle":"Comparison with Claude Agent SDK","href":"/oss/javascript/deepagents/comparison"},{"title":"Changelog","url":"https://docs.langchain.com/oss/javascript/releases/changelog","href":"/oss/javascript/deepagents/changelog-js"}]},{"group":"Deployment","pages":[{"title":"Managed Deep Agents","sidebarTitle":"Managed Deep Agents","tag":"BETA","url":"/langsmith/javascript/managed-deep-agents-overview","href":"/langsmith/javascript/managed-deep-agents"},{"group":"Going to production","root":{"title":"Going to production","href":"/oss/javascript/deepagents/going-to-production"},"pages":[{"title":"Fault tolerance","href":"/oss/javascript/deepagents/fault-tolerance"}]}]},{"group":"Execution environment","expanded":true,"pages":[{"title":"Tools","href":"/oss/javascript/deepagents/tools"},{"title":"Backends","href":"/oss/javascript/deepagents/backends"},{"title":"Permissions","href":"/oss/javascript/deepagents/permissions"},{"title":"Multimodal inputs and outputs","sidebarTitle":"Multimodality","href":"/oss/javascript/deepagents/multimodal"},{"title":"Sandboxes","sidebarTitle":"Sandboxes","href":"/oss/javascript/deepagents/sandboxes"},{"title":"Browser use","href":"/oss/javascript/deepagents/browser-use"},{"title":"Interpreters","tag":"Beta","href":"/oss/javascript/deepagents/interpreters"},{"title":"Event streaming","tag":"Beta","href":"/oss/javascript/deepagents/event-streaming"},{"title":"Streaming","href":"/oss/javascript/deepagents/streaming"}]},{"group":"Context management","expanded":true,"pages":[{"title":"Skills","href":"/oss/javascript/deepagents/skills"},{"title":"Memory","href":"/oss/javascript/deepagents/memory"},{"title":"Retrieval","href":"/oss/javascript/deepagents/retrieval"},{"title":"Context engineering in Deep Agents","sidebarTitle":"Context engineering","href":"/oss/javascript/deepagents/context-engineering"},{"title":"Profiles","tag":"Beta","href":"/oss/javascript/deepagents/profiles"},{"title":"OpenWiki","sidebarTitle":"OpenWiki","url":"/oss/openwiki/overview","href":"/oss/javascript/deepagents/openwiki"}]},{"group":"Delegation","expanded":true,"pages":[{"title":"Subagents","href":"/oss/javascript/deepagents/subagents"},{"title":"Dynamic subagents","tag":"Beta","href":"/oss/javascript/deepagents/dynamic-subagents"},{"title":"Async subagents","href":"/oss/javascript/deepagents/async-subagents"}]},{"group":"Steering","expanded":true,"pages":[{"title":"Human-in-the-loop","href":"/oss/javascript/deepagents/human-in-the-loop"}]},{"group":"Middleware","expanded":true,"pages":[{"title":"Middleware overview","sidebarTitle":"Overview","href":"/oss/javascript/langchain/middleware/overview"},{"title":"Prebuilt middleware","href":"/oss/javascript/langchain/middleware/built-in"},{"title":"Custom middleware","href":"/oss/javascript/langchain/middleware/custom"}]},{"group":"Frontend","pages":[{"title":"Overview","href":"/oss/javascript/deepagents/frontend/overview"},{"group":"Patterns","pages":[{"title":"Subagent streaming","href":"/oss/javascript/deepagents/frontend/subagent-streaming"},{"title":"Todo list","href":"/oss/javascript/deepagents/frontend/todo-list"},{"title":"Sandbox","href":"/oss/javascript/deepagents/frontend/sandbox"}]}]},{"group":"Protocols","pages":[{"title":"Agent Client Protocol (ACP)","href":"/oss/javascript/deepagents/acp"},{"title":"Model Context Protocol","sidebarTitle":"MCP with LangChain","url":"/oss/javascript/langchain/mcp","href":"/oss/javascript/deepagents/mcp"},{"title":"A2A server","sidebarTitle":"A2A with LangSmith","url":"/langsmith/server-a2a","href":"/oss/javascript/deepagents/a2a"},{"title":"Agent User Interaction Protocol (AG-UI)","sidebarTitle":"AG-UI","href":"/oss/javascript/deepagents/ag-ui"}]}]},{"tab":"LangChain","pages":[{"title":"LangChain overview","sidebarTitle":"Overview","href":"/oss/javascript/langchain/overview"},{"group":"Get started","pages":[{"title":"Install LangChain","sidebarTitle":"Install","href":"/oss/javascript/langchain/install"},{"title":"Quickstart","href":"/oss/javascript/langchain/quickstart"},{"title":"Changelog","url":"https://docs.langchain.com/oss/javascript/releases/changelog","href":"/oss/javascript/langchain/changelog-js"},{"title":"Philosophy","mode":"wide","href":"/oss/javascript/langchain/philosophy"}]},{"group":"Core components","pages":[{"title":"Agents","href":"/oss/javascript/langchain/agents"},{"title":"Models","href":"/oss/javascript/langchain/models"},{"title":"Messages","href":"/oss/javascript/langchain/messages"},{"title":"Tools","href":"/oss/javascript/langchain/tools"},{"title":"Short-term memory","href":"/oss/javascript/langchain/short-term-memory"},{"title":"Event streaming","href":"/oss/javascript/langchain/event-streaming"},{"title":"Streaming","href":"/oss/javascript/langchain/streaming"},{"title":"Structured output","href":"/oss/javascript/langchain/structured-output"}]},{"group":"Middleware","pages":[{"title":"Middleware overview","sidebarTitle":"Overview","href":"/oss/javascript/langchain/middleware/overview"},{"title":"Prebuilt middleware","href":"/oss/javascript/langchain/middleware/built-in"},{"title":"Custom middleware","href":"/oss/javascript/langchain/middleware/custom"}]},{"group":"Frontend","pages":[{"title":"Overview","href":"/oss/javascript/langchain/frontend/overview"},{"group":"Patterns","pages":[{"title":"Markdown messages","href":"/oss/javascript/langchain/frontend/markdown-messages"},{"title":"Tool calling","href":"/oss/javascript/langchain/frontend/tool-calling"},{"title":"Headless tools","href":"/oss/javascript/langchain/frontend/headless-tools"},{"title":"Human-in-the-Loop","href":"/oss/javascript/langchain/frontend/human-in-the-loop"},{"title":"Branching chat","href":"/oss/javascript/langchain/frontend/branching-chat"},{"title":"Reasoning tokens","href":"/oss/javascript/langchain/frontend/reasoning-tokens"},{"title":"Structured output","href":"/oss/javascript/langchain/frontend/structured-output"},{"title":"Message queues","href":"/oss/javascript/langchain/frontend/message-queues"},{"title":"Join \u0026 rejoin streams","href":"/oss/javascript/langchain/frontend/join-rejoin"},{"title":"Time travel","href":"/oss/javascript/langchain/frontend/time-travel"},{"group":"Generative UI","pages":[{"title":"Generative UI overview","sidebarTitle":"Overview","href":"/oss/javascript/langchain/frontend/generative-ui-overview"},{"title":"Controlled generative UI","sidebarTitle":"Controlled","href":"/oss/javascript/langchain/frontend/controlled-generative-ui"},{"title":"Declarative generative UI","sidebarTitle":"Declarative","href":"/oss/javascript/langchain/frontend/declarative-generative-ui"},{"title":"Open-ended generative UI","sidebarTitle":"Open-ended","href":"/oss/javascript/langchain/frontend/open-ended-generative-ui"}]}]},{"group":"Integrations","pages":[{"title":"Overview","href":"/oss/javascript/langchain/frontend/integrations/overview"},{"title":"CopilotKit","href":"/oss/javascript/langchain/frontend/integrations/copilotkit"},{"title":"AI Elements","href":"/oss/javascript/langchain/frontend/integrations/ai-elements"},{"title":"assistant-ui","href":"/oss/javascript/langchain/frontend/integrations/assistant-ui"},{"title":"OpenUI","href":"/oss/javascript/langchain/frontend/integrations/openui"}]}]},{"group":"Advanced usage","pages":[{"title":"Guardrails","href":"/oss/javascript/langchain/guardrails"},{"title":"Runtime","href":"/oss/javascript/langchain/runtime"},{"title":"Context engineering in agents","sidebarTitle":"Context engineering","href":"/oss/javascript/langchain/context-engineering"},{"group":"MCP","pages":[{"title":"Model Context Protocol (MCP)","sidebarTitle":"Overview","href":"/oss/javascript/langchain/mcp/index"},{"title":"Tools","href":"/oss/javascript/langchain/mcp/tools"},{"title":"Connections","href":"/oss/javascript/langchain/mcp/connections"},{"title":"Authentication","href":"/oss/javascript/langchain/mcp/auth"}]},{"title":"Human-in-the-loop","href":"/oss/javascript/langchain/human-in-the-loop"},{"group":"Multi-agent","pages":[{"title":"Multi-agent","sidebarTitle":"Overview","href":"/oss/javascript/langchain/multi-agent/index"},{"title":"Subagents","href":"/oss/javascript/langchain/multi-agent/subagents"},{"title":"Handoffs","href":"/oss/javascript/langchain/multi-agent/handoffs"},{"title":"Skills","href":"/oss/javascript/langchain/multi-agent/skills"},{"title":"Router","href":"/oss/javascript/langchain/multi-agent/router"},{"title":"Custom workflow","href":"/oss/javascript/langchain/multi-agent/custom-workflow"}]},{"title":"Retrieval","href":"/oss/javascript/deepagents/retrieval"},{"title":"Long-term memory","href":"/oss/javascript/langchain/long-term-memory"}]},{"group":"Agent development","pages":[{"title":"LangSmith Studio","sidebarTitle":"LangSmith Studio","href":"/oss/javascript/langchain/studio"},{"group":"Test","pages":[{"title":"Test","sidebarTitle":"Overview","href":"/oss/javascript/langchain/test/index"},{"title":"Unit testing","href":"/oss/javascript/langchain/test/unit-testing"},{"title":"Integration testing","href":"/oss/javascript/langchain/test/integration-testing"},{"title":"Agent Evals","href":"/oss/javascript/langchain/test/evals"}]},{"title":"Agent Chat UI","href":"/oss/javascript/langchain/ui"}]},{"group":"Production","pages":[{"title":"Deployment","sidebarTitle":"Deployment","href":"/oss/javascript/langchain/deploy"},{"title":"LangSmith Observability","sidebarTitle":"Observability","href":"/oss/javascript/langchain/observability"}]}]},{"tab":"LangGraph","pages":[{"title":"LangGraph overview","sidebarTitle":"Overview","href":"/oss/javascript/langgraph/overview"},{"group":"Get started","pages":[{"title":"Quickstart","href":"/oss/javascript/langgraph/quickstart"},{"title":"Choosing between Graph and Functional APIs","sidebarTitle":"Choosing APIs","href":"/oss/javascript/langgraph/choosing-apis"},{"title":"Changelog","url":"https://docs.langchain.com/oss/javascript/releases/changelog","href":"/oss/javascript/langgraph/changelog-js"}]},{"group":"Capabilities","pages":[{"title":"Persistence","href":"/oss/javascript/langgraph/persistence"},{"title":"Fault tolerance","href":"/oss/javascript/langgraph/fault-tolerance"},{"title":"Checkpointers","href":"/oss/javascript/langgraph/checkpointers"},{"title":"Stores","href":"/oss/javascript/langgraph/stores"},{"title":"Event streaming","href":"/oss/javascript/langgraph/event-streaming"},{"title":"Streaming","href":"/oss/javascript/langgraph/streaming"},{"title":"Interrupts","href":"/oss/javascript/langgraph/interrupts"},{"title":"Use time-travel","sidebarTitle":"Time travel","href":"/oss/javascript/langgraph/use-time-travel"},{"title":"Memory","href":"/oss/javascript/langgraph/add-memory"},{"title":"Subgraphs","sidebarTitle":"Subgraphs","href":"/oss/javascript/langgraph/use-subgraphs"}]},{"group":"Patterns","pages":[{"title":"Workflows and agents","sidebarTitle":"Workflows + agents","href":"/oss/javascript/langgraph/workflows-agents"}]},{"group":"Build with the Graph API","pages":[{"title":"Thinking in the Graph API","sidebarTitle":"Thinking in the Graph API","href":"/oss/javascript/langgraph/thinking-in-graph-api"},{"title":"Build checklist for the Graph API","sidebarTitle":"Build checklist","href":"/oss/javascript/langgraph/use-graph-api"},{"title":"Graph API overview","sidebarTitle":"Graph API","href":"/oss/javascript/langgraph/graph-api"},{"title":"Define and update state","sidebarTitle":"Define and update state","href":"/oss/javascript/langgraph/graph-api-state"},{"title":"Build sequences, branches, and loops","sidebarTitle":"Control flow","href":"/oss/javascript/langgraph/graph-api-control-flow"},{"title":"Use Send and Command","sidebarTitle":"Send and Command","href":"/oss/javascript/langgraph/graph-api-send-command"},{"title":"Configure nodes","sidebarTitle":"Configure nodes","href":"/oss/javascript/langgraph/graph-api-nodes"},{"title":"Visualize your graph","sidebarTitle":"Visualize your graph","href":"/oss/javascript/langgraph/graph-api-visualize"}]},{"group":"Deployment","pages":[{"title":"Run a local server","sidebarTitle":"Local server","href":"/oss/javascript/langgraph/local-server"},{"title":"Application structure","href":"/oss/javascript/langgraph/application-structure"},{"title":"Test","href":"/oss/javascript/langgraph/test"},{"title":"Backward compatibility","href":"/oss/javascript/langgraph/backward-compatibility"},{"title":"LangSmith Studio","href":"/oss/javascript/langgraph/studio"},{"title":"Agent Chat UI","href":"/oss/javascript/langgraph/ui"},{"title":"Deployment","sidebarTitle":"Deployment","href":"/oss/javascript/langgraph/deploy"},{"title":"LangSmith Observability","href":"/oss/javascript/langgraph/observability"}]},{"group":"Frontend","pages":[{"title":"Overview","href":"/oss/javascript/langgraph/frontend/overview"},{"title":"Graph execution","href":"/oss/javascript/langgraph/frontend/graph-execution"},{"title":"Custom stream channels","href":"/oss/javascript/langgraph/frontend/custom-stream-channels"}]},{"group":"Advanced","pages":[{"group":"Build with the Functional API","pages":[{"title":"Thinking in the Functional API","sidebarTitle":"Thinking in the Functional API","href":"/oss/javascript/langgraph/thinking-in-functional-api"},{"title":"Build checklist for the Functional API","sidebarTitle":"Build checklist","href":"/oss/javascript/langgraph/use-functional-api"},{"title":"Functional API overview","sidebarTitle":"Functional API","href":"/oss/javascript/langgraph/functional-api"},{"title":"Compose Functional API workflows","sidebarTitle":"Workflows","href":"/oss/javascript/langgraph/functional-api-workflows"},{"title":"Configure Functional API tasks","sidebarTitle":"Tasks","href":"/oss/javascript/langgraph/functional-api-tasks"},{"title":"Stream with the Functional API","sidebarTitle":"Streaming","href":"/oss/javascript/langgraph/functional-api-streaming"},{"title":"Add human-in-the-loop with the Functional API","sidebarTitle":"Human-in-the-loop","href":"/oss/javascript/langgraph/functional-api-human-in-the-loop"},{"title":"Add memory with the Functional API","sidebarTitle":"Memory","href":"/oss/javascript/langgraph/functional-api-memory"}]},{"title":"LangGraph runtime","sidebarTitle":"Runtime","href":"/oss/javascript/langgraph/pregel"}]},{"title":"Studio","url":"https://docs.langchain.com/langsmith/studio","href":"/oss/javascript/studio"}]},{"tab":"OpenWiki","pages":[{"title":"OpenWiki","sidebarTitle":"Overview","mode":"wide","href":"/oss/openwiki/overview"},{"title":"Quickstart","sidebarTitle":"Quickstart","href":"/oss/openwiki/quickstart"},{"group":"Modes","pages":[{"title":"Code mode","sidebarTitle":"Code mode","href":"/oss/openwiki/code-mode"},{"title":"Personal mode","sidebarTitle":"Personal mode","href":"/oss/openwiki/personal-mode"}]},{"title":"Coding-agent integrations","sidebarTitle":"Integrations","href":"/oss/openwiki/integrations"},{"title":"Search and link wikis","sidebarTitle":"Search and link","href":"/oss/openwiki/search-and-link"},{"title":"Visualize your wiki","sidebarTitle":"Visualize","href":"/oss/openwiki/visualize"},{"title":"Command reference","sidebarTitle":"CLI reference","href":"/oss/openwiki/cli-reference"},{"title":"Customize OpenWiki","sidebarTitle":"Customize OpenWiki","href":"/oss/openwiki/customize"},{"title":"Model providers","sidebarTitle":"Providers","href":"/oss/openwiki/providers"},{"title":"Automate updates","sidebarTitle":"Automate updates","href":"/oss/openwiki/automate-updates"},{"title":"Changelog","url":"https://github.com/langchain-ai/openwiki/releases","href":"/oss/openwiki/changelog"}]},{"tab":"Integrations","pages":[{"title":"LangChain JavaScript integrations","sidebarTitle":"Overview","mode":"wide","href":"/oss/javascript/integrations/providers/overview"},{"title":"All LangChain JavaScript integration providers","sidebarTitle":"All providers","mode":"wide","href":"/oss/javascript/integrations/providers/all_providers"},{"group":"Popular Providers","icon":"users-group","pages":[{"group":"OpenAI","pages":[{"title":"OpenAI integrations","sidebarTitle":"Overview","href":"/oss/javascript/integrations/providers/openai"},{"title":"ChatOpenAI integration","sidebarTitle":"Chat","href":"/oss/javascript/integrations/chat/openai"},{"title":"OpenAIEmbeddings integration","sidebarTitle":"Embeddings","href":"/oss/javascript/integrations/embeddings/openai"},{"title":"OpenAI integration","sidebarTitle":"Tools","href":"/oss/javascript/integrations/tools/openai"}]},{"group":"Anthropic","pages":[{"title":"Anthropic integrations","sidebarTitle":"Overview","href":"/oss/javascript/integrations/providers/anthropic"},{"title":"ChatAnthropic integration","sidebarTitle":"Chat","href":"/oss/javascript/integrations/chat/anthropic"},{"title":"Anthropic integration","sidebarTitle":"Tools","href":"/oss/javascript/integrations/tools/anthropic"}]},{"group":"Google","pages":[{"title":"Google integrations","sidebarTitle":"Overview","href":"/oss/javascript/integrations/providers/google"},{"title":"ChatGoogle integration","sidebarTitle":"Chat","href":"/oss/javascript/integrations/chat/google"},{"title":"Google integration","sidebarTitle":"Tools","href":"/oss/javascript/integrations/tools/google"},{"title":"ChatGoogleGenerativeAI integration","sidebarTitle":"ChatGoogleGenerativeAI (Legacy)","href":"/oss/javascript/integrations/chat/google_generative_ai"},{"title":"ChatVertexAI integration","sidebarTitle":"ChatVertexAI (Legacy)","href":"/oss/javascript/integrations/chat/google_vertex_ai"}]},{"group":"AWS","pages":[{"title":"AWS integrations","sidebarTitle":"Overview","href":"/oss/javascript/integrations/providers/aws"},{"title":"ChatBedrockConverse integration","href":"/oss/javascript/integrations/chat/bedrock_converse"},{"title":"BedrockEmbeddings integration","sidebarTitle":"Embeddings","href":"/oss/javascript/integrations/embeddings/bedrock"}]},{"group":"Microsoft","pages":[{"title":"Microsoft integrations","sidebarTitle":"Overview","href":"/oss/javascript/integrations/providers/microsoft"},{"title":"AzureChatOpenAI integration","sidebarTitle":"Chat","href":"/oss/javascript/integrations/chat/azure"},{"title":"AzureOpenAIEmbeddings integration","sidebarTitle":"Embeddings","href":"/oss/javascript/integrations/embeddings/azure_openai"}]}]},{"group":"General integrations","icon":"plug","pages":[{"title":"Chat model integrations","sidebarTitle":"Chat models","href":"/oss/javascript/integrations/chat/index"},{"title":"Tool integrations","sidebarTitle":"Tools and Toolkits","href":"/oss/javascript/integrations/tools/index"},{"title":"LLM integrations","sidebarTitle":"LLMs","href":"/oss/javascript/integrations/llms/index"},{"title":"Middleware integrations","sidebarTitle":"Middleware","href":"/oss/javascript/integrations/middleware/index"},{"title":"Sandbox integrations","sidebarTitle":"Sandboxes","href":"/oss/javascript/integrations/sandboxes/index"},{"title":"Backend integrations","sidebarTitle":"Backends","href":"/oss/javascript/integrations/backends/index"},{"title":"Store integrations","sidebarTitle":"Key-value stores","href":"/oss/javascript/integrations/stores/index"},{"title":"Store integrations","sidebarTitle":"Stores","href":"/oss/javascript/integrations/long-term-memory/index"},{"title":"Document transformer integrations","sidebarTitle":"Document transformers","href":"/oss/javascript/integrations/document_transformers/index"},{"title":"Cache integrations","sidebarTitle":"Model caches","href":"/oss/javascript/integrations/llm_caching/index"}]},{"group":"RAG integrations","icon":"database","pages":[{"title":"Retriever integrations","sidebarTitle":"Retrievers","href":"/oss/javascript/integrations/retrievers/index"},{"title":"Text splitter integrations","sidebarTitle":"Text splitters","href":"/oss/javascript/integrations/splitters/index"},{"title":"Embedding model integrations","sidebarTitle":"Embedding models","href":"/oss/javascript/integrations/embeddings/index"},{"title":"Vector store integrations","sidebarTitle":"Vector stores","href":"/oss/javascript/integrations/vectorstores/index"},{"title":"Document loader integrations","sidebarTitle":"Document loaders","href":"/oss/javascript/integrations/document_loaders/index"},{"title":"Store integrations","sidebarTitle":"Key-value stores","href":"/oss/javascript/integrations/stores/index"}]}]},{"tab":"Learn","pages":[{"title":"Learn","href":"/oss/javascript/learn"},{"group":"Tutorials","icon":"code","pages":[{"group":"Deep Agents","expanded":true,"pages":[{"title":"Build a deep research agent","sidebarTitle":"Deep Research","href":"/oss/javascript/deepagents/deep-research"},{"title":"Build a content builder agent","sidebarTitle":"Content Builder","href":"/oss/javascript/deepagents/content-builder"},{"title":"Retrieval Augmented Generation (RAG) with Deep Agents","sidebarTitle":"RAG","href":"/oss/javascript/deepagents/rag"}]},{"group":"LangChain","expanded":true,"pages":[{"title":"Build a data analysis agent from scratch","sidebarTitle":"Deep Agent","href":"/oss/javascript/langchain/deep-agent-from-scratch"},{"title":"Build a semantic search engine with LangChain","sidebarTitle":"Semantic search","href":"/oss/javascript/langchain/knowledge-base"},{"title":"Build a SQL agent","sidebarTitle":"SQL agent","href":"/oss/javascript/langchain/sql-agent"},{"title":"Build a voice agent with LangChain","sidebarTitle":"Voice agent","href":"/oss/javascript/langchain/voice-agent"}]},{"group":"Multi-agent","expanded":true,"pages":[{"title":"Build a personal assistant with subagents","sidebarTitle":"Subagents: Personal assistant","href":"/oss/javascript/langchain/multi-agent/subagents-personal-assistant"},{"title":"Build customer support with handoffs","sidebarTitle":"Handoffs: Customer support","href":"/oss/javascript/langchain/multi-agent/handoffs-customer-support"},{"title":"Build a multi-source knowledge base with routing","sidebarTitle":"Router: Knowledge base","href":"/oss/javascript/langchain/multi-agent/router-knowledge-base"},{"title":"Build a SQL assistant with on-demand skills","sidebarTitle":"Skills: SQL assistant","href":"/oss/javascript/langchain/multi-agent/skills-sql-assistant"}]},{"group":"LangGraph","expanded":true,"pages":[{"title":"Build a custom RAG agent with LangGraph","sidebarTitle":"Custom RAG agent","href":"/oss/javascript/langgraph/agentic-rag"},{"title":"Build a custom SQL agent","sidebarTitle":"Custom SQL agent","href":"/oss/javascript/langgraph/sql-agent"}]}]},{"group":"Conceptual overviews","icon":"book","pages":[{"title":"Runtimes, frameworks, and harnesses","sidebarTitle":"LangChain vs. LangGraph vs. Deep Agents","href":"/oss/javascript/concepts/products"},{"title":"Providers and models","href":"/oss/javascript/concepts/providers-and-models"},{"title":"Component architecture","href":"/oss/javascript/langchain/component-architecture"},{"title":"Memory overview","sidebarTitle":"Memory","href":"/oss/javascript/concepts/memory"},{"title":"Context overview","sidebarTitle":"Context","href":"/oss/javascript/concepts/context"},{"title":"Human-in-the-loop overview","sidebarTitle":"Human-in-the-loop","href":"/oss/javascript/concepts/human-in-the-loop"},{"title":"Graph API overview","sidebarTitle":"Graph API","href":"/oss/javascript/langgraph/graph-api"},{"title":"Functional API overview","sidebarTitle":"Functional API","href":"/oss/javascript/langgraph/functional-api"}]},{"group":"LangChain Academy","icon":"school","pages":[{"title":"LangChain Academy","url":"https://academy.langchain.com/","href":"/oss/javascript/langchain/academy"}]},{"group":"Additional resources","icon":"list","pages":[{"title":"Use docs programmatically","href":"/use-these-docs"},{"title":"Case studies","href":"/oss/javascript/langgraph/case-studies"},{"title":"Get help","href":"/oss/javascript/langchain/get-help"}]}]},{"tab":"Reference","pages":[{"title":"Reference","sidebarTitle":"Overview","href":"/oss/javascript/reference/overview"},{"group":"Reference","pages":[{"title":"Deep Agents","url":"https://reference.langchain.com/javascript/deepagents","href":"/oss/javascript/reference/deepagents-javascript"},{"title":"LangChain SDK","url":"https://reference.langchain.com/javascript/langchain","href":"/oss/javascript/reference/langchain-javascript"},{"title":"LangGraph SDK","url":"https://reference.langchain.com/javascript/langchain-langgraph","href":"/oss/javascript/reference/langgraph-javascript"},{"title":"Integrations","url":"https://reference.langchain.com/javascript/integrations/overview","href":"/oss/javascript/reference/integrations-javascript"},{"title":"Errors","sidebarTitle":"Errors","href":"/oss/javascript/common-errors"}]},{"group":"Releases","pages":[{"title":"Versioning","href":"/oss/javascript/versioning"},{"title":"Changelog","sidebarTitle":"Changelog","href":"/oss/javascript/releases/changelog"},{"group":"Releases","boost":0.5,"pages":[{"title":"What's new in LangChain v1","sidebarTitle":"LangChain v1","href":"/oss/javascript/releases/langchain-v1"},{"title":"What's new in LangGraph v1","sidebarTitle":"LangGraph v1","href":"/oss/javascript/releases/langgraph-v1"}]},{"group":"Migration guides","boost":0.5,"pages":[{"title":"LangChain v1 migration guide","sidebarTitle":"LangChain v1","href":"/oss/javascript/migrate/langchain-v1"},{"title":"LangGraph v1 migration guide","sidebarTitle":"LangGraph v1","href":"/oss/javascript/migrate/langgraph-v1"},{"title":"Migrate to @langchain/mcp-adapters 2.0","sidebarTitle":"MCP adapters v2","href":"/oss/javascript/migrate/langchain-mcp-adapters"}]}]},{"group":"Policies","pages":[{"title":"Release policy","href":"/oss/javascript/release-policy"},{"title":"Security policy","sidebarTitle":"Security","href":"/oss/javascript/security-policy"}]}]},{"tab":"Contribute","pages":[{"title":"Contributing","sidebarTitle":"Overview","href":"/oss/javascript/contributing/overview"},{"group":"Contribute","boost":0.5,"icon":"heart-plus","pages":[{"title":"Contributing to documentation","sidebarTitle":"Documentation","href":"/oss/javascript/contributing/documentation"},{"title":"Contributing to code","sidebarTitle":"Code","href":"/oss/javascript/contributing/code"},{"group":"Integrations","pages":[{"title":"Contributing integrations","sidebarTitle":"Guide","href":"/oss/javascript/contributing/integrations-langchain"},{"title":"Implement a LangChain integration","sidebarTitle":"Implement","href":"/oss/javascript/contributing/implement-langchain"},{"title":"Using standard tests","sidebarTitle":"Standard tests","href":"/oss/javascript/contributing/standard-tests-langchain"},{"title":"Publish an integration","sidebarTitle":"Publish","href":"/oss/javascript/contributing/publish-langchain"},{"title":"Co-marketing","href":"/oss/javascript/contributing/comarketing"}]}]}]}]}]},{"item":"Test","icon":"flask","description":"Evaluate and refine agents","tabs":[{"tab":"Get started","pages":[{"title":"LangSmith Evaluation","sidebarTitle":"Overview","mode":"wide","href":"/langsmith/evaluation"},{"title":"Evaluation quickstart","sidebarTitle":"Quickstart","href":"/langsmith/evaluation-quickstart"},{"title":"Evaluation concepts","sidebarTitle":"Concepts","href":"/langsmith/evaluation-concepts"},{"title":"Application-specific evaluation approaches","sidebarTitle":"Evaluation approaches","href":"/langsmith/evaluation-approaches"}]},{"tab":"Datasets \u0026 Experiments","pages":[{"group":"Datasets","pages":[{"group":"Create a dataset","pages":[{"title":"Create and manage datasets in the UI","sidebarTitle":"With the UI","icon":"browser","href":"/langsmith/manage-datasets-in-application"},{"title":"How to create and manage datasets programmatically","sidebarTitle":"With the SDK","href":"/langsmith/manage-datasets-programmatically"}]},{"title":"Manage datasets","sidebarTitle":"Manage datasets","href":"/langsmith/manage-datasets"},{"title":"Custom output rendering","sidebarTitle":"Custom output rendering","href":"/langsmith/custom-output-rendering"}]},{"group":"Run an evaluation","pages":[{"title":"How to evaluate agents","sidebarTitle":"With the SDK","href":"/langsmith/evaluate-llm-application"},{"title":"How to evaluate with OpenTelemetry","sidebarTitle":"With OpenTelemetry","href":"/langsmith/evaluate-with-opentelemetry"},{"title":"Run an evaluation with the UI","sidebarTitle":"With the UI","url":"/langsmith/run-evaluation-from-playground","href":"/langsmith/playground-link"},{"title":"How to use the REST API","sidebarTitle":"With the API","href":"/langsmith/run-evals-api-only"}]},{"group":"Evaluation techniques","pages":[{"group":"Define evaluation target","pages":[{"title":"How to define a target function to evaluate","sidebarTitle":"Define a target function to evaluate","href":"/langsmith/define-target-function"},{"title":"How to evaluate an application's intermediate steps","sidebarTitle":"Evaluate intermediate steps","href":"/langsmith/evaluate-on-intermediate-steps"},{"title":"How to evaluate a runnable","sidebarTitle":"Evaluate a runnable","href":"/langsmith/langchain-runnable"},{"title":"How to evaluate a graph","sidebarTitle":"Evaluate a graph","href":"/langsmith/evaluate-graph"},{"title":"How to simulate multi-turn interactions","sidebarTitle":"Simulate multi-turn interactions","href":"/langsmith/multi-turn-simulation"},{"title":"How to evaluate your agent with trajectory evaluations","sidebarTitle":"Evaluate agent trajectories","href":"/langsmith/trajectory-evals"}]},{"group":"Scoring methods","pages":[{"title":"How to return multiple scores in one evaluator","sidebarTitle":"Return multiple scores in one evaluator","href":"/langsmith/multiple-scores"},{"title":"How to return categorical vs numerical metrics","sidebarTitle":"Return categorical vs numerical metrics","href":"/langsmith/metric-type"}]},{"group":"Experiment configuration","pages":[{"title":"Experiment configuration","sidebarTitle":"Experiment configuration","href":"/langsmith/experiment-configuration"},{"title":"How to run an evaluation asynchronously","sidebarTitle":"Run an evaluation asynchronously","href":"/langsmith/evaluation-async"},{"title":"How to evaluate with repetitions","sidebarTitle":"Evaluate with repetitions","href":"/langsmith/repetition"},{"title":"How to handle model rate limits","sidebarTitle":"Handle model rate limits","href":"/langsmith/handle-model-rate-limiting"},{"title":"Automatically run evaluators on experiments","sidebarTitle":"Run evaluators on experiments","url":"/langsmith/bind-evaluator-to-dataset","href":"/langsmith/bind-evaluator-to-dataset-link"},{"title":"How to add evaluators to an existing experiment (Python only)","sidebarTitle":"Evaluate an existing experiment (Python)","href":"/langsmith/evaluate-existing-experiment"},{"title":"How to run an evaluation locally (Python only)","sidebarTitle":"Run an evaluation locally (Python)","href":"/langsmith/local"},{"title":"How to read experiment results locally","sidebarTitle":"Read experiment results locally","href":"/langsmith/read-local-experiment-results"},{"title":"How to retry failed runs in experiments (Python only)","sidebarTitle":"Retry on failed experiment runs (Python)","href":"/langsmith/evaluate-with-retry"}]},{"group":"Multimodal evaluations","pages":[{"title":"Run an evaluation with multimodal content","sidebarTitle":"Run an evaluation with multimodal content","href":"/langsmith/evaluate-with-attachments"}]}]},{"group":"Analyze experiment results","pages":[{"title":"Analyze an experiment","sidebarTitle":"Analyze an experiment","href":"/langsmith/analyze-an-experiment"},{"title":"LangSmith Chat","sidebarTitle":"Analyze with Chat","url":"/langsmith/chat#evaluation","href":"/langsmith/chat-evaluation"},{"title":"How to compare experiment results","sidebarTitle":"Compare experiment results","href":"/langsmith/compare-experiment-results"},{"title":"How to filter experiments in the UI","sidebarTitle":"Filter experiments in the UI","href":"/langsmith/filter-experiments-ui"},{"title":"How to fetch performance metrics for an experiment","sidebarTitle":"Fetch performance metrics for an experiment","href":"/langsmith/fetch-perf-metrics-experiment"},{"title":"How to upload experiments run outside of LangSmith with the REST API","sidebarTitle":"Upload experiments run outside of LangSmith","href":"/langsmith/upload-existing-experiments"}]},{"group":"Fine-tuning","pages":[{"title":"Fine-tune models with Smithtune","sidebarTitle":"Fine-tune models","tag":"Beta","href":"/langsmith/smithtune"}]},{"group":"Tutorials","pages":[{"title":"Evaluate a chatbot","sidebarTitle":"Evaluate a chatbot","href":"/langsmith/evaluate-chatbot-tutorial"},{"title":"Evaluate a RAG application","sidebarTitle":"Evaluate a RAG application","href":"/langsmith/evaluate-rag-tutorial"},{"title":"Test a ReAct agent with Pytest/Vitest and LangSmith","sidebarTitle":"Test a ReAct agent with Pytest/Vitest and LangSmith","href":"/langsmith/test-react-agent-pytest"},{"title":"Evaluate a complex agent","sidebarTitle":"Evaluate a complex agent","href":"/langsmith/evaluate-complex-agent"},{"title":"Run backtests on a new version of an agent","sidebarTitle":"Run backtests on a new version of an agent","href":"/langsmith/run-backtests-new-agent"}]},{"group":"Common data types","pages":[{"title":"Example data format","sidebarTitle":"Example data format","href":"/langsmith/example-data-format"},{"title":"Dataset prebuilt JSON schema types","sidebarTitle":"Dataset prebuilt JSON schema types","href":"/langsmith/dataset-json-types"},{"title":"Dataset transformations","sidebarTitle":"Dataset transformations","href":"/langsmith/dataset-transformations"}]}]},{"tab":"Evaluators","pages":[{"title":"Evaluation types","sidebarTitle":"Overview","href":"/langsmith/evaluation-types"},{"title":"Manage evaluators","sidebarTitle":"Manage evaluators","href":"/langsmith/evaluators"},{"title":"Manage evaluators with the SDK","sidebarTitle":"Manage evaluators programmatically","icon":"code","tag":"SDK","href":"/langsmith/manage-evaluators-sdk"},{"title":"Automatically run evaluators on experiments","sidebarTitle":"Run evaluators on experiments","href":"/langsmith/bind-evaluator-to-dataset"},{"title":"Track and limit evaluator spend","sidebarTitle":"Evaluator spend","href":"/langsmith/evaluator-spend"},{"group":"Evaluator types","pages":[{"group":"UI","pages":[{"title":"How to define an LLM-as-a-judge evaluator","sidebarTitle":"LLM-as-a-judge","href":"/langsmith/llm-as-judge"},{"title":"How to define a decision model evaluator","sidebarTitle":"Decision model","href":"/langsmith/decision-model-evaluator"},{"title":"How to define a code evaluator","sidebarTitle":"Code evaluator","href":"/langsmith/code-evaluator-ui"},{"title":"How to create a composite evaluator","sidebarTitle":"Composite evaluators","href":"/langsmith/composite-evaluators-ui"}]},{"group":"SDK","pages":[{"title":"How to define an LLM-as-a-judge evaluator","sidebarTitle":"LLM-as-a-judge","href":"/langsmith/llm-as-judge-sdk"},{"title":"How to define a code evaluator","sidebarTitle":"Code evaluator","href":"/langsmith/code-evaluator-sdk"},{"title":"How to create a composite evaluator","sidebarTitle":"Composite evaluators","href":"/langsmith/composite-evaluators-sdk"},{"title":"How to define a summary evaluator","sidebarTitle":"Summary evaluator","href":"/langsmith/summary"},{"title":"How to run a pairwise evaluation","sidebarTitle":"Pairwise evaluation","href":"/langsmith/evaluate-pairwise"}]}]},{"group":"Frameworks \u0026 integrations","pages":[{"title":"Run evals with openevals package","sidebarTitle":"Run evals with openevals package","href":"/langsmith/openevals"},{"title":"How to run evaluations with pytest","sidebarTitle":"Run evals with pytest","href":"/langsmith/pytest"},{"title":"How to run evaluations with Vitest/Jest","sidebarTitle":"Run evals with Vitest/Jest","href":"/langsmith/vitest-jest"},{"title":"Harbor integrations","href":"/langsmith/harbor-integrations"}]},{"group":"Improve evaluators","pages":[{"title":"Improve LLM-as-judge evaluators using human feedback","sidebarTitle":"Improve LLM-as-judge evaluators using human feedback","href":"/langsmith/improve-judge-evaluator-feedback"},{"title":"How to improve your evaluator with few-shot examples","sidebarTitle":"Improve your evaluator with few-shot examples","href":"/langsmith/create-few-shot-evaluators"},{"title":"How to audit evaluator scores","sidebarTitle":"Audit evaluator scores","href":"/langsmith/audit-evaluator-scores"}]}]},{"tab":"Annotation Queues","pages":[{"title":"Use annotation queues","sidebarTitle":"Use annotation queues","href":"/langsmith/annotation-queues"},{"title":"Build custom views for annotation queues","sidebarTitle":"Build custom views","href":"/langsmith/annotation-queue-custom-views"},{"title":"Manage feedback \u0026 annotation queues programmatically","sidebarTitle":"Manage feedback \u0026 annotation queues","tag":"SDK","href":"/langsmith/annotation-queues-sdk"},{"title":"Use assertions","sidebarTitle":"Use assertions","href":"/langsmith/assertions"},{"title":"Set up feedback criteria","sidebarTitle":"Set up feedback criteria","href":"/langsmith/set-up-feedback-criteria"},{"title":"Annotate traces and runs inline","sidebarTitle":"Annotate traces and runs inline","href":"/langsmith/annotate-traces-inline"},{"group":"Feedback","pages":[{"title":"Log user feedback using the SDK","sidebarTitle":"Log user feedback using the SDK","href":"/langsmith/attach-user-feedback"},{"title":"Collect feedback with presigned URLs","sidebarTitle":"Collect feedback with presigned URLs","href":"/langsmith/presigned-feedback-tokens"}]}]},{"tab":"Test from Playground","pages":[{"title":"Test from the Playground","sidebarTitle":"Overview","href":"/langsmith/test-from-playground"},{"title":"Run an evaluation from the Playground","sidebarTitle":"Run an evaluation","href":"/langsmith/run-evaluation-from-playground"}]},{"tab":"Test from Studio","pages":[{"title":"LangSmith Studio","sidebarTitle":"Overview","href":"/langsmith/studio"},{"title":"Get started with Studio","sidebarTitle":"Quickstart","href":"/langsmith/quick-start-studio"},{"title":"How to use Studio","sidebarTitle":"Runs, assistants, threads","href":"/langsmith/use-studio"},{"title":"Observability in Studio","sidebarTitle":"Traces, datasets, prompts","href":"/langsmith/observability-studio"},{"title":"Studio troubleshooting","sidebarTitle":"Troubleshooting","href":"/langsmith/troubleshooting-studio"}]}]},{"item":"Deploy","icon":"rocket","description":"Ship agents to production","tabs":[{"tab":"Get started","pages":[{"title":"LangSmith Deployment","sidebarTitle":"Overview","mode":"wide","href":"/langsmith/deployment"},{"title":"Deploy your app to cloud","sidebarTitle":"Quickstart","icon":"rocket","href":"/langsmith/deployment-quickstart"},{"group":"Deployment components","pages":[{"title":"LangSmith Deployment components","sidebarTitle":"Overview","mode":"wide","href":"/langsmith/components"},{"title":"LangSmith data plane","sidebarTitle":"Data plane","href":"/langsmith/data-plane"},{"title":"LangSmith control plane","sidebarTitle":"Control plane","href":"/langsmith/control-plane"}]},{"group":"Develop \u0026 test","pages":[{"title":"Local development \u0026 testing","icon":"device-laptop","href":"/langsmith/local-dev-testing"},{"title":"Studio","url":"https://docs.langchain.com/langsmith/studio","href":"/langsmith/studio-deploy"}]},{"group":"Frameworks and platforms","pages":[{"title":"Deploy Google ADK agents","sidebarTitle":"Deploy Google ADK","href":"/langsmith/deploy-google-adk"},{"title":"Deploy other frameworks","sidebarTitle":"Claude SDK, Strands, \u0026 more","href":"/langsmith/deploy-other-frameworks"},{"group":"Full-stack web apps","pages":[{"title":"Deploy full-stack web apps","sidebarTitle":"Overview","mode":"wide","href":"/langsmith/deploy-frameworks-and-platforms"},{"title":"Deploy with LangSmith and Vite","sidebarTitle":"LangSmith + Vite","href":"/langsmith/deploy-vite-langsmith"},{"title":"Deploy with Next.js","sidebarTitle":"Next.js","href":"/langsmith/deploy-nextjs"},{"title":"Deploy with SvelteKit","sidebarTitle":"SvelteKit","href":"/langsmith/deploy-sveltekit"},{"title":"Deploy with Nuxt","sidebarTitle":"Nuxt","href":"/langsmith/deploy-nuxt"},{"title":"Deploy with Cloudflare Workers","sidebarTitle":"Cloudflare Workers","href":"/langsmith/deploy-cloudflare-workers"},{"title":"Deploy with Deno Deploy","sidebarTitle":"Deno Deploy","href":"/langsmith/deploy-deno"}]}]},{"group":"Reference","pages":[{"title":"Reference","sidebarTitle":"Overview","mode":"wide","href":"/langsmith/deploy-reference-overview"},{"title":"LangSmith Deployment SDK","url":"https://reference.langchain.com/python/langsmith/deployment/sdk/","href":"/langsmith/smith-deployments-sdk"},{"title":"LangGraph CLI","sidebarTitle":"LangGraph CLI","href":"/langsmith/cli"},{"title":"RemoteGraph","sidebarTitle":"RemoteGraph","url":"https://reference.langchain.com/python/langsmith/deployment/remote_graph/","href":"/langsmith/remote-graph"},{"group":"Agent Server API","boost":0.3,"pages":[{"title":"Agent Server API reference for LangSmith Deployment","sidebarTitle":"Overview","href":"/langsmith/server-api-ref"},{"group":"Assistants","pages":[{"title":"Create Assistant","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /assistants","href":"/langsmith/agent-server-api/assistants/create-assistant"},{"title":"Search Assistants","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /assistants/search","href":"/langsmith/agent-server-api/assistants/search-assistants"},{"title":"Count Assistants","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /assistants/count","href":"/langsmith/agent-server-api/assistants/count-assistants"},{"title":"Get Assistant","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /assistants/{assistant_id}","href":"/langsmith/agent-server-api/assistants/get-assistant"},{"title":"Delete Assistant","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json delete /assistants/{assistant_id}","href":"/langsmith/agent-server-api/assistants/delete-assistant"},{"title":"Patch Assistant","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json patch /assistants/{assistant_id}","href":"/langsmith/agent-server-api/assistants/patch-assistant"},{"title":"Get Assistant Graph","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /assistants/{assistant_id}/graph","href":"/langsmith/agent-server-api/assistants/get-assistant-graph"},{"title":"Get Assistant Subgraphs","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /assistants/{assistant_id}/subgraphs","href":"/langsmith/agent-server-api/assistants/get-assistant-subgraphs"},{"title":"Get Assistant Subgraphs by Namespace","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /assistants/{assistant_id}/subgraphs/{namespace}","href":"/langsmith/agent-server-api/assistants/get-assistant-subgraphs-by-namespace"},{"title":"Get Assistant Schemas","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /assistants/{assistant_id}/schemas","href":"/langsmith/agent-server-api/assistants/get-assistant-schemas"},{"title":"Get Assistant Versions","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /assistants/{assistant_id}/versions","href":"/langsmith/agent-server-api/assistants/get-assistant-versions"},{"title":"Set Latest Assistant Version","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /assistants/{assistant_id}/latest","href":"/langsmith/agent-server-api/assistants/set-latest-assistant-version"}]},{"group":"Threads","pages":[{"title":"Create Thread","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /threads","href":"/langsmith/agent-server-api/threads/create-thread"},{"title":"Search Threads","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /threads/search","href":"/langsmith/agent-server-api/threads/search-threads"},{"title":"Count Threads","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /threads/count","href":"/langsmith/agent-server-api/threads/count-threads"},{"title":"Prune Threads","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /threads/prune","href":"/langsmith/agent-server-api/threads/prune-threads"},{"title":"Get Thread Storage","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /threads/{thread_id}/storage","href":"/langsmith/agent-server-api/threads/get-thread-storage"},{"title":"Get Thread State","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /threads/{thread_id}/state","href":"/langsmith/agent-server-api/threads/get-thread-state"},{"title":"Update Thread State","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /threads/{thread_id}/state","href":"/langsmith/agent-server-api/threads/update-thread-state"},{"title":"Get Thread State At Checkpoint","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /threads/{thread_id}/state/{checkpoint_id}","href":"/langsmith/agent-server-api/threads/get-thread-state-at-checkpoint"},{"title":"Get Thread State At Checkpoint","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /threads/{thread_id}/state/checkpoint","href":"/langsmith/agent-server-api/threads/get-thread-state-at-checkpoint-1"},{"title":"Get Thread History","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /threads/{thread_id}/history","href":"/langsmith/agent-server-api/threads/get-thread-history"},{"title":"Get Thread History Post","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /threads/{thread_id}/history","href":"/langsmith/agent-server-api/threads/get-thread-history-post"},{"title":"Copy Thread","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /threads/{thread_id}/copy","href":"/langsmith/agent-server-api/threads/copy-thread"},{"title":"Get Thread","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /threads/{thread_id}","href":"/langsmith/agent-server-api/threads/get-thread"},{"title":"Delete Thread","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json delete /threads/{thread_id}","href":"/langsmith/agent-server-api/threads/delete-thread"},{"title":"Patch Thread","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json patch /threads/{thread_id}","href":"/langsmith/agent-server-api/threads/patch-thread"},{"title":"Join Thread Stream","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /threads/{thread_id}/stream","href":"/langsmith/agent-server-api/threads/join-thread-stream"}]},{"group":"Streaming","pages":[{"title":"Protocol v2 Event Stream (SSE)","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /threads/{thread_id}/stream/events","href":"/langsmith/agent-server-api/streaming/protocol-v2-event-stream-sse"},{"title":"Protocol v2 Command","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /threads/{thread_id}/commands","href":"/langsmith/agent-server-api/streaming/protocol-v2-command"}]},{"group":"Thread Runs","pages":[{"title":"List Runs","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /threads/{thread_id}/runs","href":"/langsmith/agent-server-api/thread-runs/list-runs"},{"title":"Create Background Run","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /threads/{thread_id}/runs","href":"/langsmith/agent-server-api/thread-runs/create-background-run"},{"title":"Create Run, Stream Output","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /threads/{thread_id}/runs/stream","href":"/langsmith/agent-server-api/thread-runs/create-run-stream-output"},{"title":"Create Run, Wait for Output","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /threads/{thread_id}/runs/wait","href":"/langsmith/agent-server-api/thread-runs/create-run-wait-for-output"},{"title":"Get Run","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /threads/{thread_id}/runs/{run_id}","href":"/langsmith/agent-server-api/thread-runs/get-run"},{"title":"Delete Run","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json delete /threads/{thread_id}/runs/{run_id}","href":"/langsmith/agent-server-api/thread-runs/delete-run"},{"title":"Join Run","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /threads/{thread_id}/runs/{run_id}/join","href":"/langsmith/agent-server-api/thread-runs/join-run"},{"title":"Join Run Stream","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /threads/{thread_id}/runs/{run_id}/stream","href":"/langsmith/agent-server-api/thread-runs/join-run-stream"},{"title":"Cancel Run","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /threads/{thread_id}/runs/{run_id}/cancel","href":"/langsmith/agent-server-api/thread-runs/cancel-run"},{"title":"Cancel Runs","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /runs/cancel","href":"/langsmith/agent-server-api/thread-runs/cancel-runs"}]},{"group":"Crons","pages":[{"title":"Create Thread Cron","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /threads/{thread_id}/runs/crons","href":"/langsmith/agent-server-api/crons/create-thread-cron"},{"title":"Create Cron","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /runs/crons","href":"/langsmith/agent-server-api/crons/create-cron"},{"title":"Search Crons","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /runs/crons/search","href":"/langsmith/agent-server-api/crons/search-crons"},{"title":"Count Crons","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /runs/crons/count","href":"/langsmith/agent-server-api/crons/count-crons"},{"title":"Get Cron","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /runs/crons/{cron_id}","href":"/langsmith/agent-server-api/crons/get-cron"},{"title":"Delete Cron","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json delete /runs/crons/{cron_id}","href":"/langsmith/agent-server-api/crons/delete-cron"},{"title":"Update Cron","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json patch /runs/crons/{cron_id}","href":"/langsmith/agent-server-api/crons/update-cron"}]},{"group":"Stateless Runs","pages":[{"title":"Create Run, Stream Output","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /runs/stream","href":"/langsmith/agent-server-api/stateless-runs/create-run-stream-output"},{"title":"Create Run, Wait for Output","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /runs/wait","href":"/langsmith/agent-server-api/stateless-runs/create-run-wait-for-output"},{"title":"Create Background Run","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /runs","href":"/langsmith/agent-server-api/stateless-runs/create-background-run"},{"title":"Create Run Batch","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /runs/batch","href":"/langsmith/agent-server-api/stateless-runs/create-run-batch"}]},{"group":"Store","pages":[{"title":"Retrieve a single item.","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /store/items","href":"/langsmith/agent-server-api/store/retrieve-a-single-item"},{"title":"Store or update an item.","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json put /store/items","href":"/langsmith/agent-server-api/store/store-or-update-an-item"},{"title":"Delete an item.","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json delete /store/items","href":"/langsmith/agent-server-api/store/delete-an-item"},{"title":"Search or list items within a namespace prefix.","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /store/items/search","href":"/langsmith/agent-server-api/store/search-or-list-items-within-a-namespace-prefix"},{"title":"List namespaces with optional match conditions.","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /store/namespaces","href":"/langsmith/agent-server-api/store/list-namespaces-with-optional-match-conditions"}]},{"group":"A2A","pages":[{"title":"A2A JSON-RPC","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /a2a/{assistant_id}","href":"/langsmith/agent-server-api/a2a/a2a-json-rpc"}]},{"group":"MCP","pages":[{"title":"MCP Get","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /mcp/","href":"/langsmith/agent-server-api/mcp/mcp-get"},{"title":"MCP Post","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json post /mcp/","href":"/langsmith/agent-server-api/mcp/mcp-post"},{"title":"Terminate Session","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json delete /mcp/","href":"/langsmith/agent-server-api/mcp/terminate-session"}]},{"group":"System","pages":[{"title":"Server Information","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /info","href":"/langsmith/agent-server-api/system/server-information"},{"title":"System Metrics","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /metrics","href":"/langsmith/agent-server-api/system/system-metrics"},{"title":"API Documentation","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /docs","href":"/langsmith/agent-server-api/system/api-documentation"},{"title":"Health Check","deprecated":null,"version":null,"openapi":"/langsmith/agent-server-openapi.json get /ok","href":"/langsmith/agent-server-api/system/health-check"}]}]},{"group":"Control Plane API","boost":0.3,"pages":[{"title":"Control plane API reference for LangSmith Deployment","sidebarTitle":"Overview","href":"/langsmith/api-ref-control-plane"},{"group":"Integrations (v1)","pages":[{"title":"List GitHub Integrations","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v1/integrations/github/install","href":"/api-reference/integrations-v1/list-github-integrations"},{"title":"List GitHub Repositories","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v1/integrations/github/{integration_id}/repos","href":"/api-reference/integrations-v1/list-github-repositories"},{"title":"List Forge GitHub Integrations","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v1/integrations/forge/github/install","href":"/api-reference/integrations-v1/list-forge-github-integrations"},{"title":"List Forge GitHub Repositories","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v1/integrations/forge/github/{integration_id}/repos","href":"/api-reference/integrations-v1/list-forge-github-repositories"}]},{"group":"Deployments (v2)","pages":[{"title":"List Deployments","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/deployments","href":"/api-reference/deployments-v2/list-deployments"},{"title":"Create Deployment","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json post /v2/deployments","href":"/api-reference/deployments-v2/create-deployment"},{"title":"Delete Deployments","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json delete /v2/deployments","href":"/api-reference/deployments-v2/delete-deployments"},{"title":"Get Free Deployment Count","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/deployments/free-count","href":"/api-reference/deployments-v2/get-free-deployment-count"},{"title":"Get Deployment","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/deployments/{deployment_id}","href":"/api-reference/deployments-v2/get-deployment"},{"title":"Delete Deployment","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json delete /v2/deployments/{deployment_id}","href":"/api-reference/deployments-v2/delete-deployment"},{"title":"Patch Deployment","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json patch /v2/deployments/{deployment_id}","href":"/api-reference/deployments-v2/patch-deployment"},{"title":"Patch Deployment Tier","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json patch /v2/deployments/{deployment_id}/deployment-tier","href":"/api-reference/deployments-v2/patch-deployment-tier"},{"title":"Patch Deployment Resource Tiers","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json patch /v2/deployments/{deployment_id}/resource-tiers","href":"/api-reference/deployments-v2/patch-deployment-resource-tiers"},{"title":"List Revisions","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/deployments/{deployment_id}/revisions","href":"/api-reference/deployments-v2/list-revisions"},{"title":"Create Deployment Revision","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json post /v2/deployments/{deployment_id}/revisions","href":"/api-reference/deployments-v2/create-deployment-revision"},{"title":"Get Revision","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/deployments/{deployment_id}/revisions/{revision_id}","href":"/api-reference/deployments-v2/get-revision"},{"title":"Redeploy Revision","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json post /v2/deployments/{deployment_id}/revisions/{revision_id}/redeploy","href":"/api-reference/deployments-v2/redeploy-revision"},{"title":"List Deployment Logs","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/deployments/{deployment_id}/logs","href":"/api-reference/deployments-v2/list-deployment-logs"},{"title":"List Revision Logs","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/deployments/{deployment_id}/revisions/{revision_id}/logs","href":"/api-reference/deployments-v2/list-revision-logs"},{"title":"Interrupt Deployment Revision","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json post /v2/deployments/{deployment_id}/revisions/{revision_id}/interruption","href":"/api-reference/deployments-v2/interrupt-deployment-revision"},{"title":"List Deployment Log Entries","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/deployment-logs","href":"/api-reference/deployments-v2/list-deployment-log-entries"}]},{"group":"Listeners (v2)","pages":[{"title":"List Listeners","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/listeners","href":"/api-reference/listeners-v2/list-listeners"},{"title":"Create Listener","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json post /v2/listeners","href":"/api-reference/listeners-v2/create-listener"},{"title":"Get Listener","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/listeners/{listener_id}","href":"/api-reference/listeners-v2/get-listener"},{"title":"Delete Listener","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json delete /v2/listeners/{listener_id}","href":"/api-reference/listeners-v2/delete-listener"},{"title":"Patch Listener","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json patch /v2/listeners/{listener_id}","href":"/api-reference/listeners-v2/patch-listener"}]},{"group":"Integrations (v2)","pages":[{"title":"List Github Installations","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/integrations/github/installations","href":"/api-reference/integrations-v2/list-github-installations"},{"title":"List Github Installation Repositories","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/integrations/github/installations/{integration_id}/repositories","href":"/api-reference/integrations-v2/list-github-installation-repositories"},{"title":"Get Github Install Link Endpoint","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json post /v2/integrations/github/installation-link","href":"/api-reference/integrations-v2/get-github-install-link-endpoint"},{"title":"List Forge Github Installations","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/integrations/forge-github/installations","href":"/api-reference/integrations-v2/list-forge-github-installations"},{"title":"List Forge Github Installation Repositories","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/integrations/forge-github/installations/{integration_id}/repositories","href":"/api-reference/integrations-v2/list-forge-github-installation-repositories"},{"title":"Get Forge Github Install Link Endpoint","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json post /v2/integrations/forge-github/installation-link","href":"/api-reference/integrations-v2/get-forge-github-install-link-endpoint"},{"title":"Get Engine Picker Session Endpoint","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/integrations/forge-github/picker-sessions/{session_id}","href":"/api-reference/integrations-v2/get-engine-picker-session-endpoint"},{"title":"Create Engine Picker Session Selection","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json post /v2/integrations/forge-github/picker-sessions/{session_id}/selection","href":"/api-reference/integrations-v2/create-engine-picker-session-selection"}]},{"group":"Auth Service (v2)","pages":[{"title":"List Oauth Providers","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/auth/providers","href":"/api-reference/auth-service-v2/list-oauth-providers"},{"title":"Create Oauth Provider","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json post /v2/auth/providers","href":"/api-reference/auth-service-v2/create-oauth-provider"},{"title":"List Platform Oauth Providers","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/auth/platform-providers","href":"/api-reference/auth-service-v2/list-platform-oauth-providers"},{"title":"Get Platform Oauth Provider","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/auth/platform-providers/{provider_id}","href":"/api-reference/auth-service-v2/get-platform-oauth-provider"},{"title":"Oauth Setup Callback","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/auth/setup/{provider_id}","href":"/api-reference/auth-service-v2/oauth-setup-callback"},{"title":"Oauth Callback Get","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/auth/callback/{provider_id}","href":"/api-reference/auth-service-v2/oauth-callback-get"},{"title":"Oauth Callback","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json post /v2/auth/callback/{provider_id}","href":"/api-reference/auth-service-v2/oauth-callback"},{"title":"Authenticate","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json post /v2/auth/authenticate","href":"/api-reference/auth-service-v2/authenticate"},{"title":"Wait For Auth Completion","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/auth/wait/{auth_id}","href":"/api-reference/auth-service-v2/wait-for-auth-completion"},{"title":"Create Mcp Oauth Provider","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json post /v2/auth/providers/mcp-discover","href":"/api-reference/auth-service-v2/create-mcp-oauth-provider"},{"title":"Get Oauth Provider","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/auth/providers/{provider_id}","href":"/api-reference/auth-service-v2/get-oauth-provider"},{"title":"Delete Oauth Provider","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json delete /v2/auth/providers/{provider_id}","href":"/api-reference/auth-service-v2/delete-oauth-provider"},{"title":"Update Oauth Provider","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json patch /v2/auth/providers/{provider_id}","href":"/api-reference/auth-service-v2/update-oauth-provider"},{"title":"List Oauth Tokens For User","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/auth/tokens","href":"/api-reference/auth-service-v2/list-oauth-tokens-for-user"},{"title":"Delete Oauth Tokens For User","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json delete /v2/auth/tokens","href":"/api-reference/auth-service-v2/delete-oauth-tokens-for-user"},{"title":"List Token Events For User","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/auth/token-events","href":"/api-reference/auth-service-v2/list-token-events-for-user"},{"title":"Update Token Label","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json patch /v2/auth/tokens/{token_id}/metadata","href":"/api-reference/auth-service-v2/update-token-label"},{"title":"Import Oauth Token","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json post /v2/auth/tokens/import","href":"/api-reference/auth-service-v2/import-oauth-token"},{"title":"Delete Single Oauth Token","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json delete /v2/auth/tokens/{token_id}","href":"/api-reference/auth-service-v2/delete-single-oauth-token"},{"title":"Check Oauth Token Exists","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/auth/tokens/exists","href":"/api-reference/auth-service-v2/check-oauth-token-exists"},{"title":"Check Oauth Tokens Exist Batch","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json post /v2/auth/tokens/exists/batch","href":"/api-reference/auth-service-v2/check-oauth-tokens-exist-batch"},{"title":"Check Workspace Slack Tokens Exist","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/auth/tokens/workspace/slack/exists","href":"/api-reference/auth-service-v2/check-workspace-slack-tokens-exist"},{"title":"Revoke All Slack Tokens For Workspace","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json delete /v2/auth/tokens/workspace/slack","href":"/api-reference/auth-service-v2/revoke-all-slack-tokens-for-workspace"}]},{"group":"Agent Connections (v2)","pages":[{"title":"List Connections","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json get /v2/auth/agents/{agent_id}/connections","href":"/api-reference/agent-connections-v2/list-connections"},{"title":"Create Connection","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json post /v2/auth/agents/{agent_id}/connections","href":"/api-reference/agent-connections-v2/create-connection"},{"title":"Remove Connection","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json delete /v2/auth/agents/{agent_id}/connections/{connection_id}","href":"/api-reference/agent-connections-v2/remove-connection"},{"title":"Upsert Agent Provider Token","deprecated":null,"version":null,"openapi":"https://api.host.langchain.com/openapi.json post /v2/auth/agents/{agent_id}/providers/{provider_id}/tokens","href":"/api-reference/agent-connections-v2/upsert-agent-provider-token"}]}]},{"title":"Agent Server changelog","sidebarTitle":"Agent Server changelog","href":"/langsmith/agent-server-changelog"},{"group":"Related","pages":[{"title":"LangGraph Python SDK","sidebarTitle":"LangGraph Python SDK","url":"https://reference.langchain.com/python/langgraph-sdk","href":"/langsmith/langgraph-python-sdk"},{"title":"LangGraph JS/TS SDK","sidebarTitle":"LangGraph JS/TS SDK","url":"https://reference.langchain.com/javascript/langchain-langgraph-sdk","href":"/langsmith/langgraph-js-ts-sdk"}]}]}]},{"tab":"Agent Server","pages":[{"title":"Agent Server","sidebarTitle":"Overview","mode":"wide","href":"/langsmith/agent-server-overview"},{"group":"Develop your application","pages":[{"title":"Application structure","sidebarTitle":"Application structure","href":"/langsmith/application-structure"},{"group":"Set up dependencies","pages":[{"title":"How to set up an application with requirements.txt","sidebarTitle":"With requirements.txt","href":"/langsmith/setup-app-requirements-txt"},{"title":"How to set up an application with pyproject.toml","sidebarTitle":"With pyproject.toml","href":"/langsmith/setup-pyproject"},{"title":"How to set up a JavaScript application","sidebarTitle":"Set up a JavaScript application","href":"/langsmith/setup-javascript"},{"title":"How to customize the Dockerfile","sidebarTitle":"Customize the Dockerfile","href":"/langsmith/custom-docker"},{"title":"Monorepo support","sidebarTitle":"Monorepo support","href":"/langsmith/monorepo-support"}]},{"group":"Persistence","pages":[{"title":"Configure checkpointer backend","sidebarTitle":"Configure checkpointer backend","href":"/langsmith/configure-checkpointer"},{"title":"How to add TTLs to your application","sidebarTitle":"Add TTLs to your application","href":"/langsmith/configure-ttl"},{"title":"How to add semantic search to your agent deployment","sidebarTitle":"Add semantic search to your agent deployment","href":"/langsmith/semantic-search"}]}]},{"group":"Capabilities","pages":[{"title":"Agent Server","sidebarTitle":"Overview","href":"/langsmith/agent-server"},{"group":"Assistants","pages":[{"title":"Assistants","sidebarTitle":"Overview","href":"/langsmith/assistants"},{"title":"Manage assistants","sidebarTitle":"Manage assistants","href":"/langsmith/configuration-cloud"}]},{"title":"Use threads","sidebarTitle":"Threads","href":"/langsmith/use-threads"},{"group":"Runs","pages":[{"title":"Runs","sidebarTitle":"Overview","href":"/langsmith/runs"},{"title":"How to kick off background runs","sidebarTitle":"Kick off background runs","href":"/langsmith/background-run"},{"title":"How to run multiple assistants on the same thread","sidebarTitle":"Run multiple assistants on the same thread","href":"/langsmith/same-thread"},{"title":"Stateless runs","sidebarTitle":"Stateless runs","href":"/langsmith/stateless-runs"},{"title":"How to cancel a run","sidebarTitle":"Cancel a run","href":"/langsmith/cancel-run"}]},{"title":"How to interact with a deployment using RemoteGraph","sidebarTitle":"Interact with a deployment using RemoteGraph","href":"/langsmith/use-remote-graph"},{"title":"Use cron jobs","sidebarTitle":"Cron jobs","href":"/langsmith/cron-jobs"},{"title":"Streaming API","sidebarTitle":"Streaming API","href":"/langsmith/streaming"},{"title":"Human-in-the-loop using server API","sidebarTitle":"Human-in-the-loop using server API","href":"/langsmith/add-human-in-the-loop"},{"title":"Time travel using the server API","sidebarTitle":"Time travel using the server API","href":"/langsmith/human-in-the-loop-time-travel"},{"group":"Double-texting","pages":[{"title":"Double texting","sidebarTitle":"Overview","href":"/langsmith/double-texting"},{"title":"Interrupt concurrent","sidebarTitle":"Interrupt","href":"/langsmith/interrupt-concurrent"},{"title":"Rollback Concurrent","sidebarTitle":"Rollback","href":"/langsmith/rollback-concurrent"},{"title":"Reject Concurrent","sidebarTitle":"Reject","href":"/langsmith/reject-concurrent"},{"title":"Enqueue concurrent","sidebarTitle":"Enqueue","href":"/langsmith/enqueue-concurrent"}]},{"title":"Use webhooks","sidebarTitle":"Webhooks","href":"/langsmith/use-webhooks"},{"title":"Distributed tracing with Agent Server","sidebarTitle":"Distributed tracing","href":"/langsmith/agent-server-distributed-tracing"},{"title":"MCP endpoint in Agent Server","sidebarTitle":"MCP endpoint in Agent Server","href":"/langsmith/server-mcp"},{"title":"Human-in-the-loop over MCP","sidebarTitle":"Human-in-the-loop over MCP","href":"/langsmith/server-mcp-elicitation"},{"title":"A2A endpoint in Agent Server","sidebarTitle":"A2A endpoint in Agent Server","href":"/langsmith/server-a2a"},{"title":"Agent Server changelog","sidebarTitle":"Changelog","url":"/langsmith/agent-server-changelog","href":"/langsmith/agent-server-changelog-link"}]},{"group":"How to build","pages":[{"title":"How to collect user feedback for Agent Server runs","sidebarTitle":"Collect user feedback for Agent Server runs","href":"/langsmith/agent-server-feedback"},{"title":"How to implement generative user interfaces with LangGraph","sidebarTitle":"Implement generative user interfaces with LangGraph","href":"/langsmith/generative-ui-react"},{"title":"Implement a CI/CD pipeline using LangSmith Deployment and Evaluation","sidebarTitle":"Implement a CI/CD pipeline","href":"/langsmith/cicd-pipeline-example"}]},{"group":"Auth \u0026 access control","pages":[{"title":"Authentication \u0026 access control","sidebarTitle":"Overview","href":"/langsmith/auth"},{"title":"Add custom authentication","sidebarTitle":"Add custom authentication","href":"/langsmith/custom-auth"},{"group":"Custom auth tutorial","icon":"school","pages":[{"title":"Set up custom authentication","sidebarTitle":"Set up custom authentication","href":"/langsmith/set-up-custom-auth"},{"title":"Make conversations private","sidebarTitle":"Make conversations private","href":"/langsmith/resource-auth"},{"title":"Isolate store data per user","sidebarTitle":"Isolate store per user","href":"/langsmith/store-auth"},{"title":"Connect an authentication provider","sidebarTitle":"Connect an authentication provider","href":"/langsmith/add-auth-server"}]},{"title":"Document API authentication in OpenAPI","sidebarTitle":"Document API authentication in OpenAPI","href":"/langsmith/openapi-security"},{"title":"Set up Agent Auth","tag":"Beta","href":"/langsmith/agent-auth"}]},{"group":"Server customization","pages":[{"title":"Use server-side caching","sidebarTitle":"Caching","href":"/langsmith/caching"},{"title":"Configure IAM authentication for data stores","sidebarTitle":"Data store IAM authentication","href":"/langsmith/configure-iam-auth"},{"group":"Encryption at rest","root":{"title":"Encryption at rest","sidebarTitle":"Encryption at rest","href":"/langsmith/encryption"},"pages":[{"title":"Configure AES encryption at rest","sidebarTitle":"AES encryption","href":"/langsmith/aes-encryption"},{"title":"Configure custom encryption at rest","sidebarTitle":"Custom encryption","href":"/langsmith/custom-encryption"}]},{"title":"Rebuild graph at runtime","sidebarTitle":"Rebuild graph at runtime","href":"/langsmith/graph-rebuild"},{"group":"Replace built-in backends","pages":[{"title":"How to use a custom store","sidebarTitle":"Add custom store","tag":"Alpha","href":"/langsmith/custom-store"},{"title":"How to use a custom checkpointer","sidebarTitle":"Add custom checkpointer","tag":"Alpha","href":"/langsmith/custom-checkpointer"}]},{"group":"Extend the HTTP server","pages":[{"title":"How to add custom routes","sidebarTitle":"Add custom routes","href":"/langsmith/custom-routes"},{"title":"How to add custom middleware","sidebarTitle":"Add custom middleware","href":"/langsmith/custom-middleware"},{"title":"How to add custom lifespan events","sidebarTitle":"Add custom lifespan events","href":"/langsmith/custom-lifespan"}]},{"group":"Headers and logging","pages":[{"title":"Use HTTP headers for runtime configuration","sidebarTitle":"Configurable headers","href":"/langsmith/configurable-headers"},{"title":"Include HTTP headers in server logs","sidebarTitle":"Logging Headers","href":"/langsmith/configurable-logs"}]}]}]},{"tab":"Deploy to Cloud","pages":[{"title":"Deploy to Cloud","sidebarTitle":"Cloud overview","icon":"cloud","iconType":"solid","mode":"wide","href":"/langsmith/deploy-to-cloud-overview"},{"title":"Cloud platform features","sidebarTitle":"Platform features","icon":"list-check","href":"/langsmith/cloud-platform-features"},{"group":"Deployment guide","pages":[{"title":"Create a deployment","href":"/langsmith/deploy-to-cloud"},{"title":"Revisions","href":"/langsmith/deployment-revisions"},{"title":"Monitor a deployment","href":"/langsmith/monitor-deployment"},{"title":"Preview builds","href":"/langsmith/preview-builds"},{"title":"Manage a deployment","href":"/langsmith/manage-deployment"}]},{"group":"Reference","pages":[{"title":"Cloud Agent Server environment variables","sidebarTitle":"Environment variables","href":"/langsmith/env-var-cloud"}]}]},{"tab":"Deploy to Self-hosted","pages":[{"title":"Deploy to self-hosted","sidebarTitle":"Self-hosted overview","icon":"buildings","mode":"wide","href":"/langsmith/deploy-to-self-hosted-overview"},{"title":"Deploy with control plane","sidebarTitle":"With control plane","icon":"cloud-upload","href":"/langsmith/deploy-with-control-plane"},{"title":"Hybrid","sidebarTitle":"Hybrid","icon":"cloud","href":"/langsmith/hybrid"},{"title":"Self-host standalone servers","sidebarTitle":"Standalone servers","icon":"server","href":"/langsmith/deploy-standalone-server"},{"group":"Configure","pages":[{"title":"Self-hosted platform features","sidebarTitle":"Platform features","icon":"list-check","href":"/langsmith/self-hosted-platform-features"},{"title":"Agent Server metrics","sidebarTitle":"Agent Server metrics","icon":"chart-line","href":"/langsmith/self-hosted-agent-server-metrics"},{"title":"Configure Agent Server for scale","sidebarTitle":"Agent Server scaling","icon":"box-multiple","href":"/langsmith/agent-server-scale"},{"title":"Set up a build machine on a restricted network","sidebarTitle":"Build on a restricted network","icon":"world-off","href":"/langsmith/self-host-restricted-network-build"},{"title":"Troubleshooting for self-hosted deployments","sidebarTitle":"Troubleshooting","icon":"stethoscope","href":"/langsmith/diagnostics-self-hosted"}]},{"group":"Reference","pages":[{"title":"Self-hosted Agent Server environment variables","sidebarTitle":"Environment variables","href":"/langsmith/env-var-self-hosted"}]}]},{"tab":"Prompt \u0026 Context Hub","pages":[{"title":"Prompt \u0026 Context Hub","sidebarTitle":"Overview","mode":"wide","href":"/langsmith/prompt-context-hub"},{"group":"Prompts","pages":[{"title":"Prompt engineering quickstart","sidebarTitle":"Quickstart","href":"/langsmith/prompt-engineering-quickstart"},{"title":"Prompt engineering concepts","sidebarTitle":"Concepts","href":"/langsmith/prompt-engineering-concepts"},{"title":"LangSmith Chat","sidebarTitle":"Chat","url":"https://docs.langchain.com/langsmith/chat#prompt-engineering","icon":"feather","href":"/langsmith/chat-prompt-engineering"},{"title":"Model providers","sidebarTitle":"Model providers","href":"/langsmith/playground-model-providers"},{"group":"Create and manage prompts","pages":[{"title":"Create a prompt","sidebarTitle":"Create a prompt","href":"/langsmith/create-a-prompt"},{"title":"Manage prompts","sidebarTitle":"Manage prompts","href":"/langsmith/manage-prompts"},{"title":"Manage prompts programmatically","sidebarTitle":"Manage prompts programmatically","href":"/langsmith/manage-prompts-programmatically"},{"title":"Configure prompt settings","sidebarTitle":"Configure prompt settings","href":"/langsmith/managing-model-configurations"},{"title":"Prompt template format guide","sidebarTitle":"Prompt template format","href":"/langsmith/prompt-template-format"},{"title":"Use tools in a prompt","sidebarTitle":"Use tools in a prompt","href":"/langsmith/use-tools"},{"title":"Include multimodal content in a prompt","sidebarTitle":"Include multimodal content in a prompt","href":"/langsmith/multimodal-content"}]},{"title":"Write your prompt with AI","sidebarTitle":"Write your prompt with AI","href":"/langsmith/write-prompt-with-ai"},{"group":"Connect to models","pages":[{"title":"Connect to an OpenAI compliant model provider/proxy","sidebarTitle":"OpenAI-compliant model provider/proxy","href":"/langsmith/custom-openai-compliant-model"},{"title":"Connect to a compatible decision model provider","sidebarTitle":"Compatible decision model provider","href":"/langsmith/compatible-decision-model-provider"},{"title":"Connect to a custom model","sidebarTitle":"Custom model","href":"/langsmith/custom-endpoint"}]}]},{"group":"Context Hub","pages":[{"title":"Context engineering concepts","sidebarTitle":"Concepts","href":"/langsmith/context-engineering-concepts"},{"title":"Use the Context Hub","sidebarTitle":"Use the Context Hub","tag":"UI","href":"/langsmith/use-the-context-hub"},{"title":"Manage contexts with the SDK","sidebarTitle":"Manage contexts","tag":"SDK","href":"/langsmith/manage-contexts-sdk"},{"title":"Configure Context Hub commit webhooks","sidebarTitle":"Commit webhooks","href":"/langsmith/context-hub-webhooks"}]},{"group":"Tutorials","pages":[{"title":"Optimize a classifier","sidebarTitle":"Optimize a classifier","href":"/langsmith/optimize-classifier"},{"title":"How to sync prompts with GitHub","sidebarTitle":"Sync prompts with GitHub","href":"/langsmith/prompt-commit"},{"title":"Test multi-turn conversations","sidebarTitle":"Test multi-turn conversations","href":"/langsmith/multiple-messages"}]}]},{"tab":"Sandboxes","pages":[{"title":"LangSmith Sandboxes","sidebarTitle":"Overview","href":"/langsmith/sandboxes"},{"title":"Sandbox snapshots","sidebarTitle":"Snapshots","href":"/langsmith/sandbox-snapshots"},{"title":"Sandbox service URLs","sidebarTitle":"Service URLs","href":"/langsmith/sandbox-service-urls"},{"title":"Sandbox download links","sidebarTitle":"Download links","href":"/langsmith/sandbox-download-links"},{"title":"Sandbox auth proxy","sidebarTitle":"Auth proxy","href":"/langsmith/sandbox-auth-proxy"},{"title":"Sandbox mounts","sidebarTitle":"Mounts","href":"/langsmith/sandbox-mounts"},{"title":"Sandbox access permissions","sidebarTitle":"Permissions","href":"/langsmith/sandbox-permissions"},{"title":"Sandbox CLI","href":"/langsmith/sandbox-cli"},{"title":"Sandbox SDK usage","sidebarTitle":"SDK usage","href":"/langsmith/sandbox-sdk"},{"title":"Harbor integrations","href":"/langsmith/harbor-integrations"}]}]},{"item":"Monitor","icon":"chart-line","description":"Trace, debug, and observe agents","tabs":[{"tab":"Overview","pages":[{"title":"Overview","href":"/langsmith/observability"}]},{"tab":"Trace","pages":[{"title":"Trace","href":"/langsmith/observability-quickstart"}]},{"tab":"Debug","pages":[{"title":"Debug","href":"/langsmith/view-traces"}]},{"tab":"Observe","pages":[{"group":"Monitoring \u0026 alerting","pages":[{"title":"Monitor projects with dashboards","sidebarTitle":"Monitor projects with dashboards","description":null,"href":"/langsmith/dashboards"},{"title":"Alerts in LangSmith","sidebarTitle":"Alerts","href":"/langsmith/alerts"},{"title":"Discover errors and usage patterns with Insights","sidebarTitle":"Insights","description":"Use LangSmith Insights to automatically analyze traces, detect usage patterns, identify common agent behaviors, and surface failure modes without manual trace review.","href":"/langsmith/insights"},{"title":"Custom Apps","href":"/langsmith/custom-apps"}]},{"group":"Online evaluators","pages":[{"title":"Set up LLM-as-a-judge online evaluators","sidebarTitle":"LLM-as-a-judge","href":"/langsmith/online-evaluations-llm-as-judge"},{"title":"Set up decision model online evaluators","sidebarTitle":"Decision model","href":"/langsmith/online-evaluations-decision-models"},{"title":"Set up multi-turn online evaluators","sidebarTitle":"Multi-turn evaluators","href":"/langsmith/online-evaluations-multi-turn"},{"title":"Set up LangChain Tuned Evaluators","sidebarTitle":"Tuned Evaluators","tag":"Beta","href":"/langsmith/tuned-evaluators"},{"title":"Set up online code evaluators","sidebarTitle":"Code evaluators","href":"/langsmith/online-evaluations-code"},{"title":"Set up composite online evaluators","sidebarTitle":"Composite evaluators","href":"/langsmith/online-evaluations-composite"}]},{"group":"Automations","pages":[{"title":"Set up automation rules","sidebarTitle":"Set up automation rules","href":"/langsmith/rules"},{"title":"Configure webhook notifications for rules","sidebarTitle":"Configure webhook notifications for rules","href":"/langsmith/webhooks"}]}]},{"tab":"Reference","pages":[{"title":"Reference","href":"/langsmith/reference"}]}]}]},{"product":"PRODUCTS AND SETUP","menu":[{"item":"LangSmith setup","icon":"server","description":"Hosting and administration","tabs":[{"tab":"Overview","pages":[{"title":"Overview","href":"/langsmith/langsmith-setup-overview"}]},{"tab":"Account","pages":[{"title":"Account","href":"/langsmith/admin"}]},{"tab":"Cloud","pages":[{"title":"Cloud","href":"/langsmith/cloud"}]},{"tab":"BYOC","pages":[{"title":"BYOC","href":"/langsmith/byoc"}]},{"tab":"Self-hosted","pages":[{"title":"Self-hosted","href":"/langsmith/self-hosted"}]},{"tab":"Govern","pages":[{"title":"Govern","href":"/langsmith/govern-overview"}]}]},{"item":"LLM Gateway","icon":"route","description":"Route, control, and observe LLM traffic","pages":[{"title":"LLM Gateway","href":"/langsmith/llm-gateway"}]},{"item":"No-code agents","icon":"wand","description":"Build agents without code","pages":[{"title":"No-code agents","href":"/langsmith/fleet"}]},{"item":"Engine","icon":"https://mintlify.s3.us-west-1.amazonaws.com/langchain-5e9cc07a/images/brand/engine-icon-no-bg-dark.svg","description":"Find and fix agent issues","pages":[{"title":"Engine","href":"/langsmith/engine"}]},{"item":"Deep Agents Code","icon":"code","description":"Code with an agent in your terminal","pages":[{"title":"Deep Agents Code","href":"/oss/deepagents/code/overview"}]}],"pages":[{"title":"PRODUCTS AND SETUP","href":"/langsmith/langsmith-setup-overview"}]}]},"basePath":"","title":"Alerts in LangSmith - Docs by LangChain","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":["10e4515597","a74be98ba7"],"chunks":["BannerMarkdown-DIeMibn4.js","dist-DJnKvr0g.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-B2v50t8t.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","zoom-image-lightbox-B4-wUcHm.js","lightbox-handle-r17bVUz3.js"]}