File size: 2,451 Bytes
3db952c
 
 
79cade0
 
 
a4d8363
79cade0
3db952c
79cade0
 
a4d8363
 
 
3db952c
79cade0
 
a4d8363
79cade0
 
 
 
 
 
 
 
 
 
3db952c
79cade0
 
3db952c
79cade0
 
 
 
 
 
3db952c
79cade0
 
 
 
3db952c
bae9f36
0302bf4
79cade0
 
 
 
 
 
 
ec64b54
79cade0
 
3db952c
 
59c1b45
79cade0
3db952c
79cade0
 
 
b2d2790
 
 
79cade0
 
 
 
 
 
 
 
fa42334
547e452
56a0903
79cade0
bae9f36
3db952c
79cade0
 
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
# Hugging Face LLaMA Recipes 参照: https://github.com/huggingface/huggingface-llama-recipes/blob/main/inference-api.ipynb
# huggingface-llama-recipes: https://github.com/huggingface/huggingface-llama-recipes/tree/main

import gradio as gr
from openai import OpenAI
import os
import httpx

# 環境変数からHugging Faceのアクセストークンを取得
ACCESS_TOKEN = os.getenv("HF_TOKEN")

# httpx.Clientを明示的に指定
http_client = httpx.Client(base_url="https://api-inference.huggingface.co/v1/")

# OpenAIクライアントを初期化
client = OpenAI(
    api_key=ACCESS_TOKEN,
    http_client=http_client,
)

def respond(
    message,
    history: list[tuple[str, str]],
    system_message,
    max_tokens,
    temperature,
    top_p,
):
    # システムメッセージを含むメッセージリストを作成
    messages = [{"role": "system", "content": system_message}]

    # 既存の履歴をメッセージリストに追加
    for val in history:
        if val[0]:
            messages.append({"role": "user", "content": val[0]})
        if val[1]:
            messages.append({"role": "assistant", "content": val[1]})

    # 新しいユーザーのメッセージをメッセージリストに追加
    messages.append({"role": "user", "content": message})

    response = ""
    
    # チャット補完を非同期にリクエスト
    for message in client.chat.completions.create(
        model="Sakalti/model-3",
        max_tokens=max_tokens,
        stream=True,
        temperature=temperature,
        top_p=top_p,
        messages=messages,
    ):
        token = message.choices[0].delta.content
        
        response += token
        yield response
        
# Gradioチャットボットを初期化
chatbot = gr.Chatbot(height=600)

# Gradioチャットインターフェースを作成
demo = gr.ChatInterface(
    respond,
    additional_inputs=[
        gr.Textbox(value="", label="System message"),
        gr.Slider(minimum=1, maximum=2048, value=512, 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",
        ),
    ],
    fill_height=True,
    chatbot=chatbot,
    theme="Nymbo/Nymbo_Theme",
)

# インターフェースを起動
if __name__ == "__main__":
    demo.launch()