Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import os | |
| import time | |
| import spaces | |
| import torch | |
| import re | |
| import gradio as gr | |
| from threading import Thread | |
| from transformers import TextIteratorStreamer, AutoTokenizer, AutoModelForCausalLM | |
| from PIL import Image | |
| import subprocess | |
| subprocess.run('pip install flash-attn --no-build-isolation', env={'FLASH_ATTENTION_SKIP_CUDA_BUILD': "TRUE"}, shell=True) | |
| model_id = "vikhyatk/moondream2" | |
| revision = "2024-04-02" | |
| tokenizer = AutoTokenizer.from_pretrained(model_id, revision=revision) | |
| moondream = AutoModelForCausalLM.from_pretrained( | |
| model_id, trust_remote_code=True, revision=revision, | |
| torch_dtype=torch.bfloat16, device_map={"": "cuda"}, | |
| attn_implementation="flash_attention_2" | |
| ) | |
| moondream.eval() | |
| def print_like_dislike(x: gr.LikeData): | |
| print(x.index, x.value, x.liked) | |
| def add_message(history, message): | |
| # Handle image and text input | |
| if message["files"]: | |
| for x in message["files"]: | |
| history.append(((x,), None)) | |
| if message["text"] is not None: | |
| history.append((message["text"], None)) | |
| return history, gr.MultimodalTextbox(value=None, interactive=False) | |
| def bot(history): | |
| # Reverse search through the last 5 messages for an image file | |
| last_five_messages = history[-5:] # Get the last five messages | |
| image_path = None | |
| last_message = None | |
| for message in reversed(last_five_messages): | |
| if isinstance(message[0], tuple) and isinstance(message[0][0], str): | |
| image_path = message[0][0] | |
| if isinstance(message[0],str): | |
| last_message = message[0] | |
| if image_path: | |
| try: | |
| image = Image.open(image_path) # Try to open the image using Pillow | |
| image_embeds = moondream.encode_image(image) | |
| print(image_embeds.shape) | |
| response = moondream.answer_question(image_embeds, last_message, tokenizer) | |
| except IOError: | |
| response = "Failed to open image. Please check the image path or file permissions." | |
| else: | |
| response = "Please provide an Image to chat." | |
| history[-1][1] = "" | |
| for character in response: | |
| history[-1][1] += character | |
| yield history | |
| with gr.Blocks(theme="Monochrome") as demo: | |
| gr.Markdown( | |
| """ | |
| # AskMoondream: Moondream 2 Demonstration Space | |
| Moondream2 is a 1.86B parameter model initialized with weights from SigLIP and Phi 1.5. | |
| Modularity AI presents this open source huggingface space for running fast experimental inferences on Moondream2. | |
| """ | |
| ) | |
| chatbot = gr.Chatbot( | |
| [], | |
| elem_id="chatbot", | |
| bubble_full_width=False | |
| ) | |
| chat_input = gr.MultimodalTextbox(interactive=True, file_types=["image"], placeholder="Enter message or upload file...", show_label=False) | |
| chat_msg = chat_input.submit(add_message, inputs=[chatbot, chat_input], outputs=[chatbot, chat_input]) | |
| bot_msg = chat_msg.then(bot, inputs=chatbot, outputs=chatbot, api_name="bot_response") | |
| bot_msg.then(lambda: gr.MultimodalTextbox(interactive=True), None, outputs=[chat_input]) | |
| chatbot.like(print_like_dislike, None, None) | |
| demo.queue() | |
| demo.launch() | |