--- license: apache-2.0 datasets: - HuggingFaceM4/WebSight --- The model is [CogAgent-chat-18B](https://huggingface.co/THUDM/CogAgent) finetuned (LoRA with rank 8 added to the language decoder) on 160K WebSight examples. The model is in the format of [SAT (SwissArmyTransformer)](https://github.com/THUDM/SwissArmyTransformer/). Please refer to [our paper](https://arxiv.org/abs/2403.03163) and [our codebase](https://github.com/NoviScl/Design2Code/tree/main/CogVLM) to run inference. Use of the model must comply with [the original model license](https://github.com/THUDM/CogVLM/blob/main/MODEL_LICENSE) and the original data license (CC-BY-4.0). # Example Usage (based on SAT) ```python import sys sys.path.insert(1, '/path/to/CogVLM') from sat.model import AutoModel import argparse from utils.models import CogAgentModel, CogVLMModel, FineTuneTestCogAgentModel import torch from sat.model.mixins import CachedAutoregressiveMixin from sat.quantization.kernels import quantize from sat.model import AutoModel from utils.utils import chat, llama2_tokenizer, llama2_text_processor_inference, get_image_processor from utils.models import CogAgentModel, CogVLMModel from tqdm import tqdm import os import argparse parser = argparse.ArgumentParser() parser.add_argument('--temperature', type=float, default=0.5) parser.add_argument('--repetition_penalty', type=float, default=1.1) args = parser.parse_args() args.bf16 = True args.stream_chat = False args.version = "chat" # You can download the testset from https://huggingface.co/datasets/SALT-NLP/Design2Code test_data_dir = "/path/to/Design2Code" predictions_dir = "/path/to/design2code_18b_v0_predictions" if not os.path.exists(predictions_dir): try: os.makedirs(predictions_dir) except: pass filename_list = [filename for filename in os.listdir(test_data_dir) if filename.endswith(".png")] world_size = 1 model, model_args = FineTuneTestCogAgentModel.from_pretrained( f"/path/to/design2code-18b-v0", args=argparse.Namespace( deepspeed=None, local_rank=0, rank=0, world_size=1, model_parallel_size=1, mode='inference', skip_init=True, use_gpu_initialization=True, device='cuda', bf16=True, fp16=None), overwrite_args={'model_parallel_size': world_size} if world_size != 1 else {}) model = model.eval() model.add_mixin('auto-regressive', CachedAutoregressiveMixin()) language_processor_version = model_args.text_processor_version if 'text_processor_version' in model_args else args.version print("[Language processor version]:", language_processor_version) tokenizer = llama2_tokenizer("lmsys/vicuna-7b-v1.5", signal_type=language_processor_version) image_processor = get_image_processor(model_args.eva_args["image_size"][0]) cross_image_processor = get_image_processor(model_args.cross_image_pix) if "cross_image_pix" in model_args else None text_processor_infer = llama2_text_processor_inference(tokenizer, 2048, model.image_length) def get_html(image_path): with torch.no_grad(): history = None cache_image = None # We use an empty string as the query query = '' response, history, cache_image = chat( image_path, model, text_processor_infer, image_processor, query, history=history, cross_img_processor=cross_image_processor, image=cache_image, max_length=4096, top_p=1.0, temperature=args.temperature, top_k=1, invalid_slices=text_processor_infer.invalid_slices, repetition_penalty=args.repetition_penalty, args=args ) return response for filename in tqdm(filename_list): image_path = os.path.join(test_data_dir, filename) generated_text = get_html(image_path) with open(os.path.join(predictions_dir, filename.replace(".png", ".html")), "w", encoding='utf-8') as f: f.write(generated_text) ```