DamarJati's picture
Update app.py
1c03ffb verified
import gradio as gr
import pandas as pd
import duckdb
PARQUET_FILES = {
"Animagine XL 3.1": 'data.parquet',
}
preset_values = [
"1girl, kamado nezuko, kimetsu no yaiba",
"1girl, kanroji mitsuri, kimetsu no yaiba",
"1girl, fern (sousou no frieren), sousou no frieren",
"1girl, elaina (majo no tabitabi), majo no tabitabi"
]
def search_data(search_term, selected_file):
try:
con = duckdb.connect(database=':memory:', read_only=False)
con.execute(f"CREATE TABLE my_table AS SELECT * FROM read_parquet('{PARQUET_FILES[selected_file]}')")
if search_term.strip():
results = con.execute(f"SELECT * FROM my_table WHERE lower(teks) LIKE '%{search_term.lower()}%'").fetchdf()
else:
search_terms_sql = " OR ".join([f"lower(teks) LIKE '%{term.lower()}%'" for term in preset_values])
results = con.execute(f"SELECT * FROM my_table WHERE {search_terms_sql}").fetchdf()
con.close()
if len(results.columns) > 12:
results = results.iloc[:, :12]
return results
except FileNotFoundError:
return pd.DataFrame({'Error': ['Parquet file not found. Please check the file path.']})
except Exception as e:
return pd.DataFrame({'Error': [f'An error occurred: {e}']})
if __name__ == "__main__":
with gr.Blocks() as app:
gr.Markdown("## Text Search for Animagine tag characters")
with gr.Row(): # Menggunakan Row untuk layout horizontal
with gr.Column(): # Kolom untuk input pencarian
search_input = gr.Textbox(
label="Search for characters or series:",
placeholder="sousou no frieren",
)
with gr.Column(): # Kolom untuk dropdown
file_dropdown = gr.Dropdown(
choices=list(PARQUET_FILES.keys()),
label="Select Character Tag",
value=list(PARQUET_FILES.keys())[0], # Default value
)
search_output = gr.Dataframe( # Output di luar row, di bawahnya
label="Search Results",
value=pd.DataFrame({'Characters tag': preset_values}),
headers="auto",
)
inputs = [search_input, file_dropdown]
search_input.change(
fn=search_data,
inputs=inputs,
outputs=search_output,
)
file_dropdown.change(
fn=search_data,
inputs=inputs,
outputs=search_output,
)
app.launch()