Spaces:
Sleeping
Sleeping
| from flask import Flask, request, jsonify, send_from_directory | |
| from flask_cors import CORS | |
| import joblib | |
| import requests | |
| import os | |
| from dotenv import load_dotenv | |
| # Load environment variables | |
| load_dotenv() | |
| app = Flask(__name__, static_folder='.', static_url_path='') | |
| CORS(app) # Enable CORS for all routes | |
| # Load model and vectorizer | |
| try: | |
| model = joblib.load("spam_model.pkl") | |
| vectorizer = joblib.load("vectorizer.pkl") | |
| print("Model and vectorizer loaded successfully.") | |
| except Exception as e: | |
| print(f"Error loading model: {e}") | |
| model = None | |
| vectorizer = None | |
| N8N_URL = os.getenv("N8N_WEBHOOK_URL") | |
| def serve_frontend(): | |
| return send_from_directory('.', 'index.html') | |
| def serve_static(path): | |
| return send_from_directory('.', path) | |
| def predict(): | |
| if not model or not vectorizer: | |
| return jsonify({"error": "Model not loaded"}), 500 | |
| data = request.get_json(force=True) | |
| message = data.get('message', '') | |
| if not message: | |
| return jsonify({"error": "No message provided"}), 400 | |
| # Vectorize input | |
| vectorized_message = vectorizer.transform([message]) | |
| # Predict | |
| prediction = model.predict(vectorized_message)[0] | |
| # Get probabilities | |
| probabilities = model.predict_proba(vectorized_message) | |
| confidence = max(probabilities[0]) | |
| result = { | |
| "prediction": prediction, | |
| "confidence": float(confidence), | |
| "message": message | |
| } | |
| # Send to N8N (Fire and forget, or wait for response?) | |
| if N8N_URL: | |
| try: | |
| print(f"Sending to N8N: {N8N_URL}") | |
| requests.post(N8N_URL, json=result, timeout=5) # Add timeout | |
| except Exception as e: | |
| print(f"Failed to send to N8N: {e}") | |
| return jsonify(result) | |
| if __name__ == '__main__': | |
| app.run(debug=True, host='0.0.0.0', port=7860) # Port 7860 is standard for HF Spaces | |