|
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
12.1 kB
| # β‘ 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: | |
| 1. **`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. | |
| 2. **`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. | |
| 3. **`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:** | |
| ```json | |
| { | |
| "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):** | |
| ```json | |
| { | |
| "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:** | |
| ```json | |
| { | |
| "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):** | |
| ```json | |
| { | |
| "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:** | |
| ```json | |
| { | |
| "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):** | |
| ```json | |
| { | |
| "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 | |
| > [!IMPORTANT] | |
| > 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. | |
| 1. **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. | |
| 2. **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. | |
| 3. **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 with **`HTTP 503 Service Unavailable`** (`detail.code: "CIRCUIT_BREAKER_OPEN"`). | |
| - In supported demo/simulation modes (`demo_active`), requests are routed to `InferenceFallbackEngine`. | |
| --- | |
| ## π‘οΈ 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 returns **`HTTP 503 Service Unavailable`** (`MODEL_NOT_READY` or `CIRCUIT_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: true` in production yields **`HTTP 400 Bad Request`** with `SIMULATION_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, `InferenceFallbackEngine` evaluates 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, returns **`HTTP 403 Forbidden`** (`DEMO_MODE_DISABLED`). | |
| --- | |
| ## π 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 | |
| ```bash | |
| # 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` | | |