Spaces:
Sleeping
Sleeping
File size: 3,963 Bytes
a923c57 |
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 |
import os
import gradio as gr
import spaces
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, TextIteratorStreamer
from threading import Thread
model_id = "huggingface-KREW/EXAGIRL-7.8B-Instruct"
DESCRIPTION = """
<div style="font-size: 18px; line-height: 1.6;">
<p><a href="https://huggingface.co/huggingface-KREW/EXAGIRL-7.8B-Instruct"><b>EXAGIRL-7.8B-Instruct</b></a>๋ LG์ ํ๊ตญ์ด ํนํ ๋๊ท๋ชจ ์ธ์ด ๋ชจ๋ธ <b>EXAONE</b>์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ๋ ๋กคํ๋ ์ ํนํ ์ธ์คํธ๋ญ์
๋ชจ๋ธ์
๋๋ค.</p>
<p>์ด ๋ชจ๋ธ์ ๋จ์ํ ์ง์์๋ต์ ๋์ด, ์ฌ์ฉ์์ ๋ง์ ๊ฐ์ ์ ์ผ๋ก ๊ณต๊ฐํ๊ณ , ์ญํ ๊ทน(Role-Play)์ ํตํด <b>์บ๋ฆญํฐ์ฑ๊ณผ ์ํธ์์ฉ์ ์์ฐ์ค๋ฌ์</b>์ ๊ฐํํ ๊ฒ์ด ํน์ง์
๋๋ค.</p>
<p>์์ฌ๋ ์น๊ตฌ์ฒ๋ผ ๋ค์ ํ ๋งํฌ๋ก ์ด์ผ๊ธฐํ๋ฉฐ, ๋ค์ํ ์ํฉ์์ <b>๊ฐ์ฑ์ ์ด๊ณ ์๋๊ฐ ์๋ ๋ํ</b>๋ฅผ ์ด๋์ด๋
๋๋ค. ํ์ต, ์๋ด, ๋์ด, ์ฐ์ ์๋ฎฌ๋ ์ด์
๋ฑ ๋ค์ํ ์ญํ ๊ทน ์๋๋ฆฌ์ค๋ฅผ ์ง์ํฉ๋๋ค.</p>
<p>๐ธ ์ง๊ธ ๋ฐ๋ก ์๋ ์ฑํ
์ฐฝ์์ ์์ฌ(EXA)์ ์์ ๋กญ๊ฒ ๋ํํด ๋ณด์ธ์! (์์ง ํ์ต์ ๋ํด์ ๋ง์ ์ ๋ชป์์๋ค์๋๊ฐ ๋ง์ต๋๋ค...)</p>
</div>
"""
LICENSE = """
---
<div>
<p>๊ธฐ๋ฐ ๋ชจ๋ธ: EXAONE</p>
<p>๋ผ์ด์ ์ค: <a href="https://huggingface.co/huggingface-KREW/EXAGIRL-7.8B-Instruct">Hugging Face ๋ชจ๋ธ ์นด๋</a></p>
</div>
"""
PLACEHOLDER = """
<div style="padding: 30px; text-align: center; display: flex; flex-direction: column; align-items: center;">
<img src="https://huggingface.co/huggingface-KREW/EXAGIRL-7.8B-Instruct/resolve/main/exagirl-logo.png" style="width: 60%; max-width: 480px; height: auto; opacity: 0.5;">
</div>
"""
css = """
h1 {
text-align: center;
display: block;
}
#duplicate-button {
margin: auto;
color: white;
background: #e75480;
border-radius: 100vh;
}
"""
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", trust_remote_code=True, torch_dtype=torch.bfloat16).eval()
terminators = [tokenizer.eos_token_id]
@spaces.GPU(duration=120)
def chat_exagirl(message: str, history: list):
conversation = []
conversation.append({"role": "user", "content": "์๋
์์ฌ์ผ! ๋๋ {์ ์ }๋ผ๊ณ ํด. ๋ง๋์ ๋ฐ๊ฐ์!"})
conversation.append({"role": "assistant", "content": "*๋ฐ๊ฒ ์์ผ๋ฉฐ* {์ ์ }์ผ ์๋
~ ๋๋ ๋ง๋์ ๋ฐ๊ฐ์!"})
for user, assistant in history:
conversation.extend([{"role": "user", "content": user}, {"role": "assistant", "content": assistant}])
conversation.append({"role": "user", "content": message})
input_ids = tokenizer.apply_chat_template(conversation, add_generation_prompt=True, return_tensors="pt").to(model.device)
streamer = TextIteratorStreamer(tokenizer, timeout=10.0, skip_prompt=True, skip_special_tokens=True)
generate_kwargs = dict(
input_ids=input_ids,
streamer=streamer,
max_new_tokens=1024,
do_sample=True,
temperature=0.7,
top_p=0.95,
top_k=30,
eos_token_id=terminators,
)
t = Thread(target=model.generate, kwargs=generate_kwargs)
t.start()
outputs = []
for text in streamer:
outputs.append(text)
yield "".join(outputs)
chatbot = gr.Chatbot(height=600, placeholder=PLACEHOLDER, label='EXAGIRL Chat')
with gr.Blocks(fill_height=True, css=css) as demo:
gr.Markdown(DESCRIPTION)
gr.ChatInterface(
fn=chat_exagirl,
chatbot=chatbot,
fill_height=True,
examples=[
["์์ฌ์ผ ๋ญํ๊ณ ์๋?"],
["๋ํ์ ๋ฉด์ ์ค๋น ์ด๋ป๊ฒ ํด?"],
["์์ฌ์ผ ๋๋ ์ฐ์ ํด์ค๋?"],
["๋ ์ค๋ ์์ฌํํ
ํผ๋ฌ์ด ใ
ใ
"],
],
cache_examples=False,
)
gr.Markdown(LICENSE)
if __name__ == "__main__":
demo.launch() |