81trust / 100
Drift Check
by modell.halowerk.com in AI models & inference
x402 APIPassing, checked 31 min ago
Compares two submitted sample sets feature by feature and returns deterministic drift metrics. Continuous features are binned on the combined value range and receive PSI, Jensen-Shannon divergence and a Kolmogorov-Smirnov statistic; categorical features receive PSI and Jensen-Shannon divergence over exact category labels. The response names every feature, its sample counts, the metric values, the threshold used, and the reason a feature was flagged.
POST https://modell.halowerk.com/v1/drift-check
Last 30 days
All checks passedSome failedAll failedNot checked
- Uptime
- 100%
- Response time
- 145 ms typical, 145 ms slowest 5%
- Last check
- 31 min ago
- Next check
- in 1 min
How to call it
# See the payment challenge (nothing is charged)
curl -i -X POST "https://modell.halowerk.com/v1/drift-check" \
-H "content-type: application/json" \
-d '{"bins":5,"current_samples":{"risk_score":[0.14,0.19,0.23,0.32,0.4,0.44,0.48,0.52],"segment":["retail","smb","smb","enterprise","enterprise","enterprise"]},"feature_types":{"risk_score":"continuous","segment":"categorical"},"reference_samples":{"risk_score":[0.12,0.18,0.2,0.21,0.25,0.28,0.31,0.34],"segment":["retail","retail","smb","smb","enterprise","retail"]},"threshold":0.2}'import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const client = new x402Client().register(
"eip155:8453",
new ExactEvmScheme(privateKeyToAccount(process.env.AGENT_KEY)),
);
const pay = wrapFetchWithPayment(fetch, client);
// Not sure it's safe to pay? Preflight it first for $0.005:
// GET https://toolvet.app/api/v1/check?url=https%3A%2F%2Fmodell.halowerk.com%2Fv1%2Fdrift-check
const res = await pay("https://modell.halowerk.com/v1/drift-check", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({"bins":5,"current_samples":{"risk_score":[0.14,0.19,0.23,0.32,0.4,0.44,0.48,0.52],"segment":["retail","smb","smb","enterprise","enterprise","enterprise"]},"feature_types":{"risk_score":"continuous","segment":"categorical"},"reference_samples":{"risk_score":[0.12,0.18,0.2,0.21,0.25,0.28,0.31,0.34],"segment":["retail","retail","smb","smb","enterprise","retail"]},"threshold":0.2}),
});
console.log(await res.json());Example input
{
"bins": 5,
"current_samples": {
"risk_score": [
0.14,
0.19,
0.23,
0.32,
0.4,
0.44,
0.48,
0.52
],
"segment": [
"retail",
"smb",
"smb",
"enterprise",
"enterprise",
"enterprise"
]
},
"feature_types": {
"risk_score": "continuous",
"segment": "categorical"
},
"reference_samples": {
"risk_score": [
0.12,
0.18,
0.2,
0.21,
0.25,
0.28,
0.31,
0.34
],
"segment": [
"retail",
"retail",
"smb",
"smb",
"enterprise",
"retail"
]
},
"threshold": 0.2
}Example output
{
"drift_detected": true,
"features": [
{
"drift": true,
"feature": "risk_score",
"jensen_shannon": 0.189,
"ks": 0.5,
"psi": 0.612345,
"type": "continuous"
}
],
"summary": {
"features_checked": 2,
"flagged_features": 1,
"threshold": 0.2
}
}Security scan
- No findings. We scan names, descriptions and tool definitions for hidden instructions and other prompt-injection patterns.
Recent checks
| When | Result | HTTP | Time | Price |
|---|---|---|---|---|
| 31 min ago | Passed | 402 | 145 ms | $0.003 |
| 6 h ago | Passed | 402 | 194 ms | $0.003 |