What NeMo Guardrails server deployment involves and when teams need it
Teams need a NeMo Guardrails server when input checks, output checks and retrieval checks must be enforced outside each LLM application codebase, so that every application calling a model passes through the same rules. NeMo Guardrails server deployment means running the toolkit as an HTTP guardrails server or as a container that loads its configurations from a folder and exposes an HTTP API in front of the model. The application sends a request to the server, the server applies the configured rails, and only then is the model response or blocked message returned. The pattern looks simple on a whiteboard and is harder in practice. The first difficulty is configuration design. Each configuration is built from a config.yml file, optional Python actions and Colang files, and the team must decide which of the five rail types apply to which traffic: input rails, dialog rails, retrieval rails for RAG chunks, execution rails for custom actions and tools, and output rails. Each of these choices changes behavior, so they need a written owner and a review step before they reach production. The second difficulty is cost and latency on the request path. Depending on the rails enabled, a single user request can trigger additional model calls, such as self-check moderation, fact-checking or hallucination detection, and calls to NVIDIA content safety or topic safety models. Teams should ask which of these calls their chosen rails make, how many run per request, and where those models are hosted, because each call adds response time and usage charges that recur with traffic. The third difficulty is keeping multiple configurations apart. A server that loads a folder of configurations may serve a customer chatbot, an internal assistant and a retrieval application at once. Teams need a naming convention, a way to confirm which configuration answered each request, and a rule for how a change to a shared action affects every configuration that uses it. Running a separate server per application is a valid alternative that trades operational simplicity for more deployments to manage. Finally, a guardrails server becomes operational infrastructure. It sits on the request path, so an outage or a slow safety-model call affects every application behind it, and someone must own its uptime, logs, upgrades and incident response. The Apache 2.0 library can be run this way, and NVIDIA also offers a Kubernetes microservice built on the same configuration model. That microservice is covered in sibling topics, so this section only establishes that the server role itself needs a named owner before the rollout begins.
Which NeMo Guardrails parts a server deployment depends on
A guardrails server is only as reliable as the parts it loads and serves. The configuration folder, custom code, HTTP interface, container build, Python entry point and optional framework integration each change how rails behave in production. Assign an owner to each part and test it before any configuration reaches users.
Configuration folder and config.yml
The server loads every configuration from a folder that holds config.yml, which names the models and the rails to apply. This file decides which model calls run on each request, so it is the first place to check when latency or cost changes. Your team owns the model settings, the rail selection and the folder layout. Test that each configuration loads on its own and that a request through each one triggers the rails you expect.
Python actions and Colang files
Optional Python actions and Colang files define custom checks and dialog flows that sit alongside config.yml. Colang 1.0 is the default, and Colang 2.0 is also supported, so each configuration must declare the version it was written for. Your team owns the custom action code and the flow definitions. Test each action with its expected inputs and failure cases, and confirm that the Colang version in every folder matches what the server runs.
HTTP API exposed by the server
The guardrails server exposes an HTTP API that applications call in place of their direct model requests. Every client integration depends on its request and response format, and on which configuration a call selects. Your team owns the endpoint, its exposure to internal networks, and the client contract. Test request and response shapes, error responses when a model call fails, and behavior under concurrent requests.
Dockerfile and server image
A Dockerfile is provided to build a server image that packages the library, the server and your configuration folder. Your team owns the base image, the pinned library version, and how configuration files are mounted or copied in. Check that the image starts with each configuration, that secrets arrive through the runtime environment rather than the image, and that rebuilding the image after a change reproduces the same behavior.
Python API as an alternative entry point
Applications can call NeMo Guardrails through its Python API instead of running a separate server. This removes a network hop but moves the rails into the application process, so every service that imports the library carries its dependencies and configuration. Your team must decide which services use the server and which embed the library, then test that both paths apply the same rails to the same input.
Opt-in LangChain integration
LangChain integration is off by default and is enabled with the NEMOGUARDRAILS_LLM_FRAMEWORK=langchain environment variable. Turning it on changes how the library interacts with the model layer, so it is a deployment decision rather than a code default. Your team owns the setting in each environment and the LangChain version it depends on. Test the server with the variable set and unset, and confirm that the chosen value is recorded in your deployment configuration.
Decisions to settle before the first server config is written
This table compares the five choices that shape a NeMo Guardrails server rollout, along with the operational cost each one carries. Read each row as a decision to settle with your platform, security and application teams before config files exist, because several of them are expensive to reverse once applications depend on them. The main takeaway is that a shared server and a vendor-managed image trade speed for shared blast radius and support boundaries.
| Decision | Option | When it fits | Operational cost |
|---|---|---|---|
| Runtime host | Open-source server on a VM or container host | Your team already runs containers or VMs and wants the Apache 2.0 server under its own control | You own patching of the host, the base image, the Python runtime and the server process |
| Runtime host | Embed the Python library in each application | A single application needs guardrails in-process and has no need for a separate HTTP boundary | Each application carries its own dependency upgrades, and rail behavior can drift between services |
| Tenancy | One shared server with several config folders | Several applications share a platform team and similar rails, and you want one endpoint to govern | A fault, bad config or overload affects every application that calls the server |
| Tenancy | One server per application or tenant | Applications have different risk levels, data residency needs or change schedules | More deployments to patch, monitor and cost, multiplied by each model and credential set |
| Image source | Build your own image from the provided Dockerfile | You need control over base images, scanning and the exact library version pinned in your registry | Your team owns image rebuilds, vulnerability triage and every upgrade of the library |
| Image source | Adopt the NVIDIA microservice on Kubernetes with Helm | You run Kubernetes already and want a production container built on the same configuration model | You must confirm the license terms, the support boundary and the Helm chart upgrade path with NVIDIA before committing |
| Config language | Colang 1.0 (the default) | You need compatibility with existing examples or a configuration written for the 1.0 syntax | Newer features and the 2.x path will need a later migration, reviewed manually after conversion |
| Config language | Colang 2.0 for new configs | You are starting fresh and want the newer syntax from the first config | Your team must learn 2.x and confirm the rails and actions it needs work under that version |
| LangChain integration | Enable the LangChain integration | Your application already calls LangChain components and you want guardrails to use that framework | It is opt-in through the NEMOGUARDRAILS_LLM_FRAMEWORK=langchain setting, so every upgrade must retest it along with the framework |
| LangChain integration | Leave the integration off | Your application calls model APIs directly or through another framework | Fewer dependencies to track, and no LangChain version constraints inherited by the guardrails server |
NeMo Guardrails server deployment steps, in order
This sequence takes NeMo Guardrails from a pinned library install to a server image running behind your gateway, with a check that closes each stage. It is written for platform engineers and application teams who will operate the service after handover. Each check should pass before the next step starts, so configuration errors surface while the setup is still small.
Pin Python and install the package
Pin a Python version from the supported range of 3.10 to 3.13 and install the nemoguardrails package from PyPI into a fresh virtual environment. Record the exact library version you install, since behavior can change between 0.x releases. Keep this environment separate from application dependencies so a guardrail upgrade does not change the application by accident. Done when the package imports cleanly in that environment and reports the version recorded in your change log.
Lay out the configuration folder
Create the configuration folder and author config.yml with only the rail types you need: input, dialog, retrieval, execution and output. The platform team usually owns this file, and the application team confirms which checks matter for its traffic. Confirm that the model entry points at the LLM you intend to use and that the file parses. Done when the configuration loads without errors in a local Python session, before any server is involved.
Add Python actions and Colang files
Add Python actions and Colang files alongside config.yml and confirm they load. Colang 1.0 is the default and Colang 2.0 is also supported, so state the version in config.yml and keep it consistent across all files. Load the configuration once and send one test message that should trigger an input rail and one that should trigger an output rail. Done when the expected action runs and each rail fires or passes as designed, and any load error names the file that caused it.
Run the server with test requests
Start the server locally with the configuration folder, using the server command and port documented for your pinned version. Send two kinds of request: known-good prompts that should pass and known-bad prompts that should be blocked or redirected. Record every response so the results can be compared after each change. Done when every known-good request returns the normal model answer and every known-bad request returns the guardrail response, with no unexplained differences from the expected results.
Build the server image
Build the server image from the Dockerfile the project provides, and tag it with the same library version you tested. Confirm that the build succeeds from a clean checkout. Then run the container with the configuration either mounted at runtime or copied in during the build. Mounting lets you change rails without rebuilding the image, while baking the configuration in produces a fixed artifact. Done when the container starts and a known-good request returns the same result as the local run.
Inject credentials through the runtime environment
Supply model and safety-model credentials through the runtime environment, such as your orchestrator's secret store, and keep them out of the image and the configuration folder. Inspect the image layers and the mounted configuration for any key or token. Confirm that the server reads each credential from its environment variable. Done when a scan of the image and configuration finds no secrets and the test requests still pass after the credential is rotated in the secret store.
Place the server behind the gateway
Place the guardrails server behind your API gateway and point the client application at the gateway route. Confirm that the gateway enforces authentication and forwards traffic only to the guardrails server. Send requests from the application itself rather than from a test script. Done when the application receives the guardrail result for a blocked request and the normal answer for an allowed one, and the gateway logs record both calls.
Managing multiple configurations and scaling the guardrails server
The first decision is whether several guardrail configurations will share one server or run as separate deployments. The NeMo Guardrails server loads configurations from a folder, so one server can host a customer support assistant, an internal HR bot and a document search tool, each with its own config.yml, Colang files and Python actions. Separate deployments cost more to run but isolate failures, credentials and release timing. Shared servers are cheaper to operate but make every configuration change a change to the same process. Decide this per risk tier, not for the whole estate, and write the decision down before the first build.
Clients need a reliable way to select a configuration on each request. Confirm in the official NeMo Guardrails documentation, for the exact release you run, how the server identifies the configuration to use, whether that is a path segment, a request field or a server-side default, and how unknown names are handled. Also confirm whether the server keeps any state between requests, such as loaded models, conversation memory or dialog context keyed by session. Your client integration tests should cover selecting each configuration, sending a name that does not exist, and two configurations receiving interleaved traffic.
Keep every configuration folder in git, with one repository or one folder per application and a review step for each merge. Tag or branch releases so that a container image, the config folder it loads and the NeMo Guardrails library version are recorded together. Promote the same artifact through development, test and production rather than editing files in place on each environment. Colang 1.0 and 2.x configurations behave differently, so pin the library version in the image and run the rail regression suite against the promoted version before release. Changes to one application should not alter another, which is easiest to guarantee when configurations are isolated in separate folders and separate deployments, and when shared actions are versioned as their own package.
Scaling starts with the container. The guardrails server can run as several replicas behind a load balancer, but only after you have confirmed that the release you run is stateless for your configurations or that any session state is shared or sticky in a way the load balancer can handle. Measure latency for each rail separately, and for each model or safety-model call inside it, including self-check moderation, jailbreak detection and topic safety calls. The slowest rail often dominates, and a rail that calls a second model adds that model's latency to every request it screens. Use these measurements to size replicas, CPU and memory, instead of estimates taken from a vendor slide or a single test prompt.
Run load tests before production with realistic prompt lengths, concurrent sessions and a mix of configurations. Watch for memory growth over long runs, changes in latency as concurrency rises, and errors when several requests hit the same configuration at once. Record the results with the image version and configuration commit, so a later upgrade can be compared with the same test. If the microservice is under consideration instead, the same measurements will inform its Kubernetes and Helm sizing, but the sizing numbers should come from your own tests, not from the library defaults.
NeMo Guardrails server deployment by environment
On a single host or in a single container, the guardrails server runs as one process that loads configurations from a folder and exposes an HTTP API. Your team owns the host, the image build and the runtime. This environment suits a pilot, an internal application or a low-traffic service where one instance is enough.
- Ownership: Your platform or application team owns the host, patching, restarts and monitoring.
- Image provenance: Build the image from the Dockerfile in the project repository, pin it to a reviewed release tag or commit, and keep the build record.
- Networking: Bind the server to a private interface, place it behind your existing gateway and restrict which clients can reach it.
- Secrets: Pass model credentials as environment variables or from a secrets store at startup. Keep them out of the image and the configuration folder.
- Upgrade path: Rebuild from a new tag, rerun your rail tests against it, then replace the container. Keep the previous image available for rollback.
Confirm which Python version your base image uses, since the project supports Python 3.10 through 3.13, and whether the configuration folder can be mounted read-only.
On a container platform, you run the open-source server image as several replicas behind a load balancer. Your team handles scaling, health checks and the distribution of configuration files to every replica. No NVIDIA microservice is involved, so the image and its behavior are yours to build, test and operate.
- Ownership: Your team owns the image, the load balancer, the scaling policy and rolling deployments.
- Image provenance: Build the image once in your CI pipeline, scan it, push it to your internal registry and deploy only that digest to every replica.
- Networking: Terminate TLS at the load balancer, point health checks at the server and restrict east-west access to the calling services.
- Secrets: Inject model credentials through the platform's secret mechanism, scoped per environment and rotated on a schedule your security team sets.
- Upgrade path: Roll replicas one at a time, test the new digest on a staging replica first and keep the previous digest ready for rollback.
Confirm with your platform team how configuration changes reach all replicas at the same time, and confirm with NVIDIA documentation whether the server offers a health endpoint you can use for load balancer checks.
The NeMo Guardrails microservice is a production container image built on the same configuration model and deployed on Kubernetes with Helm. Ownership is shared: NVIDIA publishes the chart and image, your platform team operates the cluster and your security team reviews the configuration. Terms for the microservice are separate from the Apache 2.0 library, so you need to confirm them in writing.
- Ownership: The platform team owns the cluster, namespaces and Helm values. Support scope follows NVIDIA's terms for the microservice.
- Image provenance: Mirror the chart and image into your registry, then record the chart version and image digest in your change record.
- Networking: Use network policies to limit ingress to approved callers, and allow egress only to the model endpoints your configuration requires.
- Secrets: Store model and safety-model credentials as Kubernetes secrets or through an external secrets operator. Keep them out of Helm values files in source control.
- Upgrade path: Upgrade the chart and image together in a staging namespace, run rail regression tests, then promote. Compare the values file for keys that changed.
Confirm with NVIDIA the access terms for the chart and image, the Kubernetes versions it supports and the model endpoints your configuration will call.
On an air-gapped network, the server cannot download anything at runtime. Model weights, safety-model weights, Python packages and container images must be mirrored internally before deployment. The guardrails library then runs from those internal copies, so the mirror becomes the supply chain for the whole deployment.
- Ownership: A security or platform team owns the transfer process, approvals and the internal mirror. Application teams should not pull packages on their own.
- Image provenance: Import container images and Python packages through a documented process, record hashes for each artifact and prefer pinned versions over floating tags.
- Networking: Keep the server and its model endpoints on the internal network. Confirm that no default telemetry or model download makes an outbound call at runtime.
- Secrets: Use the internal vault, make sure no external secrets service is needed and check that model credentials do not appear in logs.
- Upgrade path: Each upgrade repeats the full import cycle, including any safety-model weights, so schedule transfer windows ahead of each release.
Confirm with NVIDIA exactly which model and safety-model weights each rail needs and where they are fetched from, because a missing artifact may not surface until that rail is exercised.
What drives the effort of a guardrails server rollout
This table lists the factors that change how much work a NeMo Guardrails server rollout takes, and how to keep each one contained. Read it as a checklist for scoping: each row names a driver, why it matters, and the design choice that keeps it manageable. Effort estimates come from a written scope that reflects your own counts and environments, not from general figures.
| Driver | Why it changes effort | How to keep it down |
|---|---|---|
| Applications and configurations served | Each config folder loaded by the server needs its own rails, testing and review, so effort grows with every app or tenant that gets a separate configuration. | Consolidate shared rails into a common base config and keep per-application differences to small overrides. |
| Rail types enabled per configuration | Input, dialog, retrieval, execution and output rails each add behavior to test, and combining them multiplies the cases a reviewer must check. | Enable only the rails each use case needs and document the reason for each one in the config. |
| Local versus external safety models | Self-check, fact-checking, hallucination, content safety, topic safety and jailbreak detection can run on your hardware or through external calls, which changes hosting, credentials, data flows and latency work. | Decide the model hosting pattern per rail before build, and record which data leaves your boundary for each one. |
| Colang version and existing configs to convert | Colang 1.0 is the default, and NVIDIA says converted Colang 2.x configurations still need manual review, so existing flows add conversion and review hours. | Inventory current configs first, convert in a branch, and review converted flows against the same test corpus. |
| Integrations (LangChain, retrieval, custom actions) | LangChain support is opt-in through an environment variable, and each retrieval source or Python action needs its own connection, error handling and tests. | Limit integrations to those the use case requires and wrap each custom action behind a tested interface. |
| Environments (dev, staging, production, air-gapped) | Each environment needs its own config set, secrets, model endpoints and deployment checks, and air-gapped sites need model artifacts moved in by a controlled process. | Use one tested server image promoted unchanged across environments, with only configuration and secrets varying. |
| Evidence for compliance reviews | Assessors and internal reviewers typically ask for rail definitions, test results, change records and logs of blocked requests, which take time to collect and keep current. | Define the test corpus and evidence format up front, and generate test reports and config versions as part of each release. |
Protecting the server endpoint and model credentials
A NeMo Guardrails server sits between your users and your model providers, so it holds both the traffic and the keys. The controls below limit who can reach the endpoint, what credentials the process can read, where it can send requests, and who can alter the rails that decide what gets through.
Authentication and rate limiting at the gateway
Place an API gateway or reverse proxy in front of the guardrails endpoint and enforce authentication there, so unauthenticated callers never reach the server process. Apply rate limits per client, since every guarded request can trigger extra model and safety-model calls. Confirm which identity method your gateway supports and whether the guardrails server itself checks any caller identity in your version.
Model and provider keys in a secrets manager
Store provider API keys and safety-model credentials in a secrets manager and inject them into the container or process at runtime, rather than writing them into config.yml, Colang files or the image. Scope each key to the minimum model access the configuration needs. Plan rotation as a routine task, and confirm that your secrets tooling can restart the server cleanly after a rotation.
Read-only configuration mounts
Mount the configuration folder that the server loads, including config.yml, Colang files and Python actions, as read-only inside the container. A process that can write to its own rails can disable them. Check that the server does not need write access for caching or logs in the chosen version, and send logs to a separate writable volume.
Egress restricted to approved model endpoints
Limit outbound network access from the server to the model providers, safety-model endpoints and telemetry targets you have approved. If a rail or custom action can call arbitrary URLs, an attacker who influences that path can reach internal services or exfiltrate data. Test egress rules with each configuration change, because new integrations often need new destinations.
Change control over configuration files
Restrict write access to the rails repository to a named group, and require review and approval before configuration changes reach the server. Keep configurations in version control so each change has an author and a diff. Separate who edits Colang behavior from who deploys it, and record which configuration version each running server uses.
How to test that the guardrails server works and fails safely
Before the guardrails server takes production traffic, the test plan should prove two things: each rail type behaves as written, and the server fails in a way the team has chosen and documented. Start with a functional matrix that has one row per rail type: input, dialog, retrieval, execution and output rails. For each row, define at least one request that must be allowed and one that must be blocked, along with the exact response your application expects for each. Store these cases with the configuration folder in version control so they travel with the code. Send the requests through the HTTP API the way your application will, so request serialization, configuration loading and error responses are tested alongside the rails themselves. Record which rail fired for every blocked case, since a block from the wrong rail usually points to a configuration problem.
The adversarial set confirms that inputs meant to be stopped are stopped. Build prompts for instruction override, role-play framing, encoded or obfuscated text, and attempts to extract the system prompt or retrieved context. Run them against every configuration that exposes an input rail and confirm each one is blocked by the expected rail. Keep the set versioned and add every bypass found in review or incident response. Treat this suite as a regression floor. Deeper adversarial work is covered in the security hardening section. Separately, check isolation: send a request to each configuration and confirm that a rail defined in one configuration never fires in another. Common causes of leakage are shared Colang files or Python actions loaded from a common folder, and a default configuration applied when a requested configuration ID is missing. Confirm how your server version selects a configuration for unknown IDs, and test that path explicitly.
The failure test answers the question most teams leave open: what happens when a dependency is unavailable. Stop the main model endpoint, then the self-check or safety-model endpoint, one at a time, and send requests during each outage. Observe whether the server blocks the request, passes it through without the rail running, or returns an error. Each outcome can be acceptable, but only if the risk owner has chosen it and it is written down. Pass-through means unchecked traffic reaches the model, so it needs a clear justification and monitoring. Measure how long a request waits before the fallback applies, because a long timeout can look like a hang to the calling application. Put the observed behavior into the runbook and confirm the application handles the error or status the server returns. Confirm the exact fallback behavior for the NeMo Guardrails version you deploy with the project documentation or the vendor, since it depends on configuration and version.
The load test runs at the concurrency your application expects, plus the headroom your operations team requires, against each production configuration. Record latency per rail as well as end to end: time spent in input, dialog, retrieval, execution and output rails, and the time for each model or safety-model call they make. Rails that call a model add a request to the model path, so those calls usually dominate the total. Use the breakdown to decide which rails to tune, batch or drop. Run the same test before and after every configuration change so the baseline stays meaningful. Ask the team that owns the model endpoints for their rate limits, since those limits often cap throughput before the guardrails server does. Save each result with the configuration version and image digest it was measured against.
The rollback drill proves that the previous container image can be restored under pressure. Deploy the new image to a staging environment, then roll back to the prior image by its digest. After each step, confirm the server starts, loads every configuration in the folder, and passes the full functional and adversarial suite. Time the drill and record who ran it and which steps needed manual work. Pin images by digest in deployment manifests, because a floating tag can point to a different build after a rebuild. Make the test suite a required gate in the delivery pipeline, and run it on every configuration change and every image rebuild, including rebuilds with no code change, since updated base images or Python dependencies can change behavior. A test that passed last month says nothing reliable about today's image.
What to monitor, back up and document after go-live
A guardrails server becomes a control point once real traffic passes through it, so the team needs signals, records and recovery material ready before launch. The cards below cover what to watch, what to keep, and what to write down so that any configuration can be explained, restored or rolled back. Each item maps to a specific artifact in the server deployment, from config folders to the image build recipe.
Health and latency per configuration
Track health checks and response latency separately for each guardrails configuration the server loads, because a rail set with safety-model calls can be far slower than a lightweight one on the same server. Compare latency with and without each rail type during staging so that production baselines mean something. Confirm which health and metrics endpoints your release exposes in its documentation before building dashboards on them.
Model call error and timeout rates
Guardrails make their own calls to the main LLM and to any self-check or safety models, so a timeout can come from a rail rather than the application. Record error and timeout rates per model endpoint and per rail, and set alert thresholds that tell the on-call engineer which dependency is failing. Review how the server behaves when a rail call times out, since that decision determines whether requests are blocked, passed through or retried.
Logs of blocked and modified requests
Log every request that a rail blocks or modifies, including the configuration name, the rail that acted and the outcome, so security and product teams can review decisions. Set retention periods in line with your data protection and records policy, and decide whether prompts and responses are stored in full, redacted or hashed. Confirm which logging options your release supports before writing the logging design.
Backups of configuration assets
Back up the config folders, Colang files, Python actions and the image build recipe, including the Dockerfile and pinned dependency versions. Store them in version control and in a separate backup location with access controls, since a rebuild from memory is rarely identical. Test a restore into an empty environment at least once so the backup is proven, not assumed.
Upgrade and rollback runbook
Document the steps to upgrade the server image, the library version and the configurations, along with the steps to return to the last known good release. The runbook should name the owner, the approval point, the regression tests to run and the rollback trigger. Upgrade mechanics and version-specific behavior are covered in the upgrades topic, so this runbook should link to that work rather than repeat it.
Configuration register
Maintain a register that lists each configuration, its named owner, the rails enabled, the models each rail calls, and the date and result of its latest test run. Review the register whenever a rail is added, removed or changed, and when staff change roles. The register lets an auditor or incident responder see which controls were active for a given application at a given time.
Questions teams ask before running NeMo Guardrails as a server
Can one engineer run NeMo Guardrails as a server in-house?
Yes, if that engineer owns Python, containers and the LLM provider integration and has time for testing. The server loads a folder containing a config.yml, optional Python actions and Colang files, then exposes an HTTP API. NVIDIA provides a Dockerfile for building the server image, so the container work is usually the smaller part. The larger effort is writing rails that behave correctly against your own model and then testing them. Because one person becomes a single point of failure, name a backup for configuration changes and upgrades. A short pilot with one rail and one model is a practical way to judge whether your team has the capacity before committing to a full scope.
What does our team need to provide for a NeMo Guardrails server deployment?
The work depends on access to several things, so confirm each one before the written scope is final:
- Endpoints for the LLM and for any safety models you plan to call, including credentials and rate limits.
- A test corpus of prompts, expected blocks and expected passes that reflects your users and your policies.
- A container registry and a secrets tool where image builds and model credentials can be stored.
- A named owner on your side who can approve rail behavior, sign off on test results and make decisions during the engagement.
If any of these are missing at the start, the schedule in the scope should show when they are expected, because rail design and testing cannot be completed without them.
How is the cost of a NeMo Guardrails server deployment set?
DeployOpen does not publish a price list. The cost follows from a written, fixed scope that lists the rails to implement, the configurations and environments to build, the integrations and the testing to perform. The main cost drivers are the number of rails, the number of configurations, the number of LLM and safety-model calls each request triggers, how much custom Python action work is needed, and how much testing your corpus requires. Setup effort is generally one-time, while upgrades, regression testing and production support recur, either as separate work or under a retainer. Ask for a quote that separates one-time build work from recurring items and shows the effort for each driver.
Should we run the NeMo Guardrails library or the Kubernetes microservice?
This is a decision to confirm against the written scope and the sibling cost topic on library versus microservice, because the answer depends on your platform and operating model. The open-source library is Apache 2.0 licensed and runs in your own service. The NVIDIA NeMo Guardrails microservice is a production container image built on the same configuration model and deployed on Kubernetes with Helm. Compare infrastructure needs, the extra model calls each request makes in either setup, and who will carry the engineering and support effort. Confirm licensing and access terms for the microservice directly with NVIDIA before choosing it.
How long does a NeMo Guardrails server deployment take?
The duration depends on the number of rails, the number of configurations, the number of environments and the depth of testing your corpus requires. Each of these adds build, review and validation steps, and environment promotion adds time of its own. Because these inputs vary widely between organizations, DeployOpen does not state a fixed duration in this section. Ask for a timeline in the written scope that lists milestones, the dependencies on your team and the points where your owner signs off. A timeline that is tied to named deliverables is easier to check than a single overall estimate.
How do we manage several NeMo Guardrails configurations on one server?
The server loads configurations from a folder, so each application or policy set is usually kept as its own configuration directory. Store these directories in version control, review changes the same way you review application code, and test each configuration against its own corpus before release. Confirm in the version you plan to run how the server selects a configuration for a request, and whether configurations can share Python actions or Colang files. Shared components reduce duplication but make a change in one place affect several applications, so plan regression tests for each shared file.
What usually goes wrong when NeMo Guardrails runs in front of an LLM?
The most common problems are configuration and environment issues rather than model behavior alone. Check the Colang version your configurations use, because Colang 1.0 is the default and Colang 2.0 is also supported, and migrations need manual review. Confirm the Python version is one the release supports, which is 3.10 through 3.13 for the current library. Set the LangChain integration explicitly if you use it, since it is opt-in through an environment variable. Also watch latency and timeouts, because each safety-model or LLM call adds time to a request, and keep credentials out of images and configuration files.
How DeployOpen scopes, builds and hands over a guardrails server
DeployOpen plans, implements, hardens, documents and supports self-hosted open-source platforms inside your own infrastructure, and NeMo Guardrails server deployment follows the same method. Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts.
How we scope
- Inventory the LLM applications, endpoints and configurations the guardrails server must protect.
- Agree which of the five rail types apply to each application, such as input, output or retrieval rails.
- Record which safety-model and LLM calls add latency and cost, and where they run.
How we build
- Organize config.yml, Colang files and Python actions into folders that the server loads per configuration.
- Build and test the server container from the provided Dockerfile inside your own registry and cloud account.
- Run regression tests of each rail against representative prompts, including blocked and allowed cases.
How we hand over
- Deliver configuration documentation, deployment runbooks and a record of the rail test results.
- Walk your platform and security engineers through the server API, logging and configuration changes.
- Confirm with your team which Colang version, Python version and NeMo Guardrails release you will run.
How we support
- Offer ongoing support, upgrades and continuous testing as a retainer after handover.
- Retest rails before each NeMo Guardrails upgrade, since behavior can change between 0.x releases.
- Review blocked-request logs with your team so rail definitions keep matching your policies.

