Texbase / feedback_api.py
Asad999's picture
Initial clean deployment for Hugging Face Spaces (v5 - final fix)
d712cef
Raw
History Blame Contribute Delete
4.06 kB
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)