File size: 3,448 Bytes
b782015
 
 
06d92b4
 
b782015
06d92b4
 
 
 
 
 
 
b782015
457d89f
b782015
 
 
 
 
 
06d92b4
b782015
 
 
 
 
06d92b4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b782015
06d92b4
b782015
 
f0d3584
a2033c8
b782015
 
 
 
 
 
 
 
f0d3584
b782015
 
f0d3584
b782015
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import torch
import gradio as gr
import spaces
from transformers import AutoTokenizer, AutoModelForCausalLM, TextIteratorStreamer
from threading import Thread

model_id = "llm-jp/llm-jp-3-8x1.8b-instruct3"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id, 
    device_map="auto", 
    torch_dtype=torch.bfloat16
)

@spaces.GPU
def generate_text(system_prompt, user_input, max_length=512, temperature=0.7, top_p=0.95):
    chat = [
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": user_input},
    ]
    
    input_ids = tokenizer.apply_chat_template(
        chat, 
        add_generation_prompt=True, 
        return_tensors="pt"
    ).to(model.device)
    
    streamer = TextIteratorStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
    
    generate_kwargs = {
        "input_ids": input_ids,
        "streamer": streamer,
        "max_new_tokens": max_length,
        "do_sample": True,
        "temperature": temperature,
        "top_p": top_p,
        "repetition_penalty": 1.05
    }
    
    thread = Thread(target=model.generate, kwargs=generate_kwargs)
    thread.start()
    
    response = ""
    for text in streamer:
        response += text
    
    return response

with gr.Blocks() as demo:
    gr.Markdown("# LLM-JP-3-8x1.8b-instruct3 非公式デモ")
    gr.Markdown("国立情報学研究所大規模言語モデル研究開発センターの開発した日本語大規模言語モデル LLM-JP-3-8x1.8b-instruct3 の非公式デモ。詳細は[こちらの記事](https://llm-jp.nii.ac.jp/blog/2025/03/27/moe3.html)をご覧ください。推論時に Hugging Face の ZeroGPU(A100) を使用しています。")
    
    with gr.Row():
        with gr.Column():
            system_prompt = gr.Textbox(
                label="システムプロンプト", 
                value="以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。",
                lines=2
            )
            user_input = gr.Textbox(label="プロンプト", lines=5, placeholder="プロンプトを入力してください")
            
            with gr.Row():
                max_length = gr.Slider(label="最大トークン数", minimum=10, maximum=1024, value=512, step=1)
                temperature = gr.Slider(label="Temperature", minimum=0.1, maximum=2.0, value=0.7, step=0.1)
                top_p = gr.Slider(label="Top-p", minimum=0.1, maximum=1.0, value=0.95, step=0.05)
            
            submit_btn = gr.Button("生成")
        
        with gr.Column():
            output = gr.Textbox(label="生成結果", lines=20)
    
    submit_btn.click(
        fn=generate_text,
        inputs=[system_prompt, user_input, max_length, temperature, top_p],
        outputs=output
    )
    
    gr.Examples(
        examples=[
            ["以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。", "自然言語処理とは何か"],
            ["以下は、タスクを説明する指示です。要求を適切に満たす応答を書きなさい。", "日本の四季について教えてください"],
            ["あなたは優秀な物語作家です。", "猫と犬が友達になる短い物語を書いてください。"]
        ],
        inputs=[system_prompt, user_input]
    )

demo.launch()