Skip to content

v0.3.0 - pluggable multi-engine backends

Choose a tag to compare

@espetro espetro released this 14 Sep 22:59
· 183 commits to main since this release

First release with pluggable search backends.

Added

  • Multi-backend support via OXE_BACKENDS (JSON): single engine, fallback chain, or fanout compositor. Any engine the bundled ddgs library works: bing, brave, google, mojeek, yahoo, yandex, wikipedia.
  • DdgsBackend(engine) drives any ddgs engine through the same Exa-compatible translation layer; DDGBackend is the ddg specialization.
  • oxe.registry: builtins + engine names + oxe.backends entry-point discovery. Third-party backends register by name.
  • FallbackBackend (first non-empty wins, per-backend timeout) and FanoutBackend (concurrent query, merge + dedupe by URL).
  • Package-root exports: BackendError, FallbackBackend, FanoutBackend, SearchBackend, build_from_env.

Changed

  • Cache key includes the backend name; results from different engines never collide in one database.
# DDG first, fall back to bing
OXE_BACKENDS='["ddg", "bing"]' oxe

Full changelog: https://github.com/espetro/oxe/blob/main/CHANGELOG.md