LibreTranslate プラグイン -- 無料でオープンソースの翻訳API

Discourse Translator からの議論を続けます:

LibreTranslate - Github プロジェクトページ
プロジェクトの議論は https://community.libretranslate.com/ で行われています

無料でオープンソースの機械翻訳 API。100% セルフホスト可能、オフライン対応、セットアップが簡単です。オープンソースの Argos Translate を搭載しています。

Discourse インストール

Github の readme からコピー&ペースト

この discourse translator プラグイン を使用して、Discourse のトピックを翻訳できます。インストールするには、/var/discourse/containers/app.yml を以下のように修正するだけです:

## プラグインはここに記述
## 詳細は https://meta.discourse.org/t/19157 を参照
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/LibreTranslate/discourse-translator
	  ...

その後、./launcher rebuild app を実行します。Discourse の管理パネルから「LibreTranslate」を翻訳プロバイダーとして選択し、関連するエンドポイント設定を入力してください。

「いいね!」 6

私は著者ではありませんが、この素晴らしいプラグインを偶然発見しました。フォーラムでまだ誰一人として言及されていないようです。これをプラグインのトピックとして作成し、できれば開発者にもこのチャットに参加してもらいたいところです…もし私が完全に勘違いして、すでにメタでこのプラグインがリストアップされている場所を見落としているのでなければの話ですが。

「いいね!」 2

設定を試しましたが、最後のステップ(翻訳の取得)で以下のエラーメッセージが表示されて失敗しました。

An error occurred: #<Excon::Response:0x00007f25419e6818 @data={:body=>"<!doctype html>\n<html>\n<title>405 Method Not Allowed</title>\n<h1>Method Not Allowed</h1>\n<p>The method is not allowed for the requested URL.</p>\n", :cookies=>[], :host=>"172.17.0.1", :headers=>{"Access-Control-Allow-Credentials"=>"true", "Access-Control-Allow-Headers"=>"Authorization, Content-Type", "Access-Control-Allow-Methods"=>"GET, POST", "Access-Control-Allow-Origin"=>"*", "Access-Control-Expose-Headers"=>"Authorization", "Access-Control-Max-Age"=>"1728000", "Allow"=>"HEAD, GET, OPTIONS", "Content-Length"=>"153", "Content-Type"=>"text/html; charset=utf-8", "Date"=>"Sat, 17 Dec 2022 11:18:27 GMT", "Server"=>"waitress"}, :path=>"//languages", :port=>5000, :status=>405, :status_line=>"HTTP/1.1 405 METHOD NOT ALLOWED\r\n", :reason_phrase=>"METHOD NOT ALLOWED", :remote_ip=>"172.17.0.1", :local_port=>50848, :local_address=>"172.17.0.3"}, @body="<!doctype html>\n<html>\n<title>405 Method Not Allowed</title>\n<h1>Method Not Allowed</h1>\n<p>The method is not allowed for the requested URL.</p>\n", @headers={"Access-Control-Allow-Credentials"=>"true", "Access-Control-Allow-Headers"=>"Authorization, Content-Type", "Access-Control-Allow-Methods"=>"GET, POST", "Access-Control-Allow-Origin"=>"*", "Access-Control-Expose-Headers"=>"Authorization", "Access-Control-Max-Age"=>"1728000", "Allow"=>"HEAD, GET, OPTIONS", "Content-Length"=>"153", "Content-Type"=>"text/html; charset=utf-8", "Date"=>"Sat, 17 Dec 2022 11:18:27 GMT", "Server"=>"waitress"}, @status=405, @remote_ip="172.17.0.1", @local_port=50848, @local_address="172.17.0.3">

ドキュメントによると、docker run -d --restart unless-stopped -ti -p 5000:5000 --name="libretranslate" libretranslate/libretranslate で Docker コンテナをセットアップしましたが、これは問題ないように思えます。そして、translator libretranslate endpointhttp://172.17.0.1:5000(IP は Docker ホストの IP)に設定しました。

エラーメッセージによると、Discourse も LibreTranslate に接続できますが、何かが機能していません。

何かアイデアはありますか?

解決しました :slight_smile: : Problem with LibreTranslate as Docker for Discourse - #3 by pierotofy - LibreTranslate API - LibreTranslate Community

Discourseプラグインの最新のGithubバージョンに更新する必要があります。

「いいね!」 2

@Roi これがどのように設定されているか、もう少し詳しく教えていただけますか?混乱しています。sudo docker inspect libretranslate を使用して Docker コンテナの IP を見つけました。

リンクされた投稿によると、API エンドポイントは次のように扱われますか?

http://dockerip:5000

API キーは不要ですか? Discourse と並行して libretranslate をコンテナで実行しています。よろしくお願いします!

@sunjam はい、使用しています。

http://172.17.0.1:5000/

ここで、172.17.0.1 は Libretranslate Docker コンテナの IP アドレスです。

API キーは使用していません。

「いいね!」 2

@Roi ありがとう、これがあなたの実行コマンドのようです:

docker run -d --restart unless-stopped -ti -p 5000:5000 --name="libretranslate" libretranslate/libretranslate

はい、どういうわけかそうです。

docker run -d --restart unless-stopped -ti -p 5000:5000 -e LT_LOAD_ONLY="en,de,fr,it,es,pt,nl,da,sv,pl,cs,ru" --name="libretranslate" libretranslate/libretranslate

Libretranslateはこちらにも報告していますが、MultilingualおよびTranslatorアプリでLibretranslateを使用しようとすると、エラーと警告が発生しています。

Job exception: connect_write timeout reached
Backtrace

/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/socket.rb:317:in `select_with_timeout'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/socket.rb:163:in `rescue in block in connect'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/socket.rb:144:in `block in connect'
/usr/local/lib/ruby/3.2.0/resolv.rb:111:in `each_address'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/socket.rb:134:in `connect'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/socket.rb:51:in `initialize'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/connection.rb:477:in `new'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/connection.rb:477:in `socket'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/connection.rb:121:in `request_call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/excon-0.104.0/lib/excon/middlewares/mock.rb:57:in `request_call'

[details=“DistributedMutex("detect_translation_15"): held for too long, expected max: 60 secs, took an extra 1 secs”]

DistributedMutex("detect_translation_15"): held for too long, expected max: 60 secs, took an extra 1 secs

Backtrace

/var/www/discourse/lib/distributed_mutex.rb:103:in `warn'
/var/www/discourse/lib/distributed_mutex.rb:57:in `ensure in block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:64:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:34:in `synchronize'
/var/www/discourse/plugins/discourse-translator/plugin.rb:98:in `execute'
/var/www/discourse/app/jobs/base.rb:292:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-5.0.0/lib/rails_multisite/connection_management.rb:82:in `with_connection'
/var/www/discourse/app/jobs/base.rb:279:in `block in perform'

[/details]

「いいね!」 1

推奨されている無料インスタンスでLibretranslateプラグインのテストを継続しています。tests-passedでこのエラーが表示されています。

[details=" ジョブ例外: {"error"=\u003e"無効なリクエスト: qパラメータがありません"} "]

メッセージ (2件報告済み)
ジョブ例外: {"error"=>"無効なリクエスト: qパラメータがありません"}


バックトレース

/var/www/discourse/plugins/discourse-translator/services/discourse_translator/libretranslate.rb:150:in `result'
/var/www/discourse/plugins/discourse-translator/services/discourse_translator/libretranslate.rb:84:in `detect'
/var/www/discourse/plugins/discourse-translator/plugin.rb:99:in `block in execute'
/var/www/discourse/lib/distributed_mutex.rb:53:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:34:in `synchronize'
/var/www/discourse/plugins/discourse-translator/plugin.rb:98:in `execute'
/var/www/discourse/app/jobs/base.rb:292:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-5.0.0/lib/rails_multisite/connection_management.rb:82:in `with_connection'

[/details]