Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
92fe37c
fix(models): suppress langchain_nvidia_ai_endpoints warnings (#1371)
Pouyanpi Sep 4, 2025
877785a
docs(tracing): Update tracing notebooks with VDR feedback (#1376)
tgasser-nv Sep 5, 2025
957a5de
chore: prepare for release v0.16.0 (#1362)
github-actions[bot] Sep 5, 2025
2ea4a27
chore(docs): Update v0.16.0 release date in changelog (#1377)
tgasser-nv Sep 5, 2025
d2450e2
chore(deps): update poetry.lock (#1359)
Pouyanpi Sep 9, 2025
eb29437
fix(jailbreak): handle URL joining with/without trailing slashes (#1346)
Pouyanpi Sep 10, 2025
7f70ee7
docs(examples): add NeMoGuard safety rails config example for Colang …
Pouyanpi Sep 15, 2025
f9bbc92
chore(docs): Add link to demo.py script in Getting-Started section (#…
tgasser-nv Sep 16, 2025
2af64d6
fix(logging): handle missing id and task in verbose logs (#1343)
Pouyanpi Sep 17, 2025
5d974e5
ci: enable codecov for all pull requests (#1402)
Pouyanpi Sep 18, 2025
51b1308
feat(tool-calling): add tool call passthrough support in LLMRails (#1…
Pouyanpi Sep 22, 2025
93083d1
feat(runnable): complete rewrite of RunnableRails with full LangChain…
Pouyanpi Sep 22, 2025
5e9debd
feat(runnable-rails): implement AIMessage metadata parity in Runnable…
Pouyanpi Sep 22, 2025
f9b63e4
feat(runnable-rails): stream metadata in RunnableRails output (#1370)
Pouyanpi Sep 22, 2025
33e0a50
fix(ci): prevent duplicate runs on PR updates (#1406)
Pouyanpi Sep 22, 2025
3f44a73
feat(tool-rails): add support for tool output rails and validation (#…
Pouyanpi Sep 22, 2025
96111da
feat(tool-rails): implement tool input rails for tool message validat…
Pouyanpi Sep 22, 2025
38d1892
fix(runnable-rails): preserve message metadata in RunnableRails tool …
Pouyanpi Sep 22, 2025
028b442
feat: Add Trend Micro Vision One AI Application Security community in…
trend-willem-gooderham Sep 22, 2025
5ff0702
fix(community): fix import package declaration to new cleanlab-tlm na…
cgnorthcutt Sep 22, 2025
55c9641
feat(llm): pass llm params directly (#1387)
Pouyanpi Sep 23, 2025
ce28483
refactor(llm): remove LLMs isolation for actions (#1408)
Pouyanpi Sep 23, 2025
0fc704a
docs: add hardware reqs (#1411)
miyoungc Sep 23, 2025
f58a12a
chore(types): Type-clean rails (86 errors) (#1396)
tgasser-nv Sep 24, 2025
c78af45
chore(jailbreak-detection): update transformers and torch (#1417)
Pouyanpi Sep 25, 2025
ccbc6ca
fix(logging): add "Tool" type to message sender labeling (#1412)
Pouyanpi Sep 25, 2025
77de2a8
fix(logging): correct message type formatting in logs (#1416)
Pouyanpi Sep 25, 2025
67de947
chore(types): Type-clean /actions (189 errors) (#1361)
tgasser-nv Sep 26, 2025
176544d
docs: add tools integration guide (#1414)
Pouyanpi Sep 26, 2025
6ee1dd8
chore(docs): Update repository owner (#1425)
mikemckiernan Sep 29, 2025
6d65292
docs(langgraph): add integration guide for LangGraph (#1422)
Pouyanpi Sep 29, 2025
89225dc
docs(langchain): update with full support and add tool calling guide …
Pouyanpi Sep 29, 2025
6c935fa
Removed red-teaming example and doc references *apart from* the chang…
tgasser-nv Oct 6, 2025
bf619d2
docs(langgraph): clarify tool examples and replace calculate_math wit…
Pouyanpi Oct 7, 2025
554ec30
docs(tools): complete RunnableRails integration section with LangCha…
Pouyanpi Oct 7, 2025
3a2680e
ci(workflows): add PyPI publishing workflow with manual approval (#1428)
Pouyanpi Oct 8, 2025
eb4dd46
chore: prepare for release v0.17.0 (#1442)
github-actions[bot] Oct 9, 2025
a454397
ci: resolve PyPI publish workflow trigger and reliability issues (#1443)
Pouyanpi Oct 9, 2025
fa11381
ci: fix sparse checkout for publish pypi workflow (#1444)
Pouyanpi Oct 9, 2025
2b7d96b
docs: Release notes for v0.17.0 (#1438)
mikemckiernan Oct 9, 2025
cc3fa0c
docs: More detail for release notes (#1447)
mikemckiernan Oct 10, 2025
116c051
chore: drop Python 3.9 support ahead of October 2025 EOL (#1426)
Pouyanpi Oct 13, 2025
785852d
refactor!: replace reasoning trace extraction with LangChain addition…
Pouyanpi Oct 13, 2025
3f546ae
feat(bot-thinking): add reasoning trace extraction from llm calls (#1…
Pouyanpi Oct 13, 2025
59d1a6d
feat(bot-thinking): emit BotThinking events with reasoning traces (#1…
Pouyanpi Oct 13, 2025
d660d66
feat(bot-thinking): improve event logging and add bot thinking displa…
Pouyanpi Oct 13, 2025
25e00a7
test: add mock embedding provider tests (#1446)
Pouyanpi Oct 15, 2025
c849453
test(cli): add comprehensive CLI test suite and reorganize files (#1339)
Pouyanpi Oct 15, 2025
177a629
feat: Add Azure OpenAI embedding provider (#702)
shubhiroy Oct 15, 2025
776befd
chore(types): Type-clean tracing (10 errors) (#1388)
tgasser-nv Oct 15, 2025
e3d2a8e
chore(types): Type-clean logging (43 errors) (#1395)
tgasser-nv Oct 15, 2025
f6c5830
chore(types): Type-clean kb/ (1 error) (#1385)
tgasser-nv Oct 15, 2025
df51265
chore(types): Type-clean /cli (37 errors) (#1380)
tgasser-nv Oct 15, 2025
81e7c0b
feat: Add Cisco AI Defense integration (#1433)
rucpande Oct 16, 2025
a588d4c
feat(cache): Add LFU caching system for models (currently applied to …
hazai Oct 17, 2025
7491c69
fix(config): validate content safety and topic control configs at cre…
tgasser-nv Oct 17, 2025
ea92409
chore: update insert licenser pe-commit-hooks to use current year (#1…
Pouyanpi Oct 17, 2025
a52998f
style(cache): replace pass with ellipsis in abstract methods (#1455)
Pouyanpi Oct 17, 2025
32d57f5
feat(cache): add LLM metadata caching for model and provider informat…
Pouyanpi Oct 19, 2025
b458254
feat(cache): add caching support for topic safety and content safety …
Pouyanpi Oct 19, 2025
ce7b866
feat(cache): add caching support for jailbreak detection (#1458)
Pouyanpi Oct 19, 2025
6cf9f82
test: skip FastEmbed tests when not in live mode (#1462)
Pouyanpi Oct 20, 2025
4de5b2f
feat: add Cohere embedding integration (#1305)
bwook00 Oct 20, 2025
c7cceee
feat: add Google embedding integration (#1304)
bwook00 Oct 20, 2025
bab0026
fix(jailbreak): capitalization of `Snowflake` in use of `snowflake-ar…
erickgalinkin Oct 20, 2025
861ec38
test: fix flaky stats logging interval timing test (#1463)
Pouyanpi Oct 21, 2025
a2f17bc
chore(library): remove unused vllm requirements.txt files (#1466)
Pouyanpi Oct 22, 2025
39d74ad
feat(llm): Add automatic provider inference for LangChain LLMs (#1460)
Pouyanpi Oct 22, 2025
2ced24c
fix(runtime): ensure stop flag is set for policy violations in parall…
Pouyanpi Oct 24, 2025
f7b5daf
fix(llm)!: extract reasoning traces to separate field instead of prep…
Pouyanpi Oct 24, 2025
aafd733
feat(llm): Add custom HTTP headers support to ChatNVIDIA provider (#1…
Pouyanpi Oct 24, 2025
912cdea
chore(llm): deprecate nemoguardrails.llm.params module in favor of di…
Pouyanpi Oct 24, 2025
c8c18b0
fix(streaming)!: raise error when stream_async used with disabled out…
Pouyanpi Oct 27, 2025
7c59b61
chore(types): Type-clean embeddings/ (25 errors) (#1383)
tgasser-nv Oct 28, 2025
aa6a08e
test: restore test that was skipped due to Colang 2.0 serialization i…
Pouyanpi Oct 28, 2025
735ddac
fix(llm): add fallback extraction for reasoning traces from <think> t…
Pouyanpi Oct 28, 2025
d2d41f4
chore(types): Type-clean server/ (20 errors) (#1397)
tgasser-nv Oct 28, 2025
2d773cc
chore(types): Type-clean llm/ (27 errors) (#1394)
tgasser-nv Oct 28, 2025
6676990
feat(benchmark): Create mock LLM server for use in benchmarks (#1403)
tgasser-nv Oct 29, 2025
28826ec
docs(examples): add nemoguards cache configuration example (#1459)
Pouyanpi Oct 29, 2025
d380fe1
docs: add guide for bot reasoning guardrails (#1479)
Pouyanpi Oct 31, 2025
121fc8f
docs(cache): Documentation on in-memory caching (#1480)
tgasser-nv Oct 31, 2025
01ab146
fix(runtime): set stop flag for exception-based rails in parallel mod…
Pouyanpi Nov 3, 2025
b5b7579
docs: update LLM reasoning traces config guidance (#1483)
Pouyanpi Nov 3, 2025
dda9521
docs: prepare 0.18 doc release (#1493)
miyoungc Nov 5, 2025
b3b6237
docs: Add nemotron safety guard (#1494)
mikemckiernan Nov 5, 2025
1a27839
Update starlette version >= 0.49.1 to fix vulnerability (#1495)
tgasser-nv Nov 6, 2025
afb1bf0
chore: prepare for release v0.18.0 (#1491)
github-actions[bot] Nov 6, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.245.2/containers/python-3/.devcontainer/base.Dockerfile

# [Choice] Python version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.10, 3.9, 3.8, 3.7, 3.6, 3-bullseye, 3.10-bullseye, 3.9-bullseye, 3.8-bullseye, 3.7-bullseye, 3.6-bullseye, 3-buster, 3.10-buster, 3.9-buster, 3.8-buster, 3.7-buster, 3.6-buster
# [Choice] Python version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.13, 3.12, 3.11, 3.10, 3-bullseye, 3.13-bullseye, 3.12-bullseye, 3.11-bullseye, 3.10-bullseye, 3-buster, 3.13-buster, 3.12-buster, 3.11-buster, 3.10-buster
ARG VARIANT="3.10-bullseye"
FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT}

Expand Down
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"dockerfile": "Dockerfile",
"context": "..",
"args": {
// Update 'VARIANT' to pick a Python version: 3, 3.10, 3.9, 3.8, 3.7, 3.6
// Update 'VARIANT' to pick a Python version: 3, 3.13, 3.12, 3.11, 3.10
// Append -bullseye or -buster to pin to an OS version.
// Use -bullseye variants on local on arm64/Apple Silicon.
"VARIANT": "3.10-bullseye",
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docs-build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ jobs:
path: pr/

store-html:
if: github.event_name == 'push' && github.repository_owner == 'NVIDIA'
if: github.event_name == 'push' && github.repository_owner == 'NVIDIA-NeMo'
needs: [build-docs]
runs-on: ubuntu-latest
steps:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/full-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
strategy:
matrix:
os: [Windows, macOS] # exclude Ubuntu as it is available in pr-tests
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
python-version: ["3.10", "3.11", "3.12", "3.13"]
include:
- os: Windows
image: windows-2022
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/latest-deps-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
strategy:
matrix:
os: [Ubuntu]
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
python-version: ["3.10", "3.11", "3.12", "3.13"]
include:
- os: Ubuntu
image: ubuntu-latest
Expand Down
4 changes: 1 addition & 3 deletions .github/workflows/pr-tests.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
name: PR Tests

on:
push:

pull_request:
# we don't ignore markdkowns to run pre-commits
paths-ignore:
Expand All @@ -13,7 +11,7 @@ jobs:
strategy:
matrix:
os: [Ubuntu]
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
python-version: ["3.10", "3.11", "3.12", "3.13"]
include:
- os: Ubuntu
image: ubuntu-latest
Expand Down
119 changes: 119 additions & 0 deletions .github/workflows/publish-pypi-approval.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
name: Publish to PyPI (with Approval)

on:
workflow_run:
workflows: ["Build and Test Distribution"]
types:
- completed

jobs:
publish-pypi:
if: github.event.workflow_run.conclusion == 'success'
runs-on: ubuntu-latest
environment:
name: pypi-production
url: https://pypi.org/project/nemoguardrails/
permissions:
contents: write
id-token: write

steps:
- name: Checkout repository for tag detection
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Detect version tag and extract info
id: version
run: |
COMMIT_SHA="${{ github.event.workflow_run.head_sha }}"

TAG_NAME=$(git tag --points-at "$COMMIT_SHA" | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+' | head -1)

if [ -z "$TAG_NAME" ]; then
echo "❌ No version tag found at commit $COMMIT_SHA"
echo "Available tags at this commit:"
git tag --points-at "$COMMIT_SHA" || echo " (none)"
exit 1
fi

VERSION="${TAG_NAME#v}"
echo "version=${VERSION}" >> $GITHUB_OUTPUT
echo "tag=${TAG_NAME}" >> $GITHUB_OUTPUT
echo "artifact_name=${TAG_NAME}-build" >> $GITHUB_OUTPUT
echo "✅ Detected version tag: $TAG_NAME"

- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ steps.version.outputs.tag }}

- name: Validate version matches tag
run: |
VERSION_IN_FILE=$(grep '^version = ' pyproject.toml | sed 's/version = "\(.*\)"/\1/')
TAG_VERSION="${{ steps.version.outputs.version }}"
if [ "$VERSION_IN_FILE" != "$TAG_VERSION" ]; then
echo "❌ Version mismatch: pyproject.toml=$VERSION_IN_FILE, tag=$TAG_VERSION"
exit 1
fi
echo "✅ Version validated: $VERSION_IN_FILE matches tag $TAG_VERSION"

- name: Download artifact
uses: actions/download-artifact@v4
with:
name: ${{ steps.version.outputs.artifact_name }}
path: dist
github-token: ${{ secrets.GITHUB_TOKEN }}
repository: ${{ github.repository }}
run-id: ${{ github.event.workflow_run.id }}

- name: List files
run: ls -la dist/

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
verbose: true
packages-dir: dist/
attestations: true

- name: Create GitHub Release
env:
GH_TOKEN: ${{ github.token }}
run: |
TAG_NAME="${{ steps.version.outputs.tag }}"

git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"

CHANGELOG_SECTION=$(awk -v version="${{ steps.version.outputs.version }}" '
/^## \[/ {
if (found) exit
if ($0 ~ "\\[" version "\\]") {
found=1
next
}
}
found && /^## \[/ { exit }
found { print }
' CHANGELOG.md || echo "No changelog entry found for this version.")

echo "$CHANGELOG_SECTION" > release_notes.md

if gh release view "$TAG_NAME" --repo ${{ github.repository }} >/dev/null 2>&1; then
echo "ℹ️ Release $TAG_NAME already exists, skipping creation"
else
if gh release create "$TAG_NAME" \
--draft \
--title "$TAG_NAME" \
--notes-file release_notes.md \
--repo ${{ github.repository }}; then
echo "✅ Release $TAG_NAME created successfully"
else
echo "❌ Failed to create release $TAG_NAME" >&2
rm -f release_notes.md
exit 1
fi
fi

rm -f release_notes.md
2 changes: 1 addition & 1 deletion .github/workflows/test-and-build-wheel.yml
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
python-version: ["3.10", "3.11", "3.12", "3.13"]
steps:
- name: Set up Python
uses: actions/setup-python@v5
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/test-coverage-report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: Coverage Report

on:
push:
branches: [develop]
branches: ["**"]
pull_request:
branches: [develop]
branches: ["**"]

jobs:
test:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test-published-dist.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12"]
python-version: ["3.10", "3.11", "3.12", "3.13"]
steps:
- name: Set up Python
uses: actions/setup-python@v5
Expand Down
4 changes: 0 additions & 4 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,6 @@ cache:

# Tests jobs

python3.9:
<<: *test
image: python:3.9

python3.10:
<<: *test
image: python:3.10
Expand Down
12 changes: 10 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,18 @@ repos:
args:
- --license-filepath
- LICENSE.md

- --use-current-year
- repo: local
hooks:
- id: pyright
name: pyright
entry: poetry run pyright
language: system
types: [python]
pass_filenames: false
# Deactivating this for now.
# - repo: https://github.com/pycqa/pylint
# rev: v2.17.0
# hooks:
# - id: pylint
# language_version: python3.9
# language_version: python3.10
138 changes: 138 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,144 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
>
> The changes related to the Colang language and runtime have moved to [CHANGELOG-Colang](./CHANGELOG-Colang.md) file.

## [0.18.0] - 2025-11-06

### 🚀 Features

- *(bot-thinking)* Implement BotThinking events to process reasoning traces in Guardrails ([#1431](https://github.com/NVIDIA/NeMo-Guardrails/issues/1431)), ([#1432](https://github.com/NVIDIA/NeMo-Guardrails/issues/1432)), ([#1434](https://github.com/NVIDIA/NeMo-Guardrails/issues/1434)).
- *(embeddings)* Add Azure OpenAI embedding provider ([#702](https://github.com/NVIDIA/NeMo-Guardrails/issues/702)).
- *(embeddings)* Add Cohere embedding integration ([#1305](https://github.com/NVIDIA/NeMo-Guardrails/issues/1305)).
- *(embeddings)* Add Google embedding integration ([#1304](https://github.com/NVIDIA/NeMo-Guardrails/issues/1304)).
- *(library)* Add Cisco AI Defense integration ([#1433](https://github.com/NVIDIA/NeMo-Guardrails/issues/1433)).
- *(cache)* Add in-memory LFU caches for content-safety, topic-control, and jailbreak detection models ([#1436](https://github.com/NVIDIA/NeMo-Guardrails/issues/1436)), ([#1456](https://github.com/NVIDIA/NeMo-Guardrails/issues/1456)), ([#1457](https://github.com/NVIDIA/NeMo-Guardrails/issues/1457)), ([#1458](https://github.com/NVIDIA/NeMo-Guardrails/issues/1458)).
- *(llm)* Add automatic provider inference for LangChain LLMs ([#1460](https://github.com/NVIDIA/NeMo-Guardrails/issues/1460)).
- *(llm)* Add custom HTTP headers support to ChatNVIDIA provider ([#1461](https://github.com/NVIDIA/NeMo-Guardrails/issues/1461)).

### 🐛 Bug Fixes

- *(config)* Validate content safety and topic control configs at creation time ([#1450](https://github.com/NVIDIA/NeMo-Guardrails/issues/1450)).
- *(jailbreak)* Capitalization of `Snowflake` in use of `snowflake-arctic-embed-m-long` name. ([#1464](https://github.com/NVIDIA/NeMo-Guardrails/issues/1464)).
- *(runtime)* Ensure stop flag is set for policy violations in parallel rails ([#1467](https://github.com/NVIDIA/NeMo-Guardrails/issues/1467)).
- *(llm)* [**breaking**] Extract reasoning traces to separate field instead of prepending ([#1468](https://github.com/NVIDIA/NeMo-Guardrails/issues/1468)).
- *(streaming)* [**breaking**] Raise error when stream_async used with disabled output rails streaming ([#1470](https://github.com/NVIDIA/NeMo-Guardrails/issues/1470)).
- *(llm)* Add fallback extraction for reasoning traces from <think> tags ([#1474](https://github.com/NVIDIA/NeMo-Guardrails/issues/1474)).
- *(runtime)* Set stop flag for exception-based rails in parallel mode ([#1487](https://github.com/NVIDIA/NeMo-Guardrails/issues/1487)).

### 🚜 Refactor

- [**breaking**] Replace reasoning trace extraction with LangChain additional_kwargs ([#1427](https://github.com/NVIDIA/NeMo-Guardrails/issues/1427))

### 📚 Documentation

- *(examples)* Add Nemoguard in-memory cache configuration example ([#1459](https://github.com/NVIDIA/NeMo-Guardrails/issues/1459)), ([#1480](https://github.com/NVIDIA/NeMo-Guardrails/issues/1480)).
- Add guide for bot reasoning guardrails ([#1479](https://github.com/NVIDIA/NeMo-Guardrails/issues/1479)).
- Update LLM reasoning traces configuration ([#1483](https://github.com/NVIDIA/NeMo-Guardrails/issues/1483)).

### 🧪 Testing

- Add mock embedding provider tests ([#1446](https://github.com/NVIDIA/NeMo-Guardrails/issues/1446))
- *(cli)* Add comprehensive CLI test suite and reorganize files ([#1339](https://github.com/NVIDIA/NeMo-Guardrails/issues/1339))
- Skip FastEmbed tests when not in live mode ([#1462](https://github.com/NVIDIA/NeMo-Guardrails/issues/1462))
- Fix flaky stats logging interval timing test ([#1463](https://github.com/NVIDIA/NeMo-Guardrails/issues/1463))
- Restore test that was skipped due to Colang 2.0 serialization issue ([#1449](https://github.com/NVIDIA/NeMo-Guardrails/issues/1449))

### ⚙️ Miscellaneous Tasks

- Resolve PyPI publish workflow trigger and reliability issues ([#1443](https://github.com/NVIDIA/NeMo-Guardrails/issues/1443))
- Fix sparse checkout for publish pypi workflow ([#1444](https://github.com/NVIDIA/NeMo-Guardrails/issues/1444))
- Drop Python 3.9 support ahead of October 2025 EOL ([#1426](https://github.com/NVIDIA/NeMo-Guardrails/issues/1426))
- *(types)* Add type-annotations and pre-commit checks for tracing ([#1388](https://github.com/NVIDIA/NeMo-Guardrails/issues/1388)), logging ([#1395](https://github.com/NVIDIA/NeMo-Guardrails/issues/1395)), kb ([#1385](https://github.com/NVIDIA/NeMo-Guardrails/issues/1385)), cli ([#1380](https://github.com/NVIDIA/NeMo-Guardrails/issues/1380)), embeddings ([#1383](https://github.com/NVIDIA/NeMo-Guardrails/issues/1383)), server ([#1397](https://github.com/NVIDIA/NeMo-Guardrails/issues/1397)), and llm ([#1394](https://github.com/NVIDIA/NeMo-Guardrails/issues/1394)) code.
- Update insert licenser pe-commit-hooks to use current year ([#1452](https://github.com/NVIDIA/NeMo-Guardrails/issues/1452)).
- *(library)* Remove unused vllm requirements.txt files ([#1466](https://github.com/NVIDIA/NeMo-Guardrails/issues/1466)).

## [0.17.0] - 2025-10-09

### 🚀 Features

- *(tool-calling)* Add tool call passthrough support in LLMRails ([#1364](https://github.com/NVIDIA/NeMo-Guardrails/issues/1364))
- *(runnable-rails)* Complete rewrite of RunnableRails with full LangChain Runnable protocol support ([#1366](https://github.com/NVIDIA/NeMo-Guardrails/issues/1366), [#1369](https://github.com/NVIDIA/NeMo-Guardrails/issues/1369), [#1370](https://github.com/NVIDIA/NeMo-Guardrails/issues/1370), [#1405](https://github.com/NVIDIA/NeMo-Guardrails/issues/1405))
- *(tool-rails)* Add support for tool output rails and validation ([#1382](https://github.com/NVIDIA/NeMo-Guardrails/issues/1382))
- *(tool-rails)* Implement tool input rails for tool message validation and processing ([#1386](https://github.com/NVIDIA/NeMo-Guardrails/issues/1386))
- *(library)* Add Trend Micro Vision One AI Application Security community integration ([#1355](https://github.com/NVIDIA/NeMo-Guardrails/issues/1355))
- *(llm)* Pass llm params directly ([#1387](https://github.com/NVIDIA/NeMo-Guardrails/issues/1387))

### 🐛 Bug Fixes

- *(jailbreak)* Handle URL joining with/without trailing slashes ([#1346](https://github.com/NVIDIA/NeMo-Guardrails/issues/1346))
- *(logging)* Handle missing id and task in verbose logs ([#1343](https://github.com/NVIDIA/NeMo-Guardrails/issues/1343))
- *(library)* Fix import package declaration to new cleanlab-tlm name ([#1401](https://github.com/NVIDIA/NeMo-Guardrails/issues/1401))
- *(logging)* Add "Tool" type to message sender labeling ([#1412](https://github.com/NVIDIA/NeMo-Guardrails/issues/1412))
- *(logging)* Correct message type formatting in logs ([#1416](https://github.com/NVIDIA/NeMo-Guardrails/issues/1416))

### 🚜 Refactor

- *(llm)* Remove LLMs isolation for actions ([#1408](https://github.com/NVIDIA/NeMo-Guardrails/issues/1408))

### 📚 Documentation

- *(examples)* Add NeMoGuard safety rails config example for Colang 1.0 ([#1365](https://github.com/NVIDIA/NeMo-Guardrails/issues/1365))
- Add hardware reqs ([#1411](https://github.com/NVIDIA/NeMo-Guardrails/issues/1411))
- Add tools integration guide ([#1414](https://github.com/NVIDIA/NeMo-Guardrails/issues/1414))
- *(langgraph)* Add integration guide for LangGraph ([#1422](https://github.com/NVIDIA/NeMo-Guardrails/issues/1422))
- *(langchain)* Update with full support and add tool calling guide … ([#1419](https://github.com/NVIDIA/NeMo-Guardrails/issues/1419))
- *(langgraph)* Clarify tool examples and replace calculate_math with multiply ([#1439](https://github.com/NVIDIA/NeMo-Guardrails/issues/1439))

### ⚙️ Miscellaneous Tasks

- *(docs)* Update v0.16.0 release date in changelog ([#1377](https://github.com/NVIDIA/NeMo-Guardrails/issues/1377))
- *(docs)* Add link to demo.py script in Getting-Started section ([#1399](https://github.com/NVIDIA/NeMo-Guardrails/issues/1399))
- *(types)* Type-clean rails (86 errors) ([#1396](https://github.com/NVIDIA/NeMo-Guardrails/issues/1396))
- *(jailbreak-detection)* Update transformers and torch ([#1417](https://github.com/NVIDIA/NeMo-Guardrails/issues/1417))
- *(types)* Type-clean /actions (189 errors) ([#1361](https://github.com/NVIDIA/NeMo-Guardrails/issues/1361))
- *(docs)* Update repository owner ([#1425](https://github.com/NVIDIA/NeMo-Guardrails/issues/1425))

## [0.16.0] - 2025-09-05

### 🚀 Features

- *(llmrails)* Support method chaining by returning self from LLMRails.register_* methods ([#1296](https://github.com/NVIDIA/NeMo-Guardrails/issues/1296))
- Add Pangea AI Guard community integration ([#1300](https://github.com/NVIDIA/NeMo-Guardrails/issues/1300))
- *(llmrails)* Isolate LLMs only for configured actions ([#1342](https://github.com/NVIDIA/NeMo-Guardrails/issues/1342))
- Enhance tracing system with OpenTelemetry semantic conventions ([#1331](https://github.com/NVIDIA/NeMo-Guardrails/issues/1331))
- Add GuardrailsAI community integration ([#1298](https://github.com/NVIDIA/NeMo-Guardrails/issues/1298))

### 🐛 Bug Fixes

- *(models)* Suppress langchain_nvidia_ai_endpoints warnings ([#1371](https://github.com/NVIDIA/NeMo-Guardrails/issues/1371))
- *(tracing)* Respect the user-provided log options regardless of tracing configuration
- *(config)* Ensure adding RailsConfig objects handles None values ([#1328](https://github.com/NVIDIA/NeMo-Guardrails/issues/1328))
- *(config)* Add handling for config directory with `.yml`/`.yaml` extension ([#1293](https://github.com/NVIDIA/NeMo-Guardrails/issues/1293))
- *(colang)* Apply guardrails transformations to LLM inputs and bot outputs. ([#1297](https://github.com/NVIDIA/NeMo-Guardrails/issues/1297))
- *(topic_safety)* Handle InternalEvent objects in topic safety actions for Colang 2.0 ([#1335](https://github.com/NVIDIA/NeMo-Guardrails/issues/1335))
- *(prompts)* Prevent IndexError when LLM provided via constructor with empty models config ([#1334](https://github.com/NVIDIA/NeMo-Guardrails/issues/1334))
- *(llmrails)* Handle LLM models without model_kwargs field in isolation ([#1336](https://github.com/NVIDIA/NeMo-Guardrails/issues/1336))
- *(llmrails)* Move LLM isolation setup to after KB initialization ([#1348](https://github.com/NVIDIA/NeMo-Guardrails/issues/1348))

### 🚜 Refactor

- *(llm)* Move get_action_details_from_flow_id from llmrails.py to utils.py ([#1341](https://github.com/NVIDIA/NeMo-Guardrails/issues/1341))

### 📚 Documentation

- Integrate with multilingual NIM ([#1354](https://github.com/NVIDIA/NeMo-Guardrails/issues/1354))
- *(tracing)* Update tracing notebooks with VDR feedback ([#1376](https://github.com/NVIDIA/NeMo-Guardrails/issues/1376))
- Add kv cache reuse documentation ([#1330](https://github.com/NVIDIA/NeMo-Guardrails/issues/1330))
- *(examples)* Add Colang 2.0 example for sensitive data detection ([#1301](https://github.com/NVIDIA/NeMo-Guardrails/issues/1301))
- Add extra slash to jailbreak detect nim_base_url([#1345](https://github.com/NVIDIA/NeMo-Guardrails/issues/1345))
- Add tracing notebook ([#1337](https://github.com/NVIDIA/NeMo-Guardrails/issues/1337))
- Jaeger tracing notebook ([#1353](https://github.com/NVIDIA/NeMo-Guardrails/issues/1353))
- *(examples)* Add NeMoGuard rails config for colang 2 ([#1289](https://github.com/NVIDIA/NeMo-Guardrails/issues/1289))
- *(tracing)* Add OpenTelemetry span format guide ([#1350](https://github.com/NVIDIA/NeMo-Guardrails/issues/1350))
- Add GuardrailsAI integration user guide and example ([#1357](https://github.com/NVIDIA/NeMo-Guardrails/issues/1357))

### 🧪 Testing

- *(jailbreak)* Add missing pytest.mark.asyncio decorators ([#1352](https://github.com/NVIDIA/NeMo-Guardrails/issues/1352))

### ⚙️ Miscellaneous Tasks

- *(docs)* Rename test_csl.py to csl.py ([#1347](https://github.com/NVIDIA/NeMo-Guardrails/issues/1347))

## [0.15.0] - 2025-08-08

### 🚀 Features
Expand Down
Loading
Loading