No SDK path stamps session_handle_id, so RAG can't run end to end

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

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

What

No SDK path ever stamps OperatorSpec.params["session_handle_id"] for a RAG solution. expand_rag (core/src/solutions/solution_converter.cpp) never sets it, and a search of core/src, core/include, bindings and engines finds no other writer. RetrieveNode::process (core/src/solutions/operators/op_engine_backed.cpp:748) cancels the graph with "retrieve requires OperatorSpec.params['session_handle_id']" on the first input when it's missing -- already documented as expected behavior by test_solution_runner.cpp's retrieve_without_session_handle_fails_honestly test.

Why it matters

This means a RAG SolutionConfig cannot currently run end to end through any SDK (Swift, Kotlin, Flutter, React Native, Web) -- every one of them reaches RetrieveNode through rac_solution_create_* and hits this same wall.

Suggested approach

Add a way in the Solutions ABI to attach a RAG session (e.g. from rac_rag_session_create_proto) to a SolutionRunner, so the retrieve operator receives a real handle.

Done when

  • At least one SDK can run a RAG SolutionConfig end to end against a live session without manually poking params.

Not blocking #839. @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