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

WhenResultHTTPTimePrice
31 min agoPassed402145 ms$0.003
6 h agoPassed402194 ms$0.003