judgeval 0.8.0 → 0.8.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/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
- var{defineProperty:H,getOwnPropertyNames:me,getOwnPropertyDescriptor:he}=Object,_e=Object.prototype.hasOwnProperty;var W=new WeakMap,Ee=(e)=>{var t=W.get(e),r;if(t)return t;if(t=H({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")me(e).map((i)=>!_e.call(t,i)&&H(t,i,{get:()=>e[i],enumerable:!(r=he(e,i))||r.enumerable}));return W.set(e,t),t};var Se=(e,t)=>{for(var r in t)H(e,r,{get:t[r],enumerable:!0,configurable:!0,set:(i)=>t[r]=()=>i})};var Re={};Se(Re,{ScoringResult:()=>q,ScorersFactory:()=>I,ScorerData:()=>$,PromptScorerFactory:()=>_,PromptScorer:()=>O,NodeTracerFactory:()=>D,NodeTracer:()=>P,NoOpSpanExporter:()=>E,JudgmentSpanExporter:()=>A,Judgeval:()=>k,FaithfulnessScorer:()=>v,Example:()=>y,EvaluationFactory:()=>M,Evaluation:()=>g,CustomScorerFactory:()=>C,CustomScorer:()=>x,BuiltInScorersFactory:()=>R,BrowserTracerFactory:()=>b,BrowserTracer:()=>N,BaseTracer:()=>m,BaseScorer:()=>S,AnswerRelevancyScorer:()=>f,AnswerCorrectnessScorer:()=>T,APIScorer:()=>p});module.exports=Ee(Re);function u(e,t){let r=process.env[e];if(!r)return t??null;return r}var Q=u("JUDGMENT_API_KEY"),X=u("JUDGMENT_ORG_ID"),Z=u("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),K=u("JUDGMENT_DEFAULT_GPT_MODEL","gpt-5-mini"),Ne=u("JUDGMENT_ENABLE_MONITORING","true"),Pe=u("JUDGMENT_ENABLE_EVALUATIONS","true"),ye=u("JUDGMENT_NO_COLOR"),ee=u("JUDGMENT_LOG_LEVEL","warn"),we=u("OPENAI_API_KEY"),ge=u("ANTHROPIC_API_KEY"),Me=u("GOOGLE_API_KEY"),xe=u("GEMINI_API_KEY");class L{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 g{client;constructor(e){this.client=e.client}}class M{client;constructor(e){this.client=e}create(e={}){return new g({...e,client:this.client})}}var h={PROMPT_SCORER:"Prompt Scorer",TRACE_PROMPT_SCORER:"Trace Prompt Scorer",FAITHFULNESS:"Faithfulness",ANSWER_RELEVANCY:"Answer Relevancy",ANSWER_CORRECTNESS:"Answer Correctness",CUSTOM:"Custom"};class S{}class p extends S{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 te(this,e)}}class te{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 T extends p{constructor(e={}){super(h.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 f extends p{constructor(e={}){super(h.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 v extends p{constructor(e={}){super(h.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 R{answerCorrectness(e={}){return new T(e)}answerRelevancy(e={}){return new f(e)}faithfulness(e={}){return new v(e)}}class x extends p{_className;_serverHosted;constructor(e){super(h.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 C{get(e,t){return new x({name:e,className:t??e,serverHosted:!0})}}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=ee.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),i=Object.keys(s.Level).find((n)=>s.Level[n]===e)??"UNKNOWN",o=`${r} - judgeval - ${i} - ${t}`;if(s.useColor)o=`${e===s.Level.DEBUG||e===s.Level.INFO?s.GRAY:e===s.Level.WARNING?s.YELLOW:s.RED}${o}${s.RESET}`;(e>=s.Level.ERROR?process.stderr:process.stdout).write(o+`
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)}}class O extends S{_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?h.TRACE_PROMPT_SCORER:h.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 _{client;isTrace;static cache=new Map;constructor(e,t){this.client=e,this.isTrace=t}async get(e){let t=this.getCacheKey(e),r=_.cache.get(t);if(r)return this._create(r,e);try{let i={names:[e]},o=await this.client.fetchScorers(i);if(o.scorers.length===0)throw Error(`Failed to fetch prompt scorer '${e}': not found`);let a=o.scorers[0],n=a.is_trace===!0;if(n!==this.isTrace){let d=this.isTrace?"TracePromptScorer":"PromptScorer";throw Error(`Scorer with name ${e} is a ${n?"TracePromptScorer":"PromptScorer"}, not a ${d}`)}return _.cache.set(t,a),this._create(a,e)}catch(i){return s.error(`Failed to fetch prompt scorer '${e}': ${i}`),null}}_create(e,t){let r;if(e.options&&typeof e.options==="object"){r={};for(let[i,o]of Object.entries(e.options))if(typeof o==="number")r[i]=o}return new O({name:t,prompt:e.prompt,threshold:e.threshold,options:r??{},model:e.model??K,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 _(this.client,!1)}get tracePromptScorer(){return new _(this.client,!0)}get customScorer(){return new C}get builtIn(){return new R}}var oe=require("@opentelemetry/resources"),ne=require("@opentelemetry/sdk-trace-web");var re="0.8.0";var F=re;var l=require("@opentelemetry/api");var se=require("@opentelemetry/exporter-trace-otlp-http");class A{delegate;constructor(e,t,r,i){this.delegate=new se.OTLPTraceExporter({url:e,headers:{Authorization:`Bearer ${t}`,"X-Organization-Id":r,"X-Project-Id":i}})}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 E{export(e,t){t({code:0})}shutdown(){return Promise.resolve()}}var ie=require("@opentelemetry/sdk-trace-base");class U extends ie.BatchSpanProcessor{tracer;constructor(e,t,r){let i={maxQueueSize:r?.maxQueueSize,scheduledDelayMillis:r?.scheduledDelayMillis,maxExportBatchSize:r?.maxExportBatchSize,exportTimeoutMillis:r?.exportTimeoutMillis};super(t,i);this.tracer=e}}class Y extends U{constructor(e){super(e,new E)}onStart(e,t){return}onEnd(e){return}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}onShutdown(){return}}class m{static TRACER_NAME="judgeval";projectName;enableEvaluation;apiClient;serializer;jsonEncoder;projectId;constructor(e,t,r,i,o=JSON.stringify){this.projectName=e,this.enableEvaluation=t,this.apiClient=r,this.serializer=i,this.jsonEncoder=o,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 new A(this.buildEndpoint(this.apiClient.getBaseUrl()),this.apiClient.getApiKey(),this.apiClient.getOrganizationId(),this.projectId);return s.error("Project not resolved; cannot create exporter, returning NoOpSpanExporter"),new E}getSpanProcessor(){if(this.projectId!==null)return new U(this,this.getSpanExporter());return s.error("Project not resolved; cannot create processor, returning NoOpSpanProcessor"),new Y(this)}getTracer(){return l.trace.getTracer(m.TRACER_NAME)}setSpanKind(e){if(!e)return;let t=l.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=l.trace.getActiveSpan();if(r){let i=typeof t==="string"||typeof t==="number"||typeof t==="boolean"?t:this.serializer(t);r.setAttribute(e,i)}}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:i,spanId:o}=r;this.logEvaluationInfo("asyncEvaluate",i,o,e.getName());let a=this.createEvaluationRun(e,t,i,o);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(),i=r.traceId,o=r.spanId;this.logEvaluationInfo("asyncTraceEvaluate",i,o,e.getName());let a=this.createTraceEvaluationRun(e,i,o);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){return this.getTracer().startSpan(e,t??{},r??l.context.active())}with(e,t,r,i){return this.getTracer().startActiveSpan(e,r??{},i??l.context.active(),(a)=>{try{let n=t(a);if(n instanceof Promise)return n.catch((d)=>{throw a.recordException(d),a.setStatus({code:l.SpanStatusCode.ERROR,message:String(d)}),d}).finally(()=>{a.end()});return a.end(),n}catch(n){throw a.setStatus({code:l.SpanStatusCode.ERROR}),a.recordException(n),a.end(),n}})}observe(e,t="span",r,i,o){let a=this.getTracer(),n=r??e.name;return(...d)=>{return a.startActiveSpan(n,i??{},o??l.context.active(),(c)=>{if(t)c.setAttribute("judgment.span_kind",t);try{let G=this.formatInputs(e,d);c.setAttribute("judgment.input",this.serializer(G));let J=e(...d);if(J instanceof Promise)return J.then((w)=>{return c.setAttribute("judgment.output",this.serializer(w)),w}).catch((w)=>{throw c.recordException(w),c.setStatus({code:l.SpanStatusCode.ERROR,message:String(w)}),w}).finally(()=>{c.end()});return c.setAttribute("judgment.output",this.serializer(J)),c.end(),J}catch(G){throw c.recordException(G),c.setStatus({code:l.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},i=(await this.apiClient.projectsResolve(t)).project_id;if(!i)throw Error(`Project ID not found for project: ${e}`);return s.info(`Resolved project ID: ${i}`),i}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"}generateRunId(e,t){return e+(t??Date.now().toString())}createEvaluationRun(e,t,r,i){let o=this.generateRunId("async_evaluate_",i);return{project_name:this.projectName,eval_name:o,trace_id:r,trace_span_id:i,examples:[t.toModel()],judgment_scorers:[e.getScorerConfig()],custom_scorers:[]}}createTraceEvaluationRun(e,t,r){let i=this.generateRunId("async_trace_evaluate_",r);return{project_name:this.projectName,eval_name:i,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=l.trace.getActiveSpan();if(!e)return null;let t=e.spanContext();if(!t.traceFlags||!(t.traceFlags&1))return null;return t}getSampledSpan(){let e=l.trace.getActiveSpan();if(!e)return null;let t=e.spanContext();if(!t.traceFlags||!(t.traceFlags&1))return null;return e}logEvaluationInfo(e,t,r,i){s.info(`${e}: project=${this.projectName}, traceId=${t}, spanId=${r}, scorer=${i}`)}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(),i=/\(([^)]*)\)/.exec(r),o=i?i[1].split(",").map((n)=>n.trim().split("=")[0].trim()).filter((n)=>n.length>0):[],a={};return o.forEach((n,d)=>{if(d<t.length)a[n]=t[d]}),a}catch{return{}}}}class N extends m{webTracerProvider=null;resourceAttributes;sampler;constructor(e,t,r,i,o,a){super(e,t,r,i);this.resourceAttributes=o,this.sampler=a}static async create(e,t){let r=new N(e.projectName,e.enableEvaluation,t,e.serializer,e.resourceAttributes,e.sampler);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":F,...this.resourceAttributes},t=this.getSpanProcessor();this.webTracerProvider=new ne.WebTracerProvider({resource:oe.resourceFromAttributes(e),spanProcessors:[t],sampler:this.sampler}),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 N.create({projectName:e.projectName,enableEvaluation:e.enableEvaluation??!0,enableMonitoring:e.enableMonitoring??!1,serializer:e.serializer??JSON.stringify,resourceAttributes:e.resourceAttributes??{},sampler:e.sampler,initialize:e.initialize??!0},this.client)}}var de=require("@opentelemetry/api"),ce=require("@opentelemetry/context-async-hooks"),ue=require("@opentelemetry/instrumentation"),j=require("@opentelemetry/resources");var le=require("@opentelemetry/sdk-trace-node");var ae=require("@opentelemetry/api");class B{setAttribute(e,t){return this}setAttributes(e){return this}addEvent(e,t,r){return this}addLink(e){return this}addLinks(e){return this}setStatus(e){return this}updateName(e){return this}end(e){return}isRecording(){return!1}recordException(e,t){return}spanContext(){return ae.INVALID_SPAN_CONTEXT}}class z{noopSpan=new B;startSpan(e,t,r){return this.noopSpan}startActiveSpan(e,...t){let r=t[t.length-1];return r(this.noopSpan)}}class V extends le.NodeTracerProvider{filterTracer;constructor(e){super(e);this.filterTracer=e.filterTracer??(()=>!0)}getTracer(e,t,r){if(e===m.TRACER_NAME)return super.getTracer(e,t,r);try{if(this.filterTracer({name:e,version:t,options:r}))return super.getTracer(e,t,r);else return s.debug(`[JudgmentNodeTracerProvider] Returning NoOpTracer for tracer ${e} as it is disallowed by the filterTracer callback.`),new z}catch(i){return s.error(`[JudgmentNodeTracerProvider] Failed to filter tracer ${e}: ${i}.`),super.getTracer(e,t,r)}}}class P extends m{tracerProvider=null;contextManager=null;resourceAttributes;instrumentations;sampler;filterTracer;constructor(e,t,r,i,o,a,n,d){super(e,t,r,i);this.resourceAttributes=o,this.instrumentations=a,this.sampler=n,this.filterTracer=d}static async create(e,t){let r=new P(e.projectName,e.enableEvaluation,t,e.serializer,e.resourceAttributes,e.instrumentations,e.sampler,e.filterTracer);if(await r.resolveAndSetProjectId(),e.initialize)await r.initialize();return r}async initialize(){if(this.tracerProvider!==null){s.warn("NodeTracer already initialized");return}try{this.contextManager=new ce.AsyncLocalStorageContextManager,this.contextManager.enable(),de.context.setGlobalContextManager(this.contextManager);let e=j.defaultResource().merge(j.resourceFromAttributes({"service.name":this.projectName,"telemetry.sdk.name":m.TRACER_NAME,"telemetry.sdk.version":F,...this.resourceAttributes}));if(this.tracerProvider=new V({resource:e,sampler:this.sampler,spanProcessors:[this.getSpanProcessor()],filterTracer:this.filterTracer}),this.tracerProvider.register(),this.instrumentations.length>0)ue.registerInstrumentations({instrumentations:this.instrumentations});s.info("NodeTracer initialized successfully")}catch(e){throw Error(`Failed to initialize NodeTracer: ${e instanceof Error?e.message:String(e)}`)}}async shutdown(){if(!this.tracerProvider){s.warn("NodeTracer not initialized, skipping shutdown");return}try{if(await this.tracerProvider.shutdown(),this.tracerProvider=null,this.contextManager)this.contextManager.disable(),this.contextManager=null;s.info("NodeTracer shut down successfully")}catch(e){s.error(`Failed to shutdown NodeTracer: ${e}`)}}async forceFlush(){if(!this.tracerProvider){s.warn("NodeTracer not initialized, skipping force flush");return}try{await this.tracerProvider.forceFlush()}catch(e){s.error(`Failed to force flush NodeTracer: ${e}`)}}}class D{client;constructor(e){this.client=e}async create(e){if(!e.projectName)throw Error("Project name is required");return P.create({projectName:e.projectName,enableEvaluation:e.enableEvaluation??!0,enableMonitoring:e.enableMonitoring??!1,serializer:e.serializer??JSON.stringify,resourceAttributes:e.resourceAttributes??{},instrumentations:e.instrumentations??[],sampler:e.sampler,filterTracer:e.filterTracer,initialize:e.initialize??!0},this.client)}}class k{internalClient;constructor(e={}){let t=e.apiKey??Q,r=e.organizationId??X,i=e.apiUrl??Z;if(!t)throw Error("API key is required");if(!r)throw Error("Organization ID is required");if(!i)throw Error("API URL is required");this.internalClient=new L(i,t,r)}static create(e={}){return new k(e)}get nodeTracer(){return new D(this.internalClient)}get browserTracer(){return new b(this.internalClient)}get scorers(){return new I(this.internalClient)}get evaluation(){return new M(this.internalClient)}}var pe=require("crypto");class y{exampleId;createdAt;name;properties;constructor(e={}){this.exampleId=e.exampleId??pe.randomUUID(),this.createdAt=e.createdAt??new Date().toISOString(),this.name=e.name??null,this.properties=e.properties??{}}static create(e){return new y({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 ${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 q{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 y)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:z,getOwnPropertyNames:Se,getOwnPropertyDescriptor:Te}=Object,fe=Object.prototype.hasOwnProperty;var K=new WeakMap,Re=(e)=>{var t=K.get(e),r;if(t)return t;if(t=z({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")Se(e).map((o)=>!fe.call(t,o)&&z(t,o,{get:()=>e[o],enumerable:!(r=Te(e,o))||r.enumerable}));return K.set(e,t),t};var ve=(e,t)=>{for(var r in t)z(e,r,{get:t[r],enumerable:!0,configurable:!0,set:(o)=>t[r]=()=>o})};var ye={};ve(ye,{ScoringResult:()=>q,ScorersFactory:()=>U,ScorerData:()=>H,PromptScorerFactory:()=>R,PromptScorer:()=>b,NodeTracerFactory:()=>J,NodeTracer:()=>C,NoOpSpanExporter:()=>v,JudgmentSpanExporter:()=>y,Judgeval:()=>L,FaithfulnessScorer:()=>M,Example:()=>O,EvaluationFactory:()=>x,Evaluation:()=>I,CustomScorerFactory:()=>D,CustomScorer:()=>G,BuiltInScorersFactory:()=>w,BrowserTracerFactory:()=>F,BrowserTracer:()=>g,BaseTracer:()=>_,BaseScorer:()=>N,AnswerRelevancyScorer:()=>P,AnswerCorrectnessScorer:()=>A,APIScorer:()=>p});module.exports=Re(ye);function h(e,t){let r=process.env[e];if(!r)return t??null;return r}var ee=h("JUDGMENT_API_KEY"),te=h("JUDGMENT_ORG_ID"),re=h("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),ie=h("JUDGMENT_DEFAULT_GPT_MODEL","gpt-5-mini"),Ce=h("JUDGMENT_ENABLE_MONITORING","true"),Oe=h("JUDGMENT_ENABLE_EVALUATIONS","true"),Ie=h("JUDGMENT_NO_COLOR"),oe=h("JUDGMENT_LOG_LEVEL","warn"),xe=h("OPENAI_API_KEY"),Ge=h("ANTHROPIC_API_KEY"),De=h("GOOGLE_API_KEY"),be=h("GEMINI_API_KEY");class V{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 I{client;constructor(e){this.client=e.client}}class x{client;constructor(e){this.client=e}create(e={}){return new I({...e,client:this.client})}}var S={PROMPT_SCORER:"Prompt Scorer",TRACE_PROMPT_SCORER:"Trace Prompt Scorer",FAITHFULNESS:"Faithfulness",ANSWER_RELEVANCY:"Answer Relevancy",ANSWER_CORRECTNESS:"Answer Correctness",CUSTOM:"Custom"};class N{}class p extends N{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 se(this,e)}}class se{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 A extends p{constructor(e={}){super(S.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 P extends p{constructor(e={}){super(S.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 M extends p{constructor(e={}){super(S.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 w{answerCorrectness(e={}){return new A(e)}answerRelevancy(e={}){return new P(e)}faithfulness(e={}){return new M(e)}}class G extends p{_className;_serverHosted;constructor(e){super(S.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 D{get(e,t){return new G({name:e,className:t??e,serverHosted:!0})}}var Ne=async function*(){}.constructor,Ae=function*(){}.constructor;function ne(e){return e instanceof Ne}function ae(e){return e instanceof Ae}class i{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=i.Level.WARNING;static useColor=!0;static initialize(){if(!i.initialized){let e=process.env.JUDGMENT_NO_COLOR;i.useColor=!e&&process.stdout.isTTY;let t=oe.toLowerCase();if(t){let r={debug:i.Level.DEBUG,info:i.Level.INFO,warning:i.Level.WARNING,warn:i.Level.WARNING,error:i.Level.ERROR,critical:i.Level.CRITICAL};i.currentLevel=r[t]??i.Level.WARNING}i.initialized=!0}}static setLevel(e){i.currentLevel=e}static setUseColor(e){i.useColor=e}static log(e,t){if(i.initialize(),e<i.currentLevel)return;let r=new Date().toISOString().replace("T"," ").substring(0,19),o=Object.keys(i.Level).find((d)=>i.Level[d]===e)??"UNKNOWN",a=`${r} - judgeval - ${o} - ${t}`;if(i.useColor)a=`${e===i.Level.DEBUG||e===i.Level.INFO?i.GRAY:e===i.Level.WARNING?i.YELLOW:i.RED}${a}${i.RESET}`;(e>=i.Level.ERROR?process.stderr:process.stdout).write(a+`
2
+ `)}static debug(e){i.log(i.Level.DEBUG,e)}static info(e){i.log(i.Level.INFO,e)}static warning(e){i.log(i.Level.WARNING,e)}static warn(e){i.log(i.Level.WARNING,e)}static error(e){i.log(i.Level.ERROR,e)}static critical(e){i.log(i.Level.CRITICAL,e)}}class b extends N{_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?S.TRACE_PROMPT_SCORER:S.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 R{client;isTrace;static cache=new Map;constructor(e,t){this.client=e,this.isTrace=t}async get(e){let t=this.getCacheKey(e),r=R.cache.get(t);if(r)return this._create(r,e);try{let o={names:[e]},a=await this.client.fetchScorers(o);if(a.scorers.length===0)throw Error(`Failed to fetch prompt scorer '${e}': not found`);let l=a.scorers[0],d=l.is_trace===!0;if(d!==this.isTrace){let s=this.isTrace?"TracePromptScorer":"PromptScorer";throw Error(`Scorer with name ${e} is a ${d?"TracePromptScorer":"PromptScorer"}, not a ${s}`)}return R.cache.set(t,l),this._create(l,e)}catch(o){return i.error(`Failed to fetch prompt scorer '${e}': ${o}`),null}}_create(e,t){let r;if(e.options&&typeof e.options==="object"){r={};for(let[o,a]of Object.entries(e.options))if(typeof a==="number")r[o]=a}return new b({name:t,prompt:e.prompt,threshold:e.threshold,options:r??{},model:e.model??ie,description:e.description??"",isTrace:this.isTrace})}getCacheKey(e){return`${e}:${this.client.getApiKey()}:${this.client.getOrganizationId()}`}}class U{client;constructor(e){this.client=e}get promptScorer(){return new R(this.client,!1)}get tracePromptScorer(){return new R(this.client,!0)}get customScorer(){return new D}get builtIn(){return new w}}var ue=require("@opentelemetry/resources"),me=require("@opentelemetry/sdk-trace-web");var le="0.8.2";var k=le;var c=require("@opentelemetry/api");var de=require("@opentelemetry/exporter-trace-otlp-http");class y{delegate;constructor(e,t,r,o){this.delegate=new de.OTLPTraceExporter({url:e,headers:{Authorization:`Bearer ${t}`,"X-Organization-Id":r,"X-Project-Id":o}})}export(e,t){i.info(`JudgmentSpanExporter: exporting ${e.length} spans`),this.delegate.export(e,t)}shutdown(){return this.delegate.shutdown()}forceFlush(){return this.delegate.forceFlush?.()??Promise.resolve()}}class v{export(e,t){t({code:0})}shutdown(){return Promise.resolve()}}var ce=require("@opentelemetry/sdk-trace-base");class j extends ce.BatchSpanProcessor{tracer;constructor(e,t,r){let o={maxQueueSize:r?.maxQueueSize,scheduledDelayMillis:r?.scheduledDelayMillis,maxExportBatchSize:r?.maxExportBatchSize,exportTimeoutMillis:r?.exportTimeoutMillis};super(t,o);this.tracer=e}}class W extends j{constructor(e){super(e,new v)}onStart(e,t){return}onEnd(e){return}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}onShutdown(){return}}class _{static TRACER_NAME="judgeval";projectName;enableEvaluation;apiClient;serializer;jsonEncoder;projectId;constructor(e,t,r,o,a=JSON.stringify){this.projectName=e,this.enableEvaluation=t,this.apiClient=r,this.serializer=o,this.jsonEncoder=a,this.projectId=null}async resolveAndSetProjectId(){try{this.projectId=await this.resolveProjectId(this.projectName),i.info(`Successfully resolved project ID: ${this.projectId}`)}catch{i.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 new y(this.buildEndpoint(this.apiClient.getBaseUrl()),this.apiClient.getApiKey(),this.apiClient.getOrganizationId(),this.projectId);return i.error("Project not resolved; cannot create exporter, returning NoOpSpanExporter"),new v}getSpanProcessor(){if(this.projectId!==null)return new j(this,this.getSpanExporter());return i.error("Project not resolved; cannot create processor, returning NoOpSpanProcessor"),new W(this)}getTracer(){return c.trace.getTracer(_.TRACER_NAME)}setSpanKind(e){if(!e)return;let t=c.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=c.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:a}=r;this.logEvaluationInfo("asyncEvaluate",o,a,e.getName());let l=this.createEvaluationRun(e,t,o,a);this.enqueueEvaluation(l).catch((d)=>{i.error(`Failed to enqueue evaluation run: ${d}`)})})}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,a=r.spanId;this.logEvaluationInfo("asyncTraceEvaluate",o,a,e.getName());let l=this.createTraceEvaluationRun(e,o,a);try{let d=JSON.stringify(l);t.setAttribute("judgment.pending_trace_eval",d)}catch(d){i.error(`Failed to serialize trace evaluation: ${d}`)}})}span(e,t,r){return this.getTracer().startSpan(e,t??{},r??c.context.active())}with(e,t,r,o){return this.getTracer().startActiveSpan(e,r??{},o??c.context.active(),(l)=>{try{let d=t(l);if(d instanceof Promise)return d.catch((s)=>{throw l.recordException(s),l.setStatus({code:c.SpanStatusCode.ERROR,message:String(s)}),s}).finally(()=>{l.end()});return l.end(),d}catch(d){throw l.setStatus({code:c.SpanStatusCode.ERROR}),l.recordException(d),l.end(),d}})}observe(e,t="span",r,o,a){let l=r??e.name;if(ne(e))return this.observeAsyncGenerator(e,t,l,o,a);if(ae(e))return this.observeGenerator(e,t,l,o,a);let d=this.getTracer();return(...s)=>{return d.startActiveSpan(l,o??{},a??c.context.active(),(u)=>{if(t)u.setAttribute("judgment.span_kind",t);try{let f=this.formatInputs(e,s);u.setAttribute("judgment.input",this.serializer(f));let m=e(...s);if(m instanceof Promise)return m.then((T)=>{return u.setAttribute("judgment.output",this.serializer(T)),T}).catch((T)=>{throw u.recordException(T),u.setStatus({code:c.SpanStatusCode.ERROR,message:String(T)}),T}).finally(()=>{u.end()});return u.setAttribute("judgment.output",this.serializer(m)),u.end(),m}catch(f){throw u.recordException(f),u.setStatus({code:c.SpanStatusCode.ERROR,message:String(f)}),u.end(),f}})}}observeAsyncGenerator(e,t,r,o,a){return(...l)=>{let d=a??c.context.active(),s=this.getTracer().startSpan(r,o??{},d),u=c.trace.setSpan(d,s);if(t)s.setAttribute("judgment.span_kind",t);let f=this.formatInputs(e,l);s.setAttribute("judgment.input",this.serializer(f));let m=c.context.with(u,()=>e(...l)),T=c.context.bind(u,async(...E)=>{try{let n=await m.next(...E);if(n.done)s.setAttribute("judgment.output",this.serializer(n.value)),s.end();return n}catch(n){throw s.recordException(n),s.setStatus({code:c.SpanStatusCode.ERROR,message:String(n)}),s.end(),n}}),Y=c.context.bind(u,async(E)=>{try{let n=await m.return(E);return s.setAttribute("judgment.output",this.serializer(n.value)),s.end(),n}catch(n){throw s.recordException(n),s.setStatus({code:c.SpanStatusCode.ERROR,message:String(n)}),s.end(),n}}),B=c.context.bind(u,async(E)=>{try{return await m.throw(E)}catch(n){throw s.recordException(n),s.setStatus({code:c.SpanStatusCode.ERROR,message:String(n)}),s.end(),n}});return{next:T,return:Y,throw:B,[Symbol.asyncIterator](){return this}}}}observeGenerator(e,t,r,o,a){return(...l)=>{let d=a??c.context.active(),s=this.getTracer().startSpan(r,o??{},d),u=c.trace.setSpan(d,s);if(t)s.setAttribute("judgment.span_kind",t);let f=this.formatInputs(e,l);s.setAttribute("judgment.input",this.serializer(f));let m=c.context.with(u,()=>e(...l)),T=c.context.bind(u,(...E)=>{try{let n=m.next(...E);if(n.done)s.setAttribute("judgment.output",this.serializer(n.value)),s.end();return n}catch(n){throw s.recordException(n),s.setStatus({code:c.SpanStatusCode.ERROR,message:String(n)}),s.end(),n}}),Y=c.context.bind(u,(E)=>{try{let n=m.return(E);return s.setAttribute("judgment.output",this.serializer(n.value)),s.end(),n}catch(n){throw s.recordException(n),s.setStatus({code:c.SpanStatusCode.ERROR,message:String(n)}),s.end(),n}}),B=c.context.bind(u,(E)=>{try{return m.throw(E)}catch(n){throw s.recordException(n),s.setStatus({code:c.SpanStatusCode.ERROR,message:String(n)}),s.end(),n}});return{next:T,return:Y,throw:B,[Symbol.iterator](){return this}}}}async resolveProjectId(e){try{i.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 i.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"}generateRunId(e,t){return e+(t??Date.now().toString())}createEvaluationRun(e,t,r,o){let a=this.generateRunId("async_evaluate_",o);return{project_name:this.projectName,eval_name:a,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){i.error(`Failed to enqueue evaluation run: ${t}`)}}getSampledSpanContext(){let e=c.trace.getActiveSpan();if(!e)return null;let t=e.spanContext();if(!t.traceFlags||!(t.traceFlags&1))return null;return t}getSampledSpan(){let e=c.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){i.info(`${e}: project=${this.projectName}, traceId=${t}, spanId=${r}, scorer=${o}`)}safeExecute(e,t){try{t()}catch(r){i.error(`Failed to ${e}: ${r}`)}}isValidKey(e){return e.length>0}formatInputs(e,t){try{let r=e.toString(),o=/\(([^)]*)\)/.exec(r),a=o?o[1].split(",").map((d)=>d.trim().split("=")[0].trim()).filter((d)=>d.length>0):[],l={};return a.forEach((d,s)=>{if(s<t.length)l[d]=t[s]}),l}catch{return{}}}}class g extends _{webTracerProvider=null;resourceAttributes;sampler;constructor(e,t,r,o,a,l){super(e,t,r,o);this.resourceAttributes=a,this.sampler=l}static async create(e,t){let r=new g(e.projectName,e.enableEvaluation,t,e.serializer,e.resourceAttributes,e.sampler);if(await r.resolveAndSetProjectId(),e.initialize)await r.initialize();return r}async initialize(){if(this.webTracerProvider!==null){i.warn("BrowserTracer already initialized");return}try{let e={"service.name":this.projectName,"telemetry.sdk.version":k,...this.resourceAttributes},t=this.getSpanProcessor();this.webTracerProvider=new me.WebTracerProvider({resource:ue.resourceFromAttributes(e),spanProcessors:[t],sampler:this.sampler}),this.webTracerProvider.register(),i.info("BrowserTracer initialized successfully")}catch(e){throw Error(`Failed to initialize BrowserTracer: ${e instanceof Error?e.message:String(e)}`)}}async shutdown(){if(!this.webTracerProvider){i.warn("BrowserTracer not initialized, skipping shutdown");return}try{await this.webTracerProvider.shutdown(),this.webTracerProvider=null,i.info("BrowserTracer shut down successfully")}catch(e){i.error(`Failed to shutdown BrowserTracer: ${e}`)}}}class F{client;constructor(e){this.client=e}async create(e){if(!e.projectName)throw Error("Project name is required");return g.create({projectName:e.projectName,enableEvaluation:e.enableEvaluation??!0,enableMonitoring:e.enableMonitoring??!1,serializer:e.serializer??JSON.stringify,resourceAttributes:e.resourceAttributes??{},sampler:e.sampler,initialize:e.initialize??!0},this.client)}}var _e=require("@opentelemetry/instrumentation"),$=require("@opentelemetry/resources");var pe=require("@opentelemetry/sdk-trace-node");var he=require("@opentelemetry/api");class Q{setAttribute(e,t){return this}setAttributes(e){return this}addEvent(e,t,r){return this}addLink(e){return this}addLinks(e){return this}setStatus(e){return this}updateName(e){return this}end(e){return}isRecording(){return!1}recordException(e,t){return}spanContext(){return he.INVALID_SPAN_CONTEXT}}class X{noopSpan=new Q;startSpan(e,t,r){return this.noopSpan}startActiveSpan(e,...t){let r=t[t.length-1];return r(this.noopSpan)}}class Z extends pe.NodeTracerProvider{filterTracer;constructor(e){super(e);this.filterTracer=e.filterTracer??(()=>!0)}getTracer(e,t,r){if(e===_.TRACER_NAME)return super.getTracer(e,t,r);try{if(this.filterTracer({name:e,version:t,options:r}))return super.getTracer(e,t,r);else return i.debug(`[JudgmentNodeTracerProvider] Returning NoOpTracer for tracer ${e} as it is disallowed by the filterTracer callback.`),new X}catch(o){return i.error(`[JudgmentNodeTracerProvider] Failed to filter tracer ${e}: ${o}.`),super.getTracer(e,t,r)}}}class C extends _{tracerProvider=null;resourceAttributes;instrumentations;filterTracer;constructor(e,t,r,o,a,l,d){super(e,t,r,o);this.resourceAttributes=a,this.instrumentations=l,this.filterTracer=d}static async create(e,t){let r=new C(e.projectName,e.enableEvaluation,t,e.serializer,e.resourceAttributes,e.instrumentations,e.filterTracer);if(await r.resolveAndSetProjectId(),e.initialize)await r.initialize({sampler:e.sampler});return r}async initialize(e){if(this.tracerProvider!==null){i.warn("NodeTracer already initialized");return}try{let t=$.defaultResource().merge($.resourceFromAttributes({"service.name":this.projectName,"telemetry.sdk.name":_.TRACER_NAME,"telemetry.sdk.version":k,...this.resourceAttributes,...e?.resourceAttributes})),r=[this.getSpanProcessor(),...e?.spanProcessors??[]];this.tracerProvider=new Z({resource:t,sampler:e?.sampler,spanProcessors:r,filterTracer:this.filterTracer}),this.tracerProvider.register();let o=[...this.instrumentations,...e?.instrumentations??[]];if(o.length>0)_e.registerInstrumentations({instrumentations:o});i.info("NodeTracer initialized successfully")}catch(t){throw Error(`Failed to initialize NodeTracer: ${t instanceof Error?t.message:String(t)}`)}}async shutdown(){if(!this.tracerProvider){i.warn("NodeTracer not initialized, skipping shutdown");return}try{await this.tracerProvider.shutdown(),this.tracerProvider=null,i.info("NodeTracer shut down successfully")}catch(e){i.error(`Failed to shutdown NodeTracer: ${e}`)}}async forceFlush(){if(!this.tracerProvider){i.warn("NodeTracer not initialized, skipping force flush");return}try{await this.tracerProvider.forceFlush()}catch(e){i.error(`Failed to force flush NodeTracer: ${e}`)}}}class J{client;constructor(e){this.client=e}async create(e){if(!e.projectName)throw Error("Project name is required");return C.create({projectName:e.projectName,enableEvaluation:e.enableEvaluation??!0,enableMonitoring:e.enableMonitoring??!1,serializer:e.serializer??JSON.stringify,resourceAttributes:e.resourceAttributes??{},instrumentations:e.instrumentations??[],filterTracer:e.filterTracer,initialize:e.initialize??!0},this.client)}}class L{internalClient;constructor(e={}){let t=e.apiKey??ee,r=e.organizationId??te,o=e.apiUrl??re;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 V(o,t,r)}static create(e={}){return new L(e)}get nodeTracer(){return new J(this.internalClient)}get browserTracer(){return new F(this.internalClient)}get scorers(){return new U(this.internalClient)}get evaluation(){return new x(this.internalClient)}}var Ee=require("crypto");class O{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 O({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 H{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 q{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 O)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=EBA29BADACED84EF64756E2164756E21
4
+ //# debugId=BD50C226D72B257E64756E2164756E21
5
5
  //# sourceMappingURL=index.cjs.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/env.ts", "../src/internal/api/index.ts", "../src/evaluation/Evaluation.ts", "../src/evaluation/EvaluationFactory.ts", "../src/data/APIScorerType.ts", "../src/scorers/BaseScorer.ts", "../src/scorers/APIScorer.ts", "../src/scorers/builtIn/AnswerCorrectnessScorer.ts", "../src/scorers/builtIn/AnswerRelevancyScorer.ts", "../src/scorers/builtIn/FaithfulnessScorer.ts", "../src/scorers/builtIn/BuiltInScorersFactory.ts", "../src/scorers/customScorer/CustomScorer.ts", "../src/scorers/customScorer/CustomScorerFactory.ts", "../src/utils/logger.ts", "../src/scorers/promptScorer/PromptScorer.ts", "../src/scorers/promptScorer/PromptScorerFactory.ts", "../src/scorers/ScorersFactory.ts", "../src/tracer/BrowserTracer.ts", "../src/version.ts", "../src/tracer/BaseTracer.ts", "../src/tracer/exporters/JudgmentSpanExporter.ts", "../src/tracer/exporters/NoOpSpanExporter.ts", "../src/tracer/processors/JudgmentSpanProcessor.ts", "../src/tracer/processors/NoOpJudgmentSpanProcessor.ts", "../src/tracer/BrowserTracerFactory.ts", "../src/tracer/NodeTracer.ts", "../src/tracer/JudgmentNodeTracerProvider.ts", "../src/tracer/NoOpSpan.ts", "../src/tracer/NoOpTracer.ts", "../src/tracer/NodeTracerFactory.ts", "../src/Judgeval.ts", "../src/data/Example.ts", "../src/data/ScorerData.ts", "../src/data/ScoringResult.ts"],
3
+ "sources": ["../src/env.ts", "../src/internal/api/index.ts", "../src/evaluation/Evaluation.ts", "../src/evaluation/EvaluationFactory.ts", "../src/data/APIScorerType.ts", "../src/scorers/BaseScorer.ts", "../src/scorers/APIScorer.ts", "../src/scorers/builtIn/AnswerCorrectnessScorer.ts", "../src/scorers/builtIn/AnswerRelevancyScorer.ts", "../src/scorers/builtIn/FaithfulnessScorer.ts", "../src/scorers/builtIn/BuiltInScorersFactory.ts", "../src/scorers/customScorer/CustomScorer.ts", "../src/scorers/customScorer/CustomScorerFactory.ts", "../src/utils/generators.ts", "../src/utils/logger.ts", "../src/scorers/promptScorer/PromptScorer.ts", "../src/scorers/promptScorer/PromptScorerFactory.ts", "../src/scorers/ScorersFactory.ts", "../src/tracer/BrowserTracer.ts", "../src/version.ts", "../src/tracer/BaseTracer.ts", "../src/tracer/exporters/JudgmentSpanExporter.ts", "../src/tracer/exporters/NoOpSpanExporter.ts", "../src/tracer/processors/JudgmentSpanProcessor.ts", "../src/tracer/processors/NoOpJudgmentSpanProcessor.ts", "../src/tracer/BrowserTracerFactory.ts", "../src/tracer/NodeTracer.ts", "../src/tracer/JudgmentNodeTracerProvider.ts", "../src/tracer/NoOpSpan.ts", "../src/tracer/NoOpTracer.ts", "../src/tracer/NodeTracerFactory.ts", "../src/Judgeval.ts", "../src/data/Example.ts", "../src/data/ScorerData.ts", "../src/data/ScoringResult.ts"],
4
4
  "sourcesContent": [
5
5
  "function getEnvVar(varName: string): string | null;\nfunction getEnvVar(varName: string, defaultValue: string): string;\nfunction getEnvVar(varName: string, defaultValue?: string): string | null {\n const value = process.env[varName];\n if (!value) {\n return defaultValue ?? null;\n }\n return value;\n}\n\nexport const JUDGMENT_API_KEY = getEnvVar(\"JUDGMENT_API_KEY\");\nexport const JUDGMENT_ORG_ID = getEnvVar(\"JUDGMENT_ORG_ID\");\nexport const JUDGMENT_API_URL = getEnvVar(\n \"JUDGMENT_API_URL\",\n \"https://api.judgmentlabs.ai\",\n);\nexport const JUDGMENT_DEFAULT_GPT_MODEL = getEnvVar(\n \"JUDGMENT_DEFAULT_GPT_MODEL\",\n \"gpt-5-mini\",\n);\nexport const JUDGMENT_ENABLE_MONITORING = getEnvVar(\n \"JUDGMENT_ENABLE_MONITORING\",\n \"true\",\n);\nexport const JUDGMENT_ENABLE_EVALUATIONS = getEnvVar(\n \"JUDGMENT_ENABLE_EVALUATIONS\",\n \"true\",\n);\nexport const JUDGMENT_NO_COLOR = getEnvVar(\"JUDGMENT_NO_COLOR\");\nexport const JUDGMENT_LOG_LEVEL = getEnvVar(\"JUDGMENT_LOG_LEVEL\", \"warn\");\n\nexport const OPENAI_API_KEY = getEnvVar(\"OPENAI_API_KEY\");\nexport const ANTHROPIC_API_KEY = getEnvVar(\"ANTHROPIC_API_KEY\");\nexport const GOOGLE_API_KEY = getEnvVar(\"GOOGLE_API_KEY\");\nexport const GEMINI_API_KEY = getEnvVar(\"GEMINI_API_KEY\");\n",
6
6
  "/**\n * Auto-generated by scripts/generate-client.ts\n * DO NOT EDIT MANUALLY - This file is generated automatically\n */\nimport * as Models from \"./models\";\n\nexport class JudgmentApiClient {\n private baseUrl: string;\n private apiKey: string;\n private organizationId: string;\n\n constructor(baseUrl: string, apiKey: string, organizationId: string) {\n this.baseUrl = baseUrl;\n this.apiKey = apiKey;\n this.organizationId = organizationId;\n }\n\n getBaseUrl(): string {\n return this.baseUrl;\n }\n\n getApiKey(): string {\n return this.apiKey;\n }\n\n getOrganizationId(): string {\n return this.organizationId;\n }\n\n private buildUrl(path: string): string {\n return this.baseUrl + path;\n }\n\n private buildHeaders(): Record<string, string> {\n if (!this.apiKey || !this.organizationId) {\n throw new Error(\"API key and organization ID cannot be null\");\n }\n return {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n \"X-Organization-Id\": this.organizationId,\n };\n }\n\n async addToRunEvalQueueExamples(\n payload: Models.ExampleEvaluationRun,\n ): Promise<void> {\n const url = this.buildUrl(\"/add_to_run_eval_queue/examples\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async addToRunEvalQueueTraces(\n payload: Models.TraceEvaluationRun,\n ): Promise<void> {\n const url = this.buildUrl(\"/add_to_run_eval_queue/traces\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async logEvalResults(\n payload: Models.EvalResults,\n ): Promise<Models.LogEvalResultsResponse> {\n const url = this.buildUrl(\"/log_eval_results/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.LogEvalResultsResponse;\n }\n\n async fetchExperimentRun(\n payload: Models.EvalResultsFetch,\n ): Promise<Models.FetchExperimentRunResponse> {\n const url = this.buildUrl(\"/fetch_experiment_run/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.FetchExperimentRunResponse;\n }\n\n async scorerExists(\n payload: Models.ScorerExistsRequest,\n ): Promise<Models.ScorerExistsResponse> {\n const url = this.buildUrl(\"/scorer_exists/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.ScorerExistsResponse;\n }\n\n async saveScorer(\n payload: Models.SavePromptScorerRequest,\n ): Promise<Models.SavePromptScorerResponse> {\n const url = this.buildUrl(\"/save_scorer/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.SavePromptScorerResponse;\n }\n\n async fetchScorers(\n payload: Models.FetchPromptScorersRequest,\n ): Promise<Models.FetchPromptScorersResponse> {\n const url = this.buildUrl(\"/fetch_scorers/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.FetchPromptScorersResponse;\n }\n\n async projectsResolve(\n payload: Models.ResolveProjectNameRequest,\n ): Promise<Models.ResolveProjectNameResponse> {\n const url = this.buildUrl(\"/projects/resolve/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.ResolveProjectNameResponse;\n }\n}\n",
@@ -15,29 +15,30 @@
15
15
  "import {\n AnswerCorrectnessScorer,\n AnswerCorrectnessScorerConfig,\n} from \"./AnswerCorrectnessScorer\";\nimport {\n AnswerRelevancyScorer,\n AnswerRelevancyScorerConfig,\n} from \"./AnswerRelevancyScorer\";\nimport {\n FaithfulnessScorer,\n FaithfulnessScorerConfig,\n} from \"./FaithfulnessScorer\";\nexport class BuiltInScorersFactory {\n answerCorrectness(\n config: AnswerCorrectnessScorerConfig = {},\n ): AnswerCorrectnessScorer {\n return new AnswerCorrectnessScorer(config);\n }\n\n answerRelevancy(\n config: AnswerRelevancyScorerConfig = {},\n ): AnswerRelevancyScorer {\n return new AnswerRelevancyScorer(config);\n }\n\n faithfulness(config: FaithfulnessScorerConfig = {}): FaithfulnessScorer {\n return new FaithfulnessScorer(config);\n }\n}\n",
16
16
  "import type { ScorerConfig } from \"../../internal/api/models\";\nimport { APIScorerType } from \"../../data/APIScorerType\";\nimport { APIScorer } from \"../APIScorer\";\n\nexport interface CustomScorerConfig {\n name: string;\n className?: string;\n serverHosted?: boolean;\n}\n\nexport class CustomScorer extends APIScorer {\n private _className?: string;\n private _serverHosted: boolean;\n\n constructor(config: CustomScorerConfig) {\n super(APIScorerType.CUSTOM);\n this.setName(config.name);\n if (config.className) {\n this._className = config.className;\n this.setAdditionalProperty(\"class_name\", config.className);\n }\n this._serverHosted = config.serverHosted ?? true;\n this.setAdditionalProperty(\"server_hosted\", this._serverHosted);\n }\n\n getClassName(): string | undefined {\n return this._className;\n }\n\n isServerHosted(): boolean {\n return this._serverHosted;\n }\n\n getScorerConfig(): ScorerConfig {\n throw new Error(\"CustomScorer does not use ScorerConfig\");\n }\n}\n",
17
17
  "import { CustomScorer } from \"./CustomScorer\";\n\nexport class CustomScorerFactory {\n get(name: string, className?: string): CustomScorer {\n return new CustomScorer({\n name,\n className: className ?? name,\n serverHosted: true,\n });\n }\n}\n",
18
+ "const AsyncGeneratorFunction = async function* () {\n /* empty */\n}.constructor;\nconst GeneratorFunction = function* () {\n /* empty */\n}.constructor;\n\nexport function isAsyncGeneratorFunction(\n fn: unknown,\n): fn is (...args: unknown[]) => AsyncGenerator {\n return fn instanceof AsyncGeneratorFunction;\n}\n\nexport function isGeneratorFunction(\n fn: unknown,\n): fn is (...args: unknown[]) => Generator {\n return fn instanceof GeneratorFunction;\n}\n",
18
19
  "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",
19
20
  "import { APIScorerType } from \"../../data/APIScorerType\";\nimport type { ScorerConfig } from \"../../internal/api/models\";\nimport { BaseScorer } from \"../BaseScorer\";\n\nexport interface PromptScorerConfig {\n name: string;\n prompt: string;\n threshold: number;\n options?: Record<string, number>;\n model?: string;\n description?: string;\n isTrace?: boolean;\n}\n\nexport class PromptScorer extends BaseScorer {\n private readonly _name: string;\n private _prompt: string;\n private _threshold: number;\n private _options?: Record<string, number>;\n private _model?: string;\n private _description?: string;\n private readonly isTrace: boolean;\n\n constructor(config: PromptScorerConfig) {\n super();\n this._name = config.name;\n this._prompt = config.prompt;\n this._threshold = config.threshold;\n this._options = { ...config.options };\n this._model = config.model;\n this._description = config.description;\n this.isTrace = config.isTrace ?? false;\n }\n\n getName(): string {\n return this._name;\n }\n\n getPrompt(): string {\n return this._prompt;\n }\n\n getThreshold(): number {\n return this._threshold;\n }\n\n getOptions(): Record<string, number> | undefined {\n return this._options ? { ...this._options } : undefined;\n }\n\n getModel(): string | undefined {\n return this._model;\n }\n\n getDescription(): string | undefined {\n return this._description;\n }\n\n setThreshold(threshold: number): void {\n this._threshold = threshold;\n }\n\n setPrompt(prompt: string): void {\n this._prompt = prompt;\n }\n\n setModel(model: string): void {\n this._model = model;\n }\n\n setOptions(options: Record<string, number>): void {\n this._options = { ...options };\n }\n\n setDescription(description: string): void {\n this._description = description;\n }\n\n appendToPrompt(addition: string): void {\n this._prompt = this._prompt + addition;\n }\n\n getScorerConfig(): ScorerConfig {\n const scoreType = this.isTrace\n ? APIScorerType.TRACE_PROMPT_SCORER\n : APIScorerType.PROMPT_SCORER;\n const kwargs: Record<string, unknown> = {\n prompt: this._prompt,\n };\n\n if (this._options) {\n kwargs.options = this._options;\n }\n\n if (this._model) {\n kwargs.model = this._model;\n }\n\n if (this._description) {\n kwargs.description = this._description;\n }\n\n return {\n score_type: scoreType,\n threshold: this._threshold,\n name: this._name,\n kwargs,\n };\n }\n}\n",
20
21
  "import { JUDGMENT_DEFAULT_GPT_MODEL } from \"../../env\";\nimport { JudgmentApiClient } from \"../../internal/api\";\nimport type {\n PromptScorer as APIPromptScorer,\n FetchPromptScorersRequest,\n FetchPromptScorersResponse,\n} from \"../../internal/api/models\";\nimport { Logger } from \"../../utils\";\nimport { PromptScorer } from \"./PromptScorer\";\n\nexport class PromptScorerFactory {\n private readonly client: JudgmentApiClient;\n private readonly isTrace: boolean;\n private static readonly cache = new Map<string, APIPromptScorer>();\n\n constructor(client: JudgmentApiClient, isTrace: boolean) {\n this.client = client;\n this.isTrace = isTrace;\n }\n\n async get(name: string): Promise<PromptScorer | null> {\n const cacheKey = this.getCacheKey(name);\n const cached = PromptScorerFactory.cache.get(cacheKey);\n\n if (cached) {\n return this._create(cached, name);\n }\n\n try {\n const request: FetchPromptScorersRequest = {\n names: [name],\n };\n\n const response: FetchPromptScorersResponse =\n await this.client.fetchScorers(request);\n\n if (response.scorers.length === 0) {\n throw new Error(`Failed to fetch prompt scorer '${name}': not found`);\n }\n\n const scorer = response.scorers[0];\n const scorerIsTrace = scorer.is_trace === true;\n\n if (scorerIsTrace !== this.isTrace) {\n const expectedType = this.isTrace\n ? \"TracePromptScorer\"\n : \"PromptScorer\";\n const actualType = scorerIsTrace ? \"TracePromptScorer\" : \"PromptScorer\";\n throw new Error(\n `Scorer with name ${name} is a ${actualType}, not a ${expectedType}`,\n );\n }\n\n PromptScorerFactory.cache.set(cacheKey, scorer);\n return this._create(scorer, name);\n } catch (error) {\n Logger.error(`Failed to fetch prompt scorer '${name}': ${error}`);\n return null;\n }\n }\n\n private _create(scorer: APIPromptScorer, name: string): PromptScorer {\n let options: Record<string, number> | undefined;\n if (scorer.options && typeof scorer.options === \"object\") {\n options = {};\n for (const [key, value] of Object.entries(scorer.options)) {\n if (typeof value === \"number\") {\n options[key] = value;\n }\n }\n }\n\n return new PromptScorer({\n name,\n prompt: scorer.prompt,\n threshold: scorer.threshold,\n options: options ?? {},\n model: scorer.model ?? JUDGMENT_DEFAULT_GPT_MODEL,\n description: scorer.description ?? \"\",\n isTrace: this.isTrace,\n });\n }\n\n private getCacheKey(name: string): string {\n return `${name}:${this.client.getApiKey()}:${this.client.getOrganizationId()}`;\n }\n}\n",
21
22
  "import { JudgmentApiClient } from \"../internal/api\";\nimport { BuiltInScorersFactory } from \"./builtIn/BuiltInScorersFactory\";\nimport { CustomScorerFactory } from \"./customScorer/CustomScorerFactory\";\nimport { PromptScorerFactory } from \"./promptScorer/PromptScorerFactory\";\n\nexport class ScorersFactory {\n private readonly client: JudgmentApiClient;\n\n constructor(client: JudgmentApiClient) {\n this.client = client;\n }\n\n get promptScorer(): PromptScorerFactory {\n return new PromptScorerFactory(this.client, false);\n }\n\n get tracePromptScorer(): PromptScorerFactory {\n return new PromptScorerFactory(this.client, true);\n }\n\n get customScorer(): CustomScorerFactory {\n return new CustomScorerFactory();\n }\n\n get builtIn(): BuiltInScorersFactory {\n return new BuiltInScorersFactory();\n }\n}\n",
22
- "import { resourceFromAttributes } from \"@opentelemetry/resources\";\nimport type { Sampler } from \"@opentelemetry/sdk-trace-base\";\nimport { WebTracerProvider } from \"@opentelemetry/sdk-trace-web\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport { Logger } from \"../utils/logger\";\nimport { VERSION } from \"../version\";\nimport { BaseTracer, type Serializer } from \"./BaseTracer\";\n\nexport interface BrowserTracerConfig {\n projectName: string;\n enableEvaluation?: boolean;\n enableMonitoring?: boolean;\n serializer?: Serializer;\n resourceAttributes?: Record<string, unknown>;\n sampler?: Sampler;\n initialize?: boolean;\n}\n\ninterface InternalBrowserTracerConfig\n extends Required<\n Omit<BrowserTracerConfig, \"resourceAttributes\" | \"sampler\">\n > {\n resourceAttributes: Record<string, unknown>;\n sampler?: Sampler;\n}\n\nexport class BrowserTracer extends BaseTracer {\n private webTracerProvider: WebTracerProvider | null = null;\n private resourceAttributes: Record<string, unknown>;\n private sampler?: Sampler;\n\n private constructor(\n projectName: string,\n enableEvaluation: boolean,\n apiClient: JudgmentApiClient,\n serializer: Serializer,\n resourceAttributes: Record<string, unknown>,\n sampler?: Sampler,\n ) {\n super(projectName, enableEvaluation, apiClient, serializer);\n this.resourceAttributes = resourceAttributes;\n this.sampler = sampler;\n }\n\n static async create(\n config: InternalBrowserTracerConfig,\n apiClient: JudgmentApiClient,\n ): Promise<BrowserTracer> {\n const tracer = new BrowserTracer(\n config.projectName,\n config.enableEvaluation,\n apiClient,\n config.serializer,\n config.resourceAttributes,\n config.sampler,\n );\n\n await tracer.resolveAndSetProjectId();\n\n if (config.initialize) {\n await tracer.initialize();\n }\n\n return tracer;\n }\n\n /* eslint-disable @typescript-eslint/require-await */\n async initialize(): Promise<void> {\n if (this.webTracerProvider !== null) {\n Logger.warn(\"BrowserTracer already initialized\");\n return;\n }\n\n try {\n const attributes = {\n \"service.name\": this.projectName,\n \"telemetry.sdk.version\": VERSION,\n ...this.resourceAttributes,\n };\n\n const spanProcessor = this.getSpanProcessor();\n\n this.webTracerProvider = new WebTracerProvider({\n resource: resourceFromAttributes(attributes),\n spanProcessors: [spanProcessor],\n sampler: this.sampler,\n });\n\n this.webTracerProvider.register();\n Logger.info(\"BrowserTracer initialized successfully\");\n } catch (error) {\n throw new Error(\n `Failed to initialize BrowserTracer: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n async shutdown(): Promise<void> {\n if (!this.webTracerProvider) {\n Logger.warn(\"BrowserTracer not initialized, skipping shutdown\");\n return;\n }\n try {\n await this.webTracerProvider.shutdown();\n this.webTracerProvider = null;\n Logger.info(\"BrowserTracer shut down successfully\");\n } catch (error) {\n Logger.error(`Failed to shutdown BrowserTracer: ${error}`);\n }\n }\n}\n",
23
+ "import { resourceFromAttributes } from \"@opentelemetry/resources\";\nimport type { Sampler } from \"@opentelemetry/sdk-trace-base\";\nimport { WebTracerProvider } from \"@opentelemetry/sdk-trace-web\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport { Logger } from \"../utils/logger\";\nimport { VERSION } from \"../version\";\nimport { BaseTracer, type Serializer } from \"./BaseTracer\";\n\nexport interface BrowserTracerConfig {\n projectName: string;\n enableEvaluation?: boolean;\n enableMonitoring?: boolean;\n serializer?: Serializer;\n resourceAttributes?: Record<string, unknown>;\n sampler?: Sampler;\n initialize?: boolean;\n}\n\ninterface InternalBrowserTracerConfig extends Required<\n Omit<BrowserTracerConfig, \"resourceAttributes\" | \"sampler\">\n> {\n resourceAttributes: Record<string, unknown>;\n sampler?: Sampler;\n}\n\nexport class BrowserTracer extends BaseTracer {\n private webTracerProvider: WebTracerProvider | null = null;\n private resourceAttributes: Record<string, unknown>;\n private sampler?: Sampler;\n\n private constructor(\n projectName: string,\n enableEvaluation: boolean,\n apiClient: JudgmentApiClient,\n serializer: Serializer,\n resourceAttributes: Record<string, unknown>,\n sampler?: Sampler,\n ) {\n super(projectName, enableEvaluation, apiClient, serializer);\n this.resourceAttributes = resourceAttributes;\n this.sampler = sampler;\n }\n\n static async create(\n config: InternalBrowserTracerConfig,\n apiClient: JudgmentApiClient,\n ): Promise<BrowserTracer> {\n const tracer = new BrowserTracer(\n config.projectName,\n config.enableEvaluation,\n apiClient,\n config.serializer,\n config.resourceAttributes,\n config.sampler,\n );\n\n await tracer.resolveAndSetProjectId();\n\n if (config.initialize) {\n await tracer.initialize();\n }\n\n return tracer;\n }\n\n /* eslint-disable @typescript-eslint/require-await */\n async initialize(): Promise<void> {\n if (this.webTracerProvider !== null) {\n Logger.warn(\"BrowserTracer already initialized\");\n return;\n }\n\n try {\n const attributes = {\n \"service.name\": this.projectName,\n \"telemetry.sdk.version\": VERSION,\n ...this.resourceAttributes,\n };\n\n const spanProcessor = this.getSpanProcessor();\n\n this.webTracerProvider = new WebTracerProvider({\n resource: resourceFromAttributes(attributes),\n spanProcessors: [spanProcessor],\n sampler: this.sampler,\n });\n\n this.webTracerProvider.register();\n Logger.info(\"BrowserTracer initialized successfully\");\n } catch (error) {\n throw new Error(\n `Failed to initialize BrowserTracer: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n async shutdown(): Promise<void> {\n if (!this.webTracerProvider) {\n Logger.warn(\"BrowserTracer not initialized, skipping shutdown\");\n return;\n }\n try {\n await this.webTracerProvider.shutdown();\n this.webTracerProvider = null;\n Logger.info(\"BrowserTracer shut down successfully\");\n } catch (error) {\n Logger.error(`Failed to shutdown BrowserTracer: ${error}`);\n }\n }\n}\n",
23
24
  "import { version } from \"../package.json\" with { type: \"json\" };\n\nexport const VERSION = version;\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\";\nimport { JudgmentSpanProcessor } from \"./processors/JudgmentSpanProcessor\";\nimport { NoOpSpanProcessor } from \"./processors/NoOpJudgmentSpanProcessor\";\n\nexport type Serializer = (obj: unknown) => string;\n\nexport abstract class BaseTracer {\n static readonly TRACER_NAME = \"judgeval\";\n\n protected projectName: string;\n protected enableEvaluation: boolean;\n protected apiClient: JudgmentApiClient;\n protected serializer: Serializer;\n protected jsonEncoder: (obj: unknown) => string;\n protected projectId: string | null;\n\n protected constructor(\n projectName: string,\n enableEvaluation: boolean,\n apiClient: JudgmentApiClient,\n serializer: Serializer,\n jsonEncoder: (obj: unknown) => string = JSON.stringify\n ) {\n this.projectName = projectName;\n this.enableEvaluation = enableEvaluation;\n this.apiClient = apiClient;\n this.serializer = serializer;\n this.jsonEncoder = jsonEncoder;\n this.projectId = null;\n }\n\n protected async resolveAndSetProjectId(): Promise<void> {\n try {\n this.projectId = await this.resolveProjectId(this.projectName);\n Logger.info(`Successfully resolved project ID: ${this.projectId}`);\n } catch {\n Logger.error(\n `Failed to resolve project ${this.projectName}, ` +\n `please create it first at https://app.judgmentlabs.ai/org/${this.apiClient.getOrganizationId()}/projects. ` +\n \"Skipping Judgment export.\"\n );\n this.projectId = null;\n }\n }\n\n abstract initialize(): Promise<void>;\n abstract shutdown(): Promise<void>;\n\n getSpanExporter(): SpanExporter {\n if (this.projectId !== null) {\n return new JudgmentSpanExporter(\n this.buildEndpoint(this.apiClient.getBaseUrl()),\n this.apiClient.getApiKey(),\n this.apiClient.getOrganizationId(),\n this.projectId\n );\n }\n Logger.error(\n \"Project not resolved; cannot create exporter, returning NoOpSpanExporter\"\n );\n return new NoOpSpanExporter();\n }\n\n getSpanProcessor(): JudgmentSpanProcessor {\n if (this.projectId !== null) {\n return new JudgmentSpanProcessor(this, this.getSpanExporter());\n }\n Logger.error(\n \"Project not resolved; cannot create processor, returning NoOpSpanProcessor\"\n );\n return new NoOpSpanProcessor(this);\n }\n\n getTracer(): Tracer {\n return trace.getTracer(BaseTracer.TRACER_NAME);\n }\n\n setSpanKind(kind: string): void {\n if (!kind) {\n return;\n }\n const currentSpan = trace.getActiveSpan();\n if (currentSpan) {\n currentSpan.setAttribute(AttributeKeys.JUDGMENT_SPAN_KIND, kind);\n }\n }\n\n setAttribute(key: string, value: unknown): void {\n if (!this.isValidKey(key)) {\n return;\n }\n if (value === null || value === undefined) {\n return;\n }\n const currentSpan = trace.getActiveSpan();\n if (currentSpan) {\n const serializedValue =\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ? value\n : this.serializer(value);\n currentSpan.setAttribute(key, serializedValue);\n }\n }\n\n setAttributes(attributes: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(attributes)) {\n this.setAttribute(key, value);\n }\n }\n\n setLLMSpan(): void {\n this.setSpanKind(\"llm\");\n }\n\n setToolSpan(): void {\n this.setSpanKind(\"tool\");\n }\n\n setGeneralSpan(): void {\n this.setSpanKind(\"span\");\n }\n\n setInput(inputData: unknown): void {\n this.setAttribute(AttributeKeys.JUDGMENT_INPUT, inputData);\n }\n\n setOutput(outputData: unknown): void {\n this.setAttribute(AttributeKeys.JUDGMENT_OUTPUT, outputData);\n }\n\n asyncEvaluate(scorer: BaseScorer, example: Example): void {\n this.safeExecute(\"evaluate scorer\", () => {\n if (!this.enableEvaluation) {\n return;\n }\n\n const spanContext = this.getSampledSpanContext();\n if (!spanContext) {\n return;\n }\n\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n this.logEvaluationInfo(\n \"asyncEvaluate\",\n traceId,\n spanId,\n scorer.getName()\n );\n\n const evaluationRun = this.createEvaluationRun(\n scorer,\n example,\n traceId,\n spanId\n );\n\n this.enqueueEvaluation(evaluationRun).catch((e: unknown) => {\n Logger.error(`Failed to enqueue evaluation run: ${e}`);\n });\n });\n }\n\n asyncTraceEvaluate(scorer: BaseScorer): void {\n this.safeExecute(\"evaluate trace scorer\", () => {\n if (!this.enableEvaluation) {\n return;\n }\n\n const currentSpan = this.getSampledSpan();\n if (!currentSpan) {\n return;\n }\n\n const spanContext = currentSpan.spanContext();\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n this.logEvaluationInfo(\n \"asyncTraceEvaluate\",\n traceId,\n spanId,\n scorer.getName()\n );\n\n const evaluationRun = this.createTraceEvaluationRun(\n scorer,\n traceId,\n spanId\n );\n try {\n const traceEvalJson = JSON.stringify(evaluationRun);\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_PENDING_TRACE_EVAL,\n traceEvalJson\n );\n } catch (e) {\n Logger.error(`Failed to serialize trace evaluation: ${e}`);\n }\n });\n }\n\n /**\n * Creates a new span for manual instrumentation.\n *\n * WARNING: You probably don't want this method. Use with() instead for most cases.\n *\n * This returns a span that is NOT active in the context, meaning child operations\n * will NOT automatically link to it as a parent. You must manually manage the span\n * lifecycle including calling span.end() and handling errors.\n *\n * To make the span active so child operations auto-link to it:\n * ```\n * import { context, trace } from \"@opentelemetry/api\";\n * const span = tracer.span(\"my-span\");\n * context.with(trace.setSpan(context.active(), span), () => {\n * // span is active here, child ops auto-link\n * });\n * span.end();\n * ```\n *\n * Consider using with() instead, which handles context and lifecycle automatically.\n *\n * @param spanName - The name of the span\n * @param options - Optional span configuration (attributes, links, etc)\n * @param ctx - Optional context to use as parent. Defaults to the active context\n * @returns A Span object that must be manually ended\n */\n span(spanName: string, options?: SpanOptions, ctx?: Context): Span {\n const tracer = this.getTracer();\n return tracer.startSpan(spanName, options ?? {}, ctx ?? context.active());\n }\n\n /**\n * Wraps a function execution in a span with automatic lifecycle management.\n *\n * Automatically handles span creation, ending, and error recording. The span is passed to\n * your callback function, allowing you to add custom attributes or access span properties.\n * The span will be ended automatically when the function completes or throws an error.\n *\n * Supports both synchronous and asynchronous functions. For async functions, the span\n * remains active until the Promise resolves or rejects.\n *\n * @param spanName - The name of the span\n * @param callableFunc - The function to execute within the span. Receives the span as a parameter\n * @param options - Optional span configuration\n * @param ctx - Optional context to use as parent. Defaults to the active context\n * @returns The return value of callableFunc (Promise if async, direct value if sync)\n */\n with<T>(\n spanName: string,\n callableFunc: (span: Span) => Promise<T>,\n options?: SpanOptions,\n ctx?: Context\n ): Promise<T>;\n with<T>(\n spanName: string,\n callableFunc: (span: Span) => T,\n options?: SpanOptions,\n ctx?: Context\n ): T;\n with<T>(\n spanName: string,\n callableFunc: (span: Span) => T | Promise<T>,\n options?: SpanOptions,\n ctx?: Context\n ): T | Promise<T> {\n const tracer = this.getTracer();\n return tracer.startActiveSpan(\n spanName,\n options ?? {},\n ctx ?? context.active(),\n (span) => {\n try {\n const result = callableFunc(span);\n\n if (result instanceof Promise) {\n return result\n .catch((err: unknown) => {\n span.recordException(err as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: String(err),\n });\n throw err;\n })\n .finally(() => {\n span.end();\n });\n }\n\n span.end();\n return result;\n } catch (e) {\n span.setStatus({ code: SpanStatusCode.ERROR });\n span.recordException(e as Error);\n span.end();\n throw e;\n }\n }\n );\n }\n\n /**\n * Wraps a function to automatically trace all its invocations.\n *\n * Returns a new function that, when called, will automatically create a span, capture input\n * arguments, execute the original function, capture the output, and handle errors. The span\n * is automatically ended after the function completes.\n *\n * Supports both synchronous and asynchronous functions. Input arguments are serialized and\n * stored as span attributes, and the return value is captured as output.\n *\n * @param func - The function to wrap with automatic tracing\n * @param spanType - The type of span to create (default: \"span\"). Common values: \"span\", \"llm\", \"tool\"\n * @param spanName - Optional custom name for the span. Defaults to the function name\n * @param options - Optional span configuration\n * @param ctx - Optional context to use as parent. Defaults to the active context\n * @returns A wrapped version of the function that creates spans on each invocation\n */\n observe<TArgs extends unknown[], TResult>(\n func: (...args: TArgs) => TResult,\n spanType = \"span\",\n spanName?: string | null,\n options?: SpanOptions,\n ctx?: Context\n ): (...args: TArgs) => TResult {\n const tracer = this.getTracer();\n const name = spanName ?? func.name;\n\n return (...args: TArgs): TResult => {\n return tracer.startActiveSpan(\n name,\n options ?? {},\n ctx ?? context.active(),\n (span) => {\n if (spanType) {\n span.setAttribute(AttributeKeys.JUDGMENT_SPAN_KIND, spanType);\n }\n\n try {\n const inputData = this.formatInputs(\n func as (...args: unknown[]) => unknown,\n args as unknown[]\n );\n span.setAttribute(\n AttributeKeys.JUDGMENT_INPUT,\n this.serializer(inputData)\n );\n\n const result = func(...args);\n\n if (result instanceof Promise) {\n return result\n .then((res: TResult) => {\n span.setAttribute(\n AttributeKeys.JUDGMENT_OUTPUT,\n this.serializer(res)\n );\n return res;\n })\n .catch((err: unknown) => {\n span.recordException(err as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: String(err),\n });\n throw err;\n })\n .finally(() => {\n span.end();\n }) as TResult;\n }\n\n span.setAttribute(\n AttributeKeys.JUDGMENT_OUTPUT,\n this.serializer(result)\n );\n span.end();\n return result;\n } catch (e) {\n span.recordException(e as Error);\n span.setStatus({ code: SpanStatusCode.ERROR, message: String(e) });\n span.end();\n throw e;\n }\n }\n );\n };\n }\n\n private async resolveProjectId(name: string): Promise<string> {\n try {\n Logger.info(`Resolving project ID for project: ${name}`);\n const request: ResolveProjectNameRequest = { project_name: name };\n const response: ResolveProjectNameResponse =\n await this.apiClient.projectsResolve(request);\n const projectId = response.project_id;\n if (!projectId) {\n throw new Error(`Project ID not found for project: ${name}`);\n }\n Logger.info(`Resolved project ID: ${projectId}`);\n return projectId;\n } catch (error) {\n throw new Error(\n `Failed to resolve project ID: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n private buildEndpoint(baseUrl: string): string {\n return baseUrl.endsWith(\"/\")\n ? baseUrl + \"otel/v1/traces\"\n : baseUrl + \"/otel/v1/traces\";\n }\n\n private generateRunId(prefix: string, spanId?: string | null): string {\n return prefix + (spanId ?? Date.now().toString());\n }\n\n private createEvaluationRun(\n scorer: BaseScorer,\n example: Example,\n traceId: string,\n spanId: string\n ): ExampleEvaluationRun {\n const runId = this.generateRunId(\"async_evaluate_\", spanId);\n\n return {\n project_name: this.projectName,\n eval_name: runId,\n trace_id: traceId,\n trace_span_id: spanId,\n examples: [example.toModel()],\n judgment_scorers: [scorer.getScorerConfig()],\n custom_scorers: [],\n };\n }\n\n private createTraceEvaluationRun(\n scorer: BaseScorer,\n traceId: string,\n spanId: string\n ): TraceEvaluationRun {\n const evalName = this.generateRunId(\"async_trace_evaluate_\", spanId);\n\n return {\n project_name: this.projectName,\n eval_name: evalName,\n trace_and_span_ids: [[traceId, spanId]],\n judgment_scorers: [scorer.getScorerConfig()],\n custom_scorers: [],\n is_offline: false,\n };\n }\n\n private async enqueueEvaluation(\n evaluationRun: ExampleEvaluationRun\n ): Promise<void> {\n try {\n await this.apiClient.addToRunEvalQueueExamples(evaluationRun);\n } catch (e) {\n Logger.error(`Failed to enqueue evaluation run: ${e}`);\n }\n }\n\n private getSampledSpanContext(): SpanContext | null {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n return null;\n }\n const spanContext = currentSpan.spanContext();\n if (!spanContext.traceFlags || !(spanContext.traceFlags & 0x01)) {\n return null;\n }\n return spanContext;\n }\n\n private getSampledSpan(): Span | null {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n return null;\n }\n const spanContext = currentSpan.spanContext();\n if (!spanContext.traceFlags || !(spanContext.traceFlags & 0x01)) {\n return null;\n }\n return currentSpan;\n }\n\n private logEvaluationInfo(\n method: string,\n traceId: string,\n spanId: string,\n scorerName: string\n ): void {\n Logger.info(\n `${method}: project=${this.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorerName}`\n );\n }\n\n private safeExecute(operation: string, action: () => void): void {\n try {\n action();\n } catch (e) {\n Logger.error(`Failed to ${operation}: ${e}`);\n }\n }\n\n private isValidKey(key: string): boolean {\n return key.length > 0;\n }\n\n private formatInputs(\n f: (...args: unknown[]) => unknown,\n args: unknown[]\n ): Record<string, unknown> {\n try {\n const funcStr = f.toString();\n const match = /\\(([^)]*)\\)/.exec(funcStr);\n const paramNames = match\n ? match[1]\n .split(\",\")\n .map((param) => param.trim().split(\"=\")[0].trim())\n .filter((param) => param.length > 0)\n : [];\n\n const inputs: Record<string, unknown> = {};\n paramNames.forEach((name, index) => {\n if (index < args.length) {\n inputs[name] = args[index];\n }\n });\n return inputs;\n } catch {\n return {};\n }\n }\n}\n",
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\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",
25
+ "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 {\n isAsyncGeneratorFunction,\n isGeneratorFunction,\n} from \"../utils/generators\";\nimport { Logger } from \"../utils/logger\";\nimport { JudgmentSpanExporter, NoOpSpanExporter } from \"./exporters\";\nimport { JudgmentSpanProcessor } from \"./processors/JudgmentSpanProcessor\";\nimport { NoOpSpanProcessor } from \"./processors/NoOpJudgmentSpanProcessor\";\n\nexport type Serializer = (obj: unknown) => string;\n\nexport abstract class BaseTracer {\n static readonly TRACER_NAME = \"judgeval\";\n\n protected projectName: string;\n protected enableEvaluation: boolean;\n protected apiClient: JudgmentApiClient;\n protected serializer: Serializer;\n protected jsonEncoder: (obj: unknown) => string;\n protected projectId: string | null;\n\n protected constructor(\n projectName: string,\n enableEvaluation: boolean,\n apiClient: JudgmentApiClient,\n serializer: Serializer,\n jsonEncoder: (obj: unknown) => string = JSON.stringify,\n ) {\n this.projectName = projectName;\n this.enableEvaluation = enableEvaluation;\n this.apiClient = apiClient;\n this.serializer = serializer;\n this.jsonEncoder = jsonEncoder;\n this.projectId = null;\n }\n\n protected async resolveAndSetProjectId(): Promise<void> {\n try {\n this.projectId = await this.resolveProjectId(this.projectName);\n Logger.info(`Successfully resolved project ID: ${this.projectId}`);\n } catch {\n Logger.error(\n `Failed to resolve project ${this.projectName}, ` +\n `please create it first at https://app.judgmentlabs.ai/org/${this.apiClient.getOrganizationId()}/projects. ` +\n \"Skipping Judgment export.\",\n );\n this.projectId = null;\n }\n }\n\n abstract initialize(): Promise<void>;\n abstract shutdown(): Promise<void>;\n\n getSpanExporter(): SpanExporter {\n if (this.projectId !== null) {\n return new JudgmentSpanExporter(\n this.buildEndpoint(this.apiClient.getBaseUrl()),\n this.apiClient.getApiKey(),\n this.apiClient.getOrganizationId(),\n this.projectId,\n );\n }\n Logger.error(\n \"Project not resolved; cannot create exporter, returning NoOpSpanExporter\",\n );\n return new NoOpSpanExporter();\n }\n\n getSpanProcessor(): JudgmentSpanProcessor {\n if (this.projectId !== null) {\n return new JudgmentSpanProcessor(this, this.getSpanExporter());\n }\n Logger.error(\n \"Project not resolved; cannot create processor, returning NoOpSpanProcessor\",\n );\n return new NoOpSpanProcessor(this);\n }\n\n getTracer(): Tracer {\n return trace.getTracer(BaseTracer.TRACER_NAME);\n }\n\n setSpanKind(kind: string): void {\n if (!kind) {\n return;\n }\n const currentSpan = trace.getActiveSpan();\n if (currentSpan) {\n currentSpan.setAttribute(AttributeKeys.JUDGMENT_SPAN_KIND, kind);\n }\n }\n\n setAttribute(key: string, value: unknown): void {\n if (!this.isValidKey(key)) {\n return;\n }\n if (value === null || value === undefined) {\n return;\n }\n const currentSpan = trace.getActiveSpan();\n if (currentSpan) {\n const serializedValue =\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ? value\n : this.serializer(value);\n currentSpan.setAttribute(key, serializedValue);\n }\n }\n\n setAttributes(attributes: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(attributes)) {\n this.setAttribute(key, value);\n }\n }\n\n setLLMSpan(): void {\n this.setSpanKind(\"llm\");\n }\n\n setToolSpan(): void {\n this.setSpanKind(\"tool\");\n }\n\n setGeneralSpan(): void {\n this.setSpanKind(\"span\");\n }\n\n setInput(inputData: unknown): void {\n this.setAttribute(AttributeKeys.JUDGMENT_INPUT, inputData);\n }\n\n setOutput(outputData: unknown): void {\n this.setAttribute(AttributeKeys.JUDGMENT_OUTPUT, outputData);\n }\n\n asyncEvaluate(scorer: BaseScorer, example: Example): void {\n this.safeExecute(\"evaluate scorer\", () => {\n if (!this.enableEvaluation) {\n return;\n }\n\n const spanContext = this.getSampledSpanContext();\n if (!spanContext) {\n return;\n }\n\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n this.logEvaluationInfo(\n \"asyncEvaluate\",\n traceId,\n spanId,\n scorer.getName(),\n );\n\n const evaluationRun = this.createEvaluationRun(\n scorer,\n example,\n traceId,\n spanId,\n );\n\n this.enqueueEvaluation(evaluationRun).catch((e: unknown) => {\n Logger.error(`Failed to enqueue evaluation run: ${e}`);\n });\n });\n }\n\n asyncTraceEvaluate(scorer: BaseScorer): void {\n this.safeExecute(\"evaluate trace scorer\", () => {\n if (!this.enableEvaluation) {\n return;\n }\n\n const currentSpan = this.getSampledSpan();\n if (!currentSpan) {\n return;\n }\n\n const spanContext = currentSpan.spanContext();\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n this.logEvaluationInfo(\n \"asyncTraceEvaluate\",\n traceId,\n spanId,\n scorer.getName(),\n );\n\n const evaluationRun = this.createTraceEvaluationRun(\n scorer,\n traceId,\n spanId,\n );\n try {\n const traceEvalJson = JSON.stringify(evaluationRun);\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_PENDING_TRACE_EVAL,\n traceEvalJson,\n );\n } catch (e) {\n Logger.error(`Failed to serialize trace evaluation: ${e}`);\n }\n });\n }\n\n /**\n * Creates a new span for manual instrumentation.\n *\n * WARNING: You probably don't want this method. Use with() instead for most cases.\n *\n * This returns a span that is NOT active in the context, meaning child operations\n * will NOT automatically link to it as a parent. You must manually manage the span\n * lifecycle including calling span.end() and handling errors.\n *\n * To make the span active so child operations auto-link to it:\n * ```\n * import { context, trace } from \"@opentelemetry/api\";\n * const span = tracer.span(\"my-span\");\n * context.with(trace.setSpan(context.active(), span), () => {\n * // span is active here, child ops auto-link\n * });\n * span.end();\n * ```\n *\n * Consider using with() instead, which handles context and lifecycle automatically.\n *\n * @param spanName - The name of the span\n * @param options - Optional span configuration (attributes, links, etc)\n * @param ctx - Optional context to use as parent. Defaults to the active context\n * @returns A Span object that must be manually ended\n */\n span(spanName: string, options?: SpanOptions, ctx?: Context): Span {\n const tracer = this.getTracer();\n return tracer.startSpan(spanName, options ?? {}, ctx ?? context.active());\n }\n\n /**\n * Wraps a function execution in a span with automatic lifecycle management.\n *\n * Automatically handles span creation, ending, and error recording. The span is passed to\n * your callback function, allowing you to add custom attributes or access span properties.\n * The span will be ended automatically when the function completes or throws an error.\n *\n * Supports both synchronous and asynchronous functions. For async functions, the span\n * remains active until the Promise resolves or rejects.\n *\n * @param spanName - The name of the span\n * @param callableFunc - The function to execute within the span. Receives the span as a parameter\n * @param options - Optional span configuration\n * @param ctx - Optional context to use as parent. Defaults to the active context\n * @returns The return value of callableFunc (Promise if async, direct value if sync)\n */\n with<T>(\n spanName: string,\n callableFunc: (span: Span) => Promise<T>,\n options?: SpanOptions,\n ctx?: Context,\n ): Promise<T>;\n with<T>(\n spanName: string,\n callableFunc: (span: Span) => T,\n options?: SpanOptions,\n ctx?: Context,\n ): T;\n with<T>(\n spanName: string,\n callableFunc: (span: Span) => T | Promise<T>,\n options?: SpanOptions,\n ctx?: Context,\n ): T | Promise<T> {\n const tracer = this.getTracer();\n return tracer.startActiveSpan(\n spanName,\n options ?? {},\n ctx ?? context.active(),\n (span) => {\n try {\n const result = callableFunc(span);\n\n if (result instanceof Promise) {\n return result\n .catch((err: unknown) => {\n span.recordException(err as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: String(err),\n });\n throw err;\n })\n .finally(() => {\n span.end();\n });\n }\n\n span.end();\n return result;\n } catch (e) {\n span.setStatus({ code: SpanStatusCode.ERROR });\n span.recordException(e as Error);\n span.end();\n throw e;\n }\n },\n );\n }\n\n /**\n * Wraps a function to automatically trace all its invocations.\n *\n * Returns a new function that, when called, will automatically create a span, capture input\n * arguments, execute the original function, capture the output, and handle errors. The span\n * is automatically ended after the function completes.\n *\n * Supports both synchronous and asynchronous functions. Input arguments are serialized and\n * stored as span attributes, and the return value is captured as output.\n *\n * @param func - The function to wrap with automatic tracing\n * @param spanType - The type of span to create (default: \"span\"). Common values: \"span\", \"llm\", \"tool\"\n * @param spanName - Optional custom name for the span. Defaults to the function name\n * @param options - Optional span configuration\n * @param ctx - Optional context to use as parent. Defaults to the active context\n * @returns A wrapped version of the function that creates spans on each invocation\n */\n observe<TArgs extends unknown[], TResult>(\n func: (...args: TArgs) => TResult,\n spanType?: string,\n spanName?: string | null,\n options?: SpanOptions,\n ctx?: Context,\n ): (...args: TArgs) => TResult;\n observe<TArgs extends unknown[], T, TReturn, TNext>(\n func: (...args: TArgs) => AsyncGenerator<T, TReturn, TNext>,\n spanType?: string,\n spanName?: string | null,\n options?: SpanOptions,\n ctx?: Context,\n ): (...args: TArgs) => AsyncGenerator<T, TReturn, TNext>;\n observe<TArgs extends unknown[], T, TReturn, TNext>(\n func: (...args: TArgs) => Generator<T, TReturn, TNext>,\n spanType?: string,\n spanName?: string | null,\n options?: SpanOptions,\n ctx?: Context,\n ): (...args: TArgs) => Generator<T, TReturn, TNext>;\n observe<TArgs extends unknown[], TResult>(\n func: (...args: TArgs) => TResult,\n spanType = \"span\",\n spanName?: string | null,\n options?: SpanOptions,\n ctx?: Context,\n ): (...args: TArgs) => TResult {\n const name = spanName ?? func.name;\n\n if (isAsyncGeneratorFunction(func)) {\n return this.observeAsyncGenerator(\n func,\n spanType,\n name,\n options,\n ctx,\n ) as unknown as (...args: TArgs) => TResult;\n }\n\n if (isGeneratorFunction(func)) {\n return this.observeGenerator(\n func,\n spanType,\n name,\n options,\n ctx,\n ) as unknown as (...args: TArgs) => TResult;\n }\n\n const tracer = this.getTracer();\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 observeAsyncGenerator<TArgs extends unknown[], T, TReturn, TNext>(\n func: (...args: TArgs) => AsyncGenerator<T, TReturn, TNext>,\n spanType: string,\n name: string,\n options?: SpanOptions,\n ctx?: Context,\n ): (...args: TArgs) => AsyncGenerator<T, TReturn, TNext> {\n return (...args: TArgs): AsyncGenerator<T, TReturn, TNext> => {\n const parentContext = ctx ?? context.active();\n const span = this.getTracer().startSpan(\n name,\n options ?? {},\n parentContext,\n );\n const spanContext = trace.setSpan(parentContext, span);\n\n if (spanType) {\n span.setAttribute(AttributeKeys.JUDGMENT_SPAN_KIND, spanType);\n }\n\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 generator = context.with(spanContext, () => func(...args));\n\n const wrappedNext = context.bind(\n spanContext,\n async (\n ...nextArgs: [] | [TNext]\n ): Promise<IteratorResult<T, TReturn>> => {\n try {\n const result = await generator.next(...nextArgs);\n if (result.done) {\n span.setAttribute(\n AttributeKeys.JUDGMENT_OUTPUT,\n this.serializer(result.value),\n );\n span.end();\n }\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 const wrappedReturn = context.bind(\n spanContext,\n async (\n value: TReturn | PromiseLike<TReturn>,\n ): Promise<IteratorResult<T, TReturn>> => {\n try {\n const result = await generator.return(value);\n span.setAttribute(\n AttributeKeys.JUDGMENT_OUTPUT,\n this.serializer(result.value),\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 const wrappedThrow = context.bind(\n spanContext,\n async (e: unknown): Promise<IteratorResult<T, TReturn>> => {\n try {\n return await generator.throw(e);\n } catch (err) {\n span.recordException(err as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: String(err),\n });\n span.end();\n throw err;\n }\n },\n );\n\n return {\n next: wrappedNext,\n return: wrappedReturn,\n throw: wrappedThrow,\n [Symbol.asyncIterator]() {\n return this;\n },\n } as AsyncGenerator<T, TReturn, TNext>;\n };\n }\n\n private observeGenerator<TArgs extends unknown[], T, TReturn, TNext>(\n func: (...args: TArgs) => Generator<T, TReturn, TNext>,\n spanType: string,\n name: string,\n options?: SpanOptions,\n ctx?: Context,\n ): (...args: TArgs) => Generator<T, TReturn, TNext> {\n return (...args: TArgs): Generator<T, TReturn, TNext> => {\n const parentContext = ctx ?? context.active();\n const span = this.getTracer().startSpan(\n name,\n options ?? {},\n parentContext,\n );\n const spanContext = trace.setSpan(parentContext, span);\n\n if (spanType) {\n span.setAttribute(AttributeKeys.JUDGMENT_SPAN_KIND, spanType);\n }\n\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 generator = context.with(spanContext, () => func(...args));\n\n const wrappedNext = context.bind(\n spanContext,\n (...nextArgs: [] | [TNext]): IteratorResult<T, TReturn> => {\n try {\n const result = generator.next(...nextArgs);\n if (result.done) {\n span.setAttribute(\n AttributeKeys.JUDGMENT_OUTPUT,\n this.serializer(result.value),\n );\n span.end();\n }\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 const wrappedReturn = context.bind(\n spanContext,\n (value: TReturn): IteratorResult<T, TReturn> => {\n try {\n const result = generator.return(value);\n span.setAttribute(\n AttributeKeys.JUDGMENT_OUTPUT,\n this.serializer(result.value),\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 const wrappedThrow = context.bind(\n spanContext,\n (e: unknown): IteratorResult<T, TReturn> => {\n try {\n return generator.throw(e);\n } catch (err) {\n span.recordException(err as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: String(err),\n });\n span.end();\n throw err;\n }\n },\n );\n\n return {\n next: wrappedNext,\n return: wrappedReturn,\n throw: wrappedThrow,\n [Symbol.iterator]() {\n return this;\n },\n } as Generator<T, TReturn, TNext>;\n };\n }\n\n private async resolveProjectId(name: string): Promise<string> {\n try {\n Logger.info(`Resolving project ID for project: ${name}`);\n const request: ResolveProjectNameRequest = { project_name: name };\n const response: ResolveProjectNameResponse =\n await this.apiClient.projectsResolve(request);\n const projectId = response.project_id;\n if (!projectId) {\n throw new Error(`Project ID not found for project: ${name}`);\n }\n Logger.info(`Resolved project ID: ${projectId}`);\n return projectId;\n } catch (error) {\n throw new Error(\n `Failed to resolve project ID: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private buildEndpoint(baseUrl: string): string {\n return baseUrl.endsWith(\"/\")\n ? baseUrl + \"otel/v1/traces\"\n : baseUrl + \"/otel/v1/traces\";\n }\n\n private generateRunId(prefix: string, spanId?: string | null): string {\n return prefix + (spanId ?? Date.now().toString());\n }\n\n private createEvaluationRun(\n scorer: BaseScorer,\n example: Example,\n traceId: string,\n spanId: string,\n ): ExampleEvaluationRun {\n const runId = this.generateRunId(\"async_evaluate_\", spanId);\n\n return {\n project_name: this.projectName,\n eval_name: runId,\n trace_id: traceId,\n trace_span_id: spanId,\n examples: [example.toModel()],\n judgment_scorers: [scorer.getScorerConfig()],\n custom_scorers: [],\n };\n }\n\n private createTraceEvaluationRun(\n scorer: BaseScorer,\n traceId: string,\n spanId: string,\n ): TraceEvaluationRun {\n const evalName = this.generateRunId(\"async_trace_evaluate_\", spanId);\n\n return {\n project_name: this.projectName,\n eval_name: evalName,\n trace_and_span_ids: [[traceId, spanId]],\n judgment_scorers: [scorer.getScorerConfig()],\n custom_scorers: [],\n is_offline: false,\n };\n }\n\n private async enqueueEvaluation(\n evaluationRun: ExampleEvaluationRun,\n ): Promise<void> {\n try {\n await this.apiClient.addToRunEvalQueueExamples(evaluationRun);\n } catch (e) {\n Logger.error(`Failed to enqueue evaluation run: ${e}`);\n }\n }\n\n private getSampledSpanContext(): SpanContext | null {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n return null;\n }\n const spanContext = currentSpan.spanContext();\n if (!spanContext.traceFlags || !(spanContext.traceFlags & 0x01)) {\n return null;\n }\n return spanContext;\n }\n\n private getSampledSpan(): Span | null {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n return null;\n }\n const spanContext = currentSpan.spanContext();\n if (!spanContext.traceFlags || !(spanContext.traceFlags & 0x01)) {\n return null;\n }\n return currentSpan;\n }\n\n private logEvaluationInfo(\n method: string,\n traceId: string,\n spanId: string,\n scorerName: string,\n ): void {\n Logger.info(\n `${method}: project=${this.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorerName}`,\n );\n }\n\n private safeExecute(operation: string, action: () => void): void {\n try {\n action();\n } catch (e) {\n Logger.error(`Failed to ${operation}: ${e}`);\n }\n }\n\n private isValidKey(key: string): boolean {\n return key.length > 0;\n }\n\n private formatInputs(\n f: (...args: unknown[]) => unknown,\n args: unknown[],\n ): Record<string, unknown> {\n try {\n const funcStr = f.toString();\n const match = /\\(([^)]*)\\)/.exec(funcStr);\n const paramNames = match\n ? match[1]\n .split(\",\")\n .map((param) => param.trim().split(\"=\")[0].trim())\n .filter((param) => param.length > 0)\n : [];\n\n const inputs: Record<string, unknown> = {};\n paramNames.forEach((name, index) => {\n if (index < args.length) {\n inputs[name] = args[index];\n }\n });\n return inputs;\n } catch {\n return {};\n }\n }\n}\n",
26
+ "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
27
  "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
28
  "import {\n BatchSpanProcessor,\n type BatchSpanProcessorBrowserConfig,\n type SpanExporter,\n} from \"@opentelemetry/sdk-trace-base\";\nimport type { BaseTracer } from \"../BaseTracer\";\n\nexport interface JudgmentSpanProcessorConfig {\n maxQueueSize?: number;\n scheduledDelayMillis?: number;\n maxExportBatchSize?: number;\n exportTimeoutMillis?: number;\n}\n\nexport class JudgmentSpanProcessor extends BatchSpanProcessor {\n // The span processor does have custom functionality that at the moment is not ported over and still in discussion.\n // Current implementation enforces that tracer will always exist for predicted compatibility in the future.\n private tracer: BaseTracer;\n constructor(\n _tracer: BaseTracer,\n exporter: SpanExporter,\n config?: JudgmentSpanProcessorConfig,\n ) {\n const batchConfig: BatchSpanProcessorBrowserConfig = {\n maxQueueSize: config?.maxQueueSize,\n scheduledDelayMillis: config?.scheduledDelayMillis,\n maxExportBatchSize: config?.maxExportBatchSize,\n exportTimeoutMillis: config?.exportTimeoutMillis,\n };\n super(exporter, batchConfig);\n this.tracer = _tracer;\n }\n}\n",
28
29
  "import { type Context } from \"@opentelemetry/api\";\nimport type { ReadableSpan, Span } from \"@opentelemetry/sdk-trace-base\";\nimport { type BaseTracer } from \"../BaseTracer\";\nimport { NoOpSpanExporter } from \"../exporters/NoOpSpanExporter\";\nimport { JudgmentSpanProcessor } from \"./JudgmentSpanProcessor\";\n\nexport class NoOpSpanProcessor extends JudgmentSpanProcessor {\n constructor(tracer: BaseTracer) {\n super(tracer, new NoOpSpanExporter());\n }\n\n onStart(_span: Span, _parentContext: Context): void {\n return;\n }\n\n onEnd(_span: ReadableSpan): void {\n return;\n }\n\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n protected onShutdown(): void {\n return;\n }\n}\n",
29
30
  "import { JudgmentApiClient } from \"../internal/api\";\nimport { BrowserTracer, type BrowserTracerConfig } from \"./BrowserTracer\";\n\nexport class BrowserTracerFactory {\n private readonly client: JudgmentApiClient;\n\n constructor(client: JudgmentApiClient) {\n this.client = client;\n }\n\n async create(config: BrowserTracerConfig): Promise<BrowserTracer> {\n if (!config.projectName) {\n throw new Error(\"Project name is required\");\n }\n\n return BrowserTracer.create(\n {\n projectName: config.projectName,\n enableEvaluation: config.enableEvaluation ?? true,\n enableMonitoring: config.enableMonitoring ?? false,\n serializer: config.serializer ?? JSON.stringify,\n resourceAttributes: config.resourceAttributes ?? {},\n sampler: config.sampler,\n initialize: config.initialize ?? true,\n },\n this.client,\n );\n }\n}\n",
30
- "import { context } from \"@opentelemetry/api\";\nimport { AsyncLocalStorageContextManager } from \"@opentelemetry/context-async-hooks\";\nimport {\n registerInstrumentations,\n type Instrumentation,\n} from \"@opentelemetry/instrumentation\";\nimport {\n defaultResource,\n resourceFromAttributes,\n} from \"@opentelemetry/resources\";\nimport { type Sampler } from \"@opentelemetry/sdk-trace-base\";\nimport { NodeTracerProvider } from \"@opentelemetry/sdk-trace-node\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport { ResourceKeys } from \"../judgmentAttributeKeys\";\nimport { Logger } from \"../utils/logger\";\nimport { VERSION } from \"../version\";\nimport { BaseTracer, type Serializer } from \"./BaseTracer\";\nimport {\n JudgmentNodeTracerProvider,\n filterTracerParams,\n} from \"./JudgmentNodeTracerProvider\";\n\nexport interface NodeTracerConfig {\n projectName: string;\n enableEvaluation?: boolean;\n enableMonitoring?: boolean;\n serializer?: Serializer;\n resourceAttributes?: Record<string, unknown>;\n instrumentations?: Instrumentation[];\n sampler?: Sampler;\n initialize?: boolean;\n filterTracer?: (params: filterTracerParams) => boolean;\n}\n\ninterface InternalNodeTracerConfig\n extends Required<\n Omit<\n NodeTracerConfig,\n \"resourceAttributes\" | \"instrumentations\" | \"sampler\" | \"filterTracer\"\n >\n > {\n resourceAttributes: Record<string, unknown>;\n instrumentations: Instrumentation[];\n sampler?: Sampler;\n filterTracer?: (params: filterTracerParams) => boolean;\n}\n\nexport class NodeTracer extends BaseTracer {\n private tracerProvider: NodeTracerProvider | null = null;\n private contextManager: AsyncLocalStorageContextManager | null = null;\n private resourceAttributes: Record<string, unknown>;\n private instrumentations: Instrumentation[];\n private sampler?: Sampler;\n private filterTracer?: (params: filterTracerParams) => boolean;\n\n private constructor(\n projectName: string,\n enableEvaluation: boolean,\n apiClient: JudgmentApiClient,\n serializer: Serializer,\n resourceAttributes: Record<string, unknown>,\n instrumentations: Instrumentation[],\n sampler?: Sampler,\n filterTracer?: (params: filterTracerParams) => boolean,\n ) {\n super(projectName, enableEvaluation, apiClient, serializer);\n this.resourceAttributes = resourceAttributes;\n this.instrumentations = instrumentations;\n this.sampler = sampler;\n this.filterTracer = filterTracer;\n }\n\n static async create(\n config: InternalNodeTracerConfig,\n apiClient: JudgmentApiClient,\n ): Promise<NodeTracer> {\n const tracer = new NodeTracer(\n config.projectName,\n config.enableEvaluation,\n apiClient,\n config.serializer,\n config.resourceAttributes,\n config.instrumentations,\n config.sampler,\n config.filterTracer,\n );\n\n await tracer.resolveAndSetProjectId();\n\n if (config.initialize) {\n await tracer.initialize();\n }\n\n return tracer;\n }\n\n /* eslint-disable @typescript-eslint/require-await */\n async initialize(): Promise<void> {\n if (this.tracerProvider !== null) {\n Logger.warn(\"NodeTracer already initialized\");\n return;\n }\n\n try {\n this.contextManager = new AsyncLocalStorageContextManager();\n this.contextManager.enable();\n context.setGlobalContextManager(this.contextManager);\n\n const resource = defaultResource().merge(\n resourceFromAttributes({\n [ResourceKeys.SERVICE_NAME]: this.projectName,\n [ResourceKeys.TELEMETRY_SDK_NAME]: BaseTracer.TRACER_NAME,\n [ResourceKeys.TELEMETRY_SDK_VERSION]: VERSION,\n ...this.resourceAttributes,\n }),\n );\n\n this.tracerProvider = new JudgmentNodeTracerProvider({\n resource,\n sampler: this.sampler,\n spanProcessors: [this.getSpanProcessor()],\n filterTracer: this.filterTracer,\n });\n\n this.tracerProvider.register();\n\n if (this.instrumentations.length > 0) {\n registerInstrumentations({\n instrumentations: this.instrumentations,\n });\n }\n Logger.info(\"NodeTracer initialized successfully\");\n } catch (error) {\n throw new Error(\n `Failed to initialize NodeTracer: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n async shutdown(): Promise<void> {\n if (!this.tracerProvider) {\n Logger.warn(\"NodeTracer not initialized, skipping shutdown\");\n return;\n }\n try {\n await this.tracerProvider.shutdown();\n this.tracerProvider = null;\n\n if (this.contextManager) {\n this.contextManager.disable();\n this.contextManager = null;\n }\n\n Logger.info(\"NodeTracer shut down successfully\");\n } catch (error) {\n Logger.error(`Failed to shutdown NodeTracer: ${error}`);\n }\n }\n\n async forceFlush(): Promise<void> {\n if (!this.tracerProvider) {\n Logger.warn(\"NodeTracer not initialized, skipping force flush\");\n return;\n }\n try {\n await this.tracerProvider.forceFlush();\n } catch (error) {\n Logger.error(`Failed to force flush NodeTracer: ${error}`);\n }\n }\n}\n",
31
+ "import {\n registerInstrumentations,\n type Instrumentation,\n} from \"@opentelemetry/instrumentation\";\nimport {\n defaultResource,\n resourceFromAttributes,\n} from \"@opentelemetry/resources\";\nimport {\n type Sampler,\n type SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { NodeTracerProvider } from \"@opentelemetry/sdk-trace-node\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport { ResourceKeys } from \"../judgmentAttributeKeys\";\nimport { Logger } from \"../utils/logger\";\nimport { VERSION } from \"../version\";\nimport { BaseTracer, type Serializer } from \"./BaseTracer\";\nimport {\n JudgmentNodeTracerProvider,\n filterTracerParams,\n} from \"./JudgmentNodeTracerProvider\";\n\nexport interface NodeTracerConfig {\n projectName: string;\n enableEvaluation?: boolean;\n enableMonitoring?: boolean;\n serializer?: Serializer;\n resourceAttributes?: Record<string, unknown>;\n instrumentations?: Instrumentation[];\n initialize?: boolean;\n filterTracer?: (params: filterTracerParams) => boolean;\n}\n\ninterface InternalNodeTracerConfig extends Required<\n Omit<\n NodeTracerConfig,\n \"resourceAttributes\" | \"instrumentations\" | \"filterTracer\"\n >\n> {\n resourceAttributes: Record<string, unknown>;\n instrumentations: Instrumentation[];\n filterTracer?: (params: filterTracerParams) => boolean;\n sampler?: Sampler;\n}\n\nexport interface InitializeNodeTracerConfig {\n spanProcessors?: SpanProcessor[];\n resourceAttributes?: Record<string, unknown>;\n instrumentations?: Instrumentation[];\n sampler?: Sampler;\n}\n\nexport class NodeTracer extends BaseTracer {\n private tracerProvider: NodeTracerProvider | null = null;\n private resourceAttributes: Record<string, unknown>;\n private instrumentations: Instrumentation[];\n private filterTracer?: (params: filterTracerParams) => boolean;\n\n private constructor(\n projectName: string,\n enableEvaluation: boolean,\n apiClient: JudgmentApiClient,\n serializer: Serializer,\n resourceAttributes: Record<string, unknown>,\n instrumentations: Instrumentation[],\n filterTracer?: (params: filterTracerParams) => boolean,\n ) {\n super(projectName, enableEvaluation, apiClient, serializer);\n this.resourceAttributes = resourceAttributes;\n this.instrumentations = instrumentations;\n this.filterTracer = filterTracer;\n }\n\n static async create(\n config: InternalNodeTracerConfig,\n apiClient: JudgmentApiClient,\n ): Promise<NodeTracer> {\n const tracer = new NodeTracer(\n config.projectName,\n config.enableEvaluation,\n apiClient,\n config.serializer,\n config.resourceAttributes,\n config.instrumentations,\n config.filterTracer,\n );\n\n await tracer.resolveAndSetProjectId();\n\n if (config.initialize) {\n await tracer.initialize({ sampler: config.sampler });\n }\n\n return tracer;\n }\n\n /* eslint-disable @typescript-eslint/require-await */\n async initialize(config?: InitializeNodeTracerConfig): Promise<void> {\n if (this.tracerProvider !== null) {\n Logger.warn(\"NodeTracer already initialized\");\n return;\n }\n\n try {\n const resource = defaultResource().merge(\n resourceFromAttributes({\n [ResourceKeys.SERVICE_NAME]: this.projectName,\n [ResourceKeys.TELEMETRY_SDK_NAME]: BaseTracer.TRACER_NAME,\n [ResourceKeys.TELEMETRY_SDK_VERSION]: VERSION,\n ...this.resourceAttributes,\n ...config?.resourceAttributes,\n }),\n );\n\n const spanProcessors = [\n this.getSpanProcessor(),\n ...(config?.spanProcessors ?? []),\n ];\n\n this.tracerProvider = new JudgmentNodeTracerProvider({\n resource,\n sampler: config?.sampler,\n spanProcessors,\n filterTracer: this.filterTracer,\n });\n\n this.tracerProvider.register();\n\n const allInstrumentations = [\n ...this.instrumentations,\n ...(config?.instrumentations ?? []),\n ];\n\n if (allInstrumentations.length > 0) {\n registerInstrumentations({\n instrumentations: allInstrumentations,\n });\n }\n Logger.info(\"NodeTracer initialized successfully\");\n } catch (error) {\n throw new Error(\n `Failed to initialize NodeTracer: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n async shutdown(): Promise<void> {\n if (!this.tracerProvider) {\n Logger.warn(\"NodeTracer not initialized, skipping shutdown\");\n return;\n }\n try {\n await this.tracerProvider.shutdown();\n this.tracerProvider = null;\n Logger.info(\"NodeTracer shut down successfully\");\n } catch (error) {\n Logger.error(`Failed to shutdown NodeTracer: ${error}`);\n }\n }\n\n async forceFlush(): Promise<void> {\n if (!this.tracerProvider) {\n Logger.warn(\"NodeTracer not initialized, skipping force flush\");\n return;\n }\n try {\n await this.tracerProvider.forceFlush();\n } catch (error) {\n Logger.error(`Failed to force flush NodeTracer: ${error}`);\n }\n }\n}\n",
31
32
  "import { Tracer } from \"@opentelemetry/api\";\nimport {\n NodeTracerConfig,\n NodeTracerProvider,\n} from \"@opentelemetry/sdk-trace-node\";\nimport { Logger } from \"../utils\";\nimport { BaseTracer } from \"./BaseTracer\";\nimport { NoOpTracer } from \"./NoOpTracer\";\n\nexport interface filterTracerParams {\n name: string;\n version?: string;\n options?: { schemaUrl?: string };\n}\n\ninterface JudgmentNodeTracerProviderConfig extends NodeTracerConfig {\n /**\n * Filters what tracers are allowed to be created. This is useful when you want to disable any instrumentation / control instrumentation\n * that is automatically created by auto-instrumentations or other libraries.\n *\n * If set to false, the caller will receive a NoOpTracer.\n *\n * @param params The parameters of the tracer to check if it should be allowed.\n * @returns Whether the tracer should be allowed.\n */\n filterTracer?: (params: filterTracerParams) => boolean;\n}\n\nexport class JudgmentNodeTracerProvider extends NodeTracerProvider {\n private readonly filterTracer: (params: filterTracerParams) => boolean;\n\n constructor(config: JudgmentNodeTracerProviderConfig) {\n super(config);\n this.filterTracer = config.filterTracer ?? (() => true);\n }\n\n getTracer(\n name: string,\n version?: string,\n options?: { schemaUrl?: string },\n ): Tracer {\n if (name === BaseTracer.TRACER_NAME) {\n return super.getTracer(name, version, options);\n }\n\n try {\n if (this.filterTracer({ name, version, options })) {\n return super.getTracer(name, version, options);\n } else {\n Logger.debug(\n `[JudgmentNodeTracerProvider] Returning NoOpTracer for tracer ${name} as it is disallowed by the filterTracer callback.`,\n );\n return new NoOpTracer();\n }\n } catch (error: unknown) {\n Logger.error(\n `[JudgmentNodeTracerProvider] Failed to filter tracer ${name}: ${error}.`,\n );\n return super.getTracer(name, version, options);\n }\n }\n}\n",
32
33
  "import {\n INVALID_SPAN_CONTEXT,\n type Attributes,\n type AttributeValue,\n type Exception,\n type Link,\n type Span,\n type SpanContext,\n type SpanStatus,\n type TimeInput,\n} from \"@opentelemetry/api\";\n\nexport class NoOpSpan implements Span {\n setAttribute(_key: string, _value: AttributeValue): this {\n return this;\n }\n\n setAttributes(_attributes: Attributes): this {\n return this;\n }\n\n addEvent(\n _name: string,\n _attributesOrStartTime?: Attributes | TimeInput,\n _startTime?: TimeInput,\n ): this {\n return this;\n }\n\n addLink(_link: Link): this {\n return this;\n }\n\n addLinks(_links: Link[]): this {\n return this;\n }\n\n setStatus(_status: SpanStatus): this {\n return this;\n }\n\n updateName(_name: string): this {\n return this;\n }\n\n end(_endTime?: TimeInput): void {\n return;\n }\n\n isRecording(): boolean {\n return false;\n }\n\n recordException(_exception: Exception, _time?: TimeInput): void {\n return;\n }\n\n spanContext(): SpanContext {\n return INVALID_SPAN_CONTEXT;\n }\n}\n",
33
34
  "import {\n type Context,\n type Span,\n type SpanOptions,\n type Tracer,\n} from \"@opentelemetry/api\";\nimport { NoOpSpan } from \"./NoOpSpan\";\n\nexport class NoOpTracer implements Tracer {\n private readonly noopSpan = new NoOpSpan();\n\n startSpan(_name: string, _options?: SpanOptions, _context?: Context): Span {\n return this.noopSpan;\n }\n\n startActiveSpan<F extends (span: Span) => unknown>(\n _name: string,\n fn: F,\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => unknown>(\n _name: string,\n _options: SpanOptions,\n fn: F,\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => unknown>(\n _name: string,\n _options: SpanOptions,\n _context: Context,\n fn: F,\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => unknown>(\n _name: string,\n ...args: unknown[]\n ): ReturnType<F> {\n const fn = args[args.length - 1] as F;\n return fn(this.noopSpan) as ReturnType<F>;\n }\n}\n",
34
- "import { JudgmentApiClient } from \"../internal/api\";\nimport { NodeTracer, type NodeTracerConfig } from \"./NodeTracer\";\n\nexport class NodeTracerFactory {\n private readonly client: JudgmentApiClient;\n\n constructor(client: JudgmentApiClient) {\n this.client = client;\n }\n\n async create(config: NodeTracerConfig): Promise<NodeTracer> {\n if (!config.projectName) {\n throw new Error(\"Project name is required\");\n }\n\n return NodeTracer.create(\n {\n projectName: config.projectName,\n enableEvaluation: config.enableEvaluation ?? true,\n enableMonitoring: config.enableMonitoring ?? false,\n serializer: config.serializer ?? JSON.stringify,\n resourceAttributes: config.resourceAttributes ?? {},\n instrumentations: config.instrumentations ?? [],\n sampler: config.sampler,\n filterTracer: config.filterTracer,\n initialize: config.initialize ?? true,\n },\n this.client,\n );\n }\n}\n",
35
+ "import { JudgmentApiClient } from \"../internal/api\";\nimport { NodeTracer, type NodeTracerConfig } from \"./NodeTracer\";\n\nexport class NodeTracerFactory {\n private readonly client: JudgmentApiClient;\n\n constructor(client: JudgmentApiClient) {\n this.client = client;\n }\n\n async create(config: NodeTracerConfig): Promise<NodeTracer> {\n if (!config.projectName) {\n throw new Error(\"Project name is required\");\n }\n\n return NodeTracer.create(\n {\n projectName: config.projectName,\n enableEvaluation: config.enableEvaluation ?? true,\n enableMonitoring: config.enableMonitoring ?? false,\n serializer: config.serializer ?? JSON.stringify,\n resourceAttributes: config.resourceAttributes ?? {},\n instrumentations: config.instrumentations ?? [],\n filterTracer: config.filterTracer,\n initialize: config.initialize ?? true,\n },\n this.client,\n );\n }\n}\n",
35
36
  "import { JUDGMENT_API_KEY, JUDGMENT_API_URL, JUDGMENT_ORG_ID } from \"./env\";\nimport { JudgmentApiClient } from \"./internal/api\";\nimport { EvaluationFactory } from \"./evaluation/EvaluationFactory\";\nimport { ScorersFactory } from \"./scorers/ScorersFactory\";\nimport { BrowserTracerFactory } from \"./tracer/BrowserTracerFactory\";\nimport { NodeTracerFactory } from \"./tracer/NodeTracerFactory\";\n\nexport interface JudgevalConfig {\n apiKey?: string;\n organizationId?: string;\n apiUrl?: string;\n}\n\nexport class Judgeval {\n private readonly internalClient: JudgmentApiClient;\n\n protected constructor(config: JudgevalConfig = {}) {\n const apiKey = config.apiKey ?? JUDGMENT_API_KEY;\n const organizationId = config.organizationId ?? JUDGMENT_ORG_ID;\n const apiUrl = config.apiUrl ?? JUDGMENT_API_URL;\n\n if (!apiKey) {\n throw new Error(\"API key is required\");\n }\n if (!organizationId) {\n throw new Error(\"Organization ID is required\");\n }\n if (!apiUrl) {\n throw new Error(\"API URL is required\");\n }\n\n this.internalClient = new JudgmentApiClient(apiUrl, apiKey, organizationId);\n }\n\n static create(config: JudgevalConfig = {}): Judgeval {\n return new Judgeval(config);\n }\n\n get nodeTracer(): NodeTracerFactory {\n return new NodeTracerFactory(this.internalClient);\n }\n\n get browserTracer(): BrowserTracerFactory {\n return new BrowserTracerFactory(this.internalClient);\n }\n\n get scorers(): ScorersFactory {\n return new ScorersFactory(this.internalClient);\n }\n\n get evaluation(): EvaluationFactory {\n return new EvaluationFactory(this.internalClient);\n }\n}\n",
36
37
  "import { randomUUID } from \"crypto\";\nimport type { Example as APIExample } from \"../internal/api/models\";\n\nexport interface ExampleConfig {\n name?: string;\n properties?: Record<string, unknown>;\n exampleId?: string;\n createdAt?: string;\n}\n\nexport class Example {\n exampleId: string;\n createdAt: string;\n name?: string | null;\n private properties: Record<string, unknown>;\n\n private constructor(config: ExampleConfig = {}) {\n this.exampleId = config.exampleId ?? randomUUID();\n this.createdAt = config.createdAt ?? new Date().toISOString();\n this.name = config.name ?? null;\n this.properties = config.properties ?? {};\n }\n\n static create(data: Record<string, unknown>): Example {\n return new Example({\n properties: data,\n });\n }\n\n setProperty(key: string, value: unknown): this {\n this.properties[key] = value;\n return this;\n }\n\n getProperty(key: string): unknown {\n return this.properties[key];\n }\n\n getProperties(): Record<string, unknown> {\n return { ...this.properties };\n }\n\n toModel(): APIExample {\n return {\n example_id: this.exampleId,\n created_at: this.createdAt,\n name: this.name ?? undefined,\n ...this.properties,\n };\n }\n}\n",
37
38
  "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",
38
39
  "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"
39
40
  ],
40
- "mappings": "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",
41
- "debugId": "EBA29BADACED84EF64756E2164756E21",
41
+ "mappings": "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",
42
+ "debugId": "BD50C226D72B257E64756E2164756E21",
42
43
  "names": []
43
44
  }