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() | |