Download docs/realtime_inference_api.md from yusufcalisir/Collaborative-Fraud-Intelligence-Simulator: direct link, hf CLI and curl.
- Browser
- Download file 12.1 kB
-
https://huggingface.co/spaces/yusufcalisir/Collaborative-Fraud-Intelligence-Simulator/resolve/main/docs/realtime_inference_api.md
- Command line
-
hf download hf://spaces/yusufcalisir/Collaborative-Fraud-Intelligence-Simulator/docs/realtime_inference_api.md
-
curl -L -o realtime_inference_api.md https://huggingface.co/spaces/yusufcalisir/Collaborative-Fraud-Intelligence-Simulator/resolve/main/docs/realtime_inference_api.md
β‘ Real-Time Fraud Risk Inference API Specification
The Real-Time Fraud Scoring Gateway provides online transaction authorization for core banking & payment switch integrations with sub-100ms response times ($p95$).
π 1. Endpoint Overview
The scoring gateway exposes three production REST endpoints tailored for different banking integration patterns:
POST /api/v1/score-transaction(Alias:POST /api/v1/transactions/score): Standard core banking transaction scoring endpoint with normalized transaction payload, entity resolution, FATF blacklist/greylist sanctions checks, and top feature attributions.POST /api/v1/predict: Full-feature vector inference endpoint returning detailed multi-signal composite risk breakdowns (GNN, velocity, customer history, smurfing heuristics, SHAP attributions) and dynamic policy rule triggers.POST /v1/inference/score: Ultra-low-latency streaming scoring endpoint backed by PyTorch TorchScript JIT compilation, Redis in-memory caching (cfi:champion_model), and fail-closed production serving (with heuristic fallback strictly restricted to supported demo/simulation modes).
- Content-Type:
application/json - Operational Performance: Sub-100ms response times observed under empirical multi-bank benchmark load (e.g., 87.26 ms $p99$ at 51.3 req/s in fast-path benchmarks); strictly fails closed in production upon model unavailability.
π₯ 2. Request & Response Schemas
2.1 Normalized Transaction Scoring (POST /api/v1/score-transaction)
Request Payload:
{
"transaction_id": "tx_88992211",
"account_id": "acc_src_991",
"amount": 1250.50,
"currency": "EUR",
"merchant_id": "crypto_exchange_01",
"country": "US",
"device_id": "dev_fp_993810a"
}
Response Payload (HTTP 200 OK):
{
"risk_score": 895,
"risk_level": "HIGH",
"decision": "BLOCK",
"model_version": "v2.4.1",
"explanations": [
{"feature": "merchant_velocity_1h", "contribution": 0.38},
{"feature": "transaction_amount", "contribution": 0.29},
{"feature": "merchant_risk_score", "contribution": 0.18}
],
"related_entities": [
{"entity_type": "device", "risk": "HIGH"}
],
"latency_ms": 14.2
}
2.2 Full-Feature Composite Inference (POST /api/v1/predict)
Request Payload:
{
"transaction_amount": 250000.0,
"merchant_category": "crypto",
"country_code": "US",
"device_type": "web_browser",
"velocity": 12.5,
"hour_of_day": 3,
"merchant_risk_score": 0.85,
"customer_history_score": 0.12,
"chargeback_count": 4,
"account_age_days": 14,
"bank_id": "bank_alpha"
}
Response Payload (HTTP 200 OK):
{
"fraud_probability": 0.942,
"risk_score": 895.4,
"is_fraud_suspected": true,
"risk_level": "CRITICAL",
"policy_action": "BLOCK_TRANSACTION",
"triggered_rules": [
"HIGH_VELOCITY_SUSPICIOUS_MERCHANT",
"NEW_ACCOUNT_HIGH_VALUE_CRYPTO"
],
"breakdown": [
{
"signal_name": "S_velocity",
"weight": 0.20,
"raw_value": 12.5,
"normalized_score": 980.0,
"explanation": "High velocity transfer burst within 1 hour"
},
{
"signal_name": "S_graph",
"weight": 0.15,
"raw_value": 0.88,
"normalized_score": 920.0,
"explanation": "GraphSAGE embedding anomaly detected across entity cluster"
}
]
}
2.3 Ultra-Low-Latency TorchScript JIT Scoring (POST /v1/inference/score)
Request Payload:
{
"transaction_id": "tx_88992211",
"amount": 1250.50,
"currency": "USD",
"source_account": "acc_src_991",
"target_account": "acc_dst_002",
"merchant_category": "crypto_exchange",
"velocity_1h": 3,
"force_fallback": false
}
Response Payload (HTTP 200 OK):
{
"transaction_id": "tx_88992211",
"risk_score": 0.85,
"decision": "BLOCK",
"latency_ms": 1.45,
"evaluated_by": "ML_MODEL",
"explanation": "ML Model (Redis Cache JIT): High-risk merchant"
}
βοΈ 3. Decision Categorization Rules
The platform supports dual-scale decision mappings corresponding to API interface types:
3.1 Core Banking Gateway (/score-transaction & /predict β $[0, 1000]$ Scale)
| Decision | Risk Score Range | Action Executed | Escalation Overrides |
|---|---|---|---|
ALLOW |
$0 \le \text{Score} < 300$ | Transaction authorized immediately. | Standard throughput |
REVIEW |
$300 \le \text{Score} \le 900$ | Transaction flagged for Four-Eyes analyst investigation. | Amounts $\ge 50{,}000\text{ USD}$ or FATF Greylist |
BLOCK |
$900 < \text{Score} \le 1000$ | Transaction rejected immediately and alert dispatched. | FATF NCCT Blacklist ($\ge 950$) |
3.2 Streaming JIT Gateway (/v1/inference/score β $[0.0, 1.0]$ Float Scale)
| Decision | Risk Score Range | Action Executed |
|---|---|---|
ALLOW |
$0.0 \le \text{Score} < 0.35$ | Transaction authorized with sub-10ms latency. |
REVIEW |
$0.35 \le \text{Score} < 0.70$ | Flagged for asynchronous settlement hold & analyst review. |
BLOCK |
$0.70 \le \text{Score} \le 1.00$ | Dropped immediately at gateway perimeter. |
β‘ 4. TorchScript JIT Acceleration, Redis Caching & Invalidation
Real-time inference executes PyTorch models using TorchScript JIT compilation and Redis In-Memory Caching (
cfi:champion_model:{simulation_id}) with atomic version-bound HMAC validation and a 1-hour TTL.
- Redis JIT Caching & Atomic Pipeline:
- The verified champion model is compiled to TorchScript on startup and cached in Redis with an atomic pipeline (
pipe.set(model_key, bytes); pipe.set(auth_key, envelope)). - Redis cache entries are strictly verified: checks include HMAC authenticity under domain key
DOMAIN_MODEL_CACHE, SHA-256 match, version, generation, simulation ID, and architecture parity. - Subsequent inference requests load directly from the verified cache, bypassing database and disk IO.
- The verified champion model is compiled to TorchScript on startup and cached in Redis with an atomic pipeline (
- Instant PubSub Invalidation:
- When a new champion is promoted, rolled back, or revoked,
ModelService.invalidate_model_cache()deletes Redis keys and broadcasts an eviction event across Redis Sentinel Pub/Sub (cfi:model_events), prompting all distributed workers to purge warm in-memory model instances immediately.
- When a new champion is promoted, rolled back, or revoked,
- 3-Strikes Circuit Breaker:
- If model loading or evaluation encounters 3 consecutive failures, the Circuit Breaker trips open for a 60-second cooldown under thread-safe lock synchronization.
- In production mode (
app_env == 'production'), requests during an open circuit breaker fail closed withHTTP 503 Service Unavailable(detail.code: "CIRCUIT_BREAKER_OPEN"). - In supported demo/simulation modes (
demo_active), requests are routed toInferenceFallbackEngine.
π‘οΈ 5. Serving Fallback Invariants: Production vs. Demo/Simulation Modes
In strict compliance with the repository's AGENTS.md runtime truth rule, fallback behavior depends strictly on deployment environment:
5.1 Production Serving Rules (app_env == 'production')
- Strict Fail-Closed Invariant: If a verified champion model is missing, corrupt, revoked, or fails validation (
ModelNotAvailableError,ModelIntegrityError,ModelCompatibilityError), or if the circuit breaker is open, the inference gateway returnsHTTP 503 Service Unavailable(MODEL_NOT_READYorCIRCUIT_BREAKER_OPEN). - No Plausible Fallbacks: The production serving layer never silently substitutes untrained weights, synthetic/random numbers, heuristic scores, or static low-risk values to mask model unavailability. A truthful failure is enforced over a fabricated success.
- Explicit Simulation Rejection: Passing
force_fallback: truein production yieldsHTTP 400 Bad RequestwithSIMULATION_NOT_ALLOWED.
5.2 Supported Demo & Simulation Modes (demo_active)
- When running in an explicitly configured demonstration or simulation environment (
_is_demo_mode_active()), fallback behavior is enabled:- If a champion model is not loaded or during simulated circuit breaker trips,
InferenceFallbackEngineevaluates deterministic velocity, amount, and merchant category heuristics (evaluated_by: "HEURISTIC_FALLBACK"). - Explicit simulation fallback testing (
force_fallback: true) is permitted in non-production environments when demo mode is active, returning diagnostic heuristic scores and explanations. If demo mode is inactive, returnsHTTP 403 Forbidden(DEMO_MODE_DISABLED).
- If a champion model is not loaded or during simulated circuit breaker trips,
π 6. Empirical Real-Time Load Testing & Dual-Tier Latency SLA Matrix
To empirically validate real-time fraud scoring beyond unit test assertions, the scoring gateway is evaluated with automated concurrent load runners and Locust suites (scripts/locustfile.py, scripts/realtime_benchmark.py, and scripts/run_load_test.py) across two distinct operational profiles:
1. Fast-Path Screening Profile (POST /api/v1/score-transaction)
Evaluates champion PyTorch GNN embeddings cached in Redis (cfi:champion_model):
| Metric Parameter | Empirical Measurement | Target Threshold | SLA Verification Status |
|---|---|---|---|
| Total Evaluated Requests | 1,000 |
$\ge 1,000$ | β Production Sample |
| Concurrent Banking Streams | 3 concurrent bank nodes |
$\ge 3$ | β Multi-Tenant Load |
| Throughput (Peak TPS) | 51.3 req/s |
> 40 req/s |
β Verified High Throughput |
| Success Rate (HTTP 200/429) | 1000/1000 (100.0%) |
$\ge 99.9%$ | β Zero Drop Rate |
| SLA Compliance Rate | 99.10% |
$\ge 99.0%$ | β High Reliability |
| Median Latency ($p50$) | 14.20 ms (cached) / 52.47 ms |
$< 70\text{ms}$ | β Sub-60ms Median |
| 95th Percentile ($p95$) | 65.23 ms |
$< 80\text{ms}$ | β Sub-70ms Tail |
| 99th Percentile ($p99$) | 87.26 ms |
$< 100.0\text{ms}$ | β VERIFIED (PASSED) |
2. Full 9-Signal Ensemble Profile (POST /api/v1/predict)
Evaluates all 9 feature signals (GNN topology, velocity, amount anomalies, merchant risk, customer history, smurfing bursts, and SHAP KernelExplainer attributions) under peak concurrent load:
| Metric Parameter | Empirical Measurement | Contractual Budget | SLA Verification Status |
|---|---|---|---|
| Concurrent Worker Load | 15 concurrent workers |
$\ge 10$ | β High Concurrency |
| Median Latency ($p50$) | 258.9 ms |
$< 300.0\text{ms}$ | β Compliant |
| 95th Percentile ($p95$) | 289.4 ms |
$< 325.0\text{ms}$ | β Compliant |
| 99th Percentile ($p99$) | 308.2 ms |
$< 350.0\text{ms}$ | β VERIFIED (PASSED) |
| Heuristic Fallback Trigger | 0 drops / Auto-routed | Bounded tail | β Zero Disruption |
Reproducing the Load Test
# Automated concurrent stream runner (generates reports/load_test_report.md)
python scripts/run_load_test.py --concurrency 3 --requests 1000 --pacing-ms 10.0
# Direct in-process ASGI benchmark across all 3 scoring endpoints
python scripts/realtime_benchmark.py
# Headless Locust load test
locust -f scripts/locustfile.py --headless -u 50 -r 10 --run-time 60s --host http://localhost:8000
π§ͺ 7. Automated Test Verification Matrix
All real-time inference endpoints, circuit breaker logic, and fallback guarantees are verified by continuous test suites:
| Test Suite | File Path | Verified Capabilities | Status |
|---|---|---|---|
| Inference Engine & JIT | backend/tests/unit/test_realtime_inference_engine.py |
Heuristic fallback engine, JIT scoring, 3-strike circuit breaker, $p95 < 100\text{ms}$, cache invalidation | 5/5 PASSED |
| OpenAPI Contract Accuracy | backend/tests/unit/test_openapi_contract_accuracy.py |
Schema parity for /api/v1/score-transaction, /api/v1/predict, /v1/inference/score |
PASSED |
| KMS & Tenant Metering | backend/tests/unit/test_tenant_kms_metering.py |
Atomic quota enforcement, BOLA isolation, rate limit resilience | PASSED |