{
  "version": 3,
  "sources": ["../src/env.ts", "../src/internal/api/index.ts", "../src/evaluation/Evaluation.ts", "../src/evaluation/EvaluationFactory.ts", "../src/data/APIScorerType.ts", "../src/scorers/BaseScorer.ts", "../src/scorers/APIScorer.ts", "../src/scorers/builtIn/AnswerCorrectnessScorer.ts", "../src/scorers/builtIn/AnswerRelevancyScorer.ts", "../src/scorers/builtIn/FaithfulnessScorer.ts", "../src/scorers/builtIn/BuiltInScorersFactory.ts", "../src/scorers/customScorer/CustomScorer.ts", "../src/scorers/customScorer/CustomScorerFactory.ts", "../src/utils/logger.ts", "../src/scorers/promptScorer/PromptScorer.ts", "../src/scorers/promptScorer/PromptScorerFactory.ts", "../src/scorers/ScorersFactory.ts", "../src/tracer/BrowserTracer.ts", "../src/version.ts", "../src/tracer/BaseTracer.ts", "../src/tracer/exporters/JudgmentSpanExporter.ts", "../src/tracer/exporters/NoOpSpanExporter.ts", "../src/tracer/processors/JudgmentSpanProcessor.ts", "../src/tracer/processors/NoOpJudgmentSpanProcessor.ts", "../src/tracer/BrowserTracerFactory.ts", "../src/tracer/NodeTracer.ts", "../src/tracer/JudgmentNodeTracerProvider.ts", "../src/tracer/NoOpSpan.ts", "../src/tracer/NoOpTracer.ts", "../src/tracer/NodeTracerFactory.ts", "../src/Judgeval.ts", "../src/data/Example.ts", "../src/data/ScorerData.ts", "../src/data/ScoringResult.ts"],
  "sourcesContent": [
    "function getEnvVar(varName: string): string | null;\nfunction getEnvVar(varName: string, defaultValue: string): string;\nfunction getEnvVar(varName: string, defaultValue?: string): string | null {\n  const value = process.env[varName];\n  if (!value) {\n    return defaultValue ?? null;\n  }\n  return value;\n}\n\nexport const JUDGMENT_API_KEY = getEnvVar(\"JUDGMENT_API_KEY\");\nexport const JUDGMENT_ORG_ID = getEnvVar(\"JUDGMENT_ORG_ID\");\nexport const JUDGMENT_API_URL = getEnvVar(\n  \"JUDGMENT_API_URL\",\n  \"https://api.judgmentlabs.ai\",\n);\nexport const JUDGMENT_DEFAULT_GPT_MODEL = getEnvVar(\n  \"JUDGMENT_DEFAULT_GPT_MODEL\",\n  \"gpt-5-mini\",\n);\nexport const JUDGMENT_ENABLE_MONITORING = getEnvVar(\n  \"JUDGMENT_ENABLE_MONITORING\",\n  \"true\",\n);\nexport const JUDGMENT_ENABLE_EVALUATIONS = getEnvVar(\n  \"JUDGMENT_ENABLE_EVALUATIONS\",\n  \"true\",\n);\nexport const JUDGMENT_NO_COLOR = getEnvVar(\"JUDGMENT_NO_COLOR\");\nexport const JUDGMENT_LOG_LEVEL = getEnvVar(\"JUDGMENT_LOG_LEVEL\", \"warn\");\n\nexport const OPENAI_API_KEY = getEnvVar(\"OPENAI_API_KEY\");\nexport const ANTHROPIC_API_KEY = getEnvVar(\"ANTHROPIC_API_KEY\");\nexport const GOOGLE_API_KEY = getEnvVar(\"GOOGLE_API_KEY\");\nexport const GEMINI_API_KEY = getEnvVar(\"GEMINI_API_KEY\");\n",
    "/**\n * Auto-generated by scripts/generate-client.ts\n * DO NOT EDIT MANUALLY - This file is generated automatically\n */\nimport * as Models from \"./models\";\n\nexport class JudgmentApiClient {\n  private baseUrl: string;\n  private apiKey: string;\n  private organizationId: string;\n\n  constructor(baseUrl: string, apiKey: string, organizationId: string) {\n    this.baseUrl = baseUrl;\n    this.apiKey = apiKey;\n    this.organizationId = organizationId;\n  }\n\n  getBaseUrl(): string {\n    return this.baseUrl;\n  }\n\n  getApiKey(): string {\n    return this.apiKey;\n  }\n\n  getOrganizationId(): string {\n    return this.organizationId;\n  }\n\n  private buildUrl(path: string): string {\n    return this.baseUrl + path;\n  }\n\n  private buildHeaders(): Record<string, string> {\n    if (!this.apiKey || !this.organizationId) {\n      throw new Error(\"API key and organization ID cannot be null\");\n    }\n    return {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${this.apiKey}`,\n      \"X-Organization-Id\": this.organizationId,\n    };\n  }\n\n  async addToRunEvalQueueExamples(\n    payload: Models.ExampleEvaluationRun,\n  ): Promise<void> {\n    const url = this.buildUrl(\"/add_to_run_eval_queue/examples\");\n    const response = await fetch(url, {\n      method: \"POST\",\n      headers: this.buildHeaders(),\n      body: JSON.stringify(payload),\n    });\n\n    if (!response.ok) {\n      throw new Error(\n        `HTTP Error: ${response.status} - ${await response.text()}`,\n      );\n    }\n\n    return;\n  }\n\n  async addToRunEvalQueueTraces(\n    payload: Models.TraceEvaluationRun,\n  ): Promise<void> {\n    const url = this.buildUrl(\"/add_to_run_eval_queue/traces\");\n    const response = await fetch(url, {\n      method: \"POST\",\n      headers: this.buildHeaders(),\n      body: JSON.stringify(payload),\n    });\n\n    if (!response.ok) {\n      throw new Error(\n        `HTTP Error: ${response.status} - ${await response.text()}`,\n      );\n    }\n\n    return;\n  }\n\n  async logEvalResults(\n    payload: Models.EvalResults,\n  ): Promise<Models.LogEvalResultsResponse> {\n    const url = this.buildUrl(\"/log_eval_results/\");\n    const response = await fetch(url, {\n      method: \"POST\",\n      headers: this.buildHeaders(),\n      body: JSON.stringify(payload),\n    });\n\n    if (!response.ok) {\n      throw new Error(\n        `HTTP Error: ${response.status} - ${await response.text()}`,\n      );\n    }\n\n    return (await response.json()) as Models.LogEvalResultsResponse;\n  }\n\n  async fetchExperimentRun(\n    payload: Models.EvalResultsFetch,\n  ): Promise<Models.FetchExperimentRunResponse> {\n    const url = this.buildUrl(\"/fetch_experiment_run/\");\n    const response = await fetch(url, {\n      method: \"POST\",\n      headers: this.buildHeaders(),\n      body: JSON.stringify(payload),\n    });\n\n    if (!response.ok) {\n      throw new Error(\n        `HTTP Error: ${response.status} - ${await response.text()}`,\n      );\n    }\n\n    return (await response.json()) as Models.FetchExperimentRunResponse;\n  }\n\n  async scorerExists(\n    payload: Models.ScorerExistsRequest,\n  ): Promise<Models.ScorerExistsResponse> {\n    const url = this.buildUrl(\"/scorer_exists/\");\n    const response = await fetch(url, {\n      method: \"POST\",\n      headers: this.buildHeaders(),\n      body: JSON.stringify(payload),\n    });\n\n    if (!response.ok) {\n      throw new Error(\n        `HTTP Error: ${response.status} - ${await response.text()}`,\n      );\n    }\n\n    return (await response.json()) as Models.ScorerExistsResponse;\n  }\n\n  async saveScorer(\n    payload: Models.SavePromptScorerRequest,\n  ): Promise<Models.SavePromptScorerResponse> {\n    const url = this.buildUrl(\"/save_scorer/\");\n    const response = await fetch(url, {\n      method: \"POST\",\n      headers: this.buildHeaders(),\n      body: JSON.stringify(payload),\n    });\n\n    if (!response.ok) {\n      throw new Error(\n        `HTTP Error: ${response.status} - ${await response.text()}`,\n      );\n    }\n\n    return (await response.json()) as Models.SavePromptScorerResponse;\n  }\n\n  async fetchScorers(\n    payload: Models.FetchPromptScorersRequest,\n  ): Promise<Models.FetchPromptScorersResponse> {\n    const url = this.buildUrl(\"/fetch_scorers/\");\n    const response = await fetch(url, {\n      method: \"POST\",\n      headers: this.buildHeaders(),\n      body: JSON.stringify(payload),\n    });\n\n    if (!response.ok) {\n      throw new Error(\n        `HTTP Error: ${response.status} - ${await response.text()}`,\n      );\n    }\n\n    return (await response.json()) as Models.FetchPromptScorersResponse;\n  }\n\n  async projectsResolve(\n    payload: Models.ResolveProjectNameRequest,\n  ): Promise<Models.ResolveProjectNameResponse> {\n    const url = this.buildUrl(\"/projects/resolve/\");\n    const response = await fetch(url, {\n      method: \"POST\",\n      headers: this.buildHeaders(),\n      body: JSON.stringify(payload),\n    });\n\n    if (!response.ok) {\n      throw new Error(\n        `HTTP Error: ${response.status} - ${await response.text()}`,\n      );\n    }\n\n    return (await response.json()) as Models.ResolveProjectNameResponse;\n  }\n}\n",
    "import { JudgmentApiClient } from \"../internal/api\";\n\nexport interface EvaluationConfig {\n  client: JudgmentApiClient;\n}\n\nexport class Evaluation {\n  private readonly client: JudgmentApiClient;\n\n  constructor(config: EvaluationConfig) {\n    this.client = config.client;\n  }\n}\n",
    "import { JudgmentApiClient } from \"../internal/api\";\nimport { Evaluation, type EvaluationConfig } from \"./Evaluation\";\n\nexport class EvaluationFactory {\n  private readonly client: JudgmentApiClient;\n\n  constructor(client: JudgmentApiClient) {\n    this.client = client;\n  }\n\n  create(config: Omit<EvaluationConfig, \"client\"> = {}): Evaluation {\n    return new Evaluation({\n      ...config,\n      client: this.client,\n    });\n  }\n}\n",
    "export const APIScorerType = {\n  PROMPT_SCORER: \"Prompt Scorer\",\n  TRACE_PROMPT_SCORER: \"Trace Prompt Scorer\",\n  FAITHFULNESS: \"Faithfulness\",\n  ANSWER_RELEVANCY: \"Answer Relevancy\",\n  ANSWER_CORRECTNESS: \"Answer Correctness\",\n  CUSTOM: \"Custom\",\n} as const;\n\nexport type APIScorerType = (typeof APIScorerType)[keyof typeof APIScorerType];\n",
    "import type { ScorerConfig } from \"../internal/api/models\";\n\nexport abstract class BaseScorer {\n  abstract getName(): string;\n  abstract getScorerConfig(): ScorerConfig;\n}\n",
    "import type { ScorerConfig } from \"../internal/api/models\";\nimport type { APIScorerType } from \"../data/APIScorerType\";\nimport { BaseScorer } from \"./BaseScorer\";\n\nexport class APIScorer extends BaseScorer {\n  private readonly scoreType: string;\n  private requiredParams: string[];\n  private _threshold: number;\n  private _name: string;\n  private _strictMode: boolean;\n  private _model?: string;\n  private additionalProperties: Record<string, unknown>;\n\n  constructor(scoreType: APIScorerType) {\n    super();\n    this.scoreType = scoreType;\n    this._name = scoreType;\n    this._threshold = 0.5;\n    this._strictMode = false;\n    this.requiredParams = [];\n    this.additionalProperties = {};\n  }\n\n  getName(): string {\n    return this._name;\n  }\n\n  getScoreType(): string {\n    return this.scoreType;\n  }\n\n  getThreshold(): number {\n    return this._threshold;\n  }\n\n  getStrictMode(): boolean {\n    return this._strictMode;\n  }\n\n  getModel(): string | undefined {\n    return this._model;\n  }\n\n  getRequiredParams(): string[] {\n    return [...this.requiredParams];\n  }\n\n  setThreshold(threshold: number): void {\n    if (threshold < 0 || threshold > 1) {\n      throw new Error(`Threshold must be between 0 and 1, got: ${threshold}`);\n    }\n    this._threshold = threshold;\n    if (this._strictMode) {\n      this._threshold = 1.0;\n    }\n  }\n\n  setName(name: string): void {\n    this._name = name;\n  }\n\n  setStrictMode(strictMode: boolean): void {\n    this._strictMode = strictMode;\n    if (strictMode) {\n      this._threshold = 1.0;\n    }\n  }\n\n  setModel(model: string): void {\n    this._model = model;\n  }\n\n  setRequiredParams(requiredParams: string[]): void {\n    this.requiredParams = [...requiredParams];\n  }\n\n  setAdditionalProperty(key: string, value: unknown): void {\n    this.additionalProperties[key] = value;\n  }\n\n  getAdditionalProperties(): Record<string, unknown> {\n    return { ...this.additionalProperties };\n  }\n\n  getScorerConfig(): ScorerConfig {\n    const kwargs: Record<string, unknown> = { ...this.additionalProperties };\n\n    return {\n      score_type: this.scoreType,\n      threshold: this._threshold,\n      name: this._name,\n      strict_mode: this._strictMode,\n      required_params: this.requiredParams,\n      kwargs,\n    };\n  }\n\n  static builder<T extends APIScorer>(\n    this: new (scoreType: APIScorerType) => T,\n    scoreType: APIScorerType,\n  ): APIScorerBuilder<T> {\n    return new APIScorerBuilder(this, scoreType);\n  }\n}\n\nexport class APIScorerBuilder<T extends APIScorer> {\n  private scorer: T;\n\n  constructor(\n    scorerClass: new (scoreType: APIScorerType) => T,\n    scoreType: APIScorerType,\n  ) {\n    this.scorer = new scorerClass(scoreType);\n  }\n\n  threshold(threshold: number): this {\n    this.scorer.setThreshold(threshold);\n    return this;\n  }\n\n  name(name: string): this {\n    this.scorer.setName(name);\n    return this;\n  }\n\n  strictMode(strictMode: boolean): this {\n    this.scorer.setStrictMode(strictMode);\n    return this;\n  }\n\n  requiredParams(requiredParams: string[]): this {\n    this.scorer.setRequiredParams(requiredParams);\n    return this;\n  }\n\n  model(model: string): this {\n    this.scorer.setModel(model);\n    return this;\n  }\n\n  additionalProperty(key: string, value: unknown): this {\n    this.scorer.setAdditionalProperty(key, value);\n    return this;\n  }\n\n  build(): T {\n    return this.scorer;\n  }\n}\n",
    "import { APIScorerType } from \"../../data/APIScorerType\";\nimport { APIScorer } from \"../APIScorer\";\n\nexport interface AnswerCorrectnessScorerConfig {\n  threshold?: number;\n  name?: string;\n  strictMode?: boolean;\n  model?: string;\n}\n\nexport class AnswerCorrectnessScorer extends APIScorer {\n  constructor(config: AnswerCorrectnessScorerConfig = {}) {\n    super(APIScorerType.ANSWER_CORRECTNESS);\n    this.setRequiredParams([\"input\", \"actual_output\", \"expected_output\"]);\n    if (config.threshold !== undefined) {\n      this.setThreshold(config.threshold);\n    }\n    if (config.name) {\n      this.setName(config.name);\n    }\n    if (config.strictMode !== undefined) {\n      this.setStrictMode(config.strictMode);\n    }\n    if (config.model) {\n      this.setModel(config.model);\n    }\n  }\n}\n",
    "import { APIScorerType } from \"../../data/APIScorerType\";\nimport { APIScorer } from \"../APIScorer\";\n\nexport interface AnswerRelevancyScorerConfig {\n  threshold?: number;\n  name?: string;\n  strictMode?: boolean;\n  model?: string;\n}\n\nexport class AnswerRelevancyScorer extends APIScorer {\n  constructor(config: AnswerRelevancyScorerConfig = {}) {\n    super(APIScorerType.ANSWER_RELEVANCY);\n    this.setRequiredParams([\"input\", \"actual_output\"]);\n    if (config.threshold !== undefined) {\n      this.setThreshold(config.threshold);\n    }\n    if (config.name) {\n      this.setName(config.name);\n    }\n    if (config.strictMode !== undefined) {\n      this.setStrictMode(config.strictMode);\n    }\n    if (config.model) {\n      this.setModel(config.model);\n    }\n  }\n}\n",
    "import { APIScorerType } from \"../../data/APIScorerType\";\nimport { APIScorer } from \"../APIScorer\";\n\nexport interface FaithfulnessScorerConfig {\n  threshold?: number;\n  name?: string;\n  strictMode?: boolean;\n  model?: string;\n}\n\nexport class FaithfulnessScorer extends APIScorer {\n  constructor(config: FaithfulnessScorerConfig = {}) {\n    super(APIScorerType.FAITHFULNESS);\n    this.setRequiredParams([\"context\", \"actual_output\"]);\n    if (config.threshold !== undefined) {\n      this.setThreshold(config.threshold);\n    }\n    if (config.name) {\n      this.setName(config.name);\n    }\n    if (config.strictMode !== undefined) {\n      this.setStrictMode(config.strictMode);\n    }\n    if (config.model) {\n      this.setModel(config.model);\n    }\n  }\n}\n",
    "import {\n  AnswerCorrectnessScorer,\n  AnswerCorrectnessScorerConfig,\n} from \"./AnswerCorrectnessScorer\";\nimport {\n  AnswerRelevancyScorer,\n  AnswerRelevancyScorerConfig,\n} from \"./AnswerRelevancyScorer\";\nimport {\n  FaithfulnessScorer,\n  FaithfulnessScorerConfig,\n} from \"./FaithfulnessScorer\";\nexport class BuiltInScorersFactory {\n  answerCorrectness(\n    config: AnswerCorrectnessScorerConfig = {},\n  ): AnswerCorrectnessScorer {\n    return new AnswerCorrectnessScorer(config);\n  }\n\n  answerRelevancy(\n    config: AnswerRelevancyScorerConfig = {},\n  ): AnswerRelevancyScorer {\n    return new AnswerRelevancyScorer(config);\n  }\n\n  faithfulness(config: FaithfulnessScorerConfig = {}): FaithfulnessScorer {\n    return new FaithfulnessScorer(config);\n  }\n}\n",
    "import type { ScorerConfig } from \"../../internal/api/models\";\nimport { APIScorerType } from \"../../data/APIScorerType\";\nimport { APIScorer } from \"../APIScorer\";\n\nexport interface CustomScorerConfig {\n  name: string;\n  className?: string;\n  serverHosted?: boolean;\n}\n\nexport class CustomScorer extends APIScorer {\n  private _className?: string;\n  private _serverHosted: boolean;\n\n  constructor(config: CustomScorerConfig) {\n    super(APIScorerType.CUSTOM);\n    this.setName(config.name);\n    if (config.className) {\n      this._className = config.className;\n      this.setAdditionalProperty(\"class_name\", config.className);\n    }\n    this._serverHosted = config.serverHosted ?? true;\n    this.setAdditionalProperty(\"server_hosted\", this._serverHosted);\n  }\n\n  getClassName(): string | undefined {\n    return this._className;\n  }\n\n  isServerHosted(): boolean {\n    return this._serverHosted;\n  }\n\n  getScorerConfig(): ScorerConfig {\n    throw new Error(\"CustomScorer does not use ScorerConfig\");\n  }\n}\n",
    "import { CustomScorer } from \"./CustomScorer\";\n\nexport class CustomScorerFactory {\n  get(name: string, className?: string): CustomScorer {\n    return new CustomScorer({\n      name,\n      className: className ?? name,\n      serverHosted: true,\n    });\n  }\n}\n",
    "import { JUDGMENT_LOG_LEVEL } from \"../env\";\n\nexport class Logger {\n  private static readonly RESET = \"\\x1b[0m\";\n  private static readonly RED = \"\\x1b[31m\";\n  private static readonly YELLOW = \"\\x1b[33m\";\n  private static readonly GRAY = \"\\x1b[90m\";\n\n  public static Level = {\n    DEBUG: 0,\n    INFO: 1,\n    WARNING: 2,\n    ERROR: 3,\n    CRITICAL: 4,\n  } as const;\n\n  private static initialized = false;\n  private static currentLevel: number = Logger.Level.WARNING;\n  private static useColor = true;\n\n  private static initialize(): void {\n    if (!Logger.initialized) {\n      const noColor = process.env.JUDGMENT_NO_COLOR;\n      Logger.useColor = !noColor && process.stdout.isTTY;\n\n      const logLevel = JUDGMENT_LOG_LEVEL.toLowerCase();\n      if (logLevel) {\n        const levelMap: Record<string, number> = {\n          debug: Logger.Level.DEBUG,\n          info: Logger.Level.INFO,\n          warning: Logger.Level.WARNING,\n          warn: Logger.Level.WARNING,\n          error: Logger.Level.ERROR,\n          critical: Logger.Level.CRITICAL,\n        };\n        Logger.currentLevel = levelMap[logLevel] ?? Logger.Level.WARNING;\n      }\n\n      Logger.initialized = true;\n    }\n  }\n\n  public static setLevel(level: number): void {\n    Logger.currentLevel = level;\n  }\n\n  public static setUseColor(useColor: boolean): void {\n    Logger.useColor = useColor;\n  }\n\n  private static log(level: number, message: string): void {\n    Logger.initialize();\n\n    if (level < Logger.currentLevel) {\n      return;\n    }\n\n    const timestamp = new Date()\n      .toISOString()\n      .replace(\"T\", \" \")\n      .substring(0, 19);\n    const levelName =\n      Object.keys(Logger.Level).find(\n        (key) => Logger.Level[key as keyof typeof Logger.Level] === level,\n      ) ?? \"UNKNOWN\";\n    let formattedMessage = `${timestamp} - judgeval - ${levelName} - ${message}`;\n\n    if (Logger.useColor) {\n      const color =\n        level === Logger.Level.DEBUG || level === Logger.Level.INFO\n          ? Logger.GRAY\n          : level === Logger.Level.WARNING\n            ? Logger.YELLOW\n            : Logger.RED;\n      formattedMessage = `${color}${formattedMessage}${Logger.RESET}`;\n    }\n\n    const output =\n      level >= Logger.Level.ERROR ? process.stderr : process.stdout;\n    output.write(formattedMessage + \"\\n\");\n  }\n\n  public static debug(message: string): void {\n    Logger.log(Logger.Level.DEBUG, message);\n  }\n\n  public static info(message: string): void {\n    Logger.log(Logger.Level.INFO, message);\n  }\n\n  public static warning(message: string): void {\n    Logger.log(Logger.Level.WARNING, message);\n  }\n\n  public static warn(message: string): void {\n    Logger.log(Logger.Level.WARNING, message);\n  }\n\n  public static error(message: string): void {\n    Logger.log(Logger.Level.ERROR, message);\n  }\n\n  public static critical(message: string): void {\n    Logger.log(Logger.Level.CRITICAL, message);\n  }\n}\n",
    "import { APIScorerType } from \"../../data/APIScorerType\";\nimport type { ScorerConfig } from \"../../internal/api/models\";\nimport { BaseScorer } from \"../BaseScorer\";\n\nexport interface PromptScorerConfig {\n  name: string;\n  prompt: string;\n  threshold: number;\n  options?: Record<string, number>;\n  model?: string;\n  description?: string;\n  isTrace?: boolean;\n}\n\nexport class PromptScorer extends BaseScorer {\n  private readonly _name: string;\n  private _prompt: string;\n  private _threshold: number;\n  private _options?: Record<string, number>;\n  private _model?: string;\n  private _description?: string;\n  private readonly isTrace: boolean;\n\n  constructor(config: PromptScorerConfig) {\n    super();\n    this._name = config.name;\n    this._prompt = config.prompt;\n    this._threshold = config.threshold;\n    this._options = { ...config.options };\n    this._model = config.model;\n    this._description = config.description;\n    this.isTrace = config.isTrace ?? false;\n  }\n\n  getName(): string {\n    return this._name;\n  }\n\n  getPrompt(): string {\n    return this._prompt;\n  }\n\n  getThreshold(): number {\n    return this._threshold;\n  }\n\n  getOptions(): Record<string, number> | undefined {\n    return this._options ? { ...this._options } : undefined;\n  }\n\n  getModel(): string | undefined {\n    return this._model;\n  }\n\n  getDescription(): string | undefined {\n    return this._description;\n  }\n\n  setThreshold(threshold: number): void {\n    this._threshold = threshold;\n  }\n\n  setPrompt(prompt: string): void {\n    this._prompt = prompt;\n  }\n\n  setModel(model: string): void {\n    this._model = model;\n  }\n\n  setOptions(options: Record<string, number>): void {\n    this._options = { ...options };\n  }\n\n  setDescription(description: string): void {\n    this._description = description;\n  }\n\n  appendToPrompt(addition: string): void {\n    this._prompt = this._prompt + addition;\n  }\n\n  getScorerConfig(): ScorerConfig {\n    const scoreType = this.isTrace\n      ? APIScorerType.TRACE_PROMPT_SCORER\n      : APIScorerType.PROMPT_SCORER;\n    const kwargs: Record<string, unknown> = {\n      prompt: this._prompt,\n    };\n\n    if (this._options) {\n      kwargs.options = this._options;\n    }\n\n    if (this._model) {\n      kwargs.model = this._model;\n    }\n\n    if (this._description) {\n      kwargs.description = this._description;\n    }\n\n    return {\n      score_type: scoreType,\n      threshold: this._threshold,\n      name: this._name,\n      kwargs,\n    };\n  }\n}\n",
    "import { JUDGMENT_DEFAULT_GPT_MODEL } from \"../../env\";\nimport { JudgmentApiClient } from \"../../internal/api\";\nimport type {\n  PromptScorer as APIPromptScorer,\n  FetchPromptScorersRequest,\n  FetchPromptScorersResponse,\n} from \"../../internal/api/models\";\nimport { Logger } from \"../../utils\";\nimport { PromptScorer } from \"./PromptScorer\";\n\nexport class PromptScorerFactory {\n  private readonly client: JudgmentApiClient;\n  private readonly isTrace: boolean;\n  private static readonly cache = new Map<string, APIPromptScorer>();\n\n  constructor(client: JudgmentApiClient, isTrace: boolean) {\n    this.client = client;\n    this.isTrace = isTrace;\n  }\n\n  async get(name: string): Promise<PromptScorer | null> {\n    const cacheKey = this.getCacheKey(name);\n    const cached = PromptScorerFactory.cache.get(cacheKey);\n\n    if (cached) {\n      return this._create(cached, name);\n    }\n\n    try {\n      const request: FetchPromptScorersRequest = {\n        names: [name],\n      };\n\n      const response: FetchPromptScorersResponse =\n        await this.client.fetchScorers(request);\n\n      if (response.scorers.length === 0) {\n        throw new Error(`Failed to fetch prompt scorer '${name}': not found`);\n      }\n\n      const scorer = response.scorers[0];\n      const scorerIsTrace = scorer.is_trace === true;\n\n      if (scorerIsTrace !== this.isTrace) {\n        const expectedType = this.isTrace\n          ? \"TracePromptScorer\"\n          : \"PromptScorer\";\n        const actualType = scorerIsTrace ? \"TracePromptScorer\" : \"PromptScorer\";\n        throw new Error(\n          `Scorer with name ${name} is a ${actualType}, not a ${expectedType}`,\n        );\n      }\n\n      PromptScorerFactory.cache.set(cacheKey, scorer);\n      return this._create(scorer, name);\n    } catch (error) {\n      Logger.error(`Failed to fetch prompt scorer '${name}': ${error}`);\n      return null;\n    }\n  }\n\n  private _create(scorer: APIPromptScorer, name: string): PromptScorer {\n    let options: Record<string, number> | undefined;\n    if (scorer.options && typeof scorer.options === \"object\") {\n      options = {};\n      for (const [key, value] of Object.entries(scorer.options)) {\n        if (typeof value === \"number\") {\n          options[key] = value;\n        }\n      }\n    }\n\n    return new PromptScorer({\n      name,\n      prompt: scorer.prompt,\n      threshold: scorer.threshold,\n      options: options ?? {},\n      model: scorer.model ?? JUDGMENT_DEFAULT_GPT_MODEL,\n      description: scorer.description ?? \"\",\n      isTrace: this.isTrace,\n    });\n  }\n\n  private getCacheKey(name: string): string {\n    return `${name}:${this.client.getApiKey()}:${this.client.getOrganizationId()}`;\n  }\n}\n",
    "import { JudgmentApiClient } from \"../internal/api\";\nimport { BuiltInScorersFactory } from \"./builtIn/BuiltInScorersFactory\";\nimport { CustomScorerFactory } from \"./customScorer/CustomScorerFactory\";\nimport { PromptScorerFactory } from \"./promptScorer/PromptScorerFactory\";\n\nexport class ScorersFactory {\n  private readonly client: JudgmentApiClient;\n\n  constructor(client: JudgmentApiClient) {\n    this.client = client;\n  }\n\n  get promptScorer(): PromptScorerFactory {\n    return new PromptScorerFactory(this.client, false);\n  }\n\n  get tracePromptScorer(): PromptScorerFactory {\n    return new PromptScorerFactory(this.client, true);\n  }\n\n  get customScorer(): CustomScorerFactory {\n    return new CustomScorerFactory();\n  }\n\n  get builtIn(): BuiltInScorersFactory {\n    return new BuiltInScorersFactory();\n  }\n}\n",
    "import { resourceFromAttributes } from \"@opentelemetry/resources\";\nimport type { Sampler } from \"@opentelemetry/sdk-trace-base\";\nimport { WebTracerProvider } from \"@opentelemetry/sdk-trace-web\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport { Logger } from \"../utils/logger\";\nimport { VERSION } from \"../version\";\nimport { BaseTracer, type Serializer } from \"./BaseTracer\";\n\nexport interface BrowserTracerConfig {\n  projectName: string;\n  enableEvaluation?: boolean;\n  enableMonitoring?: boolean;\n  serializer?: Serializer;\n  resourceAttributes?: Record<string, unknown>;\n  sampler?: Sampler;\n  initialize?: boolean;\n}\n\ninterface InternalBrowserTracerConfig\n  extends Required<\n    Omit<BrowserTracerConfig, \"resourceAttributes\" | \"sampler\">\n  > {\n  resourceAttributes: Record<string, unknown>;\n  sampler?: Sampler;\n}\n\nexport class BrowserTracer extends BaseTracer {\n  private webTracerProvider: WebTracerProvider | null = null;\n  private resourceAttributes: Record<string, unknown>;\n  private sampler?: Sampler;\n\n  private constructor(\n    projectName: string,\n    enableEvaluation: boolean,\n    apiClient: JudgmentApiClient,\n    serializer: Serializer,\n    resourceAttributes: Record<string, unknown>,\n    sampler?: Sampler,\n  ) {\n    super(projectName, enableEvaluation, apiClient, serializer);\n    this.resourceAttributes = resourceAttributes;\n    this.sampler = sampler;\n  }\n\n  static async create(\n    config: InternalBrowserTracerConfig,\n    apiClient: JudgmentApiClient,\n  ): Promise<BrowserTracer> {\n    const tracer = new BrowserTracer(\n      config.projectName,\n      config.enableEvaluation,\n      apiClient,\n      config.serializer,\n      config.resourceAttributes,\n      config.sampler,\n    );\n\n    await tracer.resolveAndSetProjectId();\n\n    if (config.initialize) {\n      await tracer.initialize();\n    }\n\n    return tracer;\n  }\n\n  /* eslint-disable @typescript-eslint/require-await */\n  async initialize(): Promise<void> {\n    if (this.webTracerProvider !== null) {\n      Logger.warn(\"BrowserTracer already initialized\");\n      return;\n    }\n\n    try {\n      const attributes = {\n        \"service.name\": this.projectName,\n        \"telemetry.sdk.version\": VERSION,\n        ...this.resourceAttributes,\n      };\n\n      const spanProcessor = this.getSpanProcessor();\n\n      this.webTracerProvider = new WebTracerProvider({\n        resource: resourceFromAttributes(attributes),\n        spanProcessors: [spanProcessor],\n        sampler: this.sampler,\n      });\n\n      this.webTracerProvider.register();\n      Logger.info(\"BrowserTracer initialized successfully\");\n    } catch (error) {\n      throw new Error(\n        `Failed to initialize BrowserTracer: ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n  async shutdown(): Promise<void> {\n    if (!this.webTracerProvider) {\n      Logger.warn(\"BrowserTracer not initialized, skipping shutdown\");\n      return;\n    }\n    try {\n      await this.webTracerProvider.shutdown();\n      this.webTracerProvider = null;\n      Logger.info(\"BrowserTracer shut down successfully\");\n    } catch (error) {\n      Logger.error(`Failed to shutdown BrowserTracer: ${error}`);\n    }\n  }\n}\n",
    "import { version } from \"../package.json\" with { type: \"json\" };\n\nexport const VERSION = version;\n",
    "import {\n  context,\n  type Context,\n  type Span,\n  type SpanContext,\n  type SpanOptions,\n  SpanStatusCode,\n  trace,\n  type Tracer,\n} from \"@opentelemetry/api\";\nimport type { SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport { Example } from \"../data/Example\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport type {\n  ExampleEvaluationRun,\n  ResolveProjectNameRequest,\n  ResolveProjectNameResponse,\n  TraceEvaluationRun,\n} from \"../internal/api/models\";\nimport { AttributeKeys } from \"../judgmentAttributeKeys\";\nimport { BaseScorer } from \"../scorers/BaseScorer\";\nimport { Logger } from \"../utils/logger\";\nimport { JudgmentSpanExporter, NoOpSpanExporter } from \"./exporters\";\nimport { JudgmentSpanProcessor } from \"./processors/JudgmentSpanProcessor\";\nimport { NoOpSpanProcessor } from \"./processors/NoOpJudgmentSpanProcessor\";\n\nexport type Serializer = (obj: unknown) => string;\n\nexport abstract class BaseTracer {\n  static readonly TRACER_NAME = \"judgeval\";\n\n  protected projectName: string;\n  protected enableEvaluation: boolean;\n  protected apiClient: JudgmentApiClient;\n  protected serializer: Serializer;\n  protected jsonEncoder: (obj: unknown) => string;\n  protected projectId: string | null;\n\n  protected constructor(\n    projectName: string,\n    enableEvaluation: boolean,\n    apiClient: JudgmentApiClient,\n    serializer: Serializer,\n    jsonEncoder: (obj: unknown) => string = JSON.stringify\n  ) {\n    this.projectName = projectName;\n    this.enableEvaluation = enableEvaluation;\n    this.apiClient = apiClient;\n    this.serializer = serializer;\n    this.jsonEncoder = jsonEncoder;\n    this.projectId = null;\n  }\n\n  protected async resolveAndSetProjectId(): Promise<void> {\n    try {\n      this.projectId = await this.resolveProjectId(this.projectName);\n      Logger.info(`Successfully resolved project ID: ${this.projectId}`);\n    } catch {\n      Logger.error(\n        `Failed to resolve project ${this.projectName}, ` +\n          `please create it first at https://app.judgmentlabs.ai/org/${this.apiClient.getOrganizationId()}/projects. ` +\n          \"Skipping Judgment export.\"\n      );\n      this.projectId = null;\n    }\n  }\n\n  abstract initialize(): Promise<void>;\n  abstract shutdown(): Promise<void>;\n\n  getSpanExporter(): SpanExporter {\n    if (this.projectId !== null) {\n      return new JudgmentSpanExporter(\n        this.buildEndpoint(this.apiClient.getBaseUrl()),\n        this.apiClient.getApiKey(),\n        this.apiClient.getOrganizationId(),\n        this.projectId\n      );\n    }\n    Logger.error(\n      \"Project not resolved; cannot create exporter, returning NoOpSpanExporter\"\n    );\n    return new NoOpSpanExporter();\n  }\n\n  getSpanProcessor(): JudgmentSpanProcessor {\n    if (this.projectId !== null) {\n      return new JudgmentSpanProcessor(this, this.getSpanExporter());\n    }\n    Logger.error(\n      \"Project not resolved; cannot create processor, returning NoOpSpanProcessor\"\n    );\n    return new NoOpSpanProcessor(this);\n  }\n\n  getTracer(): Tracer {\n    return trace.getTracer(BaseTracer.TRACER_NAME);\n  }\n\n  setSpanKind(kind: string): void {\n    if (!kind) {\n      return;\n    }\n    const currentSpan = trace.getActiveSpan();\n    if (currentSpan) {\n      currentSpan.setAttribute(AttributeKeys.JUDGMENT_SPAN_KIND, kind);\n    }\n  }\n\n  setAttribute(key: string, value: unknown): void {\n    if (!this.isValidKey(key)) {\n      return;\n    }\n    if (value === null || value === undefined) {\n      return;\n    }\n    const currentSpan = trace.getActiveSpan();\n    if (currentSpan) {\n      const serializedValue =\n        typeof value === \"string\" ||\n        typeof value === \"number\" ||\n        typeof value === \"boolean\"\n          ? value\n          : this.serializer(value);\n      currentSpan.setAttribute(key, serializedValue);\n    }\n  }\n\n  setAttributes(attributes: Record<string, unknown>): void {\n    for (const [key, value] of Object.entries(attributes)) {\n      this.setAttribute(key, value);\n    }\n  }\n\n  setLLMSpan(): void {\n    this.setSpanKind(\"llm\");\n  }\n\n  setToolSpan(): void {\n    this.setSpanKind(\"tool\");\n  }\n\n  setGeneralSpan(): void {\n    this.setSpanKind(\"span\");\n  }\n\n  setInput(inputData: unknown): void {\n    this.setAttribute(AttributeKeys.JUDGMENT_INPUT, inputData);\n  }\n\n  setOutput(outputData: unknown): void {\n    this.setAttribute(AttributeKeys.JUDGMENT_OUTPUT, outputData);\n  }\n\n  asyncEvaluate(scorer: BaseScorer, example: Example): void {\n    this.safeExecute(\"evaluate scorer\", () => {\n      if (!this.enableEvaluation) {\n        return;\n      }\n\n      const spanContext = this.getSampledSpanContext();\n      if (!spanContext) {\n        return;\n      }\n\n      const traceId = spanContext.traceId;\n      const spanId = spanContext.spanId;\n\n      this.logEvaluationInfo(\n        \"asyncEvaluate\",\n        traceId,\n        spanId,\n        scorer.getName()\n      );\n\n      const evaluationRun = this.createEvaluationRun(\n        scorer,\n        example,\n        traceId,\n        spanId\n      );\n\n      this.enqueueEvaluation(evaluationRun).catch((e: unknown) => {\n        Logger.error(`Failed to enqueue evaluation run: ${e}`);\n      });\n    });\n  }\n\n  asyncTraceEvaluate(scorer: BaseScorer): void {\n    this.safeExecute(\"evaluate trace scorer\", () => {\n      if (!this.enableEvaluation) {\n        return;\n      }\n\n      const currentSpan = this.getSampledSpan();\n      if (!currentSpan) {\n        return;\n      }\n\n      const spanContext = currentSpan.spanContext();\n      const traceId = spanContext.traceId;\n      const spanId = spanContext.spanId;\n\n      this.logEvaluationInfo(\n        \"asyncTraceEvaluate\",\n        traceId,\n        spanId,\n        scorer.getName()\n      );\n\n      const evaluationRun = this.createTraceEvaluationRun(\n        scorer,\n        traceId,\n        spanId\n      );\n      try {\n        const traceEvalJson = JSON.stringify(evaluationRun);\n        currentSpan.setAttribute(\n          AttributeKeys.JUDGMENT_PENDING_TRACE_EVAL,\n          traceEvalJson\n        );\n      } catch (e) {\n        Logger.error(`Failed to serialize trace evaluation: ${e}`);\n      }\n    });\n  }\n\n  /**\n   * Creates a new span for manual instrumentation.\n   *\n   * WARNING: You probably don't want this method. Use with() instead for most cases.\n   *\n   * This returns a span that is NOT active in the context, meaning child operations\n   * will NOT automatically link to it as a parent. You must manually manage the span\n   * lifecycle including calling span.end() and handling errors.\n   *\n   * To make the span active so child operations auto-link to it:\n   * ```\n   * import { context, trace } from \"@opentelemetry/api\";\n   * const span = tracer.span(\"my-span\");\n   * context.with(trace.setSpan(context.active(), span), () => {\n   *   // span is active here, child ops auto-link\n   * });\n   * span.end();\n   * ```\n   *\n   * Consider using with() instead, which handles context and lifecycle automatically.\n   *\n   * @param spanName - The name of the span\n   * @param options - Optional span configuration (attributes, links, etc)\n   * @param ctx - Optional context to use as parent. Defaults to the active context\n   * @returns A Span object that must be manually ended\n   */\n  span(spanName: string, options?: SpanOptions, ctx?: Context): Span {\n    const tracer = this.getTracer();\n    return tracer.startSpan(spanName, options ?? {}, ctx ?? context.active());\n  }\n\n  /**\n   * Wraps a function execution in a span with automatic lifecycle management.\n   *\n   * Automatically handles span creation, ending, and error recording. The span is passed to\n   * your callback function, allowing you to add custom attributes or access span properties.\n   * The span will be ended automatically when the function completes or throws an error.\n   *\n   * Supports both synchronous and asynchronous functions. For async functions, the span\n   * remains active until the Promise resolves or rejects.\n   *\n   * @param spanName - The name of the span\n   * @param callableFunc - The function to execute within the span. Receives the span as a parameter\n   * @param options - Optional span configuration\n   * @param ctx - Optional context to use as parent. Defaults to the active context\n   * @returns The return value of callableFunc (Promise if async, direct value if sync)\n   */\n  with<T>(\n    spanName: string,\n    callableFunc: (span: Span) => Promise<T>,\n    options?: SpanOptions,\n    ctx?: Context\n  ): Promise<T>;\n  with<T>(\n    spanName: string,\n    callableFunc: (span: Span) => T,\n    options?: SpanOptions,\n    ctx?: Context\n  ): T;\n  with<T>(\n    spanName: string,\n    callableFunc: (span: Span) => T | Promise<T>,\n    options?: SpanOptions,\n    ctx?: Context\n  ): T | Promise<T> {\n    const tracer = this.getTracer();\n    return tracer.startActiveSpan(\n      spanName,\n      options ?? {},\n      ctx ?? context.active(),\n      (span) => {\n        try {\n          const result = callableFunc(span);\n\n          if (result instanceof Promise) {\n            return result\n              .catch((err: unknown) => {\n                span.recordException(err as Error);\n                span.setStatus({\n                  code: SpanStatusCode.ERROR,\n                  message: String(err),\n                });\n                throw err;\n              })\n              .finally(() => {\n                span.end();\n              });\n          }\n\n          span.end();\n          return result;\n        } catch (e) {\n          span.setStatus({ code: SpanStatusCode.ERROR });\n          span.recordException(e as Error);\n          span.end();\n          throw e;\n        }\n      }\n    );\n  }\n\n  /**\n   * Wraps a function to automatically trace all its invocations.\n   *\n   * Returns a new function that, when called, will automatically create a span, capture input\n   * arguments, execute the original function, capture the output, and handle errors. The span\n   * is automatically ended after the function completes.\n   *\n   * Supports both synchronous and asynchronous functions. Input arguments are serialized and\n   * stored as span attributes, and the return value is captured as output.\n   *\n   * @param func - The function to wrap with automatic tracing\n   * @param spanType - The type of span to create (default: \"span\"). Common values: \"span\", \"llm\", \"tool\"\n   * @param spanName - Optional custom name for the span. Defaults to the function name\n   * @param options - Optional span configuration\n   * @param ctx - Optional context to use as parent. Defaults to the active context\n   * @returns A wrapped version of the function that creates spans on each invocation\n   */\n  observe<TArgs extends unknown[], TResult>(\n    func: (...args: TArgs) => TResult,\n    spanType = \"span\",\n    spanName?: string | null,\n    options?: SpanOptions,\n    ctx?: Context\n  ): (...args: TArgs) => TResult {\n    const tracer = this.getTracer();\n    const name = spanName ?? func.name;\n\n    return (...args: TArgs): TResult => {\n      return tracer.startActiveSpan(\n        name,\n        options ?? {},\n        ctx ?? context.active(),\n        (span) => {\n          if (spanType) {\n            span.setAttribute(AttributeKeys.JUDGMENT_SPAN_KIND, spanType);\n          }\n\n          try {\n            const inputData = this.formatInputs(\n              func as (...args: unknown[]) => unknown,\n              args as unknown[]\n            );\n            span.setAttribute(\n              AttributeKeys.JUDGMENT_INPUT,\n              this.serializer(inputData)\n            );\n\n            const result = func(...args);\n\n            if (result instanceof Promise) {\n              return result\n                .then((res: TResult) => {\n                  span.setAttribute(\n                    AttributeKeys.JUDGMENT_OUTPUT,\n                    this.serializer(res)\n                  );\n                  return res;\n                })\n                .catch((err: unknown) => {\n                  span.recordException(err as Error);\n                  span.setStatus({\n                    code: SpanStatusCode.ERROR,\n                    message: String(err),\n                  });\n                  throw err;\n                })\n                .finally(() => {\n                  span.end();\n                }) as TResult;\n            }\n\n            span.setAttribute(\n              AttributeKeys.JUDGMENT_OUTPUT,\n              this.serializer(result)\n            );\n            span.end();\n            return result;\n          } catch (e) {\n            span.recordException(e as Error);\n            span.setStatus({ code: SpanStatusCode.ERROR, message: String(e) });\n            span.end();\n            throw e;\n          }\n        }\n      );\n    };\n  }\n\n  private async resolveProjectId(name: string): Promise<string> {\n    try {\n      Logger.info(`Resolving project ID for project: ${name}`);\n      const request: ResolveProjectNameRequest = { project_name: name };\n      const response: ResolveProjectNameResponse =\n        await this.apiClient.projectsResolve(request);\n      const projectId = response.project_id;\n      if (!projectId) {\n        throw new Error(`Project ID not found for project: ${name}`);\n      }\n      Logger.info(`Resolved project ID: ${projectId}`);\n      return projectId;\n    } catch (error) {\n      throw new Error(\n        `Failed to resolve project ID: ${error instanceof Error ? error.message : String(error)}`\n      );\n    }\n  }\n\n  private buildEndpoint(baseUrl: string): string {\n    return baseUrl.endsWith(\"/\")\n      ? baseUrl + \"otel/v1/traces\"\n      : baseUrl + \"/otel/v1/traces\";\n  }\n\n  private generateRunId(prefix: string, spanId?: string | null): string {\n    return prefix + (spanId ?? Date.now().toString());\n  }\n\n  private createEvaluationRun(\n    scorer: BaseScorer,\n    example: Example,\n    traceId: string,\n    spanId: string\n  ): ExampleEvaluationRun {\n    const runId = this.generateRunId(\"async_evaluate_\", spanId);\n\n    return {\n      project_name: this.projectName,\n      eval_name: runId,\n      trace_id: traceId,\n      trace_span_id: spanId,\n      examples: [example.toModel()],\n      judgment_scorers: [scorer.getScorerConfig()],\n      custom_scorers: [],\n    };\n  }\n\n  private createTraceEvaluationRun(\n    scorer: BaseScorer,\n    traceId: string,\n    spanId: string\n  ): TraceEvaluationRun {\n    const evalName = this.generateRunId(\"async_trace_evaluate_\", spanId);\n\n    return {\n      project_name: this.projectName,\n      eval_name: evalName,\n      trace_and_span_ids: [[traceId, spanId]],\n      judgment_scorers: [scorer.getScorerConfig()],\n      custom_scorers: [],\n      is_offline: false,\n    };\n  }\n\n  private async enqueueEvaluation(\n    evaluationRun: ExampleEvaluationRun\n  ): Promise<void> {\n    try {\n      await this.apiClient.addToRunEvalQueueExamples(evaluationRun);\n    } catch (e) {\n      Logger.error(`Failed to enqueue evaluation run: ${e}`);\n    }\n  }\n\n  private getSampledSpanContext(): SpanContext | null {\n    const currentSpan = trace.getActiveSpan();\n    if (!currentSpan) {\n      return null;\n    }\n    const spanContext = currentSpan.spanContext();\n    if (!spanContext.traceFlags || !(spanContext.traceFlags & 0x01)) {\n      return null;\n    }\n    return spanContext;\n  }\n\n  private getSampledSpan(): Span | null {\n    const currentSpan = trace.getActiveSpan();\n    if (!currentSpan) {\n      return null;\n    }\n    const spanContext = currentSpan.spanContext();\n    if (!spanContext.traceFlags || !(spanContext.traceFlags & 0x01)) {\n      return null;\n    }\n    return currentSpan;\n  }\n\n  private logEvaluationInfo(\n    method: string,\n    traceId: string,\n    spanId: string,\n    scorerName: string\n  ): void {\n    Logger.info(\n      `${method}: project=${this.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorerName}`\n    );\n  }\n\n  private safeExecute(operation: string, action: () => void): void {\n    try {\n      action();\n    } catch (e) {\n      Logger.error(`Failed to ${operation}: ${e}`);\n    }\n  }\n\n  private isValidKey(key: string): boolean {\n    return key.length > 0;\n  }\n\n  private formatInputs(\n    f: (...args: unknown[]) => unknown,\n    args: unknown[]\n  ): Record<string, unknown> {\n    try {\n      const funcStr = f.toString();\n      const match = /\\(([^)]*)\\)/.exec(funcStr);\n      const paramNames = match\n        ? match[1]\n            .split(\",\")\n            .map((param) => param.trim().split(\"=\")[0].trim())\n            .filter((param) => param.length > 0)\n        : [];\n\n      const inputs: Record<string, unknown> = {};\n      paramNames.forEach((name, index) => {\n        if (index < args.length) {\n          inputs[name] = args[index];\n        }\n      });\n      return inputs;\n    } catch {\n      return {};\n    }\n  }\n}\n",
    "import { type ExportResult } from \"@opentelemetry/core\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport type { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport { SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../../utils/logger\";\n\nexport class JudgmentSpanExporter implements SpanExporter {\n  private delegate: SpanExporter;\n\n  constructor(\n    endpoint: string,\n    apiKey: string,\n    organizationId: string,\n    projectId: string,\n  ) {\n    this.delegate = new OTLPTraceExporter({\n      url: endpoint,\n      headers: {\n        Authorization: `Bearer ${apiKey}`,\n        \"X-Organization-Id\": organizationId,\n        \"X-Project-Id\": projectId,\n      },\n    });\n  }\n\n  export(\n    spans: ReadableSpan[],\n    resultCallback: (result: ExportResult) => void,\n  ): void {\n    Logger.info(`JudgmentSpanExporter: exporting ${spans.length} spans`);\n    this.delegate.export(spans, resultCallback);\n  }\n\n  shutdown(): Promise<void> {\n    return this.delegate.shutdown();\n  }\n\n  forceFlush(): Promise<void> {\n    return this.delegate.forceFlush?.() ?? Promise.resolve();\n  }\n}\n",
    "import { type ExportResult } from \"@opentelemetry/core\";\nimport type { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport { SpanExporter } from \"@opentelemetry/sdk-trace-base\";\n\nexport class NoOpSpanExporter implements SpanExporter {\n  export(\n    _spans: ReadableSpan[],\n    resultCallback: (result: ExportResult) => void,\n  ): void {\n    resultCallback({ code: 0 });\n  }\n\n  shutdown(): Promise<void> {\n    return Promise.resolve();\n  }\n}\n",
    "import {\n  BatchSpanProcessor,\n  type BatchSpanProcessorBrowserConfig,\n  type SpanExporter,\n} from \"@opentelemetry/sdk-trace-base\";\nimport type { BaseTracer } from \"../BaseTracer\";\n\nexport interface JudgmentSpanProcessorConfig {\n  maxQueueSize?: number;\n  scheduledDelayMillis?: number;\n  maxExportBatchSize?: number;\n  exportTimeoutMillis?: number;\n}\n\nexport class JudgmentSpanProcessor extends BatchSpanProcessor {\n  // The span processor does have custom functionality that at the moment is not ported over and still in discussion.\n  // Current implementation enforces that tracer will always exist for predicted compatibility in the future.\n  private tracer: BaseTracer;\n  constructor(\n    _tracer: BaseTracer,\n    exporter: SpanExporter,\n    config?: JudgmentSpanProcessorConfig,\n  ) {\n    const batchConfig: BatchSpanProcessorBrowserConfig = {\n      maxQueueSize: config?.maxQueueSize,\n      scheduledDelayMillis: config?.scheduledDelayMillis,\n      maxExportBatchSize: config?.maxExportBatchSize,\n      exportTimeoutMillis: config?.exportTimeoutMillis,\n    };\n    super(exporter, batchConfig);\n    this.tracer = _tracer;\n  }\n}\n",
    "import { type Context } from \"@opentelemetry/api\";\nimport type { ReadableSpan, Span } from \"@opentelemetry/sdk-trace-base\";\nimport { type BaseTracer } from \"../BaseTracer\";\nimport { NoOpSpanExporter } from \"../exporters/NoOpSpanExporter\";\nimport { JudgmentSpanProcessor } from \"./JudgmentSpanProcessor\";\n\nexport class NoOpSpanProcessor extends JudgmentSpanProcessor {\n  constructor(tracer: BaseTracer) {\n    super(tracer, new NoOpSpanExporter());\n  }\n\n  onStart(_span: Span, _parentContext: Context): void {\n    return;\n  }\n\n  onEnd(_span: ReadableSpan): void {\n    return;\n  }\n\n  forceFlush(): Promise<void> {\n    return Promise.resolve();\n  }\n\n  shutdown(): Promise<void> {\n    return Promise.resolve();\n  }\n\n  protected onShutdown(): void {\n    return;\n  }\n}\n",
    "import { JudgmentApiClient } from \"../internal/api\";\nimport { BrowserTracer, type BrowserTracerConfig } from \"./BrowserTracer\";\n\nexport class BrowserTracerFactory {\n  private readonly client: JudgmentApiClient;\n\n  constructor(client: JudgmentApiClient) {\n    this.client = client;\n  }\n\n  async create(config: BrowserTracerConfig): Promise<BrowserTracer> {\n    if (!config.projectName) {\n      throw new Error(\"Project name is required\");\n    }\n\n    return BrowserTracer.create(\n      {\n        projectName: config.projectName,\n        enableEvaluation: config.enableEvaluation ?? true,\n        enableMonitoring: config.enableMonitoring ?? false,\n        serializer: config.serializer ?? JSON.stringify,\n        resourceAttributes: config.resourceAttributes ?? {},\n        sampler: config.sampler,\n        initialize: config.initialize ?? true,\n      },\n      this.client,\n    );\n  }\n}\n",
    "import { context } from \"@opentelemetry/api\";\nimport { AsyncLocalStorageContextManager } from \"@opentelemetry/context-async-hooks\";\nimport {\n  registerInstrumentations,\n  type Instrumentation,\n} from \"@opentelemetry/instrumentation\";\nimport {\n  defaultResource,\n  resourceFromAttributes,\n} from \"@opentelemetry/resources\";\nimport { type Sampler } from \"@opentelemetry/sdk-trace-base\";\nimport { NodeTracerProvider } from \"@opentelemetry/sdk-trace-node\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport { ResourceKeys } from \"../judgmentAttributeKeys\";\nimport { Logger } from \"../utils/logger\";\nimport { VERSION } from \"../version\";\nimport { BaseTracer, type Serializer } from \"./BaseTracer\";\nimport {\n  JudgmentNodeTracerProvider,\n  filterTracerParams,\n} from \"./JudgmentNodeTracerProvider\";\n\nexport interface NodeTracerConfig {\n  projectName: string;\n  enableEvaluation?: boolean;\n  enableMonitoring?: boolean;\n  serializer?: Serializer;\n  resourceAttributes?: Record<string, unknown>;\n  instrumentations?: Instrumentation[];\n  sampler?: Sampler;\n  initialize?: boolean;\n  filterTracer?: (params: filterTracerParams) => boolean;\n}\n\ninterface InternalNodeTracerConfig\n  extends Required<\n    Omit<\n      NodeTracerConfig,\n      \"resourceAttributes\" | \"instrumentations\" | \"sampler\" | \"filterTracer\"\n    >\n  > {\n  resourceAttributes: Record<string, unknown>;\n  instrumentations: Instrumentation[];\n  sampler?: Sampler;\n  filterTracer?: (params: filterTracerParams) => boolean;\n}\n\nexport class NodeTracer extends BaseTracer {\n  private tracerProvider: NodeTracerProvider | null = null;\n  private contextManager: AsyncLocalStorageContextManager | null = null;\n  private resourceAttributes: Record<string, unknown>;\n  private instrumentations: Instrumentation[];\n  private sampler?: Sampler;\n  private filterTracer?: (params: filterTracerParams) => boolean;\n\n  private constructor(\n    projectName: string,\n    enableEvaluation: boolean,\n    apiClient: JudgmentApiClient,\n    serializer: Serializer,\n    resourceAttributes: Record<string, unknown>,\n    instrumentations: Instrumentation[],\n    sampler?: Sampler,\n    filterTracer?: (params: filterTracerParams) => boolean,\n  ) {\n    super(projectName, enableEvaluation, apiClient, serializer);\n    this.resourceAttributes = resourceAttributes;\n    this.instrumentations = instrumentations;\n    this.sampler = sampler;\n    this.filterTracer = filterTracer;\n  }\n\n  static async create(\n    config: InternalNodeTracerConfig,\n    apiClient: JudgmentApiClient,\n  ): Promise<NodeTracer> {\n    const tracer = new NodeTracer(\n      config.projectName,\n      config.enableEvaluation,\n      apiClient,\n      config.serializer,\n      config.resourceAttributes,\n      config.instrumentations,\n      config.sampler,\n      config.filterTracer,\n    );\n\n    await tracer.resolveAndSetProjectId();\n\n    if (config.initialize) {\n      await tracer.initialize();\n    }\n\n    return tracer;\n  }\n\n  /* eslint-disable @typescript-eslint/require-await */\n  async initialize(): Promise<void> {\n    if (this.tracerProvider !== null) {\n      Logger.warn(\"NodeTracer already initialized\");\n      return;\n    }\n\n    try {\n      this.contextManager = new AsyncLocalStorageContextManager();\n      this.contextManager.enable();\n      context.setGlobalContextManager(this.contextManager);\n\n      const resource = defaultResource().merge(\n        resourceFromAttributes({\n          [ResourceKeys.SERVICE_NAME]: this.projectName,\n          [ResourceKeys.TELEMETRY_SDK_NAME]: BaseTracer.TRACER_NAME,\n          [ResourceKeys.TELEMETRY_SDK_VERSION]: VERSION,\n          ...this.resourceAttributes,\n        }),\n      );\n\n      this.tracerProvider = new JudgmentNodeTracerProvider({\n        resource,\n        sampler: this.sampler,\n        spanProcessors: [this.getSpanProcessor()],\n        filterTracer: this.filterTracer,\n      });\n\n      this.tracerProvider.register();\n\n      if (this.instrumentations.length > 0) {\n        registerInstrumentations({\n          instrumentations: this.instrumentations,\n        });\n      }\n      Logger.info(\"NodeTracer initialized successfully\");\n    } catch (error) {\n      throw new Error(\n        `Failed to initialize NodeTracer: ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n  async shutdown(): Promise<void> {\n    if (!this.tracerProvider) {\n      Logger.warn(\"NodeTracer not initialized, skipping shutdown\");\n      return;\n    }\n    try {\n      await this.tracerProvider.shutdown();\n      this.tracerProvider = null;\n\n      if (this.contextManager) {\n        this.contextManager.disable();\n        this.contextManager = null;\n      }\n\n      Logger.info(\"NodeTracer shut down successfully\");\n    } catch (error) {\n      Logger.error(`Failed to shutdown NodeTracer: ${error}`);\n    }\n  }\n}\n",
    "import { Tracer } from \"@opentelemetry/api\";\nimport {\n  NodeTracerConfig,\n  NodeTracerProvider,\n} from \"@opentelemetry/sdk-trace-node\";\nimport { Logger } from \"../utils\";\nimport { BaseTracer } from \"./BaseTracer\";\nimport { NoOpTracer } from \"./NoOpTracer\";\n\nexport interface filterTracerParams {\n  name: string;\n  version?: string;\n  options?: { schemaUrl?: string };\n}\n\ninterface JudgmentNodeTracerProviderConfig extends NodeTracerConfig {\n  /**\n   * Filters what tracers are allowed to be created. This is useful when you want to disable any instrumentation / control instrumentation\n   * that is automatically created by auto-instrumentations or other libraries.\n   *\n   * If set to false, the caller will receive a NoOpTracer.\n   *\n   * @param params The parameters of the tracer to check if it should be allowed.\n   * @returns Whether the tracer should be allowed.\n   */\n  filterTracer?: (params: filterTracerParams) => boolean;\n}\n\nexport class JudgmentNodeTracerProvider extends NodeTracerProvider {\n  private readonly filterTracer: (params: filterTracerParams) => boolean;\n\n  constructor(config: JudgmentNodeTracerProviderConfig) {\n    super(config);\n    this.filterTracer = config.filterTracer ?? (() => true);\n  }\n\n  getTracer(\n    name: string,\n    version?: string,\n    options?: { schemaUrl?: string },\n  ): Tracer {\n    if (name === BaseTracer.TRACER_NAME) {\n      return super.getTracer(name, version, options);\n    }\n\n    try {\n      if (this.filterTracer({ name, version, options })) {\n        return super.getTracer(name, version, options);\n      } else {\n        Logger.debug(\n          `[JudgmentNodeTracerProvider] Returning NoOpTracer for tracer ${name} as it is disallowed by the filterTracer callback.`,\n        );\n        return new NoOpTracer();\n      }\n    } catch (error: unknown) {\n      Logger.error(\n        `[JudgmentNodeTracerProvider] Failed to filter tracer ${name}: ${error}.`,\n      );\n      return super.getTracer(name, version, options);\n    }\n  }\n}\n",
    "import {\n  INVALID_SPAN_CONTEXT,\n  type Attributes,\n  type AttributeValue,\n  type Exception,\n  type Link,\n  type Span,\n  type SpanContext,\n  type SpanStatus,\n  type TimeInput,\n} from \"@opentelemetry/api\";\n\nexport class NoOpSpan implements Span {\n  setAttribute(_key: string, _value: AttributeValue): this {\n    return this;\n  }\n\n  setAttributes(_attributes: Attributes): this {\n    return this;\n  }\n\n  addEvent(\n    _name: string,\n    _attributesOrStartTime?: Attributes | TimeInput,\n    _startTime?: TimeInput,\n  ): this {\n    return this;\n  }\n\n  addLink(_link: Link): this {\n    return this;\n  }\n\n  addLinks(_links: Link[]): this {\n    return this;\n  }\n\n  setStatus(_status: SpanStatus): this {\n    return this;\n  }\n\n  updateName(_name: string): this {\n    return this;\n  }\n\n  end(_endTime?: TimeInput): void {\n    return;\n  }\n\n  isRecording(): boolean {\n    return false;\n  }\n\n  recordException(_exception: Exception, _time?: TimeInput): void {\n    return;\n  }\n\n  spanContext(): SpanContext {\n    return INVALID_SPAN_CONTEXT;\n  }\n}\n",
    "import {\n  type Context,\n  type Span,\n  type SpanOptions,\n  type Tracer,\n} from \"@opentelemetry/api\";\nimport { NoOpSpan } from \"./NoOpSpan\";\n\nexport class NoOpTracer implements Tracer {\n  private readonly noopSpan = new NoOpSpan();\n\n  startSpan(_name: string, _options?: SpanOptions, _context?: Context): Span {\n    return this.noopSpan;\n  }\n\n  startActiveSpan<F extends (span: Span) => unknown>(\n    _name: string,\n    fn: F,\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: Span) => unknown>(\n    _name: string,\n    _options: SpanOptions,\n    fn: F,\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: Span) => unknown>(\n    _name: string,\n    _options: SpanOptions,\n    _context: Context,\n    fn: F,\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: Span) => unknown>(\n    _name: string,\n    ...args: unknown[]\n  ): ReturnType<F> {\n    const fn = args[args.length - 1] as F;\n    return fn(this.noopSpan) as ReturnType<F>;\n  }\n}\n",
    "import { JudgmentApiClient } from \"../internal/api\";\nimport { NodeTracer, type NodeTracerConfig } from \"./NodeTracer\";\n\nexport class NodeTracerFactory {\n  private readonly client: JudgmentApiClient;\n\n  constructor(client: JudgmentApiClient) {\n    this.client = client;\n  }\n\n  async create(config: NodeTracerConfig): Promise<NodeTracer> {\n    if (!config.projectName) {\n      throw new Error(\"Project name is required\");\n    }\n\n    return NodeTracer.create(\n      {\n        projectName: config.projectName,\n        enableEvaluation: config.enableEvaluation ?? true,\n        enableMonitoring: config.enableMonitoring ?? false,\n        serializer: config.serializer ?? JSON.stringify,\n        resourceAttributes: config.resourceAttributes ?? {},\n        instrumentations: config.instrumentations ?? [],\n        sampler: config.sampler,\n        filterTracer: config.filterTracer,\n        initialize: config.initialize ?? true,\n      },\n      this.client,\n    );\n  }\n}\n",
    "import { JUDGMENT_API_KEY, JUDGMENT_API_URL, JUDGMENT_ORG_ID } from \"./env\";\nimport { JudgmentApiClient } from \"./internal/api\";\nimport { EvaluationFactory } from \"./evaluation/EvaluationFactory\";\nimport { ScorersFactory } from \"./scorers/ScorersFactory\";\nimport { BrowserTracerFactory } from \"./tracer/BrowserTracerFactory\";\nimport { NodeTracerFactory } from \"./tracer/NodeTracerFactory\";\n\nexport interface JudgevalConfig {\n  apiKey?: string;\n  organizationId?: string;\n  apiUrl?: string;\n}\n\nexport class Judgeval {\n  private readonly internalClient: JudgmentApiClient;\n\n  protected constructor(config: JudgevalConfig = {}) {\n    const apiKey = config.apiKey ?? JUDGMENT_API_KEY;\n    const organizationId = config.organizationId ?? JUDGMENT_ORG_ID;\n    const apiUrl = config.apiUrl ?? JUDGMENT_API_URL;\n\n    if (!apiKey) {\n      throw new Error(\"API key is required\");\n    }\n    if (!organizationId) {\n      throw new Error(\"Organization ID is required\");\n    }\n    if (!apiUrl) {\n      throw new Error(\"API URL is required\");\n    }\n\n    this.internalClient = new JudgmentApiClient(apiUrl, apiKey, organizationId);\n  }\n\n  static create(config: JudgevalConfig = {}): Judgeval {\n    return new Judgeval(config);\n  }\n\n  get nodeTracer(): NodeTracerFactory {\n    return new NodeTracerFactory(this.internalClient);\n  }\n\n  get browserTracer(): BrowserTracerFactory {\n    return new BrowserTracerFactory(this.internalClient);\n  }\n\n  get scorers(): ScorersFactory {\n    return new ScorersFactory(this.internalClient);\n  }\n\n  get evaluation(): EvaluationFactory {\n    return new EvaluationFactory(this.internalClient);\n  }\n}\n",
    "import { randomUUID } from \"crypto\";\nimport type { Example as APIExample } from \"../internal/api/models\";\n\nexport interface ExampleConfig {\n  name?: string;\n  properties?: Record<string, unknown>;\n  exampleId?: string;\n  createdAt?: string;\n}\n\nexport class Example {\n  exampleId: string;\n  createdAt: string;\n  name?: string | null;\n  private properties: Record<string, unknown>;\n\n  private constructor(config: ExampleConfig = {}) {\n    this.exampleId = config.exampleId ?? randomUUID();\n    this.createdAt = config.createdAt ?? new Date().toISOString();\n    this.name = config.name ?? null;\n    this.properties = config.properties ?? {};\n  }\n\n  static create(data: Record<string, unknown>): Example {\n    return new Example({\n      properties: data,\n    });\n  }\n\n  setProperty(key: string, value: unknown): this {\n    this.properties[key] = value;\n    return this;\n  }\n\n  getProperty(key: string): unknown {\n    return this.properties[key];\n  }\n\n  getProperties(): Record<string, unknown> {\n    return { ...this.properties };\n  }\n\n  toModel(): APIExample {\n    return {\n      example_id: this.exampleId,\n      created_at: this.createdAt,\n      name: this.name ?? undefined,\n      ...this.properties,\n    };\n  }\n}\n",
    "import type { ScorerData as APIScorerData } from \"../internal/api/models\";\n\nexport interface ScorerDataConfig {\n  name?: string;\n  threshold?: number;\n  success?: boolean;\n  score?: number;\n  reason?: string;\n  strictMode?: boolean;\n  evaluationModel?: string;\n  error?: string;\n  additionalMetadata?: Record<string, unknown>;\n  id?: string;\n}\n\nexport class ScorerData {\n  name?: string | null;\n  threshold?: number | null;\n  success?: boolean | null;\n  score?: number | null;\n  reason?: string | null;\n  strictMode?: boolean | null;\n  evaluationModel?: string | null;\n  error?: string | null;\n  additionalMetadata?: Record<string, unknown>;\n  id?: string | null;\n\n  constructor(config: ScorerDataConfig = {}) {\n    this.name = config.name ?? null;\n    this.threshold = config.threshold ?? null;\n    this.success = config.success ?? null;\n    this.score = config.score ?? null;\n    this.reason = config.reason ?? null;\n    this.strictMode = config.strictMode ?? null;\n    this.evaluationModel = config.evaluationModel ?? null;\n    this.error = config.error ?? null;\n    this.additionalMetadata = config.additionalMetadata ?? {};\n    this.id = config.id ?? null;\n  }\n\n  toModel(): APIScorerData {\n    const result: APIScorerData = {\n      name: this.name ?? \"\",\n      threshold: this.threshold ?? 0,\n      success: this.success ?? false,\n    };\n\n    if (this.score !== undefined && this.score !== null) {\n      result.score = this.score;\n    }\n    if (this.reason !== undefined && this.reason !== null) {\n      result.reason = this.reason;\n    }\n    if (this.strictMode !== undefined && this.strictMode !== null) {\n      result.strict_mode = this.strictMode;\n    }\n    if (this.evaluationModel !== undefined && this.evaluationModel !== null) {\n      result.evaluation_model = this.evaluationModel;\n    }\n    if (this.error !== undefined && this.error !== null) {\n      result.error = this.error;\n    }\n    if (\n      this.additionalMetadata &&\n      Object.keys(this.additionalMetadata).length > 0\n    ) {\n      result.additional_metadata = this.additionalMetadata;\n    }\n    if (this.id !== undefined && this.id !== null) {\n      result.id = this.id;\n    }\n\n    return result;\n  }\n}\n",
    "import type {\n  ScoringResult as APIScoringResult,\n  OtelTraceSpan,\n} from \"../internal/api/models\";\nimport { Example } from \"./Example\";\nimport { ScorerData } from \"./ScorerData\";\n\nexport interface ScoringResultConfig {\n  success?: boolean;\n  scorersData?: ScorerData[];\n  name?: string;\n  dataObject?: OtelTraceSpan | Example;\n  traceId?: string;\n  runDuration?: number;\n  evaluationCost?: number;\n}\n\nexport class ScoringResult {\n  success?: boolean | null;\n  scorersData?: ScorerData[];\n  name?: string | null;\n  dataObject?: OtelTraceSpan | Example | null;\n  traceId?: string | null;\n  runDuration?: number | null;\n  evaluationCost?: number | null;\n\n  constructor(config: ScoringResultConfig = {}) {\n    this.success = config.success ?? null;\n    this.scorersData = config.scorersData ?? [];\n    this.name = config.name ?? null;\n    this.dataObject = config.dataObject ?? null;\n    this.traceId = config.traceId ?? null;\n    this.runDuration = config.runDuration ?? null;\n    this.evaluationCost = config.evaluationCost ?? null;\n  }\n\n  toModel(): APIScoringResult {\n    const result: APIScoringResult = {\n      success: this.success ?? false,\n      scorers_data: (this.scorersData ?? []).map((s) => s.toModel()),\n    };\n\n    if (this.name !== undefined && this.name !== null) {\n      result.name = this.name;\n    }\n    if (this.dataObject !== undefined && this.dataObject !== null) {\n      if (this.dataObject instanceof Example) {\n        result.data_object = this.dataObject.toModel();\n      } else {\n        result.data_object = this.dataObject;\n      }\n    }\n    if (this.traceId !== undefined && this.traceId !== null) {\n      result.trace_id = this.traceId;\n    }\n    if (this.runDuration !== undefined && this.runDuration !== null) {\n      result.run_duration = this.runDuration;\n    }\n    if (this.evaluationCost !== undefined && this.evaluationCost !== null) {\n      result.evaluation_cost = this.evaluationCost;\n    }\n\n    return result;\n  }\n}\n"
  ],
  "mappings": "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",
  "debugId": "71CEDC786920943364756E2164756E21",
  "names": []
}