Skip to content

advisors

advisors

AdvisorsAgent — inference-only port of advisor-models (Asawa et al., 2026).

Paper: arXiv:2510.02453. A small open-source advisor model writes feedback that steers a black-box cloud executor. The paper trains the advisor with RL; we don't have a released checkpoint, so this agent is the inference- only lower bound: an untrained Qwen advisor zero-shot prompted with the paper's structure.

Pipeline (mirrors advisor_models/math/env.py):

  1. Executor (cloud) answers the question.
  2. Advisor (local) reads question + initial response and writes critique / hint text.
  3. Executor (cloud) re-answers given question + its own initial response + advisor feedback. This final answer is what we score.

Results from the hybrid harness (n=30 GAIA): advisors-gaia-qwen9b-opus-30 = 0.533, $0.02/task — within 3pp of baseline-cloud at 30× cheaper. The RL-trained variant would land higher.

Ported from hybrid-local-cloud-compute/adapters/advisors_adapter.py.

Classes

AdvisorsAgent

AdvisorsAgent(engine: InferenceEngine, model: str, *, local_model: Optional[str] = None, local_endpoint: Optional[str] = None, cloud_endpoint: str = 'anthropic', cfg: Optional[Dict[str, Any]] = None, bus: Optional[Any] = None, temperature: Optional[float] = None, max_tokens: Optional[int] = None)

Bases: LocalCloudAgent

Three-step executor ↔ advisor ↔ executor loop. See module docstring.

Source code in src/openjarvis/agents/hybrid/_base.py
def __init__(
    self,
    engine: InferenceEngine,
    model: str,
    *,
    local_model: Optional[str] = None,
    local_endpoint: Optional[str] = None,
    cloud_endpoint: str = "anthropic",
    cfg: Optional[Dict[str, Any]] = None,
    bus: Optional[Any] = None,
    temperature: Optional[float] = None,
    max_tokens: Optional[int] = None,
) -> None:
    super().__init__(
        engine,
        model,
        bus=bus,
        temperature=temperature,
        max_tokens=max_tokens,
    )
    self._cloud_model = model
    self._cloud_endpoint = (cloud_endpoint or "anthropic").lower()
    self._local_model = local_model
    self._local_endpoint = local_endpoint
    self._cfg: Dict[str, Any] = dict(cfg or {})

Functions