Trae Assistant
feat: enhance robustness, add import functionality, and prepare for HF deployment
727abcc
from flask import Flask, render_template, request, jsonify
import logging
app = Flask(__name__, static_folder='static', template_folder='templates')
# Setup logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/api/simulate', methods=['POST'])
def simulate():
try:
data = request.get_json(silent=True)
if not data:
return jsonify({'error': 'Invalid JSON data or empty body'}), 400
traffic = float(data.get('traffic', 10000))
cpc = float(data.get('cpc', 1.5))
product_price = float(data.get('product_price', 99))
steps = data.get('steps', [])
if not steps or not isinstance(steps, list):
return jsonify({'error': 'No steps provided or invalid format'}), 400
# Calculate funnel flow
current_users = traffic
total_spend = traffic * cpc
results = []
# Add Initial Step (Traffic Source)
results.append({
'step_name': 'Traffic Source',
'users': int(current_users),
'conversion_rate': 100,
'dropoff': 0
})
for step in steps:
name = step.get('name', 'Unknown Step')
rate = float(step.get('rate', 50)) / 100.0 # Convert percentage to decimal
next_users = current_users * rate
dropoff = current_users - next_users
results.append({
'step_name': name,
'users': int(next_users),
'conversion_rate': step.get('rate', 50),
'dropoff': int(dropoff)
})
current_users = next_users
final_users = current_users
total_revenue = final_users * product_price
roi = ((total_revenue - total_spend) / total_spend) * 100 if total_spend > 0 else 0
cac = total_spend / final_users if final_users > 0 else 0
response = {
'metrics': {
'total_spend': round(total_spend, 2),
'total_revenue': round(total_revenue, 2),
'roi': round(roi, 2),
'cac': round(cac, 2),
'final_conversions': int(final_users)
},
'funnel_data': results
}
return jsonify(response)
except Exception as e:
logger.error(f"Error in simulation: {e}")
return jsonify({'error': str(e)}), 500
@app.route('/health')
def health():
return jsonify({'status': 'healthy'}), 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860, debug=True)