mirror of
https://github.com/illian64/llm-translate.git
synced 2026-04-28 03:39:51 +00:00
whisper
This commit is contained in:
parent
09aee947f8
commit
deed8d176b
8 changed files with 145 additions and 68 deletions
|
|
@ -110,6 +110,11 @@
|
|||
* * default_to_lang - двухбуквенный код языка, будет использован, как язык, на который необходимо перевести, если он не был явно указан.
|
||||
* * sleep_after_translate - время в секундах (может быть дробным, например, 0.1), которое севрис будет ожидать после завершения перевода.
|
||||
|
||||
* Группа **rest_log_params** - параметры логирования запросов и ответов перевода.
|
||||
* * translate_req_text - логирование исходного текста
|
||||
* * translate_resp_text - логирование текста перевода
|
||||
* * translate_validation_errors - логирование ошибок в текстах запросов
|
||||
|
||||
* **v** - служебное значение, версия плагина. При повышении версии плагин дополнит файл конфигурации новыми параметрами.
|
||||
|
||||
### Как текст разбивается на части при использовании параметра split_expected_length
|
||||
|
|
|
|||
38
doc/ru/plugins-file-processing/file_media_whisper.md
Normal file
38
doc/ru/plugins-file-processing/file_media_whisper.md
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# Плагин обработки файлов: media
|
||||
|
||||
Часть параметров, общих для всех плагинов, описана [здесь](../processing_files.md).
|
||||
|
||||
## Параметры плагина
|
||||
|
||||
* **model** - модель для распознавания звука. Модели можно увидеть например [здесь](https://github.com/openai/whisper/blob/main/whisper/__init__.py).
|
||||
Вот этот список: tiny.en, tiny, base.en, base, small.en, small, medium.en, medium, large-v1, large-v2, large-v3, large, large-v3-turbo, turbo
|
||||
|
||||
* **cuda** - `true` - использовать видеокарту (быстрее), `false` - использовать cpu (медленнее).
|
||||
|
||||
* **cuda_device_index** - если в системе несколько видеокарт, можно выбрать ту, в которую будет загружена модель.
|
||||
Номер и имя видеокарты указывается при старте приложения в логе, вида `INFO GPU #0: NVIDIA GeForce RTX 4090`.
|
||||
`0` - указываемый в параметре номер.
|
||||
|
||||
* **unload_model_after_processing** - выгружать модель из памяти после завершения обработки списка файлов. Можно использовать, если на карте мало памяти.
|
||||
|
||||
* **translate_after_processing** - переводить субтитры сразу после распознавания. По умолчанию, будет запущен обработчик [srt-Файлов](file_srt.md).
|
||||
|
||||
* **output_file_name_template** - шаблон для имени файла.
|
||||
|
||||
Следующие пункты подробно описаны в документации к Whisper, например здесь https://github.com/openai/whisper/blob/main/whisper/transcribe.py, поэтому ниже общее описание.
|
||||
|
||||
* **temperature** - массив значений точности распознавания.
|
||||
|
||||
* **condition_on_previous_text** - основываться на предыдущем тексте.
|
||||
|
||||
* **word_timestamps** - временные метки для слов - нужно для корректного создания субтитров.
|
||||
|
||||
* **hallucination_silence_threshold** - порог галлюцинаций (додумывания текста) при распознавании.
|
||||
|
||||
* **carry_initial_prompt** - если True, то значение `initial_prompt` будет добавлено в каждый вызов функции декодирования.
|
||||
|
||||
* **initial_prompt** - подсказки дял перевода, например, чтобы помочь распознавать трудные слова.
|
||||
|
||||
* **compression_ratio_threshold** - считать распознавание неудачным при значении выше этого параметра.
|
||||
|
||||
* **logprob_threshold** - если средняя логарифмическая вероятность ниже этого значения, считать распознавание неудачным
|
||||
15
doc/ru/plugins-file-processing/file_srt.md
Normal file
15
doc/ru/plugins-file-processing/file_srt.md
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
# Плагин обработки файлов: srt
|
||||
|
||||
Часть параметров, общих для всех плагинов, описана [здесь](../processing_files.md).
|
||||
|
||||
## Параметры плагина
|
||||
|
||||
* **text_format** - параметры форматирования текста в обрабатываемом файле.
|
||||
* * **original_prefix** - символы, которые будут подставлены в начале оригинального текста.
|
||||
* * **original_postfix** - символы, которые будут подставлены в конце оригинального текста.
|
||||
* * **translate_prefix** - символы, которые будут подставлены в начале переведенного текста.
|
||||
* * **translate_postfix** - символы, которые будут подставлены в конце переведенного текста.
|
||||
|
||||
* **remove_src_filename_postfix** - удаление из имени исходного файла постфикса. Постфикс может пригодиться, чтобы выбирать по части имени исходные и переведенные файлы.
|
||||
|
||||
* **translate_delimiter** - разделитель между оригиналом и переводом.
|
||||
|
|
@ -17,6 +17,10 @@
|
|||
|
||||
* **file_txt** - [документация](plugins-file-processing/file_txt.md). Перевод книг в формате txt.
|
||||
|
||||
* **file_media_whisper** - [документация](plugins-file-processing/file_media_whisper.md). Распознавание текста в медиа-файлах. Поддерживаются практически все файлы, которые может прочитать ffmpeg.
|
||||
|
||||
* **file_srt** - [документация](plugins-file-processing/file_txt.md). Перевод субтитров srt. Можно найти существующие субтитры, или распознать звуковую дорожку через плагин `file_media_whisper`.
|
||||
|
||||
## Параметры, которые задаются в основной конфигурации
|
||||
|
||||
Некоторые параметры не настраиваются в плагинах, например, пути для исходных / обработанных файлов.
|
||||
|
|
|
|||
|
|
@ -6,67 +6,6 @@
|
|||
Модули могут работать независимо, используя только функционал сервиса, или вызывать внешние приложения.
|
||||
Параметры, использование моделей и прочее более подробно указано в документации для каждого плагина отдельно.
|
||||
|
||||
## Перевод через REST API
|
||||
|
||||
Сервис поддерживает перевод через REST-запросы. Просмотреть API можно здесь по адресу host:port/docs,
|
||||
по умолчанию здесь: http://127.0.0.1:4990/docs
|
||||
|
||||
Базовый запрос для перевода: POST http://127.0.0.1:4990/translate
|
||||
Минимальное работающее тело запроса выглядит так:
|
||||
```json
|
||||
{
|
||||
"text": "hi"
|
||||
}
|
||||
```
|
||||
Для такого запроса будут автоматически выбраны язык оригинала, язык на который нужно выполнить перевод,
|
||||
плагин для перевода - все это задается через [параметры](options.md).
|
||||
|
||||
Все параметры для перевода можно переопределить вручную.
|
||||
```json
|
||||
{
|
||||
"text": "hi",
|
||||
"context": "context",
|
||||
"from_lang": "en",
|
||||
"to_lang": "ru",
|
||||
"translator_plugin": "lm_studio"
|
||||
}
|
||||
```
|
||||
В этом запросе:
|
||||
* **text** - текст для перевода
|
||||
* **context** - дополнительный контекст. Например, можно указать, чтобы какое-то имя переводилось определенным образом,
|
||||
или дать понять, какого стиля переводимый текст - художественный, научный, юридический и т. д.
|
||||
* **from_lang** - двухбуквенный код языка оригинала. Коды можно посмотреть в файле [common.js](../../static/common.js) проекта.
|
||||
* **to_lang** - двухбуквенный код языка, на который нужно выполнить перевод.
|
||||
* **translator_plugin** - плагин дял перевода. Он должен быть загружен в сервис.
|
||||
|
||||
Также можно выполнить GET запрос и передат ьвсе параметры в него, например
|
||||
http://127.0.0.1:4990/translate?text=hi&from_lang=en&to_lang=ru&context=context&translator_plugin=lm_studio
|
||||
|
||||
|
||||
Ответ:
|
||||
```json
|
||||
{
|
||||
"result": "Здравствуйте!",
|
||||
"parts": [
|
||||
{
|
||||
"text": "hi",
|
||||
"translate": "Здравствуйте!",
|
||||
"paragraph_end": true
|
||||
}
|
||||
],
|
||||
"error": null
|
||||
}
|
||||
```
|
||||
* **result** - результат перевода.
|
||||
* **parts** - если текст в процессе перевода был разбит на несколько частей, в этом массиве будут представлены
|
||||
все части, и перевод каждой из частей. Это может пригодиться для понимания того, почему перевод был выполнен
|
||||
не полностью и подобрать более подходящие параметры разбиения текста на части.
|
||||
* * **parts[].text** - часть исходного текста, на исходном языке, после преобразований.
|
||||
* * **parts[].translate** - перевод части текста
|
||||
* * **parts[].paragraph_end** является ли часть последним предложением в параграфе (необходимо для соединения частей в поле результата `result`).
|
||||
* **error** - если перевод был выполнен успешно - null, иначе - текст ошибки.
|
||||
|
||||
|
||||
## Список поддерживаемых плагинов
|
||||
|
||||
* **kobold_cpp** - [проект](https://github.com/LostRuins/koboldcpp), [документация](plugins-translate/kobold_cpp.md).
|
||||
|
|
@ -96,4 +35,76 @@ http://127.0.0.1:4990/translate?text=hi&from_lang=en&to_lang=ru&context=context&
|
|||
|
||||
* **no_translate** - этот плагин не является переводчиком, поэтому не имеет параметров.
|
||||
Возвращает в ответе переданный в запросе текст без изменений.
|
||||
Его можно использовать для отладки при работе с параметрами и разработке функционала сервиса.
|
||||
Его можно использовать для отладки при работе с параметрами и разработке функционала сервиса.
|
||||
|
||||
|
||||
## Перевод через REST API
|
||||
|
||||
Сервис поддерживает перевод через REST-запросы. Просмотреть API можно здесь по адресу host:port/docs,
|
||||
по умолчанию здесь: http://127.0.0.1:4990/docs
|
||||
|
||||
Базовый запрос для перевода: POST http://127.0.0.1:4990/translate
|
||||
Минимальное работающее тело запроса выглядит так:
|
||||
```json
|
||||
{
|
||||
"text": "hi"
|
||||
}
|
||||
```
|
||||
Для такого запроса будут автоматически выбраны язык оригинала, язык на который нужно выполнить перевод,
|
||||
плагин для перевода - все это задается через [параметры](options.md).
|
||||
|
||||
Все параметры для перевода можно переопределить вручную.
|
||||
```json
|
||||
{
|
||||
"text": "hi",
|
||||
"context": "context",
|
||||
"from_lang": "en",
|
||||
"to_lang": "ru",
|
||||
"translator_plugin": "lm_studio"
|
||||
}
|
||||
```
|
||||
В этом запросе:
|
||||
* **text** - текст для перевода
|
||||
* **context** - дополнительный контекст. Например, можно указать, чтобы какое-то имя переводилось определенным образом,
|
||||
или дать понять, какого стиля переводимый текст - художественный, научный, юридический и т. д.
|
||||
* **from_lang** - двухбуквенный код языка оригинала. Коды можно посмотреть в файле [common.js](../../static/common.js) проекта.
|
||||
* **to_lang** - двухбуквенный код языка, на который нужно выполнить перевод.
|
||||
* **translator_plugin** - плагин дял перевода. Он должен быть загружен в сервис.
|
||||
|
||||
Также можно выполнить GET запрос и передать все параметры в него, например
|
||||
http://127.0.0.1:4990/translate?text=hi&from_lang=en&to_lang=ru&context=context&translator_plugin=lm_studio
|
||||
|
||||
|
||||
Ответ:
|
||||
```json
|
||||
{
|
||||
"result": "Здравствуйте!",
|
||||
"parts": [
|
||||
{
|
||||
"text": "hi",
|
||||
"translate": "Здравствуйте!",
|
||||
"paragraph_end": true
|
||||
}
|
||||
],
|
||||
"error": null
|
||||
}
|
||||
```
|
||||
* **result** - результат перевода.
|
||||
* **parts** - если текст в процессе перевода был разбит на несколько частей, в этом массиве будут представлены
|
||||
все части, и перевод каждой из частей. Это может пригодиться для понимания того, почему перевод был выполнен
|
||||
не полностью и подобрать более подходящие параметры разбиения текста на части.
|
||||
* * **parts[].text** - часть исходного текста, на исходном языке, после преобразований.
|
||||
* * **parts[].translate** - перевод части текста
|
||||
* * **parts[].paragraph_end** является ли часть последним предложением в параграфе (необходимо для соединения частей в поле результата `result`).
|
||||
* **error** - если перевод был выполнен успешно - null, иначе - текст ошибки.
|
||||
|
||||
### Запросы sugoi-like
|
||||
Это запросы в формате [Sugoi-Japanese-Translator](https://github.com/leminhyen2/Sugoi-Japanese-Translator),
|
||||
нужны для интеграции с другими приложениями, которые поддерживают sugoi-translator - таким образом, указав в настройках
|
||||
внешнего приложения адрес этого приложения, можно осуществить интеграцию.
|
||||
|
||||
Например, sugoi-translator поддерживают:
|
||||
* [translator-plusplus](https://dreamsavior.net/translator-plusplus/)
|
||||
* [LunaTranslator](https://docs.lunatranslator.org/en/)
|
||||
|
||||
Поддерживается GET и POST варианты запросов, оба этих запроса находятся по пути `/translate/sugoi-like`.
|
||||
4
main.py
4
main.py
|
|
@ -107,7 +107,7 @@ async def translate_post(req: dto.TranslateReq) -> dto.TranslateResp:
|
|||
async def translate_sugoi_like_post(req: dto.SugoiLikePostReq, from_lang: str = "", to_lang: str = "", context: str = None,
|
||||
translator_plugin: str = "") -> list[str]:
|
||||
"""
|
||||
Translate text. Request and response like a sugoi translator - https://github.com/leminhyen2/Sugoi-Japanese-Translator/tree/main
|
||||
Translate text. Request and response like a sugoi translator - https://github.com/leminhyen2/Sugoi-Japanese-Translator
|
||||
This allows the query to be used in integration programs such as a Translator++ - http://dreamsavior.net/docs/translator/
|
||||
|
||||
:param req:
|
||||
|
|
@ -144,7 +144,7 @@ async def translate_sugoi_like_post(req: dto.SugoiLikePostReq, from_lang: str =
|
|||
async def translate_sugoi_like_post(text: str, from_lang: str = "", to_lang: str = "", context: str = None,
|
||||
translator_plugin: str = "") -> dto.SugoiLikeGetResp:
|
||||
"""
|
||||
Translate text. Request and response like a sugoi translator - https://github.com/leminhyen2/Sugoi-Japanese-Translator/tree/main
|
||||
Translate text. Request and response like a sugoi translator - https://github.com/leminhyen2/Sugoi-Japanese-Translator
|
||||
This allows the query to be used in integration programs such as a Translator++ - http://dreamsavior.net/docs/translator/
|
||||
|
||||
:param str text: text to translate.
|
||||
|
|
|
|||
|
|
@ -32,8 +32,10 @@ def start(core: AppCore):
|
|||
"no_speech_threshold": 0.6,
|
||||
"word_timestamps": True,
|
||||
"hallucination_silence_threshold": 1,
|
||||
"prompt": "",
|
||||
"carry_initial_prompt": False,
|
||||
"initial_prompt": "",
|
||||
"compression_ratio_threshold": 2.4,
|
||||
"logprob_threshold": -1.0,
|
||||
|
||||
"output_file_name_template": "%%source%%.src_sub",
|
||||
},
|
||||
|
|
@ -84,8 +86,10 @@ def file_processing(core: AppCore, file_struct: ProcessingFileStruct, req: Proce
|
|||
no_speech_threshold=options["no_speech_threshold"],
|
||||
word_timestamps=options["word_timestamps"],
|
||||
hallucination_silence_threshold=options["hallucination_silence_threshold"],
|
||||
prompt=options["prompt"],
|
||||
carry_initial_prompt=options["carry_initial_prompt"],
|
||||
initial_prompt=options["initial_prompt"],
|
||||
compression_ratio_threshold=options["compression_ratio_threshold"],
|
||||
logprob_threshold=options["logprob_threshold"]
|
||||
)
|
||||
|
||||
if transcribe:
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ def start(core: AppCore):
|
|||
"translate_prefix": "<i>",
|
||||
"translate_postfix": "</i>",
|
||||
},
|
||||
"remove_src_postfix": ".src_sub",
|
||||
"remove_src_filename_postfix": ".src_sub",
|
||||
"translate_delimiter": "\n",
|
||||
"output_file_name_template": {
|
||||
"preserve_original": "%%source%%.%%from_lang%%_%%to_lang%%",
|
||||
|
|
@ -73,7 +73,7 @@ def file_processing(core: AppCore, file_struct: ProcessingFileStruct, req: Proce
|
|||
|
||||
def processed_file_name(core: AppCore, file_struct: ProcessingFileStruct, req: ProcessingFileDirReq) -> str:
|
||||
options = core.plugin_options(plugin_name)
|
||||
src_postfix = options["remove_src_postfix"]
|
||||
src_postfix = options["remove_src_filename_postfix"]
|
||||
|
||||
return file_processor.file_name_from_template(file_struct=file_struct, req=req, options=options).replace(src_postfix + ".", ".")
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue