deepl.exceptions.TooManyRequestsException

Bonjour, je rencontre ce matin un petit souci. Cela faisait qq temps que je n’avais pas modifié mes plugins et donc pas de traduction automatique. Est ce dû à deepl (voir la phrase « DeepL servers are currently experiencing high load ») ?

  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/home/runner/work/_actions/Mips2648/plugins-translations/main/plugintranslations/__main__.py", line 4, in <module>
    PluginTranslator().start()
  File "/home/runner/work/_actions/Mips2648/plugins-translations/main/plugintranslations/translator.py", line 93, in start
    self.do_translate()
  File "/home/runner/work/_actions/Mips2648/plugins-translations/main/plugintranslations/translator.py", line 234, in do_translate
    tr = self.transalte_with_deepl(prompt.get_text(), target_language)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/_actions/Mips2648/plugins-translations/main/plugintranslations/translator.py", line 269, in transalte_with_deepl
    result = self.__deepl_translator.translate_text(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.11/x64/lib/python3.12/site-packages/deepl/translator.py", line 474, in translate_text
    self._raise_for_status(status, content, json)
  File "/opt/hostedtoolcache/Python/3.12.11/x64/lib/python3.12/site-packages/deepl/translator.py", line 209, in _raise_for_status
    raise TooManyRequestsException(
deepl.exceptions.TooManyRequestsException: Too many requests, DeepL servers are currently experiencing high load
Error: Process completed with exit code 1.

Salut,
Sur ton compte tu en es où dans ton quota?

large:

J’étais justement occupé à regarder plus en détail


A priori le quota aurait généré une erreur différente (http 456: Error handling - DeepL Documentation

je peux voir pour adapter le code et ajouter un throttling des appels mais normalement un « too many request » aurait du être géré par le client d’après leur doc:

This is implemented in all of the official, DeepL-supported client libraries.

Mais ils ont p-e subit une pique et le service n’a pas eu le temps de scale-up:

The service dynamically adjusts to the load on the system. Please wait to stop receiving errors to send more requests again. As the service adapts, you will be able to send increasingly more requests within a given amount of time without encountering errors.

1 « J'aime »

la page d’aide de deepl

Error handling

Errors are indicated by standard HTTP status codes. It is important to make sure that your application handles errors in an appropriate way. To that end, please consult the list of expected status code results that are provided with each endpoint’s documentation in the API Reference.

  • HTTP 429: too many requests. This is an error that you might receive when sending many API requests in a short period of time. Your application should be configured to resend the requests after some delay. Specifically, we recommend implementing retries with exponential backoff. This is implemented in all of the official, DeepL-supported client libraries.

cf. ma réponse précédente


du coup tu as testé de relancer le workflow? ca fait pareil?

je viens juste de relancer et même problème.

essayes de passer sur la branch dev (@main),
j’ai mis en place un système pour garantir qu’il y a max un appel par 100 millisecondes (chaque 0.1 secondes donc)

désolé j’étais parti. Je viens de relancer et c’est toujours pareil.

Tu parles de changer de branche mais je suis déjà sur @main:

name: translate

on:
  workflow_dispatch:
  push:
    branches:
      - develop

jobs:
  auto-translate:
    runs-on: ubuntu-latest
    steps:
      - uses: Mips2648/plugins-translations@main
        with:
          deepl_api_key: ${{ secrets.DEEPL_API_KEY2 }}
          include_empty_translation: false
          target_languages: "en_US,es_ES,de_DE,it_IT,pt_PT"
          debug: false

je viens de passer sur v3 et ça a l’air de durer plus longtemps que pour main.

Désolé si c’est ça.

Comment on peut savoir lorsqu’il y a une montée en version pour changer le @vx?

ok donc je confirme que c’est parceque j’étais en @main que cela ne fonctionnait pas. Avec @v3 c’est ok

Avec dependabot, c’est une autre github action à créer
Je pense qu’il y a un post sur community qui en parlait sinon regardes sur un de mes plugins pour avoir un yaml de base
Ici par exemple:

Et justement un exemple de PR faite par dependabot sur ce même repo il y a quelques heures: Bump Mips2648/plugins-translations from 2 to 3 by dependabot[bot] · Pull Request #59 · Mips2648/jeedom-gotify · GitHub

Dependabot peut aussi s’occuper des dépendances python par exemple, à condition d’avoir un fichier requierments.txt (et donc de ne pas utiliser le système prévu dans le core)

1 « J'aime »

Ca c’est bizarre qd même
Je peux avoir le log complet?

Pcq main (dev) va finir en v4 un jour donc si t’es tombé sur un problème ca serait intéressant de corriger :sweat_smile:

je relance en @main et je t’envoie ça

le log complet:

Run Mips2648/plugins-translations@main
Run actions/checkout@v4
Syncing repository: Noyax-37/plugin-teleinfo
Getting Git version info
Temporarily overriding HOME='/home/runner/work/_temp/2e6d1509-6746-4782-8ffe-43cf5446e86e' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
/usr/bin/git config --global --add safe.directory /home/runner/work/plugin-teleinfo/plugin-teleinfo/plugin
Initializing the repository
Disabling automatic garbage collection
Setting up auth
Fetching the repository
Determining the checkout info
/usr/bin/git sparse-checkout disable
/usr/bin/git config --local --unset-all extensions.worktreeConfig
Checking out the ref
/usr/bin/git log -1 --format=%H
e63693d2f734eaa9205fadd60aaaa9fb84ee132d
Run actions/checkout@v4
Syncing repository: jeedom/core
Getting Git version info
Temporarily overriding HOME='/home/runner/work/_temp/429b7c90-1523-4f2f-8137-c96418090e59' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
/usr/bin/git config --global --add safe.directory /home/runner/work/plugin-teleinfo/plugin-teleinfo/jeedom_core
Initializing the repository
Disabling automatic garbage collection
Setting up auth
Fetching the repository
  /usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --depth=1 origin +refs/heads/alpha*:refs/remotes/origin/alpha* +refs/tags/alpha*:refs/tags/alpha*
  From https://github.com/jeedom/core
   * [new branch]      alpha      -> origin/alpha
Determining the checkout info
/usr/bin/git sparse-checkout disable
/usr/bin/git config --local --unset-all extensions.worktreeConfig
Checking out the ref
  /usr/bin/git checkout --progress --force -B alpha refs/remotes/origin/alpha
  Switched to a new branch 'alpha'
  branch 'alpha' set up to track 'origin/alpha'.
/usr/bin/git log -1 --format=%H
a9ed6907b4bf94c5f890eca5512a090f919e9498
Run actions/setup-python@v5
  
Installed versions
Run pip install -r /home/runner/work/_actions/Mips2648/plugins-translations/main/requirements.txt
  
Collecting deepl==1.22.0 (from -r /home/runner/work/_actions/Mips2648/plugins-translations/main/requirements.txt (line 1))
  Downloading deepl-1.22.0-py3-none-any.whl.metadata (35 kB)
Collecting requests<3,>=2 (from deepl==1.22.0->-r /home/runner/work/_actions/Mips2648/plugins-translations/main/requirements.txt (line 1))
  Downloading requests-2.32.4-py3-none-any.whl.metadata (4.9 kB)
Collecting charset_normalizer<4,>=2 (from requests<3,>=2->deepl==1.22.0->-r /home/runner/work/_actions/Mips2648/plugins-translations/main/requirements.txt (line 1))
  Downloading charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (35 kB)
Collecting idna<4,>=2.5 (from requests<3,>=2->deepl==1.22.0->-r /home/runner/work/_actions/Mips2648/plugins-translations/main/requirements.txt (line 1))
  Downloading idna-3.10-py3-none-any.whl.metadata (10 kB)
Collecting urllib3<3,>=1.21.1 (from requests<3,>=2->deepl==1.22.0->-r /home/runner/work/_actions/Mips2648/plugins-translations/main/requirements.txt (line 1))
  Downloading urllib3-2.5.0-py3-none-any.whl.metadata (6.5 kB)
Collecting certifi>=2017.4.17 (from requests<3,>=2->deepl==1.22.0->-r /home/runner/work/_actions/Mips2648/plugins-translations/main/requirements.txt (line 1))
  Downloading certifi-2025.6.15-py3-none-any.whl.metadata (2.4 kB)
Downloading deepl-1.22.0-py3-none-any.whl (43 kB)
Downloading requests-2.32.4-py3-none-any.whl (64 kB)
Downloading charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (148 kB)
Downloading idna-3.10-py3-none-any.whl (70 kB)
Downloading urllib3-2.5.0-py3-none-any.whl (129 kB)
Downloading certifi-2025.6.15-py3-none-any.whl (157 kB)
Installing collected packages: urllib3, idna, charset_normalizer, certifi, requests, deepl
Successfully installed certifi-2025.6.15 charset_normalizer-3.4.2 deepl-1.22.0 idna-3.10 requests-2.32.4 urllib3-2.5.0
Run export PYTHONPATH=$PYTHONPATH:/home/runner/work/_actions/Mips2648/plugins-translations/main
[INFO] : === Run plugin translation with following options ===
[INFO] : source language: fr_FR
[INFO] : target languages: ['en_US', 'es_ES', 'de_DE', 'it_IT', 'pt_PT']
[INFO] : include empty translation: False
[INFO] : use core translations: True
[INFO] : generate source language translations: False
[INFO] : debug: False
[INFO] : deepl api key present: True
[INFO] : =====================================================
[INFO] : Translate plugin module version 3 initialized with deepl version 1.22.0
[INFO] : Read plugin translations file...
[INFO] : file /home/runner/work/plugin-teleinfo/plugin-teleinfo/plugin/core/i18n/pt_PT.json not found !?
[INFO] : Read core translations file...
[INFO] : Find prompts in all plugin files
[INFO] :     plugins/teleinfo/core/api/teleinfo.api.php...
[INFO] :     plugins/teleinfo/core/php/jeeTeleinfo.php...
[INFO] :     plugins/teleinfo/core/php/jeeDownload.php...
[INFO] :     plugins/teleinfo/core/php/jeeHistorize.php...
[INFO] :     plugins/teleinfo/core/class/teleinfo.class.php...
[INFO] :     plugins/teleinfo/core/template/mobile/cmd.info.numeric.teleinfo_base_teleinfo_new_index.html...
[INFO] :     plugins/teleinfo/core/template/mobile/cmd.info.string.teleinfo_base_teleinfo_ptec.html...
[INFO] :     plugins/teleinfo/core/template/mobile/cmd.info.string.teleinfo_bleu_teleinfo_ptec.html...
[INFO] :     plugins/teleinfo/core/template/mobile/cmd.info.numeric.teleinfo_new_index.html...
[INFO] :     plugins/teleinfo/core/template/mobile/cmd.info.numeric.teleinfo_base_teleinfo_conso_inst.html...
[INFO] :     plugins/teleinfo/core/template/mobile/cmd.info.numeric.teleinfo_conso_inst.html...
[INFO] :     plugins/teleinfo/core/template/mobile/cmd.info.string.teleinfo_ptec.html...
[INFO] :     plugins/teleinfo/core/template/mobile/cmd.info.numeric.teleinfo_bleu_teleinfo_conso_inst.html...
[INFO] :     plugins/teleinfo/core/template/mobile/cmd.info.numeric.teleinfo_bleu_teleinfo_new_index.html...
[INFO] :     plugins/teleinfo/core/template/dashboard/cmd.info.numeric.teleinfo_base_teleinfo_new_index.html...
[INFO] :     plugins/teleinfo/core/template/dashboard/cmd.info.string.teleinfo_base_teleinfo_ptec.html...
[INFO] :     plugins/teleinfo/core/template/dashboard/cmd.info.string.teleinfo_bleu_teleinfo_ptec.html...
[INFO] :     plugins/teleinfo/core/template/dashboard/cmd.info.numeric.teleinfo_new_index.html...
[INFO] :     plugins/teleinfo/core/template/dashboard/cmd.info.numeric.teleinfo_base_teleinfo_conso_inst.html...
[INFO] :     plugins/teleinfo/core/template/dashboard/cmd.info.numeric.teleinfo_conso_inst.html...
[INFO] :     plugins/teleinfo/core/template/dashboard/cmd.info.string.teleinfo_ptec.html...
[INFO] :     plugins/teleinfo/core/template/dashboard/cmd.info.numeric.teleinfo_bleu_teleinfo_conso_inst.html...
[INFO] :     plugins/teleinfo/core/template/dashboard/cmd.info.numeric.teleinfo_bleu_teleinfo_new_index.html...
[INFO] :     plugins/teleinfo/core/template/dashboard/teleinfo.template.html...
[INFO] :     plugins/teleinfo/core/ajax/teleinfo.ajax.php...
[INFO] :     plugins/teleinfo/desktop/js/info_daemon.js...
[INFO] :     plugins/teleinfo/desktop/js/panel_sante.js...
[INFO] :     plugins/teleinfo/desktop/js/health.js...
[INFO] :     plugins/teleinfo/desktop/js/panel.js...
[INFO] :     plugins/teleinfo/desktop/js/maintenance.js...
[INFO] :     plugins/teleinfo/desktop/js/teleinfo.config.js...
[INFO] :     plugins/teleinfo/desktop/js/diagnostic.js...
[INFO] :     plugins/teleinfo/desktop/js/options.js...
[INFO] :     plugins/teleinfo/desktop/js/teleinfo.js...
[INFO] :     plugins/teleinfo/desktop/php/teleinfo.php...
[INFO] :     plugins/teleinfo/desktop/php/panel.php...
[INFO] :     plugins/teleinfo/desktop/modal/options.php...
[INFO] :     plugins/teleinfo/desktop/modal/maintenance.php...
[INFO] :     plugins/teleinfo/desktop/modal/diagnostic.php...
[INFO] :     plugins/teleinfo/desktop/modal/health.php...
[INFO] :     plugins/teleinfo/desktop/modal/panel_sante.php...
[INFO] :     plugins/teleinfo/desktop/modal/info_daemon.php...
[INFO] :     plugins/teleinfo/plugin_info/configuration.php...
[INFO] :     plugins/teleinfo/plugin_info/install.php...
[INFO] : Find existing translations...
[INFO] : Check glossary fr_FR=>en_US
[INFO] : Already exists
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/home/runner/work/_actions/Mips2648/plugins-translations/main/plugintranslations/__main__.py", line 4, in <module>
    PluginTranslator().start()
  File "/home/runner/work/_actions/Mips2648/plugins-translations/main/plugintranslations/translator.py", line 95, in start
    self.do_translate()
  File "/home/runner/work/_actions/Mips2648/plugins-translations/main/plugintranslations/translator.py", line 239, in do_translate
    tr = self.transalte_with_deepl(prompt.get_text(), target_language)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/_actions/Mips2648/plugins-translations/main/plugintranslations/throttle.py", line 28, in wrapper
    return fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/_actions/Mips2648/plugins-translations/main/plugintranslations/translator.py", line 277, in transalte_with_deepl
    result = self.__deepl_translator.translate_text(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.11/x64/lib/python3.12/site-packages/deepl/translator.py", line 474, in translate_text
    self._raise_for_status(status, content, json)
  File "/opt/hostedtoolcache/Python/3.12.11/x64/lib/python3.12/site-packages/deepl/translator.py", line 209, in _raise_for_status
    raise TooManyRequestsException(
deepl.exceptions.TooManyRequestsException: Too many requests, DeepL servers are currently experiencing high load
Error: Process completed with exit code 1.

ah zut ça me fait pareil maintenant avec la v3

Pour reproduire le pb avec @main j’avais effacé le fichier portugais. Donc j’ai reproduit le pb mais en revenant sur la @v3 j’avais le même problème. J’ai recréé un fichier portugais vide et toujours le même pb. J’ai récupéré le contenu du fichier portugais que j’avais effacé et je l’ai remis dedans et maintenant ça a l’air de fonctionner mais comme il n’y a pas de différence il ne relance pas la traduction. Je vais modifier un texte qq part.

je viens de tester dependabot en mettant v2 et ça marche super bien. Merci pour le conseil :+1:

1 « J'aime »

J’essaie de regarder pendant la semaine pour le soucis
Je vais décocher « solution » pour ne pas clôturer le post

1 « J'aime »

Bonjour @Mips,

Pour information, j’ai le même soucis aujourd’hui avec un de mes plugins que je suis en train de mettre à jour, en le passant sur la branche béta, j’ai les traductions qui se sont déclenchées (normal), mais impossible d’arrive au bout :frowning:

image

Il y a 120 lignes à mettre à jour, et cela se termine systématiquement en erreur (quelle que soit la version utilisée : main, v3, v2.0.1) :

deepl.exceptions.TooManyRequestsException: Too many requests, DeepL servers are currently experiencing high load

Et en terme de conso, on peut pas dire que je le stresse bcp :stuck_out_tongue:

image

Alors s’il y a une solution, je suis preneur :slight_smile:

Merci d’avance,
Bon dimanche,

TiTidom.