Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
2e56b06
Add agentic AI test info
nrichers Mar 25, 2026
cf93c4c
Unrelated link fix
nrichers Mar 25, 2026
65659fa
docs: Workflows User Action v2 > User Action step + Quarto update anc…
validbeck Mar 26, 2026
825af1b
Merge remote-tracking branch 'origin/main' into staging
github-actions[bot] Mar 26, 2026
7129efb
Merge pull request #1251 from validmind/update-staging-23606391351
github-actions[bot] Mar 26, 2026
85a56ee
Address comments from Anil
nrichers Mar 26, 2026
b75399e
docs: Workflow versioning (#1252)
validbeck Mar 27, 2026
a658fb9
Merge remote-tracking branch 'origin/main' into staging
github-actions[bot] Mar 27, 2026
e0e513e
Merge pull request #1254 from validmind/update-staging-23659178923
github-actions[bot] Mar 27, 2026
5c3b99c
Merge pull request #1249 from validmind/nrichers/sc-15351/add-agentic…
nrichers Mar 30, 2026
8d4a025
Merge remote-tracking branch 'origin/main' into staging
github-actions[bot] Mar 30, 2026
0665c0e
Merge pull request #1257 from validmind/update-staging-23754551816
github-actions[bot] Mar 30, 2026
14b9b59
Wording adjust (#1258)
validbeck Mar 30, 2026
053c9d1
Merge remote-tracking branch 'origin/main' into staging
github-actions[bot] Mar 30, 2026
c6a9706
Merge pull request #1259 from validmind/update-staging-23765657795
github-actions[bot] Mar 30, 2026
74ab013
Documentation for ValidMind MCP (#1221)
nrichers Mar 31, 2026
217a166
Merge remote-tracking branch 'origin/main' into staging
github-actions[bot] Mar 31, 2026
1b327c2
Merge pull request #1260 from validmind/update-staging-23820077674
github-actions[bot] Mar 31, 2026
560ac76
Preview for filter by category LUA filter alternative + add category-…
nrichers Mar 31, 2026
14c470f
Merge remote-tracking branch 'origin/main' into staging
github-actions[bot] Mar 31, 2026
94046ce
Merge pull request #1261 from validmind/update-staging-23823001870
github-actions[bot] Mar 31, 2026
91b7208
docs fixes: Remove old breaking changes/deprecrations from releases &…
validbeck Apr 1, 2026
1d843d8
Merge remote-tracking branch 'origin/main' into staging
github-actions[bot] Apr 1, 2026
f57f355
Merge pull request #1262 from validmind/update-staging-23827124057
github-actions[bot] Apr 1, 2026
31541c2
Nrichers/sc 15354/workflows fix notebook execution workflows (#1263)
nrichers Apr 3, 2026
3d43f04
Merge remote-tracking branch 'origin/main' into staging
github-actions[bot] Apr 3, 2026
cfd8cc7
Merge pull request #1264 from validmind/update-staging-23929015526
github-actions[bot] Apr 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/deploy-docs-prod.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ jobs:
run: aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID_PROD }} && aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY_PROD }} && aws configure set default.region us-east-1

- name: Deploy docs prod site
run: aws s3 sync site/_site s3://validmind-docs-prod/site --delete --exclude "installation/omnibus/*" --exclude "installation/helm-repo/*" --exclude "llm/*" && aws cloudfront create-invalidation --distribution-id E2BGG3USKQTR9W --paths "/*" --no-cli-pager
run: aws s3 sync site/_site s3://validmind-docs-prod/site --delete --exclude "installation/omnibus/*" --exclude "installation/helm-repo/*" --exclude "notebooks/EXECUTED/*" --exclude "llm/*" && aws cloudfront create-invalidation --distribution-id E2BGG3USKQTR9W --paths "/*" --no-cli-pager

# Release headroom and shrink before final lightweight steps & post-job
- name: Release reserve & shrink
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-docs-staging.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ jobs:
run: aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID_STAGING }} && aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY_STAGING }} && aws configure set default.region us-west-2

- name: Deploy docs staging site
run: aws s3 sync site/_site s3://validmind-docs-staging/site --delete --exclude "installation/helm-repo/*" --exclude "pr_previews/*" --exclude "llm/*" && aws cloudfront create-invalidation --distribution-id ESWVTZYFL873V --paths "/*" --no-cli-pager
run: aws s3 sync site/_site s3://validmind-docs-staging/site --delete --exclude "installation/helm-repo/*" --exclude "pr_previews/*" --exclude "notebooks/EXECUTED/*" --exclude "llm/*" && aws cloudfront create-invalidation --distribution-id ESWVTZYFL873V --paths "/*" --no-cli-pager

# Release headroom and shrink before final lightweight steps & post-job
- name: Release reserve & shrink
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/validate-docs-site.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ jobs:
run: aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID_STAGING }} && aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY_STAGING }} && aws configure set default.region us-east-1

- name: Deploy PR preview
run: aws s3 sync site/_site s3://validmind-docs-staging/site/pr_previews/${{ github.head_ref }} --delete && aws cloudfront create-invalidation --distribution-id ESWVTZYFL873V --paths "/*" --no-cli-pager
run: aws s3 sync site/_site s3://validmind-docs-staging/site/pr_previews/${{ github.head_ref }} --delete --exclude "notebooks/EXECUTED/*" && aws cloudfront create-invalidation --distribution-id ESWVTZYFL873V --paths "/*" --no-cli-pager

- name: Post comment with preview URL
uses: actions/github-script@v6
Expand Down
3 changes: 0 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,6 @@ site/validmind-docs.yaml
# Python API docs are now generated on the fly
site/validmind

# Generated template schema documentation
site/guide/templates/_template-schema-generated.qmd

# Cursor rules
.cursor/rules/
.cursor/skills/
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ Some documentation content is auto-generated from backend source files. These sc

#### Template schema documentation

The template schema reference in `site/guide/templates/customize-document-templates.qmd` is auto-generated from the backend JSON Schema. CI workflows generate this automatically, but you can also regenerate locally:
The template schema reference in `site/guide/templates/customize-document-templates.qmd` is auto-generated from the backend JSON Schema, overwriting any baseline output checked into this repo. You can also regenerate locally and commit:

```bash
cd site
Expand All @@ -172,7 +172,7 @@ make template-schema-docs
The script reads from:
- `backend/src/backend/templates/documentation/model_documentation/mdd_template_schema_v5.json` — template schema definition

Output: `site/guide/templates/_template-schema-generated.qmd`
Output: Content is injected directly into `site/guide/templates/customize-document-templates.qmd` between marker comments.

#### Stylesheet organization (IN PROGRESS)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
---
# Copyright © 2023-2026 ValidMind Inc. All rights reserved.
# Refer to the LICENSE file in the root of this repository for details.
# SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial
title: "Breaking changes and deprecations"
date: last-modified
categories: ["breaking changes", "deprecations"]
Expand Down
Binary file not shown.
Binary file not shown.
56 changes: 42 additions & 14 deletions scripts/generate_template_schema_docs.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,10 @@
BACKEND_ROOT = Path(os.environ.get("BACKEND_ROOT", REPO_ROOT.parent / "backend"))

SCHEMA_FILE = BACKEND_ROOT / "src/backend/templates/documentation/model_documentation/mdd_template_schema_v5_ui.json"
OUTPUT_FILE = REPO_ROOT / "site/guide/templates/_template-schema-generated.qmd"
TARGET_FILE = REPO_ROOT / "site/guide/templates/_template-schema-generated.qmd"

# Minimum expected file size in bytes (sanity check for valid output)
MIN_OUTPUT_SIZE = 40000

# CSS stylesheets to link in the generated HTML
STYLESHEETS = [
Expand Down Expand Up @@ -62,7 +65,7 @@ def main():
print(f"Generating schema documentation from {SCHEMA_FILE}")

# Create temporary output
temp_output = OUTPUT_FILE.with_suffix(".tmp.html")
temp_output = TARGET_FILE.with_suffix(".tmp.html")

subprocess.run([
"generate-schema-doc",
Expand Down Expand Up @@ -98,6 +101,20 @@ def main():
'',
html_content
)
# Strip the title tag (not needed when embedded in Quarto page)
html_content = re.sub(
r'\s*<title>[^<]*</title>\s*',
'\n',
html_content
)
# Strip h1 headings (the page already has a heading from Quarto)
html_content = re.sub(
r'<h1>[^<]*</h1>',
'',
html_content
)
# Clean up multiple consecutive blank lines
html_content = re.sub(r'\n{3,}', '\n\n', html_content)

# Build stylesheet link tags
stylesheet_links = '\n'.join(
Expand All @@ -124,34 +141,45 @@ def main():
'</div></body>'
)

# Copyright header to place before the raw HTML block
copyright_header = """<!-- Copyright © 2023-2026 ValidMind Inc. All rights reserved.
# Strip leading/trailing whitespace from HTML content
html_content = html_content.strip()

# Build the output content (raw HTML block for Quarto include)
output_content = f"""<!-- Copyright © 2023-2026 ValidMind Inc. All rights reserved.
Refer to the LICENSE file in the root of this repository for details.
SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial

This file is auto-generated by scripts/generate_template_schema_docs.py
Do not edit directly. Re-run the script to update.

Source: backend/src/backend/templates/documentation/model_documentation/mdd_template_schema_v5.json
-->"""

# Wrap HTML in Quarto raw HTML block for .qmd file, with comment before
qmd_content = f"""{copyright_header}
Source: {SCHEMA_FILE.relative_to(BACKEND_ROOT.parent)}
-->

```{{=html}}
{html_content}
```
"""

# Write final output
OUTPUT_FILE.parent.mkdir(parents=True, exist_ok=True)
with open(OUTPUT_FILE, "w") as f:
f.write(qmd_content)
# Validate output before writing
if len(output_content) < MIN_OUTPUT_SIZE:
print(f"Error: Generated output is too small ({len(output_content)} bytes)")
print("This likely indicates a generation failure.")
temp_output.unlink(missing_ok=True)
sys.exit(1)

if "<html" not in html_content or "</html>" not in html_content:
print("Error: Generated output does not contain valid HTML structure")
temp_output.unlink(missing_ok=True)
sys.exit(1)

# Write to target file
TARGET_FILE.write_text(output_content)

# Clean up temp file
temp_output.unlink()

print(f"Generated {OUTPUT_FILE}")
print(f"Generated template schema documentation: {TARGET_FILE}")
print(f"Output size: {len(output_content)} bytes")


if __name__ == "__main__":
Expand Down
2 changes: 1 addition & 1 deletion site/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,7 @@ release-notes:
template-schema-docs:
@echo "\nGenerating template schema documentation ..."
@if [ ! -d "$(SRC_ROOT)/backend" ]; then echo "Error: Backend not cloned. Run 'make clone' first."; exit 1; fi
@pip install -q json-schema-for-humans
@python -m pip install -q json-schema-for-humans
@BACKEND_ROOT=$(SRC_ROOT)/backend python ../scripts/generate_template_schema_docs.py

test-descriptions:
Expand Down
6 changes: 6 additions & 0 deletions site/_extensions/category-filter/_extension.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
title: Category Filter
author: Nik Richers
version: 1.0.0
contributes:
filters:
- category-filter.lua
59 changes: 59 additions & 0 deletions site/_extensions/category-filter/category-filter.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
-- Category Filter Lua Extension
-- Reads listing-filter from YAML frontmatter and injects config as a data attribute

local function meta_to_native(val)
if val == nil then
return nil
end

local mt = getmetatable(val)

-- Check for pandoc List type (used for YAML arrays)
if mt and mt.__name == "List" then
local arr = {}
for i, item in ipairs(val) do
arr[i] = meta_to_native(item)
end
return arr
end

-- Check for pandoc Inlines (YAML string values become Inlines)
if mt and (mt.__name == "Inlines" or mt.__name == "Blocks") then
return pandoc.utils.stringify(val)
end

-- Plain Lua types
local t = type(val)
if t == "string" or t == "number" or t == "boolean" then
return val
elseif t == "table" then
-- Check if it's an array-like table
if #val > 0 and val[1] ~= nil then
local arr = {}
for i, item in ipairs(val) do
arr[i] = meta_to_native(item)
end
return arr
else
-- It's a map/object
local obj = {}
for k, v in pairs(val) do
obj[k] = meta_to_native(v)
end
return obj
end
end

-- Fallback: try stringify
return pandoc.utils.stringify(val)
end

function Meta(meta)
if meta['listing-filter'] then
local config = meta_to_native(meta['listing-filter'])
local json = quarto.json.encode(config)
local escaped = json:gsub("'", "&#39;")
quarto.doc.include_text("after-body",
'<div id="listing-filter-config" style="display:none" data-config=\'' .. escaped .. '\'></div>')
end
end
4 changes: 4 additions & 0 deletions site/_quarto.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@

project:
type: website
render:
- "**/*.qmd"
- "**/*.ipynb"
- "**/*.md"

metadata-files:
# - _drafts.yaml
Expand Down
6 changes: 6 additions & 0 deletions site/about/glossary/mcp/_mcp-server.qmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<!-- Copyright © 2023-2026 ValidMind Inc. All rights reserved.
Refer to the LICENSE file in the root of this repository for details.
SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial -->

MCP server
: A service that exposes tools and resources to AI assistants via the MCP protocol. The {{< var vm.product >}} MCP server provides access to model inventory operations.
6 changes: 6 additions & 0 deletions site/about/glossary/mcp/_mcp-tool.qmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<!-- Copyright © 2023-2026 ValidMind Inc. All rights reserved.
Refer to the LICENSE file in the root of this repository for details.
SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial -->

MCP tool
: An operation exposed by an MCP server that AI assistants can invoke to perform actions, such as querying models or updating artifacts.
6 changes: 6 additions & 0 deletions site/about/glossary/mcp/_mcp.qmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<!-- Copyright © 2023-2026 ValidMind Inc. All rights reserved.
Refer to the LICENSE file in the root of this repository for details.
SPDX-License-Identifier: AGPL-3.0 AND ValidMind Commercial -->

MCP (Model Context Protocol)
: An open standard that enables AI assistants to connect to external data sources and tools through a unified protocol, allowing natural language interactions with structured systems.
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ listing:
fields: [title, description]
grid-columns: 2
contents:
- path: https://github.com/validmind/validmind-library/blob/main/notebooks/quickstart/quickstart_model_documentation.Rmd
title: "Quickstart for model documentation"
description: "End-to-end model documentation workflow in R: load data, preprocess, train a GLM model, and run the full documentation test suite."
- path: https://github.com/validmind/validmind-library/blob/main/notebooks/quickstart/quickstart_model_validation.Rmd
title: "Quickstart for model validation"
description: "End-to-end model validation workflow in R: load data, run data quality tests, train a champion GLM model, and run model evaluation tests."
- path: https://github.com/validmind/validmind-library/tree/main/notebooks/quickstart/
title: "Quickstart for model documentation"
description: "End-to-end model documentation workflow in R: load data, preprocess, train a GLM model, and run the full documentation test suite."
- path: https://github.com/validmind/validmind-library/tree/main/notebooks/quickstart/
title: "Quickstart for model validation"
description: "End-to-end model validation workflow in R: load data, run data quality tests, train a champion GLM model, and run model evaluation tests."
---

Use the ValidMind R package to document and validate models built in R. The package interfaces with the {{< var validmind.developer >}} through `reticulate`, giving you access to the full Python API from R.
Expand Down
28 changes: 28 additions & 0 deletions site/developer/supported-models-and-frameworks.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,12 @@ Retrieval-augmented generation pipelines.

- Tests: RAGAS integration
- Refer to [RAG evaluation](#rag-evaluation) for dataset requirements and available tests

## Agentic AI
LLM-based agents that use tools and multi-step reasoning.

- Scorers: DeepEval integration
- Refer to [Agentic AI evaluation](#agentic-ai-evaluation) for available scorers
:::

## Machine learning models
Expand Down Expand Up @@ -465,6 +471,28 @@ run_test(
- **Context Precision** — Measures relevance of retrieved contexts
- **Answer Relevancy** — Assesses if the response addresses the query

## Agentic AI evaluation

For agentic AI systems, the {{< var validmind.developer >}} integrates with [DeepEval](https://docs.confident-ai.com/) for trace-based evaluation of tool usage and reasoning.

### Available agentic scorers

- **TaskCompletion** — Assesses whether the agent achieves the requested outcome
- **PlanQuality** — Measures if generated plans are logical, complete, and efficient
- **PlanAdherence** — Evaluates whether the agent follows its plan during execution
- **ToolCorrectness** — Validates that the agent invokes the expected tools
- **ArgumentCorrectness** — Checks if arguments passed to tools are correct

### Scorer requirements

| Scorer | Requires model | Parameters |
|--------|----------------|------------|
| TaskCompletion | Yes (`predict_fn`) | `input_column` |
| PlanQuality | Yes (`predict_fn`) | `input_column` |
| PlanAdherence | Yes (`predict_fn`) | `input_column` |
| ToolCorrectness | No | `input_column`, `expected_tools_called_column`, `actual_tools_called_column` |
| ArgumentCorrectness | No | `input_column`, `actual_tools_called_column` |

## Python and dependency compatibility

The {{< var validmind.developer >}} requires:
Expand Down
3 changes: 2 additions & 1 deletion site/guide/_sidebar.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,10 @@ website:
contents:
- guide/integrations/manage-secrets.qmd
- guide/integrations/configure-connections.qmd
- guide/integrations/configure-analytics-exports.qmd
- guide/integrations/implement-custom-integrations.qmd
- guide/integrations/link-external-models.qmd
- guide/mcp/connect-ai-assistants-via-mcp.qmd
- guide/integrations/configure-analytics-exports.qmd
- guide/integrations/integrations-examples.qmd
- text: "---"
- text: "Workflows"
Expand Down
28 changes: 27 additions & 1 deletion site/guide/integrations/managing-integrations.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,15 @@ graph TD
E[Public REST API]
F[Testing & documentation]
G[Service integration]
H[AI assistants]

A <--> B
A <--> C
A <--> D
A <--> E
A <--> F
A <--> G
A <--> H
```

<!-- The {{< var validmind.platform >}} supports various ways to integrate with external systems and services to make changes in one system visible in the other, keeping information synchronized: -->
Expand Down Expand Up @@ -194,6 +196,29 @@ Link to tickets in external systems and keep them synchronized. Attach tickets t

::::

---

### AI assistants

Connect AI assistants to {{< var vm.product >}} using the Model Context Protocol (MCP). Query and manage your model inventory through natural language conversations.[^7]

**Supported**

:::: {.flex .flex-wrap .justify-around}

::: {.w-33-ns}
- Claude Desktop
:::

::: {.w-33-ns}
- Cursor IDE
:::

::: {.w-33-ns}
&nbsp;
:::

::::

## Key concepts

Expand Down Expand Up @@ -233,4 +258,5 @@ Link to tickets in external systems and keep them synchronized. Attach tickets t
[^3]: [Introduction to workflows](/guide/workflows/introduction-to-workflows.qmd)
[^4]: [Public REST API](/reference/validmind-rest-api-vm.qmd)
[^5]: [Testing & documentation](/developer/validmind-library.qmd)
[^6]: [Configure analytics exports](/guide/integrations/configure-analytics-exports.qmd)
[^6]: [Configure analytics exports](/guide/integrations/configure-analytics-exports.qmd)
[^7]: [Connect AI assistants](/guide/mcp/connect-ai-assistants-via-mcp.qmd)
Loading
Loading