Compare commits

...

2 Commits

Author SHA1 Message Date
yumoqing
572130548a bugfix 2024-12-25 16:05:19 +08:00
yumoqing
03e60ac071 bugfix 2024-12-25 16:04:39 +08:00
29 changed files with 809 additions and 3776 deletions

View File

@ -1,32 +1,47 @@
import os
import sys
import argparse
import codecs
import re
from pathlib import Path
from functools import partial
import numpy as np
import soundfile as sf
# import tomli
from cached_path import cached_path
import pycld2 as cld
import cn2an
from f5_tts.model import DiT, UNetT
from f5_tts.model.utils_infer import (
load_vocoder,
load_model,
preprocess_ref_audio_text,
from f5_tts.infer.utils_infer import (
mel_spec_type,
target_rms,
cross_fade_duration,
nfe_step,
cfg_strength,
sway_sampling_coef,
speed,
fix_duration,
infer_process,
load_model,
load_vocoder,
preprocess_ref_audio_text,
remove_silence_for_generated_wav,
)
import os
import json
from time import time
from time import time, sleep
from appPublic.dictObject import DictObject
from appPublic.folderUtils import temp_file
from appPublic.jsonConfig import getConfig
from appPublic.worker import awaitify
from appPublic.uniqueID import getID
from appPublic.log import debug, info
from appPublic.background import Background
from ahserver.webapp import webapp
from ahserver.serverEnv import ServerEnv
from ahserver.serverenv import ServerEnv
from ahserver.filestorage import FileStorage
n_mel_channels = 100
hop_length = 256
@ -37,24 +52,51 @@ ode_method = "euler"
sway_sampling_coef = -1.0
speed = 1.0
def write_wav_buffer(wav, nchannels, framerate):
fs = FileStorage()
fn = fs._name2path(f'{getID()}.wav', userid='tmp')
os.makedirs(os.path.dirname(fn))
debug(fn)
with open(fn, "wb") as f:
sf.write(f.name, wav, framerate)
return fs.webpath(fn)
async_write_wav_buffer = awaitify(write_wav_buffer)
def detect_language(txt):
isReliable, textBytesFound, details = cld.detect(txt)
debug(f' detect_language():{isReliable=}, {textBytesFound=}, {details=} ')
return details[0][1]
class F5TTS:
def __init__(self):
self.config = getConfig()
# self.vocos = load_vocoder(is_local=True, local_path="../checkpoints/charactr/vocos-mel-24khz")
self.load_model()
self.setup_voice()
self.setup_voices()
def load_model(self):
self.vocoder = load_vocoder(vocoder_name=self.config.vocoder_name,
is_local=True,
local_path=self.config.vocoder_local_path)
# load models
ckpt_file = ''
if self.config.modelname == "F5-TTS":
model_cls = DiT
model_cfg = dict(dim=1024, depth=22, heads=16, ff_mult=2, text_dim=512, conv_layers=4)
if ckpt_file == "":
model_cfg = dict(dim=1024, depth=22, heads=16,
ff_mult=2, text_dim=512, conv_layers=4)
if self.config.vocoder_name == "vocos":
repo_name = "F5-TTS"
exp_name = "F5TTS_Base"
ckpt_step = 1200000
ckpt_file = str(cached_path(f"hf://SWivid/{repo_name}/{exp_name}/model_{ckpt_step}.safetensors"))
# ckpt_file = f"ckpts/{exp_name}/model_{ckpt_step}.pt" # .pt | .safetensors; local path
elif self.config.vocoder_name == "bigvgan":
repo_name = "F5-TTS"
exp_name = "F5TTS_Base_bigvgan"
ckpt_step = 1250000
ckpt_file = str(cached_path(f"hf://SWivid/{repo_name}/{exp_name}/model_{ckpt_step}.pt"))
elif self.config.modelname == "E2-TTS":
model_cls = UNetT
@ -66,85 +108,179 @@ class F5TTS:
ckpt_file = str(cached_path(f"hf://SWivid/{repo_name}/{exp_name}/model_{ckpt_step}.safetensors"))
self.model = load_model(model_cls, model_cfg, ckpt_file,
self.config.vocab_file)
mel_spec_type=self.config.vocoder_name,
vocab_file=self.config.vocab_file)
self.model = self.model.to(self.config.device)
def setup_voice(self):
main_voice = {"ref_audio": self.config.ref_audio_fn,
"ref_text": self.config.ref_text}
if "voices" not in self.config:
voices = {"main": main_voice}
else:
voices = self.config["voices"]
voices["main"] = main_voice
for voice in voices:
voices[voice]["ref_audio"], voices[voice]["ref_text"] = preprocess_ref_audio_text(
voices[voice]["ref_audio"], voices[voice]["ref_text"]
)
print("Voice:", voice)
print("Ref_audio:", voices[voice]["ref_audio"])
print("Ref_text:", voices[voice]["ref_text"])
self.voices = voices
def f5tts_infer(self, ref_audio, ref_text, gen_text):
audio, final_sample_rate, spectragram = \
infer_process(ref_audio,
ref_text,
gen_text,
self.model,
self.vocoder,
mel_spec_type=self.config.vocoder_name,
speed=self.config.speed or speed)
return {
'audio':audio,
'sample_rate':final_sample_rate,
'spectragram':spectragram
}
def get_speakers(self):
t = [{'value':s, 'text':s} for s in self.speakers.keys() ]
t.append({'value':'main', 'text':'main'})
return t
def _inference_stream(self, prompt):
text_gen = prompt
remove_silence = False
generated_audio_segments = []
async def split_text(self, text_gen, speaker):
reg1 = r"(?=\[\w+\])"
lang = await awaitify(detect_language)(text_gen)
if self.config.language.get(lang):
reg1 = r"{}".format(self.config.language.get(lang).sentence_splitter)
if lang == 'zh':
text_gen = await awaitify(cn2an.transform)(text_gen, 'an2cn')
chunks = re.split(reg1, text_gen)
reg2 = r"\[(\w+)\]"
# reg2 = self.config.speaker_match
reg2 = r"\[\[(\w+)\]\]"
ret = []
for text in chunks:
if text == ['\r', '']:
continue
voice = speaker
match = re.match(reg2, text)
if match:
debug(f'{text=}, match {reg2=}')
voice = match[1]
else:
print("No voice tag found, using main.")
voice = "main"
if voice not in self.voices:
print(f"Voice {voice} not found, using main.")
voice = "main"
debug(f'{text} inferences with speaker({voice})..{reg2=}')
text = re.sub(reg2, "", text)
gen_text = text.strip()
ref_audio = self.voices[voice]["ref_audio"]
ref_text = self.voices[voice]["ref_text"]
print(f"Voice: {voice}, {self.model}")
audio, final_sample_rate, spectragram = \
infer_process(ref_audio, ref_text, gen_text, self.model)
yield {
'audio':audio,
'sample_rate':final_sample_rate,
'spectragram':spectragram,
'finish':False
}
yield {
'finish':True
}
ret.append({'text':gen_text, 'ref_audio':ref_audio, 'ref_text':ref_text})
return ret
def _inference(self, prompt):
async def infer_stream(self, prompt, speaker):
async for a in self._inference_stream(prompt, speaker):
wavdata = a['audio']
samplerate = a['sample_rate']
b = await async_write_wav_buffer(wavdata, 1, samplerate)
yield b
async def _inference_stream(self, prompt, speaker):
text_gen = prompt
chunks = await self.split_text(prompt, speaker)
for chunk in chunks:
gen_text = chunk['text']
ref_audio = chunk['ref_audio']
ref_text = chunk['ref_text']
infer = awaitify(self.f5tts_infer)
try:
d = await infer(ref_audio, ref_text, gen_text)
yield d
except:
pass
def setup_voices(self):
config = getConfig()
d = None
with codecs.open(config.speakers_file, 'r', 'utf-8') as f:
b = f.read()
self.speakers = json.loads(b)
ref_audio, ref_text = preprocess_ref_audio_text(config.ref_audio, config.ref_text)
self.voices = {
"main":{
'ref_text':ref_text,
'ref_audio':ref_audio
}
}
for k,v in self.speakers.items():
ref_audio, ref_text = preprocess_ref_audio_text(v['ref_audio'], v['ref_text'])
self.voices[k] = {
'ref_text':ref_text,
'ref_audio':ref_audio
}
async def add_voice(self, speaker, ref_audio, ref_text):
debug(f'{speaker=}, {ref_audio=}, {ref_text=}');
config = getConfig()
ref_audio = FileStorage().realPath(ref_audio)
self.speakers[speaker] = {
'ref_text':ref_text,
'ref_audio':ref_audio
}
f = awaitify(preprocess_ref_audio_text)
ref_audio, ref_text = await f(ref_audio, ref_text)
self.voices[speaker] = {
'ref_text':ref_text,
'ref_audio':ref_audio
}
with codecs.open(config.speakers_file, 'w', 'utf-8') as f:
f.write(json.dumps(self.speakers, indent=4))
return None
async def _inference(self, prompt, speaker):
generated_audio_segments = []
remove_silence = self.config.remove_silence or False
final_sample_rate = 24000
for d in self._inference_stream(prompt):
if not d['finish']:
audio = d['audio']
final_sample_rate = d['sample_rate']
generated_audio_segments.append(audio)
async for d in self._inference_stream(prompt, speaker):
audio = d['audio']
final_sample_rate = d['sample_rate']
generated_audio_segments.append(audio)
if generated_audio_segments:
final_wave = np.concatenate(generated_audio_segments)
fn = temp_file(suffix='.wav')
with open(fn, "wb") as f:
sf.write(f.name, final_wave, final_sample_rate)
# Remove silence
if remove_silence:
remove_silence_for_generated_wav(f.name)
return fn
return await async_write_wav_buffer(final_wave, 1, final_sample_rate)
def UiError(title="出错", message="出错啦", timeout=5):
return {
"widgettype":"Error",
"options":{
"author":"tr",
"timeout":timeout,
"cwidth":15,
"cheight":10,
"title":title,
"auto_open":True,
"auto_dismiss":True,
"auto_destroy":True,
"message":message
}
}
def UiMessage(title="消息", message="后台消息", timeout=5):
return {
"widgettype":"Message",
"options":{
"author":"tr",
"timeout":timeout,
"cwidth":15,
"cheight":10,
"title":title,
"auto_open":True,
"auto_dismiss":True,
"auto_destroy":True,
"message":message
}
}
def test1():
sleep(36000)
return {}
def init():
g = ServerEnv()
f5 = F5TTS()
g.infer_stream = awaitify(f5._inference_stream)
g.infer = awaitify(f5._inference)
g.infer_stream = f5.infer_stream
g.get_speakers = f5.get_speakers
g.infer = f5._inference
g.test1 = awaitify(test1)
g.add_voice = f5.add_voice
g.UiError = UiError
g.UiMessage = UiMessage
if __name__ == '__main__':
webapp(init)

View File

@ -1,12 +1,27 @@
{
"speaker_match":"\\[\\[(\\w+)\\]\\]",
"language":{
"zh":{
"sentence_splitter":"[\n。\n]"
}
},
"sample_rate":16000,
"vocab_file":"",
"speakers_file":"$[workdir]$/conf/speakers.json",
"vocoder_name":"vocos",
"vocoder_local_path":"$[workdir]$/.cache/huggingface/hub/models--charactr--vocos-mel-24khz/snapshots/0feb3fdd929bcd6649e0e7c5a688cf7dd012ef21",
"remove_silence":false,
"modelname":"F5-TTS",
"device":"cuda:0",
"ref_audio_fn":"$[workdir]$/samples/ttt.wav",
"ref_audio":"$[workdir]$/samples/ttt.wav",
"ref_text":"快点吃饭,上课要迟到了。",
"cross_fade_duration":0,
"filesroot":"$[workdir]$/files",
"logger":{
"name":"f5tts",
"levelname":"info",
"logfile":"$[workdir]$/logs/f5tts.log"
},
"website":{
"paths":[
["$[workdir]$/wwwroot",""]
@ -29,7 +44,7 @@
"startswiths":[
{
"leading":"/idfile",
"registerfunction":"idFileDownload"
"registerfunction":"download_path"
}
],
"processors":[

26
conf/speakers.json Normal file
View File

@ -0,0 +1,26 @@
{
"test1": {
"ref_text": "\u6d4b\u8bd5\u4e00\u4e0b\u800c\u5df2",
"ref_audio": "/data/f5tts/files/2/153/195/20/record.wav"
},
"asd": {
"ref_text": "",
"ref_audio": "/data/f5tts/files/79/189/134/0/record.wav"
},
"mmm": {
"ref_text": "\u8868\u683c\u4e2d\u662f\u4e4b\u524d\u63d0\u4ea4\u4e86\u7533\u8bf7\u8868\u4f46\u662f\u9057\u6f0f\u7684\u4e13\u5bb6\u53ca\u6210\u5458\u5355\u4f4d\u540d\u5355\uff0c\u8fd1\u671f\u4f1a\u5236\u4f5c\u8865\u53d1\uff0c\u8bf7\u76f8\u5173\u8001\u5e08\u786e\u8ba4\u3002",
"ref_audio": "/data/f5tts/files/18/16/195/81/record.wav"
},
"asd2": {
"ref_text": "",
"ref_audio": "/data/f5tts/files/71/191/148/3/record.wav"
},
"zhc": {
"ref_text": "\u4eca\u5929\u6211\u4e0b\u697c\u53bb\u5403\u996d\uff0c\u53d1\u73b0\u4e00\u5bb6\u597d\u5403\u7684\u9910\u5385\uff0c\u5473\u9053\u975e\u5e38\u7f8e\u5473",
"ref_audio": "/data/f5tts/files/73/97/53/45/record.wav"
},
"\u8463\u6d01": {
"ref_text": "\u53e6\u5916\u9700\u8981\u7533\u8bf7\u7684\u8001\u5e08\u8bf7\u53ca\u65f6\u63d0\u4ea4\u76d6\u7ae0\u7533\u8bf7\u8868\uff0c\u8c22\u8c22\u5927\u5bb6\u3002",
"ref_audio": "/data/f5tts/files/106/47/138/48/record.wav"
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

23
install
View File

@ -4,36 +4,18 @@ import os
import sys
import codecs
if len(sys.argv) < 3:
if len(sys.argv) < 2:
print(f'Usage:\n{sys.argv[0]} venvname')
sys.exit(1)
user = os.getlogin()
home = os.environ.get('HOME')
try:
os.mkdir(f'{home}/ve')
except:
pass
venv = sys.argv[1]
port = int(sys.argv[2])
if not os.path.exists(f'{home}/{venv}'):
os.system(f'python3 -m venv ~/{venv}')
pwd = os.getcwd()
name = os.path.basename(pwd)
if os.path.exists(f'./app/{name}.py'):
print('env exists')
sys.exit(1)
dirs = f'./app ./conf ./files ./wwwroot ./script ./logs'.split(' ')
for d in dirs:
try:
os.mkdir(d)
except:
pass
files=f'app/{name}.py conf/config.json files/README.md wwwroot/index.dspy'.split(' ')
for f in files:
os.system(f'touch {f}')
service = f"""[Unit]
Description={name} service
@ -43,7 +25,7 @@ Requires=nginx.service
[Service]
Type=forking
ExecStart=su - {user} -c "{pwd}/script/{name}.sh"
ExecStop=su - ymq "{home}/bin/killname {name}.py"
ExecStop=su - {user} "{home}/bin/killname app/{name}.py"
[Install]
WantedBy=multi-user.target
"""
@ -75,5 +57,6 @@ if not os.path.exists(f'{home}/bin/killname'):
ps -ef|grep "$1"|grep -v grep|awk '{print("kill -9", $2)}'|sh
""")
os.system(f'chmod +x {pwd}/bin/*')
os.system(f'chmod +x {pwd}/script/*.sh')
os.system(f'{pwd}/script/install.sh')

240
logs/f5tts.log Normal file
View File

@ -0,0 +1,240 @@
2024-12-25 13:31:45.631[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/api/infer_stream'
2024-12-25 13:31:45.659[f5tts][debug][<string>:2]params_kw={'speaker': 'zhc', 'prompt': '如今中国正在面临如何刺激消费、如何继续发展服务业来更好的扩大就业的问题,美国医疗产业的现状正是中国应极力避免的反例。\r\n\r\n\u3000\u3000[董洁]未来几年,在国外贸易壁垒高企的情况下如何刺激国内消费?\r\n\r\n\u3000\u3000[mmm]民主党式的大撒钱效果是不错,但代价就是高通胀和民主党丢掉所有执政权力。\r\n更适合中国的政策选项可能是从政府开支中对普通人社会保障和养老的部分提供补贴和政策优惠减少普通家庭在社会保障和养老储蓄方面的负担这样可以让普通民众对未来有更多信心从而增加消费。', '_webbricks_': '1', 'width': '1286', 'height': '1015', '_is_mobile': '0'}
2024-12-25 13:31:45.660[f5tts][debug][/data/f5tts/app/f5tts.py:68] detect_language():isReliable=True, textBytesFound=622, details=(('Chinese', 'zh', 98, 2029.0), ('Unknown', 'un', 0, 0.0), ('Unknown', 'un', 0, 0.0))
2024-12-25 13:31:45.661[f5tts][debug][/data/f5tts/app/f5tts.py:153]如今中国正在面临如何刺激消费、如何继续发展服务业来更好的扩大就业的问题,美国医疗产业的现状正是中国应极力避免的反例 will be inference with speaker(zhc)..
2024-12-25 13:31:45.661[f5tts][debug][/data/f5tts/app/f5tts.py:153] will be inference with speaker(zhc)..
2024-12-25 13:31:45.662[f5tts][debug][/data/f5tts/app/f5tts.py:153] will be inference with speaker(zhc)..
2024-12-25 13:31:45.662[f5tts][debug][/data/f5tts/app/f5tts.py:153]  [董洁]未来几年,在国外贸易壁垒高企的情况下如何刺激国内消费 will be inference with speaker(zhc)..
2024-12-25 13:31:45.662[f5tts][debug][/data/f5tts/app/f5tts.py:153] will be inference with speaker(zhc)..
2024-12-25 13:31:45.662[f5tts][debug][/data/f5tts/app/f5tts.py:153] will be inference with speaker(zhc)..
2024-12-25 13:31:45.662[f5tts][debug][/data/f5tts/app/f5tts.py:153]  [mmm]民主党式的大撒钱效果是不错,但代价就是高通胀和民主党丢掉所有执政权力 will be inference with speaker(zhc)..
2024-12-25 13:31:45.662[f5tts][debug][/data/f5tts/app/f5tts.py:153] will be inference with speaker(zhc)..
2024-12-25 13:31:45.662[f5tts][debug][/data/f5tts/app/f5tts.py:153]更适合中国的政策选项可能是从政府开支中对普通人社会保障和养老的部分提供补贴和政策优惠,减少普通家庭在社会保障和养老储蓄方面的负担,这样可以让普通民众对未来有更多信心,从而增加消费 will be inference with speaker(zhc)..
2024-12-25 13:31:45.663[f5tts][debug][/data/f5tts/app/f5tts.py:153] will be inference with speaker(zhc)..
2024-12-25 13:31:47.491[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/100/13/158/36/ckrUL2YksIHoygrrLlgeG.wav
2024-12-25 13:31:47.544[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 13:31:47.544[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/100/13/158/36/ckrUL2YksIHoygrrLlgeG.wav
2024-12-25 13:31:47.545[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0009741783142089844, (7.748603820800781e-05)
2024-12-25 13:31:49.269[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/50/66/5/92/qeebYJA0N6zLgPt21_Yez.wav
2024-12-25 13:31:51.020[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/166/181/76/58/kNOwEW6eSWvibc8Tcqrz5.wav
2024-12-25 13:31:54.602[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/178/137/81/83/U8nermgpS4Wj8RyRbRJNK.wav
2024-12-25 13:31:54.627[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /api/infer_stream cost 8.995679140090942, (6.389617919921875e-05)
2024-12-25 13:32:00.316[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 13:32:00.317[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/50/66/5/92/qeebYJA0N6zLgPt21_Yez.wav
2024-12-25 13:32:00.317[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0007762908935546875, (4.601478576660156e-05)
2024-12-25 13:32:06.196[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 13:32:06.197[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/166/181/76/58/kNOwEW6eSWvibc8Tcqrz5.wav
2024-12-25 13:32:06.197[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0006816387176513672, (4.839897155761719e-05)
2024-12-25 13:32:13.849[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 13:32:13.850[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/178/137/81/83/U8nermgpS4Wj8RyRbRJNK.wav
2024-12-25 13:32:13.850[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0006368160247802734, (4.7206878662109375e-05)
2024-12-25 13:39:46.454[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/'
2024-12-25 13:39:46.462[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access / cost 0.008327007293701172, (6.461143493652344e-05)
2024-12-25 13:39:46.486[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/css/myapp.css'
2024-12-25 13:39:46.488[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /css/myapp.css cost 0.0012793540954589844, (4.458427429199219e-05)
2024-12-25 13:39:46.488[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/bricks/bricks.js'
2024-12-25 13:39:46.495[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /bricks/bricks.js cost 0.006165742874145508, (3.0279159545898438e-05)
2024-12-25 13:39:47.703[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/bricks/3parties/xterm.js.map'
2024-12-25 13:39:47.704[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /bricks/3parties/xterm.js.map cost 0.0008373260498046875, (3.719329833984375e-05)
2024-12-25 13:39:47.728[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/tts.ui'
2024-12-25 13:39:47.731[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /tts.ui cost 0.002407550811767578, (3.695487976074219e-05)
2024-12-25 13:39:47.754[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/get_speakers.dspy'
2024-12-25 13:39:47.755[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /get_speakers.dspy cost 0.0013670921325683594, (3.7670135498046875e-05)
2024-12-25 13:40:35.693[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/api/inference'
2024-12-25 13:40:35.697[f5tts][debug][/data/f5tts/app/f5tts.py:68] detect_language():isReliable=True, textBytesFound=622, details=(('Chinese', 'zh', 98, 2029.0), ('Unknown', 'un', 0, 0.0), ('Unknown', 'un', 0, 0.0))
2024-12-25 13:40:35.699[f5tts][debug][/data/f5tts/app/f5tts.py:155]如今中国正在面临如何刺激消费、如何继续发展服务业来更好的扩大就业的问题,美国医疗产业的现状正是中国应极力避免的反例 will be inference with speaker(zhc)..
2024-12-25 13:40:35.699[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:40:35.699[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:40:35.700[f5tts][debug][/data/f5tts/app/f5tts.py:155]  [董洁]未来几年,在国外贸易壁垒高企的情况下如何刺激国内消费 will be inference with speaker(zhc)..
2024-12-25 13:40:35.700[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:40:35.700[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:40:35.700[f5tts][debug][/data/f5tts/app/f5tts.py:155]  [mmm]民主党式的大撒钱效果是不错,但代价就是高通胀和民主党丢掉所有执政权力 will be inference with speaker(zhc)..
2024-12-25 13:40:35.700[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:40:35.700[f5tts][debug][/data/f5tts/app/f5tts.py:155]更适合中国的政策选项可能是从政府开支中对普通人社会保障和养老的部分提供补贴和政策优惠,减少普通家庭在社会保障和养老储蓄方面的负担,这样可以让普通民众对未来有更多信心,从而增加消费 will be inference with speaker(zhc)..
2024-12-25 13:40:35.700[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:40:44.412[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/136/122/113/34/z56DMNnBFYhNY2RhF7GFS.wav
2024-12-25 13:40:44.454[f5tts][debug][<string>:6]inference/index.dspy:return url=https://sage.opencomputing.cn:443/f5tts/idfile?path=/tmp/136/122/113/34/z56DMNnBFYhNY2RhF7GFS.wav
2024-12-25 13:40:44.454[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /api/inference cost 8.760746240615845, (5.125999450683594e-05)
2024-12-25 13:40:44.573[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 13:40:44.573[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/136/122/113/34/z56DMNnBFYhNY2RhF7GFS.wav
2024-12-25 13:40:44.574[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0008594989776611328, (4.7206878662109375e-05)
2024-12-25 13:52:10.714[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/api/inference'
2024-12-25 13:52:10.719[f5tts][debug][/data/f5tts/app/f5tts.py:68] detect_language():isReliable=True, textBytesFound=622, details=(('Chinese', 'zh', 98, 2029.0), ('Unknown', 'un', 0, 0.0), ('Unknown', 'un', 0, 0.0))
2024-12-25 13:52:10.721[f5tts][debug][/data/f5tts/app/f5tts.py:155]如今中国正在面临如何刺激消费、如何继续发展服务业来更好的扩大就业的问题,美国医疗产业的现状正是中国应极力避免的反例 will be inference with speaker(zhc)..
2024-12-25 13:52:10.721[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:52:10.721[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:52:10.722[f5tts][debug][/data/f5tts/app/f5tts.py:155]  [[董洁]]未来几年,在国外贸易壁垒高企的情况下如何刺激国内消费 will be inference with speaker(zhc)..
2024-12-25 13:52:10.722[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:52:10.722[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:52:10.722[f5tts][debug][/data/f5tts/app/f5tts.py:155]  [[mmm]]民主党式的大撒钱效果是不错,但代价就是高通胀和民主党丢掉所有执政权力 will be inference with speaker(zhc)..
2024-12-25 13:52:10.722[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:52:10.722[f5tts][debug][/data/f5tts/app/f5tts.py:155]更适合中国的政策选项可能是从政府开支中对普通人社会保障和养老的部分提供补贴和政策优惠,减少普通家庭在社会保障和养老储蓄方面的负担,这样可以让普通民众对未来有更多信心,从而增加消费 will be inference with speaker(zhc)..
2024-12-25 13:52:10.723[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:52:19.713[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/86/176/160/78/trL-6MgfmJyGbh2cXxANz.wav
2024-12-25 13:52:19.767[f5tts][debug][<string>:6]inference/index.dspy:return url=https://sage.opencomputing.cn:443/f5tts/idfile?path=/tmp/86/176/160/78/trL-6MgfmJyGbh2cXxANz.wav
2024-12-25 13:52:19.768[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /api/inference cost 9.053251504898071, (7.557868957519531e-05)
2024-12-25 13:52:19.890[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 13:52:19.891[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/86/176/160/78/trL-6MgfmJyGbh2cXxANz.wav
2024-12-25 13:52:19.892[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0009317398071289062, (5.793571472167969e-05)
2024-12-25 13:52:49.874[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/tts_stream.ui'
2024-12-25 13:52:49.878[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /tts_stream.ui cost 0.004235982894897461, (5.626678466796875e-05)
2024-12-25 13:52:49.908[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/get_speakers.dspy'
2024-12-25 13:52:49.910[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /get_speakers.dspy cost 0.00153350830078125, (4.57763671875e-05)
2024-12-25 13:53:01.739[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/api/infer_stream'
2024-12-25 13:53:01.769[f5tts][debug][<string>:2]params_kw={'speaker': 'zhc', 'prompt': '如今中国正在面临如何刺激消费、如何继续发展服务业来更好的扩大就业的问题,美国医疗产业的现状正是中国应极力避免的反例。\r\n\r\n\u3000\u3000[[董洁]]未来几年,在国外贸易壁垒高企的情况下如何刺激国内消费?\r\n\r\n\u3000\u3000[[mmm]]民主党式的大撒钱效果是不错,但代价就是高通胀和民主党丢掉所有执政权力。\r\n更适合中国的政策选项可能是从政府开支中对普通人社会保障和养老的部分提供补贴和政策优惠减少普通家庭在社会保障和养老储蓄方面的负担这样可以让普通民众对未来有更多信心从而增加消费。', '_webbricks_': '1', 'width': '1286', 'height': '1015', '_is_mobile': '0'}
2024-12-25 13:53:01.769[f5tts][debug][/data/f5tts/app/f5tts.py:68] detect_language():isReliable=True, textBytesFound=622, details=(('Chinese', 'zh', 98, 2029.0), ('Unknown', 'un', 0, 0.0), ('Unknown', 'un', 0, 0.0))
2024-12-25 13:53:01.770[f5tts][debug][/data/f5tts/app/f5tts.py:155]如今中国正在面临如何刺激消费、如何继续发展服务业来更好的扩大就业的问题,美国医疗产业的现状正是中国应极力避免的反例 will be inference with speaker(zhc)..
2024-12-25 13:53:01.770[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:53:01.771[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:53:01.771[f5tts][debug][/data/f5tts/app/f5tts.py:155]  [[董洁]]未来几年,在国外贸易壁垒高企的情况下如何刺激国内消费 will be inference with speaker(zhc)..
2024-12-25 13:53:01.771[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:53:01.771[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:53:01.771[f5tts][debug][/data/f5tts/app/f5tts.py:155]  [[mmm]]民主党式的大撒钱效果是不错,但代价就是高通胀和民主党丢掉所有执政权力 will be inference with speaker(zhc)..
2024-12-25 13:53:01.771[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:53:01.771[f5tts][debug][/data/f5tts/app/f5tts.py:155]更适合中国的政策选项可能是从政府开支中对普通人社会保障和养老的部分提供补贴和政策优惠,减少普通家庭在社会保障和养老储蓄方面的负担,这样可以让普通民众对未来有更多信心,从而增加消费 will be inference with speaker(zhc)..
2024-12-25 13:53:01.772[f5tts][debug][/data/f5tts/app/f5tts.py:155] will be inference with speaker(zhc)..
2024-12-25 13:53:03.523[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/10/109/70/89/5ljTKPc-TJx2rgSTHmIR6.wav
2024-12-25 13:53:03.585[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 13:53:03.586[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/10/109/70/89/5ljTKPc-TJx2rgSTHmIR6.wav
2024-12-25 13:53:03.587[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0009875297546386719, (6.985664367675781e-05)
2024-12-25 13:53:05.340[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/15/4/133/76/yGiKrhJCP-Nb_x-XnMApD.wav
2024-12-25 13:53:07.089[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/83/97/37/33/3oiMvJjVUHbHBCfDvn9pj.wav
2024-12-25 13:53:10.582[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/72/172/3/48/dLBvLa62gLndOKROIcQU-.wav
2024-12-25 13:53:10.609[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /api/infer_stream cost 8.869414567947388, (4.458427429199219e-05)
2024-12-25 13:53:16.362[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 13:53:16.363[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/15/4/133/76/yGiKrhJCP-Nb_x-XnMApD.wav
2024-12-25 13:53:16.363[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0009305477142333984, (4.982948303222656e-05)
2024-12-25 13:53:22.248[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 13:53:22.249[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/83/97/37/33/3oiMvJjVUHbHBCfDvn9pj.wav
2024-12-25 13:53:22.249[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0007755756378173828, (5.2928924560546875e-05)
2024-12-25 13:53:29.910[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 13:53:29.910[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/72/172/3/48/dLBvLa62gLndOKROIcQU-.wav
2024-12-25 13:53:29.911[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0008556842803955078, (5.078315734863281e-05)
2024-12-25 13:57:13.353[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/'
2024-12-25 13:57:13.363[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(129.204.118.204) None access / cost 0.009201526641845703, (7.915496826171875e-05)
2024-12-25 13:57:13.415[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/bricks/3parties/xterm.css'
2024-12-25 13:57:13.417[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(129.204.118.204) None access /bricks/3parties/xterm.css cost 0.002035379409790039, (5.6743621826171875e-05)
2024-12-25 13:57:13.463[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/bricks/3parties/video-js.css'
2024-12-25 13:57:13.465[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(129.204.118.204) None access /bricks/3parties/video-js.css cost 0.0025320053100585938, (4.8160552978515625e-05)
2024-12-25 13:57:13.500[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/bricks/css/bricks.css'
2024-12-25 13:57:13.502[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(42.194.192.163) None access /bricks/css/bricks.css cost 0.0015037059783935547, (4.696846008300781e-05)
2024-12-25 13:57:13.504[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/css/myapp.css'
2024-12-25 13:57:13.505[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(129.204.118.204) None access /css/myapp.css cost 0.0007126331329345703, (4.57763671875e-05)
2024-12-25 13:57:13.514[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/bricks/3parties/marked.min.js'
2024-12-25 13:57:13.516[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(27.44.122.167) None access /bricks/3parties/marked.min.js cost 0.0022568702697753906, (4.649162292480469e-05)
2024-12-25 13:57:13.518[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/bricks/3parties/xterm.js'
2024-12-25 13:57:13.528[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/bricks/3parties/video.min.js'
2024-12-25 13:57:13.530[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(27.44.122.167) None access /bricks/3parties/xterm.js cost 0.011506319046020508, (4.029273986816406e-05)
2024-12-25 13:57:13.550[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/bricks/3parties/recorder.wav.min.js'
2024-12-25 13:57:13.551[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(14.152.91.244) None access /bricks/3parties/video.min.js cost 0.022145509719848633, (5.459785461425781e-05)
2024-12-25 13:57:13.552[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/bricks/bricks.js'
2024-12-25 13:57:13.556[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(42.194.192.163) None access /bricks/3parties/recorder.wav.min.js cost 0.0053098201751708984, (5.745887756347656e-05)
2024-12-25 13:57:13.562[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(129.204.118.204) None access /bricks/bricks.js cost 0.00963449478149414, (5.0067901611328125e-05)
2024-12-25 13:57:13.595[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/js/myapp.js'
2024-12-25 13:57:13.597[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(129.204.118.204) None access /js/myapp.js cost 0.0014917850494384766, (4.4345855712890625e-05)
2024-12-25 13:57:42.760[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/api/infer_stream'
2024-12-25 13:57:42.788[f5tts][debug][<string>:2]params_kw={'speaker': 'zhc', 'prompt': '如今中国正在面临如何刺激消费、如何继续发展服务业来更好的扩大就业的问题,美国医疗产业的现状正是中国应极力避免的反例。\r\n\r\n\u3000\u3000[[董洁]]未来几年,在国外贸易壁垒高企的情况下如何刺激国内消费?\r\n\r\n\u3000\u3000[[mmm]]民主党式的大撒钱效果是不错,但代价就是高通胀和民主党丢掉所有执政权力。\r\n更适合中国的政策选项可能是从政府开支中对普通人社会保障和养老的部分提供补贴和政策优惠减少普通家庭在社会保障和养老储蓄方面的负担这样可以让普通民众对未来有更多信心从而增加消费。', '_webbricks_': '1', 'width': '1286', 'height': '1015', '_is_mobile': '0'}
2024-12-25 13:57:42.789[f5tts][debug][/data/f5tts/app/f5tts.py:68] detect_language():isReliable=True, textBytesFound=622, details=(('Chinese', 'zh', 98, 2029.0), ('Unknown', 'un', 0, 0.0), ('Unknown', 'un', 0, 0.0))
2024-12-25 13:57:42.791[f5tts][debug][/data/f5tts/app/f5tts.py:155]如今中国正在面临如何刺激消费、如何继续发展服务业来更好的扩大就业的问题,美国医疗产业的现状正是中国应极力避免的反例 inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 13:57:42.792[f5tts][debug][/data/f5tts/app/f5tts.py:155] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 13:57:42.792[f5tts][debug][/data/f5tts/app/f5tts.py:155] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 13:57:42.792[f5tts][debug][/data/f5tts/app/f5tts.py:155]  [[董洁]]未来几年,在国外贸易壁垒高企的情况下如何刺激国内消费 inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 13:57:42.792[f5tts][debug][/data/f5tts/app/f5tts.py:155] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 13:57:42.792[f5tts][debug][/data/f5tts/app/f5tts.py:155] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 13:57:42.792[f5tts][debug][/data/f5tts/app/f5tts.py:155]  [[mmm]]民主党式的大撒钱效果是不错,但代价就是高通胀和民主党丢掉所有执政权力 inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 13:57:42.792[f5tts][debug][/data/f5tts/app/f5tts.py:155] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 13:57:42.793[f5tts][debug][/data/f5tts/app/f5tts.py:155]更适合中国的政策选项可能是从政府开支中对普通人社会保障和养老的部分提供补贴和政策优惠,减少普通家庭在社会保障和养老储蓄方面的负担,这样可以让普通民众对未来有更多信心,从而增加消费 inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 13:57:42.793[f5tts][debug][/data/f5tts/app/f5tts.py:155] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 13:57:44.672[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/64/28/136/25/5yohXK_j_a5Sv4COMWYYh.wav
2024-12-25 13:57:44.725[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 13:57:44.726[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/64/28/136/25/5yohXK_j_a5Sv4COMWYYh.wav
2024-12-25 13:57:44.726[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0012254714965820312, (5.936622619628906e-05)
2024-12-25 13:57:46.459[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/50/21/125/70/540x3QaxRK-Wl1-dxsrxR.wav
2024-12-25 13:57:48.230[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/85/40/82/31/zLPl0cKb7EOhgGqODFEm2.wav
2024-12-25 13:57:51.756[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/100/185/33/44/3NNPuk5tsUf_gsKTuE5_C.wav
2024-12-25 13:57:51.781[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /api/infer_stream cost 9.020841836929321, (5.1021575927734375e-05)
2024-12-25 13:57:57.502[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 13:57:57.503[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/50/21/125/70/540x3QaxRK-Wl1-dxsrxR.wav
2024-12-25 13:57:57.503[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0007576942443847656, (5.221366882324219e-05)
2024-12-25 13:58:03.404[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 13:58:03.404[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/85/40/82/31/zLPl0cKb7EOhgGqODFEm2.wav
2024-12-25 13:58:03.405[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0007448196411132812, (4.673004150390625e-05)
2024-12-25 13:58:11.061[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 13:58:11.062[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/100/185/33/44/3NNPuk5tsUf_gsKTuE5_C.wav
2024-12-25 13:58:11.062[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0006740093231201172, (4.5299530029296875e-05)
2024-12-25 14:00:51.181[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/api/infer_stream'
2024-12-25 14:00:51.217[f5tts][debug][<string>:2]params_kw={'speaker': 'zhc', 'prompt': '如今中国正在面临如何刺激消费、如何继续发展服务业来更好的扩大就业的问题,美国医疗产业的现状正是中国应极力避免的反例。\r\n\r\n\u3000\u3000[[董洁]]未来几年,在国外贸易壁垒高企的情况下如何刺激国内消费?\r\n\r\n\u3000\u3000[[mmm]]民主党式的大撒钱效果是不错,但代价就是高通胀和民主党丢掉所有执政权力。\r\n更适合中国的政策选项可能是从政府开支中对普通人社会保障和养老的部分提供补贴和政策优惠减少普通家庭在社会保障和养老储蓄方面的负担这样可以让普通民众对未来有更多信心从而增加消费。', '_webbricks_': '1', 'width': '1286', 'height': '1015', '_is_mobile': '0'}
2024-12-25 14:00:51.218[f5tts][debug][/data/f5tts/app/f5tts.py:68] detect_language():isReliable=True, textBytesFound=622, details=(('Chinese', 'zh', 98, 2029.0), ('Unknown', 'un', 0, 0.0), ('Unknown', 'un', 0, 0.0))
2024-12-25 14:00:51.220[f5tts][debug][/data/f5tts/app/f5tts.py:156]如今中国正在面临如何刺激消费、如何继续发展服务业来更好的扩大就业的问题,美国医疗产业的现状正是中国应极力避免的反例 inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:00:51.220[f5tts][debug][/data/f5tts/app/f5tts.py:156] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:00:51.220[f5tts][debug][/data/f5tts/app/f5tts.py:156] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:00:51.220[f5tts][debug][/data/f5tts/app/f5tts.py:156]  [[董洁]]未来几年,在国外贸易壁垒高企的情况下如何刺激国内消费 inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:00:51.220[f5tts][debug][/data/f5tts/app/f5tts.py:156] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:00:51.221[f5tts][debug][/data/f5tts/app/f5tts.py:156] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:00:51.221[f5tts][debug][/data/f5tts/app/f5tts.py:156]  [[mmm]]民主党式的大撒钱效果是不错,但代价就是高通胀和民主党丢掉所有执政权力 inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:00:51.221[f5tts][debug][/data/f5tts/app/f5tts.py:156] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:00:51.221[f5tts][debug][/data/f5tts/app/f5tts.py:156]更适合中国的政策选项可能是从政府开支中对普通人社会保障和养老的部分提供补贴和政策优惠,减少普通家庭在社会保障和养老储蓄方面的负担,这样可以让普通民众对未来有更多信心,从而增加消费 inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:00:51.221[f5tts][debug][/data/f5tts/app/f5tts.py:156] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:00:53.057[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/87/80/167/0/1WbLM9qhCBTWj1Ffhefsl.wav
2024-12-25 14:00:53.106[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 14:00:53.107[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/87/80/167/0/1WbLM9qhCBTWj1Ffhefsl.wav
2024-12-25 14:00:53.108[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0012960433959960938, (7.748603820800781e-05)
2024-12-25 14:00:54.872[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/55/153/62/80/qNbCuAFtv1KTk-Jmn1LR4.wav
2024-12-25 14:00:56.634[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/121/104/135/19/vt01w86d1k4yxN5imZWB2.wav
2024-12-25 14:01:00.179[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/13/119/151/94/Qh940GU61DwNY1E08jZoY.wav
2024-12-25 14:01:00.205[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /api/infer_stream cost 9.024420976638794, (7.939338684082031e-05)
2024-12-25 14:01:05.878[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 14:01:05.878[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/55/153/62/80/qNbCuAFtv1KTk-Jmn1LR4.wav
2024-12-25 14:01:05.879[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0007560253143310547, (4.7206878662109375e-05)
2024-12-25 14:01:11.756[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 14:01:11.757[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/121/104/135/19/vt01w86d1k4yxN5imZWB2.wav
2024-12-25 14:01:11.757[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0006923675537109375, (4.220008850097656e-05)
2024-12-25 14:01:19.405[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 14:01:19.406[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/13/119/151/94/Qh940GU61DwNY1E08jZoY.wav
2024-12-25 14:01:19.406[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0006546974182128906, (4.100799560546875e-05)
2024-12-25 14:11:06.700[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/api/infer_stream'
2024-12-25 14:11:06.733[f5tts][debug][<string>:2]params_kw={'speaker': 'zhc', 'prompt': '如今中国正在面临如何刺激消费、如何继续发展服务业来更好的扩大就业的问题,美国医疗产业的现状正是中国应极力避免的反例。\r\n\r\n\u3000\u3000[[董洁]]未来几年,在国外贸易壁垒高企的情况下如何刺激国内消费?\r\n\r\n\u3000\u3000[[mmm]]民主党式的大撒钱效果是不错,但代价就是高通胀和民主党丢掉所有执政权力。\r\n更适合中国的政策选项可能是从政府开支中对普通人社会保障和养老的部分提供补贴和政策优惠减少普通家庭在社会保障和养老储蓄方面的负担这样可以让普通民众对未来有更多信心从而增加消费。', '_webbricks_': '1', 'width': '1286', 'height': '1015', '_is_mobile': '0'}
2024-12-25 14:11:06.734[f5tts][debug][/data/f5tts/app/f5tts.py:68] detect_language():isReliable=True, textBytesFound=622, details=(('Chinese', 'zh', 98, 2029.0), ('Unknown', 'un', 0, 0.0), ('Unknown', 'un', 0, 0.0))
2024-12-25 14:11:06.735[f5tts][debug][/data/f5tts/app/f5tts.py:157]如今中国正在面临如何刺激消费、如何继续发展服务业来更好的扩大就业的问题,美国医疗产业的现状正是中国应极力避免的反例 inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:11:06.736[f5tts][debug][/data/f5tts/app/f5tts.py:157] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:11:06.736[f5tts][debug][/data/f5tts/app/f5tts.py:157] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:11:06.736[f5tts][debug][/data/f5tts/app/f5tts.py:157]  [[董洁]]未来几年,在国外贸易壁垒高企的情况下如何刺激国内消费 inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:11:06.736[f5tts][debug][/data/f5tts/app/f5tts.py:157] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:11:06.736[f5tts][debug][/data/f5tts/app/f5tts.py:157] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:11:06.736[f5tts][debug][/data/f5tts/app/f5tts.py:157]  [[mmm]]民主党式的大撒钱效果是不错,但代价就是高通胀和民主党丢掉所有执政权力 inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:11:06.737[f5tts][debug][/data/f5tts/app/f5tts.py:157] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:11:06.737[f5tts][debug][/data/f5tts/app/f5tts.py:157]更适合中国的政策选项可能是从政府开支中对普通人社会保障和养老的部分提供补贴和政策优惠,减少普通家庭在社会保障和养老储蓄方面的负担,这样可以让普通民众对未来有更多信心,从而增加消费 inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:11:06.737[f5tts][debug][/data/f5tts/app/f5tts.py:157] inferences with speaker(zhc)..reg2='\\[\\[(\\w+)\\]\\]'
2024-12-25 14:11:08.685[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/172/3/65/84/nzJxpT0zjoM8tAudKfoYU.wav
2024-12-25 14:11:08.732[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 14:11:08.733[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/172/3/65/84/nzJxpT0zjoM8tAudKfoYU.wav
2024-12-25 14:11:08.734[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.001477956771850586, (6.747245788574219e-05)
2024-12-25 14:11:10.478[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/116/89/35/0/9WAyJsIjv9Aw1Pp89GWy4.wav
2024-12-25 14:11:12.322[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/174/137/81/96/Rwdx8_UlR3SJrB_wOv-RE.wav
2024-12-25 14:11:15.968[f5tts][debug][/data/f5tts/app/f5tts.py:59]/data/f5tts/files/tmp/160/161/193/48/GLWFI7kxAizLbCTIBI4Kh.wav
2024-12-25 14:11:15.994[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /api/infer_stream cost 9.29337739944458, (8.177757263183594e-05)
2024-12-25 14:11:21.510[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 14:11:21.511[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/116/89/35/0/9WAyJsIjv9Aw1Pp89GWy4.wav
2024-12-25 14:11:21.511[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0009818077087402344, (6.29425048828125e-05)
2024-12-25 14:11:27.392[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 14:11:27.393[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/174/137/81/96/Rwdx8_UlR3SJrB_wOv-RE.wav
2024-12-25 14:11:27.393[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0006704330444335938, (4.553794860839844e-05)
2024-12-25 14:11:35.055[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/idfile'
2024-12-25 14:11:35.056[f5tts][debug][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/filedownload.py:62]path_download():download filename=/data/f5tts/files/tmp/160/161/193/48/GLWFI7kxAizLbCTIBI4Kh.wav
2024-12-25 14:11:35.056[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /idfile cost 0.0007236003875732422, (5.14984130859375e-05)
2024-12-25 14:56:05.127[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/'
2024-12-25 14:56:05.136[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access / cost 0.00849604606628418, (7.295608520507812e-05)
2024-12-25 14:56:05.192[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/bricks/3parties/xterm.css'
2024-12-25 14:56:05.195[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /bricks/3parties/xterm.css cost 0.0018618106842041016, (4.935264587402344e-05)
2024-12-25 14:56:05.215[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/bricks/3parties/video.min.js'
2024-12-25 14:56:05.235[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /bricks/3parties/video.min.js cost 0.019681453704833984, (5.745887756347656e-05)
2024-12-25 14:56:05.245[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/bricks/3parties/video-js.css'
2024-12-25 14:56:05.245[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/bricks/css/bricks.css'
2024-12-25 14:56:05.247[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/bricks/3parties/marked.min.js'
2024-12-25 14:56:05.249[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/bricks/3parties/xterm.js'
2024-12-25 14:56:05.252[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /bricks/3parties/video-js.css cost 0.0068929195404052734, (4.4345855712890625e-05)
2024-12-25 14:56:05.254[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /bricks/css/bricks.css cost 0.007868528366088867, (2.6464462280273438e-05)
2024-12-25 14:56:05.254[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:151]checkAuth() called ... request.path='/css/myapp.css'
2024-12-25 14:56:05.261[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /css/myapp.css cost 0.006947994232177734, (2.9325485229492188e-05)
2024-12-25 14:56:05.262[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /bricks/3parties/marked.min.js cost 0.015009880065917969, (3.838539123535156e-05)
2024-12-25 14:56:05.264[f5tts][info][/d/f5tts/py3/lib/python3.12/site-packages/ahserver/auth_api.py:163]timecost=client(223.223.203.8) None access /bricks/3parties/xterm.js cost 0.015073299407958984, (3.62396240234375e-05)

15
logs/stderr.log Normal file
View File

@ -0,0 +1,15 @@
Building prefix dict from the default dictionary ...
Loading model from cache /tmp/jieba.cache
Loading model cost 0.794 seconds.
Prefix dict has been built successfully.
/d/f5tts/py3/lib/python3.12/site-packages/asyncssh/crypto/cipher.py:29: CryptographyDeprecationWarning: ARC4 has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.ARC4 and will be removed from cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.
from cryptography.hazmat.primitives.ciphers.algorithms import AES, ARC4
/d/f5tts/py3/lib/python3.12/site-packages/asyncssh/crypto/cipher.py:30: CryptographyDeprecationWarning: TripleDES has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and will be removed from cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.
from cryptography.hazmat.primitives.ciphers.algorithms import TripleDES
/d/f5tts/py3/lib/python3.12/site-packages/transformers/models/whisper/generation_whisper.py:509: FutureWarning: The input name `inputs` is deprecated. Please make sure to use `input_features` instead.
warnings.warn(
You have passed task=transcribe, but also have set `forced_decoder_ids` to [[1, None], [2, 50360]] which creates a conflict. `forced_decoder_ids` will be ignored in favor of task=transcribe.
Passing a tuple of `past_key_values` is deprecated and will be removed in Transformers v4.43.0. You should pass an instance of `EncoderDecoderCache` instead, e.g. `past_key_values=EncoderDecoderCache.from_legacy_cache(past_key_values)`.
The attention mask is not set and cannot be inferred from input because pad token is same as eos token. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.
/d/f5tts/py3/lib/python3.12/site-packages/transformers/models/whisper/generation_whisper.py:509: FutureWarning: The input name `inputs` is deprecated. Please make sure to use `input_features` instead.
warnings.warn(

View File

@ -1,13 +1,11 @@
[Unit]
Description=f5tts service
Documention=f5tts service to control f5tts service start or stoop
Wants=systemd-networkd.service
Requires=nginx.service
[Service]
Type=forking
ExecStart=su - ymq -c "/d/ymq/py/f5tts/run.sh f5tts.py"
ExecStop=su - ymq "/d/ymq/bin/killname f5tts.py"
ExecStart=su - f5tts -c "/data/f5tts/script/f5tts.sh"
ExecStop=su - f5tts "/d/f5tts/bin/killname app/f5tts.py"
[Install]
WantedBy=multi-user.target

5
script/f5tts.sh Executable file
View File

@ -0,0 +1,5 @@
#!/usr/bin/bash
/d/f5tts/bin/killname /data/f5tts/app/f5tts.py
/d/f5tts/py3/bin/python /data/f5tts/app/f5tts.py -w /data/f5tts > /data/f5tts/logs/stderr.log 2>&1 &
exit 0

4
script/install.sh Executable file
View File

@ -0,0 +1,4 @@
#!/usr/bin/bash
sudo cp f5tts.service /etc/systemd/system
sudo systemctl enable f5tts.service
sudo systemctl start f5tts

3
script/speakers.json Normal file
View File

@ -0,0 +1,3 @@
{
}

Binary file not shown.

31
wwwroot/add.ui Normal file
View File

@ -0,0 +1,31 @@
{
"widgettype":"Form",
"options":{
"height":"70%",
"title":"向知识库添加文件",
"description":"可以添加的文件类型有:文本文件(.txt数据文件(.csv)excel文件.xlsx, .xls)word文件.doc, .docx), 演示文件(.ppt, .pptx), pdf文件",
"method":"POST",
"submit_url":"{{entire_url('api/add')}}",
"fields":[
{
"name":"file_path",
"uitype":"file",
"required":true
},
{
"name":"userid",
"uitype":"str",
"label":"用户id",
"value":"user1",
"required":true
},
{
"name":"kdbname",
"uitype":"str",
"label":"知识库名",
"required":true,
"value":"testdb"
}
]
}
}

41
wwwroot/addvoice.ui Normal file
View File

@ -0,0 +1,41 @@
{
"widgettype":"VBox",
"options":{
"height":"100%"
},
"subwidgets":[
{
"widgettype":"Filler",
"options":{},
"subwidgets":[
{
"widgettype":"Form",
"id":"form",
"options":{
"title":"添加播音员",
"method":"POST",
"description":"通过输入播音员id录音和录音文字说明来添加播音员",
"submit_url":"{{entire_url('/api/addvoice')}}",
"fields":[
{
"name":"speaker",
"label":"播音员id",
"uitype":"str"
},
{
"name":"ref_voice",
"label":"语音",
"uitype":"audiorecorder"
},
{
"name":"ref_text",
"label":"语音文字",
"uitype":"text"
}
]
}
}
]
}
]
}

View File

@ -0,0 +1,11 @@
debug(f'{params_kw=}')
try:
speaker = params_kw.speaker
ref_audio = params_kw.ref_voice
ref_text = params_kw.ref_text
await add_voice(speaker, ref_audio, ref_text)
return UiMessage(title='Success', message='add voice success')
except Exception as e:
exception(f'{e=}')
return UiError(title='Error', message='add voice error')

View File

@ -0,0 +1,7 @@
debug(f'{params_kw=}')
async def g():
speaker = params_kw.speaker or 'main'
async for d in infer_stream(params_kw.prompt, speaker):
yield entire_url('/idfile') + f'?path={d}'
return await stream_response(request, g)

View File

@ -1,15 +1,6 @@
async def g():
async for d in infer_stream(params_kw.prompt):
nd = d.get('audio')
if nd:
yield nd
try:
resp = await stream_response(request, g, content_type='audio/mpeg')
return resp
except Exception as e:
exc = format_exc()
exception(f'{e=}\n{exc}')
return {
"status":"error",
"message":str(e)
}
# normal mode
speaker = params_kw.speaker or 'main'
path = await infer(params_kw.prompt, speaker)
ret = entire_url(f'/idfile?path={path}')
debug(f'inference/index.dspy:return url={ret}')
return ret

View File

@ -0,0 +1 @@
return get_speakers()

45
wwwroot/index.ui Normal file
View File

@ -0,0 +1,45 @@
{
"widgettype":"TabPanel",
"options":{
"tab_wide":"auto",
"interval":"15px",
"height":"100%",
"width":"100%",
"tab_pos":"top",
"items":[
{
"name":"add",
"label":"文本转语音",
"refresh":true,
"content":{
"widgettype":"urlwidget",
"options":{
"url":"{{entire_url('tts.ui')}}"
}
}
},
{
"name":"add1",
"label":"文本转语音(stream)",
"refresh":true,
"content":{
"widgettype":"urlwidget",
"options":{
"url":"{{entire_url('tts_stream.ui')}}"
}
}
},
{
"name":"query",
"label":"添加播音员",
"refresh":true,
"content":{
"widgettype":"urlwidget",
"options":{
"url":"{{entire_url('addvoice.ui')}}"
}
}
}
]
}
}

10
wwwroot/js/myapp.js Normal file
View File

@ -0,0 +1,10 @@
var set_response_text_url = function(w, resp){
schedule_once(async_set_response_text_url.bind(w, w, resp), 0.1);
}
var async_set_response_text_url = async function(w, resp){
console.log('arguments=', arguments);
var url = await resp.text();
w.set_url(url);
w.play();
}

28
wwwroot/query.ui Normal file
View File

@ -0,0 +1,28 @@
{
"widgettype":"Form",
"options":{
"height":"70%",
"submit_url":"{{entire_url('api/query')}}",
"fields":[
{
"name":"prompt",
"uitype":"text",
"required":true
},
{
"name":"userid",
"uitype":"str",
"label":"用户id",
"value":"user1",
"required":true
},
{
"name":"kdbname",
"uitype":"str",
"label":"知识库名",
"required":true,
"value":"testdb"
}
]
}
}

1
wwwroot/t.dspy Normal file
View File

@ -0,0 +1 @@
return entire_url('/idfile') + "?path=/trhr"

1
wwwroot/test1.dspy Normal file
View File

@ -0,0 +1 @@
return await test1()

56
wwwroot/tts.ui Normal file
View File

@ -0,0 +1,56 @@
{
"widgettype":"VBox",
"options":{
"height":"100%"
},
"subwidgets":[
{
"widgettype":"Filler",
"options":{},
"subwidgets":[
{
"widgettype":"Form",
"id":"form",
"options":{
"submit_url":"{{entire_url('/api/inference')}}",
"fields":[
{
"name":"speaker",
"label":"播音员",
"uitype":"code",
"value":"main",
"dataurl":"{{entire_url('/get_speakers.dspy')}}"
},
{
"name":"prompt",
"label":"文本",
"uitype":"text",
"uiparams":{
"rows":20,
"cols":80
}
}
]
}
}
]
},
{
"id":"audio",
"widgettype":"AudioPlayer",
"options":{
"height":"40px",
"auto_play":true
}
}
],
"binds":[
{
"wid":"form",
"event":"submited",
"actiontype":"script",
"target":"audio",
"script":"set_response_text_url(this, event.params);"
}
]
}

57
wwwroot/tts_stream.ui Normal file
View File

@ -0,0 +1,57 @@
{
"widgettype":"VBox",
"options":{
"height":"100%"
},
"subwidgets":[
{
"widgettype":"Filler",
"options":{},
"subwidgets":[
{
"widgettype":"Form",
"id":"form",
"options":{
"title":"流式返回",
"submit_url":"{{entire_url('/api/infer_stream')}}",
"fields":[
{
"name":"speaker",
"label":"播音员",
"uitype":"code",
"value":"main",
"dataurl":"{{entire_url('/get_speakers.dspy')}}"
},
{
"name":"prompt",
"label":"文本",
"uitype":"text",
"uiparams":{
"rows":20,
"cols":80
}
}
]
}
}
]
},
{
"id":"audio",
"widgettype":"AudioPlayer",
"options":{
"height":"40px",
"auto_play":true
}
}
],
"binds":[
{
"wid":"form",
"event":"submited",
"actiontype":"script",
"target":"audio",
"script":"console.log('this=', this, event);this.set_stream_urls(event.params)"
}
]
}