rijashahid / app.py
mabdullahsibghatullah123's picture
Upload 12 files
87ab716 verified
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")
@app.route('/')
def serve_frontend():
return send_from_directory('.', 'index.html')
@app.route('/<path:path>')
def serve_static(path):
return send_from_directory('.', path)
@app.route('/predict', methods=['POST'])
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