diff --git a/.github/workflows/deploy_docs.yml b/.github/workflows/deploy_docs.yml index 9b805039b..462d1e663 100644 --- a/.github/workflows/deploy_docs.yml +++ b/.github/workflows/deploy_docs.yml @@ -1,9 +1,12 @@ -name: Deploy Docs Redirects +name: Deploy Docs on: push: branches: - main + pull_request: + branches: + - main workflow_dispatch: permissions: @@ -20,6 +23,18 @@ defaults: working-directory: docs jobs: + get-changed-files: + runs-on: ubuntu-latest + outputs: + changed-files: ${{ steps.changed-files.outputs.added_modified }} + steps: + - uses: actions/checkout@v5 + - name: Get changed files + id: changed-files + uses: Ana06/get-changed-files@v2.3.0 + with: + filter: "docs/docs/**" + deploy: runs-on: ubuntu-latest timeout-minutes: 10 # Job will be cancelled if it runs for more than 10 minutes @@ -47,21 +62,84 @@ jobs: uv run pip install "git+https://${GITHUB_TOKEN}@github.com/langchain-ai/mkdocs-material-insiders.git" fi + - name: Run unit tests + # Run unit tests on the docs build pipeline + run: make tests + - name: Lint Docs + # This step lints the docs using the existing linting set up. + # It should be very fast and should not require any external services. + run: make lint-docs - name: Build llms-text run: make llms-text - - - name: Build site (redirects only) - run: make build-docs + - name: Build site + run: | + # If this is main branch, then we want to download stats. we do this + # with the env variable DOWNLOAD_STATS=true + if [ "${{ github.ref }}" == "refs/heads/main" ]; then + DOWNLOAD_STATS=true make build-docs + else + make build-docs + fi env: + MKDOCS_GIT_COMMITTERS_APIKEY: ${{ secrets.MKDOCS_GIT_COMMITTERS_APIKEY }} OPENAI_API_KEY: sf-proj-1234567890 # fake placeholder, shouldn't actually be used ANTHROPIC_API_KEY: sk-ant-api03-1234567890 # fake placeholder, shouldn't actually be used + - name: Check links in notebooks + env: + LANGCHAIN_API_KEY: test + if: github.event_name == 'schedule' + run: | + if [ "${{ github.event_name }}" == "schedule" ]; then + echo "Running link check on all HTML files matching notebooks in docs directory..." + uv run pytest -v \ + --check-links-ignore "https://(api|web|docs)\.smith\.langchain\.com/.*" \ + --check-links-ignore "https://academy\.langchain\.com/.*" \ + --check-links-ignore "https://x.com/.*" \ + --check-links-ignore "https://twitter.com/.*" \ + --check-links-ignore "https://github\.com/.*" \ + --check-links-ignore "http://localhost:8123/.*" \ + --check-links-ignore "http://localhost:2024.*" \ + --check-links-ignore "http://127.0.0.1:.*" \ + --check-links-ignore "/.*\.(ipynb|html)$" \ + --check-links-ignore "https://python\.langchain\.com/.*" \ + --check-links-ignore "https://openai\.com/.*" \ + --check-links-ignore "https://www\.uber\.com/.*" \ + --check-links-ignore "https://pepy\.tech/.*" \ + --check-links-ignore "docs/docs/static/wordmark_*" \ + --check-links $(find site -name "index.html" | grep -v 'storm/index.html') + + else + echo "Fetching changes from origin/main..." + git fetch origin main + echo "Checking for changed notebook files..." + CHANGED_FILES=$(git diff --name-only --diff-filter=d origin/main | grep 'docs/docs/.*\.ipynb$' | grep -v 'storm.ipynb' | sed -E 's|^docs/docs/|site/|; s/\.ipynb$/\/index.html/' || true) + echo "Changed files: ${CHANGED_FILES}" + if [ -n "${CHANGED_FILES}" ]; then + echo "Running link check on HTML files matching changed notebook files..." + uv run pytest -v \ + --check-links-ignore "https://(api|web|docs)\.smith\.langchain\.com/.*" \ + --check-links-ignore "https://academy\.langchain\.com/.*" \ + --check-links-ignore "http://localhost:8123/.*" \ + --check-links-ignore "http://localhost:2024.*" \ + --check-links-ignore "http://127.0.0.1:.*" \ + --check-links-ignore "https://x.com/.*" \ + --check-links-ignore "https://twitter.com/.*" \ + --check-links-ignore "https://github\.com/.*" \ + --check-links-ignore "/.*\.(ipynb|html)$" \ + --check-links-ignore "docs/docs/static/wordmark_*" \ + --check-links ${CHANGED_FILES} \ + || ([ $? = 5 ] && exit 0 || exit $?) + else + echo "No notebook files changed." + fi + fi - name: Configure GitHub Pages if: github.ref == 'refs/heads/main' uses: actions/configure-pages@v5 - name: Upload Pages Artifact - if: github.ref == 'refs/heads/main' + # if: github.ref == 'refs/heads/main' uses: actions/upload-pages-artifact@v4 with: path: ./docs/site/ diff --git a/docs/_scripts/notebook_hooks.py b/docs/_scripts/notebook_hooks.py index 5617039de..e88b2709f 100644 --- a/docs/_scripts/notebook_hooks.py +++ b/docs/_scripts/notebook_hooks.py @@ -27,66 +27,66 @@ DISABLED = os.getenv("DISABLE_NOTEBOOK_CONVERT") in ("1", "true", "True") REDIRECT_MAP = { # lib redirects - "how-tos/stream-values.ipynb": "https://docs.langchain.com/oss/python/langgraph/streaming", - "how-tos/stream-updates.ipynb": "https://docs.langchain.com/oss/python/langgraph/streaming", - "how-tos/streaming-content.ipynb": "https://docs.langchain.com/oss/python/langgraph/streaming", - "how-tos/stream-multiple.ipynb": "https://docs.langchain.com/oss/python/langgraph/streaming", - "how-tos/streaming-tokens-without-langchain.ipynb": "https://docs.langchain.com/oss/python/langgraph/streaming", - "how-tos/streaming-from-final-node.ipynb": "https://docs.langchain.com/oss/python/langgraph/streaming", - "how-tos/streaming-events-from-within-tools-without-langchain.ipynb": "https://docs.langchain.com/oss/python/langgraph/streaming", + "how-tos/stream-values.ipynb": "how-tos/streaming.md#stream-graph-state", + "how-tos/stream-updates.ipynb": "how-tos/streaming.md#stream-graph-state", + "how-tos/streaming-content.ipynb": "how-tos/streaming.md", + "how-tos/stream-multiple.ipynb": "how-tos/streaming.md#stream-multiple-nodes", + "how-tos/streaming-tokens-without-langchain.ipynb": "how-tos/streaming.md#use-with-any-llm", + "how-tos/streaming-from-final-node.ipynb": "how-tos/streaming-specific-nodes.ipynb", + "how-tos/streaming-events-from-within-tools-without-langchain.ipynb": "how-tos/streaming-events-from-within-tools.ipynb#example-without-langchain", # graph-api - "how-tos/state-reducers.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api#define-and-update-state", - "how-tos/sequence.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api#create-a-sequence-of-steps", - "how-tos/branching.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api#create-branches", - "how-tos/recursion-limit.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api#create-and-control-loops", - "how-tos/visualization.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api#visualize-your-graph", - "how-tos/input_output_schema.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api#define-input-and-output-schemas", - "how-tos/pass_private_state.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api#pass-private-state-between-nodes", - "how-tos/state-model.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api#use-pydantic-models-for-graph-state", - "how-tos/map-reduce.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api#map-reduce-and-the-send-api", - "how-tos/command.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api#combine-control-flow-and-state-updates-with-command", - "how-tos/configuration.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api#add-runtime-configuration", - "how-tos/node-retries.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api#add-retry-policies", - "how-tos/return-when-recursion-limit-hits.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api#impose-a-recursion-limit", - "how-tos/async.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api#async", + "how-tos/state-reducers.ipynb": "how-tos/graph-api.md#define-and-update-state", + "how-tos/sequence.ipynb": "how-tos/graph-api.md#create-a-sequence-of-steps", + "how-tos/branching.ipynb": "how-tos/graph-api.md#create-branches", + "how-tos/recursion-limit.ipynb": "how-tos/graph-api.md#create-and-control-loops", + "how-tos/visualization.ipynb": "how-tos/graph-api.md#visualize-your-graph", + "how-tos/input_output_schema.ipynb": "how-tos/graph-api.md#define-input-and-output-schemas", + "how-tos/pass_private_state.ipynb": "how-tos/graph-api.md#pass-private-state-between-nodes", + "how-tos/state-model.ipynb": "how-tos/graph-api.md#use-pydantic-models-for-graph-state", + "how-tos/map-reduce.ipynb": "how-tos/graph-api.md#map-reduce-and-the-send-api", + "how-tos/command.ipynb": "how-tos/graph-api.md#combine-control-flow-and-state-updates-with-command", + "how-tos/configuration.ipynb": "how-tos/graph-api.md#add-runtime-configuration", + "how-tos/node-retries.ipynb": "how-tos/graph-api.md#add-retry-policies", + "how-tos/return-when-recursion-limit-hits.ipynb": "how-tos/graph-api.md#impose-a-recursion-limit", + "how-tos/async.ipynb": "how-tos/graph-api.md#async", # memory how-tos - "how-tos/memory/manage-conversation-history.ipynb": "https://docs.langchain.com/oss/python/langgraph/add-memory", - "how-tos/memory/delete-messages.ipynb": "https://docs.langchain.com/oss/python/langgraph/add-memory#delete-messages", - "how-tos/memory/add-summary-conversation-history.ipynb": "https://docs.langchain.com/oss/python/langgraph/add-memory#summarize-messages", - "how-tos/memory.ipynb": "https://docs.langchain.com/oss/python/langgraph/add-memory", - "agents/memory.ipynb": "https://docs.langchain.com/oss/python/langgraph/add-memory", + "how-tos/memory/manage-conversation-history.ipynb": "how-tos/memory/add-memory.md", + "how-tos/memory/delete-messages.ipynb": "how-tos/memory/add-memory.md#delete-messages", + "how-tos/memory/add-summary-conversation-history.ipynb": "how-tos/memory/add-memory.md#summarize-messages", + "how-tos/memory.ipynb": "how-tos/memory/add-memory.md", + "agents/memory.ipynb": "how-tos/memory/add-memory.md", # subgraph how-tos - "how-tos/subgraph-transform-state.ipynb": "https://docs.langchain.com/oss/python/langgraph/use-subgraphs#different-state-schemas", - "how-tos/subgraphs-manage-state.ipynb": "https://docs.langchain.com/oss/python/langgraph/use-subgraphs#add-persistence", + "how-tos/subgraph-transform-state.ipynb": "how-tos/subgraph.md#different-state-schemas", + "how-tos/subgraphs-manage-state.ipynb": "how-tos/subgraph.md#add-persistence", # persistence how-tos - "how-tos/persistence_postgres.ipynb": "https://docs.langchain.com/oss/python/langgraph/add-memory#use-in-production", - "how-tos/persistence_mongodb.ipynb": "https://docs.langchain.com/oss/python/langgraph/add-memory#use-in-production", - "how-tos/persistence_redis.ipynb": "https://docs.langchain.com/oss/python/langgraph/add-memory#use-in-production", - "how-tos/subgraph-persistence.ipynb": "https://docs.langchain.com/oss/python/langgraph/add-memory#use-with-subgraphs", - "how-tos/cross-thread-persistence.ipynb": "https://docs.langchain.com/oss/python/langgraph/add-memory#add-long-term-memory", - "cloud/how-tos/copy_threads": "https://docs.langchain.com/langsmith/use-threads", - "cloud/how-tos/check-thread-status": "https://docs.langchain.com/langsmith/use-threads", - "cloud/concepts/threads.md": "https://docs.langchain.com/oss/python/langgraph/persistence#threads", - "how-tos/persistence.ipynb": "https://docs.langchain.com/oss/python/langgraph/add-memory", + "how-tos/persistence_postgres.ipynb": "how-tos/memory/add-memory.md#use-in-production", + "how-tos/persistence_mongodb.ipynb": "how-tos/memory/add-memory.md#use-in-production", + "how-tos/persistence_redis.ipynb": "how-tos/memory/add-memory.md#use-in-production", + "how-tos/subgraph-persistence.ipynb": "how-tos/memory/add-memory.md#use-with-subgraphs", + "how-tos/cross-thread-persistence.ipynb": "how-tos/memory/add-memory.md#add-long-term-memory", + "cloud/how-tos/copy_threads": "cloud/how-tos/use_threads", + "cloud/how-tos/check-thread-status": "cloud/how-tos/use_threads", + "cloud/concepts/threads.md": "concepts/persistence.md#threads", + "how-tos/persistence.ipynb": "how-tos/memory/add-memory.md", # tool calling how-tos - "how-tos/tool-calling-errors.ipynb": "https://docs.langchain.com/oss/python/langgraph/workflows-agents", - "how-tos/pass-config-to-tools.ipynb": "https://docs.langchain.com/oss/python/langgraph/workflows-agents", - "how-tos/pass-run-time-values-to-tools.ipynb": "https://docs.langchain.com/oss/python/langgraph/workflows-agents", - "how-tos/update-state-from-tools.ipynb": "https://docs.langchain.com/oss/python/langgraph/workflows-agents", - "agents/tools.md": "https://docs.langchain.com/oss/python/langgraph/workflows-agents", + "how-tos/tool-calling-errors.ipynb": "how-tos/tool-calling.ipynb#handle-errors", + "how-tos/pass-config-to-tools.ipynb": "how-tos/tool-calling.ipynb#access-config", + "how-tos/pass-run-time-values-to-tools.ipynb": "how-tos/tool-calling.ipynb#read-state", + "how-tos/update-state-from-tools.ipynb": "how-tos/tool-calling.ipynb#update-state", + "agents/tools.md": "how-tos/tool-calling.md", # multi-agent how-tos - "how-tos/agent-handoffs.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api", - "how-tos/multi-agent-network.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api", - "how-tos/multi-agent-multi-turn-convo.ipynb": "https://docs.langchain.com/oss/python/langgraph/graph-api", + "how-tos/agent-handoffs.ipynb": "how-tos/multi_agent.md#handoffs", + "how-tos/multi-agent-network.ipynb": "how-tos/multi_agent.md#use-in-a-multi-agent-system", + "how-tos/multi-agent-multi-turn-convo.ipynb": "how-tos/multi_agent.md#multi-turn-conversation", # cloud redirects - "cloud/index.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "cloud/how-tos/index.md": "https://docs.langchain.com/langsmith/home", - "cloud/concepts/api.md": "https://docs.langchain.com/langsmith/langgraph-server", - "cloud/concepts/cloud.md": "https://docs.langchain.com/langsmith/cloud", - "cloud/faq/studio.md": "https://docs.langchain.com/langsmith/studio", - "cloud/how-tos/human_in_the_loop_edit_state.md": "https://docs.langchain.com/langsmith/add-human-in-the-loop", - "cloud/how-tos/human_in_the_loop_user_input.md": "https://docs.langchain.com/langsmith/add-human-in-the-loop", - "concepts/platform_architecture.md": "https://docs.langchain.com/langsmith/cloud#architecture", + "cloud/index.md": "index.md", + "cloud/how-tos/index.md": "concepts/langgraph_platform", + "cloud/concepts/api.md": "concepts/langgraph_server.md", + "cloud/concepts/cloud.md": "concepts/langgraph_cloud.md", + "cloud/faq/studio.md": "concepts/langgraph_studio.md#studio-faqs", + "cloud/how-tos/human_in_the_loop_edit_state.md": "cloud/how-tos/add-human-in-the-loop.md", + "cloud/how-tos/human_in_the_loop_user_input.md": "cloud/how-tos/add-human-in-the-loop.md", + "concepts/platform_architecture.md": "concepts/langgraph_cloud#architecture", # cloud streaming redirects "cloud/how-tos/stream_values.md": "https://docs.langchain.com/langsmith/streaming", "cloud/how-tos/stream_updates.md": "https://docs.langchain.com/langsmith/streaming", @@ -94,39 +94,39 @@ REDIRECT_MAP = { "cloud/how-tos/stream_events.md": "https://docs.langchain.com/langsmith/streaming", "cloud/how-tos/stream_debug.md": "https://docs.langchain.com/langsmith/streaming", "cloud/how-tos/stream_multiple.md": "https://docs.langchain.com/langsmith/streaming", - "cloud/concepts/streaming.md": "https://docs.langchain.com/oss/python/langgraph/streaming", - "agents/streaming.md": "https://docs.langchain.com/oss/python/langgraph/streaming", + "cloud/concepts/streaming.md": "concepts/streaming.md", + "agents/streaming.md": "how-tos/streaming.md", # prebuilt redirects - "how-tos/create-react-agent.ipynb": "https://docs.langchain.com/oss/python/langchain/agents#basic-configuration", - "how-tos/create-react-agent-memory.ipynb": "https://docs.langchain.com/oss/python/langgraph/add-memory", - "how-tos/create-react-agent-system-prompt.ipynb": "https://docs.langchain.com/oss/python/langgraph/add-memory", - "how-tos/create-react-agent-structured-output.ipynb": "https://docs.langchain.com/oss/python/langchain/agents#structured-output", + "how-tos/create-react-agent.ipynb": "agents/agents.md#basic-configuration", + "how-tos/create-react-agent-memory.ipynb": "agents/memory.md", + "how-tos/create-react-agent-system-prompt.ipynb": "agents/context.md#prompts", + "how-tos/create-react-agent-structured-output.ipynb": "agents/agents.md#structured-output", # misc - "prebuilt.md": "https://docs.langchain.com/oss/python/langchain/agents", - "reference/prebuilt.md": "https://reference.langchain.com/python/langgraph/agents/", - "concepts/high_level.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "concepts/index.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "concepts/v0-human-in-the-loop.md": "https://docs.langchain.com/oss/python/langgraph/interrupts", - "how-tos/index.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "tutorials/introduction.ipynb": "https://docs.langchain.com/oss/python/langgraph/overview", - "agents/deployment.md": "https://docs.langchain.com/oss/python/langgraph/local-server", + "prebuilt.md": "agents/prebuilt.md", + "reference/prebuilt.md": "reference/agents.md", + "concepts/high_level.md": "index.md", + "concepts/index.md": "index.md", + "concepts/v0-human-in-the-loop.md": "concepts/human-in-the-loop.md", + "how-tos/index.md": "index.md", + "tutorials/introduction.ipynb": "concepts/why-langgraph.md", + "agents/deployment.md": "tutorials/langgraph-platform/local-server.md", # deployment redirects - "how-tos/deploy-self-hosted.md": "https://docs.langchain.com/langsmith/hosting", - "concepts/self_hosted.md": "https://docs.langchain.com/langsmith/hosting", - "tutorials/deployment.md": "https://docs.langchain.com/langsmith/deployments", + "how-tos/deploy-self-hosted.md": "cloud/deployment/self_hosted_data_plane.md", + "concepts/self_hosted.md": "concepts/langgraph_self_hosted_data_plane.md", + "tutorials/deployment.md": "concepts/deployment_options.md", # assistant redirects - "cloud/how-tos/assistant_versioning.md": "https://docs.langchain.com/langsmith/configuration-cloud", - "cloud/concepts/runs.md": "https://docs.langchain.com/langsmith/assistants#execution", + "cloud/how-tos/assistant_versioning.md": "cloud/how-tos/configuration_cloud.md", + "cloud/concepts/runs.md": "concepts/assistants.md#execution", # hitl redirects - "how-tos/wait-user-input-functional.ipynb": "https://docs.langchain.com/oss/python/langgraph/functional-api", - "how-tos/review-tool-calls-functional.ipynb": "https://docs.langchain.com/oss/python/langgraph/functional-api", - "how-tos/create-react-agent-hitl.ipynb": "https://docs.langchain.com/oss/python/langgraph/interrupts", - "agents/human-in-the-loop.md": "https://docs.langchain.com/oss/python/langgraph/interrupts", - "how-tos/human_in_the_loop/dynamic_breakpoints.ipynb": "https://docs.langchain.com/oss/python/langgraph/interrupts", - "concepts/breakpoints.md": "https://docs.langchain.com/oss/python/langgraph/interrupts", - "how-tos/human_in_the_loop/breakpoints.md": "https://docs.langchain.com/oss/python/langgraph/interrupts", - "cloud/how-tos/human_in_the_loop_breakpoint.md": "https://docs.langchain.com/langsmith/add-human-in-the-loop", - "how-tos/human_in_the_loop/edit-graph-state.ipynb": "https://docs.langchain.com/oss/python/langgraph/use-time-travel", + "how-tos/wait-user-input-functional.ipynb": "how-tos/use-functional-api.md", + "how-tos/review-tool-calls-functional.ipynb": "how-tos/use-functional-api.md", + "how-tos/create-react-agent-hitl.ipynb": "how-tos/human_in_the_loop/add-human-in-the-loop.md", + "agents/human-in-the-loop.md": "how-tos/human_in_the_loop/add-human-in-the-loop.md", + "how-tos/human_in_the_loop/dynamic_breakpoints.ipynb": "how-tos/human_in_the_loop/breakpoints.md", + "concepts/breakpoints.md": "concepts/human_in_the_loop.md", + "how-tos/human_in_the_loop/breakpoints.md": "how-tos/human_in_the_loop/add-human-in-the-loop.md", + "cloud/how-tos/human_in_the_loop_breakpoint.md": "cloud/how-tos/add-human-in-the-loop.md", + "how-tos/human_in_the_loop/edit-graph-state.ipynb": "how-tos/human_in_the_loop/time-travel.md", # LGP mintlify migration redirects "tutorials/auth/getting_started.md": "https://docs.langchain.com/langsmith/auth", @@ -141,7 +141,7 @@ REDIRECT_MAP = { "concepts/langgraph_server.md": "https://docs.langchain.com/langsmith/langgraph-server", "concepts/langgraph_data_plane.md": "https://docs.langchain.com/langsmith/data-plane", "concepts/langgraph_control_plane.md": "https://docs.langchain.com/langsmith/control-plane", - "concepts/langgraph_cli.md": "https://docs.langchain.com/langsmith/cli", + "concepts/langgraph_cli.md": "https://docs.langchain.com/langsmith/langgraph-cli", "concepts/langgraph_studio.md": "https://docs.langchain.com/langsmith/studio", "cloud/how-tos/studio/quick_start.md": "https://docs.langchain.com/langsmith/quick-start-studio", "cloud/how-tos/invoke_studio.md": "https://docs.langchain.com/langsmith/use-studio#run-application", @@ -206,234 +206,6 @@ REDIRECT_MAP = { "cloud/reference/cli.md": "https://docs.langchain.com/langsmith/cli", "cloud/reference/env_var.md": "https://docs.langchain.com/langsmith/env-var", "troubleshooting/studio.md": "https://docs.langchain.com/langsmith/troubleshooting-studio", - - # LangGraph mintlify migration redirects - "index.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "agents/agents.md": "https://docs.langchain.com/oss/python/langchain/agents", - "concepts/why-langgraph.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "tutorials/get-started/1-build-basic-chatbot.md": "https://docs.langchain.com/oss/python/langgraph/quickstart", - "tutorials/get-started/2-add-tools.md": "https://docs.langchain.com/oss/python/langgraph/quickstart", - "tutorials/get-started/3-add-memory.md": "https://docs.langchain.com/oss/python/langgraph/quickstart", - "tutorials/get-started/4-human-in-the-loop.md": "https://docs.langchain.com/oss/python/langgraph/quickstart", - "tutorials/get-started/5-customize-state.md": "https://docs.langchain.com/oss/python/langgraph/quickstart", - "tutorials/get-started/6-time-travel.md": "https://docs.langchain.com/oss/python/langgraph/quickstart", - "tutorials/langsmith/local-server.md": "https://docs.langchain.com/oss/python/langgraph/local-server", - "tutorials/workflows.md": "https://docs.langchain.com/oss/python/langgraph/workflows-agents", - "concepts/agentic_concepts.md": "https://docs.langchain.com/oss/python/langgraph/workflows-agents", - "guides/index.md": "https://docs.langchain.com/oss/python/langchain/overview", - "agents/overview.md": "https://docs.langchain.com/oss/python/langchain/agents", - "agents/run_agents.md": "https://docs.langchain.com/oss/python/langgraph/quickstart", - "concepts/low_level.md": "https://docs.langchain.com/oss/python/langgraph/graph-api", - "how-tos/graph-api.md": "https://docs.langchain.com/oss/python/langgraph/graph-api", - "concepts/functional_api.md": "https://docs.langchain.com/oss/python/langgraph/functional-api", - "how-tos/use-functional-api.md": "https://docs.langchain.com/oss/python/langgraph/functional-api", - "concepts/pregel.md": "https://docs.langchain.com/oss/python/langgraph/pregel", - "concepts/streaming.md": "https://docs.langchain.com/oss/python/langgraph/streaming", - "how-tos/streaming.md": "https://docs.langchain.com/oss/python/langgraph/streaming", - "concepts/persistence.md": "https://docs.langchain.com/oss/python/langgraph/persistence", - "concepts/durable_execution.md": "https://docs.langchain.com/oss/python/langgraph/durable-execution", - "concepts/memory.md": "https://docs.langchain.com/oss/python/langgraph/memory", - "how-tos/memory/add-memory.md": "https://docs.langchain.com/oss/python/langgraph/add-memory", - "agents/context.md": "https://docs.langchain.com/oss/python/langgraph/add-memory", - "agents/models.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "concepts/tools.md": "https://docs.langchain.com/oss/python/langgraph/workflows-agents", - "how-tos/tool-calling.md": "https://docs.langchain.com/oss/python/langgraph/workflows-agents", - "concepts/human_in_the_loop.md": "https://docs.langchain.com/oss/python/langgraph/interrupts", - "how-tos/human_in_the_loop/add-human-in-the-loop.md": "https://docs.langchain.com/oss/python/langgraph/interrupts", - "concepts/time-travel.md": "https://docs.langchain.com/oss/python/langgraph/persistence", - "how-tos/human_in_the_loop/time-travel.md": "https://docs.langchain.com/oss/python/langgraph/use-time-travel", - "concepts/subgraphs.md": "https://docs.langchain.com/oss/python/langgraph/use-subgraphs", - "how-tos/subgraph.md": "https://docs.langchain.com/oss/python/langgraph/use-subgraphs", - "concepts/multi_agent.md": "https://docs.langchain.com/oss/python/langgraph/graph-api", - "agents/multi-agent.md": "https://docs.langchain.com/oss/python/langchain/multi-agent", - "how-tos/multi_agent.md": "https://docs.langchain.com/oss/python/langgraph/graph-api", - "concepts/mcp.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "agents/mcp.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "concepts/tracing.md": "https://docs.langchain.com/oss/python/langgraph/observability", - "how-tos/enable-tracing.md": "https://docs.langchain.com/oss/python/langgraph/observability", - "agents/evals.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "examples/index.md": "https://docs.langchain.com/oss/python/langgraph/case-studies", - "concepts/template_applications.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "tutorials/rag/langgraph_agentic_rag.md": "https://docs.langchain.com/oss/python/langgraph/agentic-rag", - "tutorials/multi_agent/agent_supervisor.md": "https://docs.langchain.com/oss/python/langgraph/workflows-agents", - "tutorials/sql/sql-agent.md": "https://docs.langchain.com/oss/python/langgraph/sql-agent", - "agents/ui.md": "https://docs.langchain.com/oss/python/langgraph/ui", - "how-tos/run-id-langsmith.md": "https://docs.langchain.com/oss/python/langgraph/observability", - "troubleshooting/errors/index.md": "https://docs.langchain.com/oss/python/langgraph/common-errors", - "troubleshooting/errors/INVALID_CHAT_HISTORY.md": "https://docs.langchain.com/oss/python/langgraph/INVALID_CHAT_HISTORY", - "troubleshooting/errors/INVALID_LICENSE.md": "https://docs.langchain.com/oss/python/langgraph/common-errors", - "adopters.md": "https://docs.langchain.com/oss/python/langgraph/case-studies", - "concepts/faq.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "agents/prebuilt.md": "https://docs.langchain.com/oss/python/langchain/agents", - "reference/index.md": "https://reference.langchain.com/python/langgraph/", - "reference/graphs.md": "https://reference.langchain.com/python/langgraph/graphs/", - "reference/func.md": "https://reference.langchain.com/python/langgraph/func/", - "reference/pregel.md": "https://reference.langchain.com/python/langgraph/pregel/", - "reference/checkpoints.md": "https://reference.langchain.com/python/langgraph/checkpoints/", - "reference/store.md": "https://reference.langchain.com/python/langgraph/store/", - "reference/cache.md": "https://reference.langchain.com/python/langgraph/cache/", - "reference/types.md": "https://reference.langchain.com/python/langgraph/types/", - "reference/runtime.md": "https://reference.langchain.com/python/langgraph/runtime/", - "reference/config.md": "https://reference.langchain.com/python/langgraph/config/", - "reference/errors.md": "https://reference.langchain.com/python/langgraph/errors/", - "reference/constants.md": "https://reference.langchain.com/python/langgraph/constants/", - "reference/channels.md": "https://reference.langchain.com/python/langgraph/channels/", - "reference/agents.md": "https://reference.langchain.com/python/langgraph/agents/", - "reference/supervisor.md": "https://reference.langchain.com/python/langgraph/supervisor/", - "reference/swarm.md": "https://reference.langchain.com/python/langgraph/swarm/", - "reference/mcp.md": "https://reference.langchain.com/python/langgraph/mcp/", - "cloud/reference/sdk/python_sdk_ref.md": "https://reference.langchain.com/python/platform/python_sdk/", - "reference/remote_graph.md": "https://reference.langchain.com/python/platform/remote_graph/", - - # additional exclude-search entries from mkdocs.yml - "additional-resources/index.md": "https://docs.langchain.com/oss/python/langchain/overview", - "cloud/concepts/cron_jobs.md": "https://docs.langchain.com/langsmith/cron-jobs", - "cloud/concepts/data_storage_and_privacy.md": "https://docs.langchain.com/langsmith/data-storage-and-privacy", - "cloud/concepts/webhooks.md": "https://docs.langchain.com/langsmith/use-webhooks", - "cloud/deployment/cloud.md": "https://docs.langchain.com/langsmith/cloud", - "cloud/deployment/custom_docker.md": "https://docs.langchain.com/langsmith/custom-docker", - "cloud/deployment/egress.md": "https://docs.langchain.com/langsmith/env-var", - "cloud/deployment/graph_rebuild.md": "https://docs.langchain.com/langsmith/graph-rebuild", - "cloud/deployment/self_hosted_control_plane.md": "https://docs.langchain.com/langsmith/hosting", - "cloud/deployment/self_hosted_data_plane.md": "https://docs.langchain.com/langsmith/hosting", - "cloud/deployment/semantic_search.md": "https://docs.langchain.com/langsmith/semantic-search", - "cloud/deployment/setup_javascript.md": "https://docs.langchain.com/langsmith/setup-javascript", - "cloud/deployment/setup_pyproject.md": "https://docs.langchain.com/langsmith/setup-pyproject", - "cloud/deployment/setup.md": "https://docs.langchain.com/langsmith/setup-app-requirements-txt", - "cloud/deployment/standalone_container.md": "https://docs.langchain.com/langsmith/docker", - "cloud/how-tos/add-human-in-the-loop.md": "https://docs.langchain.com/langsmith/add-human-in-the-loop", - "cloud/how-tos/background_run.md": "https://docs.langchain.com/langsmith/background-run", - "cloud/how-tos/clone_traces_studio.md": "https://docs.langchain.com/langsmith/observability", - "cloud/how-tos/configurable_headers.md": "https://docs.langchain.com/langsmith/configurable-headers", - "cloud/how-tos/configuration_cloud.md": "https://docs.langchain.com/langsmith/configuration-cloud", - "cloud/how-tos/cron_jobs.md": "https://docs.langchain.com/langsmith/cron-jobs", - "cloud/how-tos/datasets_studio.md": "https://docs.langchain.com/langsmith/use-studio", - "cloud/how-tos/enqueue_concurrent.md": "https://docs.langchain.com/langsmith/enqueue-concurrent", - "cloud/how-tos/generative_ui_react.md": "https://docs.langchain.com/langsmith/generative-ui-react", - "cloud/how-tos/human_in_the_loop_time_travel.md": "https://docs.langchain.com/langsmith/human-in-the-loop-time-travel", - "cloud/how-tos/interrupt_concurrent.md": "https://docs.langchain.com/langsmith/interrupt-concurrent", - "cloud/how-tos/invoke_studio.md": "https://docs.langchain.com/langsmith/use-studio", - "cloud/how-tos/iterate_graph_studio.md": "https://docs.langchain.com/langsmith/use-studio", - "cloud/how-tos/reject_concurrent.md": "https://docs.langchain.com/langsmith/reject-concurrent", - "cloud/how-tos/rollback_concurrent.md": "https://docs.langchain.com/langsmith/rollback-concurrent", - "cloud/how-tos/same-thread.md": "https://docs.langchain.com/langsmith/same-thread", - "cloud/how-tos/stateless_runs.md": "https://docs.langchain.com/langsmith/stateless-runs", - "cloud/how-tos/streaming.md": "https://docs.langchain.com/langsmith/streaming", - "cloud/how-tos/studio/manage_assistants.md": "https://docs.langchain.com/langsmith/use-studio", - "cloud/how-tos/studio/quick_start.md": "https://docs.langchain.com/langsmith/quick-start-studio", - "cloud/how-tos/studio/run_evals.md": "https://docs.langchain.com/langsmith/observability", - "cloud/how-tos/threads_studio.md": "https://docs.langchain.com/langsmith/use-threads", - "cloud/how-tos/use_stream_react.md": "https://docs.langchain.com/langsmith/use-stream-react", - "cloud/how-tos/use_threads.md": "https://docs.langchain.com/langsmith/use-threads", - "cloud/how-tos/webhooks.md": "https://docs.langchain.com/langsmith/use-webhooks", - "cloud/quick_start.md": "https://docs.langchain.com/langsmith/deployment-quickstart", - "cloud/reference/api/api_ref_control_plane.md": "https://docs.langchain.com/langsmith/api-ref-control-plane", - "cloud/reference/api/api_ref.md": "https://docs.langchain.com/langsmith/server-api-ref", - "cloud/reference/cli.md": "https://docs.langchain.com/langsmith/cli", - "cloud/reference/env_var.md": "https://docs.langchain.com/langsmith/env-var", - "cloud/reference/langgraph_server_changelog.md": "https://docs.langchain.com/langsmith/langgraph-server-changelog", - "cloud/reference/sdk/js_ts_sdk_ref.md": "https://reference.langchain.com/javascript/modules/langsmith.html", - "concepts/application_structure.md": "https://docs.langchain.com/langsmith/application-structure", - "concepts/assistants.md": "https://docs.langchain.com/langsmith/assistants", - "concepts/auth.md": "https://docs.langchain.com/langsmith/auth", - "concepts/deployment_options.md": "https://docs.langchain.com/langsmith/deployments", - "concepts/double_texting.md": "https://docs.langchain.com/langsmith/double-texting", - "concepts/faq.md": "https://docs.langchain.com/langsmith/faq", - "concepts/langgraph_cli.md": "https://docs.langchain.com/langsmith/cli", - "concepts/langgraph_cloud.md": "https://docs.langchain.com/langsmith/cloud", - "concepts/langgraph_components.md": "https://docs.langchain.com/langsmith/components", - "concepts/langgraph_control_plane.md": "https://docs.langchain.com/langsmith/control-plane", - "concepts/langgraph_data_plane.md": "https://docs.langchain.com/langsmith/data-plane", - "concepts/langgraph_platform.md": "https://docs.langchain.com/langsmith/home", - "concepts/langgraph_self_hosted_control_plane.md": "https://docs.langchain.com/langsmith/hosting", - "concepts/langgraph_self_hosted_data_plane.md": "https://docs.langchain.com/langsmith/hosting", - "concepts/langgraph_server.md": "https://docs.langchain.com/langsmith/langgraph-server", - "concepts/langgraph_standalone_container.md": "https://docs.langchain.com/langsmith/docker", - "concepts/langgraph_studio.md": "https://docs.langchain.com/langsmith/studio", - "concepts/plans.md": "https://docs.langchain.com/langsmith/home", - "concepts/scalability_and_resilience.md": "https://docs.langchain.com/langsmith/scalability-and-resilience", - "concepts/sdk.md": "https://docs.langchain.com/langsmith/sdk", - "concepts/server-mcp.md": "https://docs.langchain.com/langsmith/server-mcp", - "concepts/template_applications.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "concepts/why-langgraph.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "examples/index.md": "https://docs.langchain.com/oss/python/langgraph/case-studies", - "guides/index.md": "https://docs.langchain.com/oss/python/langchain/overview", - "how-tos/auth/custom_auth.md": "https://docs.langchain.com/langsmith/custom-auth", - "how-tos/auth/openapi_security.md": "https://docs.langchain.com/langsmith/openapi-security", - "how-tos/autogen-integration.md": "https://docs.langchain.com/langsmith/autogen-integration", - "how-tos/http/custom_lifespan.md": "https://docs.langchain.com/langsmith/custom-lifespan", - "how-tos/http/custom_middleware.md": "https://docs.langchain.com/langsmith/custom-middleware", - "how-tos/http/custom_routes.md": "https://docs.langchain.com/langsmith/custom-routes", - "how-tos/ttl/configure_ttl.md": "https://docs.langchain.com/langsmith/configure-ttl", - "how-tos/use-remote-graph.md": "https://docs.langchain.com/langsmith/use-remote-graph", - "index.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "snippets/chat_model_tabs.md": "https://docs.langchain.com/oss/python/langchain/overview", - "troubleshooting/errors/GRAPH_RECURSION_LIMIT.md": "https://docs.langchain.com/oss/python/langgraph/GRAPH_RECURSION_LIMIT", - "troubleshooting/errors/index.md": "https://docs.langchain.com/oss/python/langgraph/common-errors", - "troubleshooting/errors/INVALID_CHAT_HISTORY.md": "https://docs.langchain.com/oss/python/langgraph/INVALID_CHAT_HISTORY", - "troubleshooting/errors/INVALID_CONCURRENT_GRAPH_UPDATE.md": "https://docs.langchain.com/oss/python/langgraph/INVALID_CONCURRENT_GRAPH_UPDATE", - "troubleshooting/errors/INVALID_GRAPH_NODE_RETURN_VALUE.md": "https://docs.langchain.com/oss/python/langgraph/INVALID_GRAPH_NODE_RETURN_VALUE", - "troubleshooting/errors/INVALID_LICENSE.md": "https://docs.langchain.com/oss/python/langgraph/common-errors", - "troubleshooting/errors/MULTIPLE_SUBGRAPHS.md": "https://docs.langchain.com/oss/python/langgraph/MULTIPLE_SUBGRAPHS", - "troubleshooting/studio.md": "https://docs.langchain.com/langsmith/troubleshooting-studio", - "tutorials/auth/add_auth_server.md": "https://docs.langchain.com/langsmith/add-auth-server", - "tutorials/auth/getting_started.md": "https://docs.langchain.com/langsmith/auth", - "tutorials/auth/resource_auth.md": "https://docs.langchain.com/langsmith/resource-auth", - "agents/agents.md": "https://docs.langchain.com/oss/python/langchain/agents", - "concepts/why-langgraph.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "tutorials/langsmith/local-server.md": "https://docs.langchain.com/oss/python/langgraph/local-server", - "tutorials/workflows.md": "https://docs.langchain.com/oss/python/langgraph/workflows-agents", - "concepts/agentic_concepts.md": "https://docs.langchain.com/oss/python/langgraph/workflows-agents", - "guides/index.md": "https://docs.langchain.com/oss/python/langchain/overview", - "agents/overview.md": "https://docs.langchain.com/oss/python/langchain/agents", - "concepts/agentic_concepts.md": "https://docs.langchain.com/oss/python/langgraph/workflows-agents", - "agents/run_agents.md": "https://docs.langchain.com/oss/python/langgraph/quickstart", - "concepts/low_level.md": "https://docs.langchain.com/oss/python/langgraph/graph-api", - "how-tos/graph-api.md": "https://docs.langchain.com/oss/python/langgraph/graph-api", - "concepts/functional_api.md": "https://docs.langchain.com/oss/python/langgraph/functional-api", - "how-tos/use-functional-api.md": "https://docs.langchain.com/oss/python/langgraph/functional-api", - "concepts/pregel.md": "https://docs.langchain.com/oss/python/langgraph/pregel", - "concepts/streaming.md": "https://docs.langchain.com/oss/python/langgraph/streaming", - "how-tos/streaming.md": "https://docs.langchain.com/oss/python/langgraph/streaming", - "concepts/persistence.md": "https://docs.langchain.com/oss/python/langgraph/persistence", - "concepts/durable_execution.md": "https://docs.langchain.com/oss/python/langgraph/durable-execution", - "concepts/memory.md": "https://docs.langchain.com/oss/python/langgraph/memory", - "how-tos/memory/add-memory.md": "https://docs.langchain.com/oss/python/langgraph/add-memory", - "agents/context.md": "https://docs.langchain.com/oss/python/langgraph/add-memory", - "agents/models.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "concepts/tools.md": "https://docs.langchain.com/oss/python/langgraph/workflows-agents", - "how-tos/tool-calling.md": "https://docs.langchain.com/oss/python/langgraph/workflows-agents", - "concepts/human_in_the_loop.md": "https://docs.langchain.com/oss/python/langgraph/interrupts", - "how-tos/human_in_the_loop/add-human-in-the-loop.md": "https://docs.langchain.com/oss/python/langgraph/interrupts", - "concepts/time-travel.md": "https://docs.langchain.com/oss/python/langgraph/persistence", - "how-tos/human_in_the_loop/time-travel.md": "https://docs.langchain.com/oss/python/langgraph/use-time-travel", - "concepts/subgraphs.md": "https://docs.langchain.com/oss/python/langgraph/use-subgraphs", - "how-tos/subgraph.md": "https://docs.langchain.com/oss/python/langgraph/use-subgraphs", - "concepts/multi_agent.md": "https://docs.langchain.com/oss/python/langgraph/graph-api", - "agents/multi-agent.md": "https://docs.langchain.com/oss/python/langchain/multi-agent", - "how-tos/multi_agent.md": "https://docs.langchain.com/oss/python/langgraph/graph-api", - "concepts/mcp.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "agents/mcp.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "concepts/tracing.md": "https://docs.langchain.com/oss/python/langgraph/observability", - "how-tos/enable-tracing.md": "https://docs.langchain.com/oss/python/langgraph/observability", - "agents/evals.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "examples/index.md": "https://docs.langchain.com/oss/python/langgraph/case-studies", - "concepts/template_applications.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "tutorials/rag/langgraph_agentic_rag.md": "https://docs.langchain.com/oss/python/langgraph/agentic-rag", - "tutorials/multi_agent/agent_supervisor.md": "https://docs.langchain.com/oss/python/langgraph/workflows-agents", - "tutorials/sql/sql-agent.md": "https://docs.langchain.com/oss/python/langgraph/sql-agent", - "agents/ui.md": "https://docs.langchain.com/oss/python/langgraph/ui", - "how-tos/run-id-langsmith.md": "https://docs.langchain.com/oss/python/langgraph/observability", - "troubleshooting/errors/index.md": "https://docs.langchain.com/oss/python/langgraph/common-errors", - "troubleshooting/errors/GRAPH_RECURSION_LIMIT.md": "https://docs.langchain.com/oss/python/langgraph/GRAPH_RECURSION_LIMIT", - "troubleshooting/errors/INVALID_CONCURRENT_GRAPH_UPDATE.md": "https://docs.langchain.com/oss/python/langgraph/INVALID_CONCURRENT_GRAPH_UPDATE", - "troubleshooting/errors/INVALID_GRAPH_NODE_RETURN_VALUE.md": "https://docs.langchain.com/oss/python/langgraph/INVALID_GRAPH_NODE_RETURN_VALUE", - "troubleshooting/errors/MULTIPLE_SUBGRAPHS.md": "https://docs.langchain.com/oss/python/langgraph/MULTIPLE_SUBGRAPHS", - "troubleshooting/errors/INVALID_CHAT_HISTORY.md": "https://docs.langchain.com/oss/python/langgraph/INVALID_CHAT_HISTORY", - "troubleshooting/errors/INVALID_LICENSE.md": "https://docs.langchain.com/oss/python/langgraph/common-errors", - "adopters.md": "https://docs.langchain.com/oss/python/langgraph/case-studies", - "concepts/faq.md": "https://docs.langchain.com/oss/python/langgraph/overview", - "agents/prebuilt.md": "https://docs.langchain.com/oss/python/langchain/agents", } @@ -788,16 +560,10 @@ def on_post_page(html: str, page: Page, config: MkDocsConfig) -> str: # Create HTML files for redirects after site dir has been built def on_post_build(config): use_directory_urls = config.get("use_directory_urls") - site_dir = config["site_dir"] - - # Track which paths have explicit redirects - redirected_paths = set() - - # Process explicit redirects from REDIRECT_MAP for page_old, page_new in REDIRECT_MAP.items(): # Convert .ipynb to .md for path calculation page_old = page_old.replace(".ipynb", ".md") - + # Calculate the HTML path for the old page (whether it exists or not) if use_directory_urls: # With directory URLs: /path/to/page/ becomes /path/to/page/index.html @@ -811,18 +577,15 @@ def on_post_build(config): old_html_path = page_old[:-3] + ".html" else: old_html_path = page_old + ".html" - - # Track this path as redirected - redirected_paths.add(old_html_path) - + if isinstance(page_new, str) and page_new.startswith("http"): # Handle external redirects - _write_html(site_dir, old_html_path, page_new) + _write_html(config["site_dir"], old_html_path, page_new) else: # Handle internal redirects page_new = page_new.replace(".ipynb", ".md") page_new_before_hash, hash, suffix = page_new.partition("#") - + # Try to get the new path using File class, but fallback to manual calculation try: new_html_path = File(page_new_before_hash, "", "", True).url @@ -844,70 +607,5 @@ def on_post_build(config): else: new_html_path = page_new_before_hash + ".html" new_html_path += hash + suffix - - _write_html(site_dir, old_html_path, new_html_path) - - # Create root index.html redirect - root_redirect_html = """ - - - - Redirecting to LangGraph Documentation - - - - - - -

Documentation has moved

-

The LangGraph documentation has moved to docs.langchain.com.

-

Redirecting you now...

- - -""" - - root_index_path = os.path.join(site_dir, "index.html") - with open(root_index_path, "w", encoding="utf-8") as f: - f.write(root_redirect_html) - - # Create 404.html for GitHub Pages catch-all redirect - # GitHub Pages will serve this for any unmapped URLs - notfound_redirect_html = """ - - - - Redirecting to LangGraph Documentation - - - - - - -

Page Not Found

-

This page has moved to the new LangGraph documentation at docs.langchain.com.

-

Redirecting you now...

- - -""" - - notfound_path = os.path.join(site_dir, "404.html") - with open(notfound_path, "w", encoding="utf-8") as f: - f.write(notfound_redirect_html) - - # Create server-side catch-all redirect file for Netlify/Cloudflare Pages - # This handles any pages not explicitly mapped in REDIRECT_MAP - # Note: This won't work on GitHub Pages, but kept for potential future use - redirects_content = """# Netlify/Cloudflare Pages redirect rules -# Specific redirects are handled by individual HTML redirect pages -# This is the catch-all for any unmapped pages - -# Catch-all: redirect any page not explicitly mapped -/* https://docs.langchain.com/oss/python/langgraph/overview 301 -""" - - redirects_path = os.path.join(site_dir, "_redirects") - with open(redirects_path, "w", encoding="utf-8") as f: - f.write(redirects_content) + + _write_html(config["site_dir"], old_html_path, new_html_path) diff --git a/docs/docs/tutorials/langgraph-platform/local-server.md b/docs/docs/tutorials/langgraph-platform/local-server.md index 971ab74b5..f749f248d 100644 --- a/docs/docs/tutorials/langgraph-platform/local-server.md +++ b/docs/docs/tutorials/langgraph-platform/local-server.md @@ -294,9 +294,9 @@ Now that you have a LangGraph app running locally, take your journey further by :::python - [Python SDK Reference](../../cloud/reference/sdk/python_sdk_ref.md): Explore the Python SDK API Reference. -::: + ::: :::js - [JS/TS SDK Reference](../../cloud/reference/sdk/js_ts_sdk_ref.md): Explore the JS/TS SDK API Reference. -::: + ::: diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index a15a4b586..9bf95b065 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -149,67 +149,6 @@ plugins: - tutorials/auth/add_auth_server.md - tutorials/auth/getting_started.md - tutorials/auth/resource_auth.md - - agents/agents.md - - concepts/why-langgraph.md - - tutorials/get-started/1-build-basic-chatbot.md - - tutorials/get-started/2-add-tools.md - - tutorials/get-started/3-add-memory.md - - tutorials/get-started/4-human-in-the-loop.md - - tutorials/get-started/5-customize-state.md - - tutorials/get-started/6-time-travel.md - - tutorials/langgraph-platform/local-server.md - - tutorials/workflows.md - - concepts/agentic_concepts.md - - guides/index.md - - agents/overview.md - - agents/run_agents.md - - concepts/low_level.md - - how-tos/graph-api.md - - concepts/functional_api.md - - how-tos/use-functional-api.md - - concepts/pregel.md - - concepts/streaming.md - - how-tos/streaming.md - - concepts/persistence.md - - concepts/durable_execution.md - - concepts/memory.md - - how-tos/memory/add-memory.md - - agents/context.md - - agents/models.md - - concepts/tools.md - - how-tos/tool-calling.md - - concepts/human_in_the_loop.md - - how-tos/human_in_the_loop/add-human-in-the-loop.md - - concepts/time-travel.md - - how-tos/human_in_the_loop/time-travel.md - - concepts/subgraphs.md - - how-tos/subgraph.md - - concepts/multi_agent.md - - agents/multi-agent.md - - how-tos/multi_agent.md - - concepts/mcp.md - - agents/mcp.md - - concepts/tracing.md - - how-tos/enable-tracing.md - - agents/evals.md - - examples/index.md - - concepts/template_applications.md # TODO: make tutorial - - tutorials/rag/langgraph_agentic_rag.md - - tutorials/multi_agent/agent_supervisor.md - - tutorials/sql/sql-agent.md - - agents/ui.md - - how-tos/run-id-langsmith.md - - troubleshooting/errors/index.md - - troubleshooting/errors/GRAPH_RECURSION_LIMIT.md - - troubleshooting/errors/INVALID_CONCURRENT_GRAPH_UPDATE.md - - troubleshooting/errors/INVALID_GRAPH_NODE_RETURN_VALUE.md - - troubleshooting/errors/MULTIPLE_SUBGRAPHS.md - - troubleshooting/errors/INVALID_CHAT_HISTORY.md - - troubleshooting/errors/INVALID_LICENSE.md - - adopters.md - - concepts/faq.md - - agents/prebuilt.md # NOTE: prebuilt.md is auto-generated by `make build-prebuilt` - - tags - include-markdown - mkdocstrings: @@ -247,6 +186,75 @@ plugins: - "!^_" nav: + - Get started: + - index.md + - Quickstarts: + - Start with a prebuilt agent: agents/agents.md + - Build a custom workflow: + - concepts/why-langgraph.md + - 1. Build a basic chatbot: tutorials/get-started/1-build-basic-chatbot.md + - 2. Add tools: tutorials/get-started/2-add-tools.md + - 3. Add memory: tutorials/get-started/3-add-memory.md + - 4. Add human-in-the-loop: tutorials/get-started/4-human-in-the-loop.md + - 5. Customize state: tutorials/get-started/5-customize-state.md + - 6. Time travel: tutorials/get-started/6-time-travel.md + - Run a local server: tutorials/langgraph-platform/local-server.md + - General concepts: + - Workflows & agents: tutorials/workflows.md + - Agent architectures: concepts/agentic_concepts.md + + - Guides: + - guides/index.md + - Agent development: + - Overview: agents/overview.md + - Run an agent: agents/run_agents.md + - LangGraph APIs: + - Graph API: + - Overview: concepts/low_level.md + - Use the Graph API: how-tos/graph-api.md + - Functional API: + - Overview: concepts/functional_api.md + - Use the Functional API: how-tos/use-functional-api.md + - Runtime: concepts/pregel.md + - Core capabilities: + - Streaming: + - Overview: concepts/streaming.md + - Stream outputs: how-tos/streaming.md + - Persistence: + - Overview: concepts/persistence.md + - Durable execution: + - Overview: concepts/durable_execution.md + - Memory: + - Overview: concepts/memory.md + - Add memory: how-tos/memory/add-memory.md + - Context: + - Add context: agents/context.md + - Models: + - Configure model: agents/models.md + - Tools: + - Overview: concepts/tools.md + - Call tools: how-tos/tool-calling.md + - Human-in-the-loop: + - Overview: concepts/human_in_the_loop.md + - Add human intervention: how-tos/human_in_the_loop/add-human-in-the-loop.md + - Time travel: + - Overview: concepts/time-travel.md + - Use time travel: how-tos/human_in_the_loop/time-travel.md + - Subgraphs: + - Overview: concepts/subgraphs.md + - Use subgraphs: how-tos/subgraph.md + - Multi-agent: + - Overview: concepts/multi_agent.md + - Prebuilt implementation: agents/multi-agent.md + - Custom implementation: how-tos/multi_agent.md + - MCP: + - Overview: concepts/mcp.md + - Use MCP: agents/mcp.md + - Tracing: + - Overview: concepts/tracing.md + - Enable tracing: how-tos/enable-tracing.md + - Evaluate performance: agents/evals.md + - Reference: - reference/index.md - LangGraph: @@ -270,7 +278,35 @@ nav: - LangGraph Platform: - SDK (Python): cloud/reference/sdk/python_sdk_ref.md - SDK (JS/TS): https://langchain-ai.github.io/langgraphjs/reference/modules/sdk.html - - RemoteGraph: reference/remote_graph.md + - RemoteGraph: reference/remote_graph.md + + - Examples: + - examples/index.md + - Template applications: concepts/template_applications.md # TODO: make tutorial + - Agentic RAG: tutorials/rag/langgraph_agentic_rag.md + - Agent Supervisor: tutorials/multi_agent/agent_supervisor.md + - SQL agent: tutorials/sql/sql-agent.md + - Prebuilt chat UI: agents/ui.md + - Graph runs in LangSmith: how-tos/run-id-langsmith.md + + - Additional resources: + - additional-resources/index.md + - agents/prebuilt.md # NOTE: prebuilt.md is auto-generated by `make build-prebuilt` + - LangGraph Academy course: https://academy.langchain.com/courses/intro-to-langgraph + - Case studies: adopters.md + - concepts/faq.md + - llms.txt: llms-txt-overview.md + - LangChain Forum: https://forum.langchain.com/ + - Troubleshooting: + - Errors: + - troubleshooting/errors/index.md + - troubleshooting/errors/GRAPH_RECURSION_LIMIT.md + - troubleshooting/errors/INVALID_CONCURRENT_GRAPH_UPDATE.md + - troubleshooting/errors/INVALID_GRAPH_NODE_RETURN_VALUE.md + - troubleshooting/errors/MULTIPLE_SUBGRAPHS.md + - troubleshooting/errors/INVALID_CHAT_HISTORY.md + - troubleshooting/errors/INVALID_LICENSE.md + markdown_extensions: - abbr