File size: 2,421 Bytes
28bb657
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 1. Import necessary libraries
import pandas as pd
import gradio as gr
import random

# Function to load Excel sheets and extract first column data from valid sheets
def load_excel_sheets(file_path):
    # Load all sheets into a dictionary {sheet_name: DataFrame}
    xls = pd.ExcelFile(file_path)
    sheets = {}
    
    for sheet_name in xls.sheet_names:
        df = pd.read_excel(xls, sheet_name=sheet_name)
        # Check if the sheet has at least one column and is not empty
        if not df.empty and df.shape[1] > 0:
            # Extract the first column and remove NaN values
            sheets[sheet_name] = df.iloc[:, 0].dropna().tolist()
        else:
            # If the sheet is empty or has no valid data, skip it
            sheets[sheet_name] = []  # Optional: You can skip or keep an empty list
    
    return sheets

# Function to generate a random item from the selected sheet
def generate_random_item(sheet_name, sheets):
    items = sheets.get(sheet_name, [])
    if items:
        return random.choice(items)
    return "No items available."

# Gradio interface
def prompt_generator_interface(file_path):
    # Load all the sheets and extract data from the first column
    sheets = load_excel_sheets(file_path)

    # Define function for Gradio
    def generate_prompt(sheet_name):
        return generate_random_item(sheet_name, sheets)

    # Improved UI with better layout
    interface = gr.Interface(
        fn=generate_prompt,  # Function to call for generating random item
        inputs=gr.inputs.Dropdown(choices=list(sheets.keys()), label="Select Sheet"),
        outputs=gr.outputs.Textbox(label="Generated Prompt"),
        title="📝 Witness Prompt Generator",
        description="Select a sheet to generate a random prompt from the provided data.",
        layout="vertical",  # Ensure vertical layout
        theme="default",  # Apply a clean default theme
        live=False,  # Ensure that generation only happens on button click
        css=".gradio-container {background-color: #f5f5f5; font-family: Arial; padding: 20px;} h1 {color: #333;}"
    )
    
    return interface

# Create and launch the Gradio interface
if __name__ == "__main__":
    # Path to your Excel file (adjust the path if necessary)
    file_path = 'Witness Prompt Generator.xlsm'
    
    # Create and launch interface
    interface = prompt_generator_interface(file_path)
    interface.launch()