import gradio as gr import os import json import pandas as pd from data_service import DataAssessmentService from datetime import datetime import gspread from oauth2client.service_account import ServiceAccountCredentials # Initialize service service = DataAssessmentService(api_key=os.environ.get("OPENAI_API_KEY")) # Department mapping from abbreviations to full names DEPARTMENTS = { "Executive Management": "บริหาร ผอ รอง ผู้ช่วย", "Education Support": "สนับสนุนการศึกษา", "Medicine": "MED", "Cardiology": "Cardio", "Gastroenterology": "GI", "Medical Oncology": "Onco MED", "Hematology": "Hematology", "Operating Room": "OR", "Surgery": "Sx", "Orthopedics": "Ortho", "Obstetrics and Gynecology": "OBgyne", "Ophthalmology": "Oph", "Ear, Nose, and Throat": "ENT", "Anesthesiology": "Anes", "Emergency Medicine & EMS": "ER and EMS", "Pediatrics": "PED", "Family Medicine & Preventive Medicine": "GP Fammed preventive med", "Psychiatry": "Psych", "Physical Medicine & Rehabilitation": "PM&R Physiotherapy", "Pathology": "Patho", "Radiology": "Xray", "Radiation Oncology": "Onco radiology", "Cyclotron": "Cyclotron", "Inpatient Department": "IPD", "Outpatient Department": "OPD", "Pharmacy": "Pharmacy", "Dentistry": "dentistry", "Nutrition": "Nutrition", "Medical Records": "เวชระเบียน", "Finance": "การเงิน", "Other": "Other" } # Frequency options FREQUENCIES = ["One-time request", "Weekly", "Monthly"] # Urgency options URGENCY = ["Within a week", "Within a month", "Within a year"] def save_to_sheet(data): """Save request data to Google Sheet""" # TODO: Implement Google Sheets integration pass def process_request(name, employee_id, email, department, other_dept, request_details, frequency, urgency): # Combine department info final_department = other_dept if department == "Other" else department # Current timestamp timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # Process the request through GPT result = service.assess_request(request_details) # Prepare data for Google Sheets sheet_data = { "Timestamp": timestamp, "Name": name, "Employee ID": employee_id, "Email": email, "Department": final_department, "Request Details": request_details, "Frequency": frequency, "Urgency": urgency, "System Response": json.dumps(result, ensure_ascii=False) } # Save to Google Sheets save_to_sheet(sheet_data) # Return formatted result return result # Create Gradio interface with gr.Blocks() as demo: gr.Markdown("# Hospital Data Request System") gr.Markdown("Please fill in the following information to request data access.") with gr.Row(): with gr.Column(): name = gr.Textbox(label="Full Name", placeholder="Enter your full name") employee_id = gr.Textbox(label="Employee ID", placeholder="Enter your employee ID") email = gr.Textbox(label="Email", placeholder="Enter your email for contact") with gr.Row(): with gr.Column(): department = gr.Dropdown( choices=list(DEPARTMENTS.keys()) + ["Other"], label="Department", info="Select your department" ) other_dept = gr.Textbox( label="Other Department", placeholder="Specify your department if not in the list", visible=False ) # Show/hide other department textbox department.change( fn=lambda x: gr.update(visible=x=="Other"), inputs=[department], outputs=[other_dept] ) with gr.Row(): request_details = gr.Textbox( label="Request Details", placeholder="Please describe in detail what data you need, including time period, specific parameters, etc.", lines=5 ) with gr.Row(): with gr.Column(): frequency = gr.Dropdown( choices=FREQUENCIES, label="Request Frequency", info="How often do you need this data?" ) urgency = gr.Dropdown( choices=URGENCY, label="Urgency Level", info="How urgent is your request?" ) submit_btn = gr.Button("Submit Request") output = gr.JSON(label="Analysis Result") submit_btn.click( fn=process_request, inputs=[name, employee_id, email, department, other_dept, request_details, frequency, urgency], outputs=[output] ) gr.Markdown(""" ### Notes: - Please provide detailed information about the data you need - All communications will be sent to the provided email - For urgent requests, please select appropriate urgency level """) if __name__ == "__main__": demo.launch()