Spaces:
Running
Running
| from flask import Flask, request, jsonify | |
| import pandas as pd | |
| from expense_forecast.Expense_Forecasting import get_input_data, forecast_expense, model_fit, df | |
| from chatbot.chatbot import classify_transaction, chat | |
| from speech_transcribe.speech_transcribe import transcribe_file | |
| from budget_suggestion.budget_suggestion import budget_suggestion | |
| from read_image.scan_bills import scan_bills | |
| import os | |
| from flask_cors import CORS | |
| app = Flask(__name__) | |
| CORS(app, resources={r"/*": {"origins": [ | |
| 'http://localhost:3000', | |
| 'http://localhost:8080', | |
| 'https://wealthmate.onrender.com', | |
| 'https://kennethduong-wealthmate.hf.space' | |
| ]}}) | |
| def handle_predict(): | |
| data = request.get_json() | |
| input_data = get_input_data( | |
| data['Income (VND)'], | |
| data['Interest rate (%)'], | |
| data['Inflation rate (%)'], | |
| data['Holidays'] | |
| ) | |
| forecast = forecast_expense(model_fit, input_data, df) | |
| return jsonify({'forecasted_expense': forecast}) | |
| def handle_classify(): | |
| data = request.get_json() | |
| result = classify_transaction(data['prompt']) | |
| return jsonify(result) | |
| def chat_with_user(): | |
| data = request.get_json() | |
| mood = data['mood'] | |
| prompt = data['prompt'] | |
| response = chat(mood, prompt) | |
| return jsonify({'response': response}) | |
| def handle_transcribe_speech(): | |
| 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 | |
| mood = request.form.get('mood', 'neutral') | |
| temp_path = 'temp_audio.wav' | |
| file.save(temp_path) | |
| try: | |
| transcription = transcribe_file(temp_path) | |
| result = classify_transaction(transcription) | |
| message = chat(mood, transcription) | |
| result_dict = { | |
| "description": result['description'], | |
| "amount": result['amount'], | |
| "category": result['category'], | |
| "chat_response": message | |
| } | |
| return jsonify(result_dict) | |
| except Exception as e: | |
| return jsonify({'error': str(e)}), 500 | |
| finally: | |
| if os.path.exists(temp_path): | |
| os.remove(temp_path) | |
| def handle_suggest_budget(): | |
| data = request.get_json() | |
| amount = data['income'] | |
| suggestion_text = budget_suggestion(amount) | |
| budget_dict = {} | |
| items = suggestion_text.split(',') | |
| for item in items: | |
| if ':' in item: | |
| key, value = item.split(':') | |
| budget_dict[key.strip()] = value.strip() | |
| return jsonify(budget_dict) | |
| def handle_scan_bills(): | |
| 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 | |
| temp_path = 'temp_image.jpg' | |
| file.save(temp_path) | |
| mood = request.form.get('mood', 'neutral') | |
| try: | |
| result = scan_bills(temp_path) | |
| values = result.split(':') | |
| values = [v.strip() for v in values] | |
| result_dict = {} | |
| result_dict["description"] = values[0] | |
| result_dict["category"] = values[1] | |
| result_dict["amount"] = values[2] | |
| message = chat(mood, result) | |
| result_dict["chat_response"] = message | |
| return jsonify(result_dict) | |
| except Exception as e: | |
| return jsonify({'error': str(e)}), 500 | |
| finally: | |
| if os.path.exists(temp_path): | |
| os.remove(temp_path) | |
| def hello(): | |
| return "Hello World!" | |
| if __name__ == '__main__': | |
| # app.run(debug=True) | |
| app.run(host='0.0.0.0', port=7860) | |