File size: 4,871 Bytes
f6b7ba0
 
 
 
 
 
 
 
 
52c9e29
f6b7ba0
24f1fbc
f6b7ba0
 
24f1fbc
f6b7ba0
 
 
4dd73d1
c635389
 
24f1fbc
 
f6b7ba0
 
 
 
3139a51
f6b7ba0
 
 
4dd73d1
24f1fbc
f6b7ba0
 
 
 
20ad0b8
f6b7ba0
 
 
 
 
24f1fbc
 
f6b7ba0
43bafef
 
f6b7ba0
0ba5d2e
24f1fbc
 
f6b7ba0
 
 
 
 
 
 
a5f9027
a9a69bd
 
f6b7ba0
 
 
d79744b
307ef98
d79744b
 
 
 
72db2fd
307ef98
72db2fd
 
307ef98
d79744b
 
f6b7ba0
 
 
 
 
 
 
 
d79744b
 
f6b7ba0
 
4dd73d1
c0e37ed
 
 
 
 
 
a9a69bd
 
c0e37ed
380da0e
c0e37ed
 
88e0aa3
c0e37ed
4dd73d1
f6b7ba0
 
 
 
 
 
a337221
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
107
108
109
110
111
112
113
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-DPO", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("ucsahin/TraVisionLM-base", trust_remote_code=True)
model_dpo = AutoModelForCausalLM.from_pretrained("ucsahin/TraVisionLM-DPO", trust_remote_code=True)

model.to("cuda:0")
model_dpo.to("cuda:0")

@spaces.GPU
def bot_streaming(message, history, max_tokens, temperature, top_p, top_k, repetition_penalty):
    print(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
        for hist in history:
            if type(hist[0])==tuple:
                image = hist[0][0]

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

    generation_kwargs = dict(
        inputs, max_new_tokens=max_tokens, 
        do_sample=True, temperature=temperature, top_p=top_p, 
        top_k=top_k, repetition_penalty=repetition_penalty
    )
    generated_text = ""

    model_outputs = model.generate(**generation_kwargs)
    dpo_outputs = model_dpo.generate(**generation_kwargs)

    ref_text = processor.batch_decode(model_outputs, skip_special_tokens=True)[0]
    dpo_text = processor.batch_decode(dpo_outputs, skip_special_tokens=True)[0]
    
    generated_text = f"<h3>Base model cevabı:</h3>\n{ref_text[len(prompt)+1:]}\n<h3>DPO model cevabı:</h3>\n{dpo_text[len(prompt)+1:]}\n"

    return generated_text


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: 40%; height: auto; opacity: 80%">
    <h3>Resim yükleyin ve bir soru sorun!</h3>
    <p>Örnek resim ve soruları kullanabilirsiniz.</p>
</div>
"""

DESCRIPTION = f"""

### 875M parametreli küçük ama çok hızlı bir Türkçe Görsel Dil Modeli 🇹🇷🌟⚡️⚡️🇹🇷

Yüklediğiniz resimleri açıklatabilir ve onlarla ilgili ucu açık sorular sorabilirsiniz 🖼️🤖

**Bu demoda sorularınıza iki TraVisionLM modeli tarafından cevap verilmektedir:** ♊♊

- **Base model:** [TraVisionLM-base](https://huggingface.co/ucsahin/TraVisionLM-base) 🌛
- **DPO model:** [TraVisionLM-DPO](https://huggingface.co/ucsahin/TraVisionLM-DPO) 🌜

"""

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 - Demo",
    description=DESCRIPTION,
    fn=bot_streaming,
    chatbot=gr.Chatbot(placeholder=PLACEHOLDER, scale=1),   
    examples=[
        [{"text": "Resimde kaç kişi var?", "files":["./family.jpg"]}],
        [{"text": "Açıkla", "files":["./anitkabir2.jpg"]}],
        [{"text": "Kısaca açıkla", "files":["./at.jpg"]}],
        [{"text": "Görüntüdeki otobüsün görünümü nasıldır?", "files":["./bus.jpg"]}],
        [{"text": "Görüntüde hava durumu nasıl?", "files":["./plane.jpg"]}],
        [{"text": "Resimdeki ilginç unsurlar nelerdir?", "files":["./dog.jpg"]}],
        [{"text": "Tren istasyonu kalabalık mı yoksa boş mu?", "files":["./train.jpg"]}],
        [{"text": "Resimdeki araba hangi renk?", "files":["./car.jpg"]}],
        [{"text": "Görüntünün odak noktası nedir?", "files":["./mandog.jpg"]}],
        [{"text": "Resimde neresi görünüyor?", "files":["./galata.jpg"]}],
        [{"text": "Resim nasıl bir tarza sahip?", "files":["./suluboya.jpg"]}],
        [{"text": "Detaylı açıkla", "files":["./tren.jpg"]}],
        [{"text": "Resimde nasıl bir etkinlik var?", "files":["./paris1.jpg"]}],
        [{"text": "Görsel nasıl bir ortamı gösteriyor?", "files":["./lamba.jpg"]}],
    ], 
    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
)

demo.launch(debug=True, max_file_size="5mb")