# app.py | |
from flask import Flask, render_template, request, send_file, redirect, url_for | |
import os | |
import logging | |
from utils.meldrx import MeldRxAPI | |
from utils.oneclick import generate_discharge_paper_one_click | |
logging.basicConfig(level=logging.INFO) | |
logger = logging.getLogger(__name__) | |
app = Flask(__name__) | |
CLIENT_ID = os.getenv("MELDRX_CLIENT_ID", "04bdc9f9a23d488a868b93d594ee5a4a") | |
CLIENT_SECRET = os.getenv("MELDRX_CLIENT_SECRET", None) | |
WORKSPACE_ID = os.getenv("MELDRX_WORKSPACE_ID", "09ed4f76-b5ac-42bf-92d5-496933203dbe") | |
SPACE_URL = os.getenv("SPACE_URL", "https://multitransformer-tonic-discharge-guard.hf.space") | |
REDIRECT_URI = f"{SPACE_URL}/auth/callback" | |
meldrx_api = MeldRxAPI( | |
client_id=CLIENT_ID, | |
client_secret=CLIENT_SECRET, | |
workspace_id=WORKSPACE_ID, | |
redirect_uri=REDIRECT_URI | |
) | |
def index(): | |
return render_template('index.html') | |
def auth(): | |
if request.method == 'POST': | |
auth_code = request.form.get('auth_code') | |
if auth_code and meldrx_api.authenticate_with_code(auth_code): | |
return redirect(url_for('dashboard')) | |
return render_template('auth.html', auth_url=meldrx_api.get_authorization_url(), auth_result="Authentication failed") | |
return render_template('auth.html', auth_url=meldrx_api.get_authorization_url()) | |
def auth_callback(): | |
auth_code = request.args.get('code') | |
if auth_code and meldrx_api.authenticate_with_code(auth_code): | |
return redirect(url_for('dashboard')) | |
return render_template('auth.html', auth_url=meldrx_api.get_authorization_url(), auth_result="Callback failed") | |
def dashboard(): | |
if not meldrx_api.access_token: | |
return redirect(url_for('auth')) | |
patients_data = meldrx_api.get_patients() | |
if not patients_data or "entry" not in patients_data: | |
return render_template('dashboard.html', error="Failed to fetch patient data") | |
patients = [entry['resource'] for entry in patients_data.get('entry', [])] | |
return render_template('dashboard.html', patients=patients, authenticated=True) | |
def one_click(): | |
if not meldrx_api.access_token: | |
return redirect(url_for('auth')) | |
if request.method == 'POST': | |
patient_id = request.form.get('patient_id', '').strip() | |
first_name = request.form.get('first_name', '').strip() | |
last_name = request.form.get('last_name', '').strip() | |
action = request.form.get('action', '') | |
logger.info(f"One-click request - ID: {patient_id}, First: {first_name}, Last: {last_name}, Action: {action}") | |
pdf_path, status, basic_summary, ai_summary = generate_discharge_paper_one_click( | |
meldrx_api, grok_client, patient_id, first_name, last_name | |
) | |
if action == "Display Summary": | |
return render_template('oneclick.html', | |
status=status, | |
basic_summary=basic_summary.replace('\n', '<br>') if basic_summary else None, | |
ai_summary=ai_summary.replace('\n', '<br>') if ai_summary else None, | |
patient_id=patient_id, | |
first_name=first_name, | |
last_name=last_name) | |
elif action == "Generate PDF" and pdf_path: | |
return send_file(pdf_path, | |
as_attachment=True, | |
download_name=f"discharge_summary_{patient_id or 'patient'}.pdf") | |
return render_template('oneclick.html', | |
status=status, | |
basic_summary=basic_summary.replace('\n', '<br>') if basic_summary else None, | |
ai_summary=ai_summary.replace('\n', '<br>') if ai_summary else None, | |
patient_id=patient_id, | |
first_name=first_name, | |
last_name=last_name) | |
return render_template('oneclick.html') | |
if __name__ == '__main__': | |
port = int(os.getenv("PORT", 7860)) | |
app.run(debug=False, host='0.0.0.0', port=port) | |
# # app.py | |
# from flask import Flask, render_template, request, send_file, redirect, url_for | |
# import os | |
# import logging | |
# from utils.meldrx import MeldRxAPI | |
# from utils.oneclick import generate_discharge_paper_one_click | |
# from xai import Grok # Adjust import based on actual xAI SDK | |
# logging.basicConfig(level=logging.DEBUG) # Changed to DEBUG for more detailed logs | |
# logger = logging.getLogger(__name__) | |
# app = Flask(__name__) | |
# CLIENT_ID = os.getenv("MELDRX_CLIENT_ID", "04bdc9f9a23d488a868b93d594ee5a4a") | |
# CLIENT_SECRET = os.getenv("MELDRX_CLIENT_SECRET", None) | |
# WORKSPACE_ID = os.getenv("MELDRX_WORKSPACE_ID", "09ed4f76-b5ac-42bf-92d5-496933203dbe") | |
# SPACE_URL = os.getenv("SPACE_URL", "https://multitransformer-tonic-discharge-guard.hf.space") | |
# REDIRECT_URI = f"{SPACE_URL}/auth/callback" | |
# meldrx_api = MeldRxAPI( | |
# client_id=CLIENT_ID, | |
# client_secret=CLIENT_SECRET, | |
# workspace_id=WORKSPACE_ID, | |
# redirect_uri=REDIRECT_URI | |
# ) | |
# # Initialize xAI client | |
# grok_client = Grok() # Adjust initialization as needed | |
# @app.route('/') | |
# def index(): | |
# return render_template('index.html') | |
# @app.route('/auth', methods=['GET', 'POST']) | |
# def auth(): | |
# if request.method == 'POST': | |
# auth_code = request.form.get('auth_code') | |
# if auth_code and meldrx_api.authenticate_with_code(auth_code): | |
# return redirect(url_for('dashboard')) | |
# return render_template('auth.html', auth_url=meldrx_api.get_authorization_url(), auth_result="Authentication failed") | |
# return render_template('auth.html', auth_url=meldrx_api.get_authorization_url()) | |
# @app.route('/auth/callback', methods=['GET']) | |
# def auth_callback(): | |
# auth_code = request.args.get('code') | |
# if auth_code and meldrx_api.authenticate_with_code(auth_code): | |
# return redirect(url_for('dashboard')) | |
# return render_template('auth.html', auth_url=meldrx_api.get_authorization_url(), auth_result="Callback failed") | |
# @app.route('/dashboard', methods=['GET']) | |
# def dashboard(): | |
# if not meldrx_api.access_token: | |
# return redirect(url_for('auth')) | |
# patients_data = meldrx_api.get_patients() | |
# if not patients_data or "entry" not in patients_data: | |
# logger.error("Failed to fetch patient data for dashboard") | |
# return render_template('dashboard.html', error="Failed to fetch patient data") | |
# patients = [entry['resource'] for entry in patients_data.get('entry', [])] | |
# logger.debug(f"Patients for dashboard: {patients}") | |
# return render_template('dashboard.html', patients=patients, authenticated=True) | |
# @app.route('/oneclick', methods=['GET', 'POST']) | |
# def one_click(): | |
# if not meldrx_api.access_token: | |
# return redirect(url_for('auth')) | |
# if request.method == 'POST': | |
# patient_id = request.form.get('patient_id', '').strip() | |
# first_name = request.form.get('first_name', '').strip() | |
# last_name = request.form.get('last_name', '').strip() | |
# action = request.form.get('action', '') | |
# logger.info(f"One-click request - ID: {patient_id}, First: {first_name}, Last: {last_name}, Action: {action}") | |
# pdf_path, status, basic_summary, ai_summary = generate_discharge_paper_one_click( | |
# meldrx_api, grok_client, patient_id, first_name, last_name | |
# ) | |
# if action == "Display Summary": | |
# return render_template('oneclick.html', | |
# status=status, | |
# basic_summary=basic_summary.replace('\n', '<br>') if basic_summary else None, | |
# ai_summary=ai_summary.replace('\n', '<br>') if ai_summary else None, | |
# patient_id=patient_id, | |
# first_name=first_name, | |
# last_name=last_name) | |
# elif action == "Generate PDF" and pdf_path: | |
# return send_file(pdf_path, | |
# as_attachment=True, | |
# download_name=f"discharge_summary_{patient_id or 'patient'}.pdf") | |
# return render_template('oneclick.html', | |
# status=status, | |
# basic_summary=basic_summary.replace('\n', '<br>') if basic_summary else None, | |
# ai_summary=ai_summary.replace('\n', '<br>') if ai_summary else None, | |
# patient_id=patient_id, | |
# first_name=first_name, | |
# last_name=last_name) | |
# return render_template('oneclick.html') | |
# if __name__ == '__main__': | |
# port = int(os.getenv("PORT", 7860)) | |
# app.run(debug=False, host='0.0.0.0', port=port) |