import gradio as gr from functions import example_question_generator, chatbot_with_fc from data_sources import process_data_upload from utils import message_dict import ast def run_example(input): return input def example_display(input): if input == None: display = True else: display = False return [gr.update(visible=display),gr.update(visible=display),gr.update(visible=display),gr.update(visible=display)] with gr.Blocks() as demo: description = gr.HTML("""

Supported Files

CSV Comma-separated values TSV Tab-separated values TXT Text files XLS/XLSX Excel spreadsheets XML XML documents JSON JSON data files
""", elem_classes="description_component") example_file_1 = gr.File(visible=False, value="samples/bank_marketing_campaign.csv") example_file_2 = gr.File(visible=False, value="samples/online_retail_data.csv") example_file_3 = gr.File(visible=False, value="samples/tb_illness_data.csv") with gr.Row(): example_btn_1 = gr.Button(value="Try Me: bank_marketing_campaign.csv", elem_classes="sample-btn bg-gradient-to-r from-purple-500 to-indigo-600 text-white p-6 rounded-lg text-left hover:shadow-lg", size="md", variant="primary") example_btn_2 = gr.Button(value="Try Me: online_retail_data.csv", elem_classes="sample-btn bg-gradient-to-r from-purple-500 to-indigo-600 text-white p-6 rounded-lg text-left hover:shadow-lg", size="md", variant="primary") example_btn_3 = gr.Button(value="Try Me: tb_illness_data.csv", elem_classes="sample-btn bg-gradient-to-r from-purple-500 to-indigo-600 text-white p-6 rounded-lg text-left hover:shadow-lg", size="md", variant="primary") file_output = gr.File(label="Data File (CSV, TSV, TXT, XLS, XLSX, XML, JSON)", show_label=True, elem_classes="file_marker drop-zone border-2 border-dashed border-gray-300 rounded-lg hover:border-primary cursor-pointer bg-gray-50 hover:bg-blue-50 transition-colors duration-300", file_types=['.csv','.xlsx','.txt','.json','.ndjson','.xml','.xls','.tsv']) example_btn_1.click(fn=run_example, inputs=example_file_1, outputs=file_output) example_btn_2.click(fn=run_example, inputs=example_file_2, outputs=file_output) example_btn_3.click(fn=run_example, inputs=example_file_3, outputs=file_output) file_output.change(fn=example_display, inputs=file_output, outputs=[example_btn_1, example_btn_2, example_btn_3, description]) @gr.render(inputs=file_output) def data_options(filename, request: gr.Request): print(filename) if request.session_hash not in message_dict: message_dict[request.session_hash] = {} message_dict[request.session_hash]['file_upload'] = None if filename: process_message = process_upload(filename, request.session_hash) gr.HTML(value=process_message[1], padding=False) if process_message[0] == "success": if "bank_marketing_campaign" in filename: example_questions = [ ["Describe the dataset"], ["What levels of education have the highest and lowest average balance?"], ["What job is most and least common for a yes response from the individuals, not counting 'unknown'?"], ["Can you generate a bar chart of education vs. average balance?"], ["Can you generate a table of levels of education versus average balance, percent married, percent with a loan, and percent in default?"], ["Can we predict the relationship between the number of contacts performed before this campaign and the average balance?"], ["Can you plot the number of contacts performed before this campaign versus the duration and use balance as the size in a bubble chart?"] ] elif "online_retail_data" in filename: example_questions = [ ["Describe the dataset"], ["What month had the highest revenue?"], ["Is revenue higher in the morning or afternoon?"], ["Can you generate a line graph of revenue per month?"], ["Can you generate a table of revenue per month?"], ["Can we predict how time of day affects transaction value in this data set?"], ["Can you plot revenue per month with size being the number of units sold that month in a bubble chart?"] ] else: try: generated_examples = ast.literal_eval(example_question_generator(request.session_hash)) example_questions = [ ["Describe the dataset"] ] for example in generated_examples: example_questions.append([example]) except Exception as e: print("DATA FILE QUESTION GENERATION ERROR") print(e) example_questions = [ ["Describe the dataset"], ["List the columns in the dataset"], ["What could this data be used for?"], ] parameters = gr.Textbox(visible=False, value=request.session_hash) bot = gr.Chatbot(type='messages', label="CSV Chat Window", render_markdown=True, sanitize_html=False, show_label=True, render=False, visible=True, elem_classes="chatbot") chat = gr.ChatInterface( fn=chatbot_with_fc, type='messages', chatbot=bot, title="Chat with your data file", concurrency_limit=None, examples=example_questions, additional_inputs=parameters ) def process_upload(upload_value, session_hash): if upload_value: process_message = process_data_upload(upload_value, session_hash) return process_message if __name__ == "__main__": demo.launch()