All files / api/src/types/evaluations llm-judge.ts

100% Statements 21/21
100% Branches 0/0
100% Functions 0/0
100% Lines 21/21

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 541x         1x 1x 1x 1x 1x 1x             1x 1x 1x 1x 1x             1x 1x 1x 1x             1x 1x 1x 1x 1x                      
import { z } from 'zod';
 
/**
 * Configuration for LLM Judge
 */
export const LLMJudgeConfigSchema = z.object({
  model: z.string().optional().default('gpt-4o-mini'),
  temperature: z.number().min(0).max(2).optional().default(0.1),
  max_tokens: z.number().positive().optional().default(1000),
  timeout: z.number().positive().optional().default(30000),
});
 
export type LLMJudgeConfig = z.infer<typeof LLMJudgeConfigSchema>;
 
/**
 * Result from LLM Judge evaluation
 */
export const LLMJudgeResult = z.object({
  score: z.number().min(0).max(1),
  reasoning: z.string(),
  metadata: z.record(z.string(), z.unknown()).optional(),
});
 
export type LLMJudgeResult = z.infer<typeof LLMJudgeResult>;
 
/**
 * Evaluation criteria structure
 */
export const EvaluationCriteriaSchema = z.object({
  criteria: z.array(z.string()),
  description: z.string().optional(),
});
 
export type EvaluationCriteria = z.infer<typeof EvaluationCriteriaSchema>;
 
/**
 * Input data for evaluation
 */
export const EvaluationInputSchema = z.object({
  text: z.string(),
  evaluationCriteria: EvaluationCriteriaSchema.optional(),
  outputFormat: z.literal('json').optional(),
});
 
export type EvaluationInput = z.infer<typeof EvaluationInputSchema>;
 
/**
 * LLM Judge interface - generic evaluation with templates/prompts
 */
export interface LLMJudge {
  evaluate(input: EvaluationInput): Promise<LLMJudgeResult>;
  config: LLMJudgeConfig;
}