judgeval 0.7.0 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,86 @@
1
+ # Judgeval TypeScript SDK
2
+
3
+ [![npm version](https://badge.fury.io/js/judgeval.svg)](https://www.npmjs.com/package/judgeval)
4
+ [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
5
+
6
+ ## Installation
7
+
8
+ Find the latest version on [npm](https://www.npmjs.com/package/judgeval).
9
+
10
+ **npm:**
11
+
12
+ ```bash
13
+ npm install judgeval
14
+ ```
15
+
16
+ **yarn:**
17
+
18
+ ```bash
19
+ yarn add judgeval
20
+ ```
21
+
22
+ **bun:**
23
+
24
+ ```bash
25
+ bun add judgeval
26
+ ```
27
+
28
+ **pnpm:**
29
+
30
+ ```bash
31
+ pnpm add judgeval
32
+ ```
33
+
34
+ ## Usage
35
+
36
+ ### Tracer
37
+
38
+ ```typescript
39
+ import { OpenAIInstrumentation } from "@opentelemetry/instrumentation-openai";
40
+ import { Judgeval, type NodeTracer } from "judgeval";
41
+
42
+ const client = Judgeval.create();
43
+
44
+ const tracer = await client.nodeTracer.create({
45
+ projectName: "my-llm-app",
46
+ enableEvaluation: true,
47
+ enableMonitoring: true,
48
+ instrumentations: [new OpenAIInstrumentation()],
49
+ });
50
+
51
+ async function chatWithUser(userMessage: string): Promise<string> {
52
+ const response = await openai.chat.completions.create({
53
+ model: "gpt-4o-mini",
54
+ messages: [{ role: "user", content: userMessage }],
55
+ });
56
+ return response.choices[0].message.content || "";
57
+ }
58
+
59
+ const tracedChat = tracer.observe(chatWithUser);
60
+ const result = await tracedChat("What is the capital of France?");
61
+
62
+ await tracer.shutdown();
63
+ ```
64
+
65
+ ### Scorer
66
+
67
+ ```typescript
68
+ import { Example } from "judgeval";
69
+
70
+ const scorer = client.scorers.builtIn.answerRelevancy();
71
+
72
+ const example = Example.create({
73
+ input: "What is the capital of France?",
74
+ actual_output: "Paris is the capital of France.",
75
+ });
76
+
77
+ await tracer.asyncEvaluate(scorer, example);
78
+ ```
79
+
80
+ ## Documentation
81
+
82
+ - [Full Documentation](https://docs.judgmentlabs.ai/)
83
+
84
+ ## License
85
+
86
+ Apache 2.0
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
- var{defineProperty:L,getOwnPropertyNames:te,getOwnPropertyDescriptor:re}=Object,se=Object.prototype.hasOwnProperty;var $=new WeakMap,oe=(e)=>{var t=$.get(e),r;if(t)return t;if(t=L({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")te(e).map((o)=>!se.call(t,o)&&L(t,o,{get:()=>e[o],enumerable:!(r=re(e,o))||r.enumerable}));return $.set(e,t),t};var ie=(e,t)=>{for(var r in t)L(e,r,{get:t[r],enumerable:!0,configurable:!0,set:(o)=>t[r]=()=>o})};var le={};ie(le,{ScoringResult:()=>F,ScorersFactory:()=>I,ScorerData:()=>j,PromptScorerFactory:()=>h,PromptScorer:()=>v,NodeTracerFactory:()=>b,NodeTracer:()=>M,NoOpSpanExporter:()=>N,JudgmentSpanExporter:()=>P,Judgeval:()=>J,FaithfulnessScorer:()=>T,Example:()=>A,EvaluationFactory:()=>C,Evaluation:()=>w,CustomScorerFactory:()=>O,CustomScorer:()=>y,BuiltInScorersFactory:()=>f,BrowserTracerFactory:()=>x,BrowserTracer:()=>R,BaseTracer:()=>m,BaseScorer:()=>_,AnswerRelevancyScorer:()=>S,AnswerCorrectnessScorer:()=>E,APIScorer:()=>d});module.exports=oe(le);function l(e,t){let r=process.env[e];if(!r)return t??null;return r}var H=l("JUDGMENT_API_KEY"),q=l("JUDGMENT_ORG_ID"),Y=l("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),ce=l("JUDGMENT_LLM_PROXY_URL","https://api.judgmentlabs.ai/llm/proxy/v1"),z=l("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),ue=l("JUDGMENT_ENABLE_MONITORING","true"),pe=l("JUDGMENT_ENABLE_EVALUATIONS","true"),me=l("JUDGMENT_NO_COLOR"),B=l("JUDGMENT_LOG_LEVEL","warn"),he=l("OPENAI_API_KEY"),_e=l("ANTHROPIC_API_KEY"),Ee=l("GOOGLE_API_KEY"),Se=l("GEMINI_API_KEY");class k{baseUrl;apiKey;organizationId;constructor(e,t,r){this.baseUrl=e,this.apiKey=t,this.organizationId=r}getBaseUrl(){return this.baseUrl}getApiKey(){return this.apiKey}getOrganizationId(){return this.organizationId}buildUrl(e){return this.baseUrl+e}buildHeaders(){if(!this.apiKey||!this.organizationId)throw Error("API key and organization ID cannot be null");return{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId}}async addToRunEvalQueueExamples(e){let t=this.buildUrl("/add_to_run_eval_queue/examples"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async addToRunEvalQueueTraces(e){let t=this.buildUrl("/add_to_run_eval_queue/traces"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async logEvalResults(e){let t=this.buildUrl("/log_eval_results/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchExperimentRun(e){let t=this.buildUrl("/fetch_experiment_run/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async scorerExists(e){let t=this.buildUrl("/scorer_exists/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async saveScorer(e){let t=this.buildUrl("/save_scorer/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchScorers(e){let t=this.buildUrl("/fetch_scorers/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async projectsResolve(e){let t=this.buildUrl("/projects/resolve/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}}class w{client;constructor(e){this.client=e.client}}class C{client;constructor(e){this.client=e}create(e={}){return new w({...e,client:this.client})}}var c={PROMPT_SCORER:"Prompt Scorer",TRACE_PROMPT_SCORER:"Trace Prompt Scorer",FAITHFULNESS:"Faithfulness",ANSWER_RELEVANCY:"Answer Relevancy",ANSWER_CORRECTNESS:"Answer Correctness",CUSTOM:"Custom"};class _{}class d extends _{scoreType;requiredParams;_threshold;_name;_strictMode;_model;additionalProperties;constructor(e){super();this.scoreType=e,this._name=e,this._threshold=0.5,this._strictMode=!1,this.requiredParams=[],this.additionalProperties={}}getName(){return this._name}getScoreType(){return this.scoreType}getThreshold(){return this._threshold}getStrictMode(){return this._strictMode}getModel(){return this._model}getRequiredParams(){return[...this.requiredParams]}setThreshold(e){if(e<0||e>1)throw Error(`Threshold must be between 0 and 1, got: ${e}`);if(this._threshold=e,this._strictMode)this._threshold=1}setName(e){this._name=e}setStrictMode(e){if(this._strictMode=e,e)this._threshold=1}setModel(e){this._model=e}setRequiredParams(e){this.requiredParams=[...e]}setAdditionalProperty(e,t){this.additionalProperties[e]=t}getAdditionalProperties(){return{...this.additionalProperties}}getScorerConfig(){let e={...this.additionalProperties};return{score_type:this.scoreType,threshold:this._threshold,name:this._name,strict_mode:this._strictMode,required_params:this.requiredParams,kwargs:e}}static builder(e){return new W(this,e)}}class W{scorer;constructor(e,t){this.scorer=new e(t)}threshold(e){return this.scorer.setThreshold(e),this}name(e){return this.scorer.setName(e),this}strictMode(e){return this.scorer.setStrictMode(e),this}requiredParams(e){return this.scorer.setRequiredParams(e),this}model(e){return this.scorer.setModel(e),this}additionalProperty(e,t){return this.scorer.setAdditionalProperty(e,t),this}build(){return this.scorer}}class E extends d{constructor(e={}){super(c.ANSWER_CORRECTNESS);if(this.setRequiredParams(["input","actual_output","expected_output"]),e.threshold!==void 0)this.setThreshold(e.threshold);if(e.name)this.setName(e.name);if(e.strictMode!==void 0)this.setStrictMode(e.strictMode);if(e.model)this.setModel(e.model)}}class S extends d{constructor(e={}){super(c.ANSWER_RELEVANCY);if(this.setRequiredParams(["input","actual_output"]),e.threshold!==void 0)this.setThreshold(e.threshold);if(e.name)this.setName(e.name);if(e.strictMode!==void 0)this.setStrictMode(e.strictMode);if(e.model)this.setModel(e.model)}}class T extends d{constructor(e={}){super(c.FAITHFULNESS);if(this.setRequiredParams(["context","actual_output"]),e.threshold!==void 0)this.setThreshold(e.threshold);if(e.name)this.setName(e.name);if(e.strictMode!==void 0)this.setStrictMode(e.strictMode);if(e.model)this.setModel(e.model)}}class f{answerCorrectness(e={}){return new E(e)}answerRelevancy(e={}){return new S(e)}faithfulness(e={}){return new T(e)}}class y extends d{_className;_serverHosted;constructor(e){super(c.CUSTOM);if(this.setName(e.name),e.className)this._className=e.className,this.setAdditionalProperty("class_name",e.className);this._serverHosted=e.serverHosted??!0,this.setAdditionalProperty("server_hosted",this._serverHosted)}getClassName(){return this._className}isServerHosted(){return this._serverHosted}getScorerConfig(){throw Error("CustomScorer does not use ScorerConfig")}}class O{get(e,t){return new y({name:e,className:t??e,serverHosted:!0})}}class v extends _{_name;_prompt;_threshold;_options;_model;_description;isTrace;constructor(e){super();this._name=e.name,this._prompt=e.prompt,this._threshold=e.threshold,this._options={...e.options},this._model=e.model,this._description=e.description,this.isTrace=e.isTrace??!1}getName(){return this._name}getPrompt(){return this._prompt}getThreshold(){return this._threshold}getOptions(){return this._options?{...this._options}:void 0}getModel(){return this._model}getDescription(){return this._description}setThreshold(e){this._threshold=e}setPrompt(e){this._prompt=e}setModel(e){this._model=e}setOptions(e){this._options={...e}}setDescription(e){this._description=e}appendToPrompt(e){this._prompt=this._prompt+e}getScorerConfig(){let e=this.isTrace?c.TRACE_PROMPT_SCORER:c.PROMPT_SCORER,t={prompt:this._prompt};if(this._options)t.options=this._options;if(this._model)t.model=this._model;if(this._description)t.description=this._description;return{score_type:e,threshold:this._threshold,name:this._name,kwargs:t}}}class h{client;isTrace;static cache=new Map;constructor(e,t){this.client=e,this.isTrace=t}async get(e){let t=this.getCacheKey(e),r=h.cache.get(t);if(r)return this.createFromModel(r,e);try{let o={names:[e]},i=await this.client.fetchScorers(o);if(i.scorers.length===0)throw Error(`Failed to fetch prompt scorer '${e}': not found`);let a=i.scorers[0],n=a.is_trace===!0;if(n!==this.isTrace){let p=this.isTrace?"TracePromptScorer":"PromptScorer";throw Error(`Scorer with name ${e} is a ${n?"TracePromptScorer":"PromptScorer"}, not a ${p}`)}return h.cache.set(t,a),this.createFromModel(a,e)}catch(o){if(o instanceof Error)throw o;throw Error(`Failed to fetch prompt scorer '${e}': ${o}`)}}create(e){if(!e.name)throw Error("Name is required");if(!e.prompt)throw Error("Prompt is required");return new v({...e,isTrace:this.isTrace})}createFromModel(e,t){let r;if(e.options&&typeof e.options==="object"){r={};for(let[o,i]of Object.entries(e.options))if(typeof i==="number")r[o]=i}return new v({name:t,prompt:e.prompt,threshold:e.threshold,options:r??{},model:e.model??z,description:e.description??"",isTrace:this.isTrace})}getCacheKey(e){return`${e}:${this.client.getApiKey()}:${this.client.getOrganizationId()}`}}class I{client;constructor(e){this.client=e}get promptScorer(){return new h(this.client,!1)}get tracePromptScorer(){return new h(this.client,!0)}get customScorer(){return new O}get builtIn(){return new f}}var X=require("@opentelemetry/resources"),G=require("@opentelemetry/sdk-trace-web");class s{static RESET="\x1B[0m";static RED="\x1B[31m";static YELLOW="\x1B[33m";static GRAY="\x1B[90m";static Level={DEBUG:0,INFO:1,WARNING:2,ERROR:3,CRITICAL:4};static initialized=!1;static currentLevel=s.Level.WARNING;static useColor=!0;static initialize(){if(!s.initialized){let e=process.env.JUDGMENT_NO_COLOR;s.useColor=!e&&process.stdout.isTTY;let t=B.toLowerCase();if(t){let r={debug:s.Level.DEBUG,info:s.Level.INFO,warning:s.Level.WARNING,warn:s.Level.WARNING,error:s.Level.ERROR,critical:s.Level.CRITICAL};s.currentLevel=r[t]??s.Level.WARNING}s.initialized=!0}}static setLevel(e){s.currentLevel=e}static setUseColor(e){s.useColor=e}static log(e,t){if(s.initialize(),e<s.currentLevel)return;let r=new Date().toISOString().replace("T"," ").substring(0,19),o=Object.keys(s.Level).find((n)=>s.Level[n]===e)??"UNKNOWN",i=`${r} - judgeval - ${o} - ${t}`;if(s.useColor)i=`${e===s.Level.DEBUG||e===s.Level.INFO?s.GRAY:e===s.Level.WARNING?s.YELLOW:s.RED}${i}${s.RESET}`;(e>=s.Level.ERROR?process.stderr:process.stdout).write(i+`
2
- `)}static debug(e){s.log(s.Level.DEBUG,e)}static info(e){s.log(s.Level.INFO,e)}static warning(e){s.log(s.Level.WARNING,e)}static warn(e){s.log(s.Level.WARNING,e)}static error(e){s.log(s.Level.ERROR,e)}static critical(e){s.log(s.Level.CRITICAL,e)}}var V="0.7.0";var U=V;var u=require("@opentelemetry/api");var Q=require("@opentelemetry/exporter-trace-otlp-http");class P{delegate;constructor(e,t,r,o){this.delegate=new Q.OTLPTraceExporter({url:e,headers:{Authorization:`Bearer ${t}`,"X-Organization-Id":r,"X-Project-Id":o}})}export(e,t){s.info(`JudgmentSpanExporter: exporting ${e.length} spans`),this.delegate.export(e,t)}shutdown(){return this.delegate.shutdown()}forceFlush(){return this.delegate.forceFlush?.()??Promise.resolve()}}class N{export(e,t){t({code:0})}shutdown(){return Promise.resolve()}}class m{static TRACER_NAME="judgeval";projectName;enableEvaluation;apiClient;serializer;jsonEncoder;projectId;constructor(e,t,r,o,i=JSON.stringify){this.projectName=e,this.enableEvaluation=t,this.apiClient=r,this.serializer=o,this.jsonEncoder=i,this.projectId=null}async resolveAndSetProjectId(){try{this.projectId=await this.resolveProjectId(this.projectName),s.info(`Successfully resolved project ID: ${this.projectId}`)}catch{s.error(`Failed to resolve project ${this.projectName}, please create it first at https://app.judgmentlabs.ai/org/${this.apiClient.getOrganizationId()}/projects. Skipping Judgment export.`),this.projectId=null}}getSpanExporter(){if(this.projectId!==null)return this.createJudgmentSpanExporter(this.projectId);return s.error("Project not resolved; cannot create exporter, returning NoOpSpanExporter"),new N}getTracer(){return u.trace.getTracer(m.TRACER_NAME)}setSpanKind(e){if(!e)return;let t=u.trace.getActiveSpan();if(t)t.setAttribute("judgment.span_kind",e)}setAttribute(e,t){if(!this.isValidKey(e))return;if(t===null||t===void 0)return;let r=u.trace.getActiveSpan();if(r){let o=typeof t==="string"||typeof t==="number"||typeof t==="boolean"?t:this.serializer(t);r.setAttribute(e,o)}}setAttributes(e){for(let[t,r]of Object.entries(e))this.setAttribute(t,r)}setLLMSpan(){this.setSpanKind("llm")}setToolSpan(){this.setSpanKind("tool")}setGeneralSpan(){this.setSpanKind("span")}setInput(e){this.setAttribute("judgment.input",e)}setOutput(e){this.setAttribute("judgment.output",e)}asyncEvaluate(e,t){this.safeExecute("evaluate scorer",()=>{if(!this.enableEvaluation)return;let r=this.getSampledSpanContext();if(!r)return;let{traceId:o,spanId:i}=r;this.logEvaluationInfo("asyncEvaluate",o,i,e.getName());let a=this.createEvaluationRun(e,t,o,i);this.enqueueEvaluation(a).catch((n)=>{s.error(`Failed to enqueue evaluation run: ${n}`)})})}asyncTraceEvaluate(e){this.safeExecute("evaluate trace scorer",()=>{if(!this.enableEvaluation)return;let t=this.getSampledSpan();if(!t)return;let r=t.spanContext(),o=r.traceId,i=r.spanId;this.logEvaluationInfo("asyncTraceEvaluate",o,i,e.getName());let a=this.createTraceEvaluationRun(e,o,i);try{let n=JSON.stringify(a);t.setAttribute("judgment.pending_trace_eval",n)}catch(n){s.error(`Failed to serialize trace evaluation: ${n}`)}})}span(e,t){return this.getTracer().startActiveSpan(e,(o)=>{try{return t()}catch(i){throw o.setStatus({code:u.SpanStatusCode.ERROR}),o.recordException(i),i}finally{o.end()}})}static startSpan(e){return u.trace.getTracer(m.TRACER_NAME).startSpan(e)}observe(e,t="span",r){let o=this.getTracer(),i=r??e.name;return(...a)=>{return o.startActiveSpan(i,(n)=>{if(t)n.setAttribute("judgment.span_kind",t);try{let p=this.formatInputs(e,a);n.setAttribute("judgment.input",this.serializer(p));let D=e(...a);if(D instanceof Promise)return D.then((g)=>{return n.setAttribute("judgment.output",this.serializer(g)),g}).catch((g)=>{throw n.recordException(g),n.setStatus({code:u.SpanStatusCode.ERROR,message:String(g)}),g}).finally(()=>{n.end()});return n.setAttribute("judgment.output",this.serializer(D)),n.end(),D}catch(p){throw n.recordException(p),n.setStatus({code:u.SpanStatusCode.ERROR,message:String(p)}),n.end(),p}})}}async resolveProjectId(e){try{s.info(`Resolving project ID for project: ${e}`);let t={project_name:e},o=(await this.apiClient.projectsResolve(t)).project_id;if(!o)throw Error(`Project ID not found for project: ${e}`);return s.info(`Resolved project ID: ${o}`),o}catch(t){throw Error(`Failed to resolve project ID: ${t instanceof Error?t.message:String(t)}`)}}buildEndpoint(e){return e.endsWith("/")?e+"otel/v1/traces":e+"/otel/v1/traces"}createJudgmentSpanExporter(e){return new P(this.buildEndpoint(this.apiClient.getBaseUrl()),this.apiClient.getApiKey(),this.apiClient.getOrganizationId(),e)}generateRunId(e,t){return e+(t??Date.now().toString())}createEvaluationRun(e,t,r,o){let i=this.generateRunId("async_evaluate_",o);return{project_name:this.projectName,eval_name:i,trace_id:r,trace_span_id:o,examples:[t.toModel()],judgment_scorers:[e.getScorerConfig()],custom_scorers:[]}}createTraceEvaluationRun(e,t,r){let o=this.generateRunId("async_trace_evaluate_",r);return{project_name:this.projectName,eval_name:o,trace_and_span_ids:[[t,r]],judgment_scorers:[e.getScorerConfig()],custom_scorers:[],is_offline:!1}}async enqueueEvaluation(e){try{await this.apiClient.addToRunEvalQueueExamples(e)}catch(t){s.error(`Failed to enqueue evaluation run: ${t}`)}}getSampledSpanContext(){let e=u.trace.getActiveSpan();if(!e)return null;let t=e.spanContext();if(!t.traceFlags||!(t.traceFlags&1))return null;return t}getSampledSpan(){let e=u.trace.getActiveSpan();if(!e)return null;let t=e.spanContext();if(!t.traceFlags||!(t.traceFlags&1))return null;return e}logEvaluationInfo(e,t,r,o){s.info(`${e}: project=${this.projectName}, traceId=${t}, spanId=${r}, scorer=${o}`)}safeExecute(e,t){try{t()}catch(r){s.error(`Failed to ${e}: ${r}`)}}isValidKey(e){return e.length>0}formatInputs(e,t){try{let r=e.toString(),o=/\(([^)]*)\)/.exec(r),i=o?o[1].split(",").map((n)=>n.trim().split("=")[0].trim()).filter((n)=>n.length>0):[],a={};return i.forEach((n,p)=>{if(p<t.length)a[n]=t[p]}),a}catch{return{}}}}class R extends m{webTracerProvider=null;resourceAttributes;constructor(e,t,r,o,i){super(e,t,r,o);this.resourceAttributes=i}static async create(e,t){let r=new R(e.projectName,e.enableEvaluation,t,e.serializer,e.resourceAttributes);if(await r.resolveAndSetProjectId(),e.initialize)await r.initialize();return r}async initialize(){if(this.webTracerProvider!==null){s.warn("BrowserTracer already initialized");return}try{let e={"service.name":this.projectName,"telemetry.sdk.version":U,...this.resourceAttributes},t=this.getSpanExporter();this.webTracerProvider=new G.WebTracerProvider({resource:X.resourceFromAttributes(e),spanProcessors:[new G.BatchSpanProcessor(t)]}),this.webTracerProvider.register(),s.info("BrowserTracer initialized successfully")}catch(e){throw Error(`Failed to initialize BrowserTracer: ${e instanceof Error?e.message:String(e)}`)}}async shutdown(){if(!this.webTracerProvider){s.warn("BrowserTracer not initialized, skipping shutdown");return}try{await this.webTracerProvider.shutdown(),this.webTracerProvider=null,s.info("BrowserTracer shut down successfully")}catch(e){s.error(`Failed to shutdown BrowserTracer: ${e}`)}}}class x{client;constructor(e){this.client=e}async create(e){if(!e.projectName)throw Error("Project name is required");return R.create({projectName:e.projectName,enableEvaluation:e.enableEvaluation??!0,enableMonitoring:e.enableMonitoring??!1,serializer:e.serializer??JSON.stringify,resourceAttributes:e.resourceAttributes??{},initialize:e.initialize??!0},this.client)}}var Z=require("@opentelemetry/resources"),K=require("@opentelemetry/sdk-node");class M extends m{nodeSDK=null;resourceAttributes;instrumentations;constructor(e,t,r,o,i,a){super(e,t,r,o);this.resourceAttributes=i,this.instrumentations=a}static async create(e,t){let r=new M(e.projectName,e.enableEvaluation,t,e.serializer,e.resourceAttributes,e.instrumentations);if(await r.resolveAndSetProjectId(),e.initialize)await r.initialize();return r}async initialize(){if(this.nodeSDK!==null){s.warn("NodeTracer already initialized");return}try{let e={"service.name":this.projectName,"telemetry.sdk.version":U,...this.resourceAttributes},t=this.getSpanExporter();this.nodeSDK=new K.NodeSDK({resource:Z.resourceFromAttributes(e),traceExporter:t,instrumentations:this.instrumentations}),this.nodeSDK.start(),s.info("NodeTracer initialized successfully")}catch(e){throw Error(`Failed to initialize NodeTracer: ${e instanceof Error?e.message:String(e)}`)}}async shutdown(){if(!this.nodeSDK){s.warn("NodeTracer not initialized, skipping shutdown");return}try{await this.nodeSDK.shutdown(),this.nodeSDK=null,s.info("NodeTracer shut down successfully")}catch(e){s.error(`Failed to shutdown NodeTracer: ${e}`)}}}class b{client;constructor(e){this.client=e}async create(e){if(!e.projectName)throw Error("Project name is required");return M.create({projectName:e.projectName,enableEvaluation:e.enableEvaluation??!0,enableMonitoring:e.enableMonitoring??!1,serializer:e.serializer??JSON.stringify,resourceAttributes:e.resourceAttributes??{},instrumentations:e.instrumentations??[],initialize:e.initialize??!0},this.client)}}class J{internalClient;constructor(e={}){let t=e.apiKey??H,r=e.organizationId??q,o=e.apiUrl??Y;if(!t)throw Error("API key is required");if(!r)throw Error("Organization ID is required");if(!o)throw Error("API URL is required");this.internalClient=new k(o,t,r)}static create(e={}){return new J(e)}get nodeTracer(){return new b(this.internalClient)}get browserTracer(){return new x(this.internalClient)}get scorers(){return new I(this.internalClient)}get evaluation(){return new C(this.internalClient)}}var ee=require("crypto");class A{exampleId;createdAt;name;properties;constructor(e={}){this.exampleId=e.exampleId??ee.randomUUID(),this.createdAt=e.createdAt??new Date().toISOString(),this.name=e.name??null,this.properties=e.properties??{}}static create(e){return new A({properties:e})}setProperty(e,t){return this.properties[e]=t,this}getProperty(e){return this.properties[e]}getProperties(){return{...this.properties}}toModel(){return{example_id:this.exampleId,created_at:this.createdAt,name:this.name??void 0,...this.properties}}}class j{name;threshold;success;score;reason;strictMode;evaluationModel;error;additionalMetadata;id;constructor(e={}){this.name=e.name??null,this.threshold=e.threshold??null,this.success=e.success??null,this.score=e.score??null,this.reason=e.reason??null,this.strictMode=e.strictMode??null,this.evaluationModel=e.evaluationModel??null,this.error=e.error??null,this.additionalMetadata=e.additionalMetadata??{},this.id=e.id??null}toModel(){let e={name:this.name??"",threshold:this.threshold??0,success:this.success??!1};if(this.score!==void 0&&this.score!==null)e.score=this.score;if(this.reason!==void 0&&this.reason!==null)e.reason=this.reason;if(this.strictMode!==void 0&&this.strictMode!==null)e.strict_mode=this.strictMode;if(this.evaluationModel!==void 0&&this.evaluationModel!==null)e.evaluation_model=this.evaluationModel;if(this.error!==void 0&&this.error!==null)e.error=this.error;if(this.additionalMetadata&&Object.keys(this.additionalMetadata).length>0)e.additional_metadata=this.additionalMetadata;if(this.id!==void 0&&this.id!==null)e.id=this.id;return e}}class F{success;scorersData;name;dataObject;traceId;runDuration;evaluationCost;constructor(e={}){this.success=e.success??null,this.scorersData=e.scorersData??[],this.name=e.name??null,this.dataObject=e.dataObject??null,this.traceId=e.traceId??null,this.runDuration=e.runDuration??null,this.evaluationCost=e.evaluationCost??null}toModel(){let e={success:this.success??!1,scorers_data:(this.scorersData??[]).map((t)=>t.toModel())};if(this.name!==void 0&&this.name!==null)e.name=this.name;if(this.dataObject!==void 0&&this.dataObject!==null)if(this.dataObject instanceof A)e.data_object=this.dataObject.toModel();else e.data_object=this.dataObject;if(this.traceId!==void 0&&this.traceId!==null)e.trace_id=this.traceId;if(this.runDuration!==void 0&&this.runDuration!==null)e.run_duration=this.runDuration;if(this.evaluationCost!==void 0&&this.evaluationCost!==null)e.evaluation_cost=this.evaluationCost;return e}}
1
+ var{defineProperty:$,getOwnPropertyNames:se,getOwnPropertyDescriptor:oe}=Object,ie=Object.prototype.hasOwnProperty;var q=new WeakMap,ne=(e)=>{var t=q.get(e),r;if(t)return t;if(t=$({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")se(e).map((o)=>!ie.call(t,o)&&$(t,o,{get:()=>e[o],enumerable:!(r=oe(e,o))||r.enumerable}));return q.set(e,t),t};var ae=(e,t)=>{for(var r in t)$(e,r,{get:t[r],enumerable:!0,configurable:!0,set:(o)=>t[r]=()=>o})};var ce={};ae(ce,{ScoringResult:()=>k,ScorersFactory:()=>x,ScorerData:()=>L,PromptScorerFactory:()=>p,PromptScorer:()=>P,NodeTracerFactory:()=>U,NodeTracer:()=>A,NoOpSpanExporter:()=>R,JudgmentSpanExporter:()=>N,Judgeval:()=>j,FaithfulnessScorer:()=>f,Example:()=>g,EvaluationFactory:()=>y,Evaluation:()=>C,CustomScorerFactory:()=>I,CustomScorer:()=>O,BuiltInScorersFactory:()=>v,BrowserTracerFactory:()=>D,BrowserTracer:()=>M,BaseTracer:()=>h,BaseScorer:()=>_,AnswerRelevancyScorer:()=>T,AnswerCorrectnessScorer:()=>S,APIScorer:()=>u});module.exports=ne(ce);function l(e,t){let r=process.env[e];if(!r)return t??null;return r}var Y=l("JUDGMENT_API_KEY"),z=l("JUDGMENT_ORG_ID"),B=l("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),me=l("JUDGMENT_LLM_PROXY_URL","https://api.judgmentlabs.ai/llm/proxy/v1"),W=l("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),pe=l("JUDGMENT_ENABLE_MONITORING","true"),he=l("JUDGMENT_ENABLE_EVALUATIONS","true"),_e=l("JUDGMENT_NO_COLOR"),V=l("JUDGMENT_LOG_LEVEL","warn"),Ee=l("OPENAI_API_KEY"),Se=l("ANTHROPIC_API_KEY"),Te=l("GOOGLE_API_KEY"),fe=l("GEMINI_API_KEY");class H{baseUrl;apiKey;organizationId;constructor(e,t,r){this.baseUrl=e,this.apiKey=t,this.organizationId=r}getBaseUrl(){return this.baseUrl}getApiKey(){return this.apiKey}getOrganizationId(){return this.organizationId}buildUrl(e){return this.baseUrl+e}buildHeaders(){if(!this.apiKey||!this.organizationId)throw Error("API key and organization ID cannot be null");return{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId}}async addToRunEvalQueueExamples(e){let t=this.buildUrl("/add_to_run_eval_queue/examples"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async addToRunEvalQueueTraces(e){let t=this.buildUrl("/add_to_run_eval_queue/traces"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async logEvalResults(e){let t=this.buildUrl("/log_eval_results/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchExperimentRun(e){let t=this.buildUrl("/fetch_experiment_run/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async scorerExists(e){let t=this.buildUrl("/scorer_exists/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async saveScorer(e){let t=this.buildUrl("/save_scorer/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchScorers(e){let t=this.buildUrl("/fetch_scorers/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async projectsResolve(e){let t=this.buildUrl("/projects/resolve/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}}class C{client;constructor(e){this.client=e.client}}class y{client;constructor(e){this.client=e}create(e={}){return new C({...e,client:this.client})}}var m={PROMPT_SCORER:"Prompt Scorer",TRACE_PROMPT_SCORER:"Trace Prompt Scorer",FAITHFULNESS:"Faithfulness",ANSWER_RELEVANCY:"Answer Relevancy",ANSWER_CORRECTNESS:"Answer Correctness",CUSTOM:"Custom"};class _{}class u extends _{scoreType;requiredParams;_threshold;_name;_strictMode;_model;additionalProperties;constructor(e){super();this.scoreType=e,this._name=e,this._threshold=0.5,this._strictMode=!1,this.requiredParams=[],this.additionalProperties={}}getName(){return this._name}getScoreType(){return this.scoreType}getThreshold(){return this._threshold}getStrictMode(){return this._strictMode}getModel(){return this._model}getRequiredParams(){return[...this.requiredParams]}setThreshold(e){if(e<0||e>1)throw Error(`Threshold must be between 0 and 1, got: ${e}`);if(this._threshold=e,this._strictMode)this._threshold=1}setName(e){this._name=e}setStrictMode(e){if(this._strictMode=e,e)this._threshold=1}setModel(e){this._model=e}setRequiredParams(e){this.requiredParams=[...e]}setAdditionalProperty(e,t){this.additionalProperties[e]=t}getAdditionalProperties(){return{...this.additionalProperties}}getScorerConfig(){let e={...this.additionalProperties};return{score_type:this.scoreType,threshold:this._threshold,name:this._name,strict_mode:this._strictMode,required_params:this.requiredParams,kwargs:e}}static builder(e){return new Q(this,e)}}class Q{scorer;constructor(e,t){this.scorer=new e(t)}threshold(e){return this.scorer.setThreshold(e),this}name(e){return this.scorer.setName(e),this}strictMode(e){return this.scorer.setStrictMode(e),this}requiredParams(e){return this.scorer.setRequiredParams(e),this}model(e){return this.scorer.setModel(e),this}additionalProperty(e,t){return this.scorer.setAdditionalProperty(e,t),this}build(){return this.scorer}}class S extends u{constructor(e={}){super(m.ANSWER_CORRECTNESS);if(this.setRequiredParams(["input","actual_output","expected_output"]),e.threshold!==void 0)this.setThreshold(e.threshold);if(e.name)this.setName(e.name);if(e.strictMode!==void 0)this.setStrictMode(e.strictMode);if(e.model)this.setModel(e.model)}}class T extends u{constructor(e={}){super(m.ANSWER_RELEVANCY);if(this.setRequiredParams(["input","actual_output"]),e.threshold!==void 0)this.setThreshold(e.threshold);if(e.name)this.setName(e.name);if(e.strictMode!==void 0)this.setStrictMode(e.strictMode);if(e.model)this.setModel(e.model)}}class f extends u{constructor(e={}){super(m.FAITHFULNESS);if(this.setRequiredParams(["context","actual_output"]),e.threshold!==void 0)this.setThreshold(e.threshold);if(e.name)this.setName(e.name);if(e.strictMode!==void 0)this.setStrictMode(e.strictMode);if(e.model)this.setModel(e.model)}}class v{answerCorrectness(e={}){return new S(e)}answerRelevancy(e={}){return new T(e)}faithfulness(e={}){return new f(e)}}class O extends u{_className;_serverHosted;constructor(e){super(m.CUSTOM);if(this.setName(e.name),e.className)this._className=e.className,this.setAdditionalProperty("class_name",e.className);this._serverHosted=e.serverHosted??!0,this.setAdditionalProperty("server_hosted",this._serverHosted)}getClassName(){return this._className}isServerHosted(){return this._serverHosted}getScorerConfig(){throw Error("CustomScorer does not use ScorerConfig")}}class I{get(e,t){return new O({name:e,className:t??e,serverHosted:!0})}}class P extends _{_name;_prompt;_threshold;_options;_model;_description;isTrace;constructor(e){super();this._name=e.name,this._prompt=e.prompt,this._threshold=e.threshold,this._options={...e.options},this._model=e.model,this._description=e.description,this.isTrace=e.isTrace??!1}getName(){return this._name}getPrompt(){return this._prompt}getThreshold(){return this._threshold}getOptions(){return this._options?{...this._options}:void 0}getModel(){return this._model}getDescription(){return this._description}setThreshold(e){this._threshold=e}setPrompt(e){this._prompt=e}setModel(e){this._model=e}setOptions(e){this._options={...e}}setDescription(e){this._description=e}appendToPrompt(e){this._prompt=this._prompt+e}getScorerConfig(){let e=this.isTrace?m.TRACE_PROMPT_SCORER:m.PROMPT_SCORER,t={prompt:this._prompt};if(this._options)t.options=this._options;if(this._model)t.model=this._model;if(this._description)t.description=this._description;return{score_type:e,threshold:this._threshold,name:this._name,kwargs:t}}}class p{client;isTrace;static cache=new Map;constructor(e,t){this.client=e,this.isTrace=t}async get(e){let t=this.getCacheKey(e),r=p.cache.get(t);if(r)return this.createFromModel(r,e);try{let o={names:[e]},i=await this.client.fetchScorers(o);if(i.scorers.length===0)throw Error(`Failed to fetch prompt scorer '${e}': not found`);let a=i.scorers[0],n=a.is_trace===!0;if(n!==this.isTrace){let E=this.isTrace?"TracePromptScorer":"PromptScorer";throw Error(`Scorer with name ${e} is a ${n?"TracePromptScorer":"PromptScorer"}, not a ${E}`)}return p.cache.set(t,a),this.createFromModel(a,e)}catch(o){if(o instanceof Error)throw o;throw Error(`Failed to fetch prompt scorer '${e}': ${o}`)}}create(e){if(!e.name)throw Error("Name is required");if(!e.prompt)throw Error("Prompt is required");return new P({...e,isTrace:this.isTrace})}createFromModel(e,t){let r;if(e.options&&typeof e.options==="object"){r={};for(let[o,i]of Object.entries(e.options))if(typeof i==="number")r[o]=i}return new P({name:t,prompt:e.prompt,threshold:e.threshold,options:r??{},model:e.model??W,description:e.description??"",isTrace:this.isTrace})}getCacheKey(e){return`${e}:${this.client.getApiKey()}:${this.client.getOrganizationId()}`}}class x{client;constructor(e){this.client=e}get promptScorer(){return new p(this.client,!1)}get tracePromptScorer(){return new p(this.client,!0)}get customScorer(){return new I}get builtIn(){return new v}}var K=require("@opentelemetry/resources"),F=require("@opentelemetry/sdk-trace-web");class s{static RESET="\x1B[0m";static RED="\x1B[31m";static YELLOW="\x1B[33m";static GRAY="\x1B[90m";static Level={DEBUG:0,INFO:1,WARNING:2,ERROR:3,CRITICAL:4};static initialized=!1;static currentLevel=s.Level.WARNING;static useColor=!0;static initialize(){if(!s.initialized){let e=process.env.JUDGMENT_NO_COLOR;s.useColor=!e&&process.stdout.isTTY;let t=V.toLowerCase();if(t){let r={debug:s.Level.DEBUG,info:s.Level.INFO,warning:s.Level.WARNING,warn:s.Level.WARNING,error:s.Level.ERROR,critical:s.Level.CRITICAL};s.currentLevel=r[t]??s.Level.WARNING}s.initialized=!0}}static setLevel(e){s.currentLevel=e}static setUseColor(e){s.useColor=e}static log(e,t){if(s.initialize(),e<s.currentLevel)return;let r=new Date().toISOString().replace("T"," ").substring(0,19),o=Object.keys(s.Level).find((n)=>s.Level[n]===e)??"UNKNOWN",i=`${r} - judgeval - ${o} - ${t}`;if(s.useColor)i=`${e===s.Level.DEBUG||e===s.Level.INFO?s.GRAY:e===s.Level.WARNING?s.YELLOW:s.RED}${i}${s.RESET}`;(e>=s.Level.ERROR?process.stderr:process.stdout).write(i+`
2
+ `)}static debug(e){s.log(s.Level.DEBUG,e)}static info(e){s.log(s.Level.INFO,e)}static warning(e){s.log(s.Level.WARNING,e)}static warn(e){s.log(s.Level.WARNING,e)}static error(e){s.log(s.Level.ERROR,e)}static critical(e){s.log(s.Level.CRITICAL,e)}}var X="0.7.2";var J=X;var d=require("@opentelemetry/api");var Z=require("@opentelemetry/exporter-trace-otlp-http");class N{delegate;constructor(e,t,r,o){this.delegate=new Z.OTLPTraceExporter({url:e,headers:{Authorization:`Bearer ${t}`,"X-Organization-Id":r,"X-Project-Id":o}})}export(e,t){s.info(`JudgmentSpanExporter: exporting ${e.length} spans`),this.delegate.export(e,t)}shutdown(){return this.delegate.shutdown()}forceFlush(){return this.delegate.forceFlush?.()??Promise.resolve()}}class R{export(e,t){t({code:0})}shutdown(){return Promise.resolve()}}class h{static TRACER_NAME="judgeval";projectName;enableEvaluation;apiClient;serializer;jsonEncoder;projectId;constructor(e,t,r,o,i=JSON.stringify){this.projectName=e,this.enableEvaluation=t,this.apiClient=r,this.serializer=o,this.jsonEncoder=i,this.projectId=null}async resolveAndSetProjectId(){try{this.projectId=await this.resolveProjectId(this.projectName),s.info(`Successfully resolved project ID: ${this.projectId}`)}catch{s.error(`Failed to resolve project ${this.projectName}, please create it first at https://app.judgmentlabs.ai/org/${this.apiClient.getOrganizationId()}/projects. Skipping Judgment export.`),this.projectId=null}}getSpanExporter(){if(this.projectId!==null)return this.createJudgmentSpanExporter(this.projectId);return s.error("Project not resolved; cannot create exporter, returning NoOpSpanExporter"),new R}getTracer(){return d.trace.getTracer(h.TRACER_NAME)}setSpanKind(e){if(!e)return;let t=d.trace.getActiveSpan();if(t)t.setAttribute("judgment.span_kind",e)}setAttribute(e,t){if(!this.isValidKey(e))return;if(t===null||t===void 0)return;let r=d.trace.getActiveSpan();if(r){let o=typeof t==="string"||typeof t==="number"||typeof t==="boolean"?t:this.serializer(t);r.setAttribute(e,o)}}setAttributes(e){for(let[t,r]of Object.entries(e))this.setAttribute(t,r)}setLLMSpan(){this.setSpanKind("llm")}setToolSpan(){this.setSpanKind("tool")}setGeneralSpan(){this.setSpanKind("span")}setInput(e){this.setAttribute("judgment.input",e)}setOutput(e){this.setAttribute("judgment.output",e)}asyncEvaluate(e,t){this.safeExecute("evaluate scorer",()=>{if(!this.enableEvaluation)return;let r=this.getSampledSpanContext();if(!r)return;let{traceId:o,spanId:i}=r;this.logEvaluationInfo("asyncEvaluate",o,i,e.getName());let a=this.createEvaluationRun(e,t,o,i);this.enqueueEvaluation(a).catch((n)=>{s.error(`Failed to enqueue evaluation run: ${n}`)})})}asyncTraceEvaluate(e){this.safeExecute("evaluate trace scorer",()=>{if(!this.enableEvaluation)return;let t=this.getSampledSpan();if(!t)return;let r=t.spanContext(),o=r.traceId,i=r.spanId;this.logEvaluationInfo("asyncTraceEvaluate",o,i,e.getName());let a=this.createTraceEvaluationRun(e,o,i);try{let n=JSON.stringify(a);t.setAttribute("judgment.pending_trace_eval",n)}catch(n){s.error(`Failed to serialize trace evaluation: ${n}`)}})}span(e,t,r,o){return this.getTracer().startActiveSpan(e,r??{},o??d.context.active(),(a)=>{try{return t()}catch(n){throw a.setStatus({code:d.SpanStatusCode.ERROR}),a.recordException(n),n}finally{a.end()}})}observe(e,t="span",r,o,i){let a=this.getTracer(),n=r??e.name;return(...E)=>{return a.startActiveSpan(n,o??{},i??d.context.active(),(c)=>{if(t)c.setAttribute("judgment.span_kind",t);try{let G=this.formatInputs(e,E);c.setAttribute("judgment.input",this.serializer(G));let b=e(...E);if(b instanceof Promise)return b.then((w)=>{return c.setAttribute("judgment.output",this.serializer(w)),w}).catch((w)=>{throw c.recordException(w),c.setStatus({code:d.SpanStatusCode.ERROR,message:String(w)}),w}).finally(()=>{c.end()});return c.setAttribute("judgment.output",this.serializer(b)),c.end(),b}catch(G){throw c.recordException(G),c.setStatus({code:d.SpanStatusCode.ERROR,message:String(G)}),c.end(),G}})}}async resolveProjectId(e){try{s.info(`Resolving project ID for project: ${e}`);let t={project_name:e},o=(await this.apiClient.projectsResolve(t)).project_id;if(!o)throw Error(`Project ID not found for project: ${e}`);return s.info(`Resolved project ID: ${o}`),o}catch(t){throw Error(`Failed to resolve project ID: ${t instanceof Error?t.message:String(t)}`)}}buildEndpoint(e){return e.endsWith("/")?e+"otel/v1/traces":e+"/otel/v1/traces"}createJudgmentSpanExporter(e){return new N(this.buildEndpoint(this.apiClient.getBaseUrl()),this.apiClient.getApiKey(),this.apiClient.getOrganizationId(),e)}generateRunId(e,t){return e+(t??Date.now().toString())}createEvaluationRun(e,t,r,o){let i=this.generateRunId("async_evaluate_",o);return{project_name:this.projectName,eval_name:i,trace_id:r,trace_span_id:o,examples:[t.toModel()],judgment_scorers:[e.getScorerConfig()],custom_scorers:[]}}createTraceEvaluationRun(e,t,r){let o=this.generateRunId("async_trace_evaluate_",r);return{project_name:this.projectName,eval_name:o,trace_and_span_ids:[[t,r]],judgment_scorers:[e.getScorerConfig()],custom_scorers:[],is_offline:!1}}async enqueueEvaluation(e){try{await this.apiClient.addToRunEvalQueueExamples(e)}catch(t){s.error(`Failed to enqueue evaluation run: ${t}`)}}getSampledSpanContext(){let e=d.trace.getActiveSpan();if(!e)return null;let t=e.spanContext();if(!t.traceFlags||!(t.traceFlags&1))return null;return t}getSampledSpan(){let e=d.trace.getActiveSpan();if(!e)return null;let t=e.spanContext();if(!t.traceFlags||!(t.traceFlags&1))return null;return e}logEvaluationInfo(e,t,r,o){s.info(`${e}: project=${this.projectName}, traceId=${t}, spanId=${r}, scorer=${o}`)}safeExecute(e,t){try{t()}catch(r){s.error(`Failed to ${e}: ${r}`)}}isValidKey(e){return e.length>0}formatInputs(e,t){try{let r=e.toString(),o=/\(([^)]*)\)/.exec(r),i=o?o[1].split(",").map((n)=>n.trim().split("=")[0].trim()).filter((n)=>n.length>0):[],a={};return i.forEach((n,E)=>{if(E<t.length)a[n]=t[E]}),a}catch{return{}}}}class M extends h{webTracerProvider=null;resourceAttributes;constructor(e,t,r,o,i){super(e,t,r,o);this.resourceAttributes=i}static async create(e,t){let r=new M(e.projectName,e.enableEvaluation,t,e.serializer,e.resourceAttributes);if(await r.resolveAndSetProjectId(),e.initialize)await r.initialize();return r}async initialize(){if(this.webTracerProvider!==null){s.warn("BrowserTracer already initialized");return}try{let e={"service.name":this.projectName,"telemetry.sdk.version":J,...this.resourceAttributes},t=this.getSpanExporter();this.webTracerProvider=new F.WebTracerProvider({resource:K.resourceFromAttributes(e),spanProcessors:[new F.BatchSpanProcessor(t)]}),this.webTracerProvider.register(),s.info("BrowserTracer initialized successfully")}catch(e){throw Error(`Failed to initialize BrowserTracer: ${e instanceof Error?e.message:String(e)}`)}}async shutdown(){if(!this.webTracerProvider){s.warn("BrowserTracer not initialized, skipping shutdown");return}try{await this.webTracerProvider.shutdown(),this.webTracerProvider=null,s.info("BrowserTracer shut down successfully")}catch(e){s.error(`Failed to shutdown BrowserTracer: ${e}`)}}}class D{client;constructor(e){this.client=e}async create(e){if(!e.projectName)throw Error("Project name is required");return M.create({projectName:e.projectName,enableEvaluation:e.enableEvaluation??!0,enableMonitoring:e.enableMonitoring??!1,serializer:e.serializer??JSON.stringify,resourceAttributes:e.resourceAttributes??{},initialize:e.initialize??!0},this.client)}}var ee=require("@opentelemetry/resources"),te=require("@opentelemetry/sdk-node");class A extends h{nodeSDK=null;resourceAttributes;instrumentations;constructor(e,t,r,o,i,a){super(e,t,r,o);this.resourceAttributes=i,this.instrumentations=a}static async create(e,t){let r=new A(e.projectName,e.enableEvaluation,t,e.serializer,e.resourceAttributes,e.instrumentations);if(await r.resolveAndSetProjectId(),e.initialize)await r.initialize();return r}async initialize(){if(this.nodeSDK!==null){s.warn("NodeTracer already initialized");return}try{let e={"service.name":this.projectName,"telemetry.sdk.version":J,...this.resourceAttributes},t=this.getSpanExporter();this.nodeSDK=new te.NodeSDK({resource:ee.resourceFromAttributes(e),traceExporter:t,instrumentations:this.instrumentations}),this.nodeSDK.start(),s.info("NodeTracer initialized successfully")}catch(e){throw Error(`Failed to initialize NodeTracer: ${e instanceof Error?e.message:String(e)}`)}}async shutdown(){if(!this.nodeSDK){s.warn("NodeTracer not initialized, skipping shutdown");return}try{await this.nodeSDK.shutdown(),this.nodeSDK=null,s.info("NodeTracer shut down successfully")}catch(e){s.error(`Failed to shutdown NodeTracer: ${e}`)}}}class U{client;constructor(e){this.client=e}async create(e){if(!e.projectName)throw Error("Project name is required");return A.create({projectName:e.projectName,enableEvaluation:e.enableEvaluation??!0,enableMonitoring:e.enableMonitoring??!1,serializer:e.serializer??JSON.stringify,resourceAttributes:e.resourceAttributes??{},instrumentations:e.instrumentations??[],initialize:e.initialize??!0},this.client)}}class j{internalClient;constructor(e={}){let t=e.apiKey??Y,r=e.organizationId??z,o=e.apiUrl??B;if(!t)throw Error("API key is required");if(!r)throw Error("Organization ID is required");if(!o)throw Error("API URL is required");this.internalClient=new H(o,t,r)}static create(e={}){return new j(e)}get nodeTracer(){return new U(this.internalClient)}get browserTracer(){return new D(this.internalClient)}get scorers(){return new x(this.internalClient)}get evaluation(){return new y(this.internalClient)}}var re=require("crypto");class g{exampleId;createdAt;name;properties;constructor(e={}){this.exampleId=e.exampleId??re.randomUUID(),this.createdAt=e.createdAt??new Date().toISOString(),this.name=e.name??null,this.properties=e.properties??{}}static create(e){return new g({properties:e})}setProperty(e,t){return this.properties[e]=t,this}getProperty(e){return this.properties[e]}getProperties(){return{...this.properties}}toModel(){return{example_id:this.exampleId,created_at:this.createdAt,name:this.name??void 0,...this.properties}}}class L{name;threshold;success;score;reason;strictMode;evaluationModel;error;additionalMetadata;id;constructor(e={}){this.name=e.name??null,this.threshold=e.threshold??null,this.success=e.success??null,this.score=e.score??null,this.reason=e.reason??null,this.strictMode=e.strictMode??null,this.evaluationModel=e.evaluationModel??null,this.error=e.error??null,this.additionalMetadata=e.additionalMetadata??{},this.id=e.id??null}toModel(){let e={name:this.name??"",threshold:this.threshold??0,success:this.success??!1};if(this.score!==void 0&&this.score!==null)e.score=this.score;if(this.reason!==void 0&&this.reason!==null)e.reason=this.reason;if(this.strictMode!==void 0&&this.strictMode!==null)e.strict_mode=this.strictMode;if(this.evaluationModel!==void 0&&this.evaluationModel!==null)e.evaluation_model=this.evaluationModel;if(this.error!==void 0&&this.error!==null)e.error=this.error;if(this.additionalMetadata&&Object.keys(this.additionalMetadata).length>0)e.additional_metadata=this.additionalMetadata;if(this.id!==void 0&&this.id!==null)e.id=this.id;return e}}class k{success;scorersData;name;dataObject;traceId;runDuration;evaluationCost;constructor(e={}){this.success=e.success??null,this.scorersData=e.scorersData??[],this.name=e.name??null,this.dataObject=e.dataObject??null,this.traceId=e.traceId??null,this.runDuration=e.runDuration??null,this.evaluationCost=e.evaluationCost??null}toModel(){let e={success:this.success??!1,scorers_data:(this.scorersData??[]).map((t)=>t.toModel())};if(this.name!==void 0&&this.name!==null)e.name=this.name;if(this.dataObject!==void 0&&this.dataObject!==null)if(this.dataObject instanceof g)e.data_object=this.dataObject.toModel();else e.data_object=this.dataObject;if(this.traceId!==void 0&&this.traceId!==null)e.trace_id=this.traceId;if(this.runDuration!==void 0&&this.runDuration!==null)e.run_duration=this.runDuration;if(this.evaluationCost!==void 0&&this.evaluationCost!==null)e.evaluation_cost=this.evaluationCost;return e}}
3
3
 
4
- //# debugId=FF17D184C02B542664756E2164756E21
4
+ //# debugId=2188B4CC461E0AD764756E2164756E21
5
5
  //# sourceMappingURL=index.cjs.map
@@ -21,7 +21,7 @@
21
21
  "import { resourceFromAttributes } from \"@opentelemetry/resources\";\nimport {\n BatchSpanProcessor,\n WebTracerProvider,\n} 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 initialize?: boolean;\n}\n\ninterface InternalBrowserTracerConfig\n extends Required<Omit<BrowserTracerConfig, \"resourceAttributes\">> {\n resourceAttributes: Record<string, unknown>;\n}\n\nexport class BrowserTracer extends BaseTracer {\n private webTracerProvider: WebTracerProvider | null = null;\n private resourceAttributes: Record<string, unknown>;\n\n private constructor(\n projectName: string,\n enableEvaluation: boolean,\n apiClient: JudgmentApiClient,\n serializer: Serializer,\n resourceAttributes: Record<string, unknown>,\n ) {\n super(projectName, enableEvaluation, apiClient, serializer);\n this.resourceAttributes = resourceAttributes;\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 );\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 spanExporter = this.getSpanExporter();\n\n this.webTracerProvider = new WebTracerProvider({\n resource: resourceFromAttributes(attributes),\n spanProcessors: [new BatchSpanProcessor(spanExporter)],\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",
22
22
  "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",
23
23
  "import { version } from \"../package.json\" with { type: \"json\" };\n\nexport const VERSION = version;\n",
24
- "import {\n type Span,\n type SpanContext,\n SpanStatusCode,\n trace,\n type Tracer,\n} from \"@opentelemetry/api\";\nimport type { SpanExporter } from \"@opentelemetry/sdk-trace-base\";\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 { Logger } from \"../utils/logger\";\nimport { Example } from \"../data/Example\";\nimport { BaseScorer } from \"../scorers/BaseScorer\";\nimport { JudgmentSpanExporter, NoOpSpanExporter } from \"./exporters\";\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 this.createJudgmentSpanExporter(this.projectId);\n }\n Logger.error(\n \"Project not resolved; cannot create exporter, returning NoOpSpanExporter\",\n );\n return new NoOpSpanExporter();\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 span<T>(spanName: string, callableFunc: () => T): T {\n const tracer = this.getTracer();\n return tracer.startActiveSpan(spanName, (span) => {\n try {\n return callableFunc();\n } catch (e) {\n span.setStatus({ code: SpanStatusCode.ERROR });\n span.recordException(e as Error);\n throw e;\n } finally {\n span.end();\n }\n });\n }\n\n static startSpan(spanName: string): Span {\n const tracer = trace.getTracer(BaseTracer.TRACER_NAME);\n return tracer.startSpan(spanName);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n observe<TArgs extends any[], TResult>(\n func: (...args: TArgs) => TResult,\n spanType = \"span\",\n spanName?: string | null,\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(name, (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 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 createJudgmentSpanExporter(projectId: string): SpanExporter {\n return new JudgmentSpanExporter(\n this.buildEndpoint(this.apiClient.getBaseUrl()),\n this.apiClient.getApiKey(),\n this.apiClient.getOrganizationId(),\n projectId,\n );\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",
24
+ "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\";\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 this.createJudgmentSpanExporter(this.projectId);\n }\n Logger.error(\n \"Project not resolved; cannot create exporter, returning NoOpSpanExporter\",\n );\n return new NoOpSpanExporter();\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 span<T>(\n spanName: string,\n callableFunc: () => T,\n options?: SpanOptions,\n ctx?: Context,\n ): T {\n const tracer = this.getTracer();\n return tracer.startActiveSpan(\n spanName,\n options ?? {},\n ctx ?? context.active(),\n (span) => {\n try {\n return callableFunc();\n } catch (e) {\n span.setStatus({ code: SpanStatusCode.ERROR });\n span.recordException(e as Error);\n throw e;\n } finally {\n span.end();\n }\n },\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n observe<TArgs extends any[], 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 createJudgmentSpanExporter(projectId: string): SpanExporter {\n return new JudgmentSpanExporter(\n this.buildEndpoint(this.apiClient.getBaseUrl()),\n this.apiClient.getApiKey(),\n this.apiClient.getOrganizationId(),\n projectId,\n );\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",
25
25
  "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",
26
26
  "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",
27
27
  "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 initialize: config.initialize ?? true,\n },\n this.client,\n );\n }\n}\n",
@@ -32,7 +32,7 @@
32
32
  "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",
33
33
  "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"
34
34
  ],
35
- "mappings": "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",
36
- "debugId": "FF17D184C02B542664756E2164756E21",
35
+ "mappings": "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",
36
+ "debugId": "2188B4CC461E0AD764756E2164756E21",
37
37
  "names": []
38
38
  }
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- function l(e,t){let r=process.env[e];if(!r)return t??null;return r}var k=l("JUDGMENT_API_KEY"),$=l("JUDGMENT_ORG_ID"),H=l("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),se=l("JUDGMENT_LLM_PROXY_URL","https://api.judgmentlabs.ai/llm/proxy/v1"),q=l("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),oe=l("JUDGMENT_ENABLE_MONITORING","true"),ie=l("JUDGMENT_ENABLE_EVALUATIONS","true"),ne=l("JUDGMENT_NO_COLOR"),Y=l("JUDGMENT_LOG_LEVEL","warn"),ae=l("OPENAI_API_KEY"),le=l("ANTHROPIC_API_KEY"),de=l("GOOGLE_API_KEY"),ce=l("GEMINI_API_KEY");class G{baseUrl;apiKey;organizationId;constructor(e,t,r){this.baseUrl=e,this.apiKey=t,this.organizationId=r}getBaseUrl(){return this.baseUrl}getApiKey(){return this.apiKey}getOrganizationId(){return this.organizationId}buildUrl(e){return this.baseUrl+e}buildHeaders(){if(!this.apiKey||!this.organizationId)throw Error("API key and organization ID cannot be null");return{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId}}async addToRunEvalQueueExamples(e){let t=this.buildUrl("/add_to_run_eval_queue/examples"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async addToRunEvalQueueTraces(e){let t=this.buildUrl("/add_to_run_eval_queue/traces"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async logEvalResults(e){let t=this.buildUrl("/log_eval_results/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchExperimentRun(e){let t=this.buildUrl("/fetch_experiment_run/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async scorerExists(e){let t=this.buildUrl("/scorer_exists/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async saveScorer(e){let t=this.buildUrl("/save_scorer/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchScorers(e){let t=this.buildUrl("/fetch_scorers/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async projectsResolve(e){let t=this.buildUrl("/projects/resolve/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}}class C{client;constructor(e){this.client=e.client}}class y{client;constructor(e){this.client=e}create(e={}){return new C({...e,client:this.client})}}var d={PROMPT_SCORER:"Prompt Scorer",TRACE_PROMPT_SCORER:"Trace Prompt Scorer",FAITHFULNESS:"Faithfulness",ANSWER_RELEVANCY:"Answer Relevancy",ANSWER_CORRECTNESS:"Answer Correctness",CUSTOM:"Custom"};class h{}class c extends h{scoreType;requiredParams;_threshold;_name;_strictMode;_model;additionalProperties;constructor(e){super();this.scoreType=e,this._name=e,this._threshold=0.5,this._strictMode=!1,this.requiredParams=[],this.additionalProperties={}}getName(){return this._name}getScoreType(){return this.scoreType}getThreshold(){return this._threshold}getStrictMode(){return this._strictMode}getModel(){return this._model}getRequiredParams(){return[...this.requiredParams]}setThreshold(e){if(e<0||e>1)throw Error(`Threshold must be between 0 and 1, got: ${e}`);if(this._threshold=e,this._strictMode)this._threshold=1}setName(e){this._name=e}setStrictMode(e){if(this._strictMode=e,e)this._threshold=1}setModel(e){this._model=e}setRequiredParams(e){this.requiredParams=[...e]}setAdditionalProperty(e,t){this.additionalProperties[e]=t}getAdditionalProperties(){return{...this.additionalProperties}}getScorerConfig(){let e={...this.additionalProperties};return{score_type:this.scoreType,threshold:this._threshold,name:this._name,strict_mode:this._strictMode,required_params:this.requiredParams,kwargs:e}}static builder(e){return new z(this,e)}}class z{scorer;constructor(e,t){this.scorer=new e(t)}threshold(e){return this.scorer.setThreshold(e),this}name(e){return this.scorer.setName(e),this}strictMode(e){return this.scorer.setStrictMode(e),this}requiredParams(e){return this.scorer.setRequiredParams(e),this}model(e){return this.scorer.setModel(e),this}additionalProperty(e,t){return this.scorer.setAdditionalProperty(e,t),this}build(){return this.scorer}}class E extends c{constructor(e={}){super(d.ANSWER_CORRECTNESS);if(this.setRequiredParams(["input","actual_output","expected_output"]),e.threshold!==void 0)this.setThreshold(e.threshold);if(e.name)this.setName(e.name);if(e.strictMode!==void 0)this.setStrictMode(e.strictMode);if(e.model)this.setModel(e.model)}}class S extends c{constructor(e={}){super(d.ANSWER_RELEVANCY);if(this.setRequiredParams(["input","actual_output"]),e.threshold!==void 0)this.setThreshold(e.threshold);if(e.name)this.setName(e.name);if(e.strictMode!==void 0)this.setStrictMode(e.strictMode);if(e.model)this.setModel(e.model)}}class T extends c{constructor(e={}){super(d.FAITHFULNESS);if(this.setRequiredParams(["context","actual_output"]),e.threshold!==void 0)this.setThreshold(e.threshold);if(e.name)this.setName(e.name);if(e.strictMode!==void 0)this.setStrictMode(e.strictMode);if(e.model)this.setModel(e.model)}}class f{answerCorrectness(e={}){return new E(e)}answerRelevancy(e={}){return new S(e)}faithfulness(e={}){return new T(e)}}class O extends c{_className;_serverHosted;constructor(e){super(d.CUSTOM);if(this.setName(e.name),e.className)this._className=e.className,this.setAdditionalProperty("class_name",e.className);this._serverHosted=e.serverHosted??!0,this.setAdditionalProperty("server_hosted",this._serverHosted)}getClassName(){return this._className}isServerHosted(){return this._serverHosted}getScorerConfig(){throw Error("CustomScorer does not use ScorerConfig")}}class I{get(e,t){return new O({name:e,className:t??e,serverHosted:!0})}}class v extends h{_name;_prompt;_threshold;_options;_model;_description;isTrace;constructor(e){super();this._name=e.name,this._prompt=e.prompt,this._threshold=e.threshold,this._options={...e.options},this._model=e.model,this._description=e.description,this.isTrace=e.isTrace??!1}getName(){return this._name}getPrompt(){return this._prompt}getThreshold(){return this._threshold}getOptions(){return this._options?{...this._options}:void 0}getModel(){return this._model}getDescription(){return this._description}setThreshold(e){this._threshold=e}setPrompt(e){this._prompt=e}setModel(e){this._model=e}setOptions(e){this._options={...e}}setDescription(e){this._description=e}appendToPrompt(e){this._prompt=this._prompt+e}getScorerConfig(){let e=this.isTrace?d.TRACE_PROMPT_SCORER:d.PROMPT_SCORER,t={prompt:this._prompt};if(this._options)t.options=this._options;if(this._model)t.model=this._model;if(this._description)t.description=this._description;return{score_type:e,threshold:this._threshold,name:this._name,kwargs:t}}}class m{client;isTrace;static cache=new Map;constructor(e,t){this.client=e,this.isTrace=t}async get(e){let t=this.getCacheKey(e),r=m.cache.get(t);if(r)return this.createFromModel(r,e);try{let o={names:[e]},i=await this.client.fetchScorers(o);if(i.scorers.length===0)throw Error(`Failed to fetch prompt scorer '${e}': not found`);let a=i.scorers[0],n=a.is_trace===!0;if(n!==this.isTrace){let u=this.isTrace?"TracePromptScorer":"PromptScorer";throw Error(`Scorer with name ${e} is a ${n?"TracePromptScorer":"PromptScorer"}, not a ${u}`)}return m.cache.set(t,a),this.createFromModel(a,e)}catch(o){if(o instanceof Error)throw o;throw Error(`Failed to fetch prompt scorer '${e}': ${o}`)}}create(e){if(!e.name)throw Error("Name is required");if(!e.prompt)throw Error("Prompt is required");return new v({...e,isTrace:this.isTrace})}createFromModel(e,t){let r;if(e.options&&typeof e.options==="object"){r={};for(let[o,i]of Object.entries(e.options))if(typeof i==="number")r[o]=i}return new v({name:t,prompt:e.prompt,threshold:e.threshold,options:r??{},model:e.model??q,description:e.description??"",isTrace:this.isTrace})}getCacheKey(e){return`${e}:${this.client.getApiKey()}:${this.client.getOrganizationId()}`}}class x{client;constructor(e){this.client=e}get promptScorer(){return new m(this.client,!1)}get tracePromptScorer(){return new m(this.client,!0)}get customScorer(){return new I}get builtIn(){return new f}}import{resourceFromAttributes as X}from"@opentelemetry/resources";import{BatchSpanProcessor as Z,WebTracerProvider as K}from"@opentelemetry/sdk-trace-web";class s{static RESET="\x1B[0m";static RED="\x1B[31m";static YELLOW="\x1B[33m";static GRAY="\x1B[90m";static Level={DEBUG:0,INFO:1,WARNING:2,ERROR:3,CRITICAL:4};static initialized=!1;static currentLevel=s.Level.WARNING;static useColor=!0;static initialize(){if(!s.initialized){let e=process.env.JUDGMENT_NO_COLOR;s.useColor=!e&&process.stdout.isTTY;let t=Y.toLowerCase();if(t){let r={debug:s.Level.DEBUG,info:s.Level.INFO,warning:s.Level.WARNING,warn:s.Level.WARNING,error:s.Level.ERROR,critical:s.Level.CRITICAL};s.currentLevel=r[t]??s.Level.WARNING}s.initialized=!0}}static setLevel(e){s.currentLevel=e}static setUseColor(e){s.useColor=e}static log(e,t){if(s.initialize(),e<s.currentLevel)return;let r=new Date().toISOString().replace("T"," ").substring(0,19),o=Object.keys(s.Level).find((n)=>s.Level[n]===e)??"UNKNOWN",i=`${r} - judgeval - ${o} - ${t}`;if(s.useColor)i=`${e===s.Level.DEBUG||e===s.Level.INFO?s.GRAY:e===s.Level.WARNING?s.YELLOW:s.RED}${i}${s.RESET}`;(e>=s.Level.ERROR?process.stderr:process.stdout).write(i+`
2
- `)}static debug(e){s.log(s.Level.DEBUG,e)}static info(e){s.log(s.Level.INFO,e)}static warning(e){s.log(s.Level.WARNING,e)}static warn(e){s.log(s.Level.WARNING,e)}static error(e){s.log(s.Level.ERROR,e)}static critical(e){s.log(s.Level.CRITICAL,e)}}var B="0.7.0";var U=B;import{SpanStatusCode as J,trace as R}from"@opentelemetry/api";import{OTLPTraceExporter as V}from"@opentelemetry/exporter-trace-otlp-http";class P{delegate;constructor(e,t,r,o){this.delegate=new V({url:e,headers:{Authorization:`Bearer ${t}`,"X-Organization-Id":r,"X-Project-Id":o}})}export(e,t){s.info(`JudgmentSpanExporter: exporting ${e.length} spans`),this.delegate.export(e,t)}shutdown(){return this.delegate.shutdown()}forceFlush(){return this.delegate.forceFlush?.()??Promise.resolve()}}class N{export(e,t){t({code:0})}shutdown(){return Promise.resolve()}}class p{static TRACER_NAME="judgeval";projectName;enableEvaluation;apiClient;serializer;jsonEncoder;projectId;constructor(e,t,r,o,i=JSON.stringify){this.projectName=e,this.enableEvaluation=t,this.apiClient=r,this.serializer=o,this.jsonEncoder=i,this.projectId=null}async resolveAndSetProjectId(){try{this.projectId=await this.resolveProjectId(this.projectName),s.info(`Successfully resolved project ID: ${this.projectId}`)}catch{s.error(`Failed to resolve project ${this.projectName}, please create it first at https://app.judgmentlabs.ai/org/${this.apiClient.getOrganizationId()}/projects. Skipping Judgment export.`),this.projectId=null}}getSpanExporter(){if(this.projectId!==null)return this.createJudgmentSpanExporter(this.projectId);return s.error("Project not resolved; cannot create exporter, returning NoOpSpanExporter"),new N}getTracer(){return R.getTracer(p.TRACER_NAME)}setSpanKind(e){if(!e)return;let t=R.getActiveSpan();if(t)t.setAttribute("judgment.span_kind",e)}setAttribute(e,t){if(!this.isValidKey(e))return;if(t===null||t===void 0)return;let r=R.getActiveSpan();if(r){let o=typeof t==="string"||typeof t==="number"||typeof t==="boolean"?t:this.serializer(t);r.setAttribute(e,o)}}setAttributes(e){for(let[t,r]of Object.entries(e))this.setAttribute(t,r)}setLLMSpan(){this.setSpanKind("llm")}setToolSpan(){this.setSpanKind("tool")}setGeneralSpan(){this.setSpanKind("span")}setInput(e){this.setAttribute("judgment.input",e)}setOutput(e){this.setAttribute("judgment.output",e)}asyncEvaluate(e,t){this.safeExecute("evaluate scorer",()=>{if(!this.enableEvaluation)return;let r=this.getSampledSpanContext();if(!r)return;let{traceId:o,spanId:i}=r;this.logEvaluationInfo("asyncEvaluate",o,i,e.getName());let a=this.createEvaluationRun(e,t,o,i);this.enqueueEvaluation(a).catch((n)=>{s.error(`Failed to enqueue evaluation run: ${n}`)})})}asyncTraceEvaluate(e){this.safeExecute("evaluate trace scorer",()=>{if(!this.enableEvaluation)return;let t=this.getSampledSpan();if(!t)return;let r=t.spanContext(),o=r.traceId,i=r.spanId;this.logEvaluationInfo("asyncTraceEvaluate",o,i,e.getName());let a=this.createTraceEvaluationRun(e,o,i);try{let n=JSON.stringify(a);t.setAttribute("judgment.pending_trace_eval",n)}catch(n){s.error(`Failed to serialize trace evaluation: ${n}`)}})}span(e,t){return this.getTracer().startActiveSpan(e,(o)=>{try{return t()}catch(i){throw o.setStatus({code:J.ERROR}),o.recordException(i),i}finally{o.end()}})}static startSpan(e){return R.getTracer(p.TRACER_NAME).startSpan(e)}observe(e,t="span",r){let o=this.getTracer(),i=r??e.name;return(...a)=>{return o.startActiveSpan(i,(n)=>{if(t)n.setAttribute("judgment.span_kind",t);try{let u=this.formatInputs(e,a);n.setAttribute("judgment.input",this.serializer(u));let w=e(...a);if(w instanceof Promise)return w.then((_)=>{return n.setAttribute("judgment.output",this.serializer(_)),_}).catch((_)=>{throw n.recordException(_),n.setStatus({code:J.ERROR,message:String(_)}),_}).finally(()=>{n.end()});return n.setAttribute("judgment.output",this.serializer(w)),n.end(),w}catch(u){throw n.recordException(u),n.setStatus({code:J.ERROR,message:String(u)}),n.end(),u}})}}async resolveProjectId(e){try{s.info(`Resolving project ID for project: ${e}`);let t={project_name:e},o=(await this.apiClient.projectsResolve(t)).project_id;if(!o)throw Error(`Project ID not found for project: ${e}`);return s.info(`Resolved project ID: ${o}`),o}catch(t){throw Error(`Failed to resolve project ID: ${t instanceof Error?t.message:String(t)}`)}}buildEndpoint(e){return e.endsWith("/")?e+"otel/v1/traces":e+"/otel/v1/traces"}createJudgmentSpanExporter(e){return new P(this.buildEndpoint(this.apiClient.getBaseUrl()),this.apiClient.getApiKey(),this.apiClient.getOrganizationId(),e)}generateRunId(e,t){return e+(t??Date.now().toString())}createEvaluationRun(e,t,r,o){let i=this.generateRunId("async_evaluate_",o);return{project_name:this.projectName,eval_name:i,trace_id:r,trace_span_id:o,examples:[t.toModel()],judgment_scorers:[e.getScorerConfig()],custom_scorers:[]}}createTraceEvaluationRun(e,t,r){let o=this.generateRunId("async_trace_evaluate_",r);return{project_name:this.projectName,eval_name:o,trace_and_span_ids:[[t,r]],judgment_scorers:[e.getScorerConfig()],custom_scorers:[],is_offline:!1}}async enqueueEvaluation(e){try{await this.apiClient.addToRunEvalQueueExamples(e)}catch(t){s.error(`Failed to enqueue evaluation run: ${t}`)}}getSampledSpanContext(){let e=R.getActiveSpan();if(!e)return null;let t=e.spanContext();if(!t.traceFlags||!(t.traceFlags&1))return null;return t}getSampledSpan(){let e=R.getActiveSpan();if(!e)return null;let t=e.spanContext();if(!t.traceFlags||!(t.traceFlags&1))return null;return e}logEvaluationInfo(e,t,r,o){s.info(`${e}: project=${this.projectName}, traceId=${t}, spanId=${r}, scorer=${o}`)}safeExecute(e,t){try{t()}catch(r){s.error(`Failed to ${e}: ${r}`)}}isValidKey(e){return e.length>0}formatInputs(e,t){try{let r=e.toString(),o=/\(([^)]*)\)/.exec(r),i=o?o[1].split(",").map((n)=>n.trim().split("=")[0].trim()).filter((n)=>n.length>0):[],a={};return i.forEach((n,u)=>{if(u<t.length)a[n]=t[u]}),a}catch{return{}}}}class M extends p{webTracerProvider=null;resourceAttributes;constructor(e,t,r,o,i){super(e,t,r,o);this.resourceAttributes=i}static async create(e,t){let r=new M(e.projectName,e.enableEvaluation,t,e.serializer,e.resourceAttributes);if(await r.resolveAndSetProjectId(),e.initialize)await r.initialize();return r}async initialize(){if(this.webTracerProvider!==null){s.warn("BrowserTracer already initialized");return}try{let e={"service.name":this.projectName,"telemetry.sdk.version":U,...this.resourceAttributes},t=this.getSpanExporter();this.webTracerProvider=new K({resource:X(e),spanProcessors:[new Z(t)]}),this.webTracerProvider.register(),s.info("BrowserTracer initialized successfully")}catch(e){throw Error(`Failed to initialize BrowserTracer: ${e instanceof Error?e.message:String(e)}`)}}async shutdown(){if(!this.webTracerProvider){s.warn("BrowserTracer not initialized, skipping shutdown");return}try{await this.webTracerProvider.shutdown(),this.webTracerProvider=null,s.info("BrowserTracer shut down successfully")}catch(e){s.error(`Failed to shutdown BrowserTracer: ${e}`)}}}class b{client;constructor(e){this.client=e}async create(e){if(!e.projectName)throw Error("Project name is required");return M.create({projectName:e.projectName,enableEvaluation:e.enableEvaluation??!0,enableMonitoring:e.enableMonitoring??!1,serializer:e.serializer??JSON.stringify,resourceAttributes:e.resourceAttributes??{},initialize:e.initialize??!0},this.client)}}import{resourceFromAttributes as ee}from"@opentelemetry/resources";import{NodeSDK as te}from"@opentelemetry/sdk-node";class A extends p{nodeSDK=null;resourceAttributes;instrumentations;constructor(e,t,r,o,i,a){super(e,t,r,o);this.resourceAttributes=i,this.instrumentations=a}static async create(e,t){let r=new A(e.projectName,e.enableEvaluation,t,e.serializer,e.resourceAttributes,e.instrumentations);if(await r.resolveAndSetProjectId(),e.initialize)await r.initialize();return r}async initialize(){if(this.nodeSDK!==null){s.warn("NodeTracer already initialized");return}try{let e={"service.name":this.projectName,"telemetry.sdk.version":U,...this.resourceAttributes},t=this.getSpanExporter();this.nodeSDK=new te({resource:ee(e),traceExporter:t,instrumentations:this.instrumentations}),this.nodeSDK.start(),s.info("NodeTracer initialized successfully")}catch(e){throw Error(`Failed to initialize NodeTracer: ${e instanceof Error?e.message:String(e)}`)}}async shutdown(){if(!this.nodeSDK){s.warn("NodeTracer not initialized, skipping shutdown");return}try{await this.nodeSDK.shutdown(),this.nodeSDK=null,s.info("NodeTracer shut down successfully")}catch(e){s.error(`Failed to shutdown NodeTracer: ${e}`)}}}class D{client;constructor(e){this.client=e}async create(e){if(!e.projectName)throw Error("Project name is required");return A.create({projectName:e.projectName,enableEvaluation:e.enableEvaluation??!0,enableMonitoring:e.enableMonitoring??!1,serializer:e.serializer??JSON.stringify,resourceAttributes:e.resourceAttributes??{},instrumentations:e.instrumentations??[],initialize:e.initialize??!0},this.client)}}class j{internalClient;constructor(e={}){let t=e.apiKey??k,r=e.organizationId??$,o=e.apiUrl??H;if(!t)throw Error("API key is required");if(!r)throw Error("Organization ID is required");if(!o)throw Error("API URL is required");this.internalClient=new G(o,t,r)}static create(e={}){return new j(e)}get nodeTracer(){return new D(this.internalClient)}get browserTracer(){return new b(this.internalClient)}get scorers(){return new x(this.internalClient)}get evaluation(){return new y(this.internalClient)}}import{randomUUID as re}from"crypto";class g{exampleId;createdAt;name;properties;constructor(e={}){this.exampleId=e.exampleId??re(),this.createdAt=e.createdAt??new Date().toISOString(),this.name=e.name??null,this.properties=e.properties??{}}static create(e){return new g({properties:e})}setProperty(e,t){return this.properties[e]=t,this}getProperty(e){return this.properties[e]}getProperties(){return{...this.properties}}toModel(){return{example_id:this.exampleId,created_at:this.createdAt,name:this.name??void 0,...this.properties}}}class F{name;threshold;success;score;reason;strictMode;evaluationModel;error;additionalMetadata;id;constructor(e={}){this.name=e.name??null,this.threshold=e.threshold??null,this.success=e.success??null,this.score=e.score??null,this.reason=e.reason??null,this.strictMode=e.strictMode??null,this.evaluationModel=e.evaluationModel??null,this.error=e.error??null,this.additionalMetadata=e.additionalMetadata??{},this.id=e.id??null}toModel(){let e={name:this.name??"",threshold:this.threshold??0,success:this.success??!1};if(this.score!==void 0&&this.score!==null)e.score=this.score;if(this.reason!==void 0&&this.reason!==null)e.reason=this.reason;if(this.strictMode!==void 0&&this.strictMode!==null)e.strict_mode=this.strictMode;if(this.evaluationModel!==void 0&&this.evaluationModel!==null)e.evaluation_model=this.evaluationModel;if(this.error!==void 0&&this.error!==null)e.error=this.error;if(this.additionalMetadata&&Object.keys(this.additionalMetadata).length>0)e.additional_metadata=this.additionalMetadata;if(this.id!==void 0&&this.id!==null)e.id=this.id;return e}}class L{success;scorersData;name;dataObject;traceId;runDuration;evaluationCost;constructor(e={}){this.success=e.success??null,this.scorersData=e.scorersData??[],this.name=e.name??null,this.dataObject=e.dataObject??null,this.traceId=e.traceId??null,this.runDuration=e.runDuration??null,this.evaluationCost=e.evaluationCost??null}toModel(){let e={success:this.success??!1,scorers_data:(this.scorersData??[]).map((t)=>t.toModel())};if(this.name!==void 0&&this.name!==null)e.name=this.name;if(this.dataObject!==void 0&&this.dataObject!==null)if(this.dataObject instanceof g)e.data_object=this.dataObject.toModel();else e.data_object=this.dataObject;if(this.traceId!==void 0&&this.traceId!==null)e.trace_id=this.traceId;if(this.runDuration!==void 0&&this.runDuration!==null)e.run_duration=this.runDuration;if(this.evaluationCost!==void 0&&this.evaluationCost!==null)e.evaluation_cost=this.evaluationCost;return e}}export{L as ScoringResult,x as ScorersFactory,F as ScorerData,m as PromptScorerFactory,v as PromptScorer,D as NodeTracerFactory,A as NodeTracer,N as NoOpSpanExporter,P as JudgmentSpanExporter,j as Judgeval,T as FaithfulnessScorer,g as Example,y as EvaluationFactory,C as Evaluation,I as CustomScorerFactory,O as CustomScorer,f as BuiltInScorersFactory,b as BrowserTracerFactory,M as BrowserTracer,p as BaseTracer,h as BaseScorer,S as AnswerRelevancyScorer,E as AnswerCorrectnessScorer,c as APIScorer};
1
+ function l(e,t){let r=process.env[e];if(!r)return t??null;return r}var H=l("JUDGMENT_API_KEY"),q=l("JUDGMENT_ORG_ID"),Y=l("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),ne=l("JUDGMENT_LLM_PROXY_URL","https://api.judgmentlabs.ai/llm/proxy/v1"),z=l("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),ae=l("JUDGMENT_ENABLE_MONITORING","true"),le=l("JUDGMENT_ENABLE_EVALUATIONS","true"),de=l("JUDGMENT_NO_COLOR"),B=l("JUDGMENT_LOG_LEVEL","warn"),ce=l("OPENAI_API_KEY"),ue=l("ANTHROPIC_API_KEY"),me=l("GOOGLE_API_KEY"),pe=l("GEMINI_API_KEY");class F{baseUrl;apiKey;organizationId;constructor(e,t,r){this.baseUrl=e,this.apiKey=t,this.organizationId=r}getBaseUrl(){return this.baseUrl}getApiKey(){return this.apiKey}getOrganizationId(){return this.organizationId}buildUrl(e){return this.baseUrl+e}buildHeaders(){if(!this.apiKey||!this.organizationId)throw Error("API key and organization ID cannot be null");return{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId}}async addToRunEvalQueueExamples(e){let t=this.buildUrl("/add_to_run_eval_queue/examples"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async addToRunEvalQueueTraces(e){let t=this.buildUrl("/add_to_run_eval_queue/traces"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async logEvalResults(e){let t=this.buildUrl("/log_eval_results/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchExperimentRun(e){let t=this.buildUrl("/fetch_experiment_run/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async scorerExists(e){let t=this.buildUrl("/scorer_exists/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async saveScorer(e){let t=this.buildUrl("/save_scorer/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchScorers(e){let t=this.buildUrl("/fetch_scorers/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async projectsResolve(e){let t=this.buildUrl("/projects/resolve/"),r=await fetch(t,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(e)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}}class C{client;constructor(e){this.client=e.client}}class y{client;constructor(e){this.client=e}create(e={}){return new C({...e,client:this.client})}}var c={PROMPT_SCORER:"Prompt Scorer",TRACE_PROMPT_SCORER:"Trace Prompt Scorer",FAITHFULNESS:"Faithfulness",ANSWER_RELEVANCY:"Answer Relevancy",ANSWER_CORRECTNESS:"Answer Correctness",CUSTOM:"Custom"};class _{}class u extends _{scoreType;requiredParams;_threshold;_name;_strictMode;_model;additionalProperties;constructor(e){super();this.scoreType=e,this._name=e,this._threshold=0.5,this._strictMode=!1,this.requiredParams=[],this.additionalProperties={}}getName(){return this._name}getScoreType(){return this.scoreType}getThreshold(){return this._threshold}getStrictMode(){return this._strictMode}getModel(){return this._model}getRequiredParams(){return[...this.requiredParams]}setThreshold(e){if(e<0||e>1)throw Error(`Threshold must be between 0 and 1, got: ${e}`);if(this._threshold=e,this._strictMode)this._threshold=1}setName(e){this._name=e}setStrictMode(e){if(this._strictMode=e,e)this._threshold=1}setModel(e){this._model=e}setRequiredParams(e){this.requiredParams=[...e]}setAdditionalProperty(e,t){this.additionalProperties[e]=t}getAdditionalProperties(){return{...this.additionalProperties}}getScorerConfig(){let e={...this.additionalProperties};return{score_type:this.scoreType,threshold:this._threshold,name:this._name,strict_mode:this._strictMode,required_params:this.requiredParams,kwargs:e}}static builder(e){return new W(this,e)}}class W{scorer;constructor(e,t){this.scorer=new e(t)}threshold(e){return this.scorer.setThreshold(e),this}name(e){return this.scorer.setName(e),this}strictMode(e){return this.scorer.setStrictMode(e),this}requiredParams(e){return this.scorer.setRequiredParams(e),this}model(e){return this.scorer.setModel(e),this}additionalProperty(e,t){return this.scorer.setAdditionalProperty(e,t),this}build(){return this.scorer}}class S extends u{constructor(e={}){super(c.ANSWER_CORRECTNESS);if(this.setRequiredParams(["input","actual_output","expected_output"]),e.threshold!==void 0)this.setThreshold(e.threshold);if(e.name)this.setName(e.name);if(e.strictMode!==void 0)this.setStrictMode(e.strictMode);if(e.model)this.setModel(e.model)}}class T extends u{constructor(e={}){super(c.ANSWER_RELEVANCY);if(this.setRequiredParams(["input","actual_output"]),e.threshold!==void 0)this.setThreshold(e.threshold);if(e.name)this.setName(e.name);if(e.strictMode!==void 0)this.setStrictMode(e.strictMode);if(e.model)this.setModel(e.model)}}class f extends u{constructor(e={}){super(c.FAITHFULNESS);if(this.setRequiredParams(["context","actual_output"]),e.threshold!==void 0)this.setThreshold(e.threshold);if(e.name)this.setName(e.name);if(e.strictMode!==void 0)this.setStrictMode(e.strictMode);if(e.model)this.setModel(e.model)}}class v{answerCorrectness(e={}){return new S(e)}answerRelevancy(e={}){return new T(e)}faithfulness(e={}){return new f(e)}}class O extends u{_className;_serverHosted;constructor(e){super(c.CUSTOM);if(this.setName(e.name),e.className)this._className=e.className,this.setAdditionalProperty("class_name",e.className);this._serverHosted=e.serverHosted??!0,this.setAdditionalProperty("server_hosted",this._serverHosted)}getClassName(){return this._className}isServerHosted(){return this._serverHosted}getScorerConfig(){throw Error("CustomScorer does not use ScorerConfig")}}class I{get(e,t){return new O({name:e,className:t??e,serverHosted:!0})}}class P extends _{_name;_prompt;_threshold;_options;_model;_description;isTrace;constructor(e){super();this._name=e.name,this._prompt=e.prompt,this._threshold=e.threshold,this._options={...e.options},this._model=e.model,this._description=e.description,this.isTrace=e.isTrace??!1}getName(){return this._name}getPrompt(){return this._prompt}getThreshold(){return this._threshold}getOptions(){return this._options?{...this._options}:void 0}getModel(){return this._model}getDescription(){return this._description}setThreshold(e){this._threshold=e}setPrompt(e){this._prompt=e}setModel(e){this._model=e}setOptions(e){this._options={...e}}setDescription(e){this._description=e}appendToPrompt(e){this._prompt=this._prompt+e}getScorerConfig(){let e=this.isTrace?c.TRACE_PROMPT_SCORER:c.PROMPT_SCORER,t={prompt:this._prompt};if(this._options)t.options=this._options;if(this._model)t.model=this._model;if(this._description)t.description=this._description;return{score_type:e,threshold:this._threshold,name:this._name,kwargs:t}}}class m{client;isTrace;static cache=new Map;constructor(e,t){this.client=e,this.isTrace=t}async get(e){let t=this.getCacheKey(e),r=m.cache.get(t);if(r)return this.createFromModel(r,e);try{let o={names:[e]},i=await this.client.fetchScorers(o);if(i.scorers.length===0)throw Error(`Failed to fetch prompt scorer '${e}': not found`);let a=i.scorers[0],n=a.is_trace===!0;if(n!==this.isTrace){let h=this.isTrace?"TracePromptScorer":"PromptScorer";throw Error(`Scorer with name ${e} is a ${n?"TracePromptScorer":"PromptScorer"}, not a ${h}`)}return m.cache.set(t,a),this.createFromModel(a,e)}catch(o){if(o instanceof Error)throw o;throw Error(`Failed to fetch prompt scorer '${e}': ${o}`)}}create(e){if(!e.name)throw Error("Name is required");if(!e.prompt)throw Error("Prompt is required");return new P({...e,isTrace:this.isTrace})}createFromModel(e,t){let r;if(e.options&&typeof e.options==="object"){r={};for(let[o,i]of Object.entries(e.options))if(typeof i==="number")r[o]=i}return new P({name:t,prompt:e.prompt,threshold:e.threshold,options:r??{},model:e.model??z,description:e.description??"",isTrace:this.isTrace})}getCacheKey(e){return`${e}:${this.client.getApiKey()}:${this.client.getOrganizationId()}`}}class x{client;constructor(e){this.client=e}get promptScorer(){return new m(this.client,!1)}get tracePromptScorer(){return new m(this.client,!0)}get customScorer(){return new I}get builtIn(){return new v}}import{resourceFromAttributes as ee}from"@opentelemetry/resources";import{BatchSpanProcessor as te,WebTracerProvider as re}from"@opentelemetry/sdk-trace-web";class s{static RESET="\x1B[0m";static RED="\x1B[31m";static YELLOW="\x1B[33m";static GRAY="\x1B[90m";static Level={DEBUG:0,INFO:1,WARNING:2,ERROR:3,CRITICAL:4};static initialized=!1;static currentLevel=s.Level.WARNING;static useColor=!0;static initialize(){if(!s.initialized){let e=process.env.JUDGMENT_NO_COLOR;s.useColor=!e&&process.stdout.isTTY;let t=B.toLowerCase();if(t){let r={debug:s.Level.DEBUG,info:s.Level.INFO,warning:s.Level.WARNING,warn:s.Level.WARNING,error:s.Level.ERROR,critical:s.Level.CRITICAL};s.currentLevel=r[t]??s.Level.WARNING}s.initialized=!0}}static setLevel(e){s.currentLevel=e}static setUseColor(e){s.useColor=e}static log(e,t){if(s.initialize(),e<s.currentLevel)return;let r=new Date().toISOString().replace("T"," ").substring(0,19),o=Object.keys(s.Level).find((n)=>s.Level[n]===e)??"UNKNOWN",i=`${r} - judgeval - ${o} - ${t}`;if(s.useColor)i=`${e===s.Level.DEBUG||e===s.Level.INFO?s.GRAY:e===s.Level.WARNING?s.YELLOW:s.RED}${i}${s.RESET}`;(e>=s.Level.ERROR?process.stderr:process.stdout).write(i+`
2
+ `)}static debug(e){s.log(s.Level.DEBUG,e)}static info(e){s.log(s.Level.INFO,e)}static warning(e){s.log(s.Level.WARNING,e)}static warn(e){s.log(s.Level.WARNING,e)}static error(e){s.log(s.Level.ERROR,e)}static critical(e){s.log(s.Level.CRITICAL,e)}}var V="0.7.2";var J=V;import{context as Q,SpanStatusCode as j,trace as D}from"@opentelemetry/api";import{OTLPTraceExporter as Z}from"@opentelemetry/exporter-trace-otlp-http";class N{delegate;constructor(e,t,r,o){this.delegate=new Z({url:e,headers:{Authorization:`Bearer ${t}`,"X-Organization-Id":r,"X-Project-Id":o}})}export(e,t){s.info(`JudgmentSpanExporter: exporting ${e.length} spans`),this.delegate.export(e,t)}shutdown(){return this.delegate.shutdown()}forceFlush(){return this.delegate.forceFlush?.()??Promise.resolve()}}class R{export(e,t){t({code:0})}shutdown(){return Promise.resolve()}}class p{static TRACER_NAME="judgeval";projectName;enableEvaluation;apiClient;serializer;jsonEncoder;projectId;constructor(e,t,r,o,i=JSON.stringify){this.projectName=e,this.enableEvaluation=t,this.apiClient=r,this.serializer=o,this.jsonEncoder=i,this.projectId=null}async resolveAndSetProjectId(){try{this.projectId=await this.resolveProjectId(this.projectName),s.info(`Successfully resolved project ID: ${this.projectId}`)}catch{s.error(`Failed to resolve project ${this.projectName}, please create it first at https://app.judgmentlabs.ai/org/${this.apiClient.getOrganizationId()}/projects. Skipping Judgment export.`),this.projectId=null}}getSpanExporter(){if(this.projectId!==null)return this.createJudgmentSpanExporter(this.projectId);return s.error("Project not resolved; cannot create exporter, returning NoOpSpanExporter"),new R}getTracer(){return D.getTracer(p.TRACER_NAME)}setSpanKind(e){if(!e)return;let t=D.getActiveSpan();if(t)t.setAttribute("judgment.span_kind",e)}setAttribute(e,t){if(!this.isValidKey(e))return;if(t===null||t===void 0)return;let r=D.getActiveSpan();if(r){let o=typeof t==="string"||typeof t==="number"||typeof t==="boolean"?t:this.serializer(t);r.setAttribute(e,o)}}setAttributes(e){for(let[t,r]of Object.entries(e))this.setAttribute(t,r)}setLLMSpan(){this.setSpanKind("llm")}setToolSpan(){this.setSpanKind("tool")}setGeneralSpan(){this.setSpanKind("span")}setInput(e){this.setAttribute("judgment.input",e)}setOutput(e){this.setAttribute("judgment.output",e)}asyncEvaluate(e,t){this.safeExecute("evaluate scorer",()=>{if(!this.enableEvaluation)return;let r=this.getSampledSpanContext();if(!r)return;let{traceId:o,spanId:i}=r;this.logEvaluationInfo("asyncEvaluate",o,i,e.getName());let a=this.createEvaluationRun(e,t,o,i);this.enqueueEvaluation(a).catch((n)=>{s.error(`Failed to enqueue evaluation run: ${n}`)})})}asyncTraceEvaluate(e){this.safeExecute("evaluate trace scorer",()=>{if(!this.enableEvaluation)return;let t=this.getSampledSpan();if(!t)return;let r=t.spanContext(),o=r.traceId,i=r.spanId;this.logEvaluationInfo("asyncTraceEvaluate",o,i,e.getName());let a=this.createTraceEvaluationRun(e,o,i);try{let n=JSON.stringify(a);t.setAttribute("judgment.pending_trace_eval",n)}catch(n){s.error(`Failed to serialize trace evaluation: ${n}`)}})}span(e,t,r,o){return this.getTracer().startActiveSpan(e,r??{},o??Q.active(),(a)=>{try{return t()}catch(n){throw a.setStatus({code:j.ERROR}),a.recordException(n),n}finally{a.end()}})}observe(e,t="span",r,o,i){let a=this.getTracer(),n=r??e.name;return(...h)=>{return a.startActiveSpan(n,o??{},i??Q.active(),(d)=>{if(t)d.setAttribute("judgment.span_kind",t);try{let w=this.formatInputs(e,h);d.setAttribute("judgment.input",this.serializer(w));let b=e(...h);if(b instanceof Promise)return b.then((E)=>{return d.setAttribute("judgment.output",this.serializer(E)),E}).catch((E)=>{throw d.recordException(E),d.setStatus({code:j.ERROR,message:String(E)}),E}).finally(()=>{d.end()});return d.setAttribute("judgment.output",this.serializer(b)),d.end(),b}catch(w){throw d.recordException(w),d.setStatus({code:j.ERROR,message:String(w)}),d.end(),w}})}}async resolveProjectId(e){try{s.info(`Resolving project ID for project: ${e}`);let t={project_name:e},o=(await this.apiClient.projectsResolve(t)).project_id;if(!o)throw Error(`Project ID not found for project: ${e}`);return s.info(`Resolved project ID: ${o}`),o}catch(t){throw Error(`Failed to resolve project ID: ${t instanceof Error?t.message:String(t)}`)}}buildEndpoint(e){return e.endsWith("/")?e+"otel/v1/traces":e+"/otel/v1/traces"}createJudgmentSpanExporter(e){return new N(this.buildEndpoint(this.apiClient.getBaseUrl()),this.apiClient.getApiKey(),this.apiClient.getOrganizationId(),e)}generateRunId(e,t){return e+(t??Date.now().toString())}createEvaluationRun(e,t,r,o){let i=this.generateRunId("async_evaluate_",o);return{project_name:this.projectName,eval_name:i,trace_id:r,trace_span_id:o,examples:[t.toModel()],judgment_scorers:[e.getScorerConfig()],custom_scorers:[]}}createTraceEvaluationRun(e,t,r){let o=this.generateRunId("async_trace_evaluate_",r);return{project_name:this.projectName,eval_name:o,trace_and_span_ids:[[t,r]],judgment_scorers:[e.getScorerConfig()],custom_scorers:[],is_offline:!1}}async enqueueEvaluation(e){try{await this.apiClient.addToRunEvalQueueExamples(e)}catch(t){s.error(`Failed to enqueue evaluation run: ${t}`)}}getSampledSpanContext(){let e=D.getActiveSpan();if(!e)return null;let t=e.spanContext();if(!t.traceFlags||!(t.traceFlags&1))return null;return t}getSampledSpan(){let e=D.getActiveSpan();if(!e)return null;let t=e.spanContext();if(!t.traceFlags||!(t.traceFlags&1))return null;return e}logEvaluationInfo(e,t,r,o){s.info(`${e}: project=${this.projectName}, traceId=${t}, spanId=${r}, scorer=${o}`)}safeExecute(e,t){try{t()}catch(r){s.error(`Failed to ${e}: ${r}`)}}isValidKey(e){return e.length>0}formatInputs(e,t){try{let r=e.toString(),o=/\(([^)]*)\)/.exec(r),i=o?o[1].split(",").map((n)=>n.trim().split("=")[0].trim()).filter((n)=>n.length>0):[],a={};return i.forEach((n,h)=>{if(h<t.length)a[n]=t[h]}),a}catch{return{}}}}class M extends p{webTracerProvider=null;resourceAttributes;constructor(e,t,r,o,i){super(e,t,r,o);this.resourceAttributes=i}static async create(e,t){let r=new M(e.projectName,e.enableEvaluation,t,e.serializer,e.resourceAttributes);if(await r.resolveAndSetProjectId(),e.initialize)await r.initialize();return r}async initialize(){if(this.webTracerProvider!==null){s.warn("BrowserTracer already initialized");return}try{let e={"service.name":this.projectName,"telemetry.sdk.version":J,...this.resourceAttributes},t=this.getSpanExporter();this.webTracerProvider=new re({resource:ee(e),spanProcessors:[new te(t)]}),this.webTracerProvider.register(),s.info("BrowserTracer initialized successfully")}catch(e){throw Error(`Failed to initialize BrowserTracer: ${e instanceof Error?e.message:String(e)}`)}}async shutdown(){if(!this.webTracerProvider){s.warn("BrowserTracer not initialized, skipping shutdown");return}try{await this.webTracerProvider.shutdown(),this.webTracerProvider=null,s.info("BrowserTracer shut down successfully")}catch(e){s.error(`Failed to shutdown BrowserTracer: ${e}`)}}}class U{client;constructor(e){this.client=e}async create(e){if(!e.projectName)throw Error("Project name is required");return M.create({projectName:e.projectName,enableEvaluation:e.enableEvaluation??!0,enableMonitoring:e.enableMonitoring??!1,serializer:e.serializer??JSON.stringify,resourceAttributes:e.resourceAttributes??{},initialize:e.initialize??!0},this.client)}}import{resourceFromAttributes as se}from"@opentelemetry/resources";import{NodeSDK as oe}from"@opentelemetry/sdk-node";class A extends p{nodeSDK=null;resourceAttributes;instrumentations;constructor(e,t,r,o,i,a){super(e,t,r,o);this.resourceAttributes=i,this.instrumentations=a}static async create(e,t){let r=new A(e.projectName,e.enableEvaluation,t,e.serializer,e.resourceAttributes,e.instrumentations);if(await r.resolveAndSetProjectId(),e.initialize)await r.initialize();return r}async initialize(){if(this.nodeSDK!==null){s.warn("NodeTracer already initialized");return}try{let e={"service.name":this.projectName,"telemetry.sdk.version":J,...this.resourceAttributes},t=this.getSpanExporter();this.nodeSDK=new oe({resource:se(e),traceExporter:t,instrumentations:this.instrumentations}),this.nodeSDK.start(),s.info("NodeTracer initialized successfully")}catch(e){throw Error(`Failed to initialize NodeTracer: ${e instanceof Error?e.message:String(e)}`)}}async shutdown(){if(!this.nodeSDK){s.warn("NodeTracer not initialized, skipping shutdown");return}try{await this.nodeSDK.shutdown(),this.nodeSDK=null,s.info("NodeTracer shut down successfully")}catch(e){s.error(`Failed to shutdown NodeTracer: ${e}`)}}}class G{client;constructor(e){this.client=e}async create(e){if(!e.projectName)throw Error("Project name is required");return A.create({projectName:e.projectName,enableEvaluation:e.enableEvaluation??!0,enableMonitoring:e.enableMonitoring??!1,serializer:e.serializer??JSON.stringify,resourceAttributes:e.resourceAttributes??{},instrumentations:e.instrumentations??[],initialize:e.initialize??!0},this.client)}}class L{internalClient;constructor(e={}){let t=e.apiKey??H,r=e.organizationId??q,o=e.apiUrl??Y;if(!t)throw Error("API key is required");if(!r)throw Error("Organization ID is required");if(!o)throw Error("API URL is required");this.internalClient=new F(o,t,r)}static create(e={}){return new L(e)}get nodeTracer(){return new G(this.internalClient)}get browserTracer(){return new U(this.internalClient)}get scorers(){return new x(this.internalClient)}get evaluation(){return new y(this.internalClient)}}import{randomUUID as ie}from"crypto";class g{exampleId;createdAt;name;properties;constructor(e={}){this.exampleId=e.exampleId??ie(),this.createdAt=e.createdAt??new Date().toISOString(),this.name=e.name??null,this.properties=e.properties??{}}static create(e){return new g({properties:e})}setProperty(e,t){return this.properties[e]=t,this}getProperty(e){return this.properties[e]}getProperties(){return{...this.properties}}toModel(){return{example_id:this.exampleId,created_at:this.createdAt,name:this.name??void 0,...this.properties}}}class k{name;threshold;success;score;reason;strictMode;evaluationModel;error;additionalMetadata;id;constructor(e={}){this.name=e.name??null,this.threshold=e.threshold??null,this.success=e.success??null,this.score=e.score??null,this.reason=e.reason??null,this.strictMode=e.strictMode??null,this.evaluationModel=e.evaluationModel??null,this.error=e.error??null,this.additionalMetadata=e.additionalMetadata??{},this.id=e.id??null}toModel(){let e={name:this.name??"",threshold:this.threshold??0,success:this.success??!1};if(this.score!==void 0&&this.score!==null)e.score=this.score;if(this.reason!==void 0&&this.reason!==null)e.reason=this.reason;if(this.strictMode!==void 0&&this.strictMode!==null)e.strict_mode=this.strictMode;if(this.evaluationModel!==void 0&&this.evaluationModel!==null)e.evaluation_model=this.evaluationModel;if(this.error!==void 0&&this.error!==null)e.error=this.error;if(this.additionalMetadata&&Object.keys(this.additionalMetadata).length>0)e.additional_metadata=this.additionalMetadata;if(this.id!==void 0&&this.id!==null)e.id=this.id;return e}}class ${success;scorersData;name;dataObject;traceId;runDuration;evaluationCost;constructor(e={}){this.success=e.success??null,this.scorersData=e.scorersData??[],this.name=e.name??null,this.dataObject=e.dataObject??null,this.traceId=e.traceId??null,this.runDuration=e.runDuration??null,this.evaluationCost=e.evaluationCost??null}toModel(){let e={success:this.success??!1,scorers_data:(this.scorersData??[]).map((t)=>t.toModel())};if(this.name!==void 0&&this.name!==null)e.name=this.name;if(this.dataObject!==void 0&&this.dataObject!==null)if(this.dataObject instanceof g)e.data_object=this.dataObject.toModel();else e.data_object=this.dataObject;if(this.traceId!==void 0&&this.traceId!==null)e.trace_id=this.traceId;if(this.runDuration!==void 0&&this.runDuration!==null)e.run_duration=this.runDuration;if(this.evaluationCost!==void 0&&this.evaluationCost!==null)e.evaluation_cost=this.evaluationCost;return e}}export{$ as ScoringResult,x as ScorersFactory,k as ScorerData,m as PromptScorerFactory,P as PromptScorer,G as NodeTracerFactory,A as NodeTracer,R as NoOpSpanExporter,N as JudgmentSpanExporter,L as Judgeval,f as FaithfulnessScorer,g as Example,y as EvaluationFactory,C as Evaluation,I as CustomScorerFactory,O as CustomScorer,v as BuiltInScorersFactory,U as BrowserTracerFactory,M as BrowserTracer,p as BaseTracer,_ as BaseScorer,T as AnswerRelevancyScorer,S as AnswerCorrectnessScorer,u as APIScorer};
3
3
 
4
- //# debugId=A0A8CD0D5848CD4264756E2164756E21
4
+ //# debugId=6C5BED485B31A5A164756E2164756E21
5
5
  //# sourceMappingURL=index.mjs.map