Python SDK can't request normalize=False for embeddings

Author: sanchitmonga22Created Sep 11, 2026Updated Sep 11, 2026
LabelsenhancementP3

Follow-up from #841 by @ayaangazali -- thanks again for that PR!

What

bindings/python/runanywhere/_options_bridge.py:168-172 raises SDKException.not_implemented for EmbedOptions(normalize=False) because the Python bridge's embed() binds no rac_embeddings_options_t and always returns L2-normalized vectors. Now that the commons proto adapter correctly forwards normalize=false (#841), Python is the only SDK left that can't ask for the raw vector -- Kotlin, Swift, Flutter, React Native, Web and Electron all map it through already.

Why it matters

Feature parity: any Python workflow that needs raw (unnormalized) embeddings -- custom similarity metrics, re-ranking, etc. -- has no path today.

Suggested approach

Route the Python bridge's embed() through the proto embeddings entry point (or otherwise bind rac_embeddings_options_t) so normalize and pooling reach commons, then drop the not_implemented guard in check_embed_options.

Done when

  • EmbedOptions(normalize=False) returns a raw pooled vector from Python, matching the other SDKs.
  • The not_implemented guard for normalize is removed.

Not blocking #841. @ayaangazali, you know this code well now -- you're welcome to take this one if you're interested.

Opened with help from Claude Code and Codex.

Reviewed with help from Claude Code and Codex.

Source: RunanywhereAI/runanywhere-sdks