File size: 2,108 Bytes
8e477f3
 
 
 
 
 
 
11d9cf3
333a04d
 
 
 
8e477f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89b03ce
a423e65
89b03ce
a423e65
 
e04196e
a423e65
 
 
 
 
8e477f3
 
 
 
f92f70f
8e477f3
f92f70f
8e477f3
a423e65
8e477f3
 
 
 
 
15672e8
89b03ce
a4ab14d
333a04d
 
11d9cf3
a4ab14d
2e4796e
 
a4ab14d
 
7483ca3
a4ab14d
 
11d9cf3
2e4796e
a4ab14d
8e477f3
a4ab14d
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
import gradio as gr
import outlines
import os, json
from outlines.models import openai
from outlines.generate import choice


model_list = {
    "Gemma-2B": "google/gemma-2b-it",
    "Qwen2.5-7B": "Qwen/Qwen2.5-7B-Instruct-Turbo"
}

def create_prompt_message(message: str) -> str:
    return f"""
        You are an agent that classifies restaurant-related user messages.

        Your job is to classify the following message into one of two categories: "Reservation" or "Others".

        You MUST respond EXACTLY with one of these two JSON objects:

        {{"result": "Reservation"}} or {{"result": "Others"}}

        Do not add any explanation or other content.

        Message: {message}
        """.strip()

def inference(model_dropdown, message):
    # 根據 model_name 決定要用哪個模型
    model_id = model_list[model_dropdown]
    model = openai(
        model_id,
        api_key=os.getenv("TOGETHER_API_KEY"),
        base_url="https://api.together.xyz/v1"
    )
    classifier = choice(model, ["Reservation", "Others"])

    # 下面是原本分類流程
    prompt = create_prompt_message(message)
    try:
        result = classifier(prompt)
        if result == 'Reservation':
            return "Reservation request!"
        elif result == 'Others':
            return "Non-reservation request!"
        else:
            return "不明意圖。"
    except Exception as e:
        print(f"[Error!]: {e}")
        return "Error!"


with gr.Blocks() as demo:
    gr.Markdown("## 🍴🥂 LLM訂位意圖分類器")
    gr.Markdown("判斷輸入訊息是否與訂位有關")

    with gr.Row():
        model_dropdown = gr.Dropdown(choices=list(model_list.keys()), label="選擇模型", value="Gemma-2B")
    with gr.Row():
        input_box=gr.Textbox(placeholder="請輸入顧客訊息...", label="輸入訊息")
        output_box=gr.Textbox(label="分類結果")
    with gr.Row():
        inference_btn = gr.Button("開始分類")

    inference_btn.click(
        fn=inference,
        inputs=[model_dropdown, input_box],
        outputs=output_box
    )

demo.launch()