{"version":3,"sources":["../../src/scores/types.ts","../../src/scores/base.ts","../../src/scores/code.ts","../../src/scores/llm.ts"],"names":["z","randomUUID","createStep","createWorkflow","Agent"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from 'zod';\n\nexport type ScoringSamplingConfig = { type: 'none' } | { type: 'ratio'; rate: number };\n\nexport type ScoringSource = 'LIVE' | 'TEST';\n\nexport type ScoringEntityType = 'AGENT' | 'WORKFLOW';\n\nexport type ScoringPrompts = {\n  description: string;\n  prompt: string;\n};\n\nexport type ScoringInput = {\n  runId?: string;\n  input?: Record<string, any>[];\n  output: Record<string, any>;\n  additionalContext?: Record<string, any>;\n  runtimeContext?: Record<string, any>;\n};\n\nexport type ScoringHookInput = {\n  runId?: string;\n  scorer: Record<string, any>;\n  input: Record<string, any>[];\n  output: Record<string, any>;\n  metadata?: Record<string, any>;\n  additionalContext?: Record<string, any>;\n  source: ScoringSource;\n  entity: Record<string, any>;\n  entityType: ScoringEntityType;\n  runtimeContext?: Record<string, any>;\n  structuredOutput?: boolean;\n  traceId?: string;\n  resourceId?: string;\n  threadId?: string;\n};\n\nexport const scoringExtractStepResultSchema = z.record(z.string(), z.any()).optional();\n\nexport type ScoringExtractStepResult = z.infer<typeof scoringExtractStepResultSchema>;\n\nexport const scoringValueSchema = z.number();\n\nexport const scoreResultSchema = z.object({\n  result: z.record(z.string(), z.any()).optional(),\n  score: scoringValueSchema,\n  prompt: z.string().optional(),\n});\n\nexport type ScoringAnalyzeStepResult = z.infer<typeof scoreResultSchema>;\n\nexport type ScoringInputWithExtractStepResult<TExtract = any> = ScoringInput & {\n  runId: string;\n  extractStepResult?: TExtract;\n  extractPrompt?: string;\n};\n\nexport type ScoringInputWithExtractStepResultAndAnalyzeStepResult<\n  TExtract = any,\n  TScore = any,\n> = ScoringInputWithExtractStepResult<TExtract> & {\n  score: number;\n  analyzeStepResult?: TScore;\n  analyzePrompt?: string;\n};\n\nexport type ScoringInputWithExtractStepResultAndScoreAndReason =\n  ScoringInputWithExtractStepResultAndAnalyzeStepResult & {\n    reason?: string;\n    reasonPrompt?: string;\n  };\n\nexport type ScoreRowData = ScoringInputWithExtractStepResultAndScoreAndReason &\n  ScoringHookInput & {\n    id: string;\n    entityId: string;\n    scorerId: string;\n    createdAt: Date;\n    updatedAt: Date;\n  };\n\nexport type ExtractionStepFn = (input: ScoringInput) => Promise<Record<string, any>>;\n\nexport type AnalyzeStepFn = (input: ScoringInputWithExtractStepResult) => Promise<ScoringAnalyzeStepResult>;\n\nexport type ReasonStepFn = (\n  input: ScoringInputWithExtractStepResultAndAnalyzeStepResult,\n) => Promise<{ reason: string; reasonPrompt?: string } | null>;\n\nexport type ScorerOptions = {\n  name: string;\n  description: string;\n  extract?: ExtractionStepFn;\n  analyze: AnalyzeStepFn;\n  reason?: ReasonStepFn;\n  metadata?: Record<string, any>;\n  isLLMScorer?: boolean;\n};\n","import { randomUUID } from 'crypto';\nimport { z } from 'zod';\nimport { createStep, createWorkflow } from '../workflows';\nimport { scoreResultSchema, scoringExtractStepResultSchema } from './types';\nimport type {\n  ExtractionStepFn,\n  ReasonStepFn,\n  ScorerOptions,\n  AnalyzeStepFn,\n  ScoringInput,\n  ScoringInputWithExtractStepResultAndScoreAndReason,\n  ScoringSamplingConfig,\n} from './types';\n\nexport class MastraScorer {\n  name: string;\n  description: string;\n  extract?: ExtractionStepFn;\n  analyze: AnalyzeStepFn;\n  reason?: ReasonStepFn;\n  metadata?: Record<string, any>;\n  isLLMScorer?: boolean;\n\n  constructor(opts: ScorerOptions) {\n    this.name = opts.name;\n    this.description = opts.description;\n    this.extract = opts.extract;\n    this.analyze = opts.analyze;\n    this.reason = opts.reason;\n    this.metadata = {};\n    this.isLLMScorer = opts.isLLMScorer;\n\n    if (opts.metadata) {\n      this.metadata = opts.metadata;\n    }\n  }\n\n  async run(input: ScoringInput): Promise<ScoringInputWithExtractStepResultAndScoreAndReason> {\n    let runId = input.runId;\n    if (!runId) {\n      runId = randomUUID();\n    }\n\n    const extractStep = createStep({\n      id: 'extract',\n      description: 'Extract relevant element from the run',\n      inputSchema: z.any(),\n      outputSchema: scoringExtractStepResultSchema,\n      execute: async ({ inputData }) => {\n        if (!this.extract) {\n          return;\n        }\n\n        const extractStepResult = await this.extract(inputData);\n\n        return extractStepResult;\n      },\n    });\n\n    const analyzeStep = createStep({\n      id: 'analyze',\n      description: 'Score the extracted element',\n      inputSchema: scoringExtractStepResultSchema,\n      outputSchema: scoreResultSchema,\n      execute: async ({ inputData }) => {\n        const analyzeStepResult = await this.analyze({ ...input, runId, extractStepResult: inputData?.result });\n\n        return analyzeStepResult;\n      },\n    });\n\n    const reasonStep = createStep({\n      id: 'reason',\n      description: 'Reason about the score',\n      inputSchema: scoreResultSchema,\n      outputSchema: z.any(),\n      execute: async ({ getStepResult }) => {\n        const analyzeStepRes = getStepResult(analyzeStep);\n        const extractStepResult = getStepResult(extractStep);\n\n        if (!this.reason) {\n          return {\n            extractStepResult: extractStepResult?.result,\n            analyzeStepResult: analyzeStepRes?.result,\n            analyzePrompt: analyzeStepRes?.prompt,\n            extractPrompt: extractStepResult?.prompt,\n            score: analyzeStepRes?.score,\n          };\n        }\n\n        const reasonResult = await this.reason({\n          ...input,\n          analyzeStepResult: analyzeStepRes.result,\n          score: analyzeStepRes.score,\n          runId,\n        });\n\n        return {\n          extractStepResult: extractStepResult?.result,\n          analyzeStepResult: analyzeStepRes?.result,\n          analyzePrompt: analyzeStepRes?.prompt,\n          extractPrompt: extractStepResult?.prompt,\n          score: analyzeStepRes?.score,\n          ...reasonResult,\n        };\n      },\n    });\n\n    const scoringPipeline = createWorkflow({\n      id: `scoring-pipeline-${this.name}`,\n      inputSchema: z.any(),\n      outputSchema: z.any(),\n      steps: [extractStep, analyzeStep],\n    })\n      .then(extractStep)\n      .then(analyzeStep)\n      .then(reasonStep)\n      .commit();\n\n    const workflowRun = await scoringPipeline.createRunAsync();\n\n    const execution = await workflowRun.start({\n      inputData: input,\n    });\n\n    if (execution.status !== 'success') {\n      throw new Error(\n        `Scoring pipeline failed: ${execution.status}`,\n        execution.status === 'failed' ? execution.error : undefined,\n      );\n    }\n\n    return { runId, ...execution.result };\n  }\n}\nexport type MastraScorerEntry = {\n  scorer: MastraScorer;\n  sampling?: ScoringSamplingConfig;\n};\n\nexport type MastraScorers = Record<string, MastraScorerEntry>;\n","import { MastraScorer } from './base';\nimport type { ScorerOptions } from './types';\n\nexport function createScorer(opts: ScorerOptions) {\n  const scorer = new MastraScorer({\n    name: opts.name,\n    description: opts.description,\n    extract: opts.extract,\n    analyze: opts.analyze,\n    reason: opts.reason,\n  });\n\n  return scorer;\n}\n","import { z } from 'zod';\nimport { Agent } from '../agent';\nimport type { MastraLanguageModel } from '../agent/types';\nimport { MastraScorer } from './base';\nimport type {\n  ScoringInput,\n  ScoringInputWithExtractStepResult,\n  ScoringInputWithExtractStepResultAndAnalyzeStepResult,\n} from './types';\n\ntype LLMJudge = {\n  model: MastraLanguageModel;\n  instructions: string;\n};\n\nexport type LLMScorerOptions<TExtractOutput extends Record<string, any> = any, TScoreOutput = any> = {\n  name: string;\n  description: string;\n  judge: LLMJudge;\n  extract?: {\n    description: string;\n    judge?: LLMJudge;\n    outputSchema: z.ZodType<TExtractOutput>;\n    createPrompt: ({ run }: { run: ScoringInput }) => string;\n  };\n  analyze: {\n    description: string;\n    judge?: LLMJudge;\n    outputSchema: z.ZodType<TScoreOutput>;\n    createPrompt: ({ run }: { run: ScoringInput & { extractStepResult: TExtractOutput } }) => string;\n  };\n  reason?: {\n    description: string;\n    judge?: LLMJudge;\n    createPrompt: ({\n      run,\n    }: {\n      run: ScoringInputWithExtractStepResult & { analyzeStepResult: TScoreOutput; score: number };\n    }) => string;\n  };\n  calculateScore: ({ run }: { run: ScoringInputWithExtractStepResult & { analyzeStepResult: TScoreOutput } }) => number;\n};\n\nexport function createLLMScorer<TExtractOutput extends Record<string, any> = any, TScoreOutput = any>(\n  opts: LLMScorerOptions<TExtractOutput, TScoreOutput>,\n) {\n  const model = opts.judge.model;\n\n  const llm = new Agent({\n    name: opts.name,\n    instructions: opts.judge.instructions,\n    model: model,\n  });\n\n  const scorer = new MastraScorer({\n    name: opts.name,\n    description: opts.description,\n    metadata: opts,\n    isLLMScorer: true,\n    ...(opts.extract && {\n      extract: async run => {\n        const prompt = opts.extract!.createPrompt({ run });\n        const extractResult = await llm.generate(prompt, {\n          output: opts.extract!.outputSchema,\n        });\n\n        return {\n          result: extractResult.object as Record<string, any>,\n          prompt,\n        };\n      },\n    }),\n    analyze: async run => {\n      const runWithExtractResult = {\n        ...run,\n        extractStepResult: run.extractStepResult,\n      };\n\n      const prompt = opts.analyze.createPrompt({ run: runWithExtractResult });\n\n      const analyzeResult = await llm.generate(prompt, {\n        output: opts.analyze.outputSchema,\n      });\n\n      let score = 0;\n\n      const runWithScoreResult = {\n        ...runWithExtractResult,\n        analyzeStepResult: analyzeResult.object,\n      };\n\n      if (opts.calculateScore) {\n        score = opts.calculateScore({ run: runWithScoreResult });\n      }\n\n      (runWithScoreResult as ScoringInputWithExtractStepResultAndAnalyzeStepResult).score = score;\n\n      return {\n        result: analyzeResult.object!,\n        score: score,\n        prompt,\n      };\n    },\n    reason: opts.reason\n      ? async run => {\n          // Prepare run with both extract and score results\n          const runWithAllResults = {\n            ...run,\n            extractStepResult: run.extractStepResult,\n            analyzeStepResult: run.analyzeStepResult, // Use results as fallback\n            score: run.score || 0,\n          };\n\n          const prompt = opts.reason?.createPrompt({ run: runWithAllResults })!;\n\n          const reasonResult = await llm.generate(prompt, {\n            output: z.object({\n              reason: z.string(),\n            }),\n          });\n\n          return {\n            reason: reasonResult.object.reason,\n            reasonPrompt: prompt,\n          };\n        }\n      : undefined,\n  });\n\n  return scorer;\n}\n"]}