Mastra

This guide shows how to integrate the Scorable SDK as a custom scorer for evaluating your Mastra agents.

Setting Up the Scorable Client

// npm install @root-signals/scorable
import { Scorable } from "@root-signals/scorable";

const scorableClient = new Scorable({
  apiKey: process.env.SCORABLE_API_KEY!,
});

Creating a Scorable Scorer

Use createScorer from mastra to define a custom scorer that calls Scorable's evaluator API:

import { createScorer } from "@mastra/core/scores";
import { Scorable } from "@root-signals/scorable";

const scorableClient = new Scorable({
  apiKey: process.env.SCORABLE_API_KEY!,
});

export const helpfulnessScorer = createScorer({
  name: "Helpfulness",
  description: "Helpfulness of the assistant's response",
})
  .preprocess(({ run }) => {
    const userText = (run.input?.inputMessages?.[0]?.content as string) || "";
    const assistantText = (run.output?.[0]?.content as string) || "";
    return { userText, assistantText };
  })
  .analyze(async ({ results }) => {
    const response = results.preprocessStepResult.assistantText;
    const request = results.preprocessStepResult.userText;
    const scoreResult = await scorableClient.evaluators.executeByName(
      "Helpfulness",
      {
        request: request,
        response: response,
      }
    );
    return scoreResult;
  })
  .generateScore(({ results }) => {
    const scoreResult = results.analyzeStepResult
    return scoreResult.score ?? 0;
  })
  .generateReason(({ results }) => {
    return results.analyzeStepResult?.justification ?? "N/A";
  });

Integrating with an Agent

Attach the scorer to your agent configuration:

Last updated