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="")