diff --git a/.agents/skills/nemoclaw-configure-inference/SKILL.md b/.agents/skills/nemoclaw-configure-inference/SKILL.md index 8a82fe3b462..d33643a5789 100644 --- a/.agents/skills/nemoclaw-configure-inference/SKILL.md +++ b/.agents/skills/nemoclaw-configure-inference/SKILL.md @@ -1,16 +1,72 @@ --- name: nemoclaw-configure-inference -description: Changes the active inference model without restarting the sandbox. Use when switching inference providers, changing the model runtime, or reconfiguring inference routing. +description: Lists all inference providers offered during NemoClaw onboarding. Use when explaining which providers are available, what the onboard wizard presents, or how inference routing works. Changes the active inference model without restarting the sandbox. Use when switching inference providers, changing the model runtime, or reconfiguring inference routing. Connects NemoClaw to a local inference server. Use when setting up Ollama, vLLM, TensorRT-LLM, NIM, or any OpenAI-compatible local model server with NemoClaw. --- # NemoClaw Configure Inference -Changes the active inference model without restarting the sandbox. Use when switching inference providers, changing the model runtime, or reconfiguring inference routing. +Lists all inference providers offered during NemoClaw onboarding. Use when explaining which providers are available, what the onboard wizard presents, or how inference routing works. + +## Context + +NemoClaw supports multiple inference providers. +During onboarding, the `nemoclaw onboard` wizard presents a numbered list of providers to choose from. +Your selection determines where the agent's inference traffic is routed. + +## How Inference Routing Works + +The agent inside the sandbox talks to `inference.local`. +It never connects to a provider directly. +OpenShell intercepts inference traffic on the host and forwards it to the provider you selected. + +Provider credentials stay on the host. +The sandbox does not receive your API key. + +## Provider Options + +The onboard wizard presents the following provider options by default. +The first six are always available. +Ollama appears when it is installed or running on the host. + +| Option | Description | Curated models | +|--------|-------------|----------------| +| NVIDIA Endpoints | Routes to models hosted on [build.nvidia.com](https://build.nvidia.com). You can also enter any model ID from the catalog. Set `NVIDIA_API_KEY`. | Nemotron 3 Super 120B, Kimi K2.5, GLM-5, MiniMax M2.5, GPT-OSS 120B | +| OpenAI | Routes to the OpenAI API. Set `OPENAI_API_KEY`. | `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`, `gpt-5.4-pro-2026-03-05` | +| Other OpenAI-compatible endpoint | Routes to any server that implements `/v1/chat/completions`. The wizard prompts for a base URL and model name. Works with OpenRouter, LocalAI, llama.cpp, or any compatible proxy. Set `COMPATIBLE_API_KEY`. | You provide the model name. | +| Anthropic | Routes to the Anthropic Messages API. Set `ANTHROPIC_API_KEY`. | `claude-sonnet-4-6`, `claude-haiku-4-5`, `claude-opus-4-6` | +| Other Anthropic-compatible endpoint | Routes to any server that implements the Anthropic Messages API (`/v1/messages`). The wizard prompts for a base URL and model name. Set `COMPATIBLE_ANTHROPIC_API_KEY`. | You provide the model name. | +| Google Gemini | Routes to Google's OpenAI-compatible endpoint. Set `GEMINI_API_KEY`. | `gemini-3.1-pro-preview`, `gemini-3.1-flash-lite-preview`, `gemini-3-flash-preview`, `gemini-2.5-pro`, `gemini-2.5-flash`, `gemini-2.5-flash-lite` | +| Local Ollama | Routes to a local Ollama instance on `localhost:11434`. NemoClaw detects installed models, offers starter models if none are present, pulls and warms the selected model, and validates it. | Selected during onboarding. For more information, refer to Use a Local Inference Server (see the `nemoclaw-configure-inference` skill). | + +## Experimental Options + +The following local inference options require `NEMOCLAW_EXPERIMENTAL=1` and, when prerequisites are met, appear in the onboarding selection list. + +| Option | Condition | Notes | +|--------|-----------|-------| +| Local NVIDIA NIM | NIM-capable GPU detected | Pulls and manages a NIM container. | +| Local vLLM | vLLM running on `localhost:8000` | Auto-detects the loaded model. | + +For setup instructions, refer to Use a Local Inference Server (see the `nemoclaw-configure-inference` skill). + +## Validation + +NemoClaw validates the selected provider and model before creating the sandbox. +If validation fails, the wizard returns to provider selection. + +| Provider type | Validation method | +|---|---| +| OpenAI-compatible | Tries `/responses` first, then `/chat/completions`. | +| Anthropic-compatible | Tries `/v1/messages`. | +| NVIDIA Endpoints (manual model entry) | Validates the model name against the catalog API. | +| Compatible endpoints | Sends a real inference request because many proxies do not expose a `/models` endpoint. | ## Prerequisites - A running NemoClaw sandbox. - The OpenShell CLI on your `PATH`. +- NemoClaw installed. +- A local model server running, or Ollama installed. The NemoClaw onboard wizard can also start Ollama for you. Change the active inference model while the sandbox is running. No restart is required. @@ -80,6 +136,200 @@ The output includes the active provider, model, and endpoint. - The sandbox continues to use `inference.local`. - Runtime switching changes the OpenShell route. It does not rewrite your stored credentials. +--- + +NemoClaw can route inference to a model server running on your machine instead of a cloud API. +This page covers Ollama, compatible-endpoint paths for other servers, and two experimental options for vLLM and NVIDIA NIM. + +All approaches use the same `inference.local` routing model. +The agent inside the sandbox never connects to your model server directly. +OpenShell intercepts inference traffic and forwards it to the local endpoint you configure. + +## Step 4: Ollama + +Ollama is the default local inference option. +The onboard wizard detects Ollama automatically when it is installed or running on the host. + +If Ollama is not running, NemoClaw starts it for you. +On macOS, the wizard also offers to install Ollama through Homebrew if it is not present. + +Run the onboard wizard. + +```console +$ nemoclaw onboard +``` + +Select **Local Ollama** from the provider list. +NemoClaw lists installed models or offers starter models if none are installed. +It pulls the selected model, loads it into memory, and validates it before continuing. + +### Linux with Docker + +On Linux hosts that run NemoClaw with Docker, the sandbox reaches Ollama through +`http://host.openshell.internal:11434`, not the host shell's `localhost` socket. +If Ollama is already running, make sure it listens on `0.0.0.0:11434` instead of +`127.0.0.1:11434`. + +```console +$ OLLAMA_HOST=0.0.0.0:11434 ollama serve +``` + +If Ollama only binds loopback, NemoClaw can detect it on the host, but the +sandbox-side validation step fails because containers cannot reach it. + +### Non-Interactive Setup + +```console +$ NEMOCLAW_PROVIDER=ollama \ + NEMOCLAW_MODEL=qwen2.5:14b \ + nemoclaw onboard --non-interactive +``` + +If `NEMOCLAW_MODEL` is not set, NemoClaw selects a default model based on available memory. + +| Variable | Purpose | +|---|---| +| `NEMOCLAW_PROVIDER` | Set to `ollama`. | +| `NEMOCLAW_MODEL` | Ollama model tag to use. Optional. | + +## Step 5: OpenAI-Compatible Server + +This option works with any server that implements `/v1/chat/completions`, including vLLM, TensorRT-LLM, llama.cpp, LocalAI, and others. + +Start your model server. +The examples below use vLLM, but any OpenAI-compatible server works. + +```console +$ vllm serve meta-llama/Llama-3.1-8B-Instruct --port 8000 +``` + +Run the onboard wizard. + +```console +$ nemoclaw onboard +``` + +When the wizard asks you to choose an inference provider, select **Other OpenAI-compatible endpoint**. +Enter the base URL of your local server, for example `http://localhost:8000/v1`. + +The wizard prompts for an API key. +If your server does not require authentication, enter any non-empty string (for example, `dummy`). + +NemoClaw validates the endpoint by sending a test inference request before continuing. + +### Non-Interactive Setup + +Set the following environment variables for scripted or CI/CD deployments. + +```console +$ NEMOCLAW_PROVIDER=custom \ + NEMOCLAW_ENDPOINT_URL=http://localhost:8000/v1 \ + NEMOCLAW_MODEL=meta-llama/Llama-3.1-8B-Instruct \ + COMPATIBLE_API_KEY=dummy \ + nemoclaw onboard --non-interactive +``` + +| Variable | Purpose | +|---|---| +| `NEMOCLAW_PROVIDER` | Set to `custom` for an OpenAI-compatible endpoint. | +| `NEMOCLAW_ENDPOINT_URL` | Base URL of the local server. | +| `NEMOCLAW_MODEL` | Model ID as reported by the server. | +| `COMPATIBLE_API_KEY` | API key for the endpoint. Use any non-empty value if authentication is not required. | + +## Step 6: Anthropic-Compatible Server + +If your local server implements the Anthropic Messages API (`/v1/messages`), choose **Other Anthropic-compatible endpoint** during onboarding instead. + +```console +$ nemoclaw onboard +``` + +For non-interactive setup, use `NEMOCLAW_PROVIDER=anthropicCompatible` and set `COMPATIBLE_ANTHROPIC_API_KEY`. + +```console +$ NEMOCLAW_PROVIDER=anthropicCompatible \ + NEMOCLAW_ENDPOINT_URL=http://localhost:8080 \ + NEMOCLAW_MODEL=my-model \ + COMPATIBLE_ANTHROPIC_API_KEY=dummy \ + nemoclaw onboard --non-interactive +``` + +## Step 7: vLLM Auto-Detection (Experimental) + +When vLLM is already running on `localhost:8000`, NemoClaw can detect it automatically and query the `/v1/models` endpoint to determine the loaded model. + +Set the experimental flag and run onboard. + +```console +$ NEMOCLAW_EXPERIMENTAL=1 nemoclaw onboard +``` + +Select **Local vLLM [experimental]** from the provider list. +NemoClaw detects the running model and validates the endpoint. + +> **Note:** NemoClaw forces the `chat/completions` API path for vLLM. +> The vLLM `/v1/responses` endpoint does not run the `--tool-call-parser`, so tool calls arrive as raw text. + +### Non-Interactive Setup + +```console +$ NEMOCLAW_EXPERIMENTAL=1 \ + NEMOCLAW_PROVIDER=vllm \ + nemoclaw onboard --non-interactive +``` + +NemoClaw auto-detects the model from the running vLLM instance. +To override the model, set `NEMOCLAW_MODEL`. + +## Step 8: NVIDIA NIM (Experimental) + +NemoClaw can pull, start, and manage a NIM container on hosts with a NIM-capable NVIDIA GPU. + +Set the experimental flag and run onboard. + +```console +$ NEMOCLAW_EXPERIMENTAL=1 nemoclaw onboard +``` + +Select **Local NVIDIA NIM [experimental]** from the provider list. +NemoClaw filters available models by GPU VRAM, pulls the NIM container image, starts it, and waits for it to become healthy before continuing. + +> **Note:** NIM uses vLLM internally. +> The same `chat/completions` API path restriction applies. + +### Non-Interactive Setup + +```console +$ NEMOCLAW_EXPERIMENTAL=1 \ + NEMOCLAW_PROVIDER=nim \ + nemoclaw onboard --non-interactive +``` + +To select a specific model, set `NEMOCLAW_MODEL`. + +## Step 9: Verify the Configuration + +After onboarding completes, confirm the active provider and model. + +```console +$ nemoclaw status +``` + +The output shows the provider label (for example, "Local vLLM" or "Other OpenAI-compatible endpoint") and the active model. + +## Step 10: Switch Models at Runtime + +You can change the model without re-running onboard. +Refer to Switch Inference Models (see the `nemoclaw-configure-inference` skill) for the full procedure. + +For compatible endpoints, the command is: + +```console +$ openshell inference set --provider compatible-endpoint --model +``` + +If the provider itself needs to change (for example, switching from vLLM to a cloud API), rerun `nemoclaw onboard`. + ## Related Skills -- `nemoclaw-reference` — Inference Profiles for full profile configuration details +- `nemoclaw-get-started` — Quickstart for first-time installation diff --git a/.agents/skills/nemoclaw-configure-inference/references/inference-options.md b/.agents/skills/nemoclaw-configure-inference/references/inference-options.md new file mode 100644 index 00000000000..b4224b7283f --- /dev/null +++ b/.agents/skills/nemoclaw-configure-inference/references/inference-options.md @@ -0,0 +1,58 @@ +# Inference Options + +NemoClaw supports multiple inference providers. +During onboarding, the `nemoclaw onboard` wizard presents a numbered list of providers to choose from. +Your selection determines where the agent's inference traffic is routed. + +## How Inference Routing Works + +The agent inside the sandbox talks to `inference.local`. +It never connects to a provider directly. +OpenShell intercepts inference traffic on the host and forwards it to the provider you selected. + +Provider credentials stay on the host. +The sandbox does not receive your API key. + +## Provider Options + +The onboard wizard presents the following provider options by default. +The first six are always available. +Ollama appears when it is installed or running on the host. + +| Option | Description | Curated models | +|--------|-------------|----------------| +| NVIDIA Endpoints | Routes to models hosted on [build.nvidia.com](https://build.nvidia.com). You can also enter any model ID from the catalog. Set `NVIDIA_API_KEY`. | Nemotron 3 Super 120B, Kimi K2.5, GLM-5, MiniMax M2.5, GPT-OSS 120B | +| OpenAI | Routes to the OpenAI API. Set `OPENAI_API_KEY`. | `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`, `gpt-5.4-pro-2026-03-05` | +| Other OpenAI-compatible endpoint | Routes to any server that implements `/v1/chat/completions`. The wizard prompts for a base URL and model name. Works with OpenRouter, LocalAI, llama.cpp, or any compatible proxy. Set `COMPATIBLE_API_KEY`. | You provide the model name. | +| Anthropic | Routes to the Anthropic Messages API. Set `ANTHROPIC_API_KEY`. | `claude-sonnet-4-6`, `claude-haiku-4-5`, `claude-opus-4-6` | +| Other Anthropic-compatible endpoint | Routes to any server that implements the Anthropic Messages API (`/v1/messages`). The wizard prompts for a base URL and model name. Set `COMPATIBLE_ANTHROPIC_API_KEY`. | You provide the model name. | +| Google Gemini | Routes to Google's OpenAI-compatible endpoint. Set `GEMINI_API_KEY`. | `gemini-3.1-pro-preview`, `gemini-3.1-flash-lite-preview`, `gemini-3-flash-preview`, `gemini-2.5-pro`, `gemini-2.5-flash`, `gemini-2.5-flash-lite` | +| Local Ollama | Routes to a local Ollama instance on `localhost:11434`. NemoClaw detects installed models, offers starter models if none are present, pulls and warms the selected model, and validates it. | Selected during onboarding. For more information, refer to Use a Local Inference Server (see the `nemoclaw-configure-inference` skill). | + +## Experimental Options + +The following local inference options require `NEMOCLAW_EXPERIMENTAL=1` and, when prerequisites are met, appear in the onboarding selection list. + +| Option | Condition | Notes | +|--------|-----------|-------| +| Local NVIDIA NIM | NIM-capable GPU detected | Pulls and manages a NIM container. | +| Local vLLM | vLLM running on `localhost:8000` | Auto-detects the loaded model. | + +For setup instructions, refer to Use a Local Inference Server (see the `nemoclaw-configure-inference` skill). + +## Validation + +NemoClaw validates the selected provider and model before creating the sandbox. +If validation fails, the wizard returns to provider selection. + +| Provider type | Validation method | +|---|---| +| OpenAI-compatible | Tries `/responses` first, then `/chat/completions`. | +| Anthropic-compatible | Tries `/v1/messages`. | +| NVIDIA Endpoints (manual model entry) | Validates the model name against the catalog API. | +| Compatible endpoints | Sends a real inference request because many proxies do not expose a `/models` endpoint. | + +## Next Steps + +- Use a Local Inference Server (see the `nemoclaw-configure-inference` skill) for Ollama, vLLM, NIM, and compatible-endpoint setup details. +- Switch Inference Models (see the `nemoclaw-configure-inference` skill) for changing the model at runtime without re-onboarding. diff --git a/.agents/skills/nemoclaw-deploy-remote/SKILL.md b/.agents/skills/nemoclaw-deploy-remote/SKILL.md index 84b8f912994..08ab0bd537a 100644 --- a/.agents/skills/nemoclaw-deploy-remote/SKILL.md +++ b/.agents/skills/nemoclaw-deploy-remote/SKILL.md @@ -75,7 +75,27 @@ Run a test agent prompt inside the remote sandbox: $ openclaw agent --agent main --local -m "Hello from the remote sandbox" --session-id test ``` -## Step 6: GPU Configuration +## Step 6: Remote Dashboard Access + +The NemoClaw dashboard validates the browser origin against an allowlist baked +into the sandbox image at build time. By default the allowlist only contains +`http://127.0.0.1:18789`. When accessing the dashboard from a remote browser +(for example through a Brev public URL or an SSH port-forward), set +`CHAT_UI_URL` to the origin the browser will use **before** running setup: + +```console +$ export CHAT_UI_URL="https://openclaw0-.brevlab.com" +$ nemoclaw deploy +``` + +For SSH port-forwarding, the origin is typically `http://127.0.0.1:18789` (the +default), so no extra configuration is needed. + +> **Note:** On Brev, set `CHAT_UI_URL` in the launchable environment configuration so it is +> available when the setup script builds the sandbox image. If `CHAT_UI_URL` is +> not set on a headless host, `brev-setup.sh` prints a warning. + +## Step 7: GPU Configuration The deploy script uses the `NEMOCLAW_GPU` environment variable to select the GPU type. The default value is `a2-highgpu-1g:nvidia-tesla-a100:1`. @@ -91,12 +111,12 @@ $ nemoclaw deploy Forward messages between a Telegram bot and the OpenClaw agent running inside the sandbox. The Telegram bridge is an auxiliary service managed by `nemoclaw start`. -## Step 7: Create a Telegram Bot +## Step 8: Create a Telegram Bot Open Telegram and send `/newbot` to [@BotFather](https://t.me/BotFather). Follow the prompts to create a bot and receive a bot token. -## Step 8: Set the Environment Variable +## Step 9: Set the Environment Variable Export the bot token as an environment variable: @@ -104,7 +124,7 @@ Export the bot token as an environment variable: $ export TELEGRAM_BOT_TOKEN= ``` -## Step 9: Start Auxiliary Services +## Step 10: Start Auxiliary Services Start the Telegram bridge and other auxiliary services: @@ -119,7 +139,7 @@ The `start` command launches the following services: The Telegram bridge starts only when the `TELEGRAM_BOT_TOKEN` environment variable is set. -## Step 10: Verify the Services +## Step 11: Verify the Services Check that the Telegram bridge is running: @@ -129,12 +149,12 @@ $ nemoclaw status The output shows the status of all auxiliary services. -## Step 11: Send a Message +## Step 12: Send a Message Open Telegram, find your bot, and send a message. The bridge forwards the message to the OpenClaw agent inside the sandbox and returns the agent response. -## Step 12: Restrict Access by Chat ID +## Step 13: Restrict Access by Chat ID To restrict which Telegram chats can interact with the agent, set the `ALLOWED_CHAT_IDS` environment variable to a comma-separated list of Telegram chat IDs: @@ -143,7 +163,7 @@ $ export ALLOWED_CHAT_IDS="123456789,987654321" $ nemoclaw start ``` -## Step 13: Stop the Services +## Step 14: Stop the Services To stop the Telegram bridge and all other auxiliary services: diff --git a/.agents/skills/nemoclaw-overview/references/how-it-works.md b/.agents/skills/nemoclaw-overview/references/how-it-works.md index aa9f00fe5db..535aeff121b 100644 --- a/.agents/skills/nemoclaw-overview/references/how-it-works.md +++ b/.agents/skills/nemoclaw-overview/references/how-it-works.md @@ -126,4 +126,4 @@ For details on the baseline rules, refer to Network Policies (see the `nemoclaw- - Follow the Quickstart (see the `nemoclaw-get-started` skill) to launch your first sandbox. - Refer to the Architecture (see the `nemoclaw-reference` skill) for the full technical structure, including file layouts and the blueprint lifecycle. -- Refer to Inference Profiles (see the `nemoclaw-reference` skill) for detailed provider configuration. +- Refer to Inference Options (see the `nemoclaw-configure-inference` skill) for detailed provider configuration. diff --git a/.agents/skills/nemoclaw-reference/SKILL.md b/.agents/skills/nemoclaw-reference/SKILL.md index 953d95b14bb..55f45743182 100644 --- a/.agents/skills/nemoclaw-reference/SKILL.md +++ b/.agents/skills/nemoclaw-reference/SKILL.md @@ -1,6 +1,6 @@ --- name: nemoclaw-reference -description: Describes how NemoClaw combines a CLI plugin with a versioned blueprint to move OpenClaw into a controlled sandbox. Use when looking up NemoClaw architecture, plugin structure, or blueprint design. Lists all slash commands and standalone NemoClaw CLI commands. Use when looking up a command, checking command syntax, or browsing the CLI reference. Documents configuration options for NemoClaw routed inference providers. Use when configuring inference profiles, looking up provider routing settings, or reviewing available LLM providers. Documents baseline network policy, filesystem rules, and operator approval flow. Use when reviewing default network policies, understanding egress controls, or looking up the approval flow. Diagnoses and resolves common NemoClaw installation, onboarding, and runtime issues. Use when troubleshooting errors, debugging sandbox problems, or resolving setup failures. +description: Describes how NemoClaw combines a CLI plugin with a versioned blueprint to move OpenClaw into a controlled sandbox. Use when looking up NemoClaw architecture, plugin structure, or blueprint design. Lists all slash commands and standalone NemoClaw CLI commands. Use when looking up a command, checking command syntax, or browsing the CLI reference. Documents baseline network policy, filesystem rules, and operator approval flow. Use when reviewing default network policies, understanding egress controls, or looking up the approval flow. Diagnoses and resolves common NemoClaw installation, onboarding, and runtime issues. Use when troubleshooting errors, debugging sandbox problems, or resolving setup failures. --- # NemoClaw Reference @@ -11,6 +11,5 @@ Describes how NemoClaw combines a CLI plugin with a versioned blueprint to move - [NemoClaw Architecture — Plugin, Blueprint, and Sandbox Structure](references/architecture.md) - [NemoClaw CLI Commands Reference](references/commands.md) -- [NemoClaw Inference Profiles](references/inference-profiles.md) - [NemoClaw Network Policies — Baseline Rules and Operator Approval](references/network-policies.md) - [NemoClaw Troubleshooting Guide](references/troubleshooting.md) diff --git a/.agents/skills/nemoclaw-reference/references/architecture.md b/.agents/skills/nemoclaw-reference/references/architecture.md index 6f4df04df39..1fcfb843555 100644 --- a/.agents/skills/nemoclaw-reference/references/architecture.md +++ b/.agents/skills/nemoclaw-reference/references/architecture.md @@ -148,7 +148,7 @@ OpenShell intercepts them and routes to the configured provider: Agent (sandbox) ──▶ OpenShell gateway ──▶ NVIDIA Endpoint (build.nvidia.com) ``` -Refer to Inference Profiles (see the `nemoclaw-reference` skill) for provider configuration details. +Refer to Inference Options (see the `nemoclaw-configure-inference` skill) for provider configuration details. ## Host-Side State and Config diff --git a/.agents/skills/nemoclaw-security-best/references/best-practices.md b/.agents/skills/nemoclaw-security-best/references/best-practices.md index 15b649b76ee..56d6bf7a2dc 100644 --- a/.agents/skills/nemoclaw-security-best/references/best-practices.md +++ b/.agents/skills/nemoclaw-security-best/references/best-practices.md @@ -482,6 +482,6 @@ The following patterns weaken security without providing meaningful benefit. - Customize the Network Policy (see the `nemoclaw-manage-policy` skill) for static and dynamic policy changes. - Approve or Deny Network Requests (see the `nemoclaw-manage-policy` skill) for the operator approval flow. - Sandbox Hardening (see the `nemoclaw-deploy-remote` skill) for container-level security measures. -- Inference Profiles (see the `nemoclaw-reference` skill) for provider configuration details. +- Inference Options (see the `nemoclaw-configure-inference` skill) for provider configuration details. - How It Works (see the `nemoclaw-overview` skill) for the protection layer architecture. diff --git a/README.md b/README.md index fedb3b31f2a..570e692a959 100644 --- a/README.md +++ b/README.md @@ -140,7 +140,7 @@ Refer to the following pages on the official documentation website for more info | [Overview](https://docs.nvidia.com/nemoclaw/latest/about/overview.html) | What NemoClaw does and how it fits together. | | [How It Works](https://docs.nvidia.com/nemoclaw/latest/about/how-it-works.html) | Plugin, blueprint, sandbox lifecycle, and protection layers. | | [Architecture](https://docs.nvidia.com/nemoclaw/latest/reference/architecture.html) | Plugin structure, blueprint lifecycle, sandbox environment, and host-side state. | -| [Inference Profiles](https://docs.nvidia.com/nemoclaw/latest/reference/inference-profiles.html) | Supported providers, validation, and routed inference configuration. | +| [Inference Options](https://docs.nvidia.com/nemoclaw/latest/inference/inference-options.html) | Supported providers, validation, and routed inference configuration. | | [Network Policies](https://docs.nvidia.com/nemoclaw/latest/reference/network-policies.html) | Baseline rules, operator approval flow, and egress control. | | [Customize Network Policy](https://docs.nvidia.com/nemoclaw/latest/network-policy/customize-network-policy.html) | Static and dynamic policy changes, presets. | | [Security Best Practices](https://docs.nvidia.com/nemoclaw/latest/security/best-practices.html) | Controls reference, risk framework, and posture profiles for sandbox security. | diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index e379d29f7ec..236edf168d8 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -40,11 +40,11 @@ The current generated skills and their source pages are: |---|---| | `nemoclaw-overview` | `docs/about/overview.md`, `docs/about/how-it-works.md`, `docs/about/release-notes.md` | | `nemoclaw-get-started` | `docs/get-started/quickstart.md` | -| `nemoclaw-configure-inference` | `docs/inference/switch-inference-providers.md` | +| `nemoclaw-configure-inference` | `docs/inference/inference-options.md`, `docs/inference/use-local-inference.md`, `docs/inference/switch-inference-providers.md` | | `nemoclaw-manage-policy` | `docs/network-policy/customize-network-policy.md`, `docs/network-policy/approve-network-requests.md` | | `nemoclaw-monitor-sandbox` | `docs/monitoring/monitor-sandbox-activity.md` | | `nemoclaw-deploy-remote` | `docs/deployment/deploy-to-remote-gpu.md`, `docs/deployment/set-up-telegram-bridge.md` | -| `nemoclaw-reference` | `docs/reference/architecture.md`, `docs/reference/commands.md`, `docs/reference/inference-profiles.md`, `docs/reference/network-policies.md`, `docs/reference/troubleshooting.md` | +| `nemoclaw-reference` | `docs/reference/architecture.md`, `docs/reference/commands.md`, `docs/reference/network-policies.md`, `docs/reference/troubleshooting.md` | ### Regenerating skills after doc changes diff --git a/docs/about/how-it-works.md b/docs/about/how-it-works.md index 2ef69566420..2cdb77ca87e 100644 --- a/docs/about/how-it-works.md +++ b/docs/about/how-it-works.md @@ -148,4 +148,4 @@ For details on the baseline rules, refer to [Network Policies](../reference/netw - Follow the [Quickstart](../get-started/quickstart.md) to launch your first sandbox. - Refer to the [Architecture](../reference/architecture.md) for the full technical structure, including file layouts and the blueprint lifecycle. -- Refer to [Inference Profiles](../reference/inference-profiles.md) for detailed provider configuration. +- Refer to [Inference Options](../inference/inference-options.md) for detailed provider configuration. diff --git a/docs/conf.py b/docs/conf.py index b161f6b729b..8f31ea73033 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -26,8 +26,13 @@ "sphinxcontrib.mermaid", "json_output", "search_assets", + "sphinx_reredirects", ] +redirects = { + "reference/inference-profiles": "../inference/inference-options.html", +} + autodoc_default_options = { "members": True, "undoc-members": False, diff --git a/docs/index.md b/docs/index.md index e08262b376d..f9f613026ed 100644 --- a/docs/index.md +++ b/docs/index.md @@ -125,14 +125,14 @@ CLI commands for launching, connecting, monitoring, and managing sandboxes. {bdg-secondary}`Reference` ::: -:::{grid-item-card} Inference Profiles -:link: reference/inference-profiles +:::{grid-item-card} Inference Options +:link: inference/inference-options :link-type: doc -NVIDIA endpoint inference configuration and available models. +Providers available during onboarding and how inference routing works. +++ -{bdg-secondary}`Reference` +{bdg-secondary}`Concept` ::: :::{grid-item-card} How It Works @@ -231,6 +231,8 @@ Quickstart :caption: Inference :hidden: +Inference Options +Use Local Inference Switch Inference Providers ``` @@ -279,7 +281,6 @@ Back Up and Restore Architecture Commands -Inference Profiles Network Policies Troubleshooting ``` diff --git a/docs/inference/inference-options.md b/docs/inference/inference-options.md new file mode 100644 index 00000000000..f2486d28049 --- /dev/null +++ b/docs/inference/inference-options.md @@ -0,0 +1,80 @@ +--- +title: + page: "NemoClaw Inference Options" + nav: "Inference Options" +description: + main: "Inference providers available during NemoClaw onboarding and how the routed inference model works." + agent: "Lists all inference providers offered during NemoClaw onboarding. Use when explaining which providers are available, what the onboard wizard presents, or how inference routing works." +keywords: ["nemoclaw inference options", "nemoclaw onboarding providers", "nemoclaw inference routing"] +topics: ["generative_ai", "ai_agents"] +tags: ["openclaw", "openshell", "inference_routing", "nemoclaw"] +content: + type: concept + difficulty: technical_beginner + audience: ["developer", "engineer"] +status: published +--- + + + +# Inference Options + +NemoClaw supports multiple inference providers. +During onboarding, the `nemoclaw onboard` wizard presents a numbered list of providers to choose from. +Your selection determines where the agent's inference traffic is routed. + +## How Inference Routing Works + +The agent inside the sandbox talks to `inference.local`. +It never connects to a provider directly. +OpenShell intercepts inference traffic on the host and forwards it to the provider you selected. + +Provider credentials stay on the host. +The sandbox does not receive your API key. + +## Provider Options + +The onboard wizard presents the following provider options by default. +The first six are always available. +Ollama appears when it is installed or running on the host. + +| Option | Description | Curated models | +|--------|-------------|----------------| +| NVIDIA Endpoints | Routes to models hosted on [build.nvidia.com](https://build.nvidia.com). You can also enter any model ID from the catalog. Set `NVIDIA_API_KEY`. | Nemotron 3 Super 120B, Kimi K2.5, GLM-5, MiniMax M2.5, GPT-OSS 120B | +| OpenAI | Routes to the OpenAI API. Set `OPENAI_API_KEY`. | `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`, `gpt-5.4-pro-2026-03-05` | +| Other OpenAI-compatible endpoint | Routes to any server that implements `/v1/chat/completions`. The wizard prompts for a base URL and model name. Works with OpenRouter, LocalAI, llama.cpp, or any compatible proxy. Set `COMPATIBLE_API_KEY`. | You provide the model name. | +| Anthropic | Routes to the Anthropic Messages API. Set `ANTHROPIC_API_KEY`. | `claude-sonnet-4-6`, `claude-haiku-4-5`, `claude-opus-4-6` | +| Other Anthropic-compatible endpoint | Routes to any server that implements the Anthropic Messages API (`/v1/messages`). The wizard prompts for a base URL and model name. Set `COMPATIBLE_ANTHROPIC_API_KEY`. | You provide the model name. | +| Google Gemini | Routes to Google's OpenAI-compatible endpoint. Set `GEMINI_API_KEY`. | `gemini-3.1-pro-preview`, `gemini-3.1-flash-lite-preview`, `gemini-3-flash-preview`, `gemini-2.5-pro`, `gemini-2.5-flash`, `gemini-2.5-flash-lite` | +| Local Ollama | Routes to a local Ollama instance on `localhost:11434`. NemoClaw detects installed models, offers starter models if none are present, pulls and warms the selected model, and validates it. | Selected during onboarding. For more information, refer to [Use a Local Inference Server](use-local-inference.md). | + +## Experimental Options + +The following local inference options require `NEMOCLAW_EXPERIMENTAL=1` and, when prerequisites are met, appear in the onboarding selection list. + +| Option | Condition | Notes | +|--------|-----------|-------| +| Local NVIDIA NIM | NIM-capable GPU detected | Pulls and manages a NIM container. | +| Local vLLM | vLLM running on `localhost:8000` | Auto-detects the loaded model. | + +For setup instructions, refer to [Use a Local Inference Server](use-local-inference.md). + +## Validation + +NemoClaw validates the selected provider and model before creating the sandbox. +If validation fails, the wizard returns to provider selection. + +| Provider type | Validation method | +|---|---| +| OpenAI-compatible | Tries `/responses` first, then `/chat/completions`. | +| Anthropic-compatible | Tries `/v1/messages`. | +| NVIDIA Endpoints (manual model entry) | Validates the model name against the catalog API. | +| Compatible endpoints | Sends a real inference request because many proxies do not expose a `/models` endpoint. | + +## Next Steps + +- [Use a Local Inference Server](use-local-inference.md) for Ollama, vLLM, NIM, and compatible-endpoint setup details. +- [Switch Inference Models](switch-inference-providers.md) for changing the model at runtime without re-onboarding. diff --git a/docs/inference/switch-inference-providers.md b/docs/inference/switch-inference-providers.md index aedf547438b..60f058ceeb4 100644 --- a/docs/inference/switch-inference-providers.md +++ b/docs/inference/switch-inference-providers.md @@ -97,4 +97,4 @@ The output includes the active provider, model, and endpoint. ## Related Topics -- [Inference Profiles](../reference/inference-profiles.md) for full profile configuration details. +- [Inference Options](inference-options.md) for the full list of providers available during onboarding. diff --git a/docs/inference/use-local-inference.md b/docs/inference/use-local-inference.md new file mode 100644 index 00000000000..f4c0acba1ce --- /dev/null +++ b/docs/inference/use-local-inference.md @@ -0,0 +1,231 @@ +--- +title: + page: "Use a Local Inference Server with NemoClaw" + nav: "Use Local Inference" +description: + main: "Connect NemoClaw to a local model server such as Ollama, vLLM, TensorRT-LLM, or any OpenAI-compatible endpoint." + agent: "Connects NemoClaw to a local inference server. Use when setting up Ollama, vLLM, TensorRT-LLM, NIM, or any OpenAI-compatible local model server with NemoClaw." +keywords: ["nemoclaw local inference", "ollama nemoclaw", "vllm nemoclaw", "local model server", "openai compatible endpoint"] +topics: ["generative_ai", "ai_agents"] +tags: ["openclaw", "openshell", "inference_routing", "local_inference"] +content: + type: how_to + difficulty: intermediate + audience: ["developer", "engineer"] +status: published +--- + + + +# Use a Local Inference Server + +NemoClaw can route inference to a model server running on your machine instead of a cloud API. +This page covers Ollama, compatible-endpoint paths for other servers, and two experimental options for vLLM and NVIDIA NIM. + +All approaches use the same `inference.local` routing model. +The agent inside the sandbox never connects to your model server directly. +OpenShell intercepts inference traffic and forwards it to the local endpoint you configure. + +## Prerequisites + +- NemoClaw installed. + Refer to the [Quickstart](../get-started/quickstart.md) if you have not installed yet. +- A local model server running, or Ollama installed. The NemoClaw onboard wizard can also start Ollama for you. + +## Ollama + +Ollama is the default local inference option. +The onboard wizard detects Ollama automatically when it is installed or running on the host. + +If Ollama is not running, NemoClaw starts it for you. +On macOS, the wizard also offers to install Ollama through Homebrew if it is not present. + +Run the onboard wizard. + +```console +$ nemoclaw onboard +``` + +Select **Local Ollama** from the provider list. +NemoClaw lists installed models or offers starter models if none are installed. +It pulls the selected model, loads it into memory, and validates it before continuing. + +### Linux with Docker + +On Linux hosts that run NemoClaw with Docker, the sandbox reaches Ollama through +`http://host.openshell.internal:11434`, not the host shell's `localhost` socket. +If Ollama is already running, make sure it listens on `0.0.0.0:11434` instead of +`127.0.0.1:11434`. + +```console +$ OLLAMA_HOST=0.0.0.0:11434 ollama serve +``` + +If Ollama only binds loopback, NemoClaw can detect it on the host, but the +sandbox-side validation step fails because containers cannot reach it. + +### Non-Interactive Setup + +```console +$ NEMOCLAW_PROVIDER=ollama \ + NEMOCLAW_MODEL=qwen2.5:14b \ + nemoclaw onboard --non-interactive +``` + +If `NEMOCLAW_MODEL` is not set, NemoClaw selects a default model based on available memory. + +| Variable | Purpose | +|---|---| +| `NEMOCLAW_PROVIDER` | Set to `ollama`. | +| `NEMOCLAW_MODEL` | Ollama model tag to use. Optional. | + +## OpenAI-Compatible Server + +This option works with any server that implements `/v1/chat/completions`, including vLLM, TensorRT-LLM, llama.cpp, LocalAI, and others. + +Start your model server. +The examples below use vLLM, but any OpenAI-compatible server works. + +```console +$ vllm serve meta-llama/Llama-3.1-8B-Instruct --port 8000 +``` + +Run the onboard wizard. + +```console +$ nemoclaw onboard +``` + +When the wizard asks you to choose an inference provider, select **Other OpenAI-compatible endpoint**. +Enter the base URL of your local server, for example `http://localhost:8000/v1`. + +The wizard prompts for an API key. +If your server does not require authentication, enter any non-empty string (for example, `dummy`). + +NemoClaw validates the endpoint by sending a test inference request before continuing. + +### Non-Interactive Setup + +Set the following environment variables for scripted or CI/CD deployments. + +```console +$ NEMOCLAW_PROVIDER=custom \ + NEMOCLAW_ENDPOINT_URL=http://localhost:8000/v1 \ + NEMOCLAW_MODEL=meta-llama/Llama-3.1-8B-Instruct \ + COMPATIBLE_API_KEY=dummy \ + nemoclaw onboard --non-interactive +``` + +| Variable | Purpose | +|---|---| +| `NEMOCLAW_PROVIDER` | Set to `custom` for an OpenAI-compatible endpoint. | +| `NEMOCLAW_ENDPOINT_URL` | Base URL of the local server. | +| `NEMOCLAW_MODEL` | Model ID as reported by the server. | +| `COMPATIBLE_API_KEY` | API key for the endpoint. Use any non-empty value if authentication is not required. | + +## Anthropic-Compatible Server + +If your local server implements the Anthropic Messages API (`/v1/messages`), choose **Other Anthropic-compatible endpoint** during onboarding instead. + +```console +$ nemoclaw onboard +``` + +For non-interactive setup, use `NEMOCLAW_PROVIDER=anthropicCompatible` and set `COMPATIBLE_ANTHROPIC_API_KEY`. + +```console +$ NEMOCLAW_PROVIDER=anthropicCompatible \ + NEMOCLAW_ENDPOINT_URL=http://localhost:8080 \ + NEMOCLAW_MODEL=my-model \ + COMPATIBLE_ANTHROPIC_API_KEY=dummy \ + nemoclaw onboard --non-interactive +``` + +## vLLM Auto-Detection (Experimental) + +When vLLM is already running on `localhost:8000`, NemoClaw can detect it automatically and query the `/v1/models` endpoint to determine the loaded model. + +Set the experimental flag and run onboard. + +```console +$ NEMOCLAW_EXPERIMENTAL=1 nemoclaw onboard +``` + +Select **Local vLLM [experimental]** from the provider list. +NemoClaw detects the running model and validates the endpoint. + +:::{note} +NemoClaw forces the `chat/completions` API path for vLLM. +The vLLM `/v1/responses` endpoint does not run the `--tool-call-parser`, so tool calls arrive as raw text. +::: + +### Non-Interactive Setup + +```console +$ NEMOCLAW_EXPERIMENTAL=1 \ + NEMOCLAW_PROVIDER=vllm \ + nemoclaw onboard --non-interactive +``` + +NemoClaw auto-detects the model from the running vLLM instance. +To override the model, set `NEMOCLAW_MODEL`. + +## NVIDIA NIM (Experimental) + +NemoClaw can pull, start, and manage a NIM container on hosts with a NIM-capable NVIDIA GPU. + +Set the experimental flag and run onboard. + +```console +$ NEMOCLAW_EXPERIMENTAL=1 nemoclaw onboard +``` + +Select **Local NVIDIA NIM [experimental]** from the provider list. +NemoClaw filters available models by GPU VRAM, pulls the NIM container image, starts it, and waits for it to become healthy before continuing. + +:::{note} +NIM uses vLLM internally. +The same `chat/completions` API path restriction applies. +::: + +### Non-Interactive Setup + +```console +$ NEMOCLAW_EXPERIMENTAL=1 \ + NEMOCLAW_PROVIDER=nim \ + nemoclaw onboard --non-interactive +``` + +To select a specific model, set `NEMOCLAW_MODEL`. + +## Verify the Configuration + +After onboarding completes, confirm the active provider and model. + +```console +$ nemoclaw status +``` + +The output shows the provider label (for example, "Local vLLM" or "Other OpenAI-compatible endpoint") and the active model. + +## Switch Models at Runtime + +You can change the model without re-running onboard. +Refer to [Switch Inference Models](switch-inference-providers.md) for the full procedure. + +For compatible endpoints, the command is: + +```console +$ openshell inference set --provider compatible-endpoint --model +``` + +If the provider itself needs to change (for example, switching from vLLM to a cloud API), rerun `nemoclaw onboard`. + +## Next Steps + +- [Inference Options](inference-options.md) for the full list of providers available during onboarding. +- [Switch Inference Models](switch-inference-providers.md) for runtime model switching. +- [Quickstart](../get-started/quickstart.md) for first-time installation. diff --git a/docs/reference/architecture.md b/docs/reference/architecture.md index 190fe8a9710..cdbef3071c9 100644 --- a/docs/reference/architecture.md +++ b/docs/reference/architecture.md @@ -170,7 +170,7 @@ OpenShell intercepts them and routes to the configured provider: Agent (sandbox) ──▶ OpenShell gateway ──▶ NVIDIA Endpoint (build.nvidia.com) ``` -Refer to [Inference Profiles](../reference/inference-profiles.md) for provider configuration details. +Refer to [Inference Options](../inference/inference-options.md) for provider configuration details. ## Host-Side State and Config diff --git a/docs/reference/inference-profiles.md b/docs/reference/inference-profiles.md deleted file mode 100644 index 5952daedad7..00000000000 --- a/docs/reference/inference-profiles.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: - page: "NemoClaw Inference Profiles" - nav: "Inference Profiles" -description: - main: "Configuration reference for NemoClaw routed inference providers." - agent: "Documents configuration options for NemoClaw routed inference providers. Use when configuring inference profiles, looking up provider routing settings, or reviewing available LLM providers." -keywords: ["nemoclaw inference profiles", "nemoclaw provider routing"] -topics: ["generative_ai", "ai_agents"] -tags: ["openclaw", "openshell", "inference_routing", "llms"] -content: - type: reference - difficulty: intermediate - audience: ["developer", "engineer"] -status: published ---- - - - -# Inference Profiles - -NemoClaw configures inference through the OpenShell gateway. -The agent inside the sandbox talks to `inference.local`, and OpenShell routes that traffic to the provider you selected during onboarding. - -## Routed Provider Model - -NemoClaw keeps provider credentials on the host. -The sandbox does not receive your raw OpenAI, Anthropic, Gemini, or NVIDIA API key. - -At onboard time, NemoClaw configures: - -- an OpenShell provider -- an OpenShell inference route -- the baked OpenClaw model reference inside the sandbox - -That means the sandbox knows which model family to use, while OpenShell owns the actual provider credential and upstream endpoint. - -## Supported Providers - -The following non-experimental provider paths are available through `nemoclaw onboard`. - -| Provider | Endpoint Type | Notes | -|---|---|---| -| NVIDIA Endpoints | OpenAI-compatible | Hosted models on `integrate.api.nvidia.com` | -| OpenAI | Native OpenAI-compatible | Uses OpenAI model IDs | -| Other OpenAI-compatible endpoint | Custom OpenAI-compatible | For compatible proxies and gateways | -| Anthropic | Native Anthropic | Uses `anthropic-messages` | -| Other Anthropic-compatible endpoint | Custom Anthropic-compatible | For Claude proxies and compatible gateways | -| Google Gemini | OpenAI-compatible | Uses Google's OpenAI-compatible endpoint | - -## Validation During Onboarding - -NemoClaw validates the selected provider and model before it creates the sandbox. - -- OpenAI-compatible providers: - NemoClaw tries `/responses` first, then `/chat/completions`. -- Anthropic-compatible providers: - NemoClaw tries `/v1/messages`. -- NVIDIA Endpoints manual model entry: - NemoClaw also validates the model name against `https://integrate.api.nvidia.com/v1/models`. -- Compatible endpoint flows: - NemoClaw validates by sending a real inference request, because many proxies do not expose a reliable `/models` endpoint. - -If validation fails, the wizard does not continue to sandbox creation. - -## Local Ollama - -Local Ollama is available in the standard onboarding flow when Ollama is installed or running on the host. -It uses the same routed `inference.local` pattern, but the upstream runtime runs locally instead of in the cloud. - -Ollama gets additional onboarding help: - -- if no models are installed, NemoClaw offers starter models -- it pulls the selected model -- it warms the model -- it validates the model before continuing - -On Linux hosts that run NemoClaw with Docker, the sandbox reaches Ollama through `http://host.openshell.internal:11434`, not the host shell's `localhost` socket. -If Ollama is already running, make sure it listens on `0.0.0.0:11434` instead of `127.0.0.1:11434`. -Run the following command to start Ollama with that bind address. - -```console -$ OLLAMA_HOST=0.0.0.0:11434 ollama serve -``` - -If Ollama only binds loopback, NemoClaw can detect it on the host, but the sandbox-side validation step fails because containers cannot reach it. - -## Experimental Local Providers - -The following local providers require `NEMOCLAW_EXPERIMENTAL=1`: - -- Local NVIDIA NIM (requires a NIM-capable GPU) -- Local vLLM (must already be running on `localhost:8000`) - -## Runtime Switching - -For runtime switching guidance, refer to [Switch Inference Models](../inference/switch-inference-providers.md). diff --git a/docs/security/best-practices.md b/docs/security/best-practices.md index 5f9aa9c22d5..6bc1886594c 100644 --- a/docs/security/best-practices.md +++ b/docs/security/best-practices.md @@ -504,6 +504,6 @@ The following patterns weaken security without providing meaningful benefit. - [Customize the Network Policy](../network-policy/customize-network-policy.md) for static and dynamic policy changes. - [Approve or Deny Network Requests](../network-policy/approve-network-requests.md) for the operator approval flow. - [Sandbox Hardening](../deployment/sandbox-hardening.md) for container-level security measures. -- [Inference Profiles](../reference/inference-profiles.md) for provider configuration details. +- [Inference Options](../inference/inference-options.md) for provider configuration details. - [How It Works](../about/how-it-works.md) for the protection layer architecture. diff --git a/pyproject.toml b/pyproject.toml index 57fcee9c9cc..7461a999f39 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,6 +17,7 @@ docs = [ "sphinxcontrib-mermaid", "nvidia-sphinx-theme", "sphinx-llm>=0.3.0", + "sphinx-reredirects", ] [tool.uv] diff --git a/uv.lock b/uv.lock index 4b2162115a6..75ea8e51353 100644 --- a/uv.lock +++ b/uv.lock @@ -347,6 +347,7 @@ docs = [ { name = "sphinx-copybutton" }, { name = "sphinx-design" }, { name = "sphinx-llm" }, + { name = "sphinx-reredirects" }, { name = "sphinxcontrib-mermaid" }, ] @@ -361,6 +362,7 @@ docs = [ { name = "sphinx-copybutton", specifier = "<=0.6" }, { name = "sphinx-design" }, { name = "sphinx-llm", specifier = ">=0.3.0" }, + { name = "sphinx-reredirects" }, { name = "sphinxcontrib-mermaid" }, ] @@ -595,6 +597,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c2/8f/9fecf3d081d5cd49eff83a17b9fef50ed741e6223ab3bb906de4ab0068f9/sphinx_markdown_builder-0.6.10-py3-none-any.whl", hash = "sha256:16d86738b9ac69fcbc86e373c31c6402c30af1fa8d98d0f62cc5f38bfe5fc26e", size = 16700, upload-time = "2026-03-11T10:56:56.135Z" }, ] +[[package]] +name = "sphinx-reredirects" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1b/8d/0e39fe2740d7d71417edf9a6424aa80ca2c27c17fc21282cdc39f90d5a40/sphinx_reredirects-1.1.0.tar.gz", hash = "sha256:fb9b195335ab14b43f8273287d0c7eeb637ba6c56c66581c11b47202f6718b29", size = 614624, upload-time = "2025-12-22T08:28:02.792Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/81/b5dd07067f3daac6d23687ec737b2d593740671ebcd145830c8f92d381c5/sphinx_reredirects-1.1.0-py3-none-any.whl", hash = "sha256:4b5692273c72cd2d4d917f4c6f87d5919e4d6114a752d4be033f7f5f6310efd9", size = 6351, upload-time = "2025-12-22T08:27:59.724Z" }, +] + [[package]] name = "sphinxcontrib-applehelp" version = "2.0.0"