import spaces import subprocess import shutil import gradio as gr from PIL import Image from huggingface_hub import snapshot_download import json import os # Specify the repository ID repo_id = "GAIR/Anole-7b-v0.1" if not os.path.exists("./Anole-7b-v0.1"): os.system("git lfs install") os.system("git clone https://huggingface.co/GAIR/Anole-7b-v0.1") subprocess.run(["/bin/bash", "install.sh"], capture_output=True, text=True) result = subprocess.run(["/bin/bash", "install.sh"], capture_output=True, text=True) @spaces.GPU(duration=90) def text_to_image(instruction): result = subprocess.run(["python", "text2image.py", "-i", instruction, "-b", "1"], capture_output=True, text=True) if result.returncode == 0: return gr.update(value="Image Generated. Check the display below.", visible=True), "outputs/text2image/1.png" else: return "Error: " + result.stderr, None @spaces.GPU(duration=150) def text_to_interleaved(instruction): result = subprocess.run(["python", "interleaved_generation.py", "-i", instruction], capture_output=True, text=True) if result.returncode == 0: outputs = [None for i in range(7)] box_index = 0 # Read the segments.jsonl file with open('./segments.jsonl', 'r') as file: for line in file: line_dict = json.loads(line.strip()) if line_dict['type'] == 'text': if box_index % 2 != 0: box_index += 1 outputs[box_index] = line_dict['content'] elif line_dict['type'] == 'image': if box_index % 2 == 0: box_index += 1 outputs[box_index] = Image.open(line_dict['content']) box_index += 1 return outputs[0], outputs[1], outputs[2], outputs[3], outputs[4], outputs[5], outputs[6] else: return ("Error: " + result.stderr, ) * 7 # Use Blocks to organize the interfaces side by side with gr.Blocks() as demo: # Create a row to place columns side by side with gr.Row(): # First column for Text-to-Image Interface with gr.Column(): gr.Interface( fn=text_to_image, # Function to generate cat images inputs=gr.Textbox(label="Enter Instruction for Image Generation"), # Input textbox for user instructions outputs=[gr.Text(label="Status"), gr.Image(label="Generated Image")], # Outputs: status message and generated image title="Anole: Text-to-Image", # Title of the interface description="Generate images based on text instructions. Check https://github.com/GAIR-NLP/anole for more information. Model can be downloaded at: https://huggingface.co/GAIR/Anole-7b-v0.1." ) # Second column for Text-to-Interleaved Image-Text Interface with gr.Column(): gr.Interface( fn=text_to_interleaved, inputs=gr.Textbox(label="Enter Instruction for Interleaved Content"), outputs=[gr.Text(label="Text Output 1"), gr.Image(label="Image Output 1"), gr.Text(label="Text Output 2"), gr.Image(label="Image Output 2"), gr.Text(label="Text Output 3"), gr.Image(label="Image Output 3"), gr.Text(label="Text Output 4")], title="Anole: Text-to-Interleaved", # Title of the interface description="Generate interleaved text and images based on text instructions. Check https://github.com/GAIR-NLP/anole for more information. Model can be downloaded at: https://huggingface.co/GAIR/Anole-7b-v0.1." ) # Launch the entire Blocks interface demo.launch()