Closed Omirax closed 1 year ago
Приветствую!
Периодически(!) возникает проблема парсинга SSML. Причем возникает без какой-либо закономерности.
Exception in ASGI application Traceback (most recent call last): File "/usr/local/lib/python3.10/site-packages/uvicorn/protocols/http/h11_impl.py", line 407, in run_asgi result = await app( # type: ignore[func-returns-value] File "/usr/local/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in __call__ return await self.app(scope, receive, send) File "/usr/local/lib/python3.10/site-packages/uvicorn/middleware/message_logger.py", line 86, in __call__ raise exc from None File "/usr/local/lib/python3.10/site-packages/uvicorn/middleware/message_logger.py", line 82, in __call__ await self.app(scope, inner_receive, inner_send) File "/usr/local/lib/python3.10/site-packages/fastapi/applications.py", line 270, in __call__ await super().__call__(scope, receive, send) File "/usr/local/lib/python3.10/site-packages/starlette/applications.py", line 124, in __call__ await self.middleware_stack(scope, receive, send) File "/usr/local/lib/python3.10/site-packages/starlette/middleware/errors.py", line 184, in __call__ raise exc File "/usr/local/lib/python3.10/site-packages/starlette/middleware/errors.py", line 162, in __call__ await self.app(scope, receive, _send) File "/usr/local/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 79, in __call__ raise exc File "/usr/local/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 68, in __call__ await self.app(scope, receive, sender) File "/usr/local/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__ raise e File "/usr/local/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__ await self.app(scope, receive, send) File "/usr/local/lib/python3.10/site-packages/starlette/routing.py", line 706, in __call__ await route.handle(scope, receive, send) File "/usr/local/lib/python3.10/site-packages/starlette/routing.py", line 276, in handle await self.app(scope, receive, send) File "/usr/local/lib/python3.10/site-packages/starlette/routing.py", line 66, in app response = await func(request) File "/usr/local/lib/python3.10/site-packages/fastapi/routing.py", line 235, in app raw_response = await run_endpoint_function( File "/usr/local/lib/python3.10/site-packages/fastapi/routing.py", line 161, in run_endpoint_function return await dependant.call(**values) File "/usr/app/app/handlers.py", line 44, in process audio_file = get_tts_file(text, speaker, settings.sample_rate, sox_params=settings.sox_param) File "/usr/app/app/tts.py", line 41, in get_tts_file model.save_wav(ssml_text=text, speaker=speaker, audio_path=temp_file_path, sample_rate=sample_rate) File "<torch_package_0>.multi_acc_v3_package.py", line 366, in save_wav audio = self.apply_tts(text=text, File "<torch_package_0>.multi_acc_v3_package.py", line 316, in apply_tts sentences, clean_sentences, break_lens, prosody_rates, prosody_pitches, sp_ids = self.prepare_tts_model_input(input_text, File "<torch_package_0>.multi_acc_v3_package.py", line 61, in prepare_tts_model_input clean_text_list = self.process_ssml(text) File "<torch_package_0>.multi_acc_v3_package.py", line 113, in process_ssml raise ValueError(f"Failed to parse SSML: {e}") ValueError: Failed to parse SSML: invalid literal for int() with base 10: 'двадцать0' Start text processing: <speak>Текущее время двадцать часов <break time='100ms'/> двадцать одна минута <break time='двадцать0ms'/></speak>
Изначально - <break time='200ms'/>
Думал, что HA чудит, перепробовал многие варианты кавычек и экранирования. Но закономерности так и не уловил.
А что там на вход попадает ?
<speak>Текущее время двадцать часов <break time='100ms'/> двадцать одна минута <break time='200ms'/></speak>
<break time='200ms'/>
превращаются в <break time='двадцать0ms'/>
<speak>Текущее время двадцать часов <break time='100ms'/> двадцать одна минута <break time='200ms'/></speak>
<break time='200ms'/>
превращаются в<break time='двадцать0ms'/>
Вы с HA передаёте текст в теге <speak></speak>
?
Нет, конечно. Простите. Ошибся
Текущее время двадцать часов <break time='100ms'/> двадцать одна минута <break time='200ms'/>
Вот лог Rhysspy
rhasspytts_cli_hermes: ['bash', '-c', ' curl -sS -X GET -G --output - --data-urlencode INPUT_TYPE=TEXT --data-urlencode OUTPUT_TYPE=AUDIO --data-urlencode AUDIO=WAVE --data-urlencode LOCALE= --data-urlencode INPUT_TEXT="$0" http://192.168.1.210:9898/process --data-urlencode VOICE=baya', "Текущее время 20 <d>час</d> <break time='100ms'/> 21 <d>минута</d> <break time='200ms'/>"]
Нет, конечно. Простите. Ошибся
Текущее время двадцать часов <break time='100ms'/> двадцать одна минута <break time='200ms'/>
Вот лог Rhysspy
rhasspytts_cli_hermes: ['bash', '-c', ' curl -sS -X GET -G --output - --data-urlencode INPUT_TYPE=TEXT --data-urlencode OUTPUT_TYPE=AUDIO --data-urlencode AUDIO=WAVE --data-urlencode LOCALE= --data-urlencode INPUT_TEXT="$0" http://192.168.1.210:9898/process --data-urlencode VOICE=baya', "Текущее время 20 <d>час</d> <break time='100ms'/> 21 <d>минута</d> <break time='200ms'/>"]
Я сейчас закончу работу над системой авто обновления и перейду к решению этой проблемы. Я догадываюсь от куда ноги растут у проблемы.
Ok. Если найду закономерность, то сообщу.
Ok. Если найду закономерность, то сообщу.
Причину ошибки я уже нашел. Буду теперь её решать.
Текущее время 20
час 21 минута
Всё ошибка исправлена.
Приветствую!
Периодически(!) возникает проблема парсинга SSML. Причем возникает без какой-либо закономерности.
Изначально - <break time='200ms'/>
Думал, что HA чудит, перепробовал многие варианты кавычек и экранирования. Но закономерности так и не уловил.