import gradio as gr from huggingface_hub import ModelCard from config import Config def selected_lora_from_gallery(evt: gr.SelectData): return ( gr.update( value=evt.index ) ) def update_selected_lora(custom_lora): link = custom_lora.split("/") if len(link) == 2: model_card = ModelCard.load(custom_lora) trigger_word = model_card.data.get("instance_prompt", "") image_url = f"""https://huggingface.co/{custom_lora}/resolve/main/{model_card.data.get("widget", [{}])[0].get("output", {}).get("url", None)}""" custom_lora_info_css = """ """ custom_lora_info_html = f"""
Custom LoRA: {custom_lora}
LoRA preview

{link[1].replace("-", " ").replace("_", " ")}

{"Using: "+trigger_word+" as the trigger word" if trigger_word else "No trigger word found. If there's a trigger word, include it in your prompt"}
""" custom_lora_info_html = f"{custom_lora_info_css}{custom_lora_info_html}" return ( gr.update( # selected_lora value=custom_lora, ), gr.update( # custom_lora_info value=custom_lora_info_html, visible=True ) ) else: return ( gr.update( # selected_lora value=custom_lora, ), gr.update( # custom_lora_info value=custom_lora_info_html if len(link) == 0 else "", visible=False ) ) def update_lora_sliders(enabled_loras): sliders = [] remove_buttons = [] for lora in enabled_loras: sliders.append( gr.update( label=lora.get("repo_id", ""), info=f"Trigger Word: {lora.get('trigger_word', '')}", visible=True, interactive=True ) ) remove_buttons.append( gr.update( visible=True, interactive=True ) ) if len(sliders) < 6: for i in range(len(sliders), 6): sliders.append( gr.update( visible=False ) ) remove_buttons.append( gr.update( visible=False ) ) return *sliders, *remove_buttons def remove_from_enabled_loras(enabled_loras, index): enabled_loras.pop(index) return ( gr.update( value=enabled_loras ) ) def update_custom_embedding(custom_embedding): link = custom_embedding.split("/") if len(link) == 2: model_card = ModelCard.load(custom_embedding) trigger_word = model_card.data.get("instance_prompt", "") image_url = f"""https://huggingface.co/{custom_embedding}/resolve/main/{model_card.data.get("widget", [{}])[0].get("output", {}).get("url", None)}""" custom_embedding_info_css = """ """ custom_embedding_info_html = f"""
Custom Embed Model: {custom_embedding}
Embedding model preview

{link[1].replace("-", " ").replace("_", " ")}

{"Using: "+trigger_word+" as the trigger word" if trigger_word else "No trigger word found. If there's a trigger word, include it in your prompt"}
""" custom_embedding_info_html = f"{custom_embedding_info_css}{custom_embedding_info_html}" return gr.update( # custom_embedding_info value=custom_embedding_info_html, visible=True ) def add_to_embeddings(custom_embedding, embeddings): link = custom_embedding.split("/") if len(link) == 2: model_card = ModelCard.load(custom_embedding) trigger_word = model_card.data.get("instance_prompt", "") image_url = f"""https://huggingface.co/{custom_embedding}/resolve/main/{model_card.data.get("widget", [{}])[0].get("output", {}).get("url", None)}""" embeddings.append({ "repo_id": custom_embedding, "trigger_word": trigger_word }) return ( gr.update( # custom_embedding value="" ), gr.update( # custom_embedding_info value="", visible=False ), gr.update( # embeddings value=embeddings ) ) def remove_from_embeddings(embeddings, index): embeddings.pop(index) return ( gr.update( value=embeddings ) )