-
Notifications
You must be signed in to change notification settings - Fork 747
Expand file tree
/
Copy pathMakefile
More file actions
151 lines (123 loc) · 6.72 KB
/
Copy pathMakefile
File metadata and controls
151 lines (123 loc) · 6.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
.PHONY: help
.PHONY: test test-parallel test-serial test-benchmark test-watch test-coverage test-profile record-cassettes rewrite-cassettes replay-cassettes snapshot-cassettes check-record-test-env warm-fastembed-cache
.PHONY: docs-fern docs-fern-strict docs-fern-live docs-fern-preview-watch docs-fern-generate-sdk docs-fern-fix-empty-links docs-fern-publish-staging docs-fern-publish-public
.PHONY: pre-commit pre-commit-install
.DEFAULT_GOAL := help
TEST ?=
ARGS ?=
WORKERS ?= auto
# pytest-xdist --dist strategy for $(PYTEST) -n $(WORKERS) --dist $(DIST) $(ARGS) $(TEST).
# worksteal dynamically rebalances queued tests; override DIST when debugging or grouping matters.
DIST ?= worksteal
PYTEST ?= uv run pytest
RECORDED_TESTS ?= tests/recorded
RECORDED_RECORD_MODE ?= once
RECORDED_SNAPSHOT_MODE ?= create
RECORDED_REQUIRED_KEYS ?= OPENAI_API_KEY NVIDIA_API_KEY
RECORDED_REPLAY_ENV ?= env -u HTTP_PROXY -u HTTPS_PROXY -u ALL_PROXY -u http_proxy -u https_proxy -u all_proxy
# These targets assume a Unix-like shell for env -u; use bash, Git Bash, or WSL on Windows.
UNIT_TEST_ENV ?= env -u OPENAI_API_KEY -u NVIDIA_API_KEY \
-u LIVE_TEST -u LIVE_TEST_MODE -u TEST_LIVE_MODE
FASTEMBED_CACHE ?= .cache/fastembed
FASTEMBED_MODEL ?= sentence-transformers/all-MiniLM-L6-v2
FASTEMBED_ENV ?= env FASTEMBED_CACHE_PATH=$(FASTEMBED_CACHE)
FERN_STAGING_INSTANCE ?= nvidia-nemo-guardrails-staging.docs.buildwithfern.com/nemo/guardrails
FERN_PUBLIC_INSTANCE ?= nvidia-nemo-guardrails.docs.buildwithfern.com/nemo/guardrails
test:
$(UNIT_TEST_ENV) $(PYTEST) -n $(WORKERS) --dist $(DIST) $(ARGS) $(TEST)
test-parallel: test
test-serial:
$(PYTEST) $(ARGS) $(TEST)
test-benchmark:
$(PYTEST) $(ARGS) benchmark/tests
test-watch:
uv run ptw --snapshot-update --now . -- -vv $(ARGS) $(TEST)
test-coverage:
$(UNIT_TEST_ENV) $(PYTEST) -n $(WORKERS) --dist $(DIST) --cov=nemoguardrails --cov-report=xml:coverage.xml $(ARGS) $(TEST)
test-profile:
$(PYTEST) -vv --profile-svg $(ARGS) $(TEST)
record-cassettes: check-record-test-env
$(PYTEST) $(RECORDED_TESTS) --record-mode=$(RECORDED_RECORD_MODE) -m "not fake_cassette"
$(RECORDED_REPLAY_ENV) $(PYTEST) $(RECORDED_TESTS) --block-network --inline-snapshot=$(RECORDED_SNAPSHOT_MODE)
$(RECORDED_REPLAY_ENV) $(PYTEST) $(RECORDED_TESTS) --block-network
rewrite-cassettes:
$(MAKE) record-cassettes RECORDED_RECORD_MODE=rewrite RECORDED_SNAPSHOT_MODE=fix
replay-cassettes:
$(RECORDED_REPLAY_ENV) $(PYTEST) $(RECORDED_TESTS) --block-network
snapshot-cassettes:
$(RECORDED_REPLAY_ENV) $(PYTEST) $(RECORDED_TESTS) --block-network --inline-snapshot=fix
check-record-test-env:
@missing=""; \
for key in $(RECORDED_REQUIRED_KEYS); do \
if [ -z "$$(printenv "$$key")" ]; then \
missing="$$missing $$key"; \
fi; \
done; \
if [ -n "$$missing" ]; then \
printf '%s\n' "Missing required env var(s):$$missing" \
"Set them before make record-cassettes, or override RECORDED_REQUIRED_KEYS for a focused refresh."; \
exit 2; \
fi
warm-fastembed-cache:
$(FASTEMBED_ENV) uv run python -c 'from fastembed import TextEmbedding; model = TextEmbedding("$(FASTEMBED_MODEL)"); next(model.embed(["warmup"]))'
docs-fern: docs-fern-strict
docs-fern-strict: docs-fern-generate-sdk
FERN_VERSION=$$(node -p "require('./fern/fern.config.json').version") && cd fern && npx --yes "fern-api@$${FERN_VERSION}" check
docs-fern-live: docs-fern-generate-sdk
FERN_VERSION=$$(node -p "require('./fern/fern.config.json').version") && cd fern && npx --yes "fern-api@$${FERN_VERSION}" docs dev
docs-fern-publish-staging: docs-fern-generate-sdk
FERN_VERSION=$$(node -p "require('./fern/fern.config.json').version") && cd fern && npx --yes "fern-api@$${FERN_VERSION}" generate --docs --instance "$(FERN_STAGING_INSTANCE)"
docs-fern-publish-public: docs-fern-generate-sdk
FERN_VERSION=$$(node -p "require('./fern/fern.config.json').version") && cd fern && npx --yes "fern-api@$${FERN_VERSION}" generate --docs --instance "$(FERN_PUBLIC_INSTANCE)"
docs-fern-preview-watch: docs-fern-generate-sdk
node scripts/watch-fern-preview.mjs
docs-fern-generate-sdk:
FERN_VERSION=$$(node -p "require('./fern/fern.config.json').version") && cd fern && npx --yes "fern-api@$${FERN_VERSION}" docs md generate --library guardrails-python-sdk
node scripts/normalize-fern-sdk-reference.mjs
docs-fern-fix-empty-links:
node scripts/fix-empty-fern-links.mjs
pre-commit:
uv run --locked pre-commit run --all-files
pre-commit-install:
uv run --locked pre-commit install
help:
@printf '%s\n' \
'' \
'Usage:' \
' make test [TEST=path] [WORKERS=auto] [ARGS="-q --tb=short"]' \
' make test-serial [TEST=path] [ARGS="-q"]' \
' make test-benchmark [ARGS="-q"]' \
' make test-parallel [TEST=path] [WORKERS=auto] [ARGS="-q --tb=short"]' \
' make test-watch [TEST=path]' \
' make record-cassettes [RECORDED_TESTS=tests/recorded] [RECORDED_RECORD_MODE=once] [RECORDED_SNAPSHOT_MODE=create] [RECORDED_REQUIRED_KEYS="OPENAI_API_KEY NVIDIA_API_KEY"]' \
' make rewrite-cassettes [RECORDED_TESTS=tests/recorded] [RECORDED_REQUIRED_KEYS="OPENAI_API_KEY NVIDIA_API_KEY"]' \
' make replay-cassettes [RECORDED_TESTS=tests/recorded]' \
' make snapshot-cassettes [RECORDED_TESTS=tests/recorded]' \
'' \
'Tests:' \
' test Run pytest.ini testpaths with pytest-xdist' \
' test-parallel Alias for test' \
' test-serial Run pytest without xdist or env filtering' \
' test-benchmark Run benchmark tooling tests' \
' test-watch Run pytest in watch mode' \
' test-coverage Run pytest with coverage' \
' test-profile Run pytest with profiling' \
' record-cassettes Record missing or selected cassettes, fill snapshots, and verify replay' \
' rewrite-cassettes Rewrite selected cassettes, fill snapshots, and verify replay' \
' replay-cassettes Verify selected cassettes offline without recording' \
' snapshot-cassettes Update inline snapshots from existing cassettes offline' \
' warm-fastembed-cache Prime the repo-local FastEmbed cache' \
'' \
'Docs:' \
' docs-fern Check Fern docs using the pinned Fern CLI' \
' docs-fern-strict Check Fern docs using the pinned Fern CLI' \
' docs-fern-live Serve Fern docs locally' \
' docs-fern-publish-staging Publish Fern docs to the staging instance' \
' docs-fern-publish-public Publish Fern docs to the public instance' \
' docs-fern-preview-watch Watch and publish Fern preview for the current branch' \
' docs-fern-generate-sdk Regenerate Python SDK reference pages with Fern' \
' docs-fern-fix-empty-links Replace empty Markdown links with titles from Fern navigation' \
'' \
'Maintenance:' \
' pre-commit Run pre-commit hooks against all files' \
' pre-commit-install Install the Git pre-commit hook'