File size: 2,100 Bytes
a2b7908
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import gradio as gr
import google.generativeai as genai

# APIキーの設定
genai.configure(api_key=os.getenv("GOOGLE_API_KEY"))
model = genai.GenerativeModel(model_name='gemini-2.0-flash')

# 応答生成関数
def generate_response(message, history, temperature, top_p, top_k, max_output_tokens):
    # Gemini用の履歴に変換
    gemini_history = []
    for user, bot in history:
        gemini_history.append({"role": "user", "parts": [user]})
        gemini_history.append({"role": "model", "parts": [bot]})
    gemini_history.append({"role": "user", "parts": [message]})

    # モデルから応答を取得
    response = model.generate_content(
        gemini_history,
        generation_config={
            "temperature": temperature,
            "top_p": top_p,
            "top_k": top_k,
            "max_output_tokens": int(max_output_tokens),
        }
    )

    # 履歴を更新して返す
    history.append((message, response.text))
    return "", history, history

# Gradio UI の構築
with gr.Blocks(theme='Nymbo/Alyx_theme') as demo:
    gr.Markdown("## Gemini Chatbot - Gemini 2.0 Flash + 調整可能パラメータ")

    chatbot = gr.Chatbot()
    msg = gr.Textbox(placeholder="メッセージを入力...")
    state = gr.State([])  # チャット履歴保持用

    # パラメータ調整スライダー
    with gr.Row():
        temperature = gr.Slider(0.0, 1.0, value=0.7, step=0.05, label="Temperature")
        top_p = gr.Slider(0.0, 1.0, value=0.9, step=0.05, label="Top-p")
        top_k = gr.Slider(1, 100, value=40, step=1, label="Top-k")
        max_output_tokens = gr.Number(value=1024, label="Max Output Tokens", precision=0)

    # 会話のリセットボタン
    clear = gr.Button("会話をリセット")

    # 入力時の処理
    msg.submit(
        generate_response,
        inputs=[msg, state, temperature, top_p, top_k, max_output_tokens],
        outputs=[msg, chatbot, state]
    )

    # クリア処理
    clear.click(lambda: ([], []), None, outputs=[chatbot, state])

# アプリケーションの起動
demo.launch()