2.20.9
2.20.9 (2026-09-05)
Fix
- fix(openai): add %s placeholder so retry logging does not raise TypeError (#5391)
Both OpenAI embedding retry handlers passed the caught exception as a
positional argument to logger.info() while the format string had no %
placeholder, so LogRecord.getMessage() raised TypeError: not all arguments converted during string formatting.
The CLI installs RichHandler (build_cli.py) whose emit() calls
self.format(record) without the try/except that stdlib StreamHandler
uses, so the TypeError propagates out of logger.info(), out of the
except block, and neither time.sleep() nor the retry ever runs. With
the default --verbosity 2 the mteb logger sits at INFO, so a single
transient 429 aborts the run and masks the real API error.
Adding the placeholder restores the intended message and matches the
existing style in google_text_embedding.py. The # noqa: PLE1205
suppressions are removed because the rule no longer fires and RUF100
(unused-noqa) is enabled.
Co-authored-by: Claude Opus 5 <noreply@anthropic.com> (0a05983)