Spaces:
Paused
Paused
| import gradio as gr | |
| import os, requests | |
| import torch, torchvision, einops | |
| import spaces | |
| import subprocess | |
| from transformers import AutoModelForCausalLM, AutoModel, AutoModelForVision2Seq, PaliGemmaForConditionalGeneration, LlavaForConditionalGeneration, LlavaNextForConditionalGeneration | |
| from huggingface_hub import login | |
| # Install required package | |
| subprocess.run( | |
| "pip install flash-attn --no-build-isolation", | |
| env={"FLASH_ATTENTION_SKIP_CUDA_BUILD": "TRUE"}, | |
| shell=True, | |
| ) | |
| HF_TOKEN = os.getenv("HF_TOKEN") | |
| login(token=HF_TOKEN, add_to_git_credential=True) | |
| # Cache for storing loaded models and their summaries | |
| model_cache = {} | |
| # Function to get the model summary | |
| def get_model_summary(model_name): | |
| if model_name in model_cache: | |
| return model_cache[model_name], "" | |
| try: | |
| # Fetch the config.json file | |
| config_url = f"https://huggingface.co/{model_name}/raw/main/config.json" | |
| headers = {"Authorization": f"Bearer {HF_TOKEN}"} | |
| response = requests.get(config_url, headers=headers) | |
| response.raise_for_status() | |
| config = response.json() | |
| architecture = config["architectures"][0] | |
| device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
| # Select the correct model class based on the architecture | |
| if architecture == "LlavaNextForConditionalGeneration": | |
| from transformers import LlavaNextForConditionalGeneration | |
| model = LlavaNextForConditionalGeneration.from_pretrained(model_name, trust_remote_code=True).to(device) | |
| elif architecture == "LlavaForConditionalGeneration": | |
| from transformers import LlavaForConditionalGeneration | |
| model = LlavaForConditionalGeneration.from_pretrained(model_name, trust_remote_code=True).to(device) | |
| elif architecture == "PaliGemmaForConditionalGeneration": | |
| from transformers import PaliGemmaForConditionalGeneration | |
| model = PaliGemmaForConditionalGeneration.from_pretrained(model_name, trust_remote_code=True).to(device) | |
| elif architecture == "Idefics2ForConditionalGeneration": | |
| from transformers import Idefics2ForConditionalGeneration | |
| model = Idefics2ForConditionalGeneration.from_pretrained(model_name, trust_remote_code=True).to(device) | |
| elif architecture == "MiniCPMV": | |
| from transformers import MiniCPMV | |
| model = MiniCPMV.from_pretrained(model_name, trust_remote_code=True).to(device) | |
| else: | |
| model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True).to(device) | |
| model_summary = str(model) | |
| model_cache[model_name] = model_summary | |
| return model_summary, "" | |
| except Exception as e: | |
| return "", str(e) | |
| # Create the Gradio Blocks interface | |
| with gr.Blocks() as demo: | |
| with gr.Row(): | |
| with gr.Column(): | |
| textbox = gr.Textbox(label="Model Name", placeholder="Enter the model name here OR select example below...", lines=1) | |
| gr.Markdown("### Vision Models") | |
| vision_examples = gr.Examples( | |
| examples=[ | |
| ["llava-hf/llava-v1.6-mistral-7b-hf"], | |
| ["xtuner/llava-phi-3-mini-hf"], | |
| ["xtuner/llava-llama-3-8b-v1_1-transformers"], | |
| ["vikhyatk/moondream2"], | |
| ["openbmb/MiniCPM-Llama3-V-2_5"], | |
| ["microsoft/Phi-3-vision-128k-instruct"], | |
| ["google/paligemma-3b-mix-224"], | |
| ["HuggingFaceM4/idefics2-8b-chatty"], | |
| ["microsoft/llava-med-v1.5-mistral-7b"] | |
| ], | |
| inputs=textbox | |
| ) | |
| gr.Markdown("### Other Models") | |
| other_examples = gr.Examples( | |
| examples=[ | |
| ["google/gemma-7b"], | |
| ["microsoft/Phi-3-mini-4k-instruct"], | |
| ["meta-llama/Meta-Llama-3-8B"], | |
| ["mistralai/Mistral-7B-Instruct-v0.3"] | |
| ], | |
| inputs=textbox | |
| ) | |
| submit_button = gr.Button("Submit") | |
| with gr.Column(): | |
| output = gr.Textbox(label="Model Architecture", lines=20, placeholder="Model architecture will appear here...", show_copy_button=True) | |
| error_output = gr.Textbox(label="Error", lines=10, placeholder="Exceptions will appear here...", show_copy_button=True) | |
| def handle_click(model_name): | |
| model_summary, error_message = get_model_summary(model_name) | |
| return model_summary, error_message | |
| submit_button.click(fn=handle_click, inputs=textbox, outputs=[output, error_output]) | |
| # Launch the interface | |
| demo.launch() | |