File size: 3,197 Bytes
ad9a66f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
---
title: tokenizer
emoji: 🔢
colorFrom: gray
colorTo: blue
sdk: docker
sdk_version: "3.0.0"
app_file: main.go
pinned: false
---

# Tokenizer Service

一个高效的API服务,用于计算大型语言模型的输入token数量。

## 支持的模型

### Claude系列模型
- claude-3-7-sonnet-latest
- claude-3-5-sonnet-latest
- claude-3-5-haiku-latest
- claude-3-opus-latest
- claude-3-haiku-20240307

### Gemini系列模型
- gemini-1.5-flash
- gemini-2.0-flash
- 其他Gemini系列模型

## 自动模型匹配
服务支持智能模型名称匹配,不区分大小写:

### Claude模型匹配规则
- 包含"claude"、"3"和"7"的名称会匹配到`claude-3-7-sonnet-latest`
- 包含"claude"、"3"、"5"和"sonnet"的名称会匹配到`claude-3-5-sonnet-latest`
- 包含"claude"、"3"、"5"和"haiku"的名称会匹配到`claude-3-5-haiku-latest`
- 包含"claude"、"3"和"opus"的名称会匹配到`claude-3-opus-latest`
- 包含"claude"、"3"和"haiku"的名称会匹配到`claude-3-haiku-20240307`

### Gemini模型匹配规则
- 包含"gemini"和"2.0"或"2.5"的名称会匹配到`gemini-2.0-flash`
- 包含"gemini"和"1.5"的名称会匹配到`gemini-1.5-flash`

## 环境变量

运行服务需要以下环境变量:

- `ANTHROPIC_API_KEY`: Anthropic API密钥,用于计算Claude模型的token
- `GOOGLE_API_KEY`: Google API密钥,用于计算Gemini模型的token
- `SERVICE_URL`(可选): 服务的URL,用于防止Hugging Face空间休眠
- `PORT`(可选): 服务监听的端口号,默认为7860

## API接口

### Token计算

**端点**: `/count_tokens`

**方法**: POST

**请求格式**:
```json
{
  "model": "模型名称",
  "messages": [
    {
      "role": "user或assistant",
      "content": "消息内容"
    }
  ],
  "system": "系统提示(可选)"
}
```

**响应格式**:
```json
{
  "input_tokens": 123
}
```

### 健康检查

**端点**: `/health`

**方法**: GET

**响应格式**:
```json
{
  "status": "healthy",
  "time": "2023-04-01T12:34:56Z"
}
```

## 部署指南

### 本地运行

1. 设置必要的环境变量
```bash
export ANTHROPIC_API_KEY=your_anthropic_key
export GOOGLE_API_KEY=your_google_key
```

2. 启动服务
```bash
go run main.go
```

### Docker部署

1. 构建Docker镜像
```bash
docker build -t tokenizer .
```

2. 运行容器
```bash
docker run -p 7860:7860 -e ANTHROPIC_API_KEY=your_anthropic_key -e GOOGLE_API_KEY=your_google_key tokenizer
```

### Hugging Face部署

1. 创建一个新的Space,选择Docker作为运行环境
2. 添加以下Secret:
   - `ANTHROPIC_API_KEY`: 你的Anthropic API密钥
   - `GOOGLE_API_KEY`: 你的Google API密钥
   - `SERVICE_URL`: 服务的完整URL,格式为`https://你的空间名-用户名.hf.space`

3. 将代码推送到Space关联的仓库
4. Hugging Face会自动构建并部署服务

## 示例代码

### Python调用示例

```python
import requests
import json

url = "https://your-service-url/count_tokens"
data = {
    "model": "claude-3-5-sonnet-latest",
    "messages": [
        {
            "role": "user",
            "content": "Hello, world!"
        }
    ]
}

response = requests.post(url, json=data)
print(response.json())
```

## License

MIT