Spaces:
Runtime error
Runtime error
| # Location: chimera_engine/evaluate.py | |
| import os | |
| import time | |
| import xgboost as xgb | |
| import numpy as np | |
| from features import extract_url_features | |
| def main(): | |
| model_path = os.path.join("models", "final_model.json") | |
| if not os.path.exists(model_path): | |
| print("[-] Final model not found! Please run 'python train.py' first.") | |
| return | |
| print("[*] Loading high-speed XGBoost engine...") | |
| bst = xgb.Booster() | |
| bst.load_model(model_path) | |
| print("[+] Engine operational. Enter a URL to evaluate.") | |
| print("-" * 55) | |
| while True: | |
| try: | |
| user_url = input("\nEnter Target URL (or type 'quit' to exit): ").strip() | |
| if user_url.lower() in ['quit', 'exit', 'q']: | |
| print("[*] Exiting evaluation engine.") | |
| break | |
| if not user_url: | |
| continue | |
| # --- FIX: Parser Architecture Blind Spot Sanitization --- | |
| # If the user enters a raw domain variant without a scheme (e.g., 'youtube@evil-site.com'), | |
| # we force a default prefix so the underlying regex and string split parsers don't | |
| # mistake the entire token for a local relative file path. | |
| processed_url = user_url | |
| if not processed_url.lower().startswith(('http://', 'https://')): | |
| processed_url = "http://" + processed_url | |
| # Start Microsecond Timer | |
| start_time = time.perf_counter() | |
| # 1. Extract Features using the sanitized structural URL | |
| features = extract_url_features(processed_url) | |
| # 2. Convert to DMatrix format required by XGBoost | |
| dmatrix_payload = xgb.DMatrix(np.array([features])) | |
| # 3. Predict Probability | |
| probability = bst.predict(dmatrix_payload)[0] | |
| # Stop Timer | |
| end_time = time.perf_counter() | |
| latency_ms = (end_time - start_time) * 1000 | |
| # Formatting the Output | |
| if probability >= 0.50: | |
| verdict = "🚨 PHISHING DETECTED" | |
| confidence = probability * 100 | |
| else: | |
| verdict = "✅ LEGITIMATE SAFE" | |
| confidence = (1 - probability) * 100 | |
| print(f"Verdict : {verdict}") | |
| print(f"Confidence : {confidence:.2f}%") | |
| print(f"Latency : {latency_ms:.3f} ms") | |
| except KeyboardInterrupt: | |
| print("\n[*] Exiting evaluation engine.") | |
| break | |
| except Exception as e: | |
| print(f"[-] An error occurred during evaluation: {e}") | |
| if __name__ == "__main__": | |
| main() |