File size: 5,613 Bytes
9798bb4
 
 
 
 
 
 
ec6c533
 
04133ab
60d216a
82af1ed
bed0012
 
879c5e2
 
 
ec6c533
 
a948a8c
60d216a
82af1ed
bed0012
 
879c5e2
bed0012
 
ec6c533
 
a948a8c
 
82af1ed
 
 
bed0012
 
 
 
 
60d216a
ec6c533
 
9798bb4
fcff386
 
779cc8b
fcff386
 
 
 
779cc8b
fcff386
 
 
99ae752
779cc8b
99ae752
fcff386
9798bb4
9e1601a
5f6ad40
9e1601a
 
5f6ad40
 
9e1601a
8c8eb60
cb5d6c1
9e1601a
 
e635d75
3c0088a
 
 
8c8eb60
9464765
 
 
 
 
 
 
 
fcff386
3c0088a
 
 
9464765
 
 
 
 
 
7b9f778
779cc8b
 
 
fefdeba
9e1601a
 
 
579269b
9798bb4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
68631fc
9798bb4
 
 
c3289c1
9798bb4
 
 
 
 
 
 
 
 
 
717b983
 
9798bb4
 
 
9e1601a
9798bb4
8c8eb60
a948a8c
 
8c8eb60
a948a8c
 
9798bb4
 
 
 
e635d75
eb97586
e635d75
d091393
9798bb4
e635d75
9798bb4
 
 
 
 
 
 
 
 
 
 
 
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
from huggingface_hub import InferenceClient
import gradio as gr
import random
from html2image import Html2Image
hti = Html2Image()
client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")

css="""
.user_chat{
    background: $user_c;
    border-radius: 10px 10px 0px 10px;
    padding: 10px;
    max-width: 100%;
    text-wrap: pretty;
    margin-left:10px;
    margin-bottom: 10px;

}
.bot_chat{
    background: $bot_c;
    border-radius: 10px 10px 10px 0px;
    padding: 10px;
    max-width: 100%;
    text-wrap: pretty;
    margin-right:10px;
    margin-bottom: 10px;
    
}
.chat_card{
    background: $background_c;
    color: $font_c;
    border-radius: 15px;
    border-width: thin;
    padding: 15px;
    font-family: system-ui;
    display: flex;
    flex-direction: column;
    justify-content: center;
    flex-wrap: wrap;
    max-width:100%;
}
"""

html_user="""
<div class="user_chat">
$chat
</div>
"""
html_bot="""
<div class="bot_chat">
$chat
</div>
"""
html_card="""
<pre class="chat_card">
$body
</pre>
"""

def make_filename(inp):
    if len(inp)<=30:
        first_name=inp
    else:
        first_name=inp[:30]
    first_name=first_name.replace(" ","_")
    print(first_name)
    last_name=random.randint(1,99999999999999)
    filename=first_name+str(last_name)
    return filename
    
def get_screenshot(chat,block=[],css_in=css,w=500,h=800,user_c="#367bb9",bot_c="#1c3c9b",background_c="#253251",font_c="#ffffff"):
    chat_len=len(chat)
    print(chat_len)
    block_box=[]
    if user_c:
        #user_c=user_c.strip('""').strip("''")
        css_in=css_in.replace("$user_c",user_c)
    if bot_c:
        css_in=css_in.replace("$bot_c",bot_c)
    if background_c:
        css_in=css_in.replace("$background_c",background_c)
    if font_c:
        css_in=css_in.replace("$font_c",font_c)
    html_body=""
    if block:
        for i in range(chat_len):
            if i+1 in block:
                try:
                    block_box.append(chat[i])
                except Exception as e:
                    print(e)
        if block_box:
            chat=block_box
    for user,bot in chat:
        html_body += html_user.replace("$chat",user)
        html_body += html_bot.replace("$chat",bot)
    html=html_card.replace("$body",html_body)
    hti.size = (w, h)
    filename=f'{make_filename(chat[0][0])}.png'
    print(filename)
    hti.screenshot(html_str=html, css_str=css_in, save_as=filename)
    return filename


def format_prompt(message, history):
    prompt = "<s>"
    if history:
        for user_prompt, bot_response in history:
            prompt += f"[INST] {user_prompt} [/INST]"
            prompt += f" {bot_response}</s> "
    prompt += f"[INST] {message} [/INST]"
    return prompt


def chat_inf(system_prompt,prompt,history):
    if not history:
        history = []
        hist_len=0
    if history:
        hist_len=len(history)
        print(hist_len)
    seed = random.randint(1,1111111111111111)
    generate_kwargs = dict(
        temperature=0.9,
        max_new_tokens=10480,
        top_p=0.95,
        repetition_penalty=1.0,
        do_sample=True,
        seed=seed,
    )
        
    formatted_prompt = format_prompt(f"{system_prompt}, {prompt}", history)
    stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
    output = ""
        
    for response in stream:
        output += response.token.text
        yield [(prompt,output)]
    history.append((prompt,output))
    yield history
        
chat=[('user','bot'),('user','bot')]

#get_screenshot(chat=[('user','bot'),('user','bot')])
with gr.Blocks(css=css) as app:
    with gr.Row():
        with gr.Column(scale=3):
            with gr.Group():
                chat_b = gr.Chatbot(label="Chatbot Mixtral-8x7b-instruct-v0.1")
                with gr.Row():
                    with gr.Column(scale=3):
                        inp = gr.Textbox(label="Prompt")
                        sys_inp = gr.Textbox(label="System Prompt (optional)")
                        btn = gr.Button("Chat")
                        
                    with gr.Column(scale=1):
                        with gr.Group():
                            stop_btn=gr.Button("Stop")
                            clear_btn=gr.Button("Clear")
            css_box=gr.Textbox(label="CSS",lines=50,value=css)
            
        with gr.Column(scale=1):
            with gr.Group():
                with gr.Row():
                    im_height=gr.Number(label="Height",value=1000)
                    im_width=gr.Number(label="Width",value=500)
                with gr.Row():
                    user_c=gr.ColorPicker(label="User Color",value="#367bb9")
                    bot_c=gr.ColorPicker(label="Bot Color",value="#1c3c9b")
                with gr.Row():
                    background_c=gr.ColorPicker(label="Background Color",value="#253251")
                    font_c=gr.ColorPicker(label="Font Color",value="#ffffff")                    
                chatblock=gr.Dropdown(label="Chatblocks",choices=[c for c in range(1,40)],multiselect=True)
                
                im_btn=gr.Button("Screenshot")
                img=gr.Image(type='filepath')
    #html_view=gr.HTML()
    btn.click(chat_inf,[sys_inp,inp,chat_b],chat_b)
    im_btn.click(get_screenshot,[chat_b,chatblock,css_box,im_width,im_height,user_c,bot_c,background_c,font_c],[img])
    #im_btn.click(get_screenshot,[chat_b,im_height,im_width,chatblock,theme,wait_time],img)
    #app.load(get_screenshot,inp,img)
app.queue(default_concurrency_limit=10).launch()