Spaces:
Running
on
Zero
Running
on
Zero
File size: 4,469 Bytes
2584386 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
import gradio as gr
from transformers import AutoModelForCausalLM, AutoProcessor, TextIteratorStreamer
from threading import Thread
import re
import time
from PIL import Image
import torch
import spaces
processor = AutoProcessor.from_pretrained("ucsahin/TraVisionLM-base", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("ucsahin/TraVisionLM-base", trust_remote_code=True)
model_od = AutoModelForCausalLM.from_pretrained("ucsahin/TraVisionLM-Object-Detection-v2", trust_remote_code=True)
model.to("cuda:0")
model_od.to("cuda:0")
@spaces.GPU
def bot_streaming(message, history, max_tokens, temperature, top_p, top_k, repetition_penalty):
# print(message)
if message.files:
image = message.files[-1].path
else:
# if there's no image uploaded for this turn, look for images in the past turns
# kept inside tuples, take the last one
for hist in history:
if type(hist[0])==tuple:
image = hist[0][-1].path
if image is None:
gr.Error("Lütfen önce bir resim yükleyin.")
prompt = f"{message.text}"
image = Image.open(image).convert("RGB")
inputs = processor(text=prompt, images=image, return_tensors="pt").to("cuda:0")
streamer = TextIteratorStreamer(processor, **{"skip_special_tokens": True})
generation_kwargs = dict(
inputs, streamer=streamer, max_new_tokens=max_tokens,
do_sample=True, temperature=temperature, top_p=top_p,
top_k=top_k, repetition_penalty=repetition_penalty
)
generated_text = ""
thread = Thread(target=model.generate, kwargs=generation_kwargs)
thread.start()
text_prompt = f"{message.text}\n"
buffer = ""
for new_text in streamer:
buffer += new_text
generated_text_without_prompt = buffer[len(text_prompt):]
time.sleep(0.04)
yield generated_text_without_prompt
gr.set_static_paths(paths=["static/images/"])
logo_path = "static/images/logo-color-v2.png"
PLACEHOLDER = f"""
<div style="display: flex; flex-direction: column; align-items: center; text-align: center; margin: 30px">
<img src="/file={logo_path}" style="width: 60%; height: auto;">
<h3>Resim yükleyin ve bir soru sorun</h3>
</div>
"""
# with gr.Blocks() as demo:
# with gr.Tab("Open-ended Questions (Soru-cevap)"):
with gr.Accordion("Generation parameters", open=False) as parameter_accordion:
max_tokens_item = gr.Slider(64, 1024, value=512, step=64, label="Max tokens")
temperature_item = gr.Slider(0.1, 2, value=0.6, step=0.1, label="Temperature")
top_p_item = gr.Slider(0, 1.0, value=0.9, step=0.05, label="Top_p")
top_k_item = gr.Slider(0, 100, value=50, label="Top_k")
repeat_penalty_item = gr.Slider(0, 2, value=1.2, label="Repeat penalty")
demo = gr.ChatInterface(
title="TraVisionLM - Turkish Visual Language Model",
description="",
fn=bot_streaming,
chatbot=gr.Chatbot(placeholder=PLACEHOLDER, scale=1),
# examples=[{"text": "", "files":[""]},{"text": "", "files":[""]}],
additional_inputs=[max_tokens_item, temperature_item, top_p_item, top_k_item, repeat_penalty_item],
additional_inputs_accordion=parameter_accordion,
stop_btn="Stop Generation",
multimodal=True
)
# with gr.Tab("Object Detection (Obje Tespiti)"):
# gr.Image("tiger.jpg")
# gr.Button("New Tiger")
# demo = gr.ChatInterface(fn=bot_streaming, title="TraVisionLM - Turkish Visual Language Model",
# # examples=[{"text": "", "files":[""]},{"text": "", "files":[""]}],
# description="",
# additional_inputs=[
# gr.Slider(64, 1024, value=512, step=64, label="Max tokens"),
# gr.Slider(0.1, 2, value=0.6, step=0.1, label="Temperature"),
# gr.Slider(0, 1.0, value=0.9, step=0.05, label="Top_p"),
# gr.Slider(0, 100, value=50, label="Top_k"),
# gr.Slider(0, 2, value=1.2, label="Repeat penalty"),
# ],
# additional_inputs_accordion_name="Text generation parameters",
# # additional_inputs_accordion=
# stop_btn="Stop Generation", multimodal=True)
demo.launch(allowed_paths="") |