xinference 1.0.1__py3-none-any.whl → 1.2.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of xinference might be problematic. Click here for more details.

Files changed (343) hide show
  1. xinference/_compat.py +2 -0
  2. xinference/_version.py +3 -3
  3. xinference/api/restful_api.py +77 -71
  4. xinference/core/chat_interface.py +6 -1
  5. xinference/core/model.py +79 -19
  6. xinference/core/supervisor.py +172 -10
  7. xinference/core/utils.py +12 -8
  8. xinference/core/worker.py +102 -4
  9. xinference/deploy/cmdline.py +3 -1
  10. xinference/deploy/test/test_cmdline.py +56 -0
  11. xinference/isolation.py +24 -0
  12. xinference/model/audio/core.py +16 -0
  13. xinference/model/audio/cosyvoice.py +39 -6
  14. xinference/model/audio/f5tts.py +200 -0
  15. xinference/model/audio/f5tts_mlx.py +260 -0
  16. xinference/model/audio/fish_speech.py +36 -111
  17. xinference/model/audio/melotts.py +110 -0
  18. xinference/model/audio/model_spec.json +99 -3
  19. xinference/model/audio/model_spec_modelscope.json +27 -0
  20. xinference/model/audio/utils.py +32 -0
  21. xinference/model/audio/whisper.py +35 -10
  22. xinference/model/embedding/core.py +203 -142
  23. xinference/model/embedding/model_spec.json +7 -0
  24. xinference/model/embedding/model_spec_modelscope.json +8 -0
  25. xinference/model/image/core.py +69 -1
  26. xinference/model/image/model_spec.json +145 -4
  27. xinference/model/image/model_spec_modelscope.json +150 -4
  28. xinference/model/image/stable_diffusion/core.py +45 -13
  29. xinference/model/llm/__init__.py +4 -2
  30. xinference/model/llm/llm_family.json +536 -53
  31. xinference/model/llm/llm_family.py +15 -36
  32. xinference/model/llm/llm_family_modelscope.json +454 -20
  33. xinference/model/llm/memory.py +1 -1
  34. xinference/model/llm/mlx/core.py +248 -52
  35. xinference/model/llm/sglang/core.py +1 -0
  36. xinference/model/llm/transformers/chatglm.py +9 -5
  37. xinference/model/llm/transformers/cogagent.py +272 -0
  38. xinference/model/llm/transformers/core.py +2 -0
  39. xinference/model/llm/transformers/qwen2_vl.py +12 -1
  40. xinference/model/llm/transformers/utils.py +16 -8
  41. xinference/model/llm/utils.py +36 -4
  42. xinference/model/llm/vllm/core.py +53 -10
  43. xinference/model/llm/vllm/xavier/__init__.py +13 -0
  44. xinference/model/llm/vllm/xavier/allocator.py +74 -0
  45. xinference/model/llm/vllm/xavier/block.py +111 -0
  46. xinference/model/llm/vllm/xavier/block_manager.py +71 -0
  47. xinference/model/llm/vllm/xavier/block_tracker.py +129 -0
  48. xinference/model/llm/vllm/xavier/collective.py +74 -0
  49. xinference/model/llm/vllm/xavier/collective_manager.py +147 -0
  50. xinference/model/llm/vllm/xavier/engine.py +247 -0
  51. xinference/model/llm/vllm/xavier/executor.py +134 -0
  52. xinference/model/llm/vllm/xavier/scheduler.py +438 -0
  53. xinference/model/llm/vllm/xavier/test/__init__.py +13 -0
  54. xinference/model/llm/vllm/xavier/test/test_xavier.py +147 -0
  55. xinference/model/llm/vllm/xavier/transfer.py +319 -0
  56. xinference/model/video/diffusers.py +14 -0
  57. xinference/model/video/model_spec.json +15 -0
  58. xinference/model/video/model_spec_modelscope.json +16 -0
  59. xinference/thirdparty/cosyvoice/bin/average_model.py +92 -0
  60. xinference/thirdparty/cosyvoice/bin/export_jit.py +12 -2
  61. xinference/thirdparty/cosyvoice/bin/export_onnx.py +112 -0
  62. xinference/thirdparty/cosyvoice/bin/export_trt.sh +9 -0
  63. xinference/thirdparty/cosyvoice/bin/inference.py +5 -7
  64. xinference/thirdparty/cosyvoice/bin/spk2info.pt +0 -0
  65. xinference/thirdparty/cosyvoice/bin/train.py +42 -8
  66. xinference/thirdparty/cosyvoice/cli/cosyvoice.py +96 -25
  67. xinference/thirdparty/cosyvoice/cli/frontend.py +77 -30
  68. xinference/thirdparty/cosyvoice/cli/model.py +330 -80
  69. xinference/thirdparty/cosyvoice/dataset/dataset.py +6 -2
  70. xinference/thirdparty/cosyvoice/dataset/processor.py +76 -14
  71. xinference/thirdparty/cosyvoice/flow/decoder.py +92 -13
  72. xinference/thirdparty/cosyvoice/flow/flow.py +99 -9
  73. xinference/thirdparty/cosyvoice/flow/flow_matching.py +110 -13
  74. xinference/thirdparty/cosyvoice/flow/length_regulator.py +5 -4
  75. xinference/thirdparty/cosyvoice/hifigan/discriminator.py +140 -0
  76. xinference/thirdparty/cosyvoice/hifigan/generator.py +58 -42
  77. xinference/thirdparty/cosyvoice/hifigan/hifigan.py +67 -0
  78. xinference/thirdparty/cosyvoice/llm/llm.py +139 -6
  79. xinference/thirdparty/cosyvoice/tokenizer/assets/multilingual_zh_ja_yue_char_del.tiktoken +58836 -0
  80. xinference/thirdparty/cosyvoice/tokenizer/tokenizer.py +279 -0
  81. xinference/thirdparty/cosyvoice/transformer/embedding.py +2 -2
  82. xinference/thirdparty/cosyvoice/transformer/encoder_layer.py +7 -7
  83. xinference/thirdparty/cosyvoice/transformer/upsample_encoder.py +318 -0
  84. xinference/thirdparty/cosyvoice/utils/common.py +28 -1
  85. xinference/thirdparty/cosyvoice/utils/executor.py +69 -7
  86. xinference/thirdparty/cosyvoice/utils/file_utils.py +2 -12
  87. xinference/thirdparty/cosyvoice/utils/frontend_utils.py +9 -5
  88. xinference/thirdparty/cosyvoice/utils/losses.py +20 -0
  89. xinference/thirdparty/cosyvoice/utils/scheduler.py +1 -2
  90. xinference/thirdparty/cosyvoice/utils/train_utils.py +101 -45
  91. xinference/thirdparty/f5_tts/api.py +166 -0
  92. xinference/thirdparty/f5_tts/configs/E2TTS_Base_train.yaml +44 -0
  93. xinference/thirdparty/f5_tts/configs/E2TTS_Small_train.yaml +44 -0
  94. xinference/thirdparty/f5_tts/configs/F5TTS_Base_train.yaml +46 -0
  95. xinference/thirdparty/f5_tts/configs/F5TTS_Small_train.yaml +46 -0
  96. xinference/thirdparty/f5_tts/eval/README.md +49 -0
  97. xinference/thirdparty/f5_tts/eval/ecapa_tdnn.py +330 -0
  98. xinference/thirdparty/f5_tts/eval/eval_infer_batch.py +207 -0
  99. xinference/thirdparty/f5_tts/eval/eval_infer_batch.sh +13 -0
  100. xinference/thirdparty/f5_tts/eval/eval_librispeech_test_clean.py +84 -0
  101. xinference/thirdparty/f5_tts/eval/eval_seedtts_testset.py +84 -0
  102. xinference/thirdparty/f5_tts/eval/utils_eval.py +405 -0
  103. xinference/thirdparty/f5_tts/infer/README.md +191 -0
  104. xinference/thirdparty/f5_tts/infer/SHARED.md +74 -0
  105. xinference/thirdparty/f5_tts/infer/examples/basic/basic.toml +11 -0
  106. xinference/thirdparty/f5_tts/infer/examples/basic/basic_ref_en.wav +0 -0
  107. xinference/thirdparty/f5_tts/infer/examples/basic/basic_ref_zh.wav +0 -0
  108. xinference/thirdparty/f5_tts/infer/examples/multi/country.flac +0 -0
  109. xinference/thirdparty/f5_tts/infer/examples/multi/main.flac +0 -0
  110. xinference/thirdparty/f5_tts/infer/examples/multi/story.toml +19 -0
  111. xinference/thirdparty/f5_tts/infer/examples/multi/story.txt +1 -0
  112. xinference/thirdparty/f5_tts/infer/examples/multi/town.flac +0 -0
  113. xinference/thirdparty/f5_tts/infer/examples/vocab.txt +2545 -0
  114. xinference/thirdparty/f5_tts/infer/infer_cli.py +226 -0
  115. xinference/thirdparty/f5_tts/infer/infer_gradio.py +851 -0
  116. xinference/thirdparty/f5_tts/infer/speech_edit.py +193 -0
  117. xinference/thirdparty/f5_tts/infer/utils_infer.py +538 -0
  118. xinference/thirdparty/f5_tts/model/__init__.py +10 -0
  119. xinference/thirdparty/f5_tts/model/backbones/README.md +20 -0
  120. xinference/thirdparty/f5_tts/model/backbones/dit.py +163 -0
  121. xinference/thirdparty/f5_tts/model/backbones/mmdit.py +146 -0
  122. xinference/thirdparty/f5_tts/model/backbones/unett.py +219 -0
  123. xinference/thirdparty/f5_tts/model/cfm.py +285 -0
  124. xinference/thirdparty/f5_tts/model/dataset.py +319 -0
  125. xinference/thirdparty/f5_tts/model/modules.py +658 -0
  126. xinference/thirdparty/f5_tts/model/trainer.py +366 -0
  127. xinference/thirdparty/f5_tts/model/utils.py +185 -0
  128. xinference/thirdparty/f5_tts/scripts/count_max_epoch.py +33 -0
  129. xinference/thirdparty/f5_tts/scripts/count_params_gflops.py +39 -0
  130. xinference/thirdparty/f5_tts/socket_server.py +159 -0
  131. xinference/thirdparty/f5_tts/train/README.md +77 -0
  132. xinference/thirdparty/f5_tts/train/datasets/prepare_csv_wavs.py +139 -0
  133. xinference/thirdparty/f5_tts/train/datasets/prepare_emilia.py +230 -0
  134. xinference/thirdparty/f5_tts/train/datasets/prepare_libritts.py +92 -0
  135. xinference/thirdparty/f5_tts/train/datasets/prepare_ljspeech.py +65 -0
  136. xinference/thirdparty/f5_tts/train/datasets/prepare_wenetspeech4tts.py +125 -0
  137. xinference/thirdparty/f5_tts/train/finetune_cli.py +174 -0
  138. xinference/thirdparty/f5_tts/train/finetune_gradio.py +1846 -0
  139. xinference/thirdparty/f5_tts/train/train.py +75 -0
  140. xinference/thirdparty/fish_speech/fish_speech/conversation.py +94 -83
  141. xinference/thirdparty/fish_speech/fish_speech/models/text2semantic/llama.py +63 -20
  142. xinference/thirdparty/fish_speech/fish_speech/text/clean.py +1 -26
  143. xinference/thirdparty/fish_speech/fish_speech/text/spliter.py +1 -1
  144. xinference/thirdparty/fish_speech/fish_speech/tokenizer.py +152 -0
  145. xinference/thirdparty/fish_speech/fish_speech/train.py +2 -2
  146. xinference/thirdparty/fish_speech/fish_speech/webui/manage.py +1 -1
  147. xinference/thirdparty/fish_speech/tools/{post_api.py → api_client.py} +7 -13
  148. xinference/thirdparty/fish_speech/tools/api_server.py +98 -0
  149. xinference/thirdparty/fish_speech/tools/download_models.py +5 -5
  150. xinference/thirdparty/fish_speech/tools/fish_e2e.py +2 -2
  151. xinference/thirdparty/fish_speech/tools/inference_engine/__init__.py +192 -0
  152. xinference/thirdparty/fish_speech/tools/inference_engine/reference_loader.py +125 -0
  153. xinference/thirdparty/fish_speech/tools/inference_engine/utils.py +39 -0
  154. xinference/thirdparty/fish_speech/tools/inference_engine/vq_manager.py +57 -0
  155. xinference/thirdparty/fish_speech/tools/llama/eval_in_context.py +2 -2
  156. xinference/thirdparty/fish_speech/tools/llama/generate.py +117 -89
  157. xinference/thirdparty/fish_speech/tools/run_webui.py +104 -0
  158. xinference/thirdparty/fish_speech/tools/schema.py +11 -28
  159. xinference/thirdparty/fish_speech/tools/server/agent/__init__.py +57 -0
  160. xinference/thirdparty/fish_speech/tools/server/agent/generate.py +119 -0
  161. xinference/thirdparty/fish_speech/tools/server/agent/generation_utils.py +122 -0
  162. xinference/thirdparty/fish_speech/tools/server/agent/pre_generation_utils.py +72 -0
  163. xinference/thirdparty/fish_speech/tools/server/api_utils.py +75 -0
  164. xinference/thirdparty/fish_speech/tools/server/exception_handler.py +27 -0
  165. xinference/thirdparty/fish_speech/tools/server/inference.py +45 -0
  166. xinference/thirdparty/fish_speech/tools/server/model_manager.py +122 -0
  167. xinference/thirdparty/fish_speech/tools/server/model_utils.py +129 -0
  168. xinference/thirdparty/fish_speech/tools/server/views.py +246 -0
  169. xinference/thirdparty/fish_speech/tools/webui/__init__.py +173 -0
  170. xinference/thirdparty/fish_speech/tools/webui/inference.py +91 -0
  171. xinference/thirdparty/fish_speech/tools/webui/variables.py +14 -0
  172. xinference/thirdparty/matcha/utils/utils.py +2 -2
  173. xinference/thirdparty/melo/api.py +135 -0
  174. xinference/thirdparty/melo/app.py +61 -0
  175. xinference/thirdparty/melo/attentions.py +459 -0
  176. xinference/thirdparty/melo/commons.py +160 -0
  177. xinference/thirdparty/melo/configs/config.json +94 -0
  178. xinference/thirdparty/melo/data/example/metadata.list +20 -0
  179. xinference/thirdparty/melo/data_utils.py +413 -0
  180. xinference/thirdparty/melo/download_utils.py +67 -0
  181. xinference/thirdparty/melo/infer.py +25 -0
  182. xinference/thirdparty/melo/init_downloads.py +14 -0
  183. xinference/thirdparty/melo/losses.py +58 -0
  184. xinference/thirdparty/melo/main.py +36 -0
  185. xinference/thirdparty/melo/mel_processing.py +174 -0
  186. xinference/thirdparty/melo/models.py +1030 -0
  187. xinference/thirdparty/melo/modules.py +598 -0
  188. xinference/thirdparty/melo/monotonic_align/__init__.py +16 -0
  189. xinference/thirdparty/melo/monotonic_align/core.py +46 -0
  190. xinference/thirdparty/melo/preprocess_text.py +135 -0
  191. xinference/thirdparty/melo/split_utils.py +174 -0
  192. xinference/thirdparty/melo/text/__init__.py +35 -0
  193. xinference/thirdparty/melo/text/chinese.py +199 -0
  194. xinference/thirdparty/melo/text/chinese_bert.py +107 -0
  195. xinference/thirdparty/melo/text/chinese_mix.py +253 -0
  196. xinference/thirdparty/melo/text/cleaner.py +36 -0
  197. xinference/thirdparty/melo/text/cleaner_multiling.py +110 -0
  198. xinference/thirdparty/melo/text/cmudict.rep +129530 -0
  199. xinference/thirdparty/melo/text/cmudict_cache.pickle +0 -0
  200. xinference/thirdparty/melo/text/english.py +284 -0
  201. xinference/thirdparty/melo/text/english_bert.py +39 -0
  202. xinference/thirdparty/melo/text/english_utils/abbreviations.py +35 -0
  203. xinference/thirdparty/melo/text/english_utils/number_norm.py +97 -0
  204. xinference/thirdparty/melo/text/english_utils/time_norm.py +47 -0
  205. xinference/thirdparty/melo/text/es_phonemizer/base.py +140 -0
  206. xinference/thirdparty/melo/text/es_phonemizer/cleaner.py +109 -0
  207. xinference/thirdparty/melo/text/es_phonemizer/es_symbols.json +79 -0
  208. xinference/thirdparty/melo/text/es_phonemizer/es_symbols.txt +1 -0
  209. xinference/thirdparty/melo/text/es_phonemizer/es_symbols_v2.json +83 -0
  210. xinference/thirdparty/melo/text/es_phonemizer/es_to_ipa.py +12 -0
  211. xinference/thirdparty/melo/text/es_phonemizer/example_ipa.txt +400 -0
  212. xinference/thirdparty/melo/text/es_phonemizer/gruut_wrapper.py +253 -0
  213. xinference/thirdparty/melo/text/es_phonemizer/punctuation.py +174 -0
  214. xinference/thirdparty/melo/text/es_phonemizer/spanish_symbols.txt +1 -0
  215. xinference/thirdparty/melo/text/es_phonemizer/test.ipynb +124 -0
  216. xinference/thirdparty/melo/text/fr_phonemizer/base.py +140 -0
  217. xinference/thirdparty/melo/text/fr_phonemizer/cleaner.py +122 -0
  218. xinference/thirdparty/melo/text/fr_phonemizer/en_symbols.json +78 -0
  219. xinference/thirdparty/melo/text/fr_phonemizer/example_ipa.txt +1 -0
  220. xinference/thirdparty/melo/text/fr_phonemizer/fr_symbols.json +89 -0
  221. xinference/thirdparty/melo/text/fr_phonemizer/fr_to_ipa.py +30 -0
  222. xinference/thirdparty/melo/text/fr_phonemizer/french_abbreviations.py +48 -0
  223. xinference/thirdparty/melo/text/fr_phonemizer/french_symbols.txt +1 -0
  224. xinference/thirdparty/melo/text/fr_phonemizer/gruut_wrapper.py +258 -0
  225. xinference/thirdparty/melo/text/fr_phonemizer/punctuation.py +172 -0
  226. xinference/thirdparty/melo/text/french.py +94 -0
  227. xinference/thirdparty/melo/text/french_bert.py +39 -0
  228. xinference/thirdparty/melo/text/japanese.py +647 -0
  229. xinference/thirdparty/melo/text/japanese_bert.py +49 -0
  230. xinference/thirdparty/melo/text/ko_dictionary.py +44 -0
  231. xinference/thirdparty/melo/text/korean.py +192 -0
  232. xinference/thirdparty/melo/text/opencpop-strict.txt +429 -0
  233. xinference/thirdparty/melo/text/spanish.py +122 -0
  234. xinference/thirdparty/melo/text/spanish_bert.py +39 -0
  235. xinference/thirdparty/melo/text/symbols.py +290 -0
  236. xinference/thirdparty/melo/text/tone_sandhi.py +769 -0
  237. xinference/thirdparty/melo/train.py +635 -0
  238. xinference/thirdparty/melo/train.sh +19 -0
  239. xinference/thirdparty/melo/transforms.py +209 -0
  240. xinference/thirdparty/melo/utils.py +424 -0
  241. xinference/types.py +15 -0
  242. xinference/web/ui/build/asset-manifest.json +6 -6
  243. xinference/web/ui/build/index.html +1 -1
  244. xinference/web/ui/build/static/css/main.51a587ff.css +2 -0
  245. xinference/web/ui/build/static/css/main.51a587ff.css.map +1 -0
  246. xinference/web/ui/build/static/js/main.b0936c54.js +3 -0
  247. xinference/web/ui/build/static/js/main.b0936c54.js.map +1 -0
  248. xinference/web/ui/node_modules/.cache/babel-loader/03c4052f1b91f6ba0c5389bdcf49c43319b4076c08e4b8585dab312538ae290a.json +1 -0
  249. xinference/web/ui/node_modules/.cache/babel-loader/1786b83003b8e9605a0f5f855a185d4d16e38fc893dfb326a2a9cca206b4240a.json +1 -0
  250. xinference/web/ui/node_modules/.cache/babel-loader/17cbc181dd674b9150b80c73ed6a82656de0082d857f6e5f66d9716129ac0b38.json +1 -0
  251. xinference/web/ui/node_modules/.cache/babel-loader/185ceb8872d562e032b47e79df6a45670e06345b8ed70aad1a131e0476783c5c.json +1 -0
  252. xinference/web/ui/node_modules/.cache/babel-loader/26b8c9f34b0bed789b3a833767672e39302d1e0c09b4276f4d58d1df7b6bd93b.json +1 -0
  253. xinference/web/ui/node_modules/.cache/babel-loader/2b484da66c724d0d56a40849c109327408796a668b1381511b6e9e03baa48658.json +1 -0
  254. xinference/web/ui/node_modules/.cache/babel-loader/2cbbbce9b84df73330d4c42b82436ed881b3847628f2fbc346aa62e2859fd88c.json +1 -0
  255. xinference/web/ui/node_modules/.cache/babel-loader/2ec9b14431ed33ce6901bf9f27007be4e6e472709c99d6e22b50ce528e4b78ee.json +1 -0
  256. xinference/web/ui/node_modules/.cache/babel-loader/3b966db018f96be4a055d6ca205f0990d4d0b370e2980c17d8bca2c9a021819c.json +1 -0
  257. xinference/web/ui/node_modules/.cache/babel-loader/3eefb411b24c2b3ce053570ef50daccf154022f0e168be5ed0fec21394baf9f4.json +1 -0
  258. xinference/web/ui/node_modules/.cache/babel-loader/522b229e3cac219123f0d69673f5570e191c2d2a505dc65b312d336eae2279c0.json +1 -0
  259. xinference/web/ui/node_modules/.cache/babel-loader/52e45f17ba300580ea3fcc9f9228ccba194bb092b76f25e9255af311f8b05aab.json +1 -0
  260. xinference/web/ui/node_modules/.cache/babel-loader/5a0bc4631f936459afc1a3b1d3ec2420118b1f00e11f60ccac3e08088f3f27a8.json +1 -0
  261. xinference/web/ui/node_modules/.cache/babel-loader/611fa2c6c53b66039991d06dfb0473b5ab37fc63b4564e0f6e1718523768a045.json +1 -0
  262. xinference/web/ui/node_modules/.cache/babel-loader/6329bc76c406fe5eb305412383fbde5950f847bb5e43261f73f37622c365acb4.json +1 -0
  263. xinference/web/ui/node_modules/.cache/babel-loader/63c8e07687ea53a4f8a910ee5e42e0eb26cd1acbfbe820f3e3248a786ee51401.json +1 -0
  264. xinference/web/ui/node_modules/.cache/babel-loader/69b2d5001684174ec9da57e07914eed3eac4960018bceb6cbfa801d861301d7c.json +1 -0
  265. xinference/web/ui/node_modules/.cache/babel-loader/710c1acda69e561e30a933b98c6a56d50197868b15c21e2aad55ab6d46649eb6.json +1 -0
  266. xinference/web/ui/node_modules/.cache/babel-loader/720deca1fce5a1dc5056048fa8258fd138a82ea855f350b6613f104a73fb761f.json +1 -0
  267. xinference/web/ui/node_modules/.cache/babel-loader/76a23b92d26a499c57e61eea2b895fbc9771bd0849a72e66f8e633192017978b.json +1 -0
  268. xinference/web/ui/node_modules/.cache/babel-loader/858063f23b34dfe600254eb5afd85518b0002ec4b30b7386616c45600826e3b2.json +1 -0
  269. xinference/web/ui/node_modules/.cache/babel-loader/920b82c1c89124cf217109eeedbfcd3aae3b917be50c9dfb6bbb4ce26bdfd2e7.json +1 -0
  270. xinference/web/ui/node_modules/.cache/babel-loader/94d8b7aeb0076f2ce07db598cea0e87b13bc8d5614eb530b8d6e696c2daf6f88.json +1 -0
  271. xinference/web/ui/node_modules/.cache/babel-loader/9e917fe7022d01b2ccbe5cc0ce73d70bb72bee584ff293bad71bdff6695dee28.json +1 -0
  272. xinference/web/ui/node_modules/.cache/babel-loader/9f28fdb8399f1d0474f0aca86f1658dc94f5bf0c90f6146352de150692de8862.json +1 -0
  273. xinference/web/ui/node_modules/.cache/babel-loader/a0dfafa06b2bb7cba8cad41c482503f61944f759f4318139362602ef5cc47ccb.json +1 -0
  274. xinference/web/ui/node_modules/.cache/babel-loader/a3ff866acddf34917a7ee399e0e571a4dfd8ba66d5057db885f243e16a6eb17d.json +1 -0
  275. xinference/web/ui/node_modules/.cache/babel-loader/afb8084f539534cd594755ea2205ecd5bd1f62dddcfdf75a2eace59a28131278.json +1 -0
  276. xinference/web/ui/node_modules/.cache/babel-loader/b57b1438b77294c1f3f6cfce12ac487d8106c6f016975ba0aec94d98997e2e1e.json +1 -0
  277. xinference/web/ui/node_modules/.cache/babel-loader/b9917b0bf8e4d55ccbac1c334aa04d6ff3c5b6ed9e5d38b9ea2c687fa7d3f5a9.json +1 -0
  278. xinference/web/ui/node_modules/.cache/babel-loader/bbcc94b0149963d1d6f267ee1f4f03d3925b758392ce2f516c3fe8af0e0169fc.json +1 -0
  279. xinference/web/ui/node_modules/.cache/babel-loader/bdee44abeadc4abc17d41c52eb49c6e19a4b1a267b6e16876ce91bdeeebfc52d.json +1 -0
  280. xinference/web/ui/node_modules/.cache/babel-loader/beb112b70f4a56db95920a9e20efb6c97c37b68450716730217a9ee1a9ae92be.json +1 -0
  281. xinference/web/ui/node_modules/.cache/babel-loader/c88db97be0cdf440193b3995996e83510a04cb00048135485fc0e26d197e80b5.json +1 -0
  282. xinference/web/ui/node_modules/.cache/babel-loader/d49e5314d34310a62d01a03067ce1bec5da00abce84c5196aa9c6842fa79a430.json +1 -0
  283. xinference/web/ui/node_modules/.cache/babel-loader/d7664d18c4ddbad9c3a6a31b91f7c00fb0dde804608674a9860ee50f33e54708.json +1 -0
  284. xinference/web/ui/node_modules/.cache/babel-loader/d9072c318b819b7c90a0f7e9cc0b6413b4dbeb8e9859898e53d75ea882fcde99.json +1 -0
  285. xinference/web/ui/node_modules/.cache/babel-loader/db16a983bc08a05f0439cc61ca0840e49e1d8400eef678909f16c032a418a3d6.json +1 -0
  286. xinference/web/ui/node_modules/.cache/babel-loader/dc249829767b8abcbc3677e0b07b6d3ecbfdfe6d08cfe23a665eb33373a9aa9d.json +1 -0
  287. xinference/web/ui/node_modules/.cache/babel-loader/e242c583c2dbc2784f0fcf513523975f7d5df447e106c1c17e49e8578a6fc3ed.json +1 -0
  288. xinference/web/ui/node_modules/.cache/babel-loader/eac5f1296513e69e4b96f750ddccd4d0264e2bae4e4c449144e83274a48698d9.json +1 -0
  289. xinference/web/ui/node_modules/.cache/babel-loader/ed57202cb79649bb716400436590245547df241988fc7c8e1d85d132299542d2.json +1 -0
  290. xinference/web/ui/node_modules/.cache/babel-loader/f125bf72e773a14cdaebd0c343e80adb909d12e317ee5c00cd4a57442fbe2c62.json +1 -0
  291. xinference/web/ui/node_modules/.cache/babel-loader/f91af913d7f91c410719ab13136aaed3aaf0f8dda06652f25c42cb5231587398.json +1 -0
  292. xinference/web/ui/node_modules/.package-lock.json +67 -3
  293. xinference/web/ui/node_modules/@babel/runtime/package.json +592 -538
  294. xinference/web/ui/node_modules/html-parse-stringify/package.json +50 -0
  295. xinference/web/ui/node_modules/i18next/dist/esm/package.json +1 -0
  296. xinference/web/ui/node_modules/i18next/package.json +129 -0
  297. xinference/web/ui/node_modules/react-i18next/.eslintrc.json +74 -0
  298. xinference/web/ui/node_modules/react-i18next/dist/es/package.json +1 -0
  299. xinference/web/ui/node_modules/react-i18next/package.json +162 -0
  300. xinference/web/ui/node_modules/void-elements/package.json +34 -0
  301. xinference/web/ui/package-lock.json +69 -3
  302. xinference/web/ui/package.json +2 -0
  303. xinference/web/ui/src/locales/en.json +186 -0
  304. xinference/web/ui/src/locales/zh.json +186 -0
  305. {xinference-1.0.1.dist-info → xinference-1.2.1.dist-info}/METADATA +68 -32
  306. {xinference-1.0.1.dist-info → xinference-1.2.1.dist-info}/RECORD +316 -122
  307. xinference/thirdparty/cosyvoice/bin/export_trt.py +0 -8
  308. xinference/thirdparty/fish_speech/tools/api.py +0 -943
  309. xinference/thirdparty/fish_speech/tools/msgpack_api.py +0 -95
  310. xinference/thirdparty/fish_speech/tools/webui.py +0 -548
  311. xinference/web/ui/build/static/css/main.5061c4c3.css +0 -2
  312. xinference/web/ui/build/static/css/main.5061c4c3.css.map +0 -1
  313. xinference/web/ui/build/static/js/main.2f269bb3.js +0 -3
  314. xinference/web/ui/build/static/js/main.2f269bb3.js.map +0 -1
  315. xinference/web/ui/node_modules/.cache/babel-loader/07ce9e632e6aff24d7aa3ad8e48224433bbfeb0d633fca723453f1fcae0c9f1c.json +0 -1
  316. xinference/web/ui/node_modules/.cache/babel-loader/1130403f9e46f5738a23b45ac59b57de8f360c908c713e2c0670c2cce9bd367a.json +0 -1
  317. xinference/web/ui/node_modules/.cache/babel-loader/131091b25d26b17cdca187d7542a21475c211138d900cf667682260e76ef9463.json +0 -1
  318. xinference/web/ui/node_modules/.cache/babel-loader/1f269fb2a368363c1cb2237825f1dba093b6bdd8c44cc05954fd19ec2c1fff03.json +0 -1
  319. xinference/web/ui/node_modules/.cache/babel-loader/331312668fa8bd3d7401818f4a25fa98135d7f61371cd6bfff78b18cf4fbdd92.json +0 -1
  320. xinference/web/ui/node_modules/.cache/babel-loader/40f17338fc75ae095de7d2b4d8eae0d5ca0193a7e2bcece4ee745b22a7a2f4b7.json +0 -1
  321. xinference/web/ui/node_modules/.cache/babel-loader/4de9a6942c5f1749d6cbfdd54279699975f16016b182848bc253886f52ec2ec3.json +0 -1
  322. xinference/web/ui/node_modules/.cache/babel-loader/822586ed1077201b64b954f12f25e3f9b45678c1acbabe53d8af3ca82ca71f33.json +0 -1
  323. xinference/web/ui/node_modules/.cache/babel-loader/8d33354bd2100c8602afc3341f131a88cc36aaeecd5a4b365ed038514708e350.json +0 -1
  324. xinference/web/ui/node_modules/.cache/babel-loader/9375a35b05d56989b2755bf72161fa707c92f28569d33765a75f91a568fda6e9.json +0 -1
  325. xinference/web/ui/node_modules/.cache/babel-loader/a158a9ffa0c9b169aee53dd4a0c44501a596755b4e4f6ede7746d65a72e2a71f.json +0 -1
  326. xinference/web/ui/node_modules/.cache/babel-loader/bd6ad8159341315a1764c397621a560809f7eb7219ab5174c801fca7e969d943.json +0 -1
  327. xinference/web/ui/node_modules/.cache/babel-loader/c7bf40bab396765f67d0fed627ed3665890608b2d0edaa3e8cb7cfc96310db45.json +0 -1
  328. xinference/web/ui/node_modules/.cache/babel-loader/d6c643278a0b28320e6f33a60f5fb64c053997cbdc39a60e53ccc574688ade9e.json +0 -1
  329. xinference/web/ui/node_modules/.cache/babel-loader/e42b72d4cc1ea412ebecbb8d040dc6c6bfee462c33903c2f1f3facb602ad742e.json +0 -1
  330. xinference/web/ui/node_modules/.cache/babel-loader/e64b7e8cedcf43d4c95deba60ec1341855c887705805bb62431693118b870c69.json +0 -1
  331. xinference/web/ui/node_modules/.cache/babel-loader/f5039ddbeb815c51491a1989532006b96fc3ae49c6c60e3c097f875b4ae915ae.json +0 -1
  332. xinference/web/ui/node_modules/.cache/babel-loader/f72f011744c4649fabddca6f7a9327861ac0a315a89b1a2e62a39774e7863845.json +0 -1
  333. xinference/web/ui/node_modules/.cache/babel-loader/feabb04b4aa507102da0a64398a40818e878fd1df9b75dda8461b3e1e7ff3f11.json +0 -1
  334. /xinference/thirdparty/{cosyvoice/bin → f5_tts}/__init__.py +0 -0
  335. /xinference/thirdparty/{cosyvoice/flow → melo}/__init__.py +0 -0
  336. /xinference/thirdparty/{cosyvoice/hifigan → melo/text/english_utils}/__init__.py +0 -0
  337. /xinference/thirdparty/{cosyvoice/llm → melo/text/es_phonemizer}/__init__.py +0 -0
  338. /xinference/thirdparty/{fish_speech/tools → melo/text/fr_phonemizer}/__init__.py +0 -0
  339. /xinference/web/ui/build/static/js/{main.2f269bb3.js.LICENSE.txt → main.b0936c54.js.LICENSE.txt} +0 -0
  340. {xinference-1.0.1.dist-info → xinference-1.2.1.dist-info}/LICENSE +0 -0
  341. {xinference-1.0.1.dist-info → xinference-1.2.1.dist-info}/WHEEL +0 -0
  342. {xinference-1.0.1.dist-info → xinference-1.2.1.dist-info}/entry_points.txt +0 -0
  343. {xinference-1.0.1.dist-info → xinference-1.2.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,89 @@
1
+ {
2
+ "symbols": [
3
+ "_",
4
+ ",",
5
+ ".",
6
+ "!",
7
+ "?",
8
+ "-",
9
+ "~",
10
+ "\u2026",
11
+ "N",
12
+ "Q",
13
+ "a",
14
+ "b",
15
+ "d",
16
+ "e",
17
+ "f",
18
+ "g",
19
+ "h",
20
+ "i",
21
+ "j",
22
+ "k",
23
+ "l",
24
+ "m",
25
+ "n",
26
+ "o",
27
+ "p",
28
+ "s",
29
+ "t",
30
+ "u",
31
+ "v",
32
+ "w",
33
+ "x",
34
+ "y",
35
+ "z",
36
+ "\u0251",
37
+ "\u00e6",
38
+ "\u0283",
39
+ "\u0291",
40
+ "\u00e7",
41
+ "\u026f",
42
+ "\u026a",
43
+ "\u0254",
44
+ "\u025b",
45
+ "\u0279",
46
+ "\u00f0",
47
+ "\u0259",
48
+ "\u026b",
49
+ "\u0265",
50
+ "\u0278",
51
+ "\u028a",
52
+ "\u027e",
53
+ "\u0292",
54
+ "\u03b8",
55
+ "\u03b2",
56
+ "\u014b",
57
+ "\u0266",
58
+ "\u207c",
59
+ "\u02b0",
60
+ "`",
61
+ "^",
62
+ "#",
63
+ "*",
64
+ "=",
65
+ "\u02c8",
66
+ "\u02cc",
67
+ "\u2192",
68
+ "\u2193",
69
+ "\u2191",
70
+ " ",
71
+ "\u0263",
72
+ "\u0261",
73
+ "r",
74
+ "\u0272",
75
+ "\u029d",
76
+ "\u028e",
77
+ "\u02d0",
78
+
79
+ "\u0303",
80
+ "\u0153",
81
+ "\u00f8",
82
+ "\u0281",
83
+ "\u0252",
84
+ "\u028c",
85
+ "\u2014",
86
+ "\u025c",
87
+ "\u0250"
88
+ ]
89
+ }
@@ -0,0 +1,30 @@
1
+ from .cleaner import french_cleaners
2
+ from .gruut_wrapper import Gruut
3
+
4
+
5
+ def remove_consecutive_t(input_str):
6
+ result = []
7
+ count = 0
8
+
9
+ for char in input_str:
10
+ if char == 't':
11
+ count += 1
12
+ else:
13
+ if count < 3:
14
+ result.extend(['t'] * count)
15
+ count = 0
16
+ result.append(char)
17
+
18
+ if count < 3:
19
+ result.extend(['t'] * count)
20
+
21
+ return ''.join(result)
22
+
23
+ def fr2ipa(text):
24
+ e = Gruut(language="fr-fr", keep_puncs=True, keep_stress=True, use_espeak_phonemes=True)
25
+ # text = french_cleaners(text)
26
+ phonemes = e.phonemize(text, separator="")
27
+ # print(phonemes)
28
+ phonemes = remove_consecutive_t(phonemes)
29
+ # print(phonemes)
30
+ return phonemes
@@ -0,0 +1,48 @@
1
+ import re
2
+
3
+ # List of (regular expression, replacement) pairs for abbreviations in french:
4
+ abbreviations_fr = [
5
+ (re.compile("\\b%s\\." % x[0], re.IGNORECASE), x[1])
6
+ for x in [
7
+ ("M", "monsieur"),
8
+ ("Mlle", "mademoiselle"),
9
+ ("Mlles", "mesdemoiselles"),
10
+ ("Mme", "Madame"),
11
+ ("Mmes", "Mesdames"),
12
+ ("N.B", "nota bene"),
13
+ ("M", "monsieur"),
14
+ ("p.c.q", "parce que"),
15
+ ("Pr", "professeur"),
16
+ ("qqch", "quelque chose"),
17
+ ("rdv", "rendez-vous"),
18
+ ("max", "maximum"),
19
+ ("min", "minimum"),
20
+ ("no", "numéro"),
21
+ ("adr", "adresse"),
22
+ ("dr", "docteur"),
23
+ ("st", "saint"),
24
+ ("co", "companie"),
25
+ ("jr", "junior"),
26
+ ("sgt", "sergent"),
27
+ ("capt", "capitain"),
28
+ ("col", "colonel"),
29
+ ("av", "avenue"),
30
+ ("av. J.-C", "avant Jésus-Christ"),
31
+ ("apr. J.-C", "après Jésus-Christ"),
32
+ ("art", "article"),
33
+ ("boul", "boulevard"),
34
+ ("c.-à-d", "c’est-à-dire"),
35
+ ("etc", "et cetera"),
36
+ ("ex", "exemple"),
37
+ ("excl", "exclusivement"),
38
+ ("boul", "boulevard"),
39
+ ]
40
+ ] + [
41
+ (re.compile("\\b%s" % x[0]), x[1])
42
+ for x in [
43
+ ("Mlle", "mademoiselle"),
44
+ ("Mlles", "mesdemoiselles"),
45
+ ("Mme", "Madame"),
46
+ ("Mmes", "Mesdames"),
47
+ ]
48
+ ]
@@ -0,0 +1 @@
1
+ _,.!?-~…NQabdefghijklmnopstuvwxyzɑæʃʑçɯɪɔɛɹðəɫɥɸʊɾʒθβŋɦ⁼ʰ`^#*=ˈˌ→↓↑ ɣɡrɲʝʎː̃œøʁɒʌ—ɜɐ
@@ -0,0 +1,258 @@
1
+ import importlib
2
+ from typing import List
3
+
4
+ import gruut
5
+ from gruut_ipa import IPA # pip install gruut_ipa
6
+
7
+ from .base import BasePhonemizer
8
+ from .punctuation import Punctuation
9
+
10
+ # Table for str.translate to fix gruut/TTS phoneme mismatch
11
+ GRUUT_TRANS_TABLE = str.maketrans("g", "ɡ")
12
+
13
+
14
+ class Gruut(BasePhonemizer):
15
+ """Gruut wrapper for G2P
16
+
17
+ Args:
18
+ language (str):
19
+ Valid language code for the used backend.
20
+
21
+ punctuations (str):
22
+ Characters to be treated as punctuation. Defaults to `Punctuation.default_puncs()`.
23
+
24
+ keep_puncs (bool):
25
+ If true, keep the punctuations after phonemization. Defaults to True.
26
+
27
+ use_espeak_phonemes (bool):
28
+ If true, use espeak lexicons instead of default Gruut lexicons. Defaults to False.
29
+
30
+ keep_stress (bool):
31
+ If true, keep the stress characters after phonemization. Defaults to False.
32
+
33
+ Example:
34
+
35
+ >>> from TTS.tts.utils.text.phonemizers.gruut_wrapper import Gruut
36
+ >>> phonemizer = Gruut('en-us')
37
+ >>> phonemizer.phonemize("Be a voice, not an! echo?", separator="|")
38
+ 'b|i| ə| v|ɔ|ɪ|s, n|ɑ|t| ə|n! ɛ|k|o|ʊ?'
39
+ """
40
+
41
+ def __init__(
42
+ self,
43
+ language: str,
44
+ punctuations=Punctuation.default_puncs(),
45
+ keep_puncs=True,
46
+ use_espeak_phonemes=False,
47
+ keep_stress=False,
48
+ ):
49
+ super().__init__(language, punctuations=punctuations, keep_puncs=keep_puncs)
50
+ self.use_espeak_phonemes = use_espeak_phonemes
51
+ self.keep_stress = keep_stress
52
+
53
+ @staticmethod
54
+ def name():
55
+ return "gruut"
56
+
57
+ def phonemize_gruut(self, text: str, separator: str = "|", tie=False) -> str: # pylint: disable=unused-argument
58
+ """Convert input text to phonemes.
59
+
60
+ Gruut phonemizes the given `str` by seperating each phoneme character with `separator`, even for characters
61
+ that constitude a single sound.
62
+
63
+ It doesn't affect 🐸TTS since it individually converts each character to token IDs.
64
+
65
+ Examples::
66
+ "hello how are you today?" -> `h|ɛ|l|o|ʊ| h|a|ʊ| ɑ|ɹ| j|u| t|ə|d|e|ɪ`
67
+
68
+ Args:
69
+ text (str):
70
+ Text to be converted to phonemes.
71
+
72
+ tie (bool, optional) : When True use a '͡' character between
73
+ consecutive characters of a single phoneme. Else separate phoneme
74
+ with '_'. This option requires espeak>=1.49. Default to False.
75
+ """
76
+ ph_list = []
77
+ for sentence in gruut.sentences(text, lang=self.language, espeak=self.use_espeak_phonemes):
78
+ for word in sentence:
79
+ if word.is_break:
80
+ # Use actual character for break phoneme (e.g., comma)
81
+ if ph_list:
82
+ # Join with previous word
83
+ ph_list[-1].append(word.text)
84
+ else:
85
+ # First word is punctuation
86
+ ph_list.append([word.text])
87
+ elif word.phonemes:
88
+ # Add phonemes for word
89
+ word_phonemes = []
90
+
91
+ for word_phoneme in word.phonemes:
92
+ if not self.keep_stress:
93
+ # Remove primary/secondary stress
94
+ word_phoneme = IPA.without_stress(word_phoneme)
95
+
96
+ word_phoneme = word_phoneme.translate(GRUUT_TRANS_TABLE)
97
+
98
+ if word_phoneme:
99
+ # Flatten phonemes
100
+ word_phonemes.extend(word_phoneme)
101
+
102
+ if word_phonemes:
103
+ ph_list.append(word_phonemes)
104
+
105
+ ph_words = [separator.join(word_phonemes) for word_phonemes in ph_list]
106
+ ph = f"{separator} ".join(ph_words)
107
+ return ph
108
+
109
+ def _phonemize(self, text, separator):
110
+ return self.phonemize_gruut(text, separator, tie=False)
111
+
112
+ def is_supported_language(self, language):
113
+ """Returns True if `language` is supported by the backend"""
114
+ return gruut.is_language_supported(language)
115
+
116
+ @staticmethod
117
+ def supported_languages() -> List:
118
+ """Get a dictionary of supported languages.
119
+
120
+ Returns:
121
+ List: List of language codes.
122
+ """
123
+ return list(gruut.get_supported_languages())
124
+
125
+ def version(self):
126
+ """Get the version of the used backend.
127
+
128
+ Returns:
129
+ str: Version of the used backend.
130
+ """
131
+ return gruut.__version__
132
+
133
+ @classmethod
134
+ def is_available(cls):
135
+ """Return true if ESpeak is available else false"""
136
+ return importlib.util.find_spec("gruut") is not None
137
+
138
+
139
+ if __name__ == "__main__":
140
+ from cleaner import french_cleaners
141
+ import json
142
+
143
+ e = Gruut(language="fr-fr", keep_puncs=True, keep_stress=True, use_espeak_phonemes=True)
144
+ symbols = [ # en + sp
145
+ "_",
146
+ ",",
147
+ ".",
148
+ "!",
149
+ "?",
150
+ "-",
151
+ "~",
152
+ "\u2026",
153
+ "N",
154
+ "Q",
155
+ "a",
156
+ "b",
157
+ "d",
158
+ "e",
159
+ "f",
160
+ "g",
161
+ "h",
162
+ "i",
163
+ "j",
164
+ "k",
165
+ "l",
166
+ "m",
167
+ "n",
168
+ "o",
169
+ "p",
170
+ "s",
171
+ "t",
172
+ "u",
173
+ "v",
174
+ "w",
175
+ "x",
176
+ "y",
177
+ "z",
178
+ "\u0251",
179
+ "\u00e6",
180
+ "\u0283",
181
+ "\u0291",
182
+ "\u00e7",
183
+ "\u026f",
184
+ "\u026a",
185
+ "\u0254",
186
+ "\u025b",
187
+ "\u0279",
188
+ "\u00f0",
189
+ "\u0259",
190
+ "\u026b",
191
+ "\u0265",
192
+ "\u0278",
193
+ "\u028a",
194
+ "\u027e",
195
+ "\u0292",
196
+ "\u03b8",
197
+ "\u03b2",
198
+ "\u014b",
199
+ "\u0266",
200
+ "\u207c",
201
+ "\u02b0",
202
+ "`",
203
+ "^",
204
+ "#",
205
+ "*",
206
+ "=",
207
+ "\u02c8",
208
+ "\u02cc",
209
+ "\u2192",
210
+ "\u2193",
211
+ "\u2191",
212
+ " ",
213
+ "ɣ",
214
+ "ɡ",
215
+ "r",
216
+ "ɲ",
217
+ "ʝ",
218
+ "ʎ",
219
+ "ː"
220
+ ]
221
+ with open('/home/xumin/workspace/VITS-Training-Multiling/230715_fr/metadata.txt', 'r') as f:
222
+ lines = f.readlines()
223
+
224
+
225
+ used_sym = []
226
+ not_existed_sym = []
227
+ phonemes = []
228
+
229
+ for line in lines:
230
+ text = line.split('|')[-1].strip()
231
+ text = french_cleaners(text)
232
+ ipa = e.phonemize(text, separator="")
233
+ phonemes.append(ipa)
234
+ for s in ipa:
235
+ if s not in symbols:
236
+ if s not in not_existed_sym:
237
+ print(f'not_existed char: {s}')
238
+ not_existed_sym.append(s)
239
+ else:
240
+ if s not in used_sym:
241
+ # print(f'used char: {s}')
242
+ used_sym.append(s)
243
+
244
+ print(used_sym)
245
+ print(not_existed_sym)
246
+
247
+
248
+ with open('./text/fr_phonemizer/french_symbols.txt', 'w') as g:
249
+ g.writelines(symbols + not_existed_sym)
250
+
251
+ with open('./text/fr_phonemizer/example_ipa.txt', 'w') as g:
252
+ g.writelines(phonemes)
253
+
254
+ data = {'symbols': symbols + not_existed_sym}
255
+
256
+ with open('./text/fr_phonemizer/fr_symbols.json', 'w') as f:
257
+ json.dump(data, f, indent=4)
258
+
@@ -0,0 +1,172 @@
1
+ import collections
2
+ import re
3
+ from enum import Enum
4
+
5
+ import six
6
+
7
+ _DEF_PUNCS = ';:,.!?¡¿—…"«»“”'
8
+
9
+ _PUNC_IDX = collections.namedtuple("_punc_index", ["punc", "position"])
10
+
11
+
12
+ class PuncPosition(Enum):
13
+ """Enum for the punctuations positions"""
14
+
15
+ BEGIN = 0
16
+ END = 1
17
+ MIDDLE = 2
18
+ ALONE = 3
19
+
20
+
21
+ class Punctuation:
22
+ """Handle punctuations in text.
23
+
24
+ Just strip punctuations from text or strip and restore them later.
25
+
26
+ Args:
27
+ puncs (str): The punctuations to be processed. Defaults to `_DEF_PUNCS`.
28
+
29
+ Example:
30
+ >>> punc = Punctuation()
31
+ >>> punc.strip("This is. example !")
32
+ 'This is example'
33
+
34
+ >>> text_striped, punc_map = punc.strip_to_restore("This is. example !")
35
+ >>> ' '.join(text_striped)
36
+ 'This is example'
37
+
38
+ >>> text_restored = punc.restore(text_striped, punc_map)
39
+ >>> text_restored[0]
40
+ 'This is. example !'
41
+ """
42
+
43
+ def __init__(self, puncs: str = _DEF_PUNCS):
44
+ self.puncs = puncs
45
+
46
+ @staticmethod
47
+ def default_puncs():
48
+ """Return default set of punctuations."""
49
+ return _DEF_PUNCS
50
+
51
+ @property
52
+ def puncs(self):
53
+ return self._puncs
54
+
55
+ @puncs.setter
56
+ def puncs(self, value):
57
+ if not isinstance(value, six.string_types):
58
+ raise ValueError("[!] Punctuations must be of type str.")
59
+ self._puncs = "".join(list(dict.fromkeys(list(value)))) # remove duplicates without changing the oreder
60
+ self.puncs_regular_exp = re.compile(rf"(\s*[{re.escape(self._puncs)}]+\s*)+")
61
+
62
+ def strip(self, text):
63
+ """Remove all the punctuations by replacing with `space`.
64
+
65
+ Args:
66
+ text (str): The text to be processed.
67
+
68
+ Example::
69
+
70
+ "This is. example !" -> "This is example "
71
+ """
72
+ return re.sub(self.puncs_regular_exp, " ", text).rstrip().lstrip()
73
+
74
+ def strip_to_restore(self, text):
75
+ """Remove punctuations from text to restore them later.
76
+
77
+ Args:
78
+ text (str): The text to be processed.
79
+
80
+ Examples ::
81
+
82
+ "This is. example !" -> [["This is", "example"], [".", "!"]]
83
+
84
+ """
85
+ text, puncs = self._strip_to_restore(text)
86
+ return text, puncs
87
+
88
+ def _strip_to_restore(self, text):
89
+ """Auxiliary method for Punctuation.preserve()"""
90
+ matches = list(re.finditer(self.puncs_regular_exp, text))
91
+ if not matches:
92
+ return [text], []
93
+ # the text is only punctuations
94
+ if len(matches) == 1 and matches[0].group() == text:
95
+ return [], [_PUNC_IDX(text, PuncPosition.ALONE)]
96
+ # build a punctuation map to be used later to restore punctuations
97
+ puncs = []
98
+ for match in matches:
99
+ position = PuncPosition.MIDDLE
100
+ if match == matches[0] and text.startswith(match.group()):
101
+ position = PuncPosition.BEGIN
102
+ elif match == matches[-1] and text.endswith(match.group()):
103
+ position = PuncPosition.END
104
+ puncs.append(_PUNC_IDX(match.group(), position))
105
+ # convert str text to a List[str], each item is separated by a punctuation
106
+ splitted_text = []
107
+ for idx, punc in enumerate(puncs):
108
+ split = text.split(punc.punc)
109
+ prefix, suffix = split[0], punc.punc.join(split[1:])
110
+ splitted_text.append(prefix)
111
+ # if the text does not end with a punctuation, add it to the last item
112
+ if idx == len(puncs) - 1 and len(suffix) > 0:
113
+ splitted_text.append(suffix)
114
+ text = suffix
115
+ return splitted_text, puncs
116
+
117
+ @classmethod
118
+ def restore(cls, text, puncs):
119
+ """Restore punctuation in a text.
120
+
121
+ Args:
122
+ text (str): The text to be processed.
123
+ puncs (List[str]): The list of punctuations map to be used for restoring.
124
+
125
+ Examples ::
126
+
127
+ ['This is', 'example'], ['.', '!'] -> "This is. example!"
128
+
129
+ """
130
+ return cls._restore(text, puncs, 0)
131
+
132
+ @classmethod
133
+ def _restore(cls, text, puncs, num): # pylint: disable=too-many-return-statements
134
+ """Auxiliary method for Punctuation.restore()"""
135
+ if not puncs:
136
+ return text
137
+
138
+ # nothing have been phonemized, returns the puncs alone
139
+ if not text:
140
+ return ["".join(m.punc for m in puncs)]
141
+
142
+ current = puncs[0]
143
+
144
+ if current.position == PuncPosition.BEGIN:
145
+ return cls._restore([current.punc + text[0]] + text[1:], puncs[1:], num)
146
+
147
+ if current.position == PuncPosition.END:
148
+ return [text[0] + current.punc] + cls._restore(text[1:], puncs[1:], num + 1)
149
+
150
+ if current.position == PuncPosition.ALONE:
151
+ return [current.mark] + cls._restore(text, puncs[1:], num + 1)
152
+
153
+ # POSITION == MIDDLE
154
+ if len(text) == 1: # pragma: nocover
155
+ # a corner case where the final part of an intermediate
156
+ # mark (I) has not been phonemized
157
+ return cls._restore([text[0] + current.punc], puncs[1:], num)
158
+
159
+ return cls._restore([text[0] + current.punc + text[1]] + text[2:], puncs[1:], num)
160
+
161
+
162
+ # if __name__ == "__main__":
163
+ # punc = Punctuation()
164
+ # text = "This is. This is, example!"
165
+
166
+ # print(punc.strip(text))
167
+
168
+ # split_text, puncs = punc.strip_to_restore(text)
169
+ # print(split_text, " ---- ", puncs)
170
+
171
+ # restored_text = punc.restore(split_text, puncs)
172
+ # print(restored_text)
@@ -0,0 +1,94 @@
1
+ import pickle
2
+ import os
3
+ import re
4
+
5
+ from . import symbols
6
+ from .fr_phonemizer import cleaner as fr_cleaner
7
+ from .fr_phonemizer import fr_to_ipa
8
+ from transformers import AutoTokenizer
9
+
10
+
11
+ def distribute_phone(n_phone, n_word):
12
+ phones_per_word = [0] * n_word
13
+ for task in range(n_phone):
14
+ min_tasks = min(phones_per_word)
15
+ min_index = phones_per_word.index(min_tasks)
16
+ phones_per_word[min_index] += 1
17
+ return phones_per_word
18
+
19
+ def text_normalize(text):
20
+ text = fr_cleaner.french_cleaners(text)
21
+ return text
22
+
23
+ model_id = 'dbmdz/bert-base-french-europeana-cased'
24
+ tokenizer = AutoTokenizer.from_pretrained(model_id)
25
+
26
+ def g2p(text, pad_start_end=True, tokenized=None):
27
+ if tokenized is None:
28
+ tokenized = tokenizer.tokenize(text)
29
+ # import pdb; pdb.set_trace()
30
+ phs = []
31
+ ph_groups = []
32
+ for t in tokenized:
33
+ if not t.startswith("#"):
34
+ ph_groups.append([t])
35
+ else:
36
+ ph_groups[-1].append(t.replace("#", ""))
37
+
38
+ phones = []
39
+ tones = []
40
+ word2ph = []
41
+ # print(ph_groups)
42
+ for group in ph_groups:
43
+ w = "".join(group)
44
+ phone_len = 0
45
+ word_len = len(group)
46
+ if w == '[UNK]':
47
+ phone_list = ['UNK']
48
+ else:
49
+ phone_list = list(filter(lambda p: p != " ", fr_to_ipa.fr2ipa(w)))
50
+
51
+ for ph in phone_list:
52
+ phones.append(ph)
53
+ tones.append(0)
54
+ phone_len += 1
55
+ aaa = distribute_phone(phone_len, word_len)
56
+ word2ph += aaa
57
+ # print(phone_list, aaa)
58
+ # print('=' * 10)
59
+
60
+ if pad_start_end:
61
+ phones = ["_"] + phones + ["_"]
62
+ tones = [0] + tones + [0]
63
+ word2ph = [1] + word2ph + [1]
64
+ return phones, tones, word2ph
65
+
66
+ def get_bert_feature(text, word2ph, device=None):
67
+ from text import french_bert
68
+ return french_bert.get_bert_feature(text, word2ph, device=device)
69
+
70
+ if __name__ == "__main__":
71
+ ori_text = 'Ce service gratuit est“”"" 【disponible》 en chinois 【simplifié] et autres 123'
72
+ # ori_text = "Ils essayaient vainement de faire comprendre à ma mère qu'avec les cent mille francs que m'avait laissé mon père,"
73
+ # print(ori_text)
74
+ text = text_normalize(ori_text)
75
+ print(text)
76
+ phoneme = fr_to_ipa.fr2ipa(text)
77
+ print(phoneme)
78
+
79
+
80
+ from TTS.tts.utils.text.phonemizers.multi_phonemizer import MultiPhonemizer
81
+ from text.cleaner_multiling import unicleaners
82
+
83
+ def text_normalize(text):
84
+ text = unicleaners(text, cased=True, lang='fr')
85
+ return text
86
+
87
+ # print(ori_text)
88
+ text = text_normalize(ori_text)
89
+ print(text)
90
+ phonemizer = MultiPhonemizer({"fr-fr": "espeak"})
91
+ # phonemizer.lang_to_phonemizer['fr'].keep_stress = True
92
+ # phonemizer.lang_to_phonemizer['fr'].use_espeak_phonemes = True
93
+ phoneme = phonemizer.phonemize(text, separator="", language='fr-fr')
94
+ print(phoneme)