Spaces:
Sleeping
Sleeping
| from flask import Flask, render_template, request, jsonify, url_for | |
| import pandas as pd | |
| import os | |
| import json | |
| app = Flask(__name__) | |
| app.config["UPLOAD_FOLDER"] = "uploads" | |
| app.config["IMAGES_FOLDER"] = os.path.join("static", "images") | |
| if not os.path.exists(app.config["UPLOAD_FOLDER"]): | |
| os.makedirs(app.config["UPLOAD_FOLDER"]) | |
| with open("demo_answers.json") as f: | |
| answers = json.load(f) | |
| analysis_requested = False | |
| current_analysis_key = None | |
| def index(): | |
| global analysis_requested, current_analysis_key | |
| analysis_requested = False | |
| current_analysis_key = None | |
| return render_template("index.html") | |
| def upload_file(): | |
| if "file" not in request.files: | |
| return jsonify({"error": "No file part"}), 400 | |
| file = request.files["file"] | |
| if file.filename == "": | |
| return jsonify({"error": "No selected file"}), 400 | |
| if file and file.filename.endswith(".csv"): | |
| file_path = os.path.join(app.config["UPLOAD_FOLDER"], file.filename) | |
| file.save(file_path) | |
| df = pd.read_csv(file_path) | |
| summary = df.describe(include="all").to_html(classes="table table-striped") | |
| return jsonify( | |
| { | |
| "summary": summary, | |
| "message": "File uploaded successfully. Let's see what we have here...", | |
| } | |
| ) | |
| else: | |
| return jsonify({"error": "Unsupported file type"}), 400 | |
| def chat(): | |
| global analysis_requested, current_analysis_key | |
| user_message = request.json.get("message").lower() | |
| if analysis_requested and user_message == "yes": | |
| return add_insight() | |
| if user_message == "proceed with the analysis of the data": | |
| analysis_requested = True | |
| current_analysis_key = "01" | |
| response_text = ( | |
| "Okay, let's start the analysis. " | |
| + answers[current_analysis_key]["answer"]["answer"] | |
| + " Would you like to add this insight to the dashboard?" | |
| ) | |
| return jsonify({"response": response_text}) | |
| if user_message == "thanks": | |
| return jsonify({"response": "You're welcome! It was a pleasure helping you!"}) | |
| # Find the answer by matching the user message with questions in the JSON file | |
| matched_entry = next( | |
| ( | |
| entry | |
| for key, entry in answers.items() | |
| if entry["question"].lower() == user_message | |
| ), | |
| None, | |
| ) | |
| if matched_entry: | |
| response = matched_entry["answer"]["answer"] | |
| justification = matched_entry["answer"]["justification"] | |
| image_filename = ( | |
| f"{list(answers.keys())[list(answers.values()).index(matched_entry)]}.jpg" | |
| ) | |
| image_path = os.path.join(app.config["IMAGES_FOLDER"], image_filename) | |
| if os.path.exists(image_path): | |
| image_url = url_for("static", filename=f"images/{image_filename}") | |
| else: | |
| image_url = None | |
| else: | |
| response = "I don't have an answer for that question." | |
| justification = None | |
| image_url = None | |
| return jsonify( | |
| {"response": response, "justification": justification, "image_url": image_url} | |
| ) | |
| def explore(): | |
| key = request.json.get("key") | |
| matched_entry = answers.get(key) | |
| if matched_entry: | |
| response = matched_entry["answer"]["answer"] | |
| justification = matched_entry["answer"]["justification"] | |
| image_filename = f"{key}.jpg" | |
| image_path = os.path.join(app.config["IMAGES_FOLDER"], image_filename) | |
| if os.path.exists(image_path): | |
| image_url = url_for("static", filename=f"images/{image_filename}") | |
| else: | |
| image_url = None | |
| else: | |
| response = "No more data to explore." | |
| justification = None | |
| image_url = None | |
| return jsonify( | |
| { | |
| "response": response, | |
| "justification": justification, | |
| "image_url": image_url, | |
| "key": key, | |
| } | |
| ) | |
| def add_insight(): | |
| global analysis_requested, current_analysis_key | |
| if analysis_requested and current_analysis_key: | |
| key = current_analysis_key | |
| matched_entry = answers.get(key) | |
| if matched_entry: | |
| response = matched_entry["answer"]["answer"] | |
| justification = matched_entry["answer"]["justification"] | |
| image_filename = f"{key}.jpg" | |
| image_path = os.path.join(app.config["IMAGES_FOLDER"], image_filename) | |
| if os.path.exists(image_path): | |
| image_url = url_for("static", filename=f"images/{image_filename}") | |
| else: | |
| image_url = None | |
| next_key = str(int(key) + 1).zfill(2) | |
| if next_key in answers: | |
| current_analysis_key = next_key | |
| next_response = ( | |
| answers[next_key]["answer"]["answer"] | |
| + " Would you like to add this insight to the dashboard?" | |
| ) | |
| return jsonify( | |
| { | |
| "response": response, | |
| "justification": justification, | |
| "image_url": image_url, | |
| "next_response": next_response, | |
| "key": key, | |
| } | |
| ) | |
| else: | |
| current_analysis_key = None | |
| final_summary = "Okay! It seems like there are no more interesting trends to explore in this dataset. Summary: Most of the incidents are hardware-related and they originated in Australia. They mostly are due to a printer not working. Recommended action: Fix the particular printer that's not working." | |
| return jsonify( | |
| { | |
| "response": response, | |
| "justification": justification, | |
| "image_url": image_url, | |
| "key": key, | |
| "next_response": final_summary, | |
| } | |
| ) | |
| else: | |
| return jsonify({"response": "No more data to explore."}) | |
| else: | |
| return jsonify( | |
| { | |
| "response": "Please request to proceed with the analysis of the data first." | |
| } | |
| ) | |
| if __name__ == "__main__": | |
| app.run(debug=True, port=7860, host="0.0.0.0") | |