Brief context:

  • Jev came out recently, offering API access to a closed, API-only model that answers typed decision questions (developer-specified schemas) in a single pass, with probabilities post-trained for calibration.
  • SalesRLAgent (arXiv, HF repo) is an earlier model by Nandakishor Mukkunnoth that predicts sales-conversion probability from sales conversations.
  • Laya is an open-weights, Jev-compatible alternative, also by Mukkunnoth. In its launch post, Mukkunnoth claims SalesRLAgent was prior art for Jev and went unjustly uncredited. His claim has since circulated broadly.

I dug into SalesRLAgent over the weekend. I found serious errors and virtually zero commonality with Jev.

Egregious Data Leakage

SalesRLAgent’s train.py has the eventual conversion outcome as a model input. The information flow is: row['outcome']metricsConversationState.conversation_metricsmetric_valuesstate_vectorobservation returned by reset. Each step copies self.conversation_state.conversation_metrics forward into the next state, so outcome is in every single observation of the episode.

There are many others but I think you get the idea. It’s all really bad.

Bizarre Application of PPO

The author described it as:

a chess game kinda system for predicting sales conversion probabilities from sales conversations… Then I just trained an RL with PPO, by reducing the dimension using a linear layer and using that to do the final prediction with PPO.

SalesRLAgent seems to be:

  • An MLP over OpenAI text embeddings (plus conversation_metrics, which included the target)
  • A synthetic dataset of sales conversations (I can’t say which generator revision produced it)
  • RL via PPO?

The model is rewarded based on:

$$ r_t = 1 - |\hat{p}_t - q_t| $$

where $q_t$ is a stored annotation from the synthetic dataset, plus a penalty for being on the wrong side of $0.5$:

        # Apply higher reward/penalty at final step based on outcome
        if self.current_turn == self.max_turns - 1:
            outcome = self.conversation_state.conversation_metrics['outcome']
            # Stronger penalty for confident wrong predictions
            if outcome == 1 and predicted_prob < 0.5:
                reward -= 1.0 * (0.5 - predicted_prob)
            elif outcome == 0 and predicted_prob > 0.5:
                reward -= 1.0 * (predicted_prob - 0.5)

If $q_t$ is a latent probability used to generate the synthetic data, then regressing on it is at least a coherent supervised target. From peeking at commit history, that may not the case, though I can’t take this as authoritative (generate_dataset.py was deleted and never put back; maybe he fixed it and never told anybody!).

Anyway, the agent never learns to intervene in its environment, it’s just doing regression. In the training environment, the policy outputs a prediction, but doesn’t sample a sales intervention whose consequences are then simulated or observed.

The author claims that “the guiding brain in my system was always reinforcement learning,” but it’s unclear why PPO is even here.

Jev

Jev is a generally-capable model with a strict, yet generic interface. It guarantees type-safety by restricting the support of the output distribution, and apparently post-trained with an RL objective that rewards calibration. It may not be calibrated w.r.t. your data but that’s another discussion.

We can’t verify the specific objective or architecture, as it’s not open-source.

Shaky Comparison to Jev

From his post, emphasis mine:

They proposed the exact same non-autoregressive decision concept as if it was a brand-new scientific breakthrough.

My earlier model used PPO over sequence representations to output turn-by-turn conversion trajectories (probabilities from 0.0 to 1.0) in vertical sales conversations. Jev generalized parallel sampling using what they called RLCD (Reinforcement Learning for Calibrated Decisions) to output confidence distributions and schema choices horizontally, charging $0.042 per million input tokens with typical response times around 150 ms.

The main point of comparison here appears to be the concept of making decisions based on a non-autoregressive model, using RL. Obviously this predates both; If SalesRLAgent’s application of PPO can be credibly descibed as RL, then this trivially describes every fine-tuned probabilistic classifier.

Point of comparisonSalesRLAgentJev
Support for variable developer schemasNone whatsoever; SalesRLAgent supported predictions for a single binary outcome (poorly)Arguably its primary selling point
RL for calibrationSalesRLAgent’s application of PPO seemed confused, unnecessary, hardly novelUnknown what RLCD is precisely
Model architectureMLP over text-embedding-3-largeNot public
Inference costNo hosted API, reliant on OpenAI text embeddings$0.042 per million input tokens with typical response times around 150 ms

Open releases make scrutiny possible, which is one reason they are valuable. But the released SalesRLAgent implementation has disappointing flaws and, unless the author has nonpublic information about Jev’s training and architecture, nothing in common.

The longer it takes for us to identify unsupported claims, the less credence we can give to legitimate open-source work, and the more we must defer to shallow reputation signals and closed-source solutions. Hence my post.