Spaces:
Sleeping
Sleeping
File size: 4,673 Bytes
1c2b077 |
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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
import gradio as gr
import logging
from app.services import sticker_service
from app.gradio_formatter import gradio_formatter
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s %(message)s'
)
logger = logging.getLogger(__name__)
class StickerUI:
"""Main class for the Sticker Search UI application."""
def __init__(self):
self.demo = None
self._initialize_components()
def _initialize_components(self):
"""Initialize all UI components."""
# Search Tab
self.search_input = gr.Textbox(label="Search keywords")
self.limit_input = gr.Slider(1, 10, value=4, step=1, label="Max results")
self.search_button = gr.Button("Search")
self.deepseek_button = gr.Button("AI Search")
self.search_results = gr.Dataframe(
headers=["Preview", "Relevance", "Description", "Filename"],
datatype=["markdown", "number", "str", "str"],
row_count=("dynamic")
)
self.ai_search_results = gr.Dataframe(
headers=["Preview", "AI-Score", "AI-Reason", "Description", "Filename"],
datatype=["markdown", "number", "str", "str", "str"],
row_count=("dynamic")
)
# Upload Tab
self.image_input = gr.Image(type="filepath")
self.title_input = gr.Textbox(label="Title")
self.tags_input = gr.Textbox(label="Tags (comma separated)")
self.desc_input = gr.Textbox(label="Description")
self.upload_button = gr.Button("Upload")
self.upload_output = gr.Textbox(label="Status")
# All Stickers Tab
self.refresh_button = gr.Button("Refresh")
self.stickers_table = gr.Dataframe(
headers=["ID", "Preview", "Title", "Description", "Tags", "Filename", "Hash"],
datatype=["str", "markdown", "str", "str", "str", "str", "str"]
)
def _setup_search_tab(self):
"""Configure the search tab layout and functionality."""
with gr.Tab("Search"):
with gr.Row():
self.search_input.render()
self.limit_input.render()
with gr.Row():
self.search_button.render()
self.deepseek_button.render()
self.search_results.render()
self.ai_search_results.render()
# Event handlers
self.search_button.click(
fn=lambda q, l: gradio_formatter.format_search_results(
sticker_service.search_stickers(q, l)
),
inputs=[self.search_input, self.limit_input],
outputs=self.search_results
)
self.deepseek_button.click(
fn=lambda q, l: gradio_formatter.format_ai_search_results(
sticker_service.search_stickers(q, l, reranking=True)
),
inputs=[self.search_input, self.limit_input],
outputs=self.ai_search_results
)
def _setup_upload_tab(self):
"""Configure the upload tab layout and functionality."""
with gr.Tab("Upload"):
with gr.Row():
self.image_input.render()
with gr.Row():
self.title_input.render()
self.tags_input.render()
with gr.Row():
self.desc_input.render()
self.upload_button.render()
self.upload_output.render()
self.upload_button.click(
fn=sticker_service.upload_sticker,
inputs=[
self.image_input,
self.title_input,
self.desc_input,
self.tags_input
],
outputs=self.upload_output
)
def _setup_all_stickers_tab(self):
"""Configure the all stickers tab layout and functionality."""
with gr.Tab("All Stickers"):
self.refresh_button.render()
self.stickers_table.render()
self.refresh_button.click(
fn=sticker_service.get_all_stickers,
outputs=self.stickers_table
)
def create_ui(self):
"""Create and configure the complete UI."""
with gr.Blocks(title="Neko Sticker Search π") as self.demo:
self._setup_search_tab()
self._setup_upload_tab()
self._setup_all_stickers_tab()
return self.demo
|