# Import and class names setup
import gradio as gr
import os
import torch
import random
#import nltk_u
import pandas as pd
from sklearn.model_selection import train_test_split
import time
#from model import RNN_model
from timeit import default_timer as timer
from typing import Tuple, Dict
################################################################################
import argparse
import numpy as np
import pprint
import os
import copy
from str2bool import str2bool
from typing import Dict, Sequence
from sentence_transformers import SentenceTransformer
import torch
import json
import transformers
from modeling_phi import PhiForCausalLM
from tokenization_codegen import CodeGenTokenizer
################################################################################
parser = argparse.ArgumentParser()
#############################################################################################################################
parser.add_argument('--device_id', type=str, default="0")
parser.add_argument('--model', type=str, default="microsoft/phi-2", help="") ## /phi-1.5
parser.add_argument('--embedder', type=str, default="BAAI/bge-small-en-v1.5") ## /bge-small-en-v1.5 # bge-m3
parser.add_argument('--output_path', type=str, default="/home/henry/Desktop/HKU-DASC7606-A2/Outputs/ARC-Challenge-test", help="") ## -bge-m3
parser.add_argument('--start_index', type=int, default=0, help="")
parser.add_argument('--end_index', type=int, default=9999, help="")
parser.add_argument('--N', type=int, default=8, help="")
parser.add_argument('--max_len', type=int, default=1024, help="")
parser.add_argument('--prompt_type', type=str, default="v2.0", help="")
parser.add_argument('--top_k', type=str2bool, default=True, help="")
#############################################################################################################################
args = parser.parse_args()
if torch.cuda.is_available():
device = "cuda"
print(f'################################################################# device: {device}#################################################################')
else:
device = "cpu"
def get_model(base_model: str = "bigcode/starcoder",):
tokenizer = CodeGenTokenizer.from_pretrained(base_model)
tokenizer.pad_token_id = tokenizer.eos_token_id
tokenizer.pad_token = tokenizer.eos_token
model = PhiForCausalLM.from_pretrained(
base_model,
device_map="auto",
)
model.config.pad_token_id = tokenizer.pad_token_id
model.eval()
return tokenizer, model
################################################################################
'''
# Import data
df= pd.read_csv('Symptom2Disease.csv')
df.drop('Unnamed: 0', axis= 1, inplace= True)
# Preprocess data
df.drop_duplicates(inplace= True)
train_data, test_data= train_test_split(df, test_size=0.15, random_state=42 )
'''
howto= """Welcome to the Medical Chatbot, powered by Gradio.
Currently, the chatbot can WELCOME YOU, PREDICT DISEASE based on your symptoms and SUGGEST POSSIBLE SOLUTIONS AND RECOMENDATIONS, and BID YOU FAREWELL.
How to Start: Simply type your messages in the textbox to chat with the Chatbot and press enter!
The bot will respond based on the best possible answers to your messages.
"""
# Create the gradio demo
with gr.Blocks(css = """#col_container { margin-left: auto; margin-right: auto;} #chatbot {height: 520px; overflow: auto;}""") as demo:
gr.HTML('