demo_test / app.py
Gary3410's picture
Upload app.py
aaafdf6
import sys
import time
import warnings
from pathlib import Path
# 配置hugface环境
from huggingface_hub import hf_hub_download
import gradio as gr
import os
import glob
import json
# os.environ['CUDA_LAUNCH_BLOCKING'] = '1'
# torch.set_float32_matmul_precision("high")
def instruct_generate(
img_path: str = " ",
prompt: str = "What food do lamas eat?",
input: str = "",
max_new_tokens: int = 1024,
top_k: int = 200,
temperature: float = 0.8,
) -> None:
"""Generates a response based on a given instruction and an optional input.
This script will only work with checkpoints from the instruction-tuned LLaMA-Adapter model.
See `finetune_adapter.py`.
Args:
prompt: The prompt/instruction (Alpaca style).
adapter_path: Path to the checkpoint with trained adapter weights, which are the output of
`finetune_adapter.py`.
input: Optional input (Alpaca style).
pretrained_path: The path to the checkpoint with pretrained LLaMA weights.
tokenizer_path: The tokenizer path to load.
quantize: Whether to quantize the model and using which method:
``"llm.int8"``: LLM.int8() mode,
``"gptq.int4"``: GPTQ 4-bit mode.
max_new_tokens: The number of generation steps to take.
top_k: The number of top most probable tokens to consider in the sampling process.
temperature: A value controlling the randomness of the sampling process. Higher values result in more random
"""
# scene_name = os.path.basename(img_path).split(".")[0]
if input in input_value_2_real.keys():
input = input_value_2_real[input]
if "..." in input:
input = input.replace("...", "")
output = [prompt, input, max_new_tokens, top_k, temperature]
print(img_path)
return output
# 配置具体参数
example_path = "example.json"
# 1024如果不够, 调整为512
max_seq_len = 1024
max_batch_size = 1
with open(example_path, 'r') as f:
content = f.read()
example_dict = json.loads(content)
input_value_2_real = {}
for scene_id, scene_dict in example_dict.items():
input_value_2_real[scene_dict["input_display"]] = scene_dict["input"]
examples_img_list = glob.glob("caption_demo/*.png")
def create_instruct_demo():
with gr.Blocks() as instruct_demo:
with gr.Row():
with gr.Column():
scene_img = gr.Image(label='Scene', type='filepath', shape=(1024, 320), height=320, width=1024, interactive=False)
object_list = gr.Textbox(
lines=5, label="Object List", placeholder="Please click one from the examples below", interactive=False)
instruction = gr.Textbox(
lines=2, label="Instruction", placeholder="Please input the instruction. E.g.Please turn on the lamp")
max_len = gr.Slider(minimum=256, maximum=1024,
value=1024, label="Max length")
with gr.Accordion(label='Advanced options', open=False):
temp = gr.Slider(minimum=0, maximum=1,
value=0.8, label="Temperature")
top_k = gr.Slider(minimum=100, maximum=300,
value=200, label="Top k")
run_botton = gr.Button("Run")
with gr.Column():
outputs = gr.Textbox(lines=20, label="Output")
inputs = [scene_img, instruction, object_list, max_len, temp, top_k]
# inputs = [scene_img, instruction, object_list]
# 接下来设定具体的example格式
examples_img_list = glob.glob("caption_demo/*.png")
examples = []
for example_img_one in examples_img_list:
scene_name = os.path.basename(example_img_one).split(".")[0]
example_object_list = example_dict[scene_name]["input"]
example_instruction = example_dict[scene_name]["instruction"]
example_one = [example_img_one, example_instruction, example_object_list]
examples.append(example_one)
gr.Examples(
examples=examples,
inputs=inputs,
outputs=outputs,
fn=instruct_generate,
cache_examples=os.getenv('SYSTEM') == 'spaces'
)
# inputs = inputs + [max_len, temp, top_k]
run_botton.click(fn=instruct_generate, inputs=inputs, outputs=outputs)
return instruct_demo
# Please refer to our [arXiv paper](https://arxiv.org/abs/2303.16199) and [github](https://github.com/ZrrSkywalker/LLaMA-Adapter) for more details.
description = """
# TaPA
The official demo for **Embodied Task Planning with Large Language Models**.
"""
with gr.Blocks(css='style.css') as demo:
gr.Markdown(description)
with gr.TabItem("Instruction-Following"):
create_instruct_demo()
demo.queue(api_open=True, concurrency_count=1).launch()