File size: 4,059 Bytes
d712cef | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | from flask import Flask, request, jsonify
from flask_cors import CORS
import feedback_logger
app = Flask(__name__)
# Explicit CORS configuration for the frontend origin
CORS(app, resources={r"/api/*": {"origins": "http://localhost:5173"}})
@app.errorhandler(Exception)
def handle_exception(e):
# Pass through HTTP errors
if hasattr(e, 'code'):
return jsonify({"error": str(e)}), e.code
# Handle non-HTTP exceptions only
print(f"Server Error: {e}")
return jsonify({"error": "Internal Server Error", "details": str(e)}), 500
@app.route('/api/feedback/market_analysis', methods=['POST'])
def feedback_market():
data = request.json
feedback_logger.log_feedback(
section='market_analysis',
feedback=data.get('feedback'),
user_input=data.get('user_input'),
agent_response=data.get('agent_response'),
parameter_name=data.get('parameter_name'),
prediction_summary=data.get('prediction_summary'),
flagged_excerpt=data.get('flagged_excerpt'),
user_comment=data.get('user_comment')
)
return jsonify({"status": "ok"})
@app.route('/api/feedback/market_chat', methods=['POST'])
def feedback_market_chat():
data = request.json
feedback_logger.log_feedback(
section='market_chat',
feedback=data.get('feedback'),
user_input=data.get('user_input'),
agent_response=data.get('agent_response'),
user_comment=data.get('user_comment')
)
return jsonify({"status": "ok"})
@app.route('/api/feedback/email_editor', methods=['POST'])
def feedback_email():
data = request.json
feedback_logger.log_feedback(
section='email_editor',
feedback=data.get('feedback'),
user_input=data.get('user_input'),
agent_response=data.get('agent_response'),
tone_requested=data.get('tone_requested'),
draft_length_chars=data.get('draft_length_chars')
)
return jsonify({"status": "ok"})
@app.route('/api/feedback/inbox_flow', methods=['POST'])
def feedback_inbox():
data = request.json
feedback_logger.log_feedback(
section='inbox_flow',
feedback=data.get('feedback'),
user_input=data.get('user_input'),
agent_response=data.get('agent_response'),
pipeline_stage=data.get('pipeline_stage'),
recipient_hint=data.get('recipient_hint')
)
return jsonify({"status": "ok"})
@app.route('/api/feedback/po_quotation', methods=['POST'])
def feedback_po():
data = request.json
predicted = data.get('predicted_price')
actual = data.get('actual_price')
price_delta = None
try:
if predicted is not None and actual is not None:
price_delta = abs(float(predicted) - float(actual))
except (ValueError, TypeError):
pass
feedback_logger.log_feedback(
section='po_quotation',
feedback=data.get('feedback'),
user_input=data.get('user_input'),
agent_response=data.get('agent_response'),
predicted_price=predicted,
actual_price=actual,
price_delta=price_delta,
item_description=data.get('item_description'),
correction_note=data.get('correction_note')
)
return jsonify({"status": "ok"})
@app.route('/api/feedback/stats', methods=['GET'])
def get_stats():
logs = feedback_logger.get_all_logs()
total = len(logs)
if total == 0:
return jsonify({"total": 0, "by_section": {}, "negative_rate": 0, "partial_rate": 0})
sections = {}
bad_count = 0
partial_count = 0
for l in logs:
s = l['section']
sections[s] = sections.get(s, 0) + 1
if l['feedback'] == 'bad': bad_count += 1
if l['feedback'] == 'partial': partial_count += 1
return jsonify({
"total": total,
"by_section": sections,
"negative_rate": (bad_count / total) * 100,
"partial_rate": (partial_count / total) * 100
})
if __name__ == "__main__":
feedback_logger.init_db()
app.run(port=5050, debug=True)
|