|
|
import gradio as gr |
|
|
import torch |
|
|
import transformers |
|
|
import os |
|
|
|
|
|
|
|
|
|
|
|
MODEL_ID = "Qwen/Qwen2.5-Coder-7B-Instruct" |
|
|
|
|
|
|
|
|
print("๋ชจ๋ธ์ ๋ก๋ํ๋ ์ค์
๋๋ค... ์ด๊ธฐ ์คํ ์ ์๊ฐ์ด ๋ค์ ๊ฑธ๋ฆด ์ ์์ต๋๋ค.") |
|
|
try: |
|
|
|
|
|
model = transformers.AutoModelForCausalLM.from_pretrained( |
|
|
MODEL_ID, |
|
|
torch_dtype=torch.bfloat16, |
|
|
device_map="auto", |
|
|
load_in_4bit=True, |
|
|
) |
|
|
tokenizer = transformers.AutoTokenizer.from_pretrained(MODEL_ID) |
|
|
|
|
|
|
|
|
text_generator = transformers.pipeline( |
|
|
"text-generation", |
|
|
model=model, |
|
|
tokenizer=tokenizer, |
|
|
) |
|
|
print("โ
๋ชจ๋ธ ๋ก๋ฉ ์๋ฃ!") |
|
|
except Exception as e: |
|
|
print(f"โ ๋ชจ๋ธ ๋ก๋ฉ ์คํจ: {e}") |
|
|
|
|
|
def text_generator(*args, **kwargs): |
|
|
yield "๋ชจ๋ธ์ ๋ก๋ํ๋ ๋ฐ ์คํจํ์ต๋๋ค. Space์ ํ๋์จ์ด ์ค์ ์ ํ์ธํ๊ฑฐ๋ ๋ชจ๋ธ ์ด๋ฆ์ด ์ฌ๋ฐ๋ฅธ์ง ํ์ธํด์ฃผ์ธ์." |
|
|
|
|
|
|
|
|
def respond( |
|
|
message, |
|
|
history: list[tuple[str, str]], |
|
|
system_message, |
|
|
max_tokens, |
|
|
temperature, |
|
|
top_p, |
|
|
): |
|
|
""" |
|
|
์ฌ์ฉ์์ ๋ฉ์์ง์ ๋ํ ๋ต๋ณ์ ์์ฑํ๋ ํจ์ |
|
|
""" |
|
|
|
|
|
messages = [{"role": "system", "content": system_message}] |
|
|
|
|
|
|
|
|
for user_msg, bot_msg in history: |
|
|
messages.append({"role": "user", "content": user_msg}) |
|
|
messages.append({"role": "assistant", "content": bot_msg}) |
|
|
|
|
|
messages.append({"role": "user", "content": message}) |
|
|
|
|
|
|
|
|
prompt = tokenizer.apply_chat_template( |
|
|
messages, |
|
|
tokenize=False, |
|
|
add_generation_prompt=True |
|
|
) |
|
|
|
|
|
|
|
|
response = "" |
|
|
generation_args = { |
|
|
"max_new_tokens": max_tokens, |
|
|
"temperature": temperature, |
|
|
"top_p": top_p, |
|
|
"do_sample": True, |
|
|
"stream": True, |
|
|
} |
|
|
|
|
|
for chunk in text_generator(prompt, **generation_args): |
|
|
|
|
|
token = chunk[0]['generated_text'][len(prompt):] |
|
|
response = token |
|
|
yield response |
|
|
|
|
|
|
|
|
""" |
|
|
Gradio ChatInterface๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ด UI๋ฅผ ๋ง๋ญ๋๋ค. |
|
|
""" |
|
|
chatbot = gr.ChatInterface( |
|
|
respond, |
|
|
type="messages", |
|
|
additional_inputs_accordion="โ๏ธ ๋งค๊ฐ๋ณ์ ์ค์ ", |
|
|
additional_inputs=[ |
|
|
gr.Textbox( |
|
|
value="You are Qwen2.5-Coder, created by Alibaba Cloud. You are a helpful assistant specialized in coding and programming.", |
|
|
label="System message" |
|
|
), |
|
|
gr.Slider( |
|
|
minimum=1, |
|
|
maximum=4096, |
|
|
value=1024, |
|
|
step=1, |
|
|
label="Max new tokens" |
|
|
), |
|
|
gr.Slider( |
|
|
minimum=0.1, |
|
|
maximum=4.0, |
|
|
value=0.7, |
|
|
step=0.1, |
|
|
label="Temperature" |
|
|
), |
|
|
gr.Slider( |
|
|
minimum=0.1, |
|
|
maximum=1.0, |
|
|
value=0.95, |
|
|
step=0.05, |
|
|
label="Top-p (nucleus sampling)", |
|
|
), |
|
|
], |
|
|
examples=[ |
|
|
["PyTorch๋ก ๊ฐ๋จํ CNN ๋ชจ๋ธ์ ๋ง๋ค์ด์ค."], |
|
|
["์ด ํ์ด์ฌ ์ฝ๋๋ฅผ ์ต์ ํํด์ค:\n\n```python\nfor i in range(len(my_list)):\n print(my_list[i])\n```"], |
|
|
["FastAPI๋ก 'hello world'๋ฅผ ์ถ๋ ฅํ๋ API ์๋ํฌ์ธํธ๋ฅผ ๋ง๋ค์ด์ค."], |
|
|
], |
|
|
cache_examples=False, |
|
|
) |
|
|
|
|
|
|
|
|
with gr.Blocks(theme=gr.themes.Soft(), title="๋๋ง์ AI ์ฝ๋ ๋ฆฌ๋") as demo: |
|
|
gr.Markdown("# ๐ค ๋๋ง์ AI ์ฝ๋ ๋ฆฌ๋ (Qwen2.5-Coder)") |
|
|
gr.Markdown("์ด ์ฑ๋ด์ **Qwen2.5-Coder-7B-Instruct** ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ถ์ํฉ๋๋ค.") |
|
|
chatbot.render() |
|
|
|
|
|
if __name__ == "__main__": |
|
|
demo.launch() |
|
|
|