LTEnjoy's picture
Update app.py
90093be verified
import sys
root_dir = __file__.rsplit("/", 2)[0]
if root_dir not in sys.path:
sys.path.append(root_dir)
import gradio as gr
from utils import set_text_bg_color
from loop_retrieve_cards import get_models, get_datasets, get_readme_dict
def match_card(input: str, card_id: str, card_type: str) -> str:
"""
Search the input in a card. If the input string is contained in the card_id or its README, display this card.
Args:
input: Input string
card_id: HuggingFace card id
card_type: Type of card, either "model" or "dataset"
"""
display_str = ""
readme_dict = get_readme_dict()
if input.lower() in card_id.lower() or input.lower() in readme_dict[card_id].lower():
# Add card id
if card_type == "model":
display_str += f"## [{set_text_bg_color(input, card_id)}](https://huggingface.co/{card_id})\n\n"
else:
display_str += f"## [{set_text_bg_color(input, card_id)}](https://huggingface.co/datasets/{card_id})\n\n"
# Highlight lines that contain the input string
show_lines = []
for line in readme_dict[card_id].split("\n"):
if input.lower() in line.lower() and "<!--" not in line:
show_lines.append(set_text_bg_color(input, line))
# Add README
display_str += "\n\n".join(show_lines)
# Add a separator
display_str = f"\n\n{display_str}\n\n---\n\n"
# In case that the keyword is only contained in comments
if input.lower() not in card_id.lower() and len(show_lines) == 0:
display_str = ""
return display_str
def show_card_info(input: str):
retrieval_str = ""
if input != "":
# Search models
retrieval_str += "# Models\n\n"
for model in get_models():
retrieval_str += match_card(input, model, "model")
# Search datasets
retrieval_str += "# Datasets\n\n"
for dataset in get_datasets():
retrieval_str += match_card(input, dataset, "dataset")
return gr.Markdown(retrieval_str, visible=True)
# Build demo
with gr.Blocks(title="SaprotHub", fill_width=True) as demo:
gr.Label("SaprotHub search", visible=True, show_label=False)
search_box = gr.Textbox(label="Search box", placeholder="Input keywords to search", interactive=True, scale=0, container=True)
# Display search results
search_hint = gr.Markdown("# Search results:", visible=True)
items = gr.Markdown(visible=False)
# Set events
search_box.change(show_card_info, inputs=[search_box], outputs=[items])
if __name__ == '__main__':
# Run the demo
demo.launch(server_name="0.0.0.0")