Skip to content

Commit 6bacab1

Browse files
authored
optimize(api): transfer client.py to “argParse" style (#890)
1 parent af1c8f7 commit 6bacab1

File tree

1 file changed

+123
-0
lines changed

1 file changed

+123
-0
lines changed

examples/api/postScript.py

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
import argparse
2+
import datetime
3+
import os
4+
import zipfile
5+
from io import BytesIO
6+
7+
import requests
8+
9+
chattts_service_host = os.environ.get("CHATTTS_SERVICE_HOST", "127.0.0.1")
10+
chattts_service_port = os.environ.get("CHATTTS_SERVICE_PORT", "9900")
11+
12+
CHATTTS_URL = f"http://{chattts_service_host}:{chattts_service_port}/generate_voice"
13+
14+
15+
def parse_arguments():
16+
parser = argparse.ArgumentParser(description="HTTP client for ChatTTS service")
17+
parser.add_argument("--text", type=str, nargs='+', required=True, help="Text to synthesize")
18+
parser.add_argument("--audio_seed", type=int, required=True, help="Audio generation seed")
19+
parser.add_argument("--text_seed", type=int, required=True, help="Text generation seed")
20+
parser.add_argument("--stream", type=bool, default=False, help="Enable/disable streaming")
21+
parser.add_argument("--lang", type=str, default=None, help="Language code for text")
22+
parser.add_argument("--skip_refine_text", type=bool, default=True, help="Skip text refinement")
23+
parser.add_argument("--refine_text_only", type=bool, default=False, help="Only refine text")
24+
parser.add_argument("--use_decoder", type=bool, default=True, help="Use decoder during inference")
25+
parser.add_argument("--do_text_normalization", type=bool, default=True, help="Enable text normalization")
26+
parser.add_argument("--do_homophone_replacement", type=bool, default=False, help="Enable homophone replacement")
27+
parser.add_argument("--tgt", type=str, default="./output", help="Target directory to save output files")
28+
parser.add_argument("--filename", type=str, default="test.mp3", help="Target directory to save output files")
29+
30+
# Refinement text parameters
31+
parser.add_argument("--refine_prompt", type=str, default="", help="Prompt for text refinement")
32+
parser.add_argument("--refine_top_P", type=float, default=0.7, help="Top P value for text refinement")
33+
parser.add_argument("--refine_top_K", type=int, default=20, help="Top K value for text refinement")
34+
parser.add_argument("--refine_temperature", type=float, default=0.7, help="Temperature for text refinement")
35+
parser.add_argument("--refine_repetition_penalty", type=float, default=1.0,
36+
help="Repetition penalty for text refinement")
37+
parser.add_argument("--refine_max_new_token", type=int, default=384, help="Max new tokens for text refinement")
38+
parser.add_argument("--refine_min_new_token", type=int, default=0, help="Min new tokens for text refinement")
39+
parser.add_argument("--refine_show_tqdm", type=bool, default=True, help="Show progress bar for text refinement")
40+
parser.add_argument("--refine_ensure_non_empty", type=bool, default=True, help="Ensure non-empty output")
41+
parser.add_argument("--refine_stream_batch", type=int, default=24, help="Stream batch size for refinement")
42+
43+
# Infer code parameters
44+
parser.add_argument("--infer_prompt", type=str, default="[speed_5]", help="Prompt for inference")
45+
parser.add_argument("--infer_top_P", type=float, default=0.1, help="Top P value for inference")
46+
parser.add_argument("--infer_top_K", type=int, default=20, help="Top K value for inference")
47+
parser.add_argument("--infer_temperature", type=float, default=0.3, help="Temperature for inference")
48+
parser.add_argument("--infer_repetition_penalty", type=float, default=1.05, help="Repetition penalty for inference")
49+
parser.add_argument("--infer_max_new_token", type=int, default=2048, help="Max new tokens for inference")
50+
parser.add_argument("--infer_min_new_token", type=int, default=0, help="Min new tokens for inference")
51+
parser.add_argument("--infer_show_tqdm", type=bool, default=True, help="Show progress bar for inference")
52+
parser.add_argument("--infer_ensure_non_empty", type=bool, default=True, help="Ensure non-empty output")
53+
parser.add_argument("--infer_stream_batch", type=bool, default=True, help="Stream batch for inference")
54+
parser.add_argument("--infer_spk_emb", type=str, default=None, help="Speaker embedding for inference")
55+
56+
return parser.parse_args()
57+
58+
59+
60+
def main():
61+
args = parse_arguments()
62+
63+
# Main infer params
64+
body = {
65+
"text": args.text,
66+
"stream": args.stream,
67+
"lang": args.lang,
68+
"filename":args.filename,
69+
"skip_refine_text": args.skip_refine_text,
70+
"refine_text_only": args.refine_text_only,
71+
"use_decoder": args.use_decoder,
72+
"audio_seed": args.audio_seed,
73+
"text_seed": args.text_seed,
74+
"do_text_normalization": args.do_text_normalization,
75+
"do_homophone_replacement": args.do_homophone_replacement,
76+
}
77+
# Refinement text parameters
78+
params_refine_text = {
79+
"prompt": args.refine_prompt,
80+
"top_P": args.refine_top_P,
81+
"top_K": args.refine_top_K,
82+
"temperature": args.refine_temperature,
83+
"repetition_penalty": args.refine_repetition_penalty,
84+
"max_new_token": args.refine_max_new_token,
85+
"min_new_token": args.refine_min_new_token,
86+
"show_tqdm": args.refine_show_tqdm,
87+
"ensure_non_empty": args.refine_ensure_non_empty,
88+
"stream_batch": args.refine_stream_batch,
89+
}
90+
body["params_refine_text"] = params_refine_text
91+
92+
# Infer code parameters
93+
params_infer_code = {
94+
"prompt": args.infer_prompt,
95+
"top_P": args.infer_top_P,
96+
"top_K": args.infer_top_K,
97+
"temperature": args.infer_temperature,
98+
"repetition_penalty": args.infer_repetition_penalty,
99+
"max_new_token": args.infer_max_new_token,
100+
"min_new_token": args.infer_min_new_token,
101+
"show_tqdm": args.infer_show_tqdm,
102+
"ensure_non_empty": args.infer_ensure_non_empty,
103+
"stream_batch": args.infer_stream_batch,
104+
"spk_emb": args.infer_spk_emb,
105+
}
106+
body["params_infer_code"] = params_infer_code
107+
108+
try:
109+
response = requests.post(CHATTTS_URL, json=body)
110+
response.raise_for_status()
111+
with zipfile.ZipFile(BytesIO(response.content), "r") as zip_ref:
112+
tgt = args.tgt
113+
# filename=args.filename
114+
os.makedirs(tgt, exist_ok=True)
115+
zip_ref.extractall(tgt)
116+
print(f"Extracted files:{tgt}/{filename}")
117+
# print(tgt)
118+
except requests.exceptions.RequestException as e:
119+
print(f"Request Error: {e}")
120+
121+
122+
if __name__ == "__main__":
123+
main()

0 commit comments

Comments
 (0)