forked from HaujetZhao/CapsWriter-Offline
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig_server.py
More file actions
186 lines (141 loc) · 7.95 KB
/
Copy pathconfig_server.py
File metadata and controls
186 lines (141 loc) · 7.95 KB
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
import os
import sys
from pathlib import Path
# 版本信息
__version__ = '2.6'
# 项目根目录
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# 服务端配置
class ServerConfig:
addr = os.environ.get('CAPSWRITER_SERVER_BIND', '127.0.0.1' if sys.platform == 'darwin' else '0.0.0.0')
port = os.environ.get('CAPSWRITER_SERVER_PORT', '6016')
max_message_bytes = 8 * 1024 * 1024
max_connections = 4
max_audio_chunk_bytes = 4 * 1024 * 1024
max_audio_seconds = 4 * 60 * 60
max_segment_duration = 300
max_segment_overlap = 30
max_context_chars = 4096
# 语音模型选择:'qwen_asr', 'fun_asr_nano', 'sensevoice', 'paraformer'
model_type = os.environ.get(
'CAPSWRITER_MODEL_TYPE',
'paraformer' if sys.platform == 'darwin' else 'qwen_asr',
)
format_num = True # 输出时是否将中文数字转为阿拉伯数字
format_spell = True # 输出时是否调整中英之间的空格
enable_tray = sys.platform == 'win32' # 当前托盘实现依赖 Windows 控制台生命周期
hotwords_path = Path() / 'hot-server.txt' # 全局热词配置文件路径
# 日志配置
log_level = 'DEBUG' # 日志级别:'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'
aligner_idle_timeout = 10 # 对齐引擎空闲多少秒后自动释放显存 (0 表示不释放)
# GPU 预加速配置(有识别任务时,提前调高显存频率,降低延迟,需管理员权限运行)
gpu_boost_enabled = False # 总开关,默认关闭
gpu_boost_cmd = 'nvidia-smi -lmc 9000' # GPU 预加速命令,锁定显存频率到9000MHz(根据实际 GPU 调整)
gpu_unboost_cmd = 'nvidia-smi -rmc' # GPU 取消预加速命令,恢复显存到默认频率
gpu_unboost_timeout = 1 # 空闲多少秒后取消加速
# 集成显卡兼容性补丁
# os.environ["GGML_VK_DISABLE_COOPMAT"] = "1" # AMD集显无法加载 GGUF 模型时尝试
# os.environ["GGML_VK_DISABLE_F16"] = "1" # 集成显卡解码有误,强制熔断时尝试
class ModelDownloadLinks:
"""模型下载链接配置"""
# 统一导向 GitHub Release 模型页面
models_page = "https://github.com/HaujetZhao/CapsWriter-Offline/releases/tag/models"
class ModelPaths:
"""模型文件路径配置"""
# 基础目录
model_dir = Path() / 'models'
# Paraformer 模型路径
paraformer_dir = model_dir / 'Paraformer' / "speech_paraformer-large-vad-punc_asr_nat-zh-cn-16k-common-vocab8404-onnx"
paraformer_model = paraformer_dir / 'model.onnx'
paraformer_tokens = paraformer_dir / 'tokens.txt'
# 标点模型路径
punc_model_dir = model_dir / 'Punct-CT-Transformer' / 'sherpa-onnx-punct-ct-transformer-zh-en-vocab272727-2024-04-12' / 'model.onnx'
# SenseVoice 模型路径,自带标点
sensevoice_dir = model_dir / 'SenseVoice-Small' / 'Sensevoice-Small-ONNX'
sensevoice_encoder = sensevoice_dir / 'SenseVoice-Encoder.fp16.onnx'
sensevoice_decoder = sensevoice_dir / 'SenseVoice-CTC.fp16.onnx'
sensevoice_tokenizer = sensevoice_dir / 'tokenizer.bpe.model'
# Fun-ASR-Nano 模型路径,自带标点
fun_asr_nano_gguf_dir = model_dir / 'Fun-ASR-Nano' / 'Fun-ASR-Nano-GGUF'
fun_asr_nano_gguf_encoder_adaptor = fun_asr_nano_gguf_dir / 'Fun-ASR-Nano-Encoder-Adaptor.fp16.onnx'
fun_asr_nano_gguf_ctc = fun_asr_nano_gguf_dir / 'Fun-ASR-Nano-CTC.fp16.onnx'
fun_asr_nano_gguf_llm_decode = fun_asr_nano_gguf_dir / 'Fun-ASR-Nano-Decoder.q5_k.gguf'
fun_asr_nano_gguf_token = fun_asr_nano_gguf_dir / 'tokens.txt'
fun_asr_nano_gguf_hotwords = Path() / 'hot-server.txt'
# Qwen3-ASR 模型路径,自带标点
qwen3_asr_gguf_dir = model_dir / 'Qwen3-ASR' / 'Qwen3-ASR-1.7B'
qwen3_asr_gguf_encoder_frontend = qwen3_asr_gguf_dir / 'qwen3_asr_encoder_frontend.onnx'
qwen3_asr_gguf_encoder_backend = qwen3_asr_gguf_dir / 'qwen3_asr_encoder_backend.onnx'
qwen3_asr_gguf_llm_decode = qwen3_asr_gguf_dir / 'qwen3_asr_llm.gguf'
# Force-Aligner 模型路径
force_aligner_gguf_dir = model_dir / 'Qwen3-ForcedAligner' / 'Qwen3-ForcedAligner-0.6B'
force_aligner_gguf_encoder_frontend = force_aligner_gguf_dir / 'qwen3_aligner_encoder_frontend.int4.onnx'
force_aligner_gguf_encoder_backend = force_aligner_gguf_dir / 'qwen3_aligner_encoder_backend.int4.onnx'
force_aligner_gguf_llm_decode = force_aligner_gguf_dir / 'qwen3_aligner_llm.q5_k.gguf'
class ParaformerArgs:
"""Paraformer 模型参数配置"""
paraformer = ModelPaths.paraformer_model.as_posix()
tokens = ModelPaths.paraformer_tokens.as_posix()
num_threads = 4
sample_rate = 16000
feature_dim = 80
decoding_method = 'greedy_search'
provider = 'cpu'
debug = False
class SenseVoiceArgs:
"""SenseVoice 模型参数配置"""
encoder_path = ModelPaths.sensevoice_encoder.as_posix()
decoder_path = ModelPaths.sensevoice_decoder.as_posix()
tokenizer_path = ModelPaths.sensevoice_tokenizer.as_posix()
itn = True # 原生输出阿拉伯数字
onnx_provider = 'CPU' # ONNX 推理后端 (CPU, DML)
top_k = 8 # 热词检索的 CTC 空间大小
dml_pad_to = 30 # 开启 DirectML 加速时,短音频统一填充到指定长度,有加速效果
class FunASRNanoGGUFArgs:
"""Fun-ASR-Nano-GGUF 模型参数配置"""
# 模型路径
encoder_onnx_path = ModelPaths.fun_asr_nano_gguf_encoder_adaptor.as_posix()
ctc_onnx_path = ModelPaths.fun_asr_nano_gguf_ctc.as_posix()
decoder_gguf_path = ModelPaths.fun_asr_nano_gguf_llm_decode.as_posix()
tokens_path = ModelPaths.fun_asr_nano_gguf_token.as_posix()
# 显卡加速
onnx_provider = 'CPU' # ONNX 推理后端 (CPU, DML)
llm_use_gpu = True # 是否启用 GPU 加速 GGUF 模型
vulkan_force_fp32 = False # 是否强制 FP32 计算(如果 GPU 是 Intel 集显且出现精度溢出,可设为 True)
# 模型细节
enable_ctc = True # 是否启用 CTC 热词检索
n_predict = 512 # LLM 最大生成 token 数
n_threads = None # 线程数,None 表示自动
similar_threshold = 0.6 # 热词相似度阈值,超过阈值的热词会被传入 llm decoder 的上下文
max_hotwords = 20 # 传入上下文的热词数量上限
dml_pad_to = 30 # 开启 DirectML 加速时,短音频统一填充到指定长度,有加速效果
verbose = False
class Qwen3ASRGGUFArgs:
"""Qwen3-ASR-GGUF 模型参数配置"""
# 模型路径
model_dir = ModelPaths.qwen3_asr_gguf_dir.as_posix()
encoder_frontend_fn = ModelPaths.qwen3_asr_gguf_encoder_frontend.name
encoder_backend_fn = ModelPaths.qwen3_asr_gguf_encoder_backend.name
llm_fn = ModelPaths.qwen3_asr_gguf_llm_decode.name
# 显卡加速
onnx_provider = 'CPU' # ONNX 推理后端 (CPU, DML)
llm_use_gpu = True # 是否启用 GPU 加速 GGUF 模型
# 模型细节
n_ctx = 2048 # 上下文窗口大小
chunk_size = 80.0 # 分段长度(秒)
memory_num = 1 # 记忆段数
dml_pad_to = 30 # 开启 DirectML 加速时,短音频统一填充到指定长度,有加速效果
verbose = False
class ForceAlignerGGUFArgs:
"""Force-Aligner-GGUF 模型参数配置"""
# 模型路径
model_dir = ModelPaths.force_aligner_gguf_dir.as_posix()
encoder_frontend_fn = ModelPaths.force_aligner_gguf_encoder_frontend.name
encoder_backend_fn = ModelPaths.force_aligner_gguf_encoder_backend.name
llm_fn = ModelPaths.force_aligner_gguf_llm_decode.name
# 显卡加速
onnx_provider = 'CPU' # ONNX 推理后端 (CPU, DML)
llm_use_gpu = False # 是否启用 GPU 加速 GGUF 模型
# 对齐细节
n_ctx = 3072 # 上下文窗口大小
dml_pad_to = 30 # 开启 DirectML 加速时,短音频统一填充到指定长度,有加速效果