aha 0.2.5

aha model inference library, now supports Qwen(2.5VL/3/3VL/3.5/ASR/3Embedding/3Reranker), MiniCPM4, VoxCPM/1.5, DeepSeek-OCR/2, Hunyuan-OCR, PaddleOCR-VL/1.5, RMBG2.0, GLM(ASR-Nano-2512/OCR), Fun-ASR-Nano-2512, LFM(2/2.5/2VL/2.5VL)
Documentation
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
# CLI 参考

aha 的完整命令行界面参考。

AHA 是一个基于 Candle 框架的高性能模型推理库,支持多种多模态模型,包括视觉、语言和语音模型。

```bash
aha [COMMAND] [OPTIONS]
```

## 全局选项

| 选项 | 说明 | 默认值 |
|------|------|--------|
| `-a, --address <ADDRESS>` | 服务监听地址 | 127.0.0.1 |
| `-p, --port <PORT>` | 服务监听端口 | 10100 |
| `-m, --model <MODEL>` | 模型类型(必选) | - |
| `--weight-path <WEIGHT_PATH>` | 本地safetensors模型权重路径 | - |
| `--save-dir <SAVE_DIR>` | 模型下载保存目录 | ~/.aha/ |
| `--download-retries <DOWNLOAD_RETRIES>` | 下载重试次数 | 3 |
| `--gguf-path <GGUF_PATH>` | 本地 GGUF 模型权重(使用GGUF模型时必选) | - |
| `--mmproj-path <MMPROJ_PATH>` | 本地 mmproj GGUF 模型权重(可选,未指定则不加载该模块) | - |
| `--onnx-path <ONNX_PATH>` | 本地 ONNX 模型权重 (使用ONNX模型时必选) | - |
| `--config-path <ONNX_PATH>` | GGUF/ONNX 需要的额外配置路径(可选) | - |
| `-h, --help` | 显示帮助信息 | - |
| `-V, --version` | 显示版本号 | - |

## 子命令

### cli - 下载模型并启动服务

下载指定的模型并启动 HTTP 服务。
下载仅支持safetensors格式模型, GGUF/ONNX模型必须指定本地文件路径

**语法:**
```bash
aha cli [OPTIONS] --model <MODEL>
```

**选项:**

| 选项 | 说明 | 默认值 |
|------|------|--------|
| `-a, --address <ADDRESS>` | 服务监听地址 | 127.0.0.1 |
| `-p, --port <PORT>` | 服务监听端口 | 10100 |
| `-m, --model <MODEL>` | 模型类型(必选) | - |
| `--weight-path <WEIGHT_PATH>` | 本地safetensors模型权重路径(如指定则跳过下载) | - |
| `--save-dir <SAVE_DIR>` | 模型下载保存目录 | ~/.aha/ |
| `--download-retries <DOWNLOAD_RETRIES>` | 下载重试次数 | 3 |
| `--gguf-path <GGUF_PATH>` | 本地 GGUF 模型权重(使用GGUF模型时必选) | - |
| `--mmproj-path <MMPROJ_PATH>` | 本地 mmproj GGUF 模型权重(可选,未指定则不加载该模块) | - |
| `--onnx-path <ONNX_PATH>` | 本地 ONNX 模型权重 (使用ONNX模型时必选) | - |
| `--config-path <ONNX_PATH>` | GGUF/ONNX 需要的额外配置路径(可选) | - |

**示例:**

```bash
# 下载模型并启动服务(默认端口 10100)
aha cli -m Qwen/Qwen3-VL-2B-Instruct

# 指定端口和保存目录
aha cli -m Qwen/Qwen3-VL-2B-Instruct -p 8080 --save-dir /data/models

# 使用本地模型(不下载)
aha cli -m Qwen/Qwen3-VL-2B-Instruct --weight-path /path/to/model

# 指定gguf-path和mmproj-path
aha cli -m qwen3.5-gguf --gguf-path /path/to/xxx.gguf --mmproj-path /path/to/mmproj-xxx.gguf

```

### run - 直接模型推理

直接运行模型推理,无需启动 HTTP 服务。适用于一次性推理任务或批处理。

**语法:**
```bash
aha run [OPTIONS] --model <MODEL> --input <INPUT> [--input <INPUT2>] [--weight-path <WEIGHT_PATH>] [--gguf-path <GGUF_PATH>] [--mmproj-path <MMPROJ_PATH>] [--onnx-path <ONNX_PATH>] [--config-path <CONFIG_PATH>]
```

**选项:**

| 选项 | 说明 | 默认值 |
|------|------|--------|
| `-m, --model <MODEL>` | 模型类型(必选) | - |
| `-i, --input <INPUT>` | 输入文本或文件路径(模型特定解释,支持1-2个参数, input1: 提示文本, input2: 文件地址) | - |
| `-o, --output <OUTPUT>` | 输出文件路径(可选,未指定则自动生成) | - |
| `--weight-path <WEIGHT_PATH>` | 本地模型权重路径(使用Safetensors模型时必选) | - |
| `--gguf-path <GGUF_PATH>` | 本地GGUF模型权重路径(使用GGUF模型时必选) | - |
| `--mmproj-path <MMPROJ_PATH>` | 本地mmproj GGUF模型权重路径(可选,未指定则不加载该模块) | - |
| `--onnx-path <ONNX_PATH>` | 本地 ONNX 模型权重 (使用ONNX模型时必选) | - |
| `--config-path <ONNX_PATH>` | GGUF/ONNX 需要的额外配置路径(可选) | - |

**示例:**

```bash
# VoxCPM1.5 文字转语音(单个输入)
aha run -m OpenBMB/VoxCPM1.5 -i "太阳当空照" -o output.wav --weight-path /path/to/model

# VoxCPM1.5 从文件读取输入(单个输入)
aha run -m OpenBMB/VoxCPM1.5 -i "file://./input.txt" --weight-path /path/to/model

# MiniCPM4 文本生成(单个输入)
aha run -m OpenBMB/MiniCPM4-0.5B -i "你好" --weight-path /path/to/model

# DeepSeek OCR 图片识别(单个输入)
aha run -m deepseek-ai/DeepSeek-OCR -i "image.jpg" --weight-path /path/to/model

# RMBG2.0 背景移除(单个输入)
aha run -m AI-ModelScope/RMBG-2.0 -i "photo.png" -o "no_bg.png" --weight-path /path/to/model

# GLM-ASR 语音识别(两个输入:提示文本 + 音频文件)
aha run -m ZhipuAI/GLM-ASR-Nano-2512 -i "请转写这段音频" -i "audio.wav" --weight-path /path/to/model

# Fun-ASR 语音识别(两个输入:提示文本 + 音频文件)
aha run -m FunAudioLLM/Fun-ASR-Nano-2512 -i "语音转写:" -i "audio.wav" --weight-path /path/to/model

# qwen3 文本生成(单个输入)
aha run -m Qwen/Qwen3-0.6B -i "你好" --weight-path /path/to/model

# qwen3 GGUF 文本生成(单个输入)
aha run -m qwen3-0.6b -i "你好" --artifact-format gguf --gguf-path /path/to/Qwen3-0.6B-Q8_0.gguf

# qwen2.5vl 图像理解(两个输入:提示文本 + 图片文件)
aha run -m Qwen/Qwen2.5-VL-3B-Instruct -i "请分析图片并提取所有可见文本内容,按从左到右、从上到下的布局,返回纯文本" -i "image.jpg" --weight-path /path/to/model

# Qwen3-ASR 语音识别(单个输入:音频文件)
aha run -m Qwen/Qwen3-ASR-0.6B -i "audio.wav" --weight-path /path/to/model

# Qwen3.5-GGUF 无mmproj (单个输入:提示文本)
aha run -m qwen3.5-gguf -i 你如何看待AI --gguf-path /path/to/xxx.gguf

# Qwen3.5-GGUF 有mmproj (两个输入:提示文本 + 文件)
aha run -m qwen3.5-gguf -i 提取图片中的文本 -i https://ai.bdstatic.com/file/C56CC9B274CF460CA33
63E59ECD94423 --gguf-path /path/to/xxx.gguf --mmproj-path /path/to/mmproj-xxx.gguf

```

### serv - 启动服务

使用指定模型启动 HTTP 服务。
safetensors模型`--weight-path` 是可选的 - 如果不指定,默认使用 `~/.aha/{model_id}`。
GGUF/ONNX模型必须指定本地文件路径

**语法:**
```bash
aha serv [OPTIONS] --model <MODEL> [--weight-path <WEIGHT_PATH>] [--gguf-path <GGUF_PATH>] \
  [--mmproj-path <MMPROJ_PATH>] [--onnx-path <ONNX_PATH>] [--tokenizer-dir <TOKENIZER_DIR>] \
  [--artifact-format <ARTIFACT_FORMAT>]
```

**选项:**

| 选项 | 说明 | 默认值 |
|------|------|--------|
| `-a, --address <ADDRESS>` | 服务监听地址 | 127.0.0.1 |
| `-p, --port <PORT>` | 服务监听端口 | 10100 |
| `-m, --model <MODEL>` | 模型类型(必选) | - |
| `--weight-path <WEIGHT_PATH>` | 本地模型权重路径(可选) | ~/.aha/{model_id} |
| `--allow-remote-shutdown` | 允许远程关机请求(不推荐) | false |
| `--gguf-path <GGUF_PATH>` | 本地GGUF模型权重路径(使用GGUF模型时必选) | - |
| `--mmproj-path <MMPROJ_PATH>` | 本地mmproj GGUF模型权重路径(可选,未指定则不加载该模块) | - |
| `--onnx-path <ONNX_PATH>` | 本地 ONNX 模型权重 (使用ONNX模型时必选) | - |
| `--config-path <ONNX_PATH>` | GGUF/ONNX 需要的额外配置路径(可选) | - |

**示例:**

```bash
# 使用默认模型路径启动服务 (~/.aha/{model_id})
aha serv -m Qwen/Qwen3-VL-2B-Instruct

# 使用本地模型启动服务
aha serv -m Qwen/Qwen3-VL-2B-Instruct --weight-path /path/to/model

# 指定端口启动
aha serv -m Qwen/Qwen3-VL-2B-Instruct -p 8080

# 指定监听地址
aha serv -m Qwen/Qwen3-VL-2B-Instruct -a 0.0.0.0

# 启用远程关机(不推荐用于生产环境)
aha serv -m Qwen/Qwen3-VL-2B-Instruct --allow-remote-shutdown
```

### ps - 列出运行中的服务

列出所有当前正在运行的 AHA 服务,显示进程 ID、端口和状态。

**语法:**
```bash
aha ps [OPTIONS]
```

**选项:**

| 选项 | 说明 | 默认值 |
|------|------|--------|
| `-c, --compact` | 紧凑输出格式(仅显示服务 ID) | false |

**示例:**

```bash
# 列出所有运行中的服务(表格格式)
aha ps

# 紧凑输出(仅服务 ID)
aha ps -c
```

**输出格式:**

```
Service ID           PID        Model                Port       Address         Status
-------------------------------------------------------------------------------------
56860@10100          56860      N/A                  10100      127.0.0.1       Running
```

**字段说明:**
- `Service ID`: 服务唯一标识符,格式为 `pid@port`
- `PID`: 进程 ID
- `Model`: 模型名称(如果未检测到则显示 N/A)
- `Port`: 服务端口号
- `Address`: 服务监听地址
- `Status`: 服务状态(Running、Stopping、Unknown)

### download - 下载模型

仅下载指定模型,不启动服务。

**语法:**
```bash
aha download [OPTIONS] --model <MODEL>
```

**选项:**

| 选项 | 说明 | 默认值 |
|------|------|--------|
| `-m, --model <MODEL>` | 模型类型(必选) | - |
| `-s, --save-dir <SAVE_DIR>` | 模型下载保存目录 | ~/.aha/ |
| `--download-retries <DOWNLOAD_RETRIES>` | 下载重试次数 | 3 |

**示例:**

```bash
# 下载模型到默认目录
aha download -m Qwen/Qwen3-VL-2B-Instruct

# 指定保存目录
aha download -m Qwen/Qwen3-VL-2B-Instruct -s /data/models

# 指定下载重试次数
aha download -m Qwen/Qwen3-VL-2B-Instruct --download-retries 5

# 下载 MiniCPM4-0.5B 模型
aha download -m OpenBMB/MiniCPM4-0.5B -s models
```

### delete - 删除已下载的模型

删除默认位置(`~/.aha/{model_id}`)的已下载模型。

**语法:**
```bash
aha delete [OPTIONS] --model <MODEL>
```

**选项:**

| 选项 | 说明 | 默认值 |
|------|------|--------|
| `-m, --model <MODEL>` | 模型类型(必选) | - |

**示例:**

```bash
# 删除 RMBG2.0 模型
aha delete -m AI-ModelScope/RMBG-2.0

# 删除 Qwen3-VL-2B 模型
aha delete --model Qwen/Qwen3-VL-2B-Instruct
```

**行为说明:**
- 删除前会显示模型信息(ID、位置、大小)
- 需要用户确认(y/N)才会执行删除
- 如果模型目录不存在,显示"模型未找到"消息
- 删除完成后显示"删除成功"消息

### list - 列出所有支持的模型

列出所有支持的模型及其 ModelScope ID。

**语法:**
```bash
aha list [OPTIONS]
```

**选项:**

| 选项 | 说明 | 默认值 |
|------|------|--------|
| `-j, --json` | 以 JSON 格式输出(包含 name、model_id 和 type 字段) | false |

**示例:**

```bash
# 以表格格式列出模型(默认)
aha list

# 以 JSON 格式列出模型
aha list --json

# 简写形式
aha list -j
```

**JSON 输出格式:**

使用 `--json` 时,输出包含:
- `name`:与 `-m` 参数一起使用的模型标识符
- `model_id`:完整的 ModelScope 模型 ID
- `type`:模型类别(`llm``ocr``asr``image`
示例:
```json
[
  {
    "name": "Qwen/Qwen3-VL-2B-Instruct",
    "model_id": "Qwen/Qwen3-VL-2B-Instruct",
    "type": "llm"
  },
  {
    "name": "deepseek-ai/DeepSeek-OCR",
    "model_id": "deepseek-ai/DeepSeek-OCR",
    "type": "ocr"
  }
]
```

**模型类型:**
- `llm`:语言模型(文本生成、对话等)
- `ocr`:光学字符识别模型
- `asr`:自动语音识别模型
- `image`:图像处理模型
- `tts`:语音生成

## 常见使用场景

### 场景 1:快速启动推理服务

```bash
# 一条命令下载并启动服务
aha cli -m Qwen/Qwen3-VL-2B-Instruct
```

### 场景 2:使用已有模型启动服务

```bash
# 假设模型已下载到 /data/models/Qwen/Qwen3-VL-2B-Instruct
aha serv -m Qwen/Qwen3-VL-2B-Instruct --weight-path /data/models/Qwen/Qwen3-VL-2B-Instruct
```

### 场景 3:预先下载模型

```bash
# 下载模型到指定目录,稍后使用
aha download -m Qwen/Qwen3-VL-2B-Instruct -s /data/models

# 后续启动时直接使用
aha serv -m Qwen/Qwen3-VL-2B-Instruct --weight-path /data/models/Qwen/Qwen3-VL-2B-Instruct
```

### 场景 4:自定义服务端口和地址

```bash
# 在 0.0.0.0:8080 启动服务,允许外部访问
aha cli -m Qwen/Qwen3-VL-2B-Instruct -a 0.0.0.0 -p 8080
```

## API 接口

服务启动后,提供以下 API 接口:

### 对话接口
- **端点**: `POST /chat/completions`
- **功能**: 多模态对话和文本生成
- **支持模型**: Qwen2.5VL, Qwen3, Qwen3VL, DeepSeekOCR, GLM-ASR-Nano-2512, Fun-ASR-Nano-2512 等
- **格式**: OpenAI Chat Completion 格式
- **流式支持**: 支持

### 图像处理接口
- **端点**: `POST /images/remove_background`
- **功能**: 图像背景移除
- **支持模型**: RMBG-2.0
- **格式**: OpenAI Chat Completion 格式
- **流式支持**: 不支持

### 语音生成接口
- **端点**: `POST /audio/speech`
- **功能**: 语音合成和生成
- **支持模型**: VoxCPM, VoxCPM1.5
- **格式**: OpenAI Chat Completion 格式
- **流式支持**: 不支持

### Embeddings 接口
- **端点**: `POST /embeddings``POST /v1/embeddings`
- **功能**: 文本向量生成
- **支持模型**: Qwen3-Embedding 系列
- **格式**: OpenAI embeddings 格式
- **流式支持**: 不支持

### Rerank 接口
- **端点**: `POST /rerank``POST /v1/rerank`
- **功能**: query/document 重排打分
- **支持模型**: Qwen3-Reranker 系列
- **格式**: Rerank JSON(`results[index,relevance_score,document]`- **流式支持**: 不支持

### 关机接口
- **端点**: `POST /shutdown`
- **功能**: 优雅地关闭服务器
- **安全性**: 默认仅允许本地访问,使用 `--allow-remote-shutdown` 标志启用远程访问(不推荐)
- **格式**: JSON 响应


## 获取帮助

```bash
# 查看主帮助
aha --help

# 查看子命令帮助
aha cli --help
aha serv --help
aha download --help

# 查看版本信息
aha --version
```

## 另见

- [快速入门]./getting-started.zh-CN.md - 快速入门指南
- [API 文档]./api.zh-CN.md - REST API 参考
- [支持的模型]./supported-tools.zh-CN.md - 可用模型