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__) | |
| def index(): | |
| return render_template('index.html') | |
| 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 | |
| def health(): | |
| return jsonify({'status': 'healthy'}), 200 | |
| if __name__ == '__main__': | |
| app.run(host='0.0.0.0', port=7860, debug=True) | |