File size: 1,527 Bytes
32a8c03
23d4e93
32a8c03
90f1ab5
e575683
 
 
 
 
 
 
 
 
edcd57b
d9ac7f6
e575683
 
90f1ab5
32a8c03
 
 
 
 
90f1ab5
 
32a8c03
 
 
 
90f1ab5
32a8c03
 
 
 
 
90f1ab5
 
 
 
 
 
32a8c03
90f1ab5
 
 
 
 
 
 
 
 
 
 
 
 
e575683
d9ac7f6
90f1ab5
 
 
 
 
 
 
 
 
 
 
32a8c03
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
from google import genai
import gradio as gr
import os

models = [
    'gemini-2.5-flash',
    'gemini-2.5-pro',
    'gemini-2.0-flash',
    'gemini-2.0-flash-lite',
    'gemini-pro-latest',
    'gemini-2.5-flash-lite',
    'gemini-2.5-flash-image',
    'gemini-3-flash-preview',
    'gemini-3.1-pro-image-preview',
    'gemini-3.1-pro-preview',
]

color_map = {
    '3': '#ccbfee',
    '2': '#beedc6',
    '1': '#f4d7ab',
    '0': '#f4aeb1',
    # '4': '#a4dcf3',
}

client_vertex = genai.Client(
    vertexai=True,
    api_key=os.getenv("VERTEX_API_KEY")
)

def tokens_len(prompt, model):
    result = client_vertex.models.compute_tokens(
        model=model,
        contents=prompt
    )
    tokens = result.tokens_info[0].tokens

    return (
        f'{len(tokens)} tokens, {len(prompt)} chracters',
        [
            (
                token.decode('utf-8').replace("\n", "\\n"), 
                str(i % len(color_map))
            ) for i, token in enumerate(tokens)
        ]
    )

web_tokenizer = gr.Interface(
    fn = tokens_len,
    inputs = [
        gr.Textbox(
            label='輸入提示文字',
            lines=6),
        gr.Dropdown(
            label='模型名稱',
            choices = models,
            value=models[-1])
    ],
    outputs = [
        gr.Textbox(
            label='統計量'),
        gr.Highlightedtext(
            label='切割結果:',
            color_map = color_map,
            show_inline_category=False)
    ]
)

web_tokenizer.launch(share=True, debug=True)