judgeval 0.9.5 → 0.9.6

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,6 +1,6 @@
1
1
  var{defineProperty:g,getOwnPropertyNames:ds,getOwnPropertyDescriptor:Bs}=Object,ys=Object.prototype.hasOwnProperty;var Ds=new WeakMap,is=(s)=>{var R=Ds.get(s),o;if(R)return R;if(R=g({},"__esModule",{value:!0}),s&&typeof s==="object"||typeof s==="function")ds(s).map((p)=>!ys.call(R,p)&&g(R,p,{get:()=>s[p],enumerable:!(o=Bs(s,p))||o.enumerable}));return Ds.set(s,R),R};var a=(s,R)=>{for(var o in R)g(s,o,{get:R[o],enumerable:!0,configurable:!0,set:(p)=>R[o]=()=>p})};var fR={};a(fR,{propagation:()=>K,baggage:()=>i,Tracer:()=>z,NoOpSpanProcessor:()=>Y,NoOpSpanExporter:()=>H,JudgmentTracerProvider:()=>D,JudgmentSpanExporter:()=>l,JudgmentBaggageSpanProcessor:()=>W,JudgmentBaggagePropagator:()=>x,Judgeval:()=>T,BaseTracer:()=>m,ALLOW_ALL_BAGGAGE_KEYS:()=>e});module.exports=is(fR);function J(s,R){let o=process.env[s];if(!o)return R??null;return o}var G=J("JUDGMENT_API_KEY"),_=J("JUDGMENT_ORG_ID"),c=J("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),Us=J("JUDGMENT_LOG_LEVEL","warn");class u{baseUrl;apiKey;organizationId;constructor(s,R,o){this.baseUrl=s,this.apiKey=R,this.organizationId=o}getBaseUrl(){return this.baseUrl}getApiKey(){return this.apiKey}getOrganizationId(){return this.organizationId}async request(s,R,o){let p=await fetch(R,{method:s,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId},body:o!==void 0?JSON.stringify(o):void 0});if(!p.ok){let E=await p.text();throw Error(`HTTP ${p.status}: ${E}`)}return p.json()}async postOtelV1traces(){let s=this.baseUrl+"/otel/v1/traces";return this.request("POST",s,{})}async postV1projectsResolve(s){let R=this.baseUrl+"/v1/projects/resolve/";return this.request("POST",R,s)}async postV1projects(s){let R=this.baseUrl+"/v1/projects";return this.request("POST",R,s)}async deleteV1projects(s){let R=this.baseUrl+`/v1/projects/${s}`;return this.request("DELETE",R,{})}async postV1projectsDatasets(s,R){let o=this.baseUrl+`/v1/projects/${s}/datasets`;return this.request("POST",o,R)}async getV1projectsDatasets(s){let R=this.baseUrl+`/v1/projects/${s}/datasets`;return this.request("GET",R,void 0)}async postV1projectsDatasetsByDatasetNameExamples(s,R,o){let p=this.baseUrl+`/v1/projects/${s}/datasets/${R}/examples`;return this.request("POST",p,o)}async getV1projectsDatasetsByDatasetName(s,R){let o=this.baseUrl+`/v1/projects/${s}/datasets/${R}`;return this.request("GET",o,void 0)}async postV1projectsEvaluateExamples(s,R){let o=this.baseUrl+`/v1/projects/${s}/evaluate/examples`;return this.request("POST",o,R)}async postV1projectsEvaluateTraces(s,R){let o=this.baseUrl+`/v1/projects/${s}/evaluate/traces`;return this.request("POST",o,R)}async postV1projectsEvalResults(s,R){let o=this.baseUrl+`/v1/projects/${s}/eval-results`;return this.request("POST",o,R)}async postV1projectsEvalResultsExamples(s,R){let o=this.baseUrl+`/v1/projects/${s}/eval-results/examples`;return this.request("POST",o,R)}async getV1projectsExperimentsByRunId(s,R){let o=this.baseUrl+`/v1/projects/${s}/experiments/${R}`;return this.request("GET",o,void 0)}async postV1projectsEvalQueueExamples(s,R){let o=this.baseUrl+`/v1/projects/${s}/eval-queue/examples`;return this.request("POST",o,R)}async postV1projectsEvalQueueTraces(s,R){let o=this.baseUrl+`/v1/projects/${s}/eval-queue/traces`;return this.request("POST",o,R)}async getV1projectsPromptsByName(s,R,o,p){let E=new URLSearchParams;if(o!==void 0)E.set("commit_id",o);if(p!==void 0)E.set("tag",p);let j=this.baseUrl+`/v1/projects/${s}/prompts/${R}`+(E.toString()?"?"+E.toString():"");return this.request("GET",j,void 0)}async postV1projectsPrompts(s,R){let o=this.baseUrl+`/v1/projects/${s}/prompts`;return this.request("POST",o,R)}async postV1projectsPromptsByNameTags(s,R,o){let p=this.baseUrl+`/v1/projects/${s}/prompts/${R}/tags`;return this.request("POST",p,o)}async deleteV1projectsPromptsByNameTags(s,R,o){let p=this.baseUrl+`/v1/projects/${s}/prompts/${R}/tags`;return this.request("DELETE",p,o)}async getV1projectsPromptsByNameVersions(s,R){let o=this.baseUrl+`/v1/projects/${s}/prompts/${R}/versions`;return this.request("GET",o,void 0)}async getV1projectsScorers(s,R,o){let p=new URLSearchParams;if(R!==void 0)p.set("names",R);if(o!==void 0)p.set("is_trace",o);let E=this.baseUrl+`/v1/projects/${s}/scorers`+(p.toString()?"?"+p.toString():"");return this.request("GET",E,void 0)}async getV1projectsScorersByNameExists(s,R){let o=this.baseUrl+`/v1/projects/${s}/scorers/${R}/exists`;return this.request("GET",o,void 0)}async postV1projectsScorersCustom(s){let R=this.baseUrl+`/v1/projects/${s}/scorers/custom`;return this.request("POST",R,{})}async postV1projectsScorersCustomBundle(s){let R=this.baseUrl+`/v1/projects/${s}/scorers/custom/bundle`;return this.request("POST",R,{})}async getV1projectsScorersCustomByNameExists(s,R){let o=this.baseUrl+`/v1/projects/${s}/scorers/custom/${R}/exists`;return this.request("GET",o,void 0)}async postV1projectsTracesByTraceIdTags(s,R,o){let p=this.baseUrl+`/v1/projects/${s}/traces/${R}/tags`;return this.request("POST",p,o)}async getV1e2eFetchTraceByProjectNameByTraceId(s,R){let o=this.baseUrl+`/v1/e2e_fetch_trace/${s}/${R}`;return this.request("GET",o,void 0)}async getV1e2eTracesPerProject(s,R,o){let p=new URLSearchParams;if(R!==void 0)p.set("limit",R);if(o!==void 0)p.set("offset",o);let E=this.baseUrl+`/v1/e2e_traces_per_project/${s}`+(p.toString()?"?"+p.toString():"");return this.request("GET",E,void 0)}async postV1e2eFetchSpanScore(s){let R=this.baseUrl+"/v1/e2e_fetch_span_score/";return this.request("POST",R,s)}}class T{internalClient;constructor(s={}){let R=s.apiKey??G,o=s.organizationId??_,p=s.apiUrl??c;if(!R)throw Error("API key is required");if(!o)throw Error("Organization ID is required");if(!p)throw Error("API URL is required");this.internalClient=new u(p,R,o)}static create(s={}){return new T(s)}}var v=require("@opentelemetry/api"),vs=require("crypto");var bs=/^([^(]+?)=>/,As=/^[^(]*\(\s*([^)]*)\)/m,Ks=/,/,es=/^\s*(_?)(\S+?)\1\s*$/,rs=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function gs(s){return Function.prototype.toString.call(s)}function as(s){let R=gs(s).replace(rs,"");return R.match(bs)||R.match(As)}function Fs(s){let R=as(s);if(!R||!R[1])return[];return R[1].split(Ks).map((o)=>{return o.replace(es,(E,j,P)=>P).trim()}).filter((o)=>o.length>0)}class q{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=q.Level.WARNING;static useColor=!0;static initialize(){if(!q.initialized){let s=process.env.JUDGMENT_NO_COLOR;q.useColor=!s&&process.stdout.isTTY;let R=Us.toLowerCase();if(R){let o={debug:q.Level.DEBUG,info:q.Level.INFO,warning:q.Level.WARNING,warn:q.Level.WARNING,error:q.Level.ERROR,critical:q.Level.CRITICAL};q.currentLevel=o[R]??q.Level.WARNING}q.initialized=!0}}static setLevel(s){q.currentLevel=s}static setUseColor(s){q.useColor=s}static log(s,R){if(q.initialize(),s<q.currentLevel)return;let o=new Date().toISOString().replace("T"," ").substring(0,19),p=Object.keys(q.Level).find((P)=>q.Level[P]===s)??"UNKNOWN",E=`${o} - judgeval - ${p} - ${R}`;if(q.useColor)E=`${s===q.Level.DEBUG||s===q.Level.INFO?q.GRAY:s===q.Level.WARNING?q.YELLOW:q.RED}${E}${q.RESET}`;(s>=q.Level.ERROR?process.stderr:process.stdout).write(E+`
2
2
  `)}static debug(s){q.log(q.Level.DEBUG,s)}static info(s){q.log(q.Level.INFO,s)}static warning(s){q.log(q.Level.WARNING,s)}static warn(s){q.log(q.Level.WARNING,s)}static error(s){q.log(q.Level.ERROR,s)}static critical(s){q.log(q.Level.CRITICAL,s)}}function f(s,R,o){try{return R()}catch(p){let E=p instanceof Error&&p.stack?`
3
- ${p.stack}`:"";return q.error(`[Caught] An exception was raised in ${s}: ${String(p)}${E}`),o}}var ss;function sR(s,R){if(typeof R==="bigint")return R.toString();if(typeof R==="object"&&R!==null){if(ss.has(R))return"[Circular]";ss.add(R)}return R}function k(s){try{let R=JSON.stringify(s);if(typeof R==="string")return R;return String(R)}catch{try{ss=new WeakSet;let R=JSON.stringify(s,sR);return typeof R==="string"?R:String(s)}catch(R){return q.error(`safeStringify failed: ${R}`),String(s)}}}function t(s,R){if(typeof s==="string"||typeof s==="number"||typeof s==="boolean")return s;return R(s)}var i={};a(i,{setBaggage:()=>N,getBaggage:()=>C,getActiveBaggage:()=>qR,deleteBaggage:()=>jR,createBaggage:()=>M,baggageEntryMetadataFromString:()=>Is.baggageEntryMetadataFromString,JudgmentBaggagePropagator:()=>x});var n=require("@opentelemetry/api");var V=require("@opentelemetry/api"),Qs=require("@opentelemetry/instrumentation"),ws=require("async_hooks");var S=require("@opentelemetry/api"),ps=require("async_hooks"),fs=!1,Rs=null,Vs=new ps.AsyncLocalStorage,L=new ps.AsyncLocalStorage,RR=S.context.active.bind(S.context),oR=S.context.with.bind(S.context),pR=S.context.bind.bind(S.context);function os(){return Vs.getStore()===!0}function Ss(s){if(Rs=s,fs)return;let R=S.context;R.active=()=>{if(!os())return RR();let o=L.getStore();if(o)return o;return Rs?Rs():S.ROOT_CONTEXT},R.with=(o,p,E,...j)=>{if(!os())return oR(o,p,E,...j);return L.run(o,()=>p.apply(E,j))},R.bind=(o,p)=>{if(!os())return pR(o,p);if(typeof p!=="function")return p;let E=p;return(...j)=>L.run(o,()=>E(...j))},fs=!0}function Es(s,R){return Vs.run(!0,()=>L.run(s,R))}var ER="judgeval",d=new ws.AsyncLocalStorage;class xs{_provider;constructor(s){this._provider=s}startSpan(s,R,o){let p=o??this._provider.getCurrentContext();return this._provider._getDelegateTracer().startSpan(s,R,p)}startActiveSpan(s,...R){let o={},p=this._provider.getCurrentContext(),E;if(R.length===1)E=R[0];else if(R.length===2)o=R[0],E=R[1];else o=R[0],p=R[1],E=R[2];let j=this.startSpan(s,o,p);return this._provider.useSpan(j,!0,!0,!0,()=>E(j))}}class Cs{startSpan(){return V.trace.wrapSpanContext(V.INVALID_SPAN_CONTEXT)}startActiveSpan(s,...R){return(R.length===1?R[0]:R.length===2?R[1]:R[2])(this.startSpan())}}class D{static _instance=null;_activeTracer=null;_instrumentations=[];_noOpTracer;_proxyTracer;_tracers=new Set;constructor(){this._noOpTracer=new Cs,this._proxyTracer=new xs(this),Ss(()=>this.getCurrentContext())}static getInstance(){return D._instance??=new D,D._instance}static installAsGlobalTracerProvider(){let s=D.getInstance();return V.trace.setGlobalTracerProvider(s)}register(s){this._tracers.add(s)}deregister(s){this._tracers.delete(s)}setActive(s){let R=this.getCurrentSpan();if(R?.isRecording()){if(V.trace.getSpan(this.getCurrentContext())===R)return q.error("Cannot set_active() while a root span is active. Keeping existing tracer provider."),!1}return this.register(s),this._activeTracer=s,!0}getActiveTracer(){return this._activeTracer}getCurrentContext(){return d.getStore()??V.ROOT_CONTEXT}getCurrentSpan(){let s=this.getCurrentContext();return V.trace.getSpan(s)}hasActiveRootSpan(){if(!this.getCurrentSpan()?.isRecording())return!1;return!0}_getDelegateTracer(){let s=this._activeTracer;if(!s)return q.debug("No active tracer, returning NoOpTracer"),this._noOpTracer;return s._tracerProvider.getTracer(ER)}getTracer(s,R,o){return this._proxyTracer}addInstrumentation(s){try{Qs.registerInstrumentations({tracerProvider:this,instrumentations:[s]}),this._instrumentations.push(s)}catch(R){q.error(`Failed to add instrumentation: ${String(R)}`)}}useSpan(s,R,o,p,E){let j=this.getCurrentContext(),P=V.trace.setSpan(j,s);return d.run(P,()=>Es(P,()=>{try{let $=E();if($ instanceof Promise)return $.catch((h)=>{if(s.isRecording()){if(o)s.recordException(h);if(p){let U=h;s.setStatus({code:V.SpanStatusCode.ERROR,message:`${U.name}: ${U.message}`})}}throw h}).finally(()=>{if(R)s.end()});if(R)s.end();return $}catch($){if(s.isRecording()){if(o)s.recordException($);if(p){let h=$;s.setStatus({code:V.SpanStatusCode.ERROR,message:`${h.name}: ${h.message}`})}}if(R)s.end();throw $}}))}attachContext(s){d.enterWith(s)}withContext(s,R){return d.run(s,()=>Es(s,R))}async forceFlush(){let s=await Promise.allSettled(Array.from(this._tracers).map((R)=>R._tracerProvider.forceFlush()));for(let R of s)if(R.status==="rejected")q.error(`forceFlush failed: ${String(R.reason)}`)}async shutdown(){let s=await Promise.allSettled(Array.from(this._tracers).map((R)=>R._tracerProvider.shutdown()));for(let R of s)if(R.status==="rejected")q.error(`shutdown failed: ${String(R.reason)}`);this._activeTracer=null,this._tracers.clear()}}var Is=require("@opentelemetry/api");var ts=require("@opentelemetry/core");var ls="=",B=";",I=",",y="baggage",Hs=180,Ws=4096,Zs=8192;var Xs=require("@opentelemetry/api");function Ys(s){return s.reduce((R,o)=>{let p=`${R}${R!==""?I:""}${o}`;return p.length>Zs?R:p},"")}function Os(s){return s.getAllEntries().map(([R,o])=>{let p=`${encodeURIComponent(R)}=${encodeURIComponent(o.value)}`;if(o.metadata!==void 0)p+=B+o.metadata.toString();return p})}function us(s){let R=s.split(B);if(R.length<=0)return;let o=R.shift();if(!o)return;let p=o.indexOf(ls);if(p<=0)return;let E=decodeURIComponent(o.substring(0,p).trim()),j=decodeURIComponent(o.substring(p+1).trim()),P;if(R.length>0)P=Xs.baggageEntryMetadataFromString(R.join(B));return{key:E,value:j,metadata:P}}class x{inject(s,R,o){let p=C(s);if(!p||ts.isTracingSuppressed(s))return;let E=Os(p).filter((P)=>P.length<=Ws).slice(0,Hs),j=Ys(E);if(j.length>0)o.set(R,y,j)}extract(s,R,o){let p=o.get(R,y),E=Array.isArray(p)?p.join(I):p;if(!E)return s;let j={};if(E.length===0)return s;if(E.split(I).forEach(($)=>{let h=us($);if(h){let U={value:h.value};if(h.metadata)U.metadata=h.metadata;j[h.key]=U}}),Object.entries(j).length===0)return s;return N(s,M(j))}fields(){return[y]}}var M=n.propagation.createBaggage.bind(n.propagation),qs=n.createContextKey("baggage");function C(s){return s.getValue(qs)??void 0}function qR(){return C(D.getInstance().getCurrentContext())}function N(s,R){return s.setValue(qs,R)}function jR(s){return s.deleteValue(qs)}var K={};a(K,{setGlobalTextmap:()=>PR,inject:()=>mR,getGlobalTextmap:()=>js,extract:()=>Ps});var b=require("@opentelemetry/api"),A=require("@opentelemetry/core");var Ms=new A.CompositePropagator({propagators:[new A.W3CTraceContextPropagator,new x]});function js(){return Ms}function PR(s){Ms=s}function Ns(s){if(s!==void 0)return s;return D.getInstance().getCurrentContext()}function mR(s,R,o=b.defaultTextMapSetter){f("propagation.inject",()=>{js().inject(Ns(R),s,o)})}function Ps(s,R,o=b.defaultTextMapGetter){let p=Ns(R);return f("propagation.extract",()=>js().extract(p,s,o),p)??p}var ns="judgeval";class m{projectName;projectId;apiKey;organizationId;apiUrl;environment;serializer;_tracerProvider;_client;_enableMonitoring;constructor(s,R,o,p,E,j,P,$,h,U){this.projectName=s,this.projectId=R,this.apiKey=o,this.organizationId=p,this.apiUrl=E,this.environment=j,this.serializer=P,this._tracerProvider=$,this._client=h,this._enableMonitoring=U}setActive(){return D.getInstance().setActive(this)}static _getProxyProvider(){return D.getInstance()}static _getSerializer(){return m._getProxyProvider().getActiveTracer()?.serializer??k}static _getCurrentTraceAndSpanId(){let R=m._getProxyProvider().getCurrentSpan();if(!R?.isRecording())return null;let o=R.spanContext();if(!o.traceId||!(o.traceFlags&1))return null;return[o.traceId,o.spanId]}static _emitPartial(){f("BaseTracer._emitPartial",()=>{let s=m._getProxyProvider().getActiveTracer();if(!s)return;s.getSpanProcessor().emitPartial()})}static getCurrentSpan(){return m._getProxyProvider().getCurrentSpan()}static async forceFlush(){await m._getProxyProvider().forceFlush()}static async shutdown(){await m._getProxyProvider().shutdown()}static registerOTELInstrumentation(s){f("BaseTracer.registerOTELInstrumentation",()=>{m._getProxyProvider().addInstrumentation(s)})}static getOTELTracer(){return m._getProxyProvider().getTracer(ns)}static startSpan(s,R){let o=m.getOTELTracer().startSpan(s,{attributes:R});return m._emitPartial(),o}static startActiveSpan(s,R,o){return m.getOTELTracer().startActiveSpan(s,{attributes:o},(p)=>{m._emitPartial();let E=R(p);if(E instanceof Promise)return E.finally(()=>{p.end()});return p.end(),E})}static span(s,R){return m.startActiveSpan(s,(o)=>{try{let p=R(o);if(p instanceof Promise)return p.catch((E)=>{throw o.setStatus({code:v.SpanStatusCode.ERROR,message:String(E)}),o.recordException(E),E});return p}catch(p){throw o.setStatus({code:v.SpanStatusCode.ERROR,message:String(p)}),o.recordException(p),p}})}static with(s,R){return m.span(s,R)}static continueTrace(s,R){let o=m._getProxyProvider(),p=Ps(s);return o.withContext(p,()=>R(p))}static observe(s,R="span",o,p=!0,E=!0,j=!1){let P=m._getProxyProvider(),$=(h)=>{let U=o??h.name;return(...O)=>{return P.getTracer(ns).startActiveSpan(U,(F)=>{if(R)F.setAttribute("judgment.span_kind",R);try{if(p)F.setAttribute("judgment.input",t(DR(h,O),m._getSerializer()));m._emitPartial();let Q=h(...O);if(Q instanceof Promise)return Q.then((w)=>{if(E)F.setAttribute("judgment.output",t(w,m._getSerializer()));return w}).catch((w)=>{throw F.recordException(w),F.setStatus({code:v.SpanStatusCode.ERROR,message:String(w)}),w}).finally(()=>{F.end()});if(E)F.setAttribute("judgment.output",t(Q,m._getSerializer()));return F.end(),Q}catch(Q){throw F.recordException(Q),F.setStatus({code:v.SpanStatusCode.ERROR,message:String(Q)}),F.end(),Q}})}};if(!s)return $;return $(s)}static setSpanKind(s){f("BaseTracer.setSpanKind",()=>{if(!s)return;let R=m._getProxyProvider().getCurrentSpan();if(R?.isRecording())R.setAttribute("judgment.span_kind",s)})}static setLLMSpan(){m.setSpanKind("llm")}static setToolSpan(){m.setSpanKind("tool")}static setGeneralSpan(){m.setSpanKind("span")}static setAttribute(s,R){f("BaseTracer.setAttribute",()=>{let o=m._getProxyProvider().getCurrentSpan();if(!o?.isRecording())return;if(!s||R==null)return;o.setAttribute(s,t(R,m._getSerializer()))})}static setAttributes(s){for(let[R,o]of Object.entries(s))m.setAttribute(R,o)}static setInput(s){m.setAttribute("judgment.input",s)}static setOutput(s){m.setAttribute("judgment.output",s)}static recordLLMMetadata(s){f("BaseTracer.recordLLMMetadata",()=>{let R=m._getProxyProvider().getCurrentSpan();if(!R?.isRecording())return;if(typeof s.model==="string")R.setAttribute("judgment.llm.model",s.model);if(typeof s.provider==="string")R.setAttribute("judgment.llm.provider",s.provider);if(typeof s.non_cached_input_tokens==="number")R.setAttribute("judgment.usage.non_cached_input_tokens",s.non_cached_input_tokens);if(typeof s.output_tokens==="number")R.setAttribute("judgment.usage.output_tokens",s.output_tokens);if(typeof s.cache_read_input_tokens==="number")R.setAttribute("judgment.usage.cache_read_input_tokens",s.cache_read_input_tokens);if(typeof s.cache_creation_input_tokens==="number")R.setAttribute("judgment.usage.cache_creation_input_tokens",s.cache_creation_input_tokens);if(typeof s.total_cost_usd==="number")R.setAttribute("judgment.usage.total_cost_usd",s.total_cost_usd)})}static _setPropagatingBaggageKey(s,R){f("BaseTracer._setPropagatingBaggageKey",()=>{let o=m._getProxyProvider(),p=o.getCurrentSpan();if(!p?.isRecording())return;p.setAttribute(s,R);let E=o.getCurrentContext(),j=(C(E)??M()).setEntry(s,{value:R});o.attachContext(N(E,j))})}static setCustomerId(s){m._setPropagatingBaggageKey("judgment.customer_id",s)}static setCustomerUserId(s){m._setPropagatingBaggageKey("judgment.customer_user_id",s)}static setSessionId(s){m._setPropagatingBaggageKey("judgment.session_id",s)}static tag(s){f("BaseTracer.tag",()=>{if(!s||Array.isArray(s)&&s.length===0)return;let o=m._getProxyProvider().getActiveTracer();if(!o?.projectId||!o._client)return;let p=m._getCurrentTraceAndSpanId();if(!p)return;let[E]=p,j=Array.isArray(s)?s:[s];o._client.postV1projectsTracesByTraceIdTags(o.projectId,E,{tags:j}).catch((P)=>{q.error(`tag failed: ${String(P)}`)})})}static asyncEvaluate(s,R){f("BaseTracer.asyncEvaluate",()=>{let o=m._getProxyProvider(),p=o.getActiveTracer();if(!p?.projectId)return;let E=o.getCurrentSpan();if(!E?.isRecording())return;let j=p.getSpanProcessor(),P=E.spanContext(),$=j.stateIncr(P,"pending_evals_count"),h={project_id:p.projectId,eval_name:`async_evaluate_${s}_${$}`,judges:[{name:s}],examples:[{...R,example_id:vs.randomUUID(),created_at:new Date().toISOString(),trace_id:P.traceId,span_id:P.spanId}],is_offline:!1,is_behavior:!1},U=j.stateAppend(P,"pending_evals",h);E.setAttribute("judgment.pending_trace_eval",JSON.stringify(U))})}}function DR(s,R){try{let o=Fs(s).map((E)=>E.replace(/^\.\.\./,"").split("=")[0].trim()).filter((E)=>E.length>0),p={};return o.forEach((E,j)=>{if(j<R.length)p[E]=R[j]}),p}catch{return{}}}var zs=require("@opentelemetry/exporter-trace-otlp-http");class l{_delegate;constructor(s,R,o,p){this._delegate=new zs.OTLPTraceExporter({url:s,headers:{Authorization:`Bearer ${R}`,"X-Organization-Id":o,"X-Project-Id":p}})}export(s,R){q.info(`Exported ${s.length} spans`),this._delegate?.export(s,R)}shutdown(){return this._delegate?.shutdown()??Promise.resolve()}forceFlush(){return this._delegate?.forceFlush()??Promise.resolve()}}var Js=require("@opentelemetry/core");class H extends l{constructor(){super("https://api.judgmentlabs.ai/otel/v1/traces","","","");this._delegate=null}export(s,R){R({code:Js.ExportResultCode.SUCCESS})}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}}var Gs=require("@opentelemetry/sdk-trace-base");var e=()=>!0;class W{_keyPredicate;constructor(s=e){this._keyPredicate=s}onStart(s,R){let o=C(R)?.getAllEntries()??[];for(let[p,E]of o)if(this._keyPredicate(p))s.setAttribute(p,E.value)}onEnd(s){}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}function Z(s){return`${s.traceId}:${s.spanId}`}function UR(s){return s[0]===0&&s[1]===0}class X extends Gs.BatchSpanProcessor{tracer;_state=new Map;_spanFinalizers;_baggageProcessor;constructor(s,R,o){super(R,o);this.tracer=s,this._spanFinalizers=new FinalizationRegistry((p)=>{this._cleanupSpanState(p)}),this._baggageProcessor=new W}_cleanupSpanState(s){this._state.delete(s)}_registerSpan(s){let R=s.spanContext();if(!R.traceId||!R.spanId)return;let o=Z(R);this._spanFinalizers.register(s,o)}stateSet(s,R,o){let p=Z(s),E=this._state.get(p);if(!E)E=new Map,this._state.set(p,E);E.set(R,o)}stateGet(s,R,o){let p=Z(s),E=this._state.get(p);if(!E||!E.has(R))return o;return E.get(R)}stateIncr(s,R){let o=Z(s),p=this._state.get(o);if(!p)p=new Map,this._state.set(o,p);let E=p.get(R),j=typeof E==="number"?E:0;return p.set(R,j+1),j}stateAppend(s,R,o){let p=Z(s),E=this._state.get(p);if(!E)E=new Map,this._state.set(p,E);let j=E.get(R),P=Array.isArray(j)?[...j,o]:[o];return E.set(R,P),P}_emitSpan(s,R=!1){let o=s.spanContext();if(!o.traceId)return;let p=this.stateIncr(o,"judgment.update_id"),E={...s.attributes,"judgment.update_id":p};if(R)delete E["judgment.pending_trace_eval"];let j=Object.create(s);Object.defineProperty(j,"attributes",{value:E,writable:!1});let P=UR(s.endTime)?s.startTime:s.endTime;Object.defineProperty(j,"endTime",{value:P,writable:!1}),super.onEnd(j)}emitPartial(){f("JudgmentSpanProcessor.emitPartial",()=>{let R=D.getInstance().getCurrentSpan();if(!R?.isRecording())return;let o=R.spanContext();if(!o.traceId)return;if(this.stateGet(o,"disable_partial_emit",!1))return;this._emitSpan(R,!0)})}onStart(s,R){f("JudgmentSpanProcessor.onStart",()=>{this._baggageProcessor.onStart(s,R),this._registerSpan(s)})}onEnd(s){f("JudgmentSpanProcessor.onEnd",()=>{let R=s.spanContext();if(!R.traceId){super.onEnd(s);return}let o=Z(R);try{if(!this.stateGet(R,"cancelled",!1))this._emitSpan(s)}finally{this._cleanupSpanState(o)}})}}class Y extends X{constructor(){super(null,new H)}onStart(s,R){}onEnd(s){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}emitPartial(){}stateSet(s,R,o){}stateGet(s,R,o){return o}stateIncr(s,R){return 0}stateAppend(s,R,o){return[o]}}var r=require("@opentelemetry/resources"),hs=require("@opentelemetry/sdk-trace-node");async function _s(s,R={}){let{maxRetries:o=3,backoff:p=()=>1000,onRetry:E}=R,j;for(let P=1;P<=o;P++)try{return await s()}catch($){if(j=$,P===o)throw $;E?.(P,$),await new Promise((h)=>setTimeout(h,p(P)))}throw j}var cs=new Map,ms=new Map;async function Ts(s,R){let o=`org:${s.getOrganizationId()}:project:${R}`,p=cs.get(o);if(p)return p;let E=ms.get(o);if(E)return E;let j=(async()=>{q.info(`Resolving project ID for project: ${R}`);let P=await _s(async()=>{let h=(await s.postV1projectsResolve({project_name:R})).project_id;if(!h)throw Error(`Project ID not found for project: ${R}`);return h},{maxRetries:3,backoff:($)=>$*1000,onRetry:($,h)=>{q.warning(`Failed to resolve project ID for '${R}' (attempt ${$}): ${String(h)}`)}});return q.info(`Resolved project ID: ${P}`),cs.set(o,P),P})();ms.set(o,j);try{return await j}finally{ms.delete(o)}}var ks="0.9.5";var Ls=ks;class z extends m{_spanExporter=null;_spanProcessor=null;constructor(s,R,o,p,E,j,P,$,h,U){super(s,R,o,p,E,j,P,$,h,U)}static async init(s={}){let R=s.apiKey??G,o=s.organizationId??_,p=s.apiUrl??c,E=s.projectName??null,j=s.serializer??k,P=!0;if(!E)q.warning("project_name not provided. Tracer will not export spans."),P=!1;if(!R)q.warning("api_key not provided. Tracer will not export spans."),P=!1;if(!o)q.warning("organization_id not provided. Tracer will not export spans."),P=!1;if(!p)q.warning("api_url not provided. Tracer will not export spans."),P=!1;let $=null,h=null;if(P&&E&&R&&o&&p){if($=new u(p,R,o),h=await Ts($,E).catch(()=>null),!h)q.warning(`Project '${E}' not found. Tracer will not export spans.`),P=!1}let U={"service.name":E??"unknown","telemetry.sdk.name":"judgeval","telemetry.sdk.version":Ls};if(s.environment)U["deployment.environment"]=s.environment;if(s.resourceAttributes)Object.assign(U,s.resourceAttributes);let O=r.defaultResource().merge(r.resourceFromAttributes(U)),$s=new hs.NodeTracerProvider({resource:O,sampler:s.sampler,spanLimits:s.spanLimits}),F=new z(E,h,R,o,p,s.environment??null,j,$s,$,P);if(P){let w=new hs.NodeTracerProvider({resource:O,sampler:s.sampler,spanLimits:s.spanLimits,spanProcessors:[F.getSpanProcessor(),...s.spanProcessors??[]]});F._tracerProvider=w}if(D.getInstance().register(F),s.setActive??!0)F.setActive();return F}getSpanExporter(){if(this._spanExporter)return this._spanExporter;if(!this._enableMonitoring||!this.projectId||!this.apiKey||!this.organizationId||!this.apiUrl)this._spanExporter=new H;else{let s=this.apiUrl.endsWith("/")?this.apiUrl+"otel/v1/traces":this.apiUrl+"/otel/v1/traces";this._spanExporter=new l(s,this.apiKey,this.organizationId,this.projectId)}return this._spanExporter}getSpanProcessor(){if(this._spanProcessor)return this._spanProcessor;if(!this._enableMonitoring)this._spanProcessor=new Y;else this._spanProcessor=new X(this,this.getSpanExporter());return this._spanProcessor}}
3
+ ${p.stack}`:"";return q.error(`[Caught] An exception was raised in ${s}: ${String(p)}${E}`),o}}var ss;function sR(s,R){if(typeof R==="bigint")return R.toString();if(typeof R==="object"&&R!==null){if(ss.has(R))return"[Circular]";ss.add(R)}return R}function k(s){try{let R=JSON.stringify(s);if(typeof R==="string")return R;return String(R)}catch{try{ss=new WeakSet;let R=JSON.stringify(s,sR);return typeof R==="string"?R:String(s)}catch(R){return q.error(`safeStringify failed: ${R}`),String(s)}}}function t(s,R){if(typeof s==="string"||typeof s==="number"||typeof s==="boolean")return s;return R(s)}var i={};a(i,{setBaggage:()=>N,getBaggage:()=>C,getActiveBaggage:()=>qR,deleteBaggage:()=>jR,createBaggage:()=>M,baggageEntryMetadataFromString:()=>Is.baggageEntryMetadataFromString,JudgmentBaggagePropagator:()=>x});var n=require("@opentelemetry/api");var V=require("@opentelemetry/api"),Qs=require("@opentelemetry/instrumentation"),ws=require("async_hooks");var S=require("@opentelemetry/api"),ps=require("async_hooks"),fs=!1,Rs=null,Vs=new ps.AsyncLocalStorage,L=new ps.AsyncLocalStorage,RR=S.context.active.bind(S.context),oR=S.context.with.bind(S.context),pR=S.context.bind.bind(S.context);function os(){return Vs.getStore()===!0}function Ss(s){if(Rs=s,fs)return;let R=S.context;R.active=()=>{if(!os())return RR();let o=L.getStore();if(o)return o;return Rs?Rs():S.ROOT_CONTEXT},R.with=(o,p,E,...j)=>{if(!os())return oR(o,p,E,...j);return L.run(o,()=>p.apply(E,j))},R.bind=(o,p)=>{if(!os())return pR(o,p);if(typeof p!=="function")return p;let E=p;return(...j)=>L.run(o,()=>E(...j))},fs=!0}function Es(s,R){return Vs.run(!0,()=>L.run(s,R))}var ER="judgeval",d=new ws.AsyncLocalStorage;class xs{_provider;constructor(s){this._provider=s}startSpan(s,R,o){let p=o??this._provider.getCurrentContext();return this._provider._getDelegateTracer().startSpan(s,R,p)}startActiveSpan(s,...R){let o={},p=this._provider.getCurrentContext(),E;if(R.length===1)E=R[0];else if(R.length===2)o=R[0],E=R[1];else o=R[0],p=R[1],E=R[2];let j=this.startSpan(s,o,p);return this._provider.useSpan(j,!1,!1,!1,()=>E(j))}}class Cs{startSpan(){return V.trace.wrapSpanContext(V.INVALID_SPAN_CONTEXT)}startActiveSpan(s,...R){return(R.length===1?R[0]:R.length===2?R[1]:R[2])(this.startSpan())}}class D{static _instance=null;_activeTracer=null;_instrumentations=[];_noOpTracer;_proxyTracer;_tracers=new Set;constructor(){this._noOpTracer=new Cs,this._proxyTracer=new xs(this),Ss(()=>this.getCurrentContext())}static getInstance(){return D._instance??=new D,D._instance}static installAsGlobalTracerProvider(){let s=D.getInstance();return V.trace.setGlobalTracerProvider(s)}register(s){this._tracers.add(s)}deregister(s){this._tracers.delete(s)}setActive(s){let R=this.getCurrentSpan();if(R?.isRecording()){if(V.trace.getSpan(this.getCurrentContext())===R)return q.error("Cannot set_active() while a root span is active. Keeping existing tracer provider."),!1}return this.register(s),this._activeTracer=s,!0}getActiveTracer(){return this._activeTracer}getCurrentContext(){return d.getStore()??V.ROOT_CONTEXT}getCurrentSpan(){let s=this.getCurrentContext();return V.trace.getSpan(s)}hasActiveRootSpan(){if(!this.getCurrentSpan()?.isRecording())return!1;return!0}_getDelegateTracer(){let s=this._activeTracer;if(!s)return q.debug("No active tracer, returning NoOpTracer"),this._noOpTracer;return s._tracerProvider.getTracer(ER)}getTracer(s,R,o){return this._proxyTracer}addInstrumentation(s){try{Qs.registerInstrumentations({tracerProvider:this,instrumentations:[s]}),this._instrumentations.push(s)}catch(R){q.error(`Failed to add instrumentation: ${String(R)}`)}}useSpan(s,R,o,p,E){let j=this.getCurrentContext(),P=V.trace.setSpan(j,s);return d.run(P,()=>Es(P,()=>{try{let $=E();if($ instanceof Promise)return $.catch((h)=>{if(s.isRecording()){if(o)s.recordException(h);if(p){let U=h;s.setStatus({code:V.SpanStatusCode.ERROR,message:`${U.name}: ${U.message}`})}}throw h}).finally(()=>{if(R)s.end()});if(R)s.end();return $}catch($){if(s.isRecording()){if(o)s.recordException($);if(p){let h=$;s.setStatus({code:V.SpanStatusCode.ERROR,message:`${h.name}: ${h.message}`})}}if(R)s.end();throw $}}))}attachContext(s){d.enterWith(s)}withContext(s,R){return d.run(s,()=>Es(s,R))}async forceFlush(){let s=await Promise.allSettled(Array.from(this._tracers).map((R)=>R._tracerProvider.forceFlush()));for(let R of s)if(R.status==="rejected")q.error(`forceFlush failed: ${String(R.reason)}`)}async shutdown(){let s=await Promise.allSettled(Array.from(this._tracers).map((R)=>R._tracerProvider.shutdown()));for(let R of s)if(R.status==="rejected")q.error(`shutdown failed: ${String(R.reason)}`);this._activeTracer=null,this._tracers.clear()}}var Is=require("@opentelemetry/api");var ts=require("@opentelemetry/core");var ls="=",B=";",I=",",y="baggage",Hs=180,Ws=4096,Zs=8192;var Xs=require("@opentelemetry/api");function Ys(s){return s.reduce((R,o)=>{let p=`${R}${R!==""?I:""}${o}`;return p.length>Zs?R:p},"")}function Os(s){return s.getAllEntries().map(([R,o])=>{let p=`${encodeURIComponent(R)}=${encodeURIComponent(o.value)}`;if(o.metadata!==void 0)p+=B+o.metadata.toString();return p})}function us(s){let R=s.split(B);if(R.length<=0)return;let o=R.shift();if(!o)return;let p=o.indexOf(ls);if(p<=0)return;let E=decodeURIComponent(o.substring(0,p).trim()),j=decodeURIComponent(o.substring(p+1).trim()),P;if(R.length>0)P=Xs.baggageEntryMetadataFromString(R.join(B));return{key:E,value:j,metadata:P}}class x{inject(s,R,o){let p=C(s);if(!p||ts.isTracingSuppressed(s))return;let E=Os(p).filter((P)=>P.length<=Ws).slice(0,Hs),j=Ys(E);if(j.length>0)o.set(R,y,j)}extract(s,R,o){let p=o.get(R,y),E=Array.isArray(p)?p.join(I):p;if(!E)return s;let j={};if(E.length===0)return s;if(E.split(I).forEach(($)=>{let h=us($);if(h){let U={value:h.value};if(h.metadata)U.metadata=h.metadata;j[h.key]=U}}),Object.entries(j).length===0)return s;return N(s,M(j))}fields(){return[y]}}var M=n.propagation.createBaggage.bind(n.propagation),qs=n.createContextKey("baggage");function C(s){return s.getValue(qs)??void 0}function qR(){return C(D.getInstance().getCurrentContext())}function N(s,R){return s.setValue(qs,R)}function jR(s){return s.deleteValue(qs)}var K={};a(K,{setGlobalTextmap:()=>PR,inject:()=>mR,getGlobalTextmap:()=>js,extract:()=>Ps});var b=require("@opentelemetry/api"),A=require("@opentelemetry/core");var Ms=new A.CompositePropagator({propagators:[new A.W3CTraceContextPropagator,new x]});function js(){return Ms}function PR(s){Ms=s}function Ns(s){if(s!==void 0)return s;return D.getInstance().getCurrentContext()}function mR(s,R,o=b.defaultTextMapSetter){f("propagation.inject",()=>{js().inject(Ns(R),s,o)})}function Ps(s,R,o=b.defaultTextMapGetter){let p=Ns(R);return f("propagation.extract",()=>js().extract(p,s,o),p)??p}var ns="judgeval";class m{projectName;projectId;apiKey;organizationId;apiUrl;environment;serializer;_tracerProvider;_client;_enableMonitoring;constructor(s,R,o,p,E,j,P,$,h,U){this.projectName=s,this.projectId=R,this.apiKey=o,this.organizationId=p,this.apiUrl=E,this.environment=j,this.serializer=P,this._tracerProvider=$,this._client=h,this._enableMonitoring=U}setActive(){return D.getInstance().setActive(this)}static _getProxyProvider(){return D.getInstance()}static _getSerializer(){return m._getProxyProvider().getActiveTracer()?.serializer??k}static _getCurrentTraceAndSpanId(){let R=m._getProxyProvider().getCurrentSpan();if(!R?.isRecording())return null;let o=R.spanContext();if(!o.traceId||!(o.traceFlags&1))return null;return[o.traceId,o.spanId]}static _emitPartial(){f("BaseTracer._emitPartial",()=>{let s=m._getProxyProvider().getActiveTracer();if(!s)return;s.getSpanProcessor().emitPartial()})}static getCurrentSpan(){return m._getProxyProvider().getCurrentSpan()}static async forceFlush(){await m._getProxyProvider().forceFlush()}static async shutdown(){await m._getProxyProvider().shutdown()}static registerOTELInstrumentation(s){f("BaseTracer.registerOTELInstrumentation",()=>{m._getProxyProvider().addInstrumentation(s)})}static getOTELTracer(){return m._getProxyProvider().getTracer(ns)}static startSpan(s,R){let o=m.getOTELTracer().startSpan(s,{attributes:R});return m._emitPartial(),o}static startActiveSpan(s,R,o){return m.getOTELTracer().startActiveSpan(s,{attributes:o},(p)=>{m._emitPartial();try{let E=R(p);if(E instanceof Promise)return E.finally(()=>{p.end()});return p.end(),E}catch(E){throw p.end(),E}})}static span(s,R){return m.startActiveSpan(s,(o)=>{try{let p=R(o);if(p instanceof Promise)return p.catch((E)=>{throw o.setStatus({code:v.SpanStatusCode.ERROR,message:String(E)}),o.recordException(E),E});return p}catch(p){throw o.setStatus({code:v.SpanStatusCode.ERROR,message:String(p)}),o.recordException(p),p}})}static with(s,R){return m.span(s,R)}static continueTrace(s,R){let o=m._getProxyProvider(),p=Ps(s);return o.withContext(p,()=>R(p))}static observe(s,R="span",o,p=!0,E=!0,j=!1){let P=m._getProxyProvider(),$=(h)=>{let U=o??h.name;return(...O)=>{return P.getTracer(ns).startActiveSpan(U,(F)=>{if(R)F.setAttribute("judgment.span_kind",R);try{if(p)F.setAttribute("judgment.input",t(DR(h,O),m._getSerializer()));m._emitPartial();let Q=h(...O);if(Q instanceof Promise)return Q.then((w)=>{if(E)F.setAttribute("judgment.output",t(w,m._getSerializer()));return w}).catch((w)=>{throw F.recordException(w),F.setStatus({code:v.SpanStatusCode.ERROR,message:String(w)}),w}).finally(()=>{F.end()});if(E)F.setAttribute("judgment.output",t(Q,m._getSerializer()));return F.end(),Q}catch(Q){throw F.recordException(Q),F.setStatus({code:v.SpanStatusCode.ERROR,message:String(Q)}),F.end(),Q}})}};if(!s)return $;return $(s)}static setSpanKind(s){f("BaseTracer.setSpanKind",()=>{if(!s)return;let R=m._getProxyProvider().getCurrentSpan();if(R?.isRecording())R.setAttribute("judgment.span_kind",s)})}static setLLMSpan(){m.setSpanKind("llm")}static setToolSpan(){m.setSpanKind("tool")}static setGeneralSpan(){m.setSpanKind("span")}static setAttribute(s,R){f("BaseTracer.setAttribute",()=>{let o=m._getProxyProvider().getCurrentSpan();if(!o?.isRecording())return;if(!s||R==null)return;o.setAttribute(s,t(R,m._getSerializer()))})}static setAttributes(s){for(let[R,o]of Object.entries(s))m.setAttribute(R,o)}static setInput(s){m.setAttribute("judgment.input",s)}static setOutput(s){m.setAttribute("judgment.output",s)}static recordLLMMetadata(s){f("BaseTracer.recordLLMMetadata",()=>{let R=m._getProxyProvider().getCurrentSpan();if(!R?.isRecording())return;if(typeof s.model==="string")R.setAttribute("judgment.llm.model",s.model);if(typeof s.provider==="string")R.setAttribute("judgment.llm.provider",s.provider);if(typeof s.non_cached_input_tokens==="number")R.setAttribute("judgment.usage.non_cached_input_tokens",s.non_cached_input_tokens);if(typeof s.output_tokens==="number")R.setAttribute("judgment.usage.output_tokens",s.output_tokens);if(typeof s.cache_read_input_tokens==="number")R.setAttribute("judgment.usage.cache_read_input_tokens",s.cache_read_input_tokens);if(typeof s.cache_creation_input_tokens==="number")R.setAttribute("judgment.usage.cache_creation_input_tokens",s.cache_creation_input_tokens);if(typeof s.total_cost_usd==="number")R.setAttribute("judgment.usage.total_cost_usd",s.total_cost_usd)})}static _setPropagatingBaggageKey(s,R){f("BaseTracer._setPropagatingBaggageKey",()=>{let o=m._getProxyProvider(),p=o.getCurrentSpan();if(!p?.isRecording())return;p.setAttribute(s,R);let E=o.getCurrentContext(),j=(C(E)??M()).setEntry(s,{value:R});o.attachContext(N(E,j))})}static setCustomerId(s){m._setPropagatingBaggageKey("judgment.customer_id",s)}static setCustomerUserId(s){m._setPropagatingBaggageKey("judgment.customer_user_id",s)}static setSessionId(s){m._setPropagatingBaggageKey("judgment.session_id",s)}static tag(s){f("BaseTracer.tag",()=>{if(!s||Array.isArray(s)&&s.length===0)return;let o=m._getProxyProvider().getActiveTracer();if(!o?.projectId||!o._client)return;let p=m._getCurrentTraceAndSpanId();if(!p)return;let[E]=p,j=Array.isArray(s)?s:[s];o._client.postV1projectsTracesByTraceIdTags(o.projectId,E,{tags:j}).catch((P)=>{q.error(`tag failed: ${String(P)}`)})})}static asyncEvaluate(s,R){f("BaseTracer.asyncEvaluate",()=>{let o=m._getProxyProvider(),p=o.getActiveTracer();if(!p?.projectId)return;let E=o.getCurrentSpan();if(!E?.isRecording())return;let j=p.getSpanProcessor(),P=E.spanContext(),$=j.stateIncr(P,"pending_evals_count"),h={project_id:p.projectId,eval_name:`async_evaluate_${s}_${$}`,judges:[{name:s}],examples:[{...R,example_id:vs.randomUUID(),created_at:new Date().toISOString(),trace_id:P.traceId,span_id:P.spanId}],is_offline:!1,is_behavior:!1},U=j.stateAppend(P,"pending_evals",h);E.setAttribute("judgment.pending_trace_eval",JSON.stringify(U))})}}function DR(s,R){try{let o=Fs(s).map((E)=>E.replace(/^\.\.\./,"").split("=")[0].trim()).filter((E)=>E.length>0),p={};return o.forEach((E,j)=>{if(j<R.length)p[E]=R[j]}),p}catch{return{}}}var zs=require("@opentelemetry/exporter-trace-otlp-http");class l{_delegate;constructor(s,R,o,p){this._delegate=new zs.OTLPTraceExporter({url:s,headers:{Authorization:`Bearer ${R}`,"X-Organization-Id":o,"X-Project-Id":p}})}export(s,R){q.info(`Exported ${s.length} spans`),this._delegate?.export(s,R)}shutdown(){return this._delegate?.shutdown()??Promise.resolve()}forceFlush(){return this._delegate?.forceFlush()??Promise.resolve()}}var Js=require("@opentelemetry/core");class H extends l{constructor(){super("https://api.judgmentlabs.ai/otel/v1/traces","","","");this._delegate=null}export(s,R){R({code:Js.ExportResultCode.SUCCESS})}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}}var Gs=require("@opentelemetry/sdk-trace-base");var e=()=>!0;class W{_keyPredicate;constructor(s=e){this._keyPredicate=s}onStart(s,R){let o=C(R)?.getAllEntries()??[];for(let[p,E]of o)if(this._keyPredicate(p))s.setAttribute(p,E.value)}onEnd(s){}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}function Z(s){return`${s.traceId}:${s.spanId}`}function UR(s){return s[0]===0&&s[1]===0}class X extends Gs.BatchSpanProcessor{tracer;_state=new Map;_spanFinalizers;_baggageProcessor;constructor(s,R,o){super(R,o);this.tracer=s,this._spanFinalizers=new FinalizationRegistry((p)=>{this._cleanupSpanState(p)}),this._baggageProcessor=new W}_cleanupSpanState(s){this._state.delete(s)}_registerSpan(s){let R=s.spanContext();if(!R.traceId||!R.spanId)return;let o=Z(R);this._spanFinalizers.register(s,o)}stateSet(s,R,o){let p=Z(s),E=this._state.get(p);if(!E)E=new Map,this._state.set(p,E);E.set(R,o)}stateGet(s,R,o){let p=Z(s),E=this._state.get(p);if(!E||!E.has(R))return o;return E.get(R)}stateIncr(s,R){let o=Z(s),p=this._state.get(o);if(!p)p=new Map,this._state.set(o,p);let E=p.get(R),j=typeof E==="number"?E:0;return p.set(R,j+1),j}stateAppend(s,R,o){let p=Z(s),E=this._state.get(p);if(!E)E=new Map,this._state.set(p,E);let j=E.get(R),P=Array.isArray(j)?[...j,o]:[o];return E.set(R,P),P}_emitSpan(s,R=!1){let o=s.spanContext();if(!o.traceId)return;let p=this.stateIncr(o,"judgment.update_id"),E={...s.attributes,"judgment.update_id":p};if(R)delete E["judgment.pending_trace_eval"];let j=Object.create(s);Object.defineProperty(j,"attributes",{value:E,writable:!1});let P=UR(s.endTime)?s.startTime:s.endTime;Object.defineProperty(j,"endTime",{value:P,writable:!1}),super.onEnd(j)}emitPartial(){f("JudgmentSpanProcessor.emitPartial",()=>{let R=D.getInstance().getCurrentSpan();if(!R?.isRecording())return;let o=R.spanContext();if(!o.traceId)return;if(this.stateGet(o,"disable_partial_emit",!1))return;this._emitSpan(R,!0)})}onStart(s,R){f("JudgmentSpanProcessor.onStart",()=>{this._baggageProcessor.onStart(s,R),this._registerSpan(s)})}onEnd(s){f("JudgmentSpanProcessor.onEnd",()=>{let R=s.spanContext();if(!R.traceId){super.onEnd(s);return}let o=Z(R);try{if(!this.stateGet(R,"cancelled",!1))this._emitSpan(s)}finally{this._cleanupSpanState(o)}})}}class Y extends X{constructor(){super(null,new H)}onStart(s,R){}onEnd(s){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}emitPartial(){}stateSet(s,R,o){}stateGet(s,R,o){return o}stateIncr(s,R){return 0}stateAppend(s,R,o){return[o]}}var r=require("@opentelemetry/resources"),hs=require("@opentelemetry/sdk-trace-node");async function _s(s,R={}){let{maxRetries:o=3,backoff:p=()=>1000,onRetry:E}=R,j;for(let P=1;P<=o;P++)try{return await s()}catch($){if(j=$,P===o)throw $;E?.(P,$),await new Promise((h)=>setTimeout(h,p(P)))}throw j}var cs=new Map,ms=new Map;async function Ts(s,R){let o=`org:${s.getOrganizationId()}:project:${R}`,p=cs.get(o);if(p)return p;let E=ms.get(o);if(E)return E;let j=(async()=>{q.info(`Resolving project ID for project: ${R}`);let P=await _s(async()=>{let h=(await s.postV1projectsResolve({project_name:R})).project_id;if(!h)throw Error(`Project ID not found for project: ${R}`);return h},{maxRetries:3,backoff:($)=>$*1000,onRetry:($,h)=>{q.warning(`Failed to resolve project ID for '${R}' (attempt ${$}): ${String(h)}`)}});return q.info(`Resolved project ID: ${P}`),cs.set(o,P),P})();ms.set(o,j);try{return await j}finally{ms.delete(o)}}var ks="0.9.6";var Ls=ks;class z extends m{_spanExporter=null;_spanProcessor=null;constructor(s,R,o,p,E,j,P,$,h,U){super(s,R,o,p,E,j,P,$,h,U)}static async init(s={}){let R=s.apiKey??G,o=s.organizationId??_,p=s.apiUrl??c,E=s.projectName??null,j=s.serializer??k,P=!0;if(!E)q.warning("project_name not provided. Tracer will not export spans."),P=!1;if(!R)q.warning("api_key not provided. Tracer will not export spans."),P=!1;if(!o)q.warning("organization_id not provided. Tracer will not export spans."),P=!1;if(!p)q.warning("api_url not provided. Tracer will not export spans."),P=!1;let $=null,h=null;if(P&&E&&R&&o&&p){if($=new u(p,R,o),h=await Ts($,E).catch(()=>null),!h)q.warning(`Project '${E}' not found. Tracer will not export spans.`),P=!1}let U={"service.name":E??"unknown","telemetry.sdk.name":"judgeval","telemetry.sdk.version":Ls};if(s.environment)U["deployment.environment"]=s.environment;if(s.resourceAttributes)Object.assign(U,s.resourceAttributes);let O=r.defaultResource().merge(r.resourceFromAttributes(U)),$s=new hs.NodeTracerProvider({resource:O,sampler:s.sampler,spanLimits:s.spanLimits}),F=new z(E,h,R,o,p,s.environment??null,j,$s,$,P);if(P){let w=new hs.NodeTracerProvider({resource:O,sampler:s.sampler,spanLimits:s.spanLimits,spanProcessors:[F.getSpanProcessor(),...s.spanProcessors??[]]});F._tracerProvider=w}if(D.getInstance().register(F),s.setActive??!0)F.setActive();return F}getSpanExporter(){if(this._spanExporter)return this._spanExporter;if(!this._enableMonitoring||!this.projectId||!this.apiKey||!this.organizationId||!this.apiUrl)this._spanExporter=new H;else{let s=this.apiUrl.endsWith("/")?this.apiUrl+"otel/v1/traces":this.apiUrl+"/otel/v1/traces";this._spanExporter=new l(s,this.apiKey,this.organizationId,this.projectId)}return this._spanExporter}getSpanProcessor(){if(this._spanProcessor)return this._spanProcessor;if(!this._enableMonitoring)this._spanProcessor=new Y;else this._spanProcessor=new X(this,this.getSpanExporter());return this._spanProcessor}}
4
4
 
5
- //# debugId=6BBFCA2BBAC6BB7264756E2164756E21
5
+ //# debugId=A8450B90F01555D664756E2164756E21
6
6
  //# sourceMappingURL=index.cjs.map
@@ -5,13 +5,13 @@
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_LOG_LEVEL = getEnvVar(\"JUDGMENT_LOG_LEVEL\", \"warn\");\n",
6
6
  "// Auto-generated by scripts/generate-client.ts\n// DO NOT EDIT MANUALLY\n\nimport type {\n AddProjectRequest,\n AddProjectResponse,\n AddToRunEvalQueueExamplesResponse,\n AddToRunEvalQueueTracesResponse,\n AddTraceTagsRequest,\n AddTraceTagsResponse,\n CreateDatasetRequest,\n CreateDatasetResponse,\n CustomScorerExistsResponse,\n DeleteProjectResponse,\n E2EFetchSpanScoreRequest,\n E2EFetchSpanScoreResponse,\n E2EFetchTraceResponse,\n E2ETracesPerProjectResponse,\n ExampleEvaluationRun,\n FetchExperimentRunResponse,\n FetchPromptResponse,\n FetchPromptScorersResponse,\n GetPromptVersionsResponse,\n InsertExamplesRequest,\n InsertExamplesResponse,\n InsertPromptRequest,\n InsertPromptResponse,\n LogEvalResultsExamplesRequest,\n LogEvalResultsExamplesResponse,\n LogEvalResultsRequest,\n LogEvalResultsResponse,\n PullAllDatasetsResponse,\n PullDatasetResponse,\n ResolveProjectRequest,\n ResolveProjectResponse,\n ScorerExistsResponse,\n TagPromptRequest,\n TagPromptResponse,\n TraceEvaluationRun,\n UntagPromptRequest,\n UntagPromptResponse,\n UploadCustomScorerResponse,\n} 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 getApiKey(): string {\n return this.apiKey;\n }\n getOrganizationId(): string {\n return this.organizationId;\n }\n\n private async request<T>(\n method: string,\n url: string,\n body?: unknown,\n ): Promise<T> {\n const response = await fetch(url, {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n \"X-Organization-Id\": this.organizationId,\n },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`HTTP ${response.status}: ${text}`);\n }\n return response.json() as T;\n }\n\n async postOtelV1traces(): Promise<unknown> {\n const url = this.baseUrl + \"/otel/v1/traces\";\n return this.request(\"POST\", url, {});\n }\n\n async postV1projectsResolve(\n payload: ResolveProjectRequest,\n ): Promise<ResolveProjectResponse> {\n const url = this.baseUrl + \"/v1/projects/resolve/\";\n return this.request(\"POST\", url, payload);\n }\n\n async postV1projects(\n payload: AddProjectRequest,\n ): Promise<AddProjectResponse> {\n const url = this.baseUrl + \"/v1/projects\";\n return this.request(\"POST\", url, payload);\n }\n\n async deleteV1projects(projectId: string): Promise<DeleteProjectResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}`;\n return this.request(\"DELETE\", url, {});\n }\n\n async postV1projectsDatasets(\n projectId: string,\n payload: CreateDatasetRequest,\n ): Promise<CreateDatasetResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/datasets`;\n return this.request(\"POST\", url, payload);\n }\n\n async getV1projectsDatasets(\n projectId: string,\n ): Promise<PullAllDatasetsResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/datasets`;\n return this.request(\"GET\", url, undefined);\n }\n\n async postV1projectsDatasetsByDatasetNameExamples(\n projectId: string,\n datasetName: string,\n payload: InsertExamplesRequest,\n ): Promise<InsertExamplesResponse> {\n const url =\n this.baseUrl +\n `/v1/projects/${projectId}/datasets/${datasetName}/examples`;\n return this.request(\"POST\", url, payload);\n }\n\n async getV1projectsDatasetsByDatasetName(\n projectId: string,\n datasetName: string,\n ): Promise<PullDatasetResponse> {\n const url =\n this.baseUrl + `/v1/projects/${projectId}/datasets/${datasetName}`;\n return this.request(\"GET\", url, undefined);\n }\n\n async postV1projectsEvaluateExamples(\n projectId: string,\n payload: ExampleEvaluationRun,\n ): Promise<unknown> {\n const url = this.baseUrl + `/v1/projects/${projectId}/evaluate/examples`;\n return this.request(\"POST\", url, payload);\n }\n\n async postV1projectsEvaluateTraces(\n projectId: string,\n payload: TraceEvaluationRun,\n ): Promise<unknown> {\n const url = this.baseUrl + `/v1/projects/${projectId}/evaluate/traces`;\n return this.request(\"POST\", url, payload);\n }\n\n async postV1projectsEvalResults(\n projectId: string,\n payload: LogEvalResultsRequest,\n ): Promise<LogEvalResultsResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/eval-results`;\n return this.request(\"POST\", url, payload);\n }\n\n async postV1projectsEvalResultsExamples(\n projectId: string,\n payload: LogEvalResultsExamplesRequest,\n ): Promise<LogEvalResultsExamplesResponse> {\n const url =\n this.baseUrl + `/v1/projects/${projectId}/eval-results/examples`;\n return this.request(\"POST\", url, payload);\n }\n\n async getV1projectsExperimentsByRunId(\n projectId: string,\n runId: string,\n ): Promise<FetchExperimentRunResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/experiments/${runId}`;\n return this.request(\"GET\", url, undefined);\n }\n\n async postV1projectsEvalQueueExamples(\n projectId: string,\n payload: ExampleEvaluationRun,\n ): Promise<AddToRunEvalQueueExamplesResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/eval-queue/examples`;\n return this.request(\"POST\", url, payload);\n }\n\n async postV1projectsEvalQueueTraces(\n projectId: string,\n payload: TraceEvaluationRun,\n ): Promise<AddToRunEvalQueueTracesResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/eval-queue/traces`;\n return this.request(\"POST\", url, payload);\n }\n\n async getV1projectsPromptsByName(\n projectId: string,\n name: string,\n commit_id?: string,\n tag?: string,\n ): Promise<FetchPromptResponse> {\n const params = new URLSearchParams();\n if (commit_id !== undefined) params.set(\"commit_id\", commit_id);\n if (tag !== undefined) params.set(\"tag\", tag);\n const url =\n this.baseUrl +\n `/v1/projects/${projectId}/prompts/${name}` +\n (params.toString() ? \"?\" + params.toString() : \"\");\n return this.request(\"GET\", url, undefined);\n }\n\n async postV1projectsPrompts(\n projectId: string,\n payload: InsertPromptRequest,\n ): Promise<InsertPromptResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/prompts`;\n return this.request(\"POST\", url, payload);\n }\n\n async postV1projectsPromptsByNameTags(\n projectId: string,\n name: string,\n payload: TagPromptRequest,\n ): Promise<TagPromptResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/prompts/${name}/tags`;\n return this.request(\"POST\", url, payload);\n }\n\n async deleteV1projectsPromptsByNameTags(\n projectId: string,\n name: string,\n payload: UntagPromptRequest,\n ): Promise<UntagPromptResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/prompts/${name}/tags`;\n return this.request(\"DELETE\", url, payload);\n }\n\n async getV1projectsPromptsByNameVersions(\n projectId: string,\n name: string,\n ): Promise<GetPromptVersionsResponse> {\n const url =\n this.baseUrl + `/v1/projects/${projectId}/prompts/${name}/versions`;\n return this.request(\"GET\", url, undefined);\n }\n\n async getV1projectsScorers(\n projectId: string,\n names?: string,\n is_trace?: string,\n ): Promise<FetchPromptScorersResponse> {\n const params = new URLSearchParams();\n if (names !== undefined) params.set(\"names\", names);\n if (is_trace !== undefined) params.set(\"is_trace\", is_trace);\n const url =\n this.baseUrl +\n `/v1/projects/${projectId}/scorers` +\n (params.toString() ? \"?\" + params.toString() : \"\");\n return this.request(\"GET\", url, undefined);\n }\n\n async getV1projectsScorersByNameExists(\n projectId: string,\n name: string,\n ): Promise<ScorerExistsResponse> {\n const url =\n this.baseUrl + `/v1/projects/${projectId}/scorers/${name}/exists`;\n return this.request(\"GET\", url, undefined);\n }\n\n async postV1projectsScorersCustom(projectId: string): Promise<unknown> {\n const url = this.baseUrl + `/v1/projects/${projectId}/scorers/custom`;\n return this.request(\"POST\", url, {});\n }\n\n async postV1projectsScorersCustomBundle(\n projectId: string,\n ): Promise<UploadCustomScorerResponse> {\n const url =\n this.baseUrl + `/v1/projects/${projectId}/scorers/custom/bundle`;\n return this.request(\"POST\", url, {});\n }\n\n async getV1projectsScorersCustomByNameExists(\n projectId: string,\n name: string,\n ): Promise<CustomScorerExistsResponse> {\n const url =\n this.baseUrl + `/v1/projects/${projectId}/scorers/custom/${name}/exists`;\n return this.request(\"GET\", url, undefined);\n }\n\n async postV1projectsTracesByTraceIdTags(\n projectId: string,\n traceId: string,\n payload: AddTraceTagsRequest,\n ): Promise<AddTraceTagsResponse> {\n const url =\n this.baseUrl + `/v1/projects/${projectId}/traces/${traceId}/tags`;\n return this.request(\"POST\", url, payload);\n }\n\n async getV1e2eFetchTraceByProjectNameByTraceId(\n projectName: string,\n traceId: string,\n ): Promise<E2EFetchTraceResponse> {\n const url = this.baseUrl + `/v1/e2e_fetch_trace/${projectName}/${traceId}`;\n return this.request(\"GET\", url, undefined);\n }\n\n async getV1e2eTracesPerProject(\n projectId: string,\n limit?: string,\n offset?: string,\n ): Promise<E2ETracesPerProjectResponse> {\n const params = new URLSearchParams();\n if (limit !== undefined) params.set(\"limit\", limit);\n if (offset !== undefined) params.set(\"offset\", offset);\n const url =\n this.baseUrl +\n `/v1/e2e_traces_per_project/${projectId}` +\n (params.toString() ? \"?\" + params.toString() : \"\");\n return this.request(\"GET\", url, undefined);\n }\n\n async postV1e2eFetchSpanScore(\n payload: E2EFetchSpanScoreRequest,\n ): Promise<E2EFetchSpanScoreResponse> {\n const url = this.baseUrl + \"/v1/e2e_fetch_span_score/\";\n return this.request(\"POST\", url, payload);\n }\n}\n",
7
7
  "import { JUDGMENT_API_KEY, JUDGMENT_API_URL, JUDGMENT_ORG_ID } from \"./env\";\nimport { JudgmentApiClient } from \"./internal/api\";\n/**\n * Configuration options for the Judgeval client.\n *\n * Credentials are resolved in order: explicit arguments first, then\n * environment variables `JUDGMENT_API_KEY`, `JUDGMENT_ORG_ID`, and\n * `JUDGMENT_API_URL`.\n */\nexport interface JudgevalConfig {\n /** Judgment API key. Defaults to `JUDGMENT_API_KEY` env var. */\n apiKey?: string;\n /** Judgment organization ID. Defaults to `JUDGMENT_ORG_ID` env var. */\n organizationId?: string;\n /** Judgment API URL. Defaults to `JUDGMENT_API_URL` env var. */\n apiUrl?: string;\n}\n\n/**\n * The main entry point for interacting with the Judgment platform.\n *\n * `Judgeval` connects to your Judgment project and gives you access to\n * tracing, evaluation, and monitoring through the Judgment platform.\n *\n * @example\n * ```typescript\n * import { Judgeval } from \"judgeval\";\n *\n * const client = Judgeval.create();\n * ```\n *\n * @throws Error if any required credential is missing.\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 /**\n * Create a new Judgeval client instance.\n *\n * @param config - Configuration options. Credentials default to environment variables.\n * @returns A new `Judgeval` instance.\n *\n * @example\n * ```typescript\n * const client = Judgeval.create({\n * apiKey: \"<your-api-key>\",\n * organizationId: \"<your-organization-id>\",\n * });\n * ```\n */\n static create(config: JudgevalConfig = {}): Judgeval {\n return new Judgeval(config);\n }\n}\n",
8
- "import {\n type Attributes,\n type Context,\n type Span,\n SpanStatusCode,\n type Tracer,\n} from \"@opentelemetry/api\";\nimport type { Instrumentation } from \"@opentelemetry/instrumentation\";\nimport type {\n BasicTracerProvider,\n Sampler,\n SpanLimits,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { randomUUID } from \"crypto\";\nimport { AttributeKeys, InternalAttributeKeys } from \"../JudgmentAttributeKeys\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport type { PendingEvalPayload } from \"../internal/api/models/PendingEvalPayload\";\nimport { parseFunctionArgs } from \"../utils/annotate\";\nimport { dontThrow } from \"../utils/dont-throw\";\nimport { Logger } from \"../utils/logger\";\nimport {\n safeStringify,\n serializeAttribute,\n Serializer,\n} from \"../utils/serializer\";\nimport { Maybe } from \"../utils/type-helpers\";\nimport { createBaggage, getBaggage, setBaggage } from \"./baggage\";\nimport { JudgmentTracerProvider } from \"./JudgmentTracerProvider\";\nimport { extract } from \"./propagation\";\nimport type { JudgmentSpanExporter } from \"./exporters/JudgmentSpanExporter\";\nimport type { JudgmentSpanProcessor } from \"./processors/JudgmentSpanProcessor\";\n\nconst TRACER_NAME = \"judgeval\";\n\n/**\n * Metadata about an LLM call to record on the current span.\n */\nexport interface LLMMetadata {\n /** Model name (e.g. \"gpt-4o\"). */\n model?: Maybe<string>;\n /** Provider name (e.g. \"openai\"). */\n provider?: Maybe<string>;\n /** Number of non-cached input tokens. */\n non_cached_input_tokens?: Maybe<number>;\n /** Number of output tokens. */\n output_tokens?: Maybe<number>;\n /** Number of cache-read input tokens. */\n cache_read_input_tokens?: Maybe<number>;\n /** Number of cache-creation input tokens. */\n cache_creation_input_tokens?: Maybe<number>;\n /** Total cost in USD. */\n total_cost_usd?: Maybe<number>;\n}\n\n/**\n * Configuration options for initializing a Tracer.\n *\n * Credentials are resolved in order: explicit arguments first, then\n * environment variables.\n */\nexport interface TracerConfig {\n /** Your Judgment project name. Required for span export. */\n projectName?: string;\n /** Judgment API key. Defaults to `JUDGMENT_API_KEY` env var. */\n apiKey?: string;\n /** Judgment organization ID. Defaults to `JUDGMENT_ORG_ID` env var. */\n organizationId?: string;\n /** Judgment API URL. Defaults to `JUDGMENT_API_URL` env var. */\n apiUrl?: string;\n /** Deployment environment name (e.g. \"production\"). */\n environment?: string;\n /** Whether to automatically set this tracer as active. Defaults to `true`. */\n setActive?: boolean;\n /** Custom serialization function for span attribute values. */\n serializer?: (value: unknown) => string;\n /** Additional OpenTelemetry resource attributes. */\n resourceAttributes?: Record<string, string>;\n /** Custom OpenTelemetry sampler. Defaults to the SDK's default. */\n sampler?: Sampler;\n /** Custom OpenTelemetry span limits (attribute/event/link caps). */\n spanLimits?: SpanLimits;\n /** Additional span processors to register alongside Judgment's own processor. */\n spanProcessors?: SpanProcessor[];\n}\n\n/**\n * Abstract base for all Judgment tracers.\n *\n * Provides the core tracing surface: span creation, attribute recording,\n * the `observe` decorator, context propagation for customer/session IDs,\n * tagging, and async evaluation dispatch.\n * Concrete subclasses supply the OTel TracerProvider, exporter, and\n * processor wiring.\n */\nexport abstract class BaseTracer {\n projectName: string | null;\n projectId: string | null;\n apiKey: string | null;\n organizationId: string | null;\n apiUrl: string | null;\n environment: string | null;\n serializer: Serializer;\n _tracerProvider: BasicTracerProvider;\n _client: JudgmentApiClient | null;\n _enableMonitoring: boolean;\n\n // ------------------------------------------------------------------ //\n // Initialization //\n // ------------------------------------------------------------------ //\n\n protected constructor(\n projectName: string | null,\n projectId: string | null,\n apiKey: string | null,\n organizationId: string | null,\n apiUrl: string | null,\n environment: string | null,\n serializer: Serializer,\n tracerProvider: BasicTracerProvider,\n client: JudgmentApiClient | null,\n enableMonitoring: boolean,\n ) {\n this.projectName = projectName;\n this.projectId = projectId;\n this.apiKey = apiKey;\n this.organizationId = organizationId;\n this.apiUrl = apiUrl;\n this.environment = environment;\n this.serializer = serializer;\n this._tracerProvider = tracerProvider;\n this._client = client;\n this._enableMonitoring = enableMonitoring;\n }\n\n /**\n * Set this tracer as the active tracer in the global provider.\n *\n * @returns `true` if activation succeeded, `false` if a root span is active.\n */\n setActive(): boolean {\n return JudgmentTracerProvider.getInstance().setActive(this);\n }\n\n // ------------------------------------------------------------------ //\n // Abstract Lifecycle //\n // ------------------------------------------------------------------ //\n\n abstract getSpanProcessor(): JudgmentSpanProcessor;\n abstract getSpanExporter(): JudgmentSpanExporter;\n\n // ------------------------------------------------------------------ //\n // Internal Helpers //\n // ------------------------------------------------------------------ //\n\n private static _getProxyProvider(): JudgmentTracerProvider {\n return JudgmentTracerProvider.getInstance();\n }\n\n private static _getSerializer(): Serializer {\n const tracer = BaseTracer._getProxyProvider().getActiveTracer();\n return tracer?.serializer ?? safeStringify;\n }\n\n private static _getCurrentTraceAndSpanId(): [string, string] | null {\n const proxy = BaseTracer._getProxyProvider();\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return null;\n const ctx = currentSpan.spanContext();\n if (!ctx.traceId || !(ctx.traceFlags & 0x01)) return null;\n return [ctx.traceId, ctx.spanId];\n }\n\n private static _emitPartial(): void {\n dontThrow(\"BaseTracer._emitPartial\", () => {\n const tracer = BaseTracer._getProxyProvider().getActiveTracer();\n if (!tracer) return;\n tracer.getSpanProcessor().emitPartial();\n });\n }\n\n // ------------------------------------------------------------------ //\n // Static API: Span Access & Lifecycle //\n // ------------------------------------------------------------------ //\n\n /**\n * Get the currently active span.\n *\n * @returns The active span, or `undefined` if none.\n */\n static getCurrentSpan(): Span | undefined {\n const proxy = BaseTracer._getProxyProvider();\n return proxy.getCurrentSpan();\n }\n\n /**\n * Flush all pending spans to the export endpoint.\n *\n * Call this before your process exits to ensure all spans are sent.\n *\n * @example\n * ```typescript\n * await Tracer.forceFlush();\n * ```\n */\n static async forceFlush(): Promise<void> {\n const proxy = BaseTracer._getProxyProvider();\n await proxy.forceFlush();\n }\n\n /**\n * Shut down the tracer and flush any pending data.\n *\n * @example\n * ```typescript\n * await Tracer.shutdown();\n * ```\n */\n static async shutdown(): Promise<void> {\n const proxy = BaseTracer._getProxyProvider();\n await proxy.shutdown();\n }\n\n /**\n * Register an OpenTelemetry instrumentation to capture spans automatically.\n *\n * @param instrumentor - The OpenTelemetry instrumentation to register.\n *\n * @example\n * ```typescript\n * import { OpenAIInstrumentation } from \"@opentelemetry/instrumentation-openai\";\n * Tracer.registerOTELInstrumentation(new OpenAIInstrumentation());\n * ```\n */\n static registerOTELInstrumentation(instrumentor: Instrumentation): void {\n dontThrow(\"BaseTracer.registerOTELInstrumentation\", () => {\n const proxy = BaseTracer._getProxyProvider();\n proxy.addInstrumentation(instrumentor);\n });\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Creation (OTEL-like signatures) //\n // ------------------------------------------------------------------ //\n\n /**\n * Get the underlying OpenTelemetry Tracer instance.\n *\n * @returns The OpenTelemetry `Tracer`.\n */\n static getOTELTracer(): Tracer {\n const proxy = BaseTracer._getProxyProvider();\n return proxy.getTracer(TRACER_NAME);\n }\n\n /**\n * Start a new span without setting it as active.\n *\n * @param name - The span name.\n * @param attributes - Optional span attributes.\n * @returns The created span.\n */\n static startSpan(name: string, attributes?: Attributes): Span {\n const span = BaseTracer.getOTELTracer().startSpan(name, { attributes });\n BaseTracer._emitPartial();\n return span;\n }\n\n /**\n * Start a new active span and run a function within it.\n *\n * The span is automatically ended when the function completes.\n *\n * @param name - The span name.\n * @param fn - Function to execute within the span context.\n * @param attributes - Optional span attributes.\n * @returns The return value of `fn`.\n */\n static startActiveSpan<T>(\n name: string,\n fn: (span: Span) => T,\n attributes?: Attributes,\n ): T {\n return BaseTracer.getOTELTracer().startActiveSpan(\n name,\n { attributes },\n (span) => {\n BaseTracer._emitPartial();\n const result = fn(span);\n if (result instanceof Promise) {\n return (result as Promise<unknown>).finally(() => {\n span.end();\n }) as T;\n }\n span.end();\n return result;\n },\n );\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Helpers //\n // ------------------------------------------------------------------ //\n\n /**\n * Create a named span, execute a function, and handle errors.\n *\n * Errors are recorded on the span and re-thrown.\n *\n * @param spanName - The span name.\n * @param fn - Function to execute within the span.\n * @returns The return value of `fn`.\n */\n static span<T>(spanName: string, fn: (span: Span) => T): T {\n return BaseTracer.startActiveSpan(spanName, (span) => {\n try {\n const result = fn(span);\n if (result instanceof Promise) {\n return result.catch((e: unknown) => {\n span.setStatus({ code: SpanStatusCode.ERROR, message: String(e) });\n span.recordException(e as Error);\n throw e;\n }) as T;\n }\n return result;\n } catch (e) {\n span.setStatus({ code: SpanStatusCode.ERROR, message: String(e) });\n span.recordException(e as Error);\n throw e;\n }\n });\n }\n\n /**\n * Alias for {@link span}. Create a named span and execute a function within it.\n *\n * @param spanName - The span name.\n * @param fn - Function to execute within the span.\n * @returns The return value of `fn`.\n */\n static with<T>(spanName: string, fn: (span: Span) => T): T {\n return BaseTracer.span(spanName, fn);\n }\n\n /**\n * Continue a distributed trace from an upstream service.\n *\n * Extracts W3C trace context and baggage from `carrier` and installs\n * it as the active context for the duration of `fn`. Any span started\n * inside — including `@Tracer.observe`-wrapped functions and\n * `Tracer.with` blocks — becomes a child of the upstream parent,\n * stitching your service into the caller's trace.\n *\n * Use this at the entry point of an inbound request (HTTP handler,\n * message queue consumer, RPC dispatcher, etc.) to join a trace\n * started by the upstream caller. If the carrier contains no trace\n * context, `fn` still runs normally with a fresh context.\n *\n * @param carrier - A mapping containing propagation headers. Typically\n * `req.headers` from Node's `http`/Express/Fastify, but any dict-shaped\n * object with lowercase keys works (queue attributes, Lambda event\n * headers, RPC metadata, etc.).\n * @param fn - Function to run inside the extracted context. Receives\n * the extracted {@link Context} as its argument; most callers ignore\n * it. Sync or async.\n * @returns The return value of `fn`.\n *\n * @example\n * ```typescript\n * import { Tracer } from \"judgeval\";\n *\n * const handle = Tracer.observe(async (payload: unknown) => {\n * // ... your agent logic ...\n * });\n *\n * // Express / Node http handler:\n * app.post(\"/run\", async (req, res) => {\n * await Tracer.continueTrace(req.headers, async () => {\n * const result = await handle(req.body);\n * res.json(result);\n * });\n * });\n * ```\n *\n * Propagating in the opposite direction (outbound):\n *\n * @example\n * ```typescript\n * import { propagation } from \"judgeval\";\n *\n * const headers: Record<string, string> = {};\n * propagation.inject(headers);\n * await fetch(downstreamUrl, { headers, method: \"POST\", body });\n * ```\n */\n static continueTrace<T>(\n carrier: object,\n fn: (ctx: Context) => T,\n ): T {\n const proxy = BaseTracer._getProxyProvider();\n const ctx = extract(carrier);\n return proxy.withContext(ctx, () => fn(ctx));\n }\n\n // ------------------------------------------------------------------ //\n // Static API: Observation Decorator //\n // ------------------------------------------------------------------ //\n\n static observe<TArgs extends unknown[], TReturn>(\n func: (...args: TArgs) => TReturn,\n spanType?: string,\n spanName?: string,\n recordInput?: boolean,\n recordOutput?: boolean,\n disableGeneratorYieldSpan?: boolean,\n ): (...args: TArgs) => TReturn;\n static observe<TArgs extends unknown[], TReturn>(\n func?: undefined,\n spanType?: string,\n spanName?: string,\n recordInput?: boolean,\n recordOutput?: boolean,\n disableGeneratorYieldSpan?: boolean,\n ): (func: (...args: TArgs) => TReturn) => (...args: TArgs) => TReturn;\n /**\n * Wrap a function to automatically create spans and record inputs/outputs.\n *\n * Can be called with a function to wrap it directly, or without a function\n * to get a decorator.\n *\n * @param func - The function to wrap. Omit to get a decorator.\n * @param spanType - The span kind (e.g. \"llm\", \"tool\", \"span\"). Defaults to \"span\".\n * @param spanName - Custom span name. Defaults to the function name.\n * @param recordInput - Whether to record function inputs. Defaults to `true`.\n * @param recordOutput - Whether to record function outputs. Defaults to `true`.\n * @param disableGeneratorYieldSpan - Reserved for future use.\n * @returns The wrapped function, or a decorator if `func` is omitted.\n *\n * @example\n * ```typescript\n * // Wrap a function\n * const traced = Tracer.observe(async (query: string) => {\n * return await search(query);\n * }, \"tool\");\n *\n * // Use as decorator factory\n * const decorator = Tracer.observe(undefined, \"llm\");\n * const tracedFn = decorator(myFunction);\n * ```\n */\n static observe<TArgs extends unknown[], TReturn>(\n func?: (...args: TArgs) => TReturn,\n spanType = \"span\",\n spanName?: string,\n recordInput = true,\n recordOutput = true,\n disableGeneratorYieldSpan = false,\n ):\n | ((...args: TArgs) => TReturn)\n | ((func: (...args: TArgs) => TReturn) => (...args: TArgs) => TReturn) {\n void disableGeneratorYieldSpan;\n const proxy = BaseTracer._getProxyProvider();\n const decorator = (\n innerFunc: (...args: TArgs) => TReturn,\n ): ((...args: TArgs) => TReturn) => {\n const name = spanName ?? innerFunc.name;\n return (...args: TArgs): TReturn => {\n const otelTracer = proxy.getTracer(TRACER_NAME);\n return otelTracer.startActiveSpan(name, (span) => {\n if (spanType) {\n span.setAttribute(AttributeKeys.JUDGMENT_SPAN_KIND, spanType);\n }\n try {\n if (recordInput) {\n span.setAttribute(\n AttributeKeys.JUDGMENT_INPUT,\n serializeAttribute(\n getInputs(innerFunc, args),\n BaseTracer._getSerializer(),\n ),\n );\n }\n BaseTracer._emitPartial();\n const result = innerFunc(...args);\n\n if (result instanceof Promise) {\n return (result as Promise<unknown>)\n .then((res) => {\n if (recordOutput) {\n span.setAttribute(\n AttributeKeys.JUDGMENT_OUTPUT,\n serializeAttribute(res, BaseTracer._getSerializer()),\n );\n }\n return res as TReturn;\n })\n .catch((e: unknown) => {\n span.recordException(e as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: String(e),\n });\n throw e;\n })\n .finally(() => {\n span.end();\n }) as TReturn;\n }\n\n if (recordOutput) {\n span.setAttribute(\n AttributeKeys.JUDGMENT_OUTPUT,\n serializeAttribute(result, BaseTracer._getSerializer()),\n );\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 if (!func) return decorator;\n return decorator(func);\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Kind //\n // ------------------------------------------------------------------ //\n\n /**\n * Set the kind of the current active span.\n *\n * @param kind - The span kind (e.g. \"llm\", \"tool\", \"span\").\n */\n static setSpanKind(kind: string): void {\n dontThrow(\"BaseTracer.setSpanKind\", () => {\n if (!kind) return;\n const currentSpan = BaseTracer._getProxyProvider().getCurrentSpan();\n if (currentSpan?.isRecording()) {\n currentSpan.setAttribute(AttributeKeys.JUDGMENT_SPAN_KIND, kind);\n }\n });\n }\n\n /**\n * Set the current span kind to \"llm\".\n */\n static setLLMSpan(): void {\n BaseTracer.setSpanKind(\"llm\");\n }\n\n /**\n * Set the current span kind to \"tool\".\n */\n static setToolSpan(): void {\n BaseTracer.setSpanKind(\"tool\");\n }\n\n /**\n * Set the current span kind to \"span\".\n */\n static setGeneralSpan(): void {\n BaseTracer.setSpanKind(\"span\");\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Attribute Operations //\n // ------------------------------------------------------------------ //\n\n /**\n * Set a single attribute on the current active span.\n *\n * @param key - The attribute key.\n * @param value - The attribute value (will be serialized).\n */\n static setAttribute(key: string, value: unknown): void {\n dontThrow(\"BaseTracer.setAttribute\", () => {\n const currentSpan = BaseTracer._getProxyProvider().getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n if (!key || value == null) return;\n currentSpan.setAttribute(\n key,\n serializeAttribute(value, BaseTracer._getSerializer()),\n );\n });\n }\n\n /**\n * Set multiple attributes on the current active span.\n *\n * @param attributes - Key-value pairs to set.\n */\n static setAttributes(attributes: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(attributes)) {\n BaseTracer.setAttribute(key, value);\n }\n }\n\n /**\n * Set the input data on the current span.\n *\n * @param inputData - The input data to record.\n */\n static setInput(inputData: unknown): void {\n BaseTracer.setAttribute(AttributeKeys.JUDGMENT_INPUT, inputData);\n }\n\n /**\n * Set the output data on the current span.\n *\n * @param outputData - The output data to record.\n */\n static setOutput(outputData: unknown): void {\n BaseTracer.setAttribute(AttributeKeys.JUDGMENT_OUTPUT, outputData);\n }\n\n /**\n * Record LLM usage metadata on the current span.\n *\n * @param metadata - LLM metadata including model, provider, and token counts.\n *\n * @example\n * ```typescript\n * Tracer.recordLLMMetadata({\n * model: \"gpt-4o\",\n * provider: \"openai\",\n * output_tokens: 150,\n * });\n * ```\n */\n static recordLLMMetadata(metadata: LLMMetadata): void {\n dontThrow(\"BaseTracer.recordLLMMetadata\", () => {\n const currentSpan = BaseTracer._getProxyProvider().getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n\n if (typeof metadata.model === \"string\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_LLM_MODEL_NAME,\n metadata.model,\n );\n }\n\n if (typeof metadata.provider === \"string\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_LLM_PROVIDER,\n metadata.provider,\n );\n }\n\n if (typeof metadata.non_cached_input_tokens === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_NON_CACHED_INPUT_TOKENS,\n metadata.non_cached_input_tokens,\n );\n }\n if (typeof metadata.output_tokens === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_OUTPUT_TOKENS,\n metadata.output_tokens,\n );\n }\n if (typeof metadata.cache_read_input_tokens === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_CACHE_READ_INPUT_TOKENS,\n metadata.cache_read_input_tokens,\n );\n }\n if (typeof metadata.cache_creation_input_tokens === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_CACHE_CREATION_INPUT_TOKENS,\n metadata.cache_creation_input_tokens,\n );\n }\n if (typeof metadata.total_cost_usd === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_TOTAL_COST_USD,\n metadata.total_cost_usd,\n );\n }\n });\n }\n\n // ------------------------------------------------------------------ //\n // Static: Context Propagation //\n // ------------------------------------------------------------------ //\n\n /**\n * Set a key on the current span and on baggage so it propagates to all\n * child spans. Also reattaches the current context to the updated one.\n */\n private static _setPropagatingBaggageKey(key: string, value: string): void {\n dontThrow(\"BaseTracer._setPropagatingBaggageKey\", () => {\n const proxy = BaseTracer._getProxyProvider();\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n currentSpan.setAttribute(key, value);\n const ctx = proxy.getCurrentContext();\n const baggage = (getBaggage(ctx) ?? createBaggage()).setEntry(key, {\n value,\n });\n proxy.attachContext(setBaggage(ctx, baggage));\n });\n }\n\n /**\n * Set the customer ID on the current span.\n *\n * The ID is automatically propagated to all child spans via baggage.\n *\n * @param customerId - The customer identifier.\n */\n static setCustomerId(customerId: string): void {\n BaseTracer._setPropagatingBaggageKey(\n AttributeKeys.JUDGMENT_CUSTOMER_ID,\n customerId,\n );\n }\n\n /**\n * Set the customer user ID on the current span.\n *\n * The ID is automatically propagated to all child spans via baggage.\n *\n * @param customerUserId - The customer user identifier.\n */\n static setCustomerUserId(customerUserId: string): void {\n BaseTracer._setPropagatingBaggageKey(\n AttributeKeys.JUDGMENT_CUSTOMER_USER_ID,\n customerUserId,\n );\n }\n\n /**\n * Set the session ID on the current span.\n *\n * The ID is automatically propagated to all child spans via baggage.\n *\n * @param sessionId - The session identifier.\n */\n static setSessionId(sessionId: string): void {\n BaseTracer._setPropagatingBaggageKey(\n AttributeKeys.JUDGMENT_SESSION_ID,\n sessionId,\n );\n }\n\n // ------------------------------------------------------------------ //\n // Static: Tags //\n // ------------------------------------------------------------------ //\n\n /**\n * Add tags to the current trace.\n *\n * @param tags - A single tag string or an array of tag strings.\n *\n * @example\n * ```typescript\n * Tracer.tag(\"production\");\n * Tracer.tag([\"important\", \"customer-facing\"]);\n * ```\n */\n static tag(tags: string | string[]): void {\n dontThrow(\"BaseTracer.tag\", () => {\n if (!tags || (Array.isArray(tags) && tags.length === 0)) return;\n const proxy = BaseTracer._getProxyProvider();\n const tracer = proxy.getActiveTracer();\n if (!tracer?.projectId || !tracer._client) return;\n const ids = BaseTracer._getCurrentTraceAndSpanId();\n if (!ids) return;\n const [traceId] = ids;\n const tagArray = Array.isArray(tags) ? tags : [tags];\n tracer._client\n .postV1projectsTracesByTraceIdTags(tracer.projectId, traceId, {\n tags: tagArray,\n })\n .catch((err: unknown) => {\n Logger.error(`tag failed: ${String(err)}`);\n });\n });\n }\n\n // ------------------------------------------------------------------ //\n // Static API: Async Evaluation //\n // ------------------------------------------------------------------ //\n\n /**\n * Trigger an asynchronous server-side evaluation on the current span.\n *\n * The evaluation is queued and processed server-side by the Judgment\n * platform after the span ends. Use this to score live traffic\n * without blocking your application.\n *\n * @param judge - Name of the hosted judge/scorer (e.g. `\"faithfulness\"`,\n * `\"answer_relevancy\"`).\n * @param example - Optional dict with evaluation data. Keys like\n * `input`, `actual_output`, `expected_output`, and `retrieval_context`\n * are commonly used.\n *\n * @example\n * ```typescript\n * Tracer.asyncEvaluate(\"answer_relevancy\", {\n * input: \"What is AI?\",\n * actual_output: response,\n * });\n * ```\n */\n static asyncEvaluate(judge: string, example?: Record<string, unknown>): void {\n dontThrow(\"BaseTracer.asyncEvaluate\", () => {\n const proxy = BaseTracer._getProxyProvider();\n const tracer = proxy.getActiveTracer();\n if (!tracer?.projectId) return;\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n\n const processor = tracer.getSpanProcessor();\n const ctx = currentSpan.spanContext();\n\n const idx = processor.stateIncr(\n ctx,\n InternalAttributeKeys.PENDING_EVALS_COUNT,\n );\n const payload: PendingEvalPayload = {\n project_id: tracer.projectId,\n eval_name: `async_evaluate_${judge}_${idx}`,\n judges: [{ name: judge }],\n examples: [\n {\n ...example,\n example_id: randomUUID(),\n created_at: new Date().toISOString(),\n trace_id: ctx.traceId,\n span_id: ctx.spanId,\n },\n ],\n is_offline: false,\n is_behavior: false,\n };\n const updated = processor.stateAppend<PendingEvalPayload>(\n ctx,\n InternalAttributeKeys.PENDING_EVALS,\n payload,\n );\n\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_PENDING_TRACE_EVAL,\n JSON.stringify(updated),\n );\n });\n }\n}\n\nfunction getInputs<TArgs extends unknown[]>(\n f: (...args: TArgs) => unknown,\n args: TArgs,\n): Record<string, unknown> {\n try {\n const paramNames = parseFunctionArgs(f)\n .map((param) =>\n param\n .replace(/^\\.\\.\\./, \"\")\n .split(\"=\")[0]\n .trim(),\n )\n .filter((param) => param.length > 0);\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",
8
+ "import {\n type Attributes,\n type Context,\n type Span,\n SpanStatusCode,\n type Tracer,\n} from \"@opentelemetry/api\";\nimport type { Instrumentation } from \"@opentelemetry/instrumentation\";\nimport type {\n BasicTracerProvider,\n Sampler,\n SpanLimits,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { randomUUID } from \"crypto\";\nimport { AttributeKeys, InternalAttributeKeys } from \"../JudgmentAttributeKeys\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport type { PendingEvalPayload } from \"../internal/api/models/PendingEvalPayload\";\nimport { parseFunctionArgs } from \"../utils/annotate\";\nimport { dontThrow } from \"../utils/dont-throw\";\nimport { Logger } from \"../utils/logger\";\nimport {\n safeStringify,\n serializeAttribute,\n Serializer,\n} from \"../utils/serializer\";\nimport { Maybe } from \"../utils/type-helpers\";\nimport { createBaggage, getBaggage, setBaggage } from \"./baggage\";\nimport { JudgmentTracerProvider } from \"./JudgmentTracerProvider\";\nimport { extract } from \"./propagation\";\nimport type { JudgmentSpanExporter } from \"./exporters/JudgmentSpanExporter\";\nimport type { JudgmentSpanProcessor } from \"./processors/JudgmentSpanProcessor\";\n\nconst TRACER_NAME = \"judgeval\";\n\n/**\n * Metadata about an LLM call to record on the current span.\n */\nexport interface LLMMetadata {\n /** Model name (e.g. \"gpt-4o\"). */\n model?: Maybe<string>;\n /** Provider name (e.g. \"openai\"). */\n provider?: Maybe<string>;\n /** Number of non-cached input tokens. */\n non_cached_input_tokens?: Maybe<number>;\n /** Number of output tokens. */\n output_tokens?: Maybe<number>;\n /** Number of cache-read input tokens. */\n cache_read_input_tokens?: Maybe<number>;\n /** Number of cache-creation input tokens. */\n cache_creation_input_tokens?: Maybe<number>;\n /** Total cost in USD. */\n total_cost_usd?: Maybe<number>;\n}\n\n/**\n * Configuration options for initializing a Tracer.\n *\n * Credentials are resolved in order: explicit arguments first, then\n * environment variables.\n */\nexport interface TracerConfig {\n /** Your Judgment project name. Required for span export. */\n projectName?: string;\n /** Judgment API key. Defaults to `JUDGMENT_API_KEY` env var. */\n apiKey?: string;\n /** Judgment organization ID. Defaults to `JUDGMENT_ORG_ID` env var. */\n organizationId?: string;\n /** Judgment API URL. Defaults to `JUDGMENT_API_URL` env var. */\n apiUrl?: string;\n /** Deployment environment name (e.g. \"production\"). */\n environment?: string;\n /** Whether to automatically set this tracer as active. Defaults to `true`. */\n setActive?: boolean;\n /** Custom serialization function for span attribute values. */\n serializer?: (value: unknown) => string;\n /** Additional OpenTelemetry resource attributes. */\n resourceAttributes?: Record<string, string>;\n /** Custom OpenTelemetry sampler. Defaults to the SDK's default. */\n sampler?: Sampler;\n /** Custom OpenTelemetry span limits (attribute/event/link caps). */\n spanLimits?: SpanLimits;\n /** Additional span processors to register alongside Judgment's own processor. */\n spanProcessors?: SpanProcessor[];\n}\n\n/**\n * Abstract base for all Judgment tracers.\n *\n * Provides the core tracing surface: span creation, attribute recording,\n * the `observe` decorator, context propagation for customer/session IDs,\n * tagging, and async evaluation dispatch.\n * Concrete subclasses supply the OTel TracerProvider, exporter, and\n * processor wiring.\n */\nexport abstract class BaseTracer {\n projectName: string | null;\n projectId: string | null;\n apiKey: string | null;\n organizationId: string | null;\n apiUrl: string | null;\n environment: string | null;\n serializer: Serializer;\n _tracerProvider: BasicTracerProvider;\n _client: JudgmentApiClient | null;\n _enableMonitoring: boolean;\n\n // ------------------------------------------------------------------ //\n // Initialization //\n // ------------------------------------------------------------------ //\n\n protected constructor(\n projectName: string | null,\n projectId: string | null,\n apiKey: string | null,\n organizationId: string | null,\n apiUrl: string | null,\n environment: string | null,\n serializer: Serializer,\n tracerProvider: BasicTracerProvider,\n client: JudgmentApiClient | null,\n enableMonitoring: boolean,\n ) {\n this.projectName = projectName;\n this.projectId = projectId;\n this.apiKey = apiKey;\n this.organizationId = organizationId;\n this.apiUrl = apiUrl;\n this.environment = environment;\n this.serializer = serializer;\n this._tracerProvider = tracerProvider;\n this._client = client;\n this._enableMonitoring = enableMonitoring;\n }\n\n /**\n * Set this tracer as the active tracer in the global provider.\n *\n * @returns `true` if activation succeeded, `false` if a root span is active.\n */\n setActive(): boolean {\n return JudgmentTracerProvider.getInstance().setActive(this);\n }\n\n // ------------------------------------------------------------------ //\n // Abstract Lifecycle //\n // ------------------------------------------------------------------ //\n\n abstract getSpanProcessor(): JudgmentSpanProcessor;\n abstract getSpanExporter(): JudgmentSpanExporter;\n\n // ------------------------------------------------------------------ //\n // Internal Helpers //\n // ------------------------------------------------------------------ //\n\n private static _getProxyProvider(): JudgmentTracerProvider {\n return JudgmentTracerProvider.getInstance();\n }\n\n private static _getSerializer(): Serializer {\n const tracer = BaseTracer._getProxyProvider().getActiveTracer();\n return tracer?.serializer ?? safeStringify;\n }\n\n private static _getCurrentTraceAndSpanId(): [string, string] | null {\n const proxy = BaseTracer._getProxyProvider();\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return null;\n const ctx = currentSpan.spanContext();\n if (!ctx.traceId || !(ctx.traceFlags & 0x01)) return null;\n return [ctx.traceId, ctx.spanId];\n }\n\n private static _emitPartial(): void {\n dontThrow(\"BaseTracer._emitPartial\", () => {\n const tracer = BaseTracer._getProxyProvider().getActiveTracer();\n if (!tracer) return;\n tracer.getSpanProcessor().emitPartial();\n });\n }\n\n // ------------------------------------------------------------------ //\n // Static API: Span Access & Lifecycle //\n // ------------------------------------------------------------------ //\n\n /**\n * Get the currently active span.\n *\n * @returns The active span, or `undefined` if none.\n */\n static getCurrentSpan(): Span | undefined {\n const proxy = BaseTracer._getProxyProvider();\n return proxy.getCurrentSpan();\n }\n\n /**\n * Flush all pending spans to the export endpoint.\n *\n * Call this before your process exits to ensure all spans are sent.\n *\n * @example\n * ```typescript\n * await Tracer.forceFlush();\n * ```\n */\n static async forceFlush(): Promise<void> {\n const proxy = BaseTracer._getProxyProvider();\n await proxy.forceFlush();\n }\n\n /**\n * Shut down the tracer and flush any pending data.\n *\n * @example\n * ```typescript\n * await Tracer.shutdown();\n * ```\n */\n static async shutdown(): Promise<void> {\n const proxy = BaseTracer._getProxyProvider();\n await proxy.shutdown();\n }\n\n /**\n * Register an OpenTelemetry instrumentation to capture spans automatically.\n *\n * @param instrumentor - The OpenTelemetry instrumentation to register.\n *\n * @example\n * ```typescript\n * import { OpenAIInstrumentation } from \"@opentelemetry/instrumentation-openai\";\n * Tracer.registerOTELInstrumentation(new OpenAIInstrumentation());\n * ```\n */\n static registerOTELInstrumentation(instrumentor: Instrumentation): void {\n dontThrow(\"BaseTracer.registerOTELInstrumentation\", () => {\n const proxy = BaseTracer._getProxyProvider();\n proxy.addInstrumentation(instrumentor);\n });\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Creation (OTEL-like signatures) //\n // ------------------------------------------------------------------ //\n\n /**\n * Get the underlying OpenTelemetry Tracer instance.\n *\n * @returns The OpenTelemetry `Tracer`.\n */\n static getOTELTracer(): Tracer {\n const proxy = BaseTracer._getProxyProvider();\n return proxy.getTracer(TRACER_NAME);\n }\n\n /**\n * Start a new span without setting it as active.\n *\n * @param name - The span name.\n * @param attributes - Optional span attributes.\n * @returns The created span.\n */\n static startSpan(name: string, attributes?: Attributes): Span {\n const span = BaseTracer.getOTELTracer().startSpan(name, { attributes });\n BaseTracer._emitPartial();\n return span;\n }\n\n /**\n * Start a new active span and run a function within it.\n *\n * The span is automatically ended when the function completes.\n *\n * @param name - The span name.\n * @param fn - Function to execute within the span context.\n * @param attributes - Optional span attributes.\n * @returns The return value of `fn`.\n */\n static startActiveSpan<T>(\n name: string,\n fn: (span: Span) => T,\n attributes?: Attributes,\n ): T {\n return BaseTracer.getOTELTracer().startActiveSpan(\n name,\n { attributes },\n (span) => {\n BaseTracer._emitPartial();\n try {\n const result = fn(span);\n if (result instanceof Promise) {\n return (result as Promise<unknown>).finally(() => {\n span.end();\n }) as T;\n }\n span.end();\n return result;\n } catch (e) {\n span.end();\n throw e;\n }\n },\n );\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Helpers //\n // ------------------------------------------------------------------ //\n\n /**\n * Create a named span, execute a function, and handle errors.\n *\n * Errors are recorded on the span and re-thrown.\n *\n * @param spanName - The span name.\n * @param fn - Function to execute within the span.\n * @returns The return value of `fn`.\n */\n static span<T>(spanName: string, fn: (span: Span) => T): T {\n return BaseTracer.startActiveSpan(spanName, (span) => {\n try {\n const result = fn(span);\n if (result instanceof Promise) {\n return result.catch((e: unknown) => {\n span.setStatus({ code: SpanStatusCode.ERROR, message: String(e) });\n span.recordException(e as Error);\n throw e;\n }) as T;\n }\n return result;\n } catch (e) {\n span.setStatus({ code: SpanStatusCode.ERROR, message: String(e) });\n span.recordException(e as Error);\n throw e;\n }\n });\n }\n\n /**\n * Alias for {@link span}. Create a named span and execute a function within it.\n *\n * @param spanName - The span name.\n * @param fn - Function to execute within the span.\n * @returns The return value of `fn`.\n */\n static with<T>(spanName: string, fn: (span: Span) => T): T {\n return BaseTracer.span(spanName, fn);\n }\n\n /**\n * Continue a distributed trace from an upstream service.\n *\n * Extracts W3C trace context and baggage from `carrier` and installs\n * it as the active context for the duration of `fn`. Any span started\n * inside — including `@Tracer.observe`-wrapped functions and\n * `Tracer.with` blocks — becomes a child of the upstream parent,\n * stitching your service into the caller's trace.\n *\n * Use this at the entry point of an inbound request (HTTP handler,\n * message queue consumer, RPC dispatcher, etc.) to join a trace\n * started by the upstream caller. If the carrier contains no trace\n * context, `fn` still runs normally with a fresh context.\n *\n * @param carrier - A mapping containing propagation headers. Typically\n * `req.headers` from Node's `http`/Express/Fastify, but any dict-shaped\n * object with lowercase keys works (queue attributes, Lambda event\n * headers, RPC metadata, etc.).\n * @param fn - Function to run inside the extracted context. Receives\n * the extracted {@link Context} as its argument; most callers ignore\n * it. Sync or async.\n * @returns The return value of `fn`.\n *\n * @example\n * ```typescript\n * import { Tracer } from \"judgeval\";\n *\n * const handle = Tracer.observe(async (payload: unknown) => {\n * // ... your agent logic ...\n * });\n *\n * // Express / Node http handler:\n * app.post(\"/run\", async (req, res) => {\n * await Tracer.continueTrace(req.headers, async () => {\n * const result = await handle(req.body);\n * res.json(result);\n * });\n * });\n * ```\n *\n * Propagating in the opposite direction (outbound):\n *\n * @example\n * ```typescript\n * import { propagation } from \"judgeval\";\n *\n * const headers: Record<string, string> = {};\n * propagation.inject(headers);\n * await fetch(downstreamUrl, { headers, method: \"POST\", body });\n * ```\n */\n static continueTrace<T>(\n carrier: object,\n fn: (ctx: Context) => T,\n ): T {\n const proxy = BaseTracer._getProxyProvider();\n const ctx = extract(carrier);\n return proxy.withContext(ctx, () => fn(ctx));\n }\n\n // ------------------------------------------------------------------ //\n // Static API: Observation Decorator //\n // ------------------------------------------------------------------ //\n\n static observe<TArgs extends unknown[], TReturn>(\n func: (...args: TArgs) => TReturn,\n spanType?: string,\n spanName?: string,\n recordInput?: boolean,\n recordOutput?: boolean,\n disableGeneratorYieldSpan?: boolean,\n ): (...args: TArgs) => TReturn;\n static observe<TArgs extends unknown[], TReturn>(\n func?: undefined,\n spanType?: string,\n spanName?: string,\n recordInput?: boolean,\n recordOutput?: boolean,\n disableGeneratorYieldSpan?: boolean,\n ): (func: (...args: TArgs) => TReturn) => (...args: TArgs) => TReturn;\n /**\n * Wrap a function to automatically create spans and record inputs/outputs.\n *\n * Can be called with a function to wrap it directly, or without a function\n * to get a decorator.\n *\n * @param func - The function to wrap. Omit to get a decorator.\n * @param spanType - The span kind (e.g. \"llm\", \"tool\", \"span\"). Defaults to \"span\".\n * @param spanName - Custom span name. Defaults to the function name.\n * @param recordInput - Whether to record function inputs. Defaults to `true`.\n * @param recordOutput - Whether to record function outputs. Defaults to `true`.\n * @param disableGeneratorYieldSpan - Reserved for future use.\n * @returns The wrapped function, or a decorator if `func` is omitted.\n *\n * @example\n * ```typescript\n * // Wrap a function\n * const traced = Tracer.observe(async (query: string) => {\n * return await search(query);\n * }, \"tool\");\n *\n * // Use as decorator factory\n * const decorator = Tracer.observe(undefined, \"llm\");\n * const tracedFn = decorator(myFunction);\n * ```\n */\n static observe<TArgs extends unknown[], TReturn>(\n func?: (...args: TArgs) => TReturn,\n spanType = \"span\",\n spanName?: string,\n recordInput = true,\n recordOutput = true,\n disableGeneratorYieldSpan = false,\n ):\n | ((...args: TArgs) => TReturn)\n | ((func: (...args: TArgs) => TReturn) => (...args: TArgs) => TReturn) {\n void disableGeneratorYieldSpan;\n const proxy = BaseTracer._getProxyProvider();\n const decorator = (\n innerFunc: (...args: TArgs) => TReturn,\n ): ((...args: TArgs) => TReturn) => {\n const name = spanName ?? innerFunc.name;\n return (...args: TArgs): TReturn => {\n const otelTracer = proxy.getTracer(TRACER_NAME);\n return otelTracer.startActiveSpan(name, (span) => {\n if (spanType) {\n span.setAttribute(AttributeKeys.JUDGMENT_SPAN_KIND, spanType);\n }\n try {\n if (recordInput) {\n span.setAttribute(\n AttributeKeys.JUDGMENT_INPUT,\n serializeAttribute(\n getInputs(innerFunc, args),\n BaseTracer._getSerializer(),\n ),\n );\n }\n BaseTracer._emitPartial();\n const result = innerFunc(...args);\n\n if (result instanceof Promise) {\n return (result as Promise<unknown>)\n .then((res) => {\n if (recordOutput) {\n span.setAttribute(\n AttributeKeys.JUDGMENT_OUTPUT,\n serializeAttribute(res, BaseTracer._getSerializer()),\n );\n }\n return res as TReturn;\n })\n .catch((e: unknown) => {\n span.recordException(e as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: String(e),\n });\n throw e;\n })\n .finally(() => {\n span.end();\n }) as TReturn;\n }\n\n if (recordOutput) {\n span.setAttribute(\n AttributeKeys.JUDGMENT_OUTPUT,\n serializeAttribute(result, BaseTracer._getSerializer()),\n );\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 if (!func) return decorator;\n return decorator(func);\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Kind //\n // ------------------------------------------------------------------ //\n\n /**\n * Set the kind of the current active span.\n *\n * @param kind - The span kind (e.g. \"llm\", \"tool\", \"span\").\n */\n static setSpanKind(kind: string): void {\n dontThrow(\"BaseTracer.setSpanKind\", () => {\n if (!kind) return;\n const currentSpan = BaseTracer._getProxyProvider().getCurrentSpan();\n if (currentSpan?.isRecording()) {\n currentSpan.setAttribute(AttributeKeys.JUDGMENT_SPAN_KIND, kind);\n }\n });\n }\n\n /**\n * Set the current span kind to \"llm\".\n */\n static setLLMSpan(): void {\n BaseTracer.setSpanKind(\"llm\");\n }\n\n /**\n * Set the current span kind to \"tool\".\n */\n static setToolSpan(): void {\n BaseTracer.setSpanKind(\"tool\");\n }\n\n /**\n * Set the current span kind to \"span\".\n */\n static setGeneralSpan(): void {\n BaseTracer.setSpanKind(\"span\");\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Attribute Operations //\n // ------------------------------------------------------------------ //\n\n /**\n * Set a single attribute on the current active span.\n *\n * @param key - The attribute key.\n * @param value - The attribute value (will be serialized).\n */\n static setAttribute(key: string, value: unknown): void {\n dontThrow(\"BaseTracer.setAttribute\", () => {\n const currentSpan = BaseTracer._getProxyProvider().getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n if (!key || value == null) return;\n currentSpan.setAttribute(\n key,\n serializeAttribute(value, BaseTracer._getSerializer()),\n );\n });\n }\n\n /**\n * Set multiple attributes on the current active span.\n *\n * @param attributes - Key-value pairs to set.\n */\n static setAttributes(attributes: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(attributes)) {\n BaseTracer.setAttribute(key, value);\n }\n }\n\n /**\n * Set the input data on the current span.\n *\n * @param inputData - The input data to record.\n */\n static setInput(inputData: unknown): void {\n BaseTracer.setAttribute(AttributeKeys.JUDGMENT_INPUT, inputData);\n }\n\n /**\n * Set the output data on the current span.\n *\n * @param outputData - The output data to record.\n */\n static setOutput(outputData: unknown): void {\n BaseTracer.setAttribute(AttributeKeys.JUDGMENT_OUTPUT, outputData);\n }\n\n /**\n * Record LLM usage metadata on the current span.\n *\n * @param metadata - LLM metadata including model, provider, and token counts.\n *\n * @example\n * ```typescript\n * Tracer.recordLLMMetadata({\n * model: \"gpt-4o\",\n * provider: \"openai\",\n * output_tokens: 150,\n * });\n * ```\n */\n static recordLLMMetadata(metadata: LLMMetadata): void {\n dontThrow(\"BaseTracer.recordLLMMetadata\", () => {\n const currentSpan = BaseTracer._getProxyProvider().getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n\n if (typeof metadata.model === \"string\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_LLM_MODEL_NAME,\n metadata.model,\n );\n }\n\n if (typeof metadata.provider === \"string\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_LLM_PROVIDER,\n metadata.provider,\n );\n }\n\n if (typeof metadata.non_cached_input_tokens === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_NON_CACHED_INPUT_TOKENS,\n metadata.non_cached_input_tokens,\n );\n }\n if (typeof metadata.output_tokens === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_OUTPUT_TOKENS,\n metadata.output_tokens,\n );\n }\n if (typeof metadata.cache_read_input_tokens === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_CACHE_READ_INPUT_TOKENS,\n metadata.cache_read_input_tokens,\n );\n }\n if (typeof metadata.cache_creation_input_tokens === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_CACHE_CREATION_INPUT_TOKENS,\n metadata.cache_creation_input_tokens,\n );\n }\n if (typeof metadata.total_cost_usd === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_TOTAL_COST_USD,\n metadata.total_cost_usd,\n );\n }\n });\n }\n\n // ------------------------------------------------------------------ //\n // Static: Context Propagation //\n // ------------------------------------------------------------------ //\n\n /**\n * Set a key on the current span and on baggage so it propagates to all\n * child spans. Also reattaches the current context to the updated one.\n */\n private static _setPropagatingBaggageKey(key: string, value: string): void {\n dontThrow(\"BaseTracer._setPropagatingBaggageKey\", () => {\n const proxy = BaseTracer._getProxyProvider();\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n currentSpan.setAttribute(key, value);\n const ctx = proxy.getCurrentContext();\n const baggage = (getBaggage(ctx) ?? createBaggage()).setEntry(key, {\n value,\n });\n proxy.attachContext(setBaggage(ctx, baggage));\n });\n }\n\n /**\n * Set the customer ID on the current span.\n *\n * The ID is automatically propagated to all child spans via baggage.\n *\n * @param customerId - The customer identifier.\n */\n static setCustomerId(customerId: string): void {\n BaseTracer._setPropagatingBaggageKey(\n AttributeKeys.JUDGMENT_CUSTOMER_ID,\n customerId,\n );\n }\n\n /**\n * Set the customer user ID on the current span.\n *\n * The ID is automatically propagated to all child spans via baggage.\n *\n * @param customerUserId - The customer user identifier.\n */\n static setCustomerUserId(customerUserId: string): void {\n BaseTracer._setPropagatingBaggageKey(\n AttributeKeys.JUDGMENT_CUSTOMER_USER_ID,\n customerUserId,\n );\n }\n\n /**\n * Set the session ID on the current span.\n *\n * The ID is automatically propagated to all child spans via baggage.\n *\n * @param sessionId - The session identifier.\n */\n static setSessionId(sessionId: string): void {\n BaseTracer._setPropagatingBaggageKey(\n AttributeKeys.JUDGMENT_SESSION_ID,\n sessionId,\n );\n }\n\n // ------------------------------------------------------------------ //\n // Static: Tags //\n // ------------------------------------------------------------------ //\n\n /**\n * Add tags to the current trace.\n *\n * @param tags - A single tag string or an array of tag strings.\n *\n * @example\n * ```typescript\n * Tracer.tag(\"production\");\n * Tracer.tag([\"important\", \"customer-facing\"]);\n * ```\n */\n static tag(tags: string | string[]): void {\n dontThrow(\"BaseTracer.tag\", () => {\n if (!tags || (Array.isArray(tags) && tags.length === 0)) return;\n const proxy = BaseTracer._getProxyProvider();\n const tracer = proxy.getActiveTracer();\n if (!tracer?.projectId || !tracer._client) return;\n const ids = BaseTracer._getCurrentTraceAndSpanId();\n if (!ids) return;\n const [traceId] = ids;\n const tagArray = Array.isArray(tags) ? tags : [tags];\n tracer._client\n .postV1projectsTracesByTraceIdTags(tracer.projectId, traceId, {\n tags: tagArray,\n })\n .catch((err: unknown) => {\n Logger.error(`tag failed: ${String(err)}`);\n });\n });\n }\n\n // ------------------------------------------------------------------ //\n // Static API: Async Evaluation //\n // ------------------------------------------------------------------ //\n\n /**\n * Trigger an asynchronous server-side evaluation on the current span.\n *\n * The evaluation is queued and processed server-side by the Judgment\n * platform after the span ends. Use this to score live traffic\n * without blocking your application.\n *\n * @param judge - Name of the hosted judge/scorer (e.g. `\"faithfulness\"`,\n * `\"answer_relevancy\"`).\n * @param example - Optional dict with evaluation data. Keys like\n * `input`, `actual_output`, `expected_output`, and `retrieval_context`\n * are commonly used.\n *\n * @example\n * ```typescript\n * Tracer.asyncEvaluate(\"answer_relevancy\", {\n * input: \"What is AI?\",\n * actual_output: response,\n * });\n * ```\n */\n static asyncEvaluate(judge: string, example?: Record<string, unknown>): void {\n dontThrow(\"BaseTracer.asyncEvaluate\", () => {\n const proxy = BaseTracer._getProxyProvider();\n const tracer = proxy.getActiveTracer();\n if (!tracer?.projectId) return;\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n\n const processor = tracer.getSpanProcessor();\n const ctx = currentSpan.spanContext();\n\n const idx = processor.stateIncr(\n ctx,\n InternalAttributeKeys.PENDING_EVALS_COUNT,\n );\n const payload: PendingEvalPayload = {\n project_id: tracer.projectId,\n eval_name: `async_evaluate_${judge}_${idx}`,\n judges: [{ name: judge }],\n examples: [\n {\n ...example,\n example_id: randomUUID(),\n created_at: new Date().toISOString(),\n trace_id: ctx.traceId,\n span_id: ctx.spanId,\n },\n ],\n is_offline: false,\n is_behavior: false,\n };\n const updated = processor.stateAppend<PendingEvalPayload>(\n ctx,\n InternalAttributeKeys.PENDING_EVALS,\n payload,\n );\n\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_PENDING_TRACE_EVAL,\n JSON.stringify(updated),\n );\n });\n }\n}\n\nfunction getInputs<TArgs extends unknown[]>(\n f: (...args: TArgs) => unknown,\n args: TArgs,\n): Record<string, unknown> {\n try {\n const paramNames = parseFunctionArgs(f)\n .map((param) =>\n param\n .replace(/^\\.\\.\\./, \"\")\n .split(\"=\")[0]\n .trim(),\n )\n .filter((param) => param.length > 0);\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",
9
9
  "/* eslint-disable */\n/// Adopted from https://github.com/angular/angular.js/blob/master/src/auto/injector.js\n\nconst ARROW_ARG = /^([^(]+?)=>/;\nconst FN_ARGS = /^[^(]*\\(\\s*([^)]*)\\)/m;\nconst FN_ARG_SPLIT = /,/;\nconst FN_ARG = /^\\s*(_?)(\\S+?)\\1\\s*$/;\nconst STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/gm;\n\nfunction stringifyFn(fn: Function): string {\n return Function.prototype.toString.call(fn);\n}\n\nfunction extractArgs(fn: Function): RegExpMatchArray | null {\n const fnText = stringifyFn(fn).replace(STRIP_COMMENTS, \"\");\n return fnText.match(ARROW_ARG) || fnText.match(FN_ARGS);\n}\n\nexport function parseFunctionArgs(fn: Function): string[] {\n const args = extractArgs(fn);\n if (!args || !args[1]) {\n return [];\n }\n\n return args[1]\n .split(FN_ARG_SPLIT)\n .map((arg) => {\n const match = arg.replace(FN_ARG, (all, underscore, name) => name);\n return match.trim();\n })\n .filter((name) => name.length > 0);\n}\n",
10
10
  "import { JUDGMENT_LOG_LEVEL } from \"../env\";\n\n/**\n * SDK logger with configurable levels and color output.\n *\n * Log level is controlled by the `JUDGMENT_LOG_LEVEL` environment variable.\n * Defaults to \"warn\". Supported levels: \"debug\", \"info\", \"warning\", \"error\", \"critical\".\n *\n * @example\n * ```typescript\n * import { Logger } from \"judgeval\";\n *\n * Logger.setLevel(\"debug\");\n * Logger.info(\"Tracer initialized\");\n * ```\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 /** Set the minimum log level. */\n public static setLevel(level: number): void {\n Logger.currentLevel = level;\n }\n\n /** Enable or disable colored output. */\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 /** Log a debug message. */\n public static debug(message: string): void {\n Logger.log(Logger.Level.DEBUG, message);\n }\n\n /** Log an informational message. */\n public static info(message: string): void {\n Logger.log(Logger.Level.INFO, message);\n }\n\n /** Log a warning message. */\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 /** Log an error message. */\n public static error(message: string): void {\n Logger.log(Logger.Level.ERROR, message);\n }\n\n /** Log a critical error message. */\n public static critical(message: string): void {\n Logger.log(Logger.Level.CRITICAL, message);\n }\n}\n",
11
11
  "import { Logger } from \"./logger\";\n\n/**\n * Run `fn` and swallow any thrown error, logging it instead.\n *\n * @param name - Name used in the error log (typically `\"ClassName.method\"`).\n * @param fn - Function to invoke.\n * @param fallback - Optional value returned when `fn` throws.\n * @returns The return value of `fn`, or `fallback` (or `undefined`) on error.\n */\nexport function dontThrow<T>(name: string, fn: () => T): T | undefined;\nexport function dontThrow<T>(name: string, fn: () => T, fallback: T): T;\nexport function dontThrow<T>(\n name: string,\n fn: () => T,\n fallback?: T,\n): T | undefined {\n try {\n return fn();\n } catch (err) {\n const stack = err instanceof Error && err.stack ? `\\n${err.stack}` : \"\";\n Logger.error(\n `[Caught] An exception was raised in ${name}: ${String(err)}${stack}`,\n );\n return fallback;\n }\n}\n",
12
12
  "import { Logger } from \"./logger\";\n\nexport type Serializer = (obj: unknown) => string;\n\nlet seen: WeakSet<object>;\n\nfunction safeReplacer(this: unknown, _key: string, value: unknown): unknown {\n if (typeof value === \"bigint\") return value.toString();\n if (typeof value === \"object\" && value !== null) {\n if (seen.has(value)) return \"[Circular]\";\n seen.add(value);\n }\n return value;\n}\n\nexport function safeStringify(obj: unknown): string {\n try {\n const result = JSON.stringify(obj);\n if (typeof result === \"string\") return result;\n return String(result);\n } catch {\n try {\n seen = new WeakSet<object>();\n const result = JSON.stringify(obj, safeReplacer);\n return typeof result === \"string\" ? result : String(obj);\n } catch (e) {\n Logger.error(`safeStringify failed: ${e}`);\n return String(obj);\n }\n }\n}\n\n/**\n * Serializes an attribute to an \"Attribute\" compatible value. Primitives are returned as is, objects are serialized using the provided serializer.\n *\n * @param value - The value to serialize.\n * @param serializer - The serializer to use.\n * @returns A string, number, or boolean value.\n */\nexport function serializeAttribute(\n value: unknown,\n serializer: Serializer,\n): string | number | boolean {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n )\n return value;\n return serializer(value);\n}\n",
13
13
  "import {\n type Baggage,\n type Context,\n createContextKey,\n propagation,\n} from \"@opentelemetry/api\";\nimport { JudgmentTracerProvider } from \"../JudgmentTracerProvider\";\n\n/**\n * Judgment baggage store. Baggage is a set of key-value pairs attached\n * to a {@link Context} and automatically propagated to child spans and\n * to downstream services through the `baggage` HTTP header.\n */\n\n/** Create a new {@link Baggage}, optionally pre-populated with entries. */\nexport const createBaggage = propagation.createBaggage.bind(propagation);\n\nconst BAGGAGE_KEY = createContextKey(\"baggage\");\n\n/** Retrieve the baggage attached to the given context. */\nexport function getBaggage(context: Context): Baggage | undefined {\n return (context.getValue(BAGGAGE_KEY) as Baggage | undefined) ?? undefined;\n}\n\n/** Retrieve the baggage attached to the active context. */\nexport function getActiveBaggage(): Baggage | undefined {\n return getBaggage(JudgmentTracerProvider.getInstance().getCurrentContext());\n}\n\n/** Attach a baggage to the given context, returning a new context. */\nexport function setBaggage(context: Context, baggage: Baggage): Context {\n return context.setValue(BAGGAGE_KEY, baggage);\n}\n\n/** Remove the baggage attached to the given context, returning a new context. */\nexport function deleteBaggage(context: Context): Context {\n return context.deleteValue(BAGGAGE_KEY);\n}\n\nexport { baggageEntryMetadataFromString } from \"@opentelemetry/api\";\nexport type {\n Baggage,\n BaggageEntry,\n BaggageEntryMetadata,\n} from \"@opentelemetry/api\";\n\nexport { JudgmentBaggagePropagator } from \"./JudgmentBaggagePropagator\";\n",
14
- "import {\n INVALID_SPAN_CONTEXT,\n ROOT_CONTEXT,\n SpanStatusCode,\n trace,\n type Context,\n type Span,\n type SpanOptions,\n type Tracer,\n type TracerProvider,\n} from \"@opentelemetry/api\";\nimport {\n registerInstrumentations,\n type Instrumentation,\n} from \"@opentelemetry/instrumentation\";\nimport { AsyncLocalStorage } from \"async_hooks\";\nimport { Logger } from \"../utils/logger\";\nimport type { BaseTracer } from \"./BaseTracer\";\nimport {\n installOtelContextBridge,\n runWithOtelBridgeGate,\n} from \"./instrumentation/OtelContextBridge\";\n\nconst TRACER_NAME = \"judgeval\";\n\nconst _contextStorage = new AsyncLocalStorage<Context>();\n\nclass ProxyTracer implements Tracer {\n private _provider: JudgmentTracerProvider;\n\n constructor(provider: JudgmentTracerProvider) {\n this._provider = provider;\n }\n\n startSpan(name: string, options?: SpanOptions, context?: Context): Span {\n const ctx = context ?? this._provider.getCurrentContext();\n const delegate = this._provider._getDelegateTracer();\n return delegate.startSpan(name, options, ctx);\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: [F] | [SpanOptions, F] | [SpanOptions, Context, F]\n ): ReturnType<F> {\n let options: SpanOptions = {};\n let context: Context = this._provider.getCurrentContext();\n let fn: F;\n\n if (args.length === 1) {\n fn = args[0];\n } else if (args.length === 2) {\n options = args[0];\n fn = args[1];\n } else {\n options = args[0];\n context = args[1];\n fn = args[2];\n }\n\n const span = this.startSpan(name, options, context);\n return this._provider.useSpan(span, true, true, true, () =>\n fn(span),\n ) as ReturnType<F>;\n }\n}\n\nclass NoOpTracer implements Tracer {\n startSpan(): Span {\n return trace.wrapSpanContext(INVALID_SPAN_CONTEXT);\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: [F] | [SpanOptions, F] | [SpanOptions, Context, F]\n ): ReturnType<F> {\n const fn =\n args.length === 1 ? args[0] : args.length === 2 ? args[1] : args[2];\n return fn(this.startSpan()) as ReturnType<F>;\n }\n}\n\n/**\n * Global singleton that manages tracer registration and context propagation.\n *\n * Acts as a proxy TracerProvider that delegates to the currently active\n * tracer's underlying OpenTelemetry provider.\n */\nexport class JudgmentTracerProvider implements TracerProvider {\n private static _instance: JudgmentTracerProvider | null = null;\n\n private _activeTracer: BaseTracer | null = null;\n private _instrumentations: Instrumentation[] = [];\n private _noOpTracer: NoOpTracer;\n private _proxyTracer: ProxyTracer;\n private _tracers = new Set<BaseTracer>();\n\n private constructor() {\n this._noOpTracer = new NoOpTracer();\n this._proxyTracer = new ProxyTracer(this);\n installOtelContextBridge(() => this.getCurrentContext());\n }\n\n /**\n * Get the singleton JudgmentTracerProvider instance.\n *\n * @returns The global provider instance.\n */\n static getInstance(): JudgmentTracerProvider {\n JudgmentTracerProvider._instance ??= new JudgmentTracerProvider();\n return JudgmentTracerProvider._instance;\n }\n\n /**\n * Install the JudgmentTracerProvider as the global tracer provider.\n * This generally does not need to be called - Judgeval automatically uses this for all its observability functionality.\n * Only use this if you specifically want to override the global tracer provider, which will enable all Opentelemetry captured instrumentations to flow through judgeval.\n * @returns True if the installation was successful, false otherwise.\n */\n static installAsGlobalTracerProvider(): boolean {\n const instance = JudgmentTracerProvider.getInstance();\n return trace.setGlobalTracerProvider(instance);\n }\n\n /**\n * Register a tracer with the provider.\n *\n * @param tracer - The tracer to register.\n */\n register(tracer: BaseTracer): void {\n this._tracers.add(tracer);\n }\n\n /**\n * Remove a tracer from the provider.\n *\n * @param tracer - The tracer to deregister.\n */\n deregister(tracer: BaseTracer): void {\n this._tracers.delete(tracer);\n }\n\n /**\n * Set a tracer as the active tracer.\n *\n * Cannot be called while a root span is active.\n *\n * @param tracer - The tracer to activate.\n * @returns `true` if activation succeeded.\n */\n setActive(tracer: BaseTracer): boolean {\n const currentSpan = this.getCurrentSpan();\n if (currentSpan?.isRecording()) {\n if (trace.getSpan(this.getCurrentContext()) === currentSpan) {\n Logger.error(\n \"Cannot set_active() while a root span is active. Keeping existing tracer provider.\",\n );\n return false;\n }\n }\n this.register(tracer);\n this._activeTracer = tracer;\n return true;\n }\n\n /**\n * Get the currently active tracer.\n *\n * @returns The active tracer, or `null` if none.\n */\n getActiveTracer(): BaseTracer | null {\n return this._activeTracer;\n }\n\n /**\n * Get the current OpenTelemetry context.\n *\n * @returns The current context.\n */\n getCurrentContext(): Context {\n return _contextStorage.getStore() ?? ROOT_CONTEXT;\n }\n\n /**\n * Get the span from the current context.\n *\n * @returns The current span, or `undefined` if none.\n */\n getCurrentSpan(): Span | undefined {\n const ctx = this.getCurrentContext();\n return trace.getSpan(ctx);\n }\n\n /**\n * Check whether there is an active root span.\n *\n * @returns `true` if a root span is currently recording.\n */\n hasActiveRootSpan(): boolean {\n const currentSpan = this.getCurrentSpan();\n if (!currentSpan?.isRecording()) return false;\n return true;\n }\n\n _getDelegateTracer(): Tracer {\n const tracer = this._activeTracer;\n if (!tracer) {\n Logger.debug(\"No active tracer, returning NoOpTracer\");\n return this._noOpTracer;\n }\n return tracer._tracerProvider.getTracer(TRACER_NAME);\n }\n\n getTracer(\n _instrumentingModuleName: string,\n _instrumentingLibraryVersion?: string,\n _options?: { schemaUrl?: string },\n ): Tracer {\n return this._proxyTracer;\n }\n\n /**\n * Register an OpenTelemetry instrumentation.\n *\n * @param instrumentor - The instrumentation to add.\n */\n addInstrumentation(instrumentor: Instrumentation): void {\n try {\n registerInstrumentations({\n tracerProvider: this,\n instrumentations: [instrumentor],\n });\n this._instrumentations.push(instrumentor);\n } catch (err: unknown) {\n Logger.error(`Failed to add instrumentation: ${String(err)}`);\n }\n }\n\n useSpan<T>(\n span: Span,\n endOnExit: boolean,\n recordException: boolean,\n setStatusOnException: boolean,\n fn: () => T,\n ): T {\n const prevCtx = this.getCurrentContext();\n const ctx = trace.setSpan(prevCtx, span);\n return _contextStorage.run(ctx, () =>\n runWithOtelBridgeGate(ctx, () => {\n try {\n const result = fn();\n if (result instanceof Promise) {\n return result\n .catch((exc: unknown) => {\n if (span.isRecording()) {\n if (recordException) span.recordException(exc as Error);\n if (setStatusOnException) {\n const err = exc as Error;\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: `${err.name}: ${err.message}`,\n });\n }\n }\n throw exc;\n })\n .finally(() => {\n if (endOnExit) span.end();\n }) as T;\n }\n if (endOnExit) span.end();\n return result;\n } catch (exc) {\n if (span.isRecording()) {\n if (recordException) span.recordException(exc as Error);\n if (setStatusOnException) {\n const err = exc as Error;\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: `${err.name}: ${err.message}`,\n });\n }\n }\n if (endOnExit) span.end();\n throw exc;\n }\n }),\n );\n }\n\n attachContext(ctx: Context): void {\n _contextStorage.enterWith(ctx);\n }\n\n /**\n * Run `fn` with `ctx` installed as the active context for the\n * duration of the callback. Sync or async.\n */\n withContext<T>(ctx: Context, fn: () => T): T {\n return _contextStorage.run(ctx, () => runWithOtelBridgeGate(ctx, fn));\n }\n\n /**\n * Flush all registered tracers.\n */\n async forceFlush(): Promise<void> {\n const results = await Promise.allSettled(\n Array.from(this._tracers).map((t) => t._tracerProvider.forceFlush()),\n );\n for (const r of results) {\n if (r.status === \"rejected\") {\n Logger.error(`forceFlush failed: ${String(r.reason)}`);\n }\n }\n }\n\n /**\n * Shut down all registered tracers and clear state.\n */\n async shutdown(): Promise<void> {\n const results = await Promise.allSettled(\n Array.from(this._tracers).map((t) => t._tracerProvider.shutdown()),\n );\n for (const r of results) {\n if (r.status === \"rejected\") {\n Logger.error(`shutdown failed: ${String(r.reason)}`);\n }\n }\n this._activeTracer = null;\n this._tracers.clear();\n }\n}\n",
14
+ "import {\n INVALID_SPAN_CONTEXT,\n ROOT_CONTEXT,\n SpanStatusCode,\n trace,\n type Context,\n type Span,\n type SpanOptions,\n type Tracer,\n type TracerProvider,\n} from \"@opentelemetry/api\";\nimport {\n registerInstrumentations,\n type Instrumentation,\n} from \"@opentelemetry/instrumentation\";\nimport { AsyncLocalStorage } from \"async_hooks\";\nimport { Logger } from \"../utils/logger\";\nimport type { BaseTracer } from \"./BaseTracer\";\nimport {\n installOtelContextBridge,\n runWithOtelBridgeGate,\n} from \"./instrumentation/OtelContextBridge\";\n\nconst TRACER_NAME = \"judgeval\";\n\nconst _contextStorage = new AsyncLocalStorage<Context>();\n\nclass ProxyTracer implements Tracer {\n private _provider: JudgmentTracerProvider;\n\n constructor(provider: JudgmentTracerProvider) {\n this._provider = provider;\n }\n\n startSpan(name: string, options?: SpanOptions, context?: Context): Span {\n const ctx = context ?? this._provider.getCurrentContext();\n const delegate = this._provider._getDelegateTracer();\n return delegate.startSpan(name, options, ctx);\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: [F] | [SpanOptions, F] | [SpanOptions, Context, F]\n ): ReturnType<F> {\n let options: SpanOptions = {};\n let context: Context = this._provider.getCurrentContext();\n let fn: F;\n\n if (args.length === 1) {\n fn = args[0];\n } else if (args.length === 2) {\n options = args[0];\n fn = args[1];\n } else {\n options = args[0];\n context = args[1];\n fn = args[2];\n }\n\n const span = this.startSpan(name, options, context);\n return this._provider.useSpan(span, false, false, false, () =>\n fn(span),\n ) as ReturnType<F>;\n }\n}\n\nclass NoOpTracer implements Tracer {\n startSpan(): Span {\n return trace.wrapSpanContext(INVALID_SPAN_CONTEXT);\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: [F] | [SpanOptions, F] | [SpanOptions, Context, F]\n ): ReturnType<F> {\n const fn =\n args.length === 1 ? args[0] : args.length === 2 ? args[1] : args[2];\n return fn(this.startSpan()) as ReturnType<F>;\n }\n}\n\n/**\n * Global singleton that manages tracer registration and context propagation.\n *\n * Acts as a proxy TracerProvider that delegates to the currently active\n * tracer's underlying OpenTelemetry provider.\n */\nexport class JudgmentTracerProvider implements TracerProvider {\n private static _instance: JudgmentTracerProvider | null = null;\n\n private _activeTracer: BaseTracer | null = null;\n private _instrumentations: Instrumentation[] = [];\n private _noOpTracer: NoOpTracer;\n private _proxyTracer: ProxyTracer;\n private _tracers = new Set<BaseTracer>();\n\n private constructor() {\n this._noOpTracer = new NoOpTracer();\n this._proxyTracer = new ProxyTracer(this);\n installOtelContextBridge(() => this.getCurrentContext());\n }\n\n /**\n * Get the singleton JudgmentTracerProvider instance.\n *\n * @returns The global provider instance.\n */\n static getInstance(): JudgmentTracerProvider {\n JudgmentTracerProvider._instance ??= new JudgmentTracerProvider();\n return JudgmentTracerProvider._instance;\n }\n\n /**\n * Install the JudgmentTracerProvider as the global tracer provider.\n * This generally does not need to be called - Judgeval automatically uses this for all its observability functionality.\n * Only use this if you specifically want to override the global tracer provider, which will enable all Opentelemetry captured instrumentations to flow through judgeval.\n * @returns True if the installation was successful, false otherwise.\n */\n static installAsGlobalTracerProvider(): boolean {\n const instance = JudgmentTracerProvider.getInstance();\n return trace.setGlobalTracerProvider(instance);\n }\n\n /**\n * Register a tracer with the provider.\n *\n * @param tracer - The tracer to register.\n */\n register(tracer: BaseTracer): void {\n this._tracers.add(tracer);\n }\n\n /**\n * Remove a tracer from the provider.\n *\n * @param tracer - The tracer to deregister.\n */\n deregister(tracer: BaseTracer): void {\n this._tracers.delete(tracer);\n }\n\n /**\n * Set a tracer as the active tracer.\n *\n * Cannot be called while a root span is active.\n *\n * @param tracer - The tracer to activate.\n * @returns `true` if activation succeeded.\n */\n setActive(tracer: BaseTracer): boolean {\n const currentSpan = this.getCurrentSpan();\n if (currentSpan?.isRecording()) {\n if (trace.getSpan(this.getCurrentContext()) === currentSpan) {\n Logger.error(\n \"Cannot set_active() while a root span is active. Keeping existing tracer provider.\",\n );\n return false;\n }\n }\n this.register(tracer);\n this._activeTracer = tracer;\n return true;\n }\n\n /**\n * Get the currently active tracer.\n *\n * @returns The active tracer, or `null` if none.\n */\n getActiveTracer(): BaseTracer | null {\n return this._activeTracer;\n }\n\n /**\n * Get the current OpenTelemetry context.\n *\n * @returns The current context.\n */\n getCurrentContext(): Context {\n return _contextStorage.getStore() ?? ROOT_CONTEXT;\n }\n\n /**\n * Get the span from the current context.\n *\n * @returns The current span, or `undefined` if none.\n */\n getCurrentSpan(): Span | undefined {\n const ctx = this.getCurrentContext();\n return trace.getSpan(ctx);\n }\n\n /**\n * Check whether there is an active root span.\n *\n * @returns `true` if a root span is currently recording.\n */\n hasActiveRootSpan(): boolean {\n const currentSpan = this.getCurrentSpan();\n if (!currentSpan?.isRecording()) return false;\n return true;\n }\n\n _getDelegateTracer(): Tracer {\n const tracer = this._activeTracer;\n if (!tracer) {\n Logger.debug(\"No active tracer, returning NoOpTracer\");\n return this._noOpTracer;\n }\n return tracer._tracerProvider.getTracer(TRACER_NAME);\n }\n\n getTracer(\n _instrumentingModuleName: string,\n _instrumentingLibraryVersion?: string,\n _options?: { schemaUrl?: string },\n ): Tracer {\n return this._proxyTracer;\n }\n\n /**\n * Register an OpenTelemetry instrumentation.\n *\n * @param instrumentor - The instrumentation to add.\n */\n addInstrumentation(instrumentor: Instrumentation): void {\n try {\n registerInstrumentations({\n tracerProvider: this,\n instrumentations: [instrumentor],\n });\n this._instrumentations.push(instrumentor);\n } catch (err: unknown) {\n Logger.error(`Failed to add instrumentation: ${String(err)}`);\n }\n }\n\n useSpan<T>(\n span: Span,\n endOnExit: boolean,\n recordException: boolean,\n setStatusOnException: boolean,\n fn: () => T,\n ): T {\n const prevCtx = this.getCurrentContext();\n const ctx = trace.setSpan(prevCtx, span);\n return _contextStorage.run(ctx, () =>\n runWithOtelBridgeGate(ctx, () => {\n try {\n const result = fn();\n if (result instanceof Promise) {\n return result\n .catch((exc: unknown) => {\n if (span.isRecording()) {\n if (recordException) span.recordException(exc as Error);\n if (setStatusOnException) {\n const err = exc as Error;\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: `${err.name}: ${err.message}`,\n });\n }\n }\n throw exc;\n })\n .finally(() => {\n if (endOnExit) span.end();\n }) as T;\n }\n if (endOnExit) span.end();\n return result;\n } catch (exc) {\n if (span.isRecording()) {\n if (recordException) span.recordException(exc as Error);\n if (setStatusOnException) {\n const err = exc as Error;\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: `${err.name}: ${err.message}`,\n });\n }\n }\n if (endOnExit) span.end();\n throw exc;\n }\n }),\n );\n }\n\n attachContext(ctx: Context): void {\n _contextStorage.enterWith(ctx);\n }\n\n /**\n * Run `fn` with `ctx` installed as the active context for the\n * duration of the callback. Sync or async.\n */\n withContext<T>(ctx: Context, fn: () => T): T {\n return _contextStorage.run(ctx, () => runWithOtelBridgeGate(ctx, fn));\n }\n\n /**\n * Flush all registered tracers.\n */\n async forceFlush(): Promise<void> {\n const results = await Promise.allSettled(\n Array.from(this._tracers).map((t) => t._tracerProvider.forceFlush()),\n );\n for (const r of results) {\n if (r.status === \"rejected\") {\n Logger.error(`forceFlush failed: ${String(r.reason)}`);\n }\n }\n }\n\n /**\n * Shut down all registered tracers and clear state.\n */\n async shutdown(): Promise<void> {\n const results = await Promise.allSettled(\n Array.from(this._tracers).map((t) => t._tracerProvider.shutdown()),\n );\n for (const r of results) {\n if (r.status === \"rejected\") {\n Logger.error(`shutdown failed: ${String(r.reason)}`);\n }\n }\n this._activeTracer = null;\n this._tracers.clear();\n }\n}\n",
15
15
  "import {\n ROOT_CONTEXT,\n context as otelContext,\n type Context,\n} from \"@opentelemetry/api\";\nimport { AsyncLocalStorage } from \"async_hooks\";\n\ntype OTelContextApi = typeof otelContext;\n\nlet installed = false;\nlet getJudgmentContext: (() => Context) | null = null;\n\nconst gateStorage = new AsyncLocalStorage<boolean>();\nconst bridgeContextStorage = new AsyncLocalStorage<Context>();\n\nconst originalActive = otelContext.active.bind(otelContext);\nconst originalWith = otelContext.with.bind(otelContext);\nconst originalBind = otelContext.bind.bind(otelContext);\n\nfunction isGateEnabled(): boolean {\n return gateStorage.getStore() === true;\n}\n\nexport function installOtelContextBridge(\n getCurrentJudgmentContext: () => Context,\n): void {\n getJudgmentContext = getCurrentJudgmentContext;\n if (installed) return;\n\n const api = otelContext as OTelContextApi & {\n active: () => Context;\n with: <A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n context: Context,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n ) => ReturnType<F>;\n bind: <T>(context: Context, target: T) => T;\n };\n\n api.active = (): Context => {\n if (!isGateEnabled()) return originalActive();\n const bridged = bridgeContextStorage.getStore();\n if (bridged) return bridged;\n return getJudgmentContext ? getJudgmentContext() : ROOT_CONTEXT;\n };\n\n api.with = (contextValue, fn, thisArg, ...args) => {\n if (!isGateEnabled())\n return originalWith(contextValue, fn, thisArg, ...args);\n return bridgeContextStorage.run(contextValue, () =>\n fn.apply(thisArg, args),\n );\n };\n\n api.bind = (contextValue, target) => {\n if (!isGateEnabled()) return originalBind(contextValue, target);\n if (typeof target !== \"function\") return target;\n const fn = target as unknown as (...args: unknown[]) => unknown;\n return ((...args: unknown[]) =>\n bridgeContextStorage.run(contextValue, () =>\n fn(...args),\n )) as typeof target;\n };\n\n installed = true;\n}\n\nexport function runWithOtelBridgeGate<T>(ctx: Context, fn: () => T): T {\n return gateStorage.run(true, () => bridgeContextStorage.run(ctx, fn));\n}\n",
16
16
  "import {\n type BaggageEntry,\n type Context,\n type TextMapGetter,\n type TextMapPropagator,\n type TextMapSetter,\n} from \"@opentelemetry/api\";\nimport { isTracingSuppressed } from \"@opentelemetry/core\";\nimport {\n BAGGAGE_HEADER,\n BAGGAGE_ITEMS_SEPARATOR,\n BAGGAGE_MAX_NAME_VALUE_PAIRS,\n BAGGAGE_MAX_PER_NAME_VALUE_PAIRS,\n} from \"./constants\";\nimport { createBaggage, getBaggage, setBaggage } from \"./index\";\nimport { getKeyPairs, parsePairKeyValue, serializeKeyPairs } from \"./utils\";\n\n/**\n * Propagates {@link Baggage} through the W3C `baggage` header.\n *\n * Implements the W3C Baggage specification: https://w3c.github.io/baggage/\n */\nexport class JudgmentBaggagePropagator implements TextMapPropagator {\n inject(context: Context, carrier: unknown, setter: TextMapSetter): void {\n const baggage = getBaggage(context);\n if (!baggage || isTracingSuppressed(context)) return;\n const keyPairs = getKeyPairs(baggage)\n .filter((pair) => pair.length <= BAGGAGE_MAX_PER_NAME_VALUE_PAIRS)\n .slice(0, BAGGAGE_MAX_NAME_VALUE_PAIRS);\n const headerValue = serializeKeyPairs(keyPairs);\n if (headerValue.length > 0) {\n setter.set(carrier, BAGGAGE_HEADER, headerValue);\n }\n }\n\n extract(context: Context, carrier: unknown, getter: TextMapGetter): Context {\n const headerValue = getter.get(carrier, BAGGAGE_HEADER);\n const baggageString = Array.isArray(headerValue)\n ? headerValue.join(BAGGAGE_ITEMS_SEPARATOR)\n : headerValue;\n if (!baggageString) return context;\n const baggage: Record<string, BaggageEntry> = {};\n if (baggageString.length === 0) return context;\n const pairs = baggageString.split(BAGGAGE_ITEMS_SEPARATOR);\n pairs.forEach((entry) => {\n const keyPair = parsePairKeyValue(entry);\n if (keyPair) {\n const baggageEntry: BaggageEntry = { value: keyPair.value };\n if (keyPair.metadata) {\n baggageEntry.metadata = keyPair.metadata;\n }\n baggage[keyPair.key] = baggageEntry;\n }\n });\n if (Object.entries(baggage).length === 0) {\n return context;\n }\n return setBaggage(context, createBaggage(baggage));\n }\n\n fields(): string[] {\n return [BAGGAGE_HEADER];\n }\n}\n",
17
17
  "export const BAGGAGE_KEY_PAIR_SEPARATOR = \"=\";\nexport const BAGGAGE_PROPERTIES_SEPARATOR = \";\";\nexport const BAGGAGE_ITEMS_SEPARATOR = \",\";\n\n/** Name of the HTTP header used to propagate baggage. */\nexport const BAGGAGE_HEADER = \"baggage\";\n\n/** Maximum number of name-value pairs allowed by the W3C Baggage spec. */\nexport const BAGGAGE_MAX_NAME_VALUE_PAIRS = 180;\n\n/** Maximum number of bytes per a single name-value pair allowed by the W3C Baggage spec. */\nexport const BAGGAGE_MAX_PER_NAME_VALUE_PAIRS = 4096;\n\n/** Maximum total length of all name-value pairs allowed by the W3C Baggage spec. */\nexport const BAGGAGE_MAX_TOTAL_LENGTH = 8192;\n",
@@ -27,7 +27,7 @@
27
27
  "import type { JudgmentApiClient } from \"../internal/api\";\nimport { Logger } from \"./logger\";\nimport { retry } from \"./retry\";\n\nconst cache = new Map<string, string>();\nconst inflight = new Map<string, Promise<string>>();\n\nexport async function resolveProjectId(\n client: JudgmentApiClient,\n projectName: string,\n): Promise<string> {\n const cacheKey = `org:${client.getOrganizationId()}:project:${projectName}`;\n const cached = cache.get(cacheKey);\n if (cached) {\n return cached;\n }\n const pending = inflight.get(cacheKey);\n if (pending) {\n return pending;\n }\n const request = (async (): Promise<string> => {\n Logger.info(`Resolving project ID for project: ${projectName}`);\n const projectId = await retry(\n async () => {\n const response = await client.postV1projectsResolve({\n project_name: projectName,\n });\n const id = response.project_id;\n if (!id) {\n throw new Error(`Project ID not found for project: ${projectName}`);\n }\n return id;\n },\n {\n maxRetries: 3,\n backoff: (iteration) => iteration * 1000,\n onRetry: (attempt, error) => {\n Logger.warning(\n `Failed to resolve project ID for '${projectName}' (attempt ${attempt}): ${String(error)}`,\n );\n },\n },\n );\n Logger.info(`Resolved project ID: ${projectId}`);\n cache.set(cacheKey, projectId);\n return projectId;\n })();\n inflight.set(cacheKey, request);\n try {\n return await request;\n } finally {\n inflight.delete(cacheKey);\n }\n}\n",
28
28
  "import { version } from \"../package.json\" with { type: \"json\" };\n\nexport const VERSION = version;\n"
29
29
  ],
30
- "mappings": "+wBAEA,SAAS,CAAS,CAAC,EAAiB,EAAsC,CACxE,IAAM,EAAQ,QAAQ,IAAI,GAC1B,GAAI,CAAC,EACH,OAAO,GAAgB,KAEzB,OAAO,EAGF,IAAM,EAAmB,EAAU,kBAAkB,EAC/C,EAAkB,EAAU,iBAAiB,EAC7C,EAAmB,EAC9B,mBACA,6BACF,EACa,GAAqB,EAAU,qBAAsB,MAAM,EC4BjE,MAAM,CAAkB,CACrB,QACA,OACA,eAER,WAAW,CAAC,EAAiB,EAAgB,EAAwB,CACnE,KAAK,QAAU,EACf,KAAK,OAAS,EACd,KAAK,eAAiB,EAGxB,UAAU,EAAW,CACnB,OAAO,KAAK,QAEd,SAAS,EAAW,CAClB,OAAO,KAAK,OAEd,iBAAiB,EAAW,CAC1B,OAAO,KAAK,oBAGA,QAAU,CACtB,EACA,EACA,EACY,CACZ,IAAM,EAAW,MAAM,MAAM,EAAK,CAChC,SACA,QAAS,CACP,eAAgB,mBAChB,cAAe,UAAU,KAAK,SAC9B,oBAAqB,KAAK,cAC5B,EACA,KAAM,IAAS,OAAY,KAAK,UAAU,CAAI,EAAI,MACpD,CAAC,EACD,GAAI,CAAC,EAAS,GAAI,CAChB,IAAM,EAAO,MAAM,EAAS,KAAK,EACjC,MAAU,MAAM,QAAQ,EAAS,WAAW,GAAM,EAEpD,OAAO,EAAS,KAAK,OAGjB,iBAAgB,EAAqB,CACzC,IAAM,EAAM,KAAK,QAAU,kBAC3B,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAC,CAAC,OAG/B,sBAAqB,CACzB,EACiC,CACjC,IAAM,EAAM,KAAK,QAAU,wBAC3B,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAO,OAGpC,eAAc,CAClB,EAC6B,CAC7B,IAAM,EAAM,KAAK,QAAU,eAC3B,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAO,OAGpC,iBAAgB,CAAC,EAAmD,CACxE,IAAM,EAAM,KAAK,QAAU,gBAAgB,IAC3C,OAAO,KAAK,QAAQ,SAAU,EAAK,CAAC,CAAC,OAGjC,uBAAsB,CAC1B,EACA,EACgC,CAChC,IAAM,EAAM,KAAK,QAAU,gBAAgB,aAC3C,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAO,OAGpC,sBAAqB,CACzB,EACkC,CAClC,IAAM,EAAM,KAAK,QAAU,gBAAgB,aAC3C,OAAO,KAAK,QAAQ,MAAO,EAAK,MAAS,OAGrC,4CAA2C,CAC/C,EACA,EACA,EACiC,CACjC,IAAM,EACJ,KAAK,QACL,gBAAgB,cAAsB,aACxC,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAO,OAGpC,mCAAkC,CACtC,EACA,EAC8B,CAC9B,IAAM,EACJ,KAAK,QAAU,gBAAgB,cAAsB,IACvD,OAAO,KAAK,QAAQ,MAAO,EAAK,MAAS,OAGrC,+BAA8B,CAClC,EACA,EACkB,CAClB,IAAM,EAAM,KAAK,QAAU,gBAAgB,sBAC3C,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAO,OAGpC,6BAA4B,CAChC,EACA,EACkB,CAClB,IAAM,EAAM,KAAK,QAAU,gBAAgB,oBAC3C,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAO,OAGpC,0BAAyB,CAC7B,EACA,EACiC,CACjC,IAAM,EAAM,KAAK,QAAU,gBAAgB,iBAC3C,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAO,OAGpC,kCAAiC,CACrC,EACA,EACyC,CACzC,IAAM,EACJ,KAAK,QAAU,gBAAgB,0BACjC,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAO,OAGpC,gCAA+B,CACnC,EACA,EACqC,CACrC,IAAM,EAAM,KAAK,QAAU,gBAAgB,iBAAyB,IACpE,OAAO,KAAK,QAAQ,MAAO,EAAK,MAAS,OAGrC,gCAA+B,CACnC,EACA,EAC4C,CAC5C,IAAM,EAAM,KAAK,QAAU,gBAAgB,wBAC3C,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAO,OAGpC,8BAA6B,CACjC,EACA,EAC0C,CAC1C,IAAM,EAAM,KAAK,QAAU,gBAAgB,sBAC3C,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAO,OAGpC,2BAA0B,CAC9B,EACA,EACA,EACA,EAC8B,CAC9B,IAAM,EAAS,IAAI,gBACnB,GAAI,IAAc,OAAW,EAAO,IAAI,YAAa,CAAS,EAC9D,GAAI,IAAQ,OAAW,EAAO,IAAI,MAAO,CAAG,EAC5C,IAAM,EACJ,KAAK,QACL,gBAAgB,aAAqB,KACpC,EAAO,SAAS,EAAI,IAAM,EAAO,SAAS,EAAI,IACjD,OAAO,KAAK,QAAQ,MAAO,EAAK,MAAS,OAGrC,sBAAqB,CACzB,EACA,EAC+B,CAC/B,IAAM,EAAM,KAAK,QAAU,gBAAgB,YAC3C,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAO,OAGpC,gCAA+B,CACnC,EACA,EACA,EAC4B,CAC5B,IAAM,EAAM,KAAK,QAAU,gBAAgB,aAAqB,SAChE,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAO,OAGpC,kCAAiC,CACrC,EACA,EACA,EAC8B,CAC9B,IAAM,EAAM,KAAK,QAAU,gBAAgB,aAAqB,SAChE,OAAO,KAAK,QAAQ,SAAU,EAAK,CAAO,OAGtC,mCAAkC,CACtC,EACA,EACoC,CACpC,IAAM,EACJ,KAAK,QAAU,gBAAgB,aAAqB,aACtD,OAAO,KAAK,QAAQ,MAAO,EAAK,MAAS,OAGrC,qBAAoB,CACxB,EACA,EACA,EACqC,CACrC,IAAM,EAAS,IAAI,gBACnB,GAAI,IAAU,OAAW,EAAO,IAAI,QAAS,CAAK,EAClD,GAAI,IAAa,OAAW,EAAO,IAAI,WAAY,CAAQ,EAC3D,IAAM,EACJ,KAAK,QACL,gBAAgB,aACf,EAAO,SAAS,EAAI,IAAM,EAAO,SAAS,EAAI,IACjD,OAAO,KAAK,QAAQ,MAAO,EAAK,MAAS,OAGrC,iCAAgC,CACpC,EACA,EAC+B,CAC/B,IAAM,EACJ,KAAK,QAAU,gBAAgB,aAAqB,WACtD,OAAO,KAAK,QAAQ,MAAO,EAAK,MAAS,OAGrC,4BAA2B,CAAC,EAAqC,CACrE,IAAM,EAAM,KAAK,QAAU,gBAAgB,mBAC3C,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAC,CAAC,OAG/B,kCAAiC,CACrC,EACqC,CACrC,IAAM,EACJ,KAAK,QAAU,gBAAgB,0BACjC,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAC,CAAC,OAG/B,uCAAsC,CAC1C,EACA,EACqC,CACrC,IAAM,EACJ,KAAK,QAAU,gBAAgB,oBAA4B,WAC7D,OAAO,KAAK,QAAQ,MAAO,EAAK,MAAS,OAGrC,kCAAiC,CACrC,EACA,EACA,EAC+B,CAC/B,IAAM,EACJ,KAAK,QAAU,gBAAgB,YAAoB,SACrD,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAO,OAGpC,yCAAwC,CAC5C,EACA,EACgC,CAChC,IAAM,EAAM,KAAK,QAAU,uBAAuB,KAAe,IACjE,OAAO,KAAK,QAAQ,MAAO,EAAK,MAAS,OAGrC,yBAAwB,CAC5B,EACA,EACA,EACsC,CACtC,IAAM,EAAS,IAAI,gBACnB,GAAI,IAAU,OAAW,EAAO,IAAI,QAAS,CAAK,EAClD,GAAI,IAAW,OAAW,EAAO,IAAI,SAAU,CAAM,EACrD,IAAM,EACJ,KAAK,QACL,8BAA8B,KAC7B,EAAO,SAAS,EAAI,IAAM,EAAO,SAAS,EAAI,IACjD,OAAO,KAAK,QAAQ,MAAO,EAAK,MAAS,OAGrC,wBAAuB,CAC3B,EACoC,CACpC,IAAM,EAAM,KAAK,QAAU,4BAC3B,OAAO,KAAK,QAAQ,OAAQ,EAAK,CAAO,EAE5C,CCjTO,MAAM,CAAS,CACH,eAEP,WAAW,CAAC,EAAyB,CAAC,EAAG,CACjD,IAAM,EAAS,EAAO,QAAU,EAC1B,EAAiB,EAAO,gBAAkB,EAC1C,EAAS,EAAO,QAAU,EAEhC,GAAI,CAAC,EACH,MAAU,MAAM,qBAAqB,EAEvC,GAAI,CAAC,EACH,MAAU,MAAM,6BAA6B,EAE/C,GAAI,CAAC,EACH,MAAU,MAAM,qBAAqB,EAGvC,KAAK,eAAiB,IAAI,EAAkB,EAAQ,EAAQ,CAAc,QAiBrE,OAAM,CAAC,EAAyB,CAAC,EAAa,CACnD,OAAO,IAAI,EAAS,CAAM,EAE9B,CCjEO,IANP,gCAcA,qBCXA,IAAM,GAAY,cACZ,GAAU,wBACV,GAAe,IACf,GAAS,uBACT,GAAiB,mCAEvB,SAAS,EAAW,CAAC,EAAsB,CACzC,OAAO,SAAS,UAAU,SAAS,KAAK,CAAE,EAG5C,SAAS,EAAW,CAAC,EAAuC,CAC1D,IAAM,EAAS,GAAY,CAAE,EAAE,QAAQ,GAAgB,EAAE,EACzD,OAAO,EAAO,MAAM,EAAS,GAAK,EAAO,MAAM,EAAO,EAGjD,SAAS,EAAiB,CAAC,EAAwB,CACxD,IAAM,EAAO,GAAY,CAAE,EAC3B,GAAI,CAAC,GAAQ,CAAC,EAAK,GACjB,MAAO,CAAC,EAGV,OAAO,EAAK,GACT,MAAM,EAAY,EAClB,IAAI,CAAC,IAAQ,CAEZ,OADc,EAAI,QAAQ,GAAQ,CAAC,EAAK,EAAY,IAAS,CAAI,EACpD,KAAK,EACnB,EACA,OAAO,CAAC,IAAS,EAAK,OAAS,CAAC,ECd9B,MAAM,CAAO,OACM,OAAQ,gBACR,KAAM,iBACN,QAAS,iBACT,MAAO,iBAEjB,OAAQ,CACpB,MAAO,EACP,KAAM,EACN,QAAS,EACT,MAAO,EACP,SAAU,CACZ,QAEe,aAAc,SACd,cAAuB,EAAO,MAAM,cACpC,UAAW,SAEX,WAAU,EAAS,CAChC,GAAI,CAAC,EAAO,YAAa,CACvB,IAAM,EAAU,QAAQ,IAAI,kBAC5B,EAAO,SAAW,CAAC,GAAW,QAAQ,OAAO,MAE7C,IAAM,EAAW,GAAmB,YAAY,EAChD,GAAI,EAAU,CACZ,IAAM,EAAmC,CACvC,MAAO,EAAO,MAAM,MACpB,KAAM,EAAO,MAAM,KACnB,QAAS,EAAO,MAAM,QACtB,KAAM,EAAO,MAAM,QACnB,MAAO,EAAO,MAAM,MACpB,SAAU,EAAO,MAAM,QACzB,EACA,EAAO,aAAe,EAAS,IAAa,EAAO,MAAM,QAG3D,EAAO,YAAc,UAKX,SAAQ,CAAC,EAAqB,CAC1C,EAAO,aAAe,QAIV,YAAW,CAAC,EAAyB,CACjD,EAAO,SAAW,QAGL,IAAG,CAAC,EAAe,EAAuB,CAGvD,GAFA,EAAO,WAAW,EAEd,EAAQ,EAAO,aACjB,OAGF,IAAM,EAAY,IAAI,KAAK,EACxB,YAAY,EACZ,QAAQ,IAAK,GAAG,EAChB,UAAU,EAAG,EAAE,EACZ,EACJ,OAAO,KAAK,EAAO,KAAK,EAAE,KACxB,CAAC,IAAQ,EAAO,MAAM,KAAsC,CAC9D,GAAK,UACH,EAAmB,GAAG,kBAA0B,OAAe,IAEnE,GAAI,EAAO,SAOT,EAAmB,GALjB,IAAU,EAAO,MAAM,OAAS,IAAU,EAAO,MAAM,KACnD,EAAO,KACP,IAAU,EAAO,MAAM,QACrB,EAAO,OACP,EAAO,MACe,IAAmB,EAAO,SAIxD,GAAS,EAAO,MAAM,MAAQ,QAAQ,OAAS,QAAQ,QAClD,MAAM,EAAmB;AAAA,CAAI,QAIxB,MAAK,CAAC,EAAuB,CACzC,EAAO,IAAI,EAAO,MAAM,MAAO,CAAO,QAI1B,KAAI,CAAC,EAAuB,CACxC,EAAO,IAAI,EAAO,MAAM,KAAM,CAAO,QAIzB,QAAO,CAAC,EAAuB,CAC3C,EAAO,IAAI,EAAO,MAAM,QAAS,CAAO,QAG5B,KAAI,CAAC,EAAuB,CACxC,EAAO,IAAI,EAAO,MAAM,QAAS,CAAO,QAI5B,MAAK,CAAC,EAAuB,CACzC,EAAO,IAAI,EAAO,MAAM,MAAO,CAAO,QAI1B,SAAQ,CAAC,EAAuB,CAC5C,EAAO,IAAI,EAAO,MAAM,SAAU,CAAO,EAE7C,CClHO,SAAS,CAAY,CAC1B,EACA,EACA,EACe,CACf,GAAI,CACF,OAAO,EAAG,EACV,MAAO,EAAK,CACZ,IAAM,EAAQ,aAAe,OAAS,EAAI,MAAQ;AAAA,EAAK,EAAI,QAAU,GAIrE,OAHA,EAAO,MACL,uCAAuC,MAAS,OAAO,CAAG,IAAI,GAChE,EACO,GCpBX,IAAI,GAEJ,SAAS,EAAY,CAAgB,EAAc,EAAyB,CAC1E,GAAI,OAAO,IAAU,SAAU,OAAO,EAAM,SAAS,EACrD,GAAI,OAAO,IAAU,UAAY,IAAU,KAAM,CAC/C,GAAI,GAAK,IAAI,CAAK,EAAG,MAAO,aAC5B,GAAK,IAAI,CAAK,EAEhB,OAAO,EAGF,SAAS,CAAa,CAAC,EAAsB,CAClD,GAAI,CACF,IAAM,EAAS,KAAK,UAAU,CAAG,EACjC,GAAI,OAAO,IAAW,SAAU,OAAO,EACvC,OAAO,OAAO,CAAM,EACpB,KAAM,CACN,GAAI,CACF,GAAO,IAAI,QACX,IAAM,EAAS,KAAK,UAAU,EAAK,EAAY,EAC/C,OAAO,OAAO,IAAW,SAAW,EAAS,OAAO,CAAG,EACvD,MAAO,EAAG,CAEV,OADA,EAAO,MAAM,yBAAyB,GAAG,EAClC,OAAO,CAAG,IAYhB,SAAS,CAAkB,CAChC,EACA,EAC2B,CAC3B,GACE,OAAO,IAAU,UACjB,OAAO,IAAU,UACjB,OAAO,IAAU,UAEjB,OAAO,EACT,OAAO,EAAW,CAAK,0NC5ClB,IALP,gCCUO,IAVP,gCAWA,6CAIA,0BCXO,IAJP,gCAKA,0BAII,GAAY,GACZ,GAA6C,KAE3C,GAAc,IAAI,qBAClB,EAAuB,IAAI,qBAE3B,GAAiB,UAAY,OAAO,KAAK,SAAW,EACpD,GAAe,UAAY,KAAK,KAAK,SAAW,EAChD,GAAe,UAAY,KAAK,KAAK,SAAW,EAEtD,SAAS,EAAa,EAAY,CAChC,OAAO,GAAY,SAAS,IAAM,GAG7B,SAAS,EAAwB,CACtC,EACM,CAEN,GADA,GAAqB,EACjB,GAAW,OAEf,IAAM,EAAM,UAWZ,EAAI,OAAS,IAAe,CAC1B,GAAI,CAAC,GAAc,EAAG,OAAO,GAAe,EAC5C,IAAM,EAAU,EAAqB,SAAS,EAC9C,GAAI,EAAS,OAAO,EACpB,OAAO,GAAqB,GAAmB,EAAI,gBAGrD,EAAI,KAAO,CAAC,EAAc,EAAI,KAAY,IAAS,CACjD,GAAI,CAAC,GAAc,EACjB,OAAO,GAAa,EAAc,EAAI,EAAS,GAAG,CAAI,EACxD,OAAO,EAAqB,IAAI,EAAc,IAC5C,EAAG,MAAM,EAAS,CAAI,CACxB,GAGF,EAAI,KAAO,CAAC,EAAc,IAAW,CACnC,GAAI,CAAC,GAAc,EAAG,OAAO,GAAa,EAAc,CAAM,EAC9D,GAAI,OAAO,IAAW,WAAY,OAAO,EACzC,IAAM,EAAK,EACX,MAAQ,IAAI,IACV,EAAqB,IAAI,EAAc,IACrC,EAAG,GAAG,CAAI,CACZ,GAGJ,GAAY,GAGP,SAAS,EAAwB,CAAC,EAAc,EAAgB,CACrE,OAAO,GAAY,IAAI,GAAM,IAAM,EAAqB,IAAI,EAAK,CAAE,CAAC,ED9CtE,IAAM,GAAc,WAEd,EAAkB,IAAI,qBAE5B,MAAM,EAA8B,CAC1B,UAER,WAAW,CAAC,EAAkC,CAC5C,KAAK,UAAY,EAGnB,SAAS,CAAC,EAAc,EAAuB,EAAyB,CACtE,IAAM,EAAM,GAAW,KAAK,UAAU,kBAAkB,EAExD,OADiB,KAAK,UAAU,mBAAmB,EACnC,UAAU,EAAM,EAAS,CAAG,EAkB9C,eAAkD,CAChD,KACG,EACY,CACf,IAAI,EAAuB,CAAC,EACxB,EAAmB,KAAK,UAAU,kBAAkB,EACpD,EAEJ,GAAI,EAAK,SAAW,EAClB,EAAK,EAAK,GACL,QAAI,EAAK,SAAW,EACzB,EAAU,EAAK,GACf,EAAK,EAAK,GAEV,OAAU,EAAK,GACf,EAAU,EAAK,GACf,EAAK,EAAK,GAGZ,IAAM,EAAO,KAAK,UAAU,EAAM,EAAS,CAAO,EAClD,OAAO,KAAK,UAAU,QAAQ,EAAM,GAAM,GAAM,GAAM,IACpD,EAAG,CAAI,CACT,EAEJ,CAEA,MAAM,EAA6B,CACjC,SAAS,EAAS,CAChB,OAAO,QAAM,gBAAgB,sBAAoB,EAkBnD,eAAkD,CAChD,KACG,EACY,CAGf,OADE,EAAK,SAAW,EAAI,EAAK,GAAK,EAAK,SAAW,EAAI,EAAK,GAAK,EAAK,IACzD,KAAK,UAAU,CAAC,EAE9B,CAQO,MAAM,CAAiD,OAC7C,WAA2C,KAElD,cAAmC,KACnC,kBAAuC,CAAC,EACxC,YACA,aACA,SAAW,IAAI,IAEf,WAAW,EAAG,CACpB,KAAK,YAAc,IAAI,GACvB,KAAK,aAAe,IAAI,GAAY,IAAI,EACxC,GAAyB,IAAM,KAAK,kBAAkB,CAAC,QAQlD,YAAW,EAA2B,CAE3C,OADA,EAAuB,YAAc,IAAI,EAClC,EAAuB,gBASzB,8BAA6B,EAAY,CAC9C,IAAM,EAAW,EAAuB,YAAY,EACpD,OAAO,QAAM,wBAAwB,CAAQ,EAQ/C,QAAQ,CAAC,EAA0B,CACjC,KAAK,SAAS,IAAI,CAAM,EAQ1B,UAAU,CAAC,EAA0B,CACnC,KAAK,SAAS,OAAO,CAAM,EAW7B,SAAS,CAAC,EAA6B,CACrC,IAAM,EAAc,KAAK,eAAe,EACxC,GAAI,GAAa,YAAY,GAC3B,GAAI,QAAM,QAAQ,KAAK,kBAAkB,CAAC,IAAM,EAI9C,OAHA,EAAO,MACL,oFACF,EACO,GAKX,OAFA,KAAK,SAAS,CAAM,EACpB,KAAK,cAAgB,EACd,GAQT,eAAe,EAAsB,CACnC,OAAO,KAAK,cAQd,iBAAiB,EAAY,CAC3B,OAAO,EAAgB,SAAS,GAAK,eAQvC,cAAc,EAAqB,CACjC,IAAM,EAAM,KAAK,kBAAkB,EACnC,OAAO,QAAM,QAAQ,CAAG,EAQ1B,iBAAiB,EAAY,CAE3B,GAAI,CADgB,KAAK,eAAe,GACtB,YAAY,EAAG,MAAO,GACxC,MAAO,GAGT,kBAAkB,EAAW,CAC3B,IAAM,EAAS,KAAK,cACpB,GAAI,CAAC,EAEH,OADA,EAAO,MAAM,wCAAwC,EAC9C,KAAK,YAEd,OAAO,EAAO,gBAAgB,UAAU,EAAW,EAGrD,SAAS,CACP,EACA,EACA,EACQ,CACR,OAAO,KAAK,aAQd,kBAAkB,CAAC,EAAqC,CACtD,GAAI,CACF,4BAAyB,CACvB,eAAgB,KAChB,iBAAkB,CAAC,CAAY,CACjC,CAAC,EACD,KAAK,kBAAkB,KAAK,CAAY,EACxC,MAAO,EAAc,CACrB,EAAO,MAAM,kCAAkC,OAAO,CAAG,GAAG,GAIhE,OAAU,CACR,EACA,EACA,EACA,EACA,EACG,CACH,IAAM,EAAU,KAAK,kBAAkB,EACjC,EAAM,QAAM,QAAQ,EAAS,CAAI,EACvC,OAAO,EAAgB,IAAI,EAAK,IAC9B,GAAsB,EAAK,IAAM,CAC/B,GAAI,CACF,IAAM,EAAS,EAAG,EAClB,GAAI,aAAkB,QACpB,OAAO,EACJ,MAAM,CAAC,IAAiB,CACvB,GAAI,EAAK,YAAY,EAAG,CACtB,GAAI,EAAiB,EAAK,gBAAgB,CAAY,EACtD,GAAI,EAAsB,CACxB,IAAM,EAAM,EACZ,EAAK,UAAU,CACb,KAAM,iBAAe,MACrB,QAAS,GAAG,EAAI,SAAS,EAAI,SAC/B,CAAC,GAGL,MAAM,EACP,EACA,QAAQ,IAAM,CACb,GAAI,EAAW,EAAK,IAAI,EACzB,EAEL,GAAI,EAAW,EAAK,IAAI,EACxB,OAAO,EACP,MAAO,EAAK,CACZ,GAAI,EAAK,YAAY,EAAG,CACtB,GAAI,EAAiB,EAAK,gBAAgB,CAAY,EACtD,GAAI,EAAsB,CACxB,IAAM,EAAM,EACZ,EAAK,UAAU,CACb,KAAM,iBAAe,MACrB,QAAS,GAAG,EAAI,SAAS,EAAI,SAC/B,CAAC,GAGL,GAAI,EAAW,EAAK,IAAI,EACxB,MAAM,GAET,CACH,EAGF,aAAa,CAAC,EAAoB,CAChC,EAAgB,UAAU,CAAG,EAO/B,WAAc,CAAC,EAAc,EAAgB,CAC3C,OAAO,EAAgB,IAAI,EAAK,IAAM,GAAsB,EAAK,CAAE,CAAC,OAMhE,WAAU,EAAkB,CAChC,IAAM,EAAU,MAAM,QAAQ,WAC5B,MAAM,KAAK,KAAK,QAAQ,EAAE,IAAI,CAAC,IAAM,EAAE,gBAAgB,WAAW,CAAC,CACrE,EACA,QAAW,KAAK,EACd,GAAI,EAAE,SAAW,WACf,EAAO,MAAM,sBAAsB,OAAO,EAAE,MAAM,GAAG,OAQrD,SAAQ,EAAkB,CAC9B,IAAM,EAAU,MAAM,QAAQ,WAC5B,MAAM,KAAK,KAAK,QAAQ,EAAE,IAAI,CAAC,IAAM,EAAE,gBAAgB,SAAS,CAAC,CACnE,EACA,QAAW,KAAK,EACd,GAAI,EAAE,SAAW,WACf,EAAO,MAAM,oBAAoB,OAAO,EAAE,MAAM,GAAG,EAGvD,KAAK,cAAgB,KACrB,KAAK,SAAS,MAAM,EAExB,CDjU+C,IAA/C,iCGhCoC,IAApC,kCCPO,IAAM,GAA6B,IAC7B,EAA+B,IAC/B,EAA0B,IAG1B,EAAiB,UAGjB,GAA+B,IAG/B,GAAmC,KAGnC,GAA2B,KCTjC,IALP,iCAiBO,SAAS,EAAiB,CAAC,EAA4B,CAC5D,OAAO,EAAS,OAAO,CAAC,EAAQ,IAAY,CAC1C,IAAM,EAAQ,GAAG,IAAS,IAAW,GAAK,EAA0B,KAAK,IACzE,OAAO,EAAM,OAAS,GAA2B,EAAS,GACzD,EAAE,EAOA,SAAS,EAAW,CAAC,EAA4B,CACtD,OAAO,EAAQ,cAAc,EAAE,IAAI,EAAE,EAAK,KAAW,CACnD,IAAI,EAAQ,GAAG,mBAAmB,CAAG,KAAK,mBAAmB,EAAM,KAAK,IACxE,GAAI,EAAM,WAAa,OACrB,GAAS,EAA+B,EAAM,SAAS,SAAS,EAElE,OAAO,EACR,EAII,SAAS,EAAiB,CAC/B,EAC6E,CAC7E,IAAM,EAAa,EAAM,MAAM,CAA4B,EAC3D,GAAI,EAAW,QAAU,EAAG,OAC5B,IAAM,EAAc,EAAW,MAAM,EACrC,GAAI,CAAC,EAAa,OAClB,IAAM,EAAiB,EAAY,QAAQ,EAA0B,EACrE,GAAI,GAAkB,EAAG,OACzB,IAAM,EAAM,mBACV,EAAY,UAAU,EAAG,CAAc,EAAE,KAAK,CAChD,EACM,EAAQ,mBACZ,EAAY,UAAU,EAAiB,CAAC,EAAE,KAAK,CACjD,EACI,EACJ,GAAI,EAAW,OAAS,EACtB,EAAW,kCACT,EAAW,KAAK,CAA4B,CAC9C,EAEF,MAAO,CAAE,MAAK,QAAO,UAAS,EFtCzB,MAAM,CAAuD,CAClE,MAAM,CAAC,EAAkB,EAAkB,EAA6B,CACtE,IAAM,EAAU,EAAW,CAAO,EAClC,GAAI,CAAC,GAAW,uBAAoB,CAAO,EAAG,OAC9C,IAAM,EAAW,GAAY,CAAO,EACjC,OAAO,CAAC,IAAS,EAAK,QAAU,EAAgC,EAChE,MAAM,EAAG,EAA4B,EAClC,EAAc,GAAkB,CAAQ,EAC9C,GAAI,EAAY,OAAS,EACvB,EAAO,IAAI,EAAS,EAAgB,CAAW,EAInD,OAAO,CAAC,EAAkB,EAAkB,EAAgC,CAC1E,IAAM,EAAc,EAAO,IAAI,EAAS,CAAc,EAChD,EAAgB,MAAM,QAAQ,CAAW,EAC3C,EAAY,KAAK,CAAuB,EACxC,EACJ,GAAI,CAAC,EAAe,OAAO,EAC3B,IAAM,EAAwC,CAAC,EAC/C,GAAI,EAAc,SAAW,EAAG,OAAO,EAYvC,GAXc,EAAc,MAAM,CAAuB,EACnD,QAAQ,CAAC,IAAU,CACvB,IAAM,EAAU,GAAkB,CAAK,EACvC,GAAI,EAAS,CACX,IAAM,EAA6B,CAAE,MAAO,EAAQ,KAAM,EAC1D,GAAI,EAAQ,SACV,EAAa,SAAW,EAAQ,SAElC,EAAQ,EAAQ,KAAO,GAE1B,EACG,OAAO,QAAQ,CAAO,EAAE,SAAW,EACrC,OAAO,EAET,OAAO,EAAW,EAAS,EAAc,CAAO,CAAC,EAGnD,MAAM,EAAa,CACjB,MAAO,CAAC,CAAc,EAE1B,CHhDO,IAAM,EAAgB,cAAY,cAAc,KAAK,aAAW,EAEjE,GAAc,mBAAiB,SAAS,EAGvC,SAAS,CAAU,CAAC,EAAuC,CAChE,OAAQ,EAAQ,SAAS,EAAW,GAA6B,OAI5D,SAAS,EAAgB,EAAwB,CACtD,OAAO,EAAW,EAAuB,YAAY,EAAE,kBAAkB,CAAC,EAIrE,SAAS,CAAU,CAAC,EAAkB,EAA2B,CACtE,OAAO,EAAQ,SAAS,GAAa,CAAO,EAIvC,SAAS,EAAa,CAAC,EAA2B,CACvD,OAAO,EAAQ,YAAY,EAAW,+FM7BjC,IAPP,gCAQA,iCAaA,IAAI,GAAoC,IAAI,sBAAoB,CAC9D,YAAa,CACX,IAAI,4BACJ,IAAI,CACN,CACF,CAAC,EAGM,SAAS,EAAgB,EAAsB,CACpD,OAAO,GAIF,SAAS,EAAgB,CAAC,EAAqC,CACpE,GAAiB,EAGnB,SAAS,EAAe,CAAC,EAA4B,CACnD,GAAI,IAAY,OAAW,OAAO,EAClC,OAAO,EAAuB,YAAY,EAAE,kBAAkB,EAsBzD,SAAS,EAAe,CAC7B,EACA,EACA,EAAiC,uBAC3B,CACN,EAAU,qBAAsB,IAAM,CACpC,GAAiB,EAAE,OAAO,GAAgB,CAAO,EAAG,EAAS,CAAM,EACpE,EAkBI,SAAS,EAAgB,CAC9B,EACA,EACA,EAAiC,uBACxB,CACT,IAAM,EAAO,GAAgB,CAAO,EACpC,OACE,EACE,sBACA,IAAM,GAAiB,EAAE,QAAQ,EAAM,EAAS,CAAM,EACtD,CACF,GAAK,EXjET,IAAM,GAAc,WA8Db,MAAe,CAAW,CAC/B,YACA,UACA,OACA,eACA,OACA,YACA,WACA,gBACA,QACA,kBAMU,WAAW,CACnB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACA,KAAK,YAAc,EACnB,KAAK,UAAY,EACjB,KAAK,OAAS,EACd,KAAK,eAAiB,EACtB,KAAK,OAAS,EACd,KAAK,YAAc,EACnB,KAAK,WAAa,EAClB,KAAK,gBAAkB,EACvB,KAAK,QAAU,EACf,KAAK,kBAAoB,EAQ3B,SAAS,EAAY,CACnB,OAAO,EAAuB,YAAY,EAAE,UAAU,IAAI,QAc7C,kBAAiB,EAA2B,CACzD,OAAO,EAAuB,YAAY,QAG7B,eAAc,EAAe,CAE1C,OADe,EAAW,kBAAkB,EAAE,gBAAgB,GAC/C,YAAc,QAGhB,0BAAyB,EAA4B,CAElE,IAAM,EADQ,EAAW,kBAAkB,EACjB,eAAe,EACzC,GAAI,CAAC,GAAa,YAAY,EAAG,OAAO,KACxC,IAAM,EAAM,EAAY,YAAY,EACpC,GAAI,CAAC,EAAI,SAAW,EAAE,EAAI,WAAa,GAAO,OAAO,KACrD,MAAO,CAAC,EAAI,QAAS,EAAI,MAAM,QAGlB,aAAY,EAAS,CAClC,EAAU,0BAA2B,IAAM,CACzC,IAAM,EAAS,EAAW,kBAAkB,EAAE,gBAAgB,EAC9D,GAAI,CAAC,EAAQ,OACb,EAAO,iBAAiB,EAAE,YAAY,EACvC,QAYI,eAAc,EAAqB,CAExC,OADc,EAAW,kBAAkB,EAC9B,eAAe,cAajB,WAAU,EAAkB,CAEvC,MADc,EAAW,kBAAkB,EAC/B,WAAW,cAWZ,SAAQ,EAAkB,CAErC,MADc,EAAW,kBAAkB,EAC/B,SAAS,QAchB,4BAA2B,CAAC,EAAqC,CACtE,EAAU,yCAA0C,IAAM,CAC1C,EAAW,kBAAkB,EACrC,mBAAmB,CAAY,EACtC,QAYI,cAAa,EAAW,CAE7B,OADc,EAAW,kBAAkB,EAC9B,UAAU,EAAW,QAU7B,UAAS,CAAC,EAAc,EAA+B,CAC5D,IAAM,EAAO,EAAW,cAAc,EAAE,UAAU,EAAM,CAAE,YAAW,CAAC,EAEtE,OADA,EAAW,aAAa,EACjB,QAaF,gBAAkB,CACvB,EACA,EACA,EACG,CACH,OAAO,EAAW,cAAc,EAAE,gBAChC,EACA,CAAE,YAAW,EACb,CAAC,IAAS,CACR,EAAW,aAAa,EACxB,IAAM,EAAS,EAAG,CAAI,EACtB,GAAI,aAAkB,QACpB,OAAQ,EAA4B,QAAQ,IAAM,CAChD,EAAK,IAAI,EACV,EAGH,OADA,EAAK,IAAI,EACF,EAEX,QAgBK,KAAO,CAAC,EAAkB,EAA0B,CACzD,OAAO,EAAW,gBAAgB,EAAU,CAAC,IAAS,CACpD,GAAI,CACF,IAAM,EAAS,EAAG,CAAI,EACtB,GAAI,aAAkB,QACpB,OAAO,EAAO,MAAM,CAAC,IAAe,CAGlC,MAFA,EAAK,UAAU,CAAE,KAAM,iBAAe,MAAO,QAAS,OAAO,CAAC,CAAE,CAAC,EACjE,EAAK,gBAAgB,CAAU,EACzB,EACP,EAEH,OAAO,EACP,MAAO,EAAG,CAGV,MAFA,EAAK,UAAU,CAAE,KAAM,iBAAe,MAAO,QAAS,OAAO,CAAC,CAAE,CAAC,EACjE,EAAK,gBAAgB,CAAU,EACzB,GAET,QAUI,KAAO,CAAC,EAAkB,EAA0B,CACzD,OAAO,EAAW,KAAK,EAAU,CAAE,QAsD9B,cAAgB,CACrB,EACA,EACG,CACH,IAAM,EAAQ,EAAW,kBAAkB,EACrC,EAAM,GAAQ,CAAO,EAC3B,OAAO,EAAM,YAAY,EAAK,IAAM,EAAG,CAAG,CAAC,QAiDtC,QAAyC,CAC9C,EACA,EAAW,OACX,EACA,EAAc,GACd,EAAe,GACf,EAA4B,GAG2C,CAEvE,IAAM,EAAQ,EAAW,kBAAkB,EACrC,EAAY,CAChB,IACkC,CAClC,IAAM,EAAO,GAAY,EAAU,KACnC,MAAO,IAAI,IAAyB,CAElC,OADmB,EAAM,UAAU,EAAW,EAC5B,gBAAgB,EAAM,CAAC,IAAS,CAChD,GAAI,EACF,EAAK,kCAA+C,CAAQ,EAE9D,GAAI,CACF,GAAI,EACF,EAAK,8BAEH,EACE,GAAU,EAAW,CAAI,EACzB,EAAW,eAAe,CAC5B,CACF,EAEF,EAAW,aAAa,EACxB,IAAM,EAAS,EAAU,GAAG,CAAI,EAEhC,GAAI,aAAkB,QACpB,OAAQ,EACL,KAAK,CAAC,IAAQ,CACb,GAAI,EACF,EAAK,+BAEH,EAAmB,EAAK,EAAW,eAAe,CAAC,CACrD,EAEF,OAAO,EACR,EACA,MAAM,CAAC,IAAe,CAMrB,MALA,EAAK,gBAAgB,CAAU,EAC/B,EAAK,UAAU,CACb,KAAM,iBAAe,MACrB,QAAS,OAAO,CAAC,CACnB,CAAC,EACK,EACP,EACA,QAAQ,IAAM,CACb,EAAK,IAAI,EACV,EAGL,GAAI,EACF,EAAK,+BAEH,EAAmB,EAAQ,EAAW,eAAe,CAAC,CACxD,EAGF,OADA,EAAK,IAAI,EACF,EACP,MAAO,EAAG,CAIV,MAHA,EAAK,gBAAgB,CAAU,EAC/B,EAAK,UAAU,CAAE,KAAM,iBAAe,MAAO,QAAS,OAAO,CAAC,CAAE,CAAC,EACjE,EAAK,IAAI,EACH,GAET,IAIL,GAAI,CAAC,EAAM,OAAO,EAClB,OAAO,EAAU,CAAI,QAYhB,YAAW,CAAC,EAAoB,CACrC,EAAU,yBAA0B,IAAM,CACxC,GAAI,CAAC,EAAM,OACX,IAAM,EAAc,EAAW,kBAAkB,EAAE,eAAe,EAClE,GAAI,GAAa,YAAY,EAC3B,EAAY,kCAA+C,CAAI,EAElE,QAMI,WAAU,EAAS,CACxB,EAAW,YAAY,KAAK,QAMvB,YAAW,EAAS,CACzB,EAAW,YAAY,MAAM,QAMxB,eAAc,EAAS,CAC5B,EAAW,YAAY,MAAM,QAaxB,aAAY,CAAC,EAAa,EAAsB,CACrD,EAAU,0BAA2B,IAAM,CACzC,IAAM,EAAc,EAAW,kBAAkB,EAAE,eAAe,EAClE,GAAI,CAAC,GAAa,YAAY,EAAG,OACjC,GAAI,CAAC,GAAO,GAAS,KAAM,OAC3B,EAAY,aACV,EACA,EAAmB,EAAO,EAAW,eAAe,CAAC,CACvD,EACD,QAQI,cAAa,CAAC,EAA2C,CAC9D,QAAY,EAAK,KAAU,OAAO,QAAQ,CAAU,EAClD,EAAW,aAAa,EAAK,CAAK,QAS/B,SAAQ,CAAC,EAA0B,CACxC,EAAW,8BAA2C,CAAS,QAQ1D,UAAS,CAAC,EAA2B,CAC1C,EAAW,+BAA4C,CAAU,QAiB5D,kBAAiB,CAAC,EAA6B,CACpD,EAAU,+BAAgC,IAAM,CAC9C,IAAM,EAAc,EAAW,kBAAkB,EAAE,eAAe,EAClE,GAAI,CAAC,GAAa,YAAY,EAAG,OAEjC,GAAI,OAAO,EAAS,QAAU,SAC5B,EAAY,kCAEV,EAAS,KACX,EAGF,GAAI,OAAO,EAAS,WAAa,SAC/B,EAAY,qCAEV,EAAS,QACX,EAGF,GAAI,OAAO,EAAS,0BAA4B,SAC9C,EAAY,sDAEV,EAAS,uBACX,EAEF,GAAI,OAAO,EAAS,gBAAkB,SACpC,EAAY,4CAEV,EAAS,aACX,EAEF,GAAI,OAAO,EAAS,0BAA4B,SAC9C,EAAY,sDAEV,EAAS,uBACX,EAEF,GAAI,OAAO,EAAS,8BAAgC,SAClD,EAAY,0DAEV,EAAS,2BACX,EAEF,GAAI,OAAO,EAAS,iBAAmB,SACrC,EAAY,6CAEV,EAAS,cACX,EAEH,QAWY,0BAAyB,CAAC,EAAa,EAAqB,CACzE,EAAU,uCAAwC,IAAM,CACtD,IAAM,EAAQ,EAAW,kBAAkB,EACrC,EAAc,EAAM,eAAe,EACzC,GAAI,CAAC,GAAa,YAAY,EAAG,OACjC,EAAY,aAAa,EAAK,CAAK,EACnC,IAAM,EAAM,EAAM,kBAAkB,EAC9B,GAAW,EAAW,CAAG,GAAK,EAAc,GAAG,SAAS,EAAK,CACjE,OACF,CAAC,EACD,EAAM,cAAc,EAAW,EAAK,CAAO,CAAC,EAC7C,QAUI,cAAa,CAAC,EAA0B,CAC7C,EAAW,iDAET,CACF,QAUK,kBAAiB,CAAC,EAA8B,CACrD,EAAW,sDAET,CACF,QAUK,aAAY,CAAC,EAAyB,CAC3C,EAAW,gDAET,CACF,QAkBK,IAAG,CAAC,EAA+B,CACxC,EAAU,iBAAkB,IAAM,CAChC,GAAI,CAAC,GAAS,MAAM,QAAQ,CAAI,GAAK,EAAK,SAAW,EAAI,OAEzD,IAAM,EADQ,EAAW,kBAAkB,EACtB,gBAAgB,EACrC,GAAI,CAAC,GAAQ,WAAa,CAAC,EAAO,QAAS,OAC3C,IAAM,EAAM,EAAW,0BAA0B,EACjD,GAAI,CAAC,EAAK,OACV,IAAO,GAAW,EACZ,EAAW,MAAM,QAAQ,CAAI,EAAI,EAAO,CAAC,CAAI,EACnD,EAAO,QACJ,kCAAkC,EAAO,UAAW,EAAS,CAC5D,KAAM,CACR,CAAC,EACA,MAAM,CAAC,IAAiB,CACvB,EAAO,MAAM,eAAe,OAAO,CAAG,GAAG,EAC1C,EACJ,QA4BI,cAAa,CAAC,EAAe,EAAyC,CAC3E,EAAU,2BAA4B,IAAM,CAC1C,IAAM,EAAQ,EAAW,kBAAkB,EACrC,EAAS,EAAM,gBAAgB,EACrC,GAAI,CAAC,GAAQ,UAAW,OACxB,IAAM,EAAc,EAAM,eAAe,EACzC,GAAI,CAAC,GAAa,YAAY,EAAG,OAEjC,IAAM,EAAY,EAAO,iBAAiB,EACpC,EAAM,EAAY,YAAY,EAE9B,EAAM,EAAU,UACpB,uBAEF,EACM,EAA8B,CAClC,WAAY,EAAO,UACnB,UAAW,kBAAkB,KAAS,IACtC,OAAQ,CAAC,CAAE,KAAM,CAAM,CAAC,EACxB,SAAU,CACR,IACK,EACH,WAAY,cAAW,EACvB,WAAY,IAAI,KAAK,EAAE,YAAY,EACnC,SAAU,EAAI,QACd,QAAS,EAAI,MACf,CACF,EACA,WAAY,GACZ,YAAa,EACf,EACM,EAAU,EAAU,YACxB,kBAEA,CACF,EAEA,EAAY,2CAEV,KAAK,UAAU,CAAO,CACxB,EACD,EAEL,CAEA,SAAS,EAAkC,CACzC,EACA,EACyB,CACzB,GAAI,CACF,IAAM,EAAa,GAAkB,CAAC,EACnC,IAAI,CAAC,IACJ,EACG,QAAQ,UAAW,EAAE,EACrB,MAAM,GAAG,EAAE,GACX,KAAK,CACV,EACC,OAAO,CAAC,IAAU,EAAM,OAAS,CAAC,EAC/B,EAAkC,CAAC,EAMzC,OALA,EAAW,QAAQ,CAAC,EAAM,IAAU,CAClC,GAAI,EAAQ,EAAK,OACf,EAAO,GAAQ,EAAK,GAEvB,EACM,EACP,KAAM,CACN,MAAO,CAAC,GY72BsB,IAAlC,sDAUO,MAAM,CAA6C,CAC9C,UAUV,WAAW,CACT,EACA,EACA,EACA,EACA,CACA,KAAK,UAAY,IAAI,qBAAkB,CACrC,IAAK,EACL,QAAS,CACP,cAAe,UAAU,IACzB,oBAAqB,EACrB,eAAgB,CAClB,CACF,CAAC,EASH,MAAM,CACJ,EACA,EACM,CACN,EAAO,KAAK,YAAY,EAAM,cAAc,EAC5C,KAAK,WAAW,OAAO,EAAO,CAAc,EAM9C,QAAQ,EAAkB,CACxB,OAAO,KAAK,WAAW,SAAS,GAAK,QAAQ,QAAQ,EAMvD,UAAU,EAAkB,CAC1B,OAAO,KAAK,WAAW,WAAW,GAAK,QAAQ,QAAQ,EAE3D,CCjEoD,IAApD,kCASO,MAAM,UAAyB,CAAqB,CACzD,WAAW,EAAG,CAEZ,MAAM,6CAA8C,GAAI,GAAI,EAAE,EAC9D,KAAK,UAAY,KAGV,MAAM,CACb,EACA,EACM,CACN,EAAe,CAAE,KAAM,oBAAiB,OAAQ,CAAC,EAG1C,QAAQ,EAAkB,CACjC,OAAO,QAAQ,QAAQ,EAGhB,UAAU,EAAkB,CACnC,OAAO,QAAQ,QAAQ,EAE3B,CCnBO,IALP,4CCSO,IAAM,EAA8C,IAAM,GAa1D,MAAM,CAAsD,CACzD,cAER,WAAW,CAAC,EAAoC,EAAwB,CACtE,KAAK,cAAgB,EAIvB,OAAO,CAAC,EAAY,EAA8B,CAChD,IAAM,EAAU,EAAW,CAAa,GAAG,cAAc,GAAK,CAAC,EAC/D,QAAY,EAAK,KAAU,EACzB,GAAI,KAAK,cAAc,CAAG,EACxB,EAAK,aAAa,EAAK,EAAM,KAAK,EAMxC,KAAK,CAAC,EAA2B,EAKjC,UAAU,EAAkB,CAC1B,OAAO,QAAQ,QAAQ,EAIzB,QAAQ,EAAkB,CACxB,OAAO,QAAQ,QAAQ,EAE3B,CDpCA,SAAS,CAAW,CAAC,EAA2B,CAC9C,MAAO,GAAG,EAAI,WAAW,EAAI,SAG/B,SAAS,EAAY,CAAC,EAAyB,CAC7C,OAAO,EAAO,KAAO,GAAK,EAAO,KAAO,EAYnC,MAAM,UAA8B,qBAAmB,CAC5D,OACQ,OAAS,IAAI,IACb,gBACA,kBAER,WAAW,CACT,EACA,EACA,EAMA,CACA,MAAM,EAAU,CAAM,EACtB,KAAK,OAAS,EACd,KAAK,gBAAkB,IAAI,qBAA8B,CAAC,IAAY,CACpE,KAAK,kBAAkB,CAAO,EAC/B,EACD,KAAK,kBAAoB,IAAI,EAGvB,iBAAiB,CAAC,EAAwB,CAChD,KAAK,OAAO,OAAO,CAAO,EAGpB,aAAa,CAAC,EAAkB,CACtC,IAAM,EAAM,EAAK,YAAY,EAC7B,GAAI,CAAC,EAAI,SAAW,CAAC,EAAI,OAAQ,OACjC,IAAM,EAAU,EAAY,CAAG,EAG/B,KAAK,gBAAgB,SAAS,EAAM,CAAO,EAI7C,QAAQ,CAAC,EAA0B,EAAa,EAAsB,CACpE,IAAM,EAAU,EAAY,CAAW,EACnC,EAAQ,KAAK,OAAO,IAAI,CAAO,EACnC,GAAI,CAAC,EACH,EAAQ,IAAI,IACZ,KAAK,OAAO,IAAI,EAAS,CAAK,EAEhC,EAAM,IAAI,EAAK,CAAK,EAItB,QAAW,CAAC,EAA0B,EAAa,EAAoB,CACrE,IAAM,EAAU,EAAY,CAAW,EACjC,EAAQ,KAAK,OAAO,IAAI,CAAO,EACrC,GAAI,CAAC,GAAS,CAAC,EAAM,IAAI,CAAG,EAAG,OAAO,EACtC,OAAO,EAAM,IAAI,CAAG,EAItB,SAAS,CAAC,EAA0B,EAAqB,CACvD,IAAM,EAAU,EAAY,CAAW,EACnC,EAAQ,KAAK,OAAO,IAAI,CAAO,EACnC,GAAI,CAAC,EACH,EAAQ,IAAI,IACZ,KAAK,OAAO,IAAI,EAAS,CAAK,EAEhC,IAAM,EAAS,EAAM,IAAI,CAAG,EACtB,EAAO,OAAO,IAAW,SAAW,EAAS,EAEnD,OADA,EAAM,IAAI,EAAK,EAAO,CAAC,EAChB,EAIT,WAAc,CAAC,EAA0B,EAAa,EAAc,CAClE,IAAM,EAAU,EAAY,CAAW,EACnC,EAAQ,KAAK,OAAO,IAAI,CAAO,EACnC,GAAI,CAAC,EACH,EAAQ,IAAI,IACZ,KAAK,OAAO,IAAI,EAAS,CAAK,EAEhC,IAAM,EAAS,EAAM,IAAI,CAAG,EACtB,EAAY,MAAM,QAAQ,CAAM,EAClC,CAAC,GAAI,EAAgB,CAAI,EACzB,CAAC,CAAI,EAET,OADA,EAAM,IAAI,EAAK,CAAI,EACZ,EAGD,SAAS,CAAC,EAAoB,EAAY,GAAa,CAC7D,IAAM,EAAM,EAAK,YAAY,EAC7B,GAAI,CAAC,EAAI,QAAS,OAClB,IAAM,EAAS,KAAK,UAAU,sBAAqC,EAC7D,EAAyB,IAC1B,EAAK,WACP,qBAAmC,CACtC,EAEA,GAAI,EAEF,OAAO,EAAW,+BAGpB,IAAM,EAAc,OAAO,OAAO,CAAI,EACtC,OAAO,eAAe,EAAa,aAAc,CAC/C,MAAO,EACP,SAAU,EACZ,CAAC,EACD,IAAM,EAAU,GAAa,EAAK,OAAO,EAAI,EAAK,UAAY,EAAK,QACnE,OAAO,eAAe,EAAa,UAAW,CAC5C,MAAO,EACP,SAAU,EACZ,CAAC,EAED,MAAM,MAAM,CAAW,EAIzB,WAAW,EAAS,CAClB,EAAU,oCAAqC,IAAM,CAEnD,IAAM,EADQ,EAAuB,YAAY,EAC9B,eAAe,EAClC,GAAI,CAAC,GAAM,YAAY,EAAG,OAC1B,IAAM,EAAM,EAAK,YAAY,EAC7B,GAAI,CAAC,EAAI,QAAS,OAClB,GACE,KAAK,SACH,yBAEA,EACF,EAEA,OAEF,KAAK,UAAU,EAAiC,EAAI,EACrD,EAGH,OAAO,CAAC,EAAY,EAA8B,CAChD,EAAU,gCAAiC,IAAM,CAC/C,KAAK,kBAAkB,QAAQ,EAAM,CAAa,EAClD,KAAK,cAAc,CAAI,EACxB,EAGH,KAAK,CAAC,EAA0B,CAC9B,EAAU,8BAA+B,IAAM,CAC7C,IAAM,EAAM,EAAK,YAAY,EAC7B,GAAI,CAAC,EAAI,QAAS,CAChB,MAAM,MAAM,CAAI,EAChB,OAEF,IAAM,EAAU,EAAY,CAAG,EAC/B,GAAI,CAMF,GAAI,CALgB,KAAK,SACvB,cAEA,EACF,EAEE,KAAK,UAAU,CAAI,SAErB,CACA,KAAK,kBAAkB,CAAO,GAEjC,EAEL,CElMO,MAAM,UAA0B,CAAsB,CAC3D,WAAW,EAAG,CACZ,MAAM,KAAM,IAAI,CAAkB,EAGpC,OAAO,CAAC,EAAa,EAA+B,EAIpD,KAAK,CAAC,EAA2B,EAIjC,QAAQ,EAAkB,CACxB,OAAO,QAAQ,QAAQ,EAGzB,UAAU,EAAkB,CAC1B,OAAO,QAAQ,QAAQ,EAGzB,WAAW,EAAS,EAIpB,QAAQ,CAAC,EAA2B,EAAc,EAAuB,EAIzE,QAAW,CAAC,EAA2B,EAAc,EAAoB,CACvE,OAAO,EAGT,SAAS,CAAC,EAA2B,EAAsB,CACzD,MAAO,GAGT,WAAc,CAAC,EAA2B,EAAc,EAAc,CACpE,MAAO,CAAC,CAAI,EAEhB,CC/CO,IAHP,sCAIA,4CCsBA,eAAsB,EAAQ,CAC5B,EACA,EAAsB,CAAC,EACX,CACZ,IAAQ,aAAa,EAAG,UAAU,IAAM,KAAM,WAAY,EAEtD,EAEJ,QAAS,EAAU,EAAG,GAAW,EAAY,IAC3C,GAAI,CACF,OAAO,MAAM,EAAG,EAChB,MAAO,EAAO,CAGd,GAFA,EAAY,EAER,IAAY,EACd,MAAM,EAGR,IAAU,EAAS,CAAK,EACxB,MAAM,IAAI,QAAQ,CAAC,IAAY,WAAW,EAAS,EAAQ,CAAO,CAAC,CAAC,EAIxE,MAAM,EC7CR,IAAM,GAAQ,IAAI,IACZ,GAAW,IAAI,IAErB,eAAsB,EAAgB,CACpC,EACA,EACiB,CACjB,IAAM,EAAW,OAAO,EAAO,kBAAkB,aAAa,IACxD,EAAS,GAAM,IAAI,CAAQ,EACjC,GAAI,EACF,OAAO,EAET,IAAM,EAAU,GAAS,IAAI,CAAQ,EACrC,GAAI,EACF,OAAO,EAET,IAAM,GAAW,SAA6B,CAC5C,EAAO,KAAK,qCAAqC,GAAa,EAC9D,IAAM,EAAY,MAAM,GACtB,SAAY,CAIV,IAAM,GAHW,MAAM,EAAO,sBAAsB,CAClD,aAAc,CAChB,CAAC,GACmB,WACpB,GAAI,CAAC,EACH,MAAU,MAAM,qCAAqC,GAAa,EAEpE,OAAO,GAET,CACE,WAAY,EACZ,QAAS,CAAC,IAAc,EAAY,KACpC,QAAS,CAAC,EAAS,IAAU,CAC3B,EAAO,QACL,qCAAqC,eAAyB,OAAa,OAAO,CAAK,GACzF,EAEJ,CACF,EAGA,OAFA,EAAO,KAAK,wBAAwB,GAAW,EAC/C,GAAM,IAAI,EAAU,CAAS,EACtB,IACN,EACH,GAAS,IAAI,EAAU,CAAO,EAC9B,GAAI,CACF,OAAO,MAAM,SACb,CACA,GAAS,OAAO,CAAQ,kBCjDrB,IAAM,GAAU,GHsChB,MAAM,UAAe,CAAW,CAC7B,cAA6C,KAC7C,eAA+C,KAE/C,WAAW,CACjB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACA,MACE,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,cAoBW,KAAI,CAAC,EAAuB,CAAC,EAAoB,CAC5D,IAAM,EAAS,EAAO,QAAU,EAC1B,EAAiB,EAAO,gBAAkB,EAC1C,EAAS,EAAO,QAAU,EAC1B,EAAc,EAAO,aAAe,KACpC,EAAa,EAAO,YAAc,EAEpC,EAAmB,GAEvB,GAAI,CAAC,EACH,EAAO,QACL,0DACF,EACA,EAAmB,GAErB,GAAI,CAAC,EACH,EAAO,QAAQ,qDAAqD,EACpE,EAAmB,GAErB,GAAI,CAAC,EACH,EAAO,QACL,6DACF,EACA,EAAmB,GAErB,GAAI,CAAC,EACH,EAAO,QAAQ,qDAAqD,EACpE,EAAmB,GAGrB,IAAI,EAAmC,KACnC,EAA2B,KAE/B,GAAI,GAAoB,GAAe,GAAU,GAAkB,GAGjE,GAFA,EAAS,IAAI,EAAkB,EAAQ,EAAQ,CAAc,EAC7D,EAAY,MAAM,GAAiB,EAAQ,CAAW,EAAE,MAAM,IAAM,IAAI,EACpE,CAAC,EACH,EAAO,QACL,YAAY,6CACd,EACA,EAAmB,GAIvB,IAAM,EAAwC,CAC5C,eAAgB,GAAe,UAC/B,qBAAsB,WACtB,wBAAyB,EAC3B,EACA,GAAI,EAAO,YACT,EAAc,0BAA4B,EAAO,YAEnD,GAAI,EAAO,mBACT,OAAO,OAAO,EAAe,EAAO,kBAAkB,EAGxD,IAAM,EAAW,kBAAgB,EAAE,MACjC,yBAAuB,CAAa,CACtC,EAEM,GAAiB,IAAI,sBAAmB,CAC5C,WACA,QAAS,EAAO,QAChB,WAAY,EAAO,UACrB,CAAC,EAEK,EAAS,IAAI,EACjB,EACA,EACA,EACA,EACA,EACA,EAAO,aAAe,KACtB,EACA,GACA,EACA,CACF,EAEA,GAAI,EAAkB,CACpB,IAAM,EAAwB,IAAI,sBAAmB,CACnD,WACA,QAAS,EAAO,QAChB,WAAY,EAAO,WACnB,eAAgB,CACd,EAAO,iBAAiB,EACxB,GAAI,EAAO,gBAAkB,CAAC,CAChC,CACF,CAAC,EACD,EAAO,gBAAkB,EAM3B,GAHc,EAAuB,YAAY,EAC3C,SAAS,CAAM,EAEjB,EAAO,WAAa,GACtB,EAAO,UAAU,EAGnB,OAAO,EAQT,eAAe,EAAyB,CACtC,GAAI,KAAK,cAAe,OAAO,KAAK,cAEpC,GACE,CAAC,KAAK,mBACN,CAAC,KAAK,WACN,CAAC,KAAK,QACN,CAAC,KAAK,gBACN,CAAC,KAAK,OAEN,KAAK,cAAgB,IAAI,EACpB,KACL,IAAM,EAAW,KAAK,OAAO,SAAS,GAAG,EACrC,KAAK,OAAS,iBACd,KAAK,OAAS,kBAClB,KAAK,cAAgB,IAAI,EACvB,EACA,KAAK,OACL,KAAK,eACL,KAAK,SACP,EAEF,OAAO,KAAK,cAQd,gBAAgB,EAA0B,CACxC,GAAI,KAAK,eAAgB,OAAO,KAAK,eAErC,GAAI,CAAC,KAAK,kBACR,KAAK,eAAiB,IAAI,EAE1B,UAAK,eAAiB,IAAI,EACxB,KACA,KAAK,gBAAgB,CACvB,EAEF,OAAO,KAAK,eAEhB",
31
- "debugId": "6BBFCA2BBAC6BB7264756E2164756E21",
30
+ "mappings": "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",
31
+ "debugId": "A8450B90F01555D664756E2164756E21",
32
32
  "names": []
33
33
  }
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  var Is=Object.defineProperty;var ps=(s,R)=>{for(var o in R)Is(s,o,{get:R[o],enumerable:!0,configurable:!0,set:(p)=>R[o]=()=>p})};function n(s,R){let o=process.env[s];if(!o)return R??null;return o}var v=n("JUDGMENT_API_KEY"),z=n("JUDGMENT_ORG_ID"),J=n("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),Es=n("JUDGMENT_LOG_LEVEL","warn");class X{baseUrl;apiKey;organizationId;constructor(s,R,o){this.baseUrl=s,this.apiKey=R,this.organizationId=o}getBaseUrl(){return this.baseUrl}getApiKey(){return this.apiKey}getOrganizationId(){return this.organizationId}async request(s,R,o){let p=await fetch(R,{method:s,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId},body:o!==void 0?JSON.stringify(o):void 0});if(!p.ok){let E=await p.text();throw Error(`HTTP ${p.status}: ${E}`)}return p.json()}async postOtelV1traces(){let s=this.baseUrl+"/otel/v1/traces";return this.request("POST",s,{})}async postV1projectsResolve(s){let R=this.baseUrl+"/v1/projects/resolve/";return this.request("POST",R,s)}async postV1projects(s){let R=this.baseUrl+"/v1/projects";return this.request("POST",R,s)}async deleteV1projects(s){let R=this.baseUrl+`/v1/projects/${s}`;return this.request("DELETE",R,{})}async postV1projectsDatasets(s,R){let o=this.baseUrl+`/v1/projects/${s}/datasets`;return this.request("POST",o,R)}async getV1projectsDatasets(s){let R=this.baseUrl+`/v1/projects/${s}/datasets`;return this.request("GET",R,void 0)}async postV1projectsDatasetsByDatasetNameExamples(s,R,o){let p=this.baseUrl+`/v1/projects/${s}/datasets/${R}/examples`;return this.request("POST",p,o)}async getV1projectsDatasetsByDatasetName(s,R){let o=this.baseUrl+`/v1/projects/${s}/datasets/${R}`;return this.request("GET",o,void 0)}async postV1projectsEvaluateExamples(s,R){let o=this.baseUrl+`/v1/projects/${s}/evaluate/examples`;return this.request("POST",o,R)}async postV1projectsEvaluateTraces(s,R){let o=this.baseUrl+`/v1/projects/${s}/evaluate/traces`;return this.request("POST",o,R)}async postV1projectsEvalResults(s,R){let o=this.baseUrl+`/v1/projects/${s}/eval-results`;return this.request("POST",o,R)}async postV1projectsEvalResultsExamples(s,R){let o=this.baseUrl+`/v1/projects/${s}/eval-results/examples`;return this.request("POST",o,R)}async getV1projectsExperimentsByRunId(s,R){let o=this.baseUrl+`/v1/projects/${s}/experiments/${R}`;return this.request("GET",o,void 0)}async postV1projectsEvalQueueExamples(s,R){let o=this.baseUrl+`/v1/projects/${s}/eval-queue/examples`;return this.request("POST",o,R)}async postV1projectsEvalQueueTraces(s,R){let o=this.baseUrl+`/v1/projects/${s}/eval-queue/traces`;return this.request("POST",o,R)}async getV1projectsPromptsByName(s,R,o,p){let E=new URLSearchParams;if(o!==void 0)E.set("commit_id",o);if(p!==void 0)E.set("tag",p);let j=this.baseUrl+`/v1/projects/${s}/prompts/${R}`+(E.toString()?"?"+E.toString():"");return this.request("GET",j,void 0)}async postV1projectsPrompts(s,R){let o=this.baseUrl+`/v1/projects/${s}/prompts`;return this.request("POST",o,R)}async postV1projectsPromptsByNameTags(s,R,o){let p=this.baseUrl+`/v1/projects/${s}/prompts/${R}/tags`;return this.request("POST",p,o)}async deleteV1projectsPromptsByNameTags(s,R,o){let p=this.baseUrl+`/v1/projects/${s}/prompts/${R}/tags`;return this.request("DELETE",p,o)}async getV1projectsPromptsByNameVersions(s,R){let o=this.baseUrl+`/v1/projects/${s}/prompts/${R}/versions`;return this.request("GET",o,void 0)}async getV1projectsScorers(s,R,o){let p=new URLSearchParams;if(R!==void 0)p.set("names",R);if(o!==void 0)p.set("is_trace",o);let E=this.baseUrl+`/v1/projects/${s}/scorers`+(p.toString()?"?"+p.toString():"");return this.request("GET",E,void 0)}async getV1projectsScorersByNameExists(s,R){let o=this.baseUrl+`/v1/projects/${s}/scorers/${R}/exists`;return this.request("GET",o,void 0)}async postV1projectsScorersCustom(s){let R=this.baseUrl+`/v1/projects/${s}/scorers/custom`;return this.request("POST",R,{})}async postV1projectsScorersCustomBundle(s){let R=this.baseUrl+`/v1/projects/${s}/scorers/custom/bundle`;return this.request("POST",R,{})}async getV1projectsScorersCustomByNameExists(s,R){let o=this.baseUrl+`/v1/projects/${s}/scorers/custom/${R}/exists`;return this.request("GET",o,void 0)}async postV1projectsTracesByTraceIdTags(s,R,o){let p=this.baseUrl+`/v1/projects/${s}/traces/${R}/tags`;return this.request("POST",p,o)}async getV1e2eFetchTraceByProjectNameByTraceId(s,R){let o=this.baseUrl+`/v1/e2e_fetch_trace/${s}/${R}`;return this.request("GET",o,void 0)}async getV1e2eTracesPerProject(s,R,o){let p=new URLSearchParams;if(R!==void 0)p.set("limit",R);if(o!==void 0)p.set("offset",o);let E=this.baseUrl+`/v1/e2e_traces_per_project/${s}`+(p.toString()?"?"+p.toString():"");return this.request("GET",E,void 0)}async postV1e2eFetchSpanScore(s){let R=this.baseUrl+"/v1/e2e_fetch_span_score/";return this.request("POST",R,s)}}class B{internalClient;constructor(s={}){let R=s.apiKey??v,o=s.organizationId??z,p=s.apiUrl??J;if(!R)throw Error("API key is required");if(!o)throw Error("Organization ID is required");if(!p)throw Error("API URL is required");this.internalClient=new X(p,R,o)}static create(s={}){return new B(s)}}import{SpanStatusCode as L}from"@opentelemetry/api";import{randomUUID as mR}from"crypto";var Ms=/^([^(]+?)=>/,Ns=/^[^(]*\(\s*([^)]*)\)/m,ns=/,/,vs=/^\s*(_?)(\S+?)\1\s*$/,zs=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function Js(s){return Function.prototype.toString.call(s)}function Gs(s){let R=Js(s).replace(zs,"");return R.match(Ms)||R.match(Ns)}function qs(s){let R=Gs(s);if(!R||!R[1])return[];return R[1].split(ns).map((o)=>{return o.replace(vs,(E,j,P)=>P).trim()}).filter((o)=>o.length>0)}class q{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=q.Level.WARNING;static useColor=!0;static initialize(){if(!q.initialized){let s=process.env.JUDGMENT_NO_COLOR;q.useColor=!s&&process.stdout.isTTY;let R=Es.toLowerCase();if(R){let o={debug:q.Level.DEBUG,info:q.Level.INFO,warning:q.Level.WARNING,warn:q.Level.WARNING,error:q.Level.ERROR,critical:q.Level.CRITICAL};q.currentLevel=o[R]??q.Level.WARNING}q.initialized=!0}}static setLevel(s){q.currentLevel=s}static setUseColor(s){q.useColor=s}static log(s,R){if(q.initialize(),s<q.currentLevel)return;let o=new Date().toISOString().replace("T"," ").substring(0,19),p=Object.keys(q.Level).find((P)=>q.Level[P]===s)??"UNKNOWN",E=`${o} - judgeval - ${p} - ${R}`;if(q.useColor)E=`${s===q.Level.DEBUG||s===q.Level.INFO?q.GRAY:s===q.Level.WARNING?q.YELLOW:q.RED}${E}${q.RESET}`;(s>=q.Level.ERROR?process.stderr:process.stdout).write(E+`
2
2
  `)}static debug(s){q.log(q.Level.DEBUG,s)}static info(s){q.log(q.Level.INFO,s)}static warning(s){q.log(q.Level.WARNING,s)}static warn(s){q.log(q.Level.WARNING,s)}static error(s){q.log(q.Level.ERROR,s)}static critical(s){q.log(q.Level.CRITICAL,s)}}function f(s,R,o){try{return R()}catch(p){let E=p instanceof Error&&p.stack?`
3
- ${p.stack}`:"";return q.error(`[Caught] An exception was raised in ${s}: ${String(p)}${E}`),o}}var y;function _s(s,R){if(typeof R==="bigint")return R.toString();if(typeof R==="object"&&R!==null){if(y.has(R))return"[Circular]";y.add(R)}return R}function G(s){try{let R=JSON.stringify(s);if(typeof R==="string")return R;return String(R)}catch{try{y=new WeakSet;let R=JSON.stringify(s,_s);return typeof R==="string"?R:String(s)}catch(R){return q.error(`safeStringify failed: ${R}`),String(s)}}}function Y(s,R){if(typeof s==="string"||typeof s==="number"||typeof s==="boolean")return s;return R(s)}var e={};ps(e,{setBaggage:()=>I,getBaggage:()=>Q,getActiveBaggage:()=>rs,deleteBaggage:()=>gs,createBaggage:()=>t,baggageEntryMetadataFromString:()=>as,JudgmentBaggagePropagator:()=>x});import{createContextKey as es,propagation as Cs}from"@opentelemetry/api";import{INVALID_SPAN_CONTEXT as ds,ROOT_CONTEXT as Bs,SpanStatusCode as $s,trace as O}from"@opentelemetry/api";import{registerInstrumentations as ys}from"@opentelemetry/instrumentation";import{AsyncLocalStorage as is}from"async_hooks";import{ROOT_CONTEXT as cs,context as w}from"@opentelemetry/api";import{AsyncLocalStorage as Ps}from"async_hooks";var js=!1,i=null,ms=new Ps,_=new Ps,Ts=w.active.bind(w),ks=w.with.bind(w),Ls=w.bind.bind(w);function b(){return ms.getStore()===!0}function hs(s){if(i=s,js)return;let R=w;R.active=()=>{if(!b())return Ts();let o=_.getStore();if(o)return o;return i?i():cs},R.with=(o,p,E,...j)=>{if(!b())return ks(o,p,E,...j);return _.run(o,()=>p.apply(E,j))},R.bind=(o,p)=>{if(!b())return Ls(o,p);if(typeof p!=="function")return p;let E=p;return(...j)=>_.run(o,()=>E(...j))},js=!0}function A(s,R){return ms.run(!0,()=>_.run(s,R))}var bs="judgeval",c=new is;class Ds{_provider;constructor(s){this._provider=s}startSpan(s,R,o){let p=o??this._provider.getCurrentContext();return this._provider._getDelegateTracer().startSpan(s,R,p)}startActiveSpan(s,...R){let o={},p=this._provider.getCurrentContext(),E;if(R.length===1)E=R[0];else if(R.length===2)o=R[0],E=R[1];else o=R[0],p=R[1],E=R[2];let j=this.startSpan(s,o,p);return this._provider.useSpan(j,!0,!0,!0,()=>E(j))}}class Us{startSpan(){return O.wrapSpanContext(ds)}startActiveSpan(s,...R){return(R.length===1?R[0]:R.length===2?R[1]:R[2])(this.startSpan())}}class D{static _instance=null;_activeTracer=null;_instrumentations=[];_noOpTracer;_proxyTracer;_tracers=new Set;constructor(){this._noOpTracer=new Us,this._proxyTracer=new Ds(this),hs(()=>this.getCurrentContext())}static getInstance(){return D._instance??=new D,D._instance}static installAsGlobalTracerProvider(){let s=D.getInstance();return O.setGlobalTracerProvider(s)}register(s){this._tracers.add(s)}deregister(s){this._tracers.delete(s)}setActive(s){let R=this.getCurrentSpan();if(R?.isRecording()){if(O.getSpan(this.getCurrentContext())===R)return q.error("Cannot set_active() while a root span is active. Keeping existing tracer provider."),!1}return this.register(s),this._activeTracer=s,!0}getActiveTracer(){return this._activeTracer}getCurrentContext(){return c.getStore()??Bs}getCurrentSpan(){let s=this.getCurrentContext();return O.getSpan(s)}hasActiveRootSpan(){if(!this.getCurrentSpan()?.isRecording())return!1;return!0}_getDelegateTracer(){let s=this._activeTracer;if(!s)return q.debug("No active tracer, returning NoOpTracer"),this._noOpTracer;return s._tracerProvider.getTracer(bs)}getTracer(s,R,o){return this._proxyTracer}addInstrumentation(s){try{ys({tracerProvider:this,instrumentations:[s]}),this._instrumentations.push(s)}catch(R){q.error(`Failed to add instrumentation: ${String(R)}`)}}useSpan(s,R,o,p,E){let j=this.getCurrentContext(),P=O.setSpan(j,s);return c.run(P,()=>A(P,()=>{try{let $=E();if($ instanceof Promise)return $.catch((h)=>{if(s.isRecording()){if(o)s.recordException(h);if(p){let U=h;s.setStatus({code:$s.ERROR,message:`${U.name}: ${U.message}`})}}throw h}).finally(()=>{if(R)s.end()});if(R)s.end();return $}catch($){if(s.isRecording()){if(o)s.recordException($);if(p){let h=$;s.setStatus({code:$s.ERROR,message:`${h.name}: ${h.message}`})}}if(R)s.end();throw $}}))}attachContext(s){c.enterWith(s)}withContext(s,R){return c.run(s,()=>A(s,R))}async forceFlush(){let s=await Promise.allSettled(Array.from(this._tracers).map((R)=>R._tracerProvider.forceFlush()));for(let R of s)if(R.status==="rejected")q.error(`forceFlush failed: ${String(R.reason)}`)}async shutdown(){let s=await Promise.allSettled(Array.from(this._tracers).map((R)=>R._tracerProvider.shutdown()));for(let R of s)if(R.status==="rejected")q.error(`shutdown failed: ${String(R.reason)}`);this._activeTracer=null,this._tracers.clear()}}import{baggageEntryMetadataFromString as as}from"@opentelemetry/api";import{isTracingSuppressed as Ks}from"@opentelemetry/core";var Fs="=",T=";",u=",",k="baggage",fs=180,Vs=4096,Ss=8192;import{baggageEntryMetadataFromString as As}from"@opentelemetry/api";function Qs(s){return s.reduce((R,o)=>{let p=`${R}${R!==""?u:""}${o}`;return p.length>Ss?R:p},"")}function ws(s){return s.getAllEntries().map(([R,o])=>{let p=`${encodeURIComponent(R)}=${encodeURIComponent(o.value)}`;if(o.metadata!==void 0)p+=T+o.metadata.toString();return p})}function xs(s){let R=s.split(T);if(R.length<=0)return;let o=R.shift();if(!o)return;let p=o.indexOf(Fs);if(p<=0)return;let E=decodeURIComponent(o.substring(0,p).trim()),j=decodeURIComponent(o.substring(p+1).trim()),P;if(R.length>0)P=As(R.join(T));return{key:E,value:j,metadata:P}}class x{inject(s,R,o){let p=Q(s);if(!p||Ks(s))return;let E=ws(p).filter((P)=>P.length<=Vs).slice(0,fs),j=Qs(E);if(j.length>0)o.set(R,k,j)}extract(s,R,o){let p=o.get(R,k),E=Array.isArray(p)?p.join(u):p;if(!E)return s;let j={};if(E.length===0)return s;if(E.split(u).forEach(($)=>{let h=xs($);if(h){let U={value:h.value};if(h.metadata)U.metadata=h.metadata;j[h.key]=U}}),Object.entries(j).length===0)return s;return I(s,t(j))}fields(){return[k]}}var t=Cs.createBaggage.bind(Cs),K=es("baggage");function Q(s){return s.getValue(K)??void 0}function rs(){return Q(D.getInstance().getCurrentContext())}function I(s,R){return s.setValue(K,R)}function gs(s){return s.deleteValue(K)}var a={};ps(a,{setGlobalTextmap:()=>ER,inject:()=>qR,getGlobalTextmap:()=>r,extract:()=>g});import{defaultTextMapGetter as sR,defaultTextMapSetter as RR}from"@opentelemetry/api";import{CompositePropagator as oR,W3CTraceContextPropagator as pR}from"@opentelemetry/core";var ls=new oR({propagators:[new pR,new x]});function r(){return ls}function ER(s){ls=s}function Hs(s){if(s!==void 0)return s;return D.getInstance().getCurrentContext()}function qR(s,R,o=RR){f("propagation.inject",()=>{r().inject(Hs(R),s,o)})}function g(s,R,o=sR){let p=Hs(R);return f("propagation.extract",()=>r().extract(p,s,o),p)??p}var Ws="judgeval";class m{projectName;projectId;apiKey;organizationId;apiUrl;environment;serializer;_tracerProvider;_client;_enableMonitoring;constructor(s,R,o,p,E,j,P,$,h,U){this.projectName=s,this.projectId=R,this.apiKey=o,this.organizationId=p,this.apiUrl=E,this.environment=j,this.serializer=P,this._tracerProvider=$,this._client=h,this._enableMonitoring=U}setActive(){return D.getInstance().setActive(this)}static _getProxyProvider(){return D.getInstance()}static _getSerializer(){return m._getProxyProvider().getActiveTracer()?.serializer??G}static _getCurrentTraceAndSpanId(){let R=m._getProxyProvider().getCurrentSpan();if(!R?.isRecording())return null;let o=R.spanContext();if(!o.traceId||!(o.traceFlags&1))return null;return[o.traceId,o.spanId]}static _emitPartial(){f("BaseTracer._emitPartial",()=>{let s=m._getProxyProvider().getActiveTracer();if(!s)return;s.getSpanProcessor().emitPartial()})}static getCurrentSpan(){return m._getProxyProvider().getCurrentSpan()}static async forceFlush(){await m._getProxyProvider().forceFlush()}static async shutdown(){await m._getProxyProvider().shutdown()}static registerOTELInstrumentation(s){f("BaseTracer.registerOTELInstrumentation",()=>{m._getProxyProvider().addInstrumentation(s)})}static getOTELTracer(){return m._getProxyProvider().getTracer(Ws)}static startSpan(s,R){let o=m.getOTELTracer().startSpan(s,{attributes:R});return m._emitPartial(),o}static startActiveSpan(s,R,o){return m.getOTELTracer().startActiveSpan(s,{attributes:o},(p)=>{m._emitPartial();let E=R(p);if(E instanceof Promise)return E.finally(()=>{p.end()});return p.end(),E})}static span(s,R){return m.startActiveSpan(s,(o)=>{try{let p=R(o);if(p instanceof Promise)return p.catch((E)=>{throw o.setStatus({code:L.ERROR,message:String(E)}),o.recordException(E),E});return p}catch(p){throw o.setStatus({code:L.ERROR,message:String(p)}),o.recordException(p),p}})}static with(s,R){return m.span(s,R)}static continueTrace(s,R){let o=m._getProxyProvider(),p=g(s);return o.withContext(p,()=>R(p))}static observe(s,R="span",o,p=!0,E=!0,j=!1){let P=m._getProxyProvider(),$=(h)=>{let U=o??h.name;return(...Z)=>{return P.getTracer(Ws).startActiveSpan(U,(F)=>{if(R)F.setAttribute("judgment.span_kind",R);try{if(p)F.setAttribute("judgment.input",Y(hR(h,Z),m._getSerializer()));m._emitPartial();let V=h(...Z);if(V instanceof Promise)return V.then((S)=>{if(E)F.setAttribute("judgment.output",Y(S,m._getSerializer()));return S}).catch((S)=>{throw F.recordException(S),F.setStatus({code:L.ERROR,message:String(S)}),S}).finally(()=>{F.end()});if(E)F.setAttribute("judgment.output",Y(V,m._getSerializer()));return F.end(),V}catch(V){throw F.recordException(V),F.setStatus({code:L.ERROR,message:String(V)}),F.end(),V}})}};if(!s)return $;return $(s)}static setSpanKind(s){f("BaseTracer.setSpanKind",()=>{if(!s)return;let R=m._getProxyProvider().getCurrentSpan();if(R?.isRecording())R.setAttribute("judgment.span_kind",s)})}static setLLMSpan(){m.setSpanKind("llm")}static setToolSpan(){m.setSpanKind("tool")}static setGeneralSpan(){m.setSpanKind("span")}static setAttribute(s,R){f("BaseTracer.setAttribute",()=>{let o=m._getProxyProvider().getCurrentSpan();if(!o?.isRecording())return;if(!s||R==null)return;o.setAttribute(s,Y(R,m._getSerializer()))})}static setAttributes(s){for(let[R,o]of Object.entries(s))m.setAttribute(R,o)}static setInput(s){m.setAttribute("judgment.input",s)}static setOutput(s){m.setAttribute("judgment.output",s)}static recordLLMMetadata(s){f("BaseTracer.recordLLMMetadata",()=>{let R=m._getProxyProvider().getCurrentSpan();if(!R?.isRecording())return;if(typeof s.model==="string")R.setAttribute("judgment.llm.model",s.model);if(typeof s.provider==="string")R.setAttribute("judgment.llm.provider",s.provider);if(typeof s.non_cached_input_tokens==="number")R.setAttribute("judgment.usage.non_cached_input_tokens",s.non_cached_input_tokens);if(typeof s.output_tokens==="number")R.setAttribute("judgment.usage.output_tokens",s.output_tokens);if(typeof s.cache_read_input_tokens==="number")R.setAttribute("judgment.usage.cache_read_input_tokens",s.cache_read_input_tokens);if(typeof s.cache_creation_input_tokens==="number")R.setAttribute("judgment.usage.cache_creation_input_tokens",s.cache_creation_input_tokens);if(typeof s.total_cost_usd==="number")R.setAttribute("judgment.usage.total_cost_usd",s.total_cost_usd)})}static _setPropagatingBaggageKey(s,R){f("BaseTracer._setPropagatingBaggageKey",()=>{let o=m._getProxyProvider(),p=o.getCurrentSpan();if(!p?.isRecording())return;p.setAttribute(s,R);let E=o.getCurrentContext(),j=(Q(E)??t()).setEntry(s,{value:R});o.attachContext(I(E,j))})}static setCustomerId(s){m._setPropagatingBaggageKey("judgment.customer_id",s)}static setCustomerUserId(s){m._setPropagatingBaggageKey("judgment.customer_user_id",s)}static setSessionId(s){m._setPropagatingBaggageKey("judgment.session_id",s)}static tag(s){f("BaseTracer.tag",()=>{if(!s||Array.isArray(s)&&s.length===0)return;let o=m._getProxyProvider().getActiveTracer();if(!o?.projectId||!o._client)return;let p=m._getCurrentTraceAndSpanId();if(!p)return;let[E]=p,j=Array.isArray(s)?s:[s];o._client.postV1projectsTracesByTraceIdTags(o.projectId,E,{tags:j}).catch((P)=>{q.error(`tag failed: ${String(P)}`)})})}static asyncEvaluate(s,R){f("BaseTracer.asyncEvaluate",()=>{let o=m._getProxyProvider(),p=o.getActiveTracer();if(!p?.projectId)return;let E=o.getCurrentSpan();if(!E?.isRecording())return;let j=p.getSpanProcessor(),P=E.spanContext(),$=j.stateIncr(P,"pending_evals_count"),h={project_id:p.projectId,eval_name:`async_evaluate_${s}_${$}`,judges:[{name:s}],examples:[{...R,example_id:mR(),created_at:new Date().toISOString(),trace_id:P.traceId,span_id:P.spanId}],is_offline:!1,is_behavior:!1},U=j.stateAppend(P,"pending_evals",h);E.setAttribute("judgment.pending_trace_eval",JSON.stringify(U))})}}function hR(s,R){try{let o=qs(s).map((E)=>E.replace(/^\.\.\./,"").split("=")[0].trim()).filter((E)=>E.length>0),p={};return o.forEach((E,j)=>{if(j<R.length)p[E]=R[j]}),p}catch{return{}}}import{OTLPTraceExporter as $R}from"@opentelemetry/exporter-trace-otlp-http";class C{_delegate;constructor(s,R,o,p){this._delegate=new $R({url:s,headers:{Authorization:`Bearer ${R}`,"X-Organization-Id":o,"X-Project-Id":p}})}export(s,R){q.info(`Exported ${s.length} spans`),this._delegate?.export(s,R)}shutdown(){return this._delegate?.shutdown()??Promise.resolve()}forceFlush(){return this._delegate?.forceFlush()??Promise.resolve()}}import{ExportResultCode as DR}from"@opentelemetry/core";class l extends C{constructor(){super("https://api.judgmentlabs.ai/otel/v1/traces","","","");this._delegate=null}export(s,R){R({code:DR.SUCCESS})}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}}import{BatchSpanProcessor as UR}from"@opentelemetry/sdk-trace-base";var ss=()=>!0;class M{_keyPredicate;constructor(s=ss){this._keyPredicate=s}onStart(s,R){let o=Q(R)?.getAllEntries()??[];for(let[p,E]of o)if(this._keyPredicate(p))s.setAttribute(p,E.value)}onEnd(s){}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}function H(s){return`${s.traceId}:${s.spanId}`}function FR(s){return s[0]===0&&s[1]===0}class W extends UR{tracer;_state=new Map;_spanFinalizers;_baggageProcessor;constructor(s,R,o){super(R,o);this.tracer=s,this._spanFinalizers=new FinalizationRegistry((p)=>{this._cleanupSpanState(p)}),this._baggageProcessor=new M}_cleanupSpanState(s){this._state.delete(s)}_registerSpan(s){let R=s.spanContext();if(!R.traceId||!R.spanId)return;let o=H(R);this._spanFinalizers.register(s,o)}stateSet(s,R,o){let p=H(s),E=this._state.get(p);if(!E)E=new Map,this._state.set(p,E);E.set(R,o)}stateGet(s,R,o){let p=H(s),E=this._state.get(p);if(!E||!E.has(R))return o;return E.get(R)}stateIncr(s,R){let o=H(s),p=this._state.get(o);if(!p)p=new Map,this._state.set(o,p);let E=p.get(R),j=typeof E==="number"?E:0;return p.set(R,j+1),j}stateAppend(s,R,o){let p=H(s),E=this._state.get(p);if(!E)E=new Map,this._state.set(p,E);let j=E.get(R),P=Array.isArray(j)?[...j,o]:[o];return E.set(R,P),P}_emitSpan(s,R=!1){let o=s.spanContext();if(!o.traceId)return;let p=this.stateIncr(o,"judgment.update_id"),E={...s.attributes,"judgment.update_id":p};if(R)delete E["judgment.pending_trace_eval"];let j=Object.create(s);Object.defineProperty(j,"attributes",{value:E,writable:!1});let P=FR(s.endTime)?s.startTime:s.endTime;Object.defineProperty(j,"endTime",{value:P,writable:!1}),super.onEnd(j)}emitPartial(){f("JudgmentSpanProcessor.emitPartial",()=>{let R=D.getInstance().getCurrentSpan();if(!R?.isRecording())return;let o=R.spanContext();if(!o.traceId)return;if(this.stateGet(o,"disable_partial_emit",!1))return;this._emitSpan(R,!0)})}onStart(s,R){f("JudgmentSpanProcessor.onStart",()=>{this._baggageProcessor.onStart(s,R),this._registerSpan(s)})}onEnd(s){f("JudgmentSpanProcessor.onEnd",()=>{let R=s.spanContext();if(!R.traceId){super.onEnd(s);return}let o=H(R);try{if(!this.stateGet(R,"cancelled",!1))this._emitSpan(s)}finally{this._cleanupSpanState(o)}})}}class N extends W{constructor(){super(null,new l)}onStart(s,R){}onEnd(s){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}emitPartial(){}stateSet(s,R,o){}stateGet(s,R,o){return o}stateIncr(s,R){return 0}stateAppend(s,R,o){return[o]}}import{defaultResource as VR,resourceFromAttributes as SR}from"@opentelemetry/resources";import{NodeTracerProvider as ts}from"@opentelemetry/sdk-trace-node";async function Zs(s,R={}){let{maxRetries:o=3,backoff:p=()=>1000,onRetry:E}=R,j;for(let P=1;P<=o;P++)try{return await s()}catch($){if(j=$,P===o)throw $;E?.(P,$),await new Promise((h)=>setTimeout(h,p(P)))}throw j}var Xs=new Map,Rs=new Map;async function Ys(s,R){let o=`org:${s.getOrganizationId()}:project:${R}`,p=Xs.get(o);if(p)return p;let E=Rs.get(o);if(E)return E;let j=(async()=>{q.info(`Resolving project ID for project: ${R}`);let P=await Zs(async()=>{let h=(await s.postV1projectsResolve({project_name:R})).project_id;if(!h)throw Error(`Project ID not found for project: ${R}`);return h},{maxRetries:3,backoff:($)=>$*1000,onRetry:($,h)=>{q.warning(`Failed to resolve project ID for '${R}' (attempt ${$}): ${String(h)}`)}});return q.info(`Resolved project ID: ${P}`),Xs.set(o,P),P})();Rs.set(o,j);try{return await j}finally{Rs.delete(o)}}var Os="0.9.5";var us=Os;class d extends m{_spanExporter=null;_spanProcessor=null;constructor(s,R,o,p,E,j,P,$,h,U){super(s,R,o,p,E,j,P,$,h,U)}static async init(s={}){let R=s.apiKey??v,o=s.organizationId??z,p=s.apiUrl??J,E=s.projectName??null,j=s.serializer??G,P=!0;if(!E)q.warning("project_name not provided. Tracer will not export spans."),P=!1;if(!R)q.warning("api_key not provided. Tracer will not export spans."),P=!1;if(!o)q.warning("organization_id not provided. Tracer will not export spans."),P=!1;if(!p)q.warning("api_url not provided. Tracer will not export spans."),P=!1;let $=null,h=null;if(P&&E&&R&&o&&p){if($=new X(p,R,o),h=await Ys($,E).catch(()=>null),!h)q.warning(`Project '${E}' not found. Tracer will not export spans.`),P=!1}let U={"service.name":E??"unknown","telemetry.sdk.name":"judgeval","telemetry.sdk.version":us};if(s.environment)U["deployment.environment"]=s.environment;if(s.resourceAttributes)Object.assign(U,s.resourceAttributes);let Z=VR().merge(SR(U)),os=new ts({resource:Z,sampler:s.sampler,spanLimits:s.spanLimits}),F=new d(E,h,R,o,p,s.environment??null,j,os,$,P);if(P){let S=new ts({resource:Z,sampler:s.sampler,spanLimits:s.spanLimits,spanProcessors:[F.getSpanProcessor(),...s.spanProcessors??[]]});F._tracerProvider=S}if(D.getInstance().register(F),s.setActive??!0)F.setActive();return F}getSpanExporter(){if(this._spanExporter)return this._spanExporter;if(!this._enableMonitoring||!this.projectId||!this.apiKey||!this.organizationId||!this.apiUrl)this._spanExporter=new l;else{let s=this.apiUrl.endsWith("/")?this.apiUrl+"otel/v1/traces":this.apiUrl+"/otel/v1/traces";this._spanExporter=new C(s,this.apiKey,this.organizationId,this.projectId)}return this._spanExporter}getSpanProcessor(){if(this._spanProcessor)return this._spanProcessor;if(!this._enableMonitoring)this._spanProcessor=new N;else this._spanProcessor=new W(this,this.getSpanExporter());return this._spanProcessor}}export{a as propagation,e as baggage,d as Tracer,N as NoOpSpanProcessor,l as NoOpSpanExporter,D as JudgmentTracerProvider,C as JudgmentSpanExporter,M as JudgmentBaggageSpanProcessor,x as JudgmentBaggagePropagator,B as Judgeval,m as BaseTracer,ss as ALLOW_ALL_BAGGAGE_KEYS};
3
+ ${p.stack}`:"";return q.error(`[Caught] An exception was raised in ${s}: ${String(p)}${E}`),o}}var y;function _s(s,R){if(typeof R==="bigint")return R.toString();if(typeof R==="object"&&R!==null){if(y.has(R))return"[Circular]";y.add(R)}return R}function G(s){try{let R=JSON.stringify(s);if(typeof R==="string")return R;return String(R)}catch{try{y=new WeakSet;let R=JSON.stringify(s,_s);return typeof R==="string"?R:String(s)}catch(R){return q.error(`safeStringify failed: ${R}`),String(s)}}}function Y(s,R){if(typeof s==="string"||typeof s==="number"||typeof s==="boolean")return s;return R(s)}var e={};ps(e,{setBaggage:()=>I,getBaggage:()=>Q,getActiveBaggage:()=>rs,deleteBaggage:()=>gs,createBaggage:()=>t,baggageEntryMetadataFromString:()=>as,JudgmentBaggagePropagator:()=>x});import{createContextKey as es,propagation as Cs}from"@opentelemetry/api";import{INVALID_SPAN_CONTEXT as ds,ROOT_CONTEXT as Bs,SpanStatusCode as $s,trace as O}from"@opentelemetry/api";import{registerInstrumentations as ys}from"@opentelemetry/instrumentation";import{AsyncLocalStorage as is}from"async_hooks";import{ROOT_CONTEXT as cs,context as w}from"@opentelemetry/api";import{AsyncLocalStorage as Ps}from"async_hooks";var js=!1,i=null,ms=new Ps,_=new Ps,Ts=w.active.bind(w),ks=w.with.bind(w),Ls=w.bind.bind(w);function b(){return ms.getStore()===!0}function hs(s){if(i=s,js)return;let R=w;R.active=()=>{if(!b())return Ts();let o=_.getStore();if(o)return o;return i?i():cs},R.with=(o,p,E,...j)=>{if(!b())return ks(o,p,E,...j);return _.run(o,()=>p.apply(E,j))},R.bind=(o,p)=>{if(!b())return Ls(o,p);if(typeof p!=="function")return p;let E=p;return(...j)=>_.run(o,()=>E(...j))},js=!0}function A(s,R){return ms.run(!0,()=>_.run(s,R))}var bs="judgeval",c=new is;class Ds{_provider;constructor(s){this._provider=s}startSpan(s,R,o){let p=o??this._provider.getCurrentContext();return this._provider._getDelegateTracer().startSpan(s,R,p)}startActiveSpan(s,...R){let o={},p=this._provider.getCurrentContext(),E;if(R.length===1)E=R[0];else if(R.length===2)o=R[0],E=R[1];else o=R[0],p=R[1],E=R[2];let j=this.startSpan(s,o,p);return this._provider.useSpan(j,!1,!1,!1,()=>E(j))}}class Us{startSpan(){return O.wrapSpanContext(ds)}startActiveSpan(s,...R){return(R.length===1?R[0]:R.length===2?R[1]:R[2])(this.startSpan())}}class D{static _instance=null;_activeTracer=null;_instrumentations=[];_noOpTracer;_proxyTracer;_tracers=new Set;constructor(){this._noOpTracer=new Us,this._proxyTracer=new Ds(this),hs(()=>this.getCurrentContext())}static getInstance(){return D._instance??=new D,D._instance}static installAsGlobalTracerProvider(){let s=D.getInstance();return O.setGlobalTracerProvider(s)}register(s){this._tracers.add(s)}deregister(s){this._tracers.delete(s)}setActive(s){let R=this.getCurrentSpan();if(R?.isRecording()){if(O.getSpan(this.getCurrentContext())===R)return q.error("Cannot set_active() while a root span is active. Keeping existing tracer provider."),!1}return this.register(s),this._activeTracer=s,!0}getActiveTracer(){return this._activeTracer}getCurrentContext(){return c.getStore()??Bs}getCurrentSpan(){let s=this.getCurrentContext();return O.getSpan(s)}hasActiveRootSpan(){if(!this.getCurrentSpan()?.isRecording())return!1;return!0}_getDelegateTracer(){let s=this._activeTracer;if(!s)return q.debug("No active tracer, returning NoOpTracer"),this._noOpTracer;return s._tracerProvider.getTracer(bs)}getTracer(s,R,o){return this._proxyTracer}addInstrumentation(s){try{ys({tracerProvider:this,instrumentations:[s]}),this._instrumentations.push(s)}catch(R){q.error(`Failed to add instrumentation: ${String(R)}`)}}useSpan(s,R,o,p,E){let j=this.getCurrentContext(),P=O.setSpan(j,s);return c.run(P,()=>A(P,()=>{try{let $=E();if($ instanceof Promise)return $.catch((h)=>{if(s.isRecording()){if(o)s.recordException(h);if(p){let U=h;s.setStatus({code:$s.ERROR,message:`${U.name}: ${U.message}`})}}throw h}).finally(()=>{if(R)s.end()});if(R)s.end();return $}catch($){if(s.isRecording()){if(o)s.recordException($);if(p){let h=$;s.setStatus({code:$s.ERROR,message:`${h.name}: ${h.message}`})}}if(R)s.end();throw $}}))}attachContext(s){c.enterWith(s)}withContext(s,R){return c.run(s,()=>A(s,R))}async forceFlush(){let s=await Promise.allSettled(Array.from(this._tracers).map((R)=>R._tracerProvider.forceFlush()));for(let R of s)if(R.status==="rejected")q.error(`forceFlush failed: ${String(R.reason)}`)}async shutdown(){let s=await Promise.allSettled(Array.from(this._tracers).map((R)=>R._tracerProvider.shutdown()));for(let R of s)if(R.status==="rejected")q.error(`shutdown failed: ${String(R.reason)}`);this._activeTracer=null,this._tracers.clear()}}import{baggageEntryMetadataFromString as as}from"@opentelemetry/api";import{isTracingSuppressed as Ks}from"@opentelemetry/core";var Fs="=",T=";",u=",",k="baggage",fs=180,Vs=4096,Ss=8192;import{baggageEntryMetadataFromString as As}from"@opentelemetry/api";function Qs(s){return s.reduce((R,o)=>{let p=`${R}${R!==""?u:""}${o}`;return p.length>Ss?R:p},"")}function ws(s){return s.getAllEntries().map(([R,o])=>{let p=`${encodeURIComponent(R)}=${encodeURIComponent(o.value)}`;if(o.metadata!==void 0)p+=T+o.metadata.toString();return p})}function xs(s){let R=s.split(T);if(R.length<=0)return;let o=R.shift();if(!o)return;let p=o.indexOf(Fs);if(p<=0)return;let E=decodeURIComponent(o.substring(0,p).trim()),j=decodeURIComponent(o.substring(p+1).trim()),P;if(R.length>0)P=As(R.join(T));return{key:E,value:j,metadata:P}}class x{inject(s,R,o){let p=Q(s);if(!p||Ks(s))return;let E=ws(p).filter((P)=>P.length<=Vs).slice(0,fs),j=Qs(E);if(j.length>0)o.set(R,k,j)}extract(s,R,o){let p=o.get(R,k),E=Array.isArray(p)?p.join(u):p;if(!E)return s;let j={};if(E.length===0)return s;if(E.split(u).forEach(($)=>{let h=xs($);if(h){let U={value:h.value};if(h.metadata)U.metadata=h.metadata;j[h.key]=U}}),Object.entries(j).length===0)return s;return I(s,t(j))}fields(){return[k]}}var t=Cs.createBaggage.bind(Cs),K=es("baggage");function Q(s){return s.getValue(K)??void 0}function rs(){return Q(D.getInstance().getCurrentContext())}function I(s,R){return s.setValue(K,R)}function gs(s){return s.deleteValue(K)}var a={};ps(a,{setGlobalTextmap:()=>ER,inject:()=>qR,getGlobalTextmap:()=>r,extract:()=>g});import{defaultTextMapGetter as sR,defaultTextMapSetter as RR}from"@opentelemetry/api";import{CompositePropagator as oR,W3CTraceContextPropagator as pR}from"@opentelemetry/core";var ls=new oR({propagators:[new pR,new x]});function r(){return ls}function ER(s){ls=s}function Hs(s){if(s!==void 0)return s;return D.getInstance().getCurrentContext()}function qR(s,R,o=RR){f("propagation.inject",()=>{r().inject(Hs(R),s,o)})}function g(s,R,o=sR){let p=Hs(R);return f("propagation.extract",()=>r().extract(p,s,o),p)??p}var Ws="judgeval";class m{projectName;projectId;apiKey;organizationId;apiUrl;environment;serializer;_tracerProvider;_client;_enableMonitoring;constructor(s,R,o,p,E,j,P,$,h,U){this.projectName=s,this.projectId=R,this.apiKey=o,this.organizationId=p,this.apiUrl=E,this.environment=j,this.serializer=P,this._tracerProvider=$,this._client=h,this._enableMonitoring=U}setActive(){return D.getInstance().setActive(this)}static _getProxyProvider(){return D.getInstance()}static _getSerializer(){return m._getProxyProvider().getActiveTracer()?.serializer??G}static _getCurrentTraceAndSpanId(){let R=m._getProxyProvider().getCurrentSpan();if(!R?.isRecording())return null;let o=R.spanContext();if(!o.traceId||!(o.traceFlags&1))return null;return[o.traceId,o.spanId]}static _emitPartial(){f("BaseTracer._emitPartial",()=>{let s=m._getProxyProvider().getActiveTracer();if(!s)return;s.getSpanProcessor().emitPartial()})}static getCurrentSpan(){return m._getProxyProvider().getCurrentSpan()}static async forceFlush(){await m._getProxyProvider().forceFlush()}static async shutdown(){await m._getProxyProvider().shutdown()}static registerOTELInstrumentation(s){f("BaseTracer.registerOTELInstrumentation",()=>{m._getProxyProvider().addInstrumentation(s)})}static getOTELTracer(){return m._getProxyProvider().getTracer(Ws)}static startSpan(s,R){let o=m.getOTELTracer().startSpan(s,{attributes:R});return m._emitPartial(),o}static startActiveSpan(s,R,o){return m.getOTELTracer().startActiveSpan(s,{attributes:o},(p)=>{m._emitPartial();try{let E=R(p);if(E instanceof Promise)return E.finally(()=>{p.end()});return p.end(),E}catch(E){throw p.end(),E}})}static span(s,R){return m.startActiveSpan(s,(o)=>{try{let p=R(o);if(p instanceof Promise)return p.catch((E)=>{throw o.setStatus({code:L.ERROR,message:String(E)}),o.recordException(E),E});return p}catch(p){throw o.setStatus({code:L.ERROR,message:String(p)}),o.recordException(p),p}})}static with(s,R){return m.span(s,R)}static continueTrace(s,R){let o=m._getProxyProvider(),p=g(s);return o.withContext(p,()=>R(p))}static observe(s,R="span",o,p=!0,E=!0,j=!1){let P=m._getProxyProvider(),$=(h)=>{let U=o??h.name;return(...Z)=>{return P.getTracer(Ws).startActiveSpan(U,(F)=>{if(R)F.setAttribute("judgment.span_kind",R);try{if(p)F.setAttribute("judgment.input",Y(hR(h,Z),m._getSerializer()));m._emitPartial();let V=h(...Z);if(V instanceof Promise)return V.then((S)=>{if(E)F.setAttribute("judgment.output",Y(S,m._getSerializer()));return S}).catch((S)=>{throw F.recordException(S),F.setStatus({code:L.ERROR,message:String(S)}),S}).finally(()=>{F.end()});if(E)F.setAttribute("judgment.output",Y(V,m._getSerializer()));return F.end(),V}catch(V){throw F.recordException(V),F.setStatus({code:L.ERROR,message:String(V)}),F.end(),V}})}};if(!s)return $;return $(s)}static setSpanKind(s){f("BaseTracer.setSpanKind",()=>{if(!s)return;let R=m._getProxyProvider().getCurrentSpan();if(R?.isRecording())R.setAttribute("judgment.span_kind",s)})}static setLLMSpan(){m.setSpanKind("llm")}static setToolSpan(){m.setSpanKind("tool")}static setGeneralSpan(){m.setSpanKind("span")}static setAttribute(s,R){f("BaseTracer.setAttribute",()=>{let o=m._getProxyProvider().getCurrentSpan();if(!o?.isRecording())return;if(!s||R==null)return;o.setAttribute(s,Y(R,m._getSerializer()))})}static setAttributes(s){for(let[R,o]of Object.entries(s))m.setAttribute(R,o)}static setInput(s){m.setAttribute("judgment.input",s)}static setOutput(s){m.setAttribute("judgment.output",s)}static recordLLMMetadata(s){f("BaseTracer.recordLLMMetadata",()=>{let R=m._getProxyProvider().getCurrentSpan();if(!R?.isRecording())return;if(typeof s.model==="string")R.setAttribute("judgment.llm.model",s.model);if(typeof s.provider==="string")R.setAttribute("judgment.llm.provider",s.provider);if(typeof s.non_cached_input_tokens==="number")R.setAttribute("judgment.usage.non_cached_input_tokens",s.non_cached_input_tokens);if(typeof s.output_tokens==="number")R.setAttribute("judgment.usage.output_tokens",s.output_tokens);if(typeof s.cache_read_input_tokens==="number")R.setAttribute("judgment.usage.cache_read_input_tokens",s.cache_read_input_tokens);if(typeof s.cache_creation_input_tokens==="number")R.setAttribute("judgment.usage.cache_creation_input_tokens",s.cache_creation_input_tokens);if(typeof s.total_cost_usd==="number")R.setAttribute("judgment.usage.total_cost_usd",s.total_cost_usd)})}static _setPropagatingBaggageKey(s,R){f("BaseTracer._setPropagatingBaggageKey",()=>{let o=m._getProxyProvider(),p=o.getCurrentSpan();if(!p?.isRecording())return;p.setAttribute(s,R);let E=o.getCurrentContext(),j=(Q(E)??t()).setEntry(s,{value:R});o.attachContext(I(E,j))})}static setCustomerId(s){m._setPropagatingBaggageKey("judgment.customer_id",s)}static setCustomerUserId(s){m._setPropagatingBaggageKey("judgment.customer_user_id",s)}static setSessionId(s){m._setPropagatingBaggageKey("judgment.session_id",s)}static tag(s){f("BaseTracer.tag",()=>{if(!s||Array.isArray(s)&&s.length===0)return;let o=m._getProxyProvider().getActiveTracer();if(!o?.projectId||!o._client)return;let p=m._getCurrentTraceAndSpanId();if(!p)return;let[E]=p,j=Array.isArray(s)?s:[s];o._client.postV1projectsTracesByTraceIdTags(o.projectId,E,{tags:j}).catch((P)=>{q.error(`tag failed: ${String(P)}`)})})}static asyncEvaluate(s,R){f("BaseTracer.asyncEvaluate",()=>{let o=m._getProxyProvider(),p=o.getActiveTracer();if(!p?.projectId)return;let E=o.getCurrentSpan();if(!E?.isRecording())return;let j=p.getSpanProcessor(),P=E.spanContext(),$=j.stateIncr(P,"pending_evals_count"),h={project_id:p.projectId,eval_name:`async_evaluate_${s}_${$}`,judges:[{name:s}],examples:[{...R,example_id:mR(),created_at:new Date().toISOString(),trace_id:P.traceId,span_id:P.spanId}],is_offline:!1,is_behavior:!1},U=j.stateAppend(P,"pending_evals",h);E.setAttribute("judgment.pending_trace_eval",JSON.stringify(U))})}}function hR(s,R){try{let o=qs(s).map((E)=>E.replace(/^\.\.\./,"").split("=")[0].trim()).filter((E)=>E.length>0),p={};return o.forEach((E,j)=>{if(j<R.length)p[E]=R[j]}),p}catch{return{}}}import{OTLPTraceExporter as $R}from"@opentelemetry/exporter-trace-otlp-http";class C{_delegate;constructor(s,R,o,p){this._delegate=new $R({url:s,headers:{Authorization:`Bearer ${R}`,"X-Organization-Id":o,"X-Project-Id":p}})}export(s,R){q.info(`Exported ${s.length} spans`),this._delegate?.export(s,R)}shutdown(){return this._delegate?.shutdown()??Promise.resolve()}forceFlush(){return this._delegate?.forceFlush()??Promise.resolve()}}import{ExportResultCode as DR}from"@opentelemetry/core";class l extends C{constructor(){super("https://api.judgmentlabs.ai/otel/v1/traces","","","");this._delegate=null}export(s,R){R({code:DR.SUCCESS})}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}}import{BatchSpanProcessor as UR}from"@opentelemetry/sdk-trace-base";var ss=()=>!0;class M{_keyPredicate;constructor(s=ss){this._keyPredicate=s}onStart(s,R){let o=Q(R)?.getAllEntries()??[];for(let[p,E]of o)if(this._keyPredicate(p))s.setAttribute(p,E.value)}onEnd(s){}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}function H(s){return`${s.traceId}:${s.spanId}`}function FR(s){return s[0]===0&&s[1]===0}class W extends UR{tracer;_state=new Map;_spanFinalizers;_baggageProcessor;constructor(s,R,o){super(R,o);this.tracer=s,this._spanFinalizers=new FinalizationRegistry((p)=>{this._cleanupSpanState(p)}),this._baggageProcessor=new M}_cleanupSpanState(s){this._state.delete(s)}_registerSpan(s){let R=s.spanContext();if(!R.traceId||!R.spanId)return;let o=H(R);this._spanFinalizers.register(s,o)}stateSet(s,R,o){let p=H(s),E=this._state.get(p);if(!E)E=new Map,this._state.set(p,E);E.set(R,o)}stateGet(s,R,o){let p=H(s),E=this._state.get(p);if(!E||!E.has(R))return o;return E.get(R)}stateIncr(s,R){let o=H(s),p=this._state.get(o);if(!p)p=new Map,this._state.set(o,p);let E=p.get(R),j=typeof E==="number"?E:0;return p.set(R,j+1),j}stateAppend(s,R,o){let p=H(s),E=this._state.get(p);if(!E)E=new Map,this._state.set(p,E);let j=E.get(R),P=Array.isArray(j)?[...j,o]:[o];return E.set(R,P),P}_emitSpan(s,R=!1){let o=s.spanContext();if(!o.traceId)return;let p=this.stateIncr(o,"judgment.update_id"),E={...s.attributes,"judgment.update_id":p};if(R)delete E["judgment.pending_trace_eval"];let j=Object.create(s);Object.defineProperty(j,"attributes",{value:E,writable:!1});let P=FR(s.endTime)?s.startTime:s.endTime;Object.defineProperty(j,"endTime",{value:P,writable:!1}),super.onEnd(j)}emitPartial(){f("JudgmentSpanProcessor.emitPartial",()=>{let R=D.getInstance().getCurrentSpan();if(!R?.isRecording())return;let o=R.spanContext();if(!o.traceId)return;if(this.stateGet(o,"disable_partial_emit",!1))return;this._emitSpan(R,!0)})}onStart(s,R){f("JudgmentSpanProcessor.onStart",()=>{this._baggageProcessor.onStart(s,R),this._registerSpan(s)})}onEnd(s){f("JudgmentSpanProcessor.onEnd",()=>{let R=s.spanContext();if(!R.traceId){super.onEnd(s);return}let o=H(R);try{if(!this.stateGet(R,"cancelled",!1))this._emitSpan(s)}finally{this._cleanupSpanState(o)}})}}class N extends W{constructor(){super(null,new l)}onStart(s,R){}onEnd(s){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}emitPartial(){}stateSet(s,R,o){}stateGet(s,R,o){return o}stateIncr(s,R){return 0}stateAppend(s,R,o){return[o]}}import{defaultResource as VR,resourceFromAttributes as SR}from"@opentelemetry/resources";import{NodeTracerProvider as ts}from"@opentelemetry/sdk-trace-node";async function Zs(s,R={}){let{maxRetries:o=3,backoff:p=()=>1000,onRetry:E}=R,j;for(let P=1;P<=o;P++)try{return await s()}catch($){if(j=$,P===o)throw $;E?.(P,$),await new Promise((h)=>setTimeout(h,p(P)))}throw j}var Xs=new Map,Rs=new Map;async function Ys(s,R){let o=`org:${s.getOrganizationId()}:project:${R}`,p=Xs.get(o);if(p)return p;let E=Rs.get(o);if(E)return E;let j=(async()=>{q.info(`Resolving project ID for project: ${R}`);let P=await Zs(async()=>{let h=(await s.postV1projectsResolve({project_name:R})).project_id;if(!h)throw Error(`Project ID not found for project: ${R}`);return h},{maxRetries:3,backoff:($)=>$*1000,onRetry:($,h)=>{q.warning(`Failed to resolve project ID for '${R}' (attempt ${$}): ${String(h)}`)}});return q.info(`Resolved project ID: ${P}`),Xs.set(o,P),P})();Rs.set(o,j);try{return await j}finally{Rs.delete(o)}}var Os="0.9.6";var us=Os;class d extends m{_spanExporter=null;_spanProcessor=null;constructor(s,R,o,p,E,j,P,$,h,U){super(s,R,o,p,E,j,P,$,h,U)}static async init(s={}){let R=s.apiKey??v,o=s.organizationId??z,p=s.apiUrl??J,E=s.projectName??null,j=s.serializer??G,P=!0;if(!E)q.warning("project_name not provided. Tracer will not export spans."),P=!1;if(!R)q.warning("api_key not provided. Tracer will not export spans."),P=!1;if(!o)q.warning("organization_id not provided. Tracer will not export spans."),P=!1;if(!p)q.warning("api_url not provided. Tracer will not export spans."),P=!1;let $=null,h=null;if(P&&E&&R&&o&&p){if($=new X(p,R,o),h=await Ys($,E).catch(()=>null),!h)q.warning(`Project '${E}' not found. Tracer will not export spans.`),P=!1}let U={"service.name":E??"unknown","telemetry.sdk.name":"judgeval","telemetry.sdk.version":us};if(s.environment)U["deployment.environment"]=s.environment;if(s.resourceAttributes)Object.assign(U,s.resourceAttributes);let Z=VR().merge(SR(U)),os=new ts({resource:Z,sampler:s.sampler,spanLimits:s.spanLimits}),F=new d(E,h,R,o,p,s.environment??null,j,os,$,P);if(P){let S=new ts({resource:Z,sampler:s.sampler,spanLimits:s.spanLimits,spanProcessors:[F.getSpanProcessor(),...s.spanProcessors??[]]});F._tracerProvider=S}if(D.getInstance().register(F),s.setActive??!0)F.setActive();return F}getSpanExporter(){if(this._spanExporter)return this._spanExporter;if(!this._enableMonitoring||!this.projectId||!this.apiKey||!this.organizationId||!this.apiUrl)this._spanExporter=new l;else{let s=this.apiUrl.endsWith("/")?this.apiUrl+"otel/v1/traces":this.apiUrl+"/otel/v1/traces";this._spanExporter=new C(s,this.apiKey,this.organizationId,this.projectId)}return this._spanExporter}getSpanProcessor(){if(this._spanProcessor)return this._spanProcessor;if(!this._enableMonitoring)this._spanProcessor=new N;else this._spanProcessor=new W(this,this.getSpanExporter());return this._spanProcessor}}export{a as propagation,e as baggage,d as Tracer,N as NoOpSpanProcessor,l as NoOpSpanExporter,D as JudgmentTracerProvider,C as JudgmentSpanExporter,M as JudgmentBaggageSpanProcessor,x as JudgmentBaggagePropagator,B as Judgeval,m as BaseTracer,ss as ALLOW_ALL_BAGGAGE_KEYS};
4
4
 
5
- //# debugId=F6297EAA524DDD8D64756E2164756E21
5
+ //# debugId=51779113799800CD64756E2164756E21
6
6
  //# sourceMappingURL=index.mjs.map
@@ -5,13 +5,13 @@
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_LOG_LEVEL = getEnvVar(\"JUDGMENT_LOG_LEVEL\", \"warn\");\n",
6
6
  "// Auto-generated by scripts/generate-client.ts\n// DO NOT EDIT MANUALLY\n\nimport type {\n AddProjectRequest,\n AddProjectResponse,\n AddToRunEvalQueueExamplesResponse,\n AddToRunEvalQueueTracesResponse,\n AddTraceTagsRequest,\n AddTraceTagsResponse,\n CreateDatasetRequest,\n CreateDatasetResponse,\n CustomScorerExistsResponse,\n DeleteProjectResponse,\n E2EFetchSpanScoreRequest,\n E2EFetchSpanScoreResponse,\n E2EFetchTraceResponse,\n E2ETracesPerProjectResponse,\n ExampleEvaluationRun,\n FetchExperimentRunResponse,\n FetchPromptResponse,\n FetchPromptScorersResponse,\n GetPromptVersionsResponse,\n InsertExamplesRequest,\n InsertExamplesResponse,\n InsertPromptRequest,\n InsertPromptResponse,\n LogEvalResultsExamplesRequest,\n LogEvalResultsExamplesResponse,\n LogEvalResultsRequest,\n LogEvalResultsResponse,\n PullAllDatasetsResponse,\n PullDatasetResponse,\n ResolveProjectRequest,\n ResolveProjectResponse,\n ScorerExistsResponse,\n TagPromptRequest,\n TagPromptResponse,\n TraceEvaluationRun,\n UntagPromptRequest,\n UntagPromptResponse,\n UploadCustomScorerResponse,\n} 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 getApiKey(): string {\n return this.apiKey;\n }\n getOrganizationId(): string {\n return this.organizationId;\n }\n\n private async request<T>(\n method: string,\n url: string,\n body?: unknown,\n ): Promise<T> {\n const response = await fetch(url, {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n \"X-Organization-Id\": this.organizationId,\n },\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`HTTP ${response.status}: ${text}`);\n }\n return response.json() as T;\n }\n\n async postOtelV1traces(): Promise<unknown> {\n const url = this.baseUrl + \"/otel/v1/traces\";\n return this.request(\"POST\", url, {});\n }\n\n async postV1projectsResolve(\n payload: ResolveProjectRequest,\n ): Promise<ResolveProjectResponse> {\n const url = this.baseUrl + \"/v1/projects/resolve/\";\n return this.request(\"POST\", url, payload);\n }\n\n async postV1projects(\n payload: AddProjectRequest,\n ): Promise<AddProjectResponse> {\n const url = this.baseUrl + \"/v1/projects\";\n return this.request(\"POST\", url, payload);\n }\n\n async deleteV1projects(projectId: string): Promise<DeleteProjectResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}`;\n return this.request(\"DELETE\", url, {});\n }\n\n async postV1projectsDatasets(\n projectId: string,\n payload: CreateDatasetRequest,\n ): Promise<CreateDatasetResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/datasets`;\n return this.request(\"POST\", url, payload);\n }\n\n async getV1projectsDatasets(\n projectId: string,\n ): Promise<PullAllDatasetsResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/datasets`;\n return this.request(\"GET\", url, undefined);\n }\n\n async postV1projectsDatasetsByDatasetNameExamples(\n projectId: string,\n datasetName: string,\n payload: InsertExamplesRequest,\n ): Promise<InsertExamplesResponse> {\n const url =\n this.baseUrl +\n `/v1/projects/${projectId}/datasets/${datasetName}/examples`;\n return this.request(\"POST\", url, payload);\n }\n\n async getV1projectsDatasetsByDatasetName(\n projectId: string,\n datasetName: string,\n ): Promise<PullDatasetResponse> {\n const url =\n this.baseUrl + `/v1/projects/${projectId}/datasets/${datasetName}`;\n return this.request(\"GET\", url, undefined);\n }\n\n async postV1projectsEvaluateExamples(\n projectId: string,\n payload: ExampleEvaluationRun,\n ): Promise<unknown> {\n const url = this.baseUrl + `/v1/projects/${projectId}/evaluate/examples`;\n return this.request(\"POST\", url, payload);\n }\n\n async postV1projectsEvaluateTraces(\n projectId: string,\n payload: TraceEvaluationRun,\n ): Promise<unknown> {\n const url = this.baseUrl + `/v1/projects/${projectId}/evaluate/traces`;\n return this.request(\"POST\", url, payload);\n }\n\n async postV1projectsEvalResults(\n projectId: string,\n payload: LogEvalResultsRequest,\n ): Promise<LogEvalResultsResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/eval-results`;\n return this.request(\"POST\", url, payload);\n }\n\n async postV1projectsEvalResultsExamples(\n projectId: string,\n payload: LogEvalResultsExamplesRequest,\n ): Promise<LogEvalResultsExamplesResponse> {\n const url =\n this.baseUrl + `/v1/projects/${projectId}/eval-results/examples`;\n return this.request(\"POST\", url, payload);\n }\n\n async getV1projectsExperimentsByRunId(\n projectId: string,\n runId: string,\n ): Promise<FetchExperimentRunResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/experiments/${runId}`;\n return this.request(\"GET\", url, undefined);\n }\n\n async postV1projectsEvalQueueExamples(\n projectId: string,\n payload: ExampleEvaluationRun,\n ): Promise<AddToRunEvalQueueExamplesResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/eval-queue/examples`;\n return this.request(\"POST\", url, payload);\n }\n\n async postV1projectsEvalQueueTraces(\n projectId: string,\n payload: TraceEvaluationRun,\n ): Promise<AddToRunEvalQueueTracesResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/eval-queue/traces`;\n return this.request(\"POST\", url, payload);\n }\n\n async getV1projectsPromptsByName(\n projectId: string,\n name: string,\n commit_id?: string,\n tag?: string,\n ): Promise<FetchPromptResponse> {\n const params = new URLSearchParams();\n if (commit_id !== undefined) params.set(\"commit_id\", commit_id);\n if (tag !== undefined) params.set(\"tag\", tag);\n const url =\n this.baseUrl +\n `/v1/projects/${projectId}/prompts/${name}` +\n (params.toString() ? \"?\" + params.toString() : \"\");\n return this.request(\"GET\", url, undefined);\n }\n\n async postV1projectsPrompts(\n projectId: string,\n payload: InsertPromptRequest,\n ): Promise<InsertPromptResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/prompts`;\n return this.request(\"POST\", url, payload);\n }\n\n async postV1projectsPromptsByNameTags(\n projectId: string,\n name: string,\n payload: TagPromptRequest,\n ): Promise<TagPromptResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/prompts/${name}/tags`;\n return this.request(\"POST\", url, payload);\n }\n\n async deleteV1projectsPromptsByNameTags(\n projectId: string,\n name: string,\n payload: UntagPromptRequest,\n ): Promise<UntagPromptResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/prompts/${name}/tags`;\n return this.request(\"DELETE\", url, payload);\n }\n\n async getV1projectsPromptsByNameVersions(\n projectId: string,\n name: string,\n ): Promise<GetPromptVersionsResponse> {\n const url =\n this.baseUrl + `/v1/projects/${projectId}/prompts/${name}/versions`;\n return this.request(\"GET\", url, undefined);\n }\n\n async getV1projectsScorers(\n projectId: string,\n names?: string,\n is_trace?: string,\n ): Promise<FetchPromptScorersResponse> {\n const params = new URLSearchParams();\n if (names !== undefined) params.set(\"names\", names);\n if (is_trace !== undefined) params.set(\"is_trace\", is_trace);\n const url =\n this.baseUrl +\n `/v1/projects/${projectId}/scorers` +\n (params.toString() ? \"?\" + params.toString() : \"\");\n return this.request(\"GET\", url, undefined);\n }\n\n async getV1projectsScorersByNameExists(\n projectId: string,\n name: string,\n ): Promise<ScorerExistsResponse> {\n const url =\n this.baseUrl + `/v1/projects/${projectId}/scorers/${name}/exists`;\n return this.request(\"GET\", url, undefined);\n }\n\n async postV1projectsScorersCustom(projectId: string): Promise<unknown> {\n const url = this.baseUrl + `/v1/projects/${projectId}/scorers/custom`;\n return this.request(\"POST\", url, {});\n }\n\n async postV1projectsScorersCustomBundle(\n projectId: string,\n ): Promise<UploadCustomScorerResponse> {\n const url =\n this.baseUrl + `/v1/projects/${projectId}/scorers/custom/bundle`;\n return this.request(\"POST\", url, {});\n }\n\n async getV1projectsScorersCustomByNameExists(\n projectId: string,\n name: string,\n ): Promise<CustomScorerExistsResponse> {\n const url =\n this.baseUrl + `/v1/projects/${projectId}/scorers/custom/${name}/exists`;\n return this.request(\"GET\", url, undefined);\n }\n\n async postV1projectsTracesByTraceIdTags(\n projectId: string,\n traceId: string,\n payload: AddTraceTagsRequest,\n ): Promise<AddTraceTagsResponse> {\n const url =\n this.baseUrl + `/v1/projects/${projectId}/traces/${traceId}/tags`;\n return this.request(\"POST\", url, payload);\n }\n\n async getV1e2eFetchTraceByProjectNameByTraceId(\n projectName: string,\n traceId: string,\n ): Promise<E2EFetchTraceResponse> {\n const url = this.baseUrl + `/v1/e2e_fetch_trace/${projectName}/${traceId}`;\n return this.request(\"GET\", url, undefined);\n }\n\n async getV1e2eTracesPerProject(\n projectId: string,\n limit?: string,\n offset?: string,\n ): Promise<E2ETracesPerProjectResponse> {\n const params = new URLSearchParams();\n if (limit !== undefined) params.set(\"limit\", limit);\n if (offset !== undefined) params.set(\"offset\", offset);\n const url =\n this.baseUrl +\n `/v1/e2e_traces_per_project/${projectId}` +\n (params.toString() ? \"?\" + params.toString() : \"\");\n return this.request(\"GET\", url, undefined);\n }\n\n async postV1e2eFetchSpanScore(\n payload: E2EFetchSpanScoreRequest,\n ): Promise<E2EFetchSpanScoreResponse> {\n const url = this.baseUrl + \"/v1/e2e_fetch_span_score/\";\n return this.request(\"POST\", url, payload);\n }\n}\n",
7
7
  "import { JUDGMENT_API_KEY, JUDGMENT_API_URL, JUDGMENT_ORG_ID } from \"./env\";\nimport { JudgmentApiClient } from \"./internal/api\";\n/**\n * Configuration options for the Judgeval client.\n *\n * Credentials are resolved in order: explicit arguments first, then\n * environment variables `JUDGMENT_API_KEY`, `JUDGMENT_ORG_ID`, and\n * `JUDGMENT_API_URL`.\n */\nexport interface JudgevalConfig {\n /** Judgment API key. Defaults to `JUDGMENT_API_KEY` env var. */\n apiKey?: string;\n /** Judgment organization ID. Defaults to `JUDGMENT_ORG_ID` env var. */\n organizationId?: string;\n /** Judgment API URL. Defaults to `JUDGMENT_API_URL` env var. */\n apiUrl?: string;\n}\n\n/**\n * The main entry point for interacting with the Judgment platform.\n *\n * `Judgeval` connects to your Judgment project and gives you access to\n * tracing, evaluation, and monitoring through the Judgment platform.\n *\n * @example\n * ```typescript\n * import { Judgeval } from \"judgeval\";\n *\n * const client = Judgeval.create();\n * ```\n *\n * @throws Error if any required credential is missing.\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 /**\n * Create a new Judgeval client instance.\n *\n * @param config - Configuration options. Credentials default to environment variables.\n * @returns A new `Judgeval` instance.\n *\n * @example\n * ```typescript\n * const client = Judgeval.create({\n * apiKey: \"<your-api-key>\",\n * organizationId: \"<your-organization-id>\",\n * });\n * ```\n */\n static create(config: JudgevalConfig = {}): Judgeval {\n return new Judgeval(config);\n }\n}\n",
8
- "import {\n type Attributes,\n type Context,\n type Span,\n SpanStatusCode,\n type Tracer,\n} from \"@opentelemetry/api\";\nimport type { Instrumentation } from \"@opentelemetry/instrumentation\";\nimport type {\n BasicTracerProvider,\n Sampler,\n SpanLimits,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { randomUUID } from \"crypto\";\nimport { AttributeKeys, InternalAttributeKeys } from \"../JudgmentAttributeKeys\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport type { PendingEvalPayload } from \"../internal/api/models/PendingEvalPayload\";\nimport { parseFunctionArgs } from \"../utils/annotate\";\nimport { dontThrow } from \"../utils/dont-throw\";\nimport { Logger } from \"../utils/logger\";\nimport {\n safeStringify,\n serializeAttribute,\n Serializer,\n} from \"../utils/serializer\";\nimport { Maybe } from \"../utils/type-helpers\";\nimport { createBaggage, getBaggage, setBaggage } from \"./baggage\";\nimport { JudgmentTracerProvider } from \"./JudgmentTracerProvider\";\nimport { extract } from \"./propagation\";\nimport type { JudgmentSpanExporter } from \"./exporters/JudgmentSpanExporter\";\nimport type { JudgmentSpanProcessor } from \"./processors/JudgmentSpanProcessor\";\n\nconst TRACER_NAME = \"judgeval\";\n\n/**\n * Metadata about an LLM call to record on the current span.\n */\nexport interface LLMMetadata {\n /** Model name (e.g. \"gpt-4o\"). */\n model?: Maybe<string>;\n /** Provider name (e.g. \"openai\"). */\n provider?: Maybe<string>;\n /** Number of non-cached input tokens. */\n non_cached_input_tokens?: Maybe<number>;\n /** Number of output tokens. */\n output_tokens?: Maybe<number>;\n /** Number of cache-read input tokens. */\n cache_read_input_tokens?: Maybe<number>;\n /** Number of cache-creation input tokens. */\n cache_creation_input_tokens?: Maybe<number>;\n /** Total cost in USD. */\n total_cost_usd?: Maybe<number>;\n}\n\n/**\n * Configuration options for initializing a Tracer.\n *\n * Credentials are resolved in order: explicit arguments first, then\n * environment variables.\n */\nexport interface TracerConfig {\n /** Your Judgment project name. Required for span export. */\n projectName?: string;\n /** Judgment API key. Defaults to `JUDGMENT_API_KEY` env var. */\n apiKey?: string;\n /** Judgment organization ID. Defaults to `JUDGMENT_ORG_ID` env var. */\n organizationId?: string;\n /** Judgment API URL. Defaults to `JUDGMENT_API_URL` env var. */\n apiUrl?: string;\n /** Deployment environment name (e.g. \"production\"). */\n environment?: string;\n /** Whether to automatically set this tracer as active. Defaults to `true`. */\n setActive?: boolean;\n /** Custom serialization function for span attribute values. */\n serializer?: (value: unknown) => string;\n /** Additional OpenTelemetry resource attributes. */\n resourceAttributes?: Record<string, string>;\n /** Custom OpenTelemetry sampler. Defaults to the SDK's default. */\n sampler?: Sampler;\n /** Custom OpenTelemetry span limits (attribute/event/link caps). */\n spanLimits?: SpanLimits;\n /** Additional span processors to register alongside Judgment's own processor. */\n spanProcessors?: SpanProcessor[];\n}\n\n/**\n * Abstract base for all Judgment tracers.\n *\n * Provides the core tracing surface: span creation, attribute recording,\n * the `observe` decorator, context propagation for customer/session IDs,\n * tagging, and async evaluation dispatch.\n * Concrete subclasses supply the OTel TracerProvider, exporter, and\n * processor wiring.\n */\nexport abstract class BaseTracer {\n projectName: string | null;\n projectId: string | null;\n apiKey: string | null;\n organizationId: string | null;\n apiUrl: string | null;\n environment: string | null;\n serializer: Serializer;\n _tracerProvider: BasicTracerProvider;\n _client: JudgmentApiClient | null;\n _enableMonitoring: boolean;\n\n // ------------------------------------------------------------------ //\n // Initialization //\n // ------------------------------------------------------------------ //\n\n protected constructor(\n projectName: string | null,\n projectId: string | null,\n apiKey: string | null,\n organizationId: string | null,\n apiUrl: string | null,\n environment: string | null,\n serializer: Serializer,\n tracerProvider: BasicTracerProvider,\n client: JudgmentApiClient | null,\n enableMonitoring: boolean,\n ) {\n this.projectName = projectName;\n this.projectId = projectId;\n this.apiKey = apiKey;\n this.organizationId = organizationId;\n this.apiUrl = apiUrl;\n this.environment = environment;\n this.serializer = serializer;\n this._tracerProvider = tracerProvider;\n this._client = client;\n this._enableMonitoring = enableMonitoring;\n }\n\n /**\n * Set this tracer as the active tracer in the global provider.\n *\n * @returns `true` if activation succeeded, `false` if a root span is active.\n */\n setActive(): boolean {\n return JudgmentTracerProvider.getInstance().setActive(this);\n }\n\n // ------------------------------------------------------------------ //\n // Abstract Lifecycle //\n // ------------------------------------------------------------------ //\n\n abstract getSpanProcessor(): JudgmentSpanProcessor;\n abstract getSpanExporter(): JudgmentSpanExporter;\n\n // ------------------------------------------------------------------ //\n // Internal Helpers //\n // ------------------------------------------------------------------ //\n\n private static _getProxyProvider(): JudgmentTracerProvider {\n return JudgmentTracerProvider.getInstance();\n }\n\n private static _getSerializer(): Serializer {\n const tracer = BaseTracer._getProxyProvider().getActiveTracer();\n return tracer?.serializer ?? safeStringify;\n }\n\n private static _getCurrentTraceAndSpanId(): [string, string] | null {\n const proxy = BaseTracer._getProxyProvider();\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return null;\n const ctx = currentSpan.spanContext();\n if (!ctx.traceId || !(ctx.traceFlags & 0x01)) return null;\n return [ctx.traceId, ctx.spanId];\n }\n\n private static _emitPartial(): void {\n dontThrow(\"BaseTracer._emitPartial\", () => {\n const tracer = BaseTracer._getProxyProvider().getActiveTracer();\n if (!tracer) return;\n tracer.getSpanProcessor().emitPartial();\n });\n }\n\n // ------------------------------------------------------------------ //\n // Static API: Span Access & Lifecycle //\n // ------------------------------------------------------------------ //\n\n /**\n * Get the currently active span.\n *\n * @returns The active span, or `undefined` if none.\n */\n static getCurrentSpan(): Span | undefined {\n const proxy = BaseTracer._getProxyProvider();\n return proxy.getCurrentSpan();\n }\n\n /**\n * Flush all pending spans to the export endpoint.\n *\n * Call this before your process exits to ensure all spans are sent.\n *\n * @example\n * ```typescript\n * await Tracer.forceFlush();\n * ```\n */\n static async forceFlush(): Promise<void> {\n const proxy = BaseTracer._getProxyProvider();\n await proxy.forceFlush();\n }\n\n /**\n * Shut down the tracer and flush any pending data.\n *\n * @example\n * ```typescript\n * await Tracer.shutdown();\n * ```\n */\n static async shutdown(): Promise<void> {\n const proxy = BaseTracer._getProxyProvider();\n await proxy.shutdown();\n }\n\n /**\n * Register an OpenTelemetry instrumentation to capture spans automatically.\n *\n * @param instrumentor - The OpenTelemetry instrumentation to register.\n *\n * @example\n * ```typescript\n * import { OpenAIInstrumentation } from \"@opentelemetry/instrumentation-openai\";\n * Tracer.registerOTELInstrumentation(new OpenAIInstrumentation());\n * ```\n */\n static registerOTELInstrumentation(instrumentor: Instrumentation): void {\n dontThrow(\"BaseTracer.registerOTELInstrumentation\", () => {\n const proxy = BaseTracer._getProxyProvider();\n proxy.addInstrumentation(instrumentor);\n });\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Creation (OTEL-like signatures) //\n // ------------------------------------------------------------------ //\n\n /**\n * Get the underlying OpenTelemetry Tracer instance.\n *\n * @returns The OpenTelemetry `Tracer`.\n */\n static getOTELTracer(): Tracer {\n const proxy = BaseTracer._getProxyProvider();\n return proxy.getTracer(TRACER_NAME);\n }\n\n /**\n * Start a new span without setting it as active.\n *\n * @param name - The span name.\n * @param attributes - Optional span attributes.\n * @returns The created span.\n */\n static startSpan(name: string, attributes?: Attributes): Span {\n const span = BaseTracer.getOTELTracer().startSpan(name, { attributes });\n BaseTracer._emitPartial();\n return span;\n }\n\n /**\n * Start a new active span and run a function within it.\n *\n * The span is automatically ended when the function completes.\n *\n * @param name - The span name.\n * @param fn - Function to execute within the span context.\n * @param attributes - Optional span attributes.\n * @returns The return value of `fn`.\n */\n static startActiveSpan<T>(\n name: string,\n fn: (span: Span) => T,\n attributes?: Attributes,\n ): T {\n return BaseTracer.getOTELTracer().startActiveSpan(\n name,\n { attributes },\n (span) => {\n BaseTracer._emitPartial();\n const result = fn(span);\n if (result instanceof Promise) {\n return (result as Promise<unknown>).finally(() => {\n span.end();\n }) as T;\n }\n span.end();\n return result;\n },\n );\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Helpers //\n // ------------------------------------------------------------------ //\n\n /**\n * Create a named span, execute a function, and handle errors.\n *\n * Errors are recorded on the span and re-thrown.\n *\n * @param spanName - The span name.\n * @param fn - Function to execute within the span.\n * @returns The return value of `fn`.\n */\n static span<T>(spanName: string, fn: (span: Span) => T): T {\n return BaseTracer.startActiveSpan(spanName, (span) => {\n try {\n const result = fn(span);\n if (result instanceof Promise) {\n return result.catch((e: unknown) => {\n span.setStatus({ code: SpanStatusCode.ERROR, message: String(e) });\n span.recordException(e as Error);\n throw e;\n }) as T;\n }\n return result;\n } catch (e) {\n span.setStatus({ code: SpanStatusCode.ERROR, message: String(e) });\n span.recordException(e as Error);\n throw e;\n }\n });\n }\n\n /**\n * Alias for {@link span}. Create a named span and execute a function within it.\n *\n * @param spanName - The span name.\n * @param fn - Function to execute within the span.\n * @returns The return value of `fn`.\n */\n static with<T>(spanName: string, fn: (span: Span) => T): T {\n return BaseTracer.span(spanName, fn);\n }\n\n /**\n * Continue a distributed trace from an upstream service.\n *\n * Extracts W3C trace context and baggage from `carrier` and installs\n * it as the active context for the duration of `fn`. Any span started\n * inside — including `@Tracer.observe`-wrapped functions and\n * `Tracer.with` blocks — becomes a child of the upstream parent,\n * stitching your service into the caller's trace.\n *\n * Use this at the entry point of an inbound request (HTTP handler,\n * message queue consumer, RPC dispatcher, etc.) to join a trace\n * started by the upstream caller. If the carrier contains no trace\n * context, `fn` still runs normally with a fresh context.\n *\n * @param carrier - A mapping containing propagation headers. Typically\n * `req.headers` from Node's `http`/Express/Fastify, but any dict-shaped\n * object with lowercase keys works (queue attributes, Lambda event\n * headers, RPC metadata, etc.).\n * @param fn - Function to run inside the extracted context. Receives\n * the extracted {@link Context} as its argument; most callers ignore\n * it. Sync or async.\n * @returns The return value of `fn`.\n *\n * @example\n * ```typescript\n * import { Tracer } from \"judgeval\";\n *\n * const handle = Tracer.observe(async (payload: unknown) => {\n * // ... your agent logic ...\n * });\n *\n * // Express / Node http handler:\n * app.post(\"/run\", async (req, res) => {\n * await Tracer.continueTrace(req.headers, async () => {\n * const result = await handle(req.body);\n * res.json(result);\n * });\n * });\n * ```\n *\n * Propagating in the opposite direction (outbound):\n *\n * @example\n * ```typescript\n * import { propagation } from \"judgeval\";\n *\n * const headers: Record<string, string> = {};\n * propagation.inject(headers);\n * await fetch(downstreamUrl, { headers, method: \"POST\", body });\n * ```\n */\n static continueTrace<T>(\n carrier: object,\n fn: (ctx: Context) => T,\n ): T {\n const proxy = BaseTracer._getProxyProvider();\n const ctx = extract(carrier);\n return proxy.withContext(ctx, () => fn(ctx));\n }\n\n // ------------------------------------------------------------------ //\n // Static API: Observation Decorator //\n // ------------------------------------------------------------------ //\n\n static observe<TArgs extends unknown[], TReturn>(\n func: (...args: TArgs) => TReturn,\n spanType?: string,\n spanName?: string,\n recordInput?: boolean,\n recordOutput?: boolean,\n disableGeneratorYieldSpan?: boolean,\n ): (...args: TArgs) => TReturn;\n static observe<TArgs extends unknown[], TReturn>(\n func?: undefined,\n spanType?: string,\n spanName?: string,\n recordInput?: boolean,\n recordOutput?: boolean,\n disableGeneratorYieldSpan?: boolean,\n ): (func: (...args: TArgs) => TReturn) => (...args: TArgs) => TReturn;\n /**\n * Wrap a function to automatically create spans and record inputs/outputs.\n *\n * Can be called with a function to wrap it directly, or without a function\n * to get a decorator.\n *\n * @param func - The function to wrap. Omit to get a decorator.\n * @param spanType - The span kind (e.g. \"llm\", \"tool\", \"span\"). Defaults to \"span\".\n * @param spanName - Custom span name. Defaults to the function name.\n * @param recordInput - Whether to record function inputs. Defaults to `true`.\n * @param recordOutput - Whether to record function outputs. Defaults to `true`.\n * @param disableGeneratorYieldSpan - Reserved for future use.\n * @returns The wrapped function, or a decorator if `func` is omitted.\n *\n * @example\n * ```typescript\n * // Wrap a function\n * const traced = Tracer.observe(async (query: string) => {\n * return await search(query);\n * }, \"tool\");\n *\n * // Use as decorator factory\n * const decorator = Tracer.observe(undefined, \"llm\");\n * const tracedFn = decorator(myFunction);\n * ```\n */\n static observe<TArgs extends unknown[], TReturn>(\n func?: (...args: TArgs) => TReturn,\n spanType = \"span\",\n spanName?: string,\n recordInput = true,\n recordOutput = true,\n disableGeneratorYieldSpan = false,\n ):\n | ((...args: TArgs) => TReturn)\n | ((func: (...args: TArgs) => TReturn) => (...args: TArgs) => TReturn) {\n void disableGeneratorYieldSpan;\n const proxy = BaseTracer._getProxyProvider();\n const decorator = (\n innerFunc: (...args: TArgs) => TReturn,\n ): ((...args: TArgs) => TReturn) => {\n const name = spanName ?? innerFunc.name;\n return (...args: TArgs): TReturn => {\n const otelTracer = proxy.getTracer(TRACER_NAME);\n return otelTracer.startActiveSpan(name, (span) => {\n if (spanType) {\n span.setAttribute(AttributeKeys.JUDGMENT_SPAN_KIND, spanType);\n }\n try {\n if (recordInput) {\n span.setAttribute(\n AttributeKeys.JUDGMENT_INPUT,\n serializeAttribute(\n getInputs(innerFunc, args),\n BaseTracer._getSerializer(),\n ),\n );\n }\n BaseTracer._emitPartial();\n const result = innerFunc(...args);\n\n if (result instanceof Promise) {\n return (result as Promise<unknown>)\n .then((res) => {\n if (recordOutput) {\n span.setAttribute(\n AttributeKeys.JUDGMENT_OUTPUT,\n serializeAttribute(res, BaseTracer._getSerializer()),\n );\n }\n return res as TReturn;\n })\n .catch((e: unknown) => {\n span.recordException(e as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: String(e),\n });\n throw e;\n })\n .finally(() => {\n span.end();\n }) as TReturn;\n }\n\n if (recordOutput) {\n span.setAttribute(\n AttributeKeys.JUDGMENT_OUTPUT,\n serializeAttribute(result, BaseTracer._getSerializer()),\n );\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 if (!func) return decorator;\n return decorator(func);\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Kind //\n // ------------------------------------------------------------------ //\n\n /**\n * Set the kind of the current active span.\n *\n * @param kind - The span kind (e.g. \"llm\", \"tool\", \"span\").\n */\n static setSpanKind(kind: string): void {\n dontThrow(\"BaseTracer.setSpanKind\", () => {\n if (!kind) return;\n const currentSpan = BaseTracer._getProxyProvider().getCurrentSpan();\n if (currentSpan?.isRecording()) {\n currentSpan.setAttribute(AttributeKeys.JUDGMENT_SPAN_KIND, kind);\n }\n });\n }\n\n /**\n * Set the current span kind to \"llm\".\n */\n static setLLMSpan(): void {\n BaseTracer.setSpanKind(\"llm\");\n }\n\n /**\n * Set the current span kind to \"tool\".\n */\n static setToolSpan(): void {\n BaseTracer.setSpanKind(\"tool\");\n }\n\n /**\n * Set the current span kind to \"span\".\n */\n static setGeneralSpan(): void {\n BaseTracer.setSpanKind(\"span\");\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Attribute Operations //\n // ------------------------------------------------------------------ //\n\n /**\n * Set a single attribute on the current active span.\n *\n * @param key - The attribute key.\n * @param value - The attribute value (will be serialized).\n */\n static setAttribute(key: string, value: unknown): void {\n dontThrow(\"BaseTracer.setAttribute\", () => {\n const currentSpan = BaseTracer._getProxyProvider().getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n if (!key || value == null) return;\n currentSpan.setAttribute(\n key,\n serializeAttribute(value, BaseTracer._getSerializer()),\n );\n });\n }\n\n /**\n * Set multiple attributes on the current active span.\n *\n * @param attributes - Key-value pairs to set.\n */\n static setAttributes(attributes: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(attributes)) {\n BaseTracer.setAttribute(key, value);\n }\n }\n\n /**\n * Set the input data on the current span.\n *\n * @param inputData - The input data to record.\n */\n static setInput(inputData: unknown): void {\n BaseTracer.setAttribute(AttributeKeys.JUDGMENT_INPUT, inputData);\n }\n\n /**\n * Set the output data on the current span.\n *\n * @param outputData - The output data to record.\n */\n static setOutput(outputData: unknown): void {\n BaseTracer.setAttribute(AttributeKeys.JUDGMENT_OUTPUT, outputData);\n }\n\n /**\n * Record LLM usage metadata on the current span.\n *\n * @param metadata - LLM metadata including model, provider, and token counts.\n *\n * @example\n * ```typescript\n * Tracer.recordLLMMetadata({\n * model: \"gpt-4o\",\n * provider: \"openai\",\n * output_tokens: 150,\n * });\n * ```\n */\n static recordLLMMetadata(metadata: LLMMetadata): void {\n dontThrow(\"BaseTracer.recordLLMMetadata\", () => {\n const currentSpan = BaseTracer._getProxyProvider().getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n\n if (typeof metadata.model === \"string\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_LLM_MODEL_NAME,\n metadata.model,\n );\n }\n\n if (typeof metadata.provider === \"string\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_LLM_PROVIDER,\n metadata.provider,\n );\n }\n\n if (typeof metadata.non_cached_input_tokens === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_NON_CACHED_INPUT_TOKENS,\n metadata.non_cached_input_tokens,\n );\n }\n if (typeof metadata.output_tokens === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_OUTPUT_TOKENS,\n metadata.output_tokens,\n );\n }\n if (typeof metadata.cache_read_input_tokens === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_CACHE_READ_INPUT_TOKENS,\n metadata.cache_read_input_tokens,\n );\n }\n if (typeof metadata.cache_creation_input_tokens === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_CACHE_CREATION_INPUT_TOKENS,\n metadata.cache_creation_input_tokens,\n );\n }\n if (typeof metadata.total_cost_usd === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_TOTAL_COST_USD,\n metadata.total_cost_usd,\n );\n }\n });\n }\n\n // ------------------------------------------------------------------ //\n // Static: Context Propagation //\n // ------------------------------------------------------------------ //\n\n /**\n * Set a key on the current span and on baggage so it propagates to all\n * child spans. Also reattaches the current context to the updated one.\n */\n private static _setPropagatingBaggageKey(key: string, value: string): void {\n dontThrow(\"BaseTracer._setPropagatingBaggageKey\", () => {\n const proxy = BaseTracer._getProxyProvider();\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n currentSpan.setAttribute(key, value);\n const ctx = proxy.getCurrentContext();\n const baggage = (getBaggage(ctx) ?? createBaggage()).setEntry(key, {\n value,\n });\n proxy.attachContext(setBaggage(ctx, baggage));\n });\n }\n\n /**\n * Set the customer ID on the current span.\n *\n * The ID is automatically propagated to all child spans via baggage.\n *\n * @param customerId - The customer identifier.\n */\n static setCustomerId(customerId: string): void {\n BaseTracer._setPropagatingBaggageKey(\n AttributeKeys.JUDGMENT_CUSTOMER_ID,\n customerId,\n );\n }\n\n /**\n * Set the customer user ID on the current span.\n *\n * The ID is automatically propagated to all child spans via baggage.\n *\n * @param customerUserId - The customer user identifier.\n */\n static setCustomerUserId(customerUserId: string): void {\n BaseTracer._setPropagatingBaggageKey(\n AttributeKeys.JUDGMENT_CUSTOMER_USER_ID,\n customerUserId,\n );\n }\n\n /**\n * Set the session ID on the current span.\n *\n * The ID is automatically propagated to all child spans via baggage.\n *\n * @param sessionId - The session identifier.\n */\n static setSessionId(sessionId: string): void {\n BaseTracer._setPropagatingBaggageKey(\n AttributeKeys.JUDGMENT_SESSION_ID,\n sessionId,\n );\n }\n\n // ------------------------------------------------------------------ //\n // Static: Tags //\n // ------------------------------------------------------------------ //\n\n /**\n * Add tags to the current trace.\n *\n * @param tags - A single tag string or an array of tag strings.\n *\n * @example\n * ```typescript\n * Tracer.tag(\"production\");\n * Tracer.tag([\"important\", \"customer-facing\"]);\n * ```\n */\n static tag(tags: string | string[]): void {\n dontThrow(\"BaseTracer.tag\", () => {\n if (!tags || (Array.isArray(tags) && tags.length === 0)) return;\n const proxy = BaseTracer._getProxyProvider();\n const tracer = proxy.getActiveTracer();\n if (!tracer?.projectId || !tracer._client) return;\n const ids = BaseTracer._getCurrentTraceAndSpanId();\n if (!ids) return;\n const [traceId] = ids;\n const tagArray = Array.isArray(tags) ? tags : [tags];\n tracer._client\n .postV1projectsTracesByTraceIdTags(tracer.projectId, traceId, {\n tags: tagArray,\n })\n .catch((err: unknown) => {\n Logger.error(`tag failed: ${String(err)}`);\n });\n });\n }\n\n // ------------------------------------------------------------------ //\n // Static API: Async Evaluation //\n // ------------------------------------------------------------------ //\n\n /**\n * Trigger an asynchronous server-side evaluation on the current span.\n *\n * The evaluation is queued and processed server-side by the Judgment\n * platform after the span ends. Use this to score live traffic\n * without blocking your application.\n *\n * @param judge - Name of the hosted judge/scorer (e.g. `\"faithfulness\"`,\n * `\"answer_relevancy\"`).\n * @param example - Optional dict with evaluation data. Keys like\n * `input`, `actual_output`, `expected_output`, and `retrieval_context`\n * are commonly used.\n *\n * @example\n * ```typescript\n * Tracer.asyncEvaluate(\"answer_relevancy\", {\n * input: \"What is AI?\",\n * actual_output: response,\n * });\n * ```\n */\n static asyncEvaluate(judge: string, example?: Record<string, unknown>): void {\n dontThrow(\"BaseTracer.asyncEvaluate\", () => {\n const proxy = BaseTracer._getProxyProvider();\n const tracer = proxy.getActiveTracer();\n if (!tracer?.projectId) return;\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n\n const processor = tracer.getSpanProcessor();\n const ctx = currentSpan.spanContext();\n\n const idx = processor.stateIncr(\n ctx,\n InternalAttributeKeys.PENDING_EVALS_COUNT,\n );\n const payload: PendingEvalPayload = {\n project_id: tracer.projectId,\n eval_name: `async_evaluate_${judge}_${idx}`,\n judges: [{ name: judge }],\n examples: [\n {\n ...example,\n example_id: randomUUID(),\n created_at: new Date().toISOString(),\n trace_id: ctx.traceId,\n span_id: ctx.spanId,\n },\n ],\n is_offline: false,\n is_behavior: false,\n };\n const updated = processor.stateAppend<PendingEvalPayload>(\n ctx,\n InternalAttributeKeys.PENDING_EVALS,\n payload,\n );\n\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_PENDING_TRACE_EVAL,\n JSON.stringify(updated),\n );\n });\n }\n}\n\nfunction getInputs<TArgs extends unknown[]>(\n f: (...args: TArgs) => unknown,\n args: TArgs,\n): Record<string, unknown> {\n try {\n const paramNames = parseFunctionArgs(f)\n .map((param) =>\n param\n .replace(/^\\.\\.\\./, \"\")\n .split(\"=\")[0]\n .trim(),\n )\n .filter((param) => param.length > 0);\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",
8
+ "import {\n type Attributes,\n type Context,\n type Span,\n SpanStatusCode,\n type Tracer,\n} from \"@opentelemetry/api\";\nimport type { Instrumentation } from \"@opentelemetry/instrumentation\";\nimport type {\n BasicTracerProvider,\n Sampler,\n SpanLimits,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { randomUUID } from \"crypto\";\nimport { AttributeKeys, InternalAttributeKeys } from \"../JudgmentAttributeKeys\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport type { PendingEvalPayload } from \"../internal/api/models/PendingEvalPayload\";\nimport { parseFunctionArgs } from \"../utils/annotate\";\nimport { dontThrow } from \"../utils/dont-throw\";\nimport { Logger } from \"../utils/logger\";\nimport {\n safeStringify,\n serializeAttribute,\n Serializer,\n} from \"../utils/serializer\";\nimport { Maybe } from \"../utils/type-helpers\";\nimport { createBaggage, getBaggage, setBaggage } from \"./baggage\";\nimport { JudgmentTracerProvider } from \"./JudgmentTracerProvider\";\nimport { extract } from \"./propagation\";\nimport type { JudgmentSpanExporter } from \"./exporters/JudgmentSpanExporter\";\nimport type { JudgmentSpanProcessor } from \"./processors/JudgmentSpanProcessor\";\n\nconst TRACER_NAME = \"judgeval\";\n\n/**\n * Metadata about an LLM call to record on the current span.\n */\nexport interface LLMMetadata {\n /** Model name (e.g. \"gpt-4o\"). */\n model?: Maybe<string>;\n /** Provider name (e.g. \"openai\"). */\n provider?: Maybe<string>;\n /** Number of non-cached input tokens. */\n non_cached_input_tokens?: Maybe<number>;\n /** Number of output tokens. */\n output_tokens?: Maybe<number>;\n /** Number of cache-read input tokens. */\n cache_read_input_tokens?: Maybe<number>;\n /** Number of cache-creation input tokens. */\n cache_creation_input_tokens?: Maybe<number>;\n /** Total cost in USD. */\n total_cost_usd?: Maybe<number>;\n}\n\n/**\n * Configuration options for initializing a Tracer.\n *\n * Credentials are resolved in order: explicit arguments first, then\n * environment variables.\n */\nexport interface TracerConfig {\n /** Your Judgment project name. Required for span export. */\n projectName?: string;\n /** Judgment API key. Defaults to `JUDGMENT_API_KEY` env var. */\n apiKey?: string;\n /** Judgment organization ID. Defaults to `JUDGMENT_ORG_ID` env var. */\n organizationId?: string;\n /** Judgment API URL. Defaults to `JUDGMENT_API_URL` env var. */\n apiUrl?: string;\n /** Deployment environment name (e.g. \"production\"). */\n environment?: string;\n /** Whether to automatically set this tracer as active. Defaults to `true`. */\n setActive?: boolean;\n /** Custom serialization function for span attribute values. */\n serializer?: (value: unknown) => string;\n /** Additional OpenTelemetry resource attributes. */\n resourceAttributes?: Record<string, string>;\n /** Custom OpenTelemetry sampler. Defaults to the SDK's default. */\n sampler?: Sampler;\n /** Custom OpenTelemetry span limits (attribute/event/link caps). */\n spanLimits?: SpanLimits;\n /** Additional span processors to register alongside Judgment's own processor. */\n spanProcessors?: SpanProcessor[];\n}\n\n/**\n * Abstract base for all Judgment tracers.\n *\n * Provides the core tracing surface: span creation, attribute recording,\n * the `observe` decorator, context propagation for customer/session IDs,\n * tagging, and async evaluation dispatch.\n * Concrete subclasses supply the OTel TracerProvider, exporter, and\n * processor wiring.\n */\nexport abstract class BaseTracer {\n projectName: string | null;\n projectId: string | null;\n apiKey: string | null;\n organizationId: string | null;\n apiUrl: string | null;\n environment: string | null;\n serializer: Serializer;\n _tracerProvider: BasicTracerProvider;\n _client: JudgmentApiClient | null;\n _enableMonitoring: boolean;\n\n // ------------------------------------------------------------------ //\n // Initialization //\n // ------------------------------------------------------------------ //\n\n protected constructor(\n projectName: string | null,\n projectId: string | null,\n apiKey: string | null,\n organizationId: string | null,\n apiUrl: string | null,\n environment: string | null,\n serializer: Serializer,\n tracerProvider: BasicTracerProvider,\n client: JudgmentApiClient | null,\n enableMonitoring: boolean,\n ) {\n this.projectName = projectName;\n this.projectId = projectId;\n this.apiKey = apiKey;\n this.organizationId = organizationId;\n this.apiUrl = apiUrl;\n this.environment = environment;\n this.serializer = serializer;\n this._tracerProvider = tracerProvider;\n this._client = client;\n this._enableMonitoring = enableMonitoring;\n }\n\n /**\n * Set this tracer as the active tracer in the global provider.\n *\n * @returns `true` if activation succeeded, `false` if a root span is active.\n */\n setActive(): boolean {\n return JudgmentTracerProvider.getInstance().setActive(this);\n }\n\n // ------------------------------------------------------------------ //\n // Abstract Lifecycle //\n // ------------------------------------------------------------------ //\n\n abstract getSpanProcessor(): JudgmentSpanProcessor;\n abstract getSpanExporter(): JudgmentSpanExporter;\n\n // ------------------------------------------------------------------ //\n // Internal Helpers //\n // ------------------------------------------------------------------ //\n\n private static _getProxyProvider(): JudgmentTracerProvider {\n return JudgmentTracerProvider.getInstance();\n }\n\n private static _getSerializer(): Serializer {\n const tracer = BaseTracer._getProxyProvider().getActiveTracer();\n return tracer?.serializer ?? safeStringify;\n }\n\n private static _getCurrentTraceAndSpanId(): [string, string] | null {\n const proxy = BaseTracer._getProxyProvider();\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return null;\n const ctx = currentSpan.spanContext();\n if (!ctx.traceId || !(ctx.traceFlags & 0x01)) return null;\n return [ctx.traceId, ctx.spanId];\n }\n\n private static _emitPartial(): void {\n dontThrow(\"BaseTracer._emitPartial\", () => {\n const tracer = BaseTracer._getProxyProvider().getActiveTracer();\n if (!tracer) return;\n tracer.getSpanProcessor().emitPartial();\n });\n }\n\n // ------------------------------------------------------------------ //\n // Static API: Span Access & Lifecycle //\n // ------------------------------------------------------------------ //\n\n /**\n * Get the currently active span.\n *\n * @returns The active span, or `undefined` if none.\n */\n static getCurrentSpan(): Span | undefined {\n const proxy = BaseTracer._getProxyProvider();\n return proxy.getCurrentSpan();\n }\n\n /**\n * Flush all pending spans to the export endpoint.\n *\n * Call this before your process exits to ensure all spans are sent.\n *\n * @example\n * ```typescript\n * await Tracer.forceFlush();\n * ```\n */\n static async forceFlush(): Promise<void> {\n const proxy = BaseTracer._getProxyProvider();\n await proxy.forceFlush();\n }\n\n /**\n * Shut down the tracer and flush any pending data.\n *\n * @example\n * ```typescript\n * await Tracer.shutdown();\n * ```\n */\n static async shutdown(): Promise<void> {\n const proxy = BaseTracer._getProxyProvider();\n await proxy.shutdown();\n }\n\n /**\n * Register an OpenTelemetry instrumentation to capture spans automatically.\n *\n * @param instrumentor - The OpenTelemetry instrumentation to register.\n *\n * @example\n * ```typescript\n * import { OpenAIInstrumentation } from \"@opentelemetry/instrumentation-openai\";\n * Tracer.registerOTELInstrumentation(new OpenAIInstrumentation());\n * ```\n */\n static registerOTELInstrumentation(instrumentor: Instrumentation): void {\n dontThrow(\"BaseTracer.registerOTELInstrumentation\", () => {\n const proxy = BaseTracer._getProxyProvider();\n proxy.addInstrumentation(instrumentor);\n });\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Creation (OTEL-like signatures) //\n // ------------------------------------------------------------------ //\n\n /**\n * Get the underlying OpenTelemetry Tracer instance.\n *\n * @returns The OpenTelemetry `Tracer`.\n */\n static getOTELTracer(): Tracer {\n const proxy = BaseTracer._getProxyProvider();\n return proxy.getTracer(TRACER_NAME);\n }\n\n /**\n * Start a new span without setting it as active.\n *\n * @param name - The span name.\n * @param attributes - Optional span attributes.\n * @returns The created span.\n */\n static startSpan(name: string, attributes?: Attributes): Span {\n const span = BaseTracer.getOTELTracer().startSpan(name, { attributes });\n BaseTracer._emitPartial();\n return span;\n }\n\n /**\n * Start a new active span and run a function within it.\n *\n * The span is automatically ended when the function completes.\n *\n * @param name - The span name.\n * @param fn - Function to execute within the span context.\n * @param attributes - Optional span attributes.\n * @returns The return value of `fn`.\n */\n static startActiveSpan<T>(\n name: string,\n fn: (span: Span) => T,\n attributes?: Attributes,\n ): T {\n return BaseTracer.getOTELTracer().startActiveSpan(\n name,\n { attributes },\n (span) => {\n BaseTracer._emitPartial();\n try {\n const result = fn(span);\n if (result instanceof Promise) {\n return (result as Promise<unknown>).finally(() => {\n span.end();\n }) as T;\n }\n span.end();\n return result;\n } catch (e) {\n span.end();\n throw e;\n }\n },\n );\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Helpers //\n // ------------------------------------------------------------------ //\n\n /**\n * Create a named span, execute a function, and handle errors.\n *\n * Errors are recorded on the span and re-thrown.\n *\n * @param spanName - The span name.\n * @param fn - Function to execute within the span.\n * @returns The return value of `fn`.\n */\n static span<T>(spanName: string, fn: (span: Span) => T): T {\n return BaseTracer.startActiveSpan(spanName, (span) => {\n try {\n const result = fn(span);\n if (result instanceof Promise) {\n return result.catch((e: unknown) => {\n span.setStatus({ code: SpanStatusCode.ERROR, message: String(e) });\n span.recordException(e as Error);\n throw e;\n }) as T;\n }\n return result;\n } catch (e) {\n span.setStatus({ code: SpanStatusCode.ERROR, message: String(e) });\n span.recordException(e as Error);\n throw e;\n }\n });\n }\n\n /**\n * Alias for {@link span}. Create a named span and execute a function within it.\n *\n * @param spanName - The span name.\n * @param fn - Function to execute within the span.\n * @returns The return value of `fn`.\n */\n static with<T>(spanName: string, fn: (span: Span) => T): T {\n return BaseTracer.span(spanName, fn);\n }\n\n /**\n * Continue a distributed trace from an upstream service.\n *\n * Extracts W3C trace context and baggage from `carrier` and installs\n * it as the active context for the duration of `fn`. Any span started\n * inside — including `@Tracer.observe`-wrapped functions and\n * `Tracer.with` blocks — becomes a child of the upstream parent,\n * stitching your service into the caller's trace.\n *\n * Use this at the entry point of an inbound request (HTTP handler,\n * message queue consumer, RPC dispatcher, etc.) to join a trace\n * started by the upstream caller. If the carrier contains no trace\n * context, `fn` still runs normally with a fresh context.\n *\n * @param carrier - A mapping containing propagation headers. Typically\n * `req.headers` from Node's `http`/Express/Fastify, but any dict-shaped\n * object with lowercase keys works (queue attributes, Lambda event\n * headers, RPC metadata, etc.).\n * @param fn - Function to run inside the extracted context. Receives\n * the extracted {@link Context} as its argument; most callers ignore\n * it. Sync or async.\n * @returns The return value of `fn`.\n *\n * @example\n * ```typescript\n * import { Tracer } from \"judgeval\";\n *\n * const handle = Tracer.observe(async (payload: unknown) => {\n * // ... your agent logic ...\n * });\n *\n * // Express / Node http handler:\n * app.post(\"/run\", async (req, res) => {\n * await Tracer.continueTrace(req.headers, async () => {\n * const result = await handle(req.body);\n * res.json(result);\n * });\n * });\n * ```\n *\n * Propagating in the opposite direction (outbound):\n *\n * @example\n * ```typescript\n * import { propagation } from \"judgeval\";\n *\n * const headers: Record<string, string> = {};\n * propagation.inject(headers);\n * await fetch(downstreamUrl, { headers, method: \"POST\", body });\n * ```\n */\n static continueTrace<T>(\n carrier: object,\n fn: (ctx: Context) => T,\n ): T {\n const proxy = BaseTracer._getProxyProvider();\n const ctx = extract(carrier);\n return proxy.withContext(ctx, () => fn(ctx));\n }\n\n // ------------------------------------------------------------------ //\n // Static API: Observation Decorator //\n // ------------------------------------------------------------------ //\n\n static observe<TArgs extends unknown[], TReturn>(\n func: (...args: TArgs) => TReturn,\n spanType?: string,\n spanName?: string,\n recordInput?: boolean,\n recordOutput?: boolean,\n disableGeneratorYieldSpan?: boolean,\n ): (...args: TArgs) => TReturn;\n static observe<TArgs extends unknown[], TReturn>(\n func?: undefined,\n spanType?: string,\n spanName?: string,\n recordInput?: boolean,\n recordOutput?: boolean,\n disableGeneratorYieldSpan?: boolean,\n ): (func: (...args: TArgs) => TReturn) => (...args: TArgs) => TReturn;\n /**\n * Wrap a function to automatically create spans and record inputs/outputs.\n *\n * Can be called with a function to wrap it directly, or without a function\n * to get a decorator.\n *\n * @param func - The function to wrap. Omit to get a decorator.\n * @param spanType - The span kind (e.g. \"llm\", \"tool\", \"span\"). Defaults to \"span\".\n * @param spanName - Custom span name. Defaults to the function name.\n * @param recordInput - Whether to record function inputs. Defaults to `true`.\n * @param recordOutput - Whether to record function outputs. Defaults to `true`.\n * @param disableGeneratorYieldSpan - Reserved for future use.\n * @returns The wrapped function, or a decorator if `func` is omitted.\n *\n * @example\n * ```typescript\n * // Wrap a function\n * const traced = Tracer.observe(async (query: string) => {\n * return await search(query);\n * }, \"tool\");\n *\n * // Use as decorator factory\n * const decorator = Tracer.observe(undefined, \"llm\");\n * const tracedFn = decorator(myFunction);\n * ```\n */\n static observe<TArgs extends unknown[], TReturn>(\n func?: (...args: TArgs) => TReturn,\n spanType = \"span\",\n spanName?: string,\n recordInput = true,\n recordOutput = true,\n disableGeneratorYieldSpan = false,\n ):\n | ((...args: TArgs) => TReturn)\n | ((func: (...args: TArgs) => TReturn) => (...args: TArgs) => TReturn) {\n void disableGeneratorYieldSpan;\n const proxy = BaseTracer._getProxyProvider();\n const decorator = (\n innerFunc: (...args: TArgs) => TReturn,\n ): ((...args: TArgs) => TReturn) => {\n const name = spanName ?? innerFunc.name;\n return (...args: TArgs): TReturn => {\n const otelTracer = proxy.getTracer(TRACER_NAME);\n return otelTracer.startActiveSpan(name, (span) => {\n if (spanType) {\n span.setAttribute(AttributeKeys.JUDGMENT_SPAN_KIND, spanType);\n }\n try {\n if (recordInput) {\n span.setAttribute(\n AttributeKeys.JUDGMENT_INPUT,\n serializeAttribute(\n getInputs(innerFunc, args),\n BaseTracer._getSerializer(),\n ),\n );\n }\n BaseTracer._emitPartial();\n const result = innerFunc(...args);\n\n if (result instanceof Promise) {\n return (result as Promise<unknown>)\n .then((res) => {\n if (recordOutput) {\n span.setAttribute(\n AttributeKeys.JUDGMENT_OUTPUT,\n serializeAttribute(res, BaseTracer._getSerializer()),\n );\n }\n return res as TReturn;\n })\n .catch((e: unknown) => {\n span.recordException(e as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: String(e),\n });\n throw e;\n })\n .finally(() => {\n span.end();\n }) as TReturn;\n }\n\n if (recordOutput) {\n span.setAttribute(\n AttributeKeys.JUDGMENT_OUTPUT,\n serializeAttribute(result, BaseTracer._getSerializer()),\n );\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 if (!func) return decorator;\n return decorator(func);\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Kind //\n // ------------------------------------------------------------------ //\n\n /**\n * Set the kind of the current active span.\n *\n * @param kind - The span kind (e.g. \"llm\", \"tool\", \"span\").\n */\n static setSpanKind(kind: string): void {\n dontThrow(\"BaseTracer.setSpanKind\", () => {\n if (!kind) return;\n const currentSpan = BaseTracer._getProxyProvider().getCurrentSpan();\n if (currentSpan?.isRecording()) {\n currentSpan.setAttribute(AttributeKeys.JUDGMENT_SPAN_KIND, kind);\n }\n });\n }\n\n /**\n * Set the current span kind to \"llm\".\n */\n static setLLMSpan(): void {\n BaseTracer.setSpanKind(\"llm\");\n }\n\n /**\n * Set the current span kind to \"tool\".\n */\n static setToolSpan(): void {\n BaseTracer.setSpanKind(\"tool\");\n }\n\n /**\n * Set the current span kind to \"span\".\n */\n static setGeneralSpan(): void {\n BaseTracer.setSpanKind(\"span\");\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Attribute Operations //\n // ------------------------------------------------------------------ //\n\n /**\n * Set a single attribute on the current active span.\n *\n * @param key - The attribute key.\n * @param value - The attribute value (will be serialized).\n */\n static setAttribute(key: string, value: unknown): void {\n dontThrow(\"BaseTracer.setAttribute\", () => {\n const currentSpan = BaseTracer._getProxyProvider().getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n if (!key || value == null) return;\n currentSpan.setAttribute(\n key,\n serializeAttribute(value, BaseTracer._getSerializer()),\n );\n });\n }\n\n /**\n * Set multiple attributes on the current active span.\n *\n * @param attributes - Key-value pairs to set.\n */\n static setAttributes(attributes: Record<string, unknown>): void {\n for (const [key, value] of Object.entries(attributes)) {\n BaseTracer.setAttribute(key, value);\n }\n }\n\n /**\n * Set the input data on the current span.\n *\n * @param inputData - The input data to record.\n */\n static setInput(inputData: unknown): void {\n BaseTracer.setAttribute(AttributeKeys.JUDGMENT_INPUT, inputData);\n }\n\n /**\n * Set the output data on the current span.\n *\n * @param outputData - The output data to record.\n */\n static setOutput(outputData: unknown): void {\n BaseTracer.setAttribute(AttributeKeys.JUDGMENT_OUTPUT, outputData);\n }\n\n /**\n * Record LLM usage metadata on the current span.\n *\n * @param metadata - LLM metadata including model, provider, and token counts.\n *\n * @example\n * ```typescript\n * Tracer.recordLLMMetadata({\n * model: \"gpt-4o\",\n * provider: \"openai\",\n * output_tokens: 150,\n * });\n * ```\n */\n static recordLLMMetadata(metadata: LLMMetadata): void {\n dontThrow(\"BaseTracer.recordLLMMetadata\", () => {\n const currentSpan = BaseTracer._getProxyProvider().getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n\n if (typeof metadata.model === \"string\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_LLM_MODEL_NAME,\n metadata.model,\n );\n }\n\n if (typeof metadata.provider === \"string\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_LLM_PROVIDER,\n metadata.provider,\n );\n }\n\n if (typeof metadata.non_cached_input_tokens === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_NON_CACHED_INPUT_TOKENS,\n metadata.non_cached_input_tokens,\n );\n }\n if (typeof metadata.output_tokens === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_OUTPUT_TOKENS,\n metadata.output_tokens,\n );\n }\n if (typeof metadata.cache_read_input_tokens === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_CACHE_READ_INPUT_TOKENS,\n metadata.cache_read_input_tokens,\n );\n }\n if (typeof metadata.cache_creation_input_tokens === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_CACHE_CREATION_INPUT_TOKENS,\n metadata.cache_creation_input_tokens,\n );\n }\n if (typeof metadata.total_cost_usd === \"number\") {\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_USAGE_TOTAL_COST_USD,\n metadata.total_cost_usd,\n );\n }\n });\n }\n\n // ------------------------------------------------------------------ //\n // Static: Context Propagation //\n // ------------------------------------------------------------------ //\n\n /**\n * Set a key on the current span and on baggage so it propagates to all\n * child spans. Also reattaches the current context to the updated one.\n */\n private static _setPropagatingBaggageKey(key: string, value: string): void {\n dontThrow(\"BaseTracer._setPropagatingBaggageKey\", () => {\n const proxy = BaseTracer._getProxyProvider();\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n currentSpan.setAttribute(key, value);\n const ctx = proxy.getCurrentContext();\n const baggage = (getBaggage(ctx) ?? createBaggage()).setEntry(key, {\n value,\n });\n proxy.attachContext(setBaggage(ctx, baggage));\n });\n }\n\n /**\n * Set the customer ID on the current span.\n *\n * The ID is automatically propagated to all child spans via baggage.\n *\n * @param customerId - The customer identifier.\n */\n static setCustomerId(customerId: string): void {\n BaseTracer._setPropagatingBaggageKey(\n AttributeKeys.JUDGMENT_CUSTOMER_ID,\n customerId,\n );\n }\n\n /**\n * Set the customer user ID on the current span.\n *\n * The ID is automatically propagated to all child spans via baggage.\n *\n * @param customerUserId - The customer user identifier.\n */\n static setCustomerUserId(customerUserId: string): void {\n BaseTracer._setPropagatingBaggageKey(\n AttributeKeys.JUDGMENT_CUSTOMER_USER_ID,\n customerUserId,\n );\n }\n\n /**\n * Set the session ID on the current span.\n *\n * The ID is automatically propagated to all child spans via baggage.\n *\n * @param sessionId - The session identifier.\n */\n static setSessionId(sessionId: string): void {\n BaseTracer._setPropagatingBaggageKey(\n AttributeKeys.JUDGMENT_SESSION_ID,\n sessionId,\n );\n }\n\n // ------------------------------------------------------------------ //\n // Static: Tags //\n // ------------------------------------------------------------------ //\n\n /**\n * Add tags to the current trace.\n *\n * @param tags - A single tag string or an array of tag strings.\n *\n * @example\n * ```typescript\n * Tracer.tag(\"production\");\n * Tracer.tag([\"important\", \"customer-facing\"]);\n * ```\n */\n static tag(tags: string | string[]): void {\n dontThrow(\"BaseTracer.tag\", () => {\n if (!tags || (Array.isArray(tags) && tags.length === 0)) return;\n const proxy = BaseTracer._getProxyProvider();\n const tracer = proxy.getActiveTracer();\n if (!tracer?.projectId || !tracer._client) return;\n const ids = BaseTracer._getCurrentTraceAndSpanId();\n if (!ids) return;\n const [traceId] = ids;\n const tagArray = Array.isArray(tags) ? tags : [tags];\n tracer._client\n .postV1projectsTracesByTraceIdTags(tracer.projectId, traceId, {\n tags: tagArray,\n })\n .catch((err: unknown) => {\n Logger.error(`tag failed: ${String(err)}`);\n });\n });\n }\n\n // ------------------------------------------------------------------ //\n // Static API: Async Evaluation //\n // ------------------------------------------------------------------ //\n\n /**\n * Trigger an asynchronous server-side evaluation on the current span.\n *\n * The evaluation is queued and processed server-side by the Judgment\n * platform after the span ends. Use this to score live traffic\n * without blocking your application.\n *\n * @param judge - Name of the hosted judge/scorer (e.g. `\"faithfulness\"`,\n * `\"answer_relevancy\"`).\n * @param example - Optional dict with evaluation data. Keys like\n * `input`, `actual_output`, `expected_output`, and `retrieval_context`\n * are commonly used.\n *\n * @example\n * ```typescript\n * Tracer.asyncEvaluate(\"answer_relevancy\", {\n * input: \"What is AI?\",\n * actual_output: response,\n * });\n * ```\n */\n static asyncEvaluate(judge: string, example?: Record<string, unknown>): void {\n dontThrow(\"BaseTracer.asyncEvaluate\", () => {\n const proxy = BaseTracer._getProxyProvider();\n const tracer = proxy.getActiveTracer();\n if (!tracer?.projectId) return;\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n\n const processor = tracer.getSpanProcessor();\n const ctx = currentSpan.spanContext();\n\n const idx = processor.stateIncr(\n ctx,\n InternalAttributeKeys.PENDING_EVALS_COUNT,\n );\n const payload: PendingEvalPayload = {\n project_id: tracer.projectId,\n eval_name: `async_evaluate_${judge}_${idx}`,\n judges: [{ name: judge }],\n examples: [\n {\n ...example,\n example_id: randomUUID(),\n created_at: new Date().toISOString(),\n trace_id: ctx.traceId,\n span_id: ctx.spanId,\n },\n ],\n is_offline: false,\n is_behavior: false,\n };\n const updated = processor.stateAppend<PendingEvalPayload>(\n ctx,\n InternalAttributeKeys.PENDING_EVALS,\n payload,\n );\n\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_PENDING_TRACE_EVAL,\n JSON.stringify(updated),\n );\n });\n }\n}\n\nfunction getInputs<TArgs extends unknown[]>(\n f: (...args: TArgs) => unknown,\n args: TArgs,\n): Record<string, unknown> {\n try {\n const paramNames = parseFunctionArgs(f)\n .map((param) =>\n param\n .replace(/^\\.\\.\\./, \"\")\n .split(\"=\")[0]\n .trim(),\n )\n .filter((param) => param.length > 0);\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",
9
9
  "/* eslint-disable */\n/// Adopted from https://github.com/angular/angular.js/blob/master/src/auto/injector.js\n\nconst ARROW_ARG = /^([^(]+?)=>/;\nconst FN_ARGS = /^[^(]*\\(\\s*([^)]*)\\)/m;\nconst FN_ARG_SPLIT = /,/;\nconst FN_ARG = /^\\s*(_?)(\\S+?)\\1\\s*$/;\nconst STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/gm;\n\nfunction stringifyFn(fn: Function): string {\n return Function.prototype.toString.call(fn);\n}\n\nfunction extractArgs(fn: Function): RegExpMatchArray | null {\n const fnText = stringifyFn(fn).replace(STRIP_COMMENTS, \"\");\n return fnText.match(ARROW_ARG) || fnText.match(FN_ARGS);\n}\n\nexport function parseFunctionArgs(fn: Function): string[] {\n const args = extractArgs(fn);\n if (!args || !args[1]) {\n return [];\n }\n\n return args[1]\n .split(FN_ARG_SPLIT)\n .map((arg) => {\n const match = arg.replace(FN_ARG, (all, underscore, name) => name);\n return match.trim();\n })\n .filter((name) => name.length > 0);\n}\n",
10
10
  "import { JUDGMENT_LOG_LEVEL } from \"../env\";\n\n/**\n * SDK logger with configurable levels and color output.\n *\n * Log level is controlled by the `JUDGMENT_LOG_LEVEL` environment variable.\n * Defaults to \"warn\". Supported levels: \"debug\", \"info\", \"warning\", \"error\", \"critical\".\n *\n * @example\n * ```typescript\n * import { Logger } from \"judgeval\";\n *\n * Logger.setLevel(\"debug\");\n * Logger.info(\"Tracer initialized\");\n * ```\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 /** Set the minimum log level. */\n public static setLevel(level: number): void {\n Logger.currentLevel = level;\n }\n\n /** Enable or disable colored output. */\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 /** Log a debug message. */\n public static debug(message: string): void {\n Logger.log(Logger.Level.DEBUG, message);\n }\n\n /** Log an informational message. */\n public static info(message: string): void {\n Logger.log(Logger.Level.INFO, message);\n }\n\n /** Log a warning message. */\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 /** Log an error message. */\n public static error(message: string): void {\n Logger.log(Logger.Level.ERROR, message);\n }\n\n /** Log a critical error message. */\n public static critical(message: string): void {\n Logger.log(Logger.Level.CRITICAL, message);\n }\n}\n",
11
11
  "import { Logger } from \"./logger\";\n\n/**\n * Run `fn` and swallow any thrown error, logging it instead.\n *\n * @param name - Name used in the error log (typically `\"ClassName.method\"`).\n * @param fn - Function to invoke.\n * @param fallback - Optional value returned when `fn` throws.\n * @returns The return value of `fn`, or `fallback` (or `undefined`) on error.\n */\nexport function dontThrow<T>(name: string, fn: () => T): T | undefined;\nexport function dontThrow<T>(name: string, fn: () => T, fallback: T): T;\nexport function dontThrow<T>(\n name: string,\n fn: () => T,\n fallback?: T,\n): T | undefined {\n try {\n return fn();\n } catch (err) {\n const stack = err instanceof Error && err.stack ? `\\n${err.stack}` : \"\";\n Logger.error(\n `[Caught] An exception was raised in ${name}: ${String(err)}${stack}`,\n );\n return fallback;\n }\n}\n",
12
12
  "import { Logger } from \"./logger\";\n\nexport type Serializer = (obj: unknown) => string;\n\nlet seen: WeakSet<object>;\n\nfunction safeReplacer(this: unknown, _key: string, value: unknown): unknown {\n if (typeof value === \"bigint\") return value.toString();\n if (typeof value === \"object\" && value !== null) {\n if (seen.has(value)) return \"[Circular]\";\n seen.add(value);\n }\n return value;\n}\n\nexport function safeStringify(obj: unknown): string {\n try {\n const result = JSON.stringify(obj);\n if (typeof result === \"string\") return result;\n return String(result);\n } catch {\n try {\n seen = new WeakSet<object>();\n const result = JSON.stringify(obj, safeReplacer);\n return typeof result === \"string\" ? result : String(obj);\n } catch (e) {\n Logger.error(`safeStringify failed: ${e}`);\n return String(obj);\n }\n }\n}\n\n/**\n * Serializes an attribute to an \"Attribute\" compatible value. Primitives are returned as is, objects are serialized using the provided serializer.\n *\n * @param value - The value to serialize.\n * @param serializer - The serializer to use.\n * @returns A string, number, or boolean value.\n */\nexport function serializeAttribute(\n value: unknown,\n serializer: Serializer,\n): string | number | boolean {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n )\n return value;\n return serializer(value);\n}\n",
13
13
  "import {\n type Baggage,\n type Context,\n createContextKey,\n propagation,\n} from \"@opentelemetry/api\";\nimport { JudgmentTracerProvider } from \"../JudgmentTracerProvider\";\n\n/**\n * Judgment baggage store. Baggage is a set of key-value pairs attached\n * to a {@link Context} and automatically propagated to child spans and\n * to downstream services through the `baggage` HTTP header.\n */\n\n/** Create a new {@link Baggage}, optionally pre-populated with entries. */\nexport const createBaggage = propagation.createBaggage.bind(propagation);\n\nconst BAGGAGE_KEY = createContextKey(\"baggage\");\n\n/** Retrieve the baggage attached to the given context. */\nexport function getBaggage(context: Context): Baggage | undefined {\n return (context.getValue(BAGGAGE_KEY) as Baggage | undefined) ?? undefined;\n}\n\n/** Retrieve the baggage attached to the active context. */\nexport function getActiveBaggage(): Baggage | undefined {\n return getBaggage(JudgmentTracerProvider.getInstance().getCurrentContext());\n}\n\n/** Attach a baggage to the given context, returning a new context. */\nexport function setBaggage(context: Context, baggage: Baggage): Context {\n return context.setValue(BAGGAGE_KEY, baggage);\n}\n\n/** Remove the baggage attached to the given context, returning a new context. */\nexport function deleteBaggage(context: Context): Context {\n return context.deleteValue(BAGGAGE_KEY);\n}\n\nexport { baggageEntryMetadataFromString } from \"@opentelemetry/api\";\nexport type {\n Baggage,\n BaggageEntry,\n BaggageEntryMetadata,\n} from \"@opentelemetry/api\";\n\nexport { JudgmentBaggagePropagator } from \"./JudgmentBaggagePropagator\";\n",
14
- "import {\n INVALID_SPAN_CONTEXT,\n ROOT_CONTEXT,\n SpanStatusCode,\n trace,\n type Context,\n type Span,\n type SpanOptions,\n type Tracer,\n type TracerProvider,\n} from \"@opentelemetry/api\";\nimport {\n registerInstrumentations,\n type Instrumentation,\n} from \"@opentelemetry/instrumentation\";\nimport { AsyncLocalStorage } from \"async_hooks\";\nimport { Logger } from \"../utils/logger\";\nimport type { BaseTracer } from \"./BaseTracer\";\nimport {\n installOtelContextBridge,\n runWithOtelBridgeGate,\n} from \"./instrumentation/OtelContextBridge\";\n\nconst TRACER_NAME = \"judgeval\";\n\nconst _contextStorage = new AsyncLocalStorage<Context>();\n\nclass ProxyTracer implements Tracer {\n private _provider: JudgmentTracerProvider;\n\n constructor(provider: JudgmentTracerProvider) {\n this._provider = provider;\n }\n\n startSpan(name: string, options?: SpanOptions, context?: Context): Span {\n const ctx = context ?? this._provider.getCurrentContext();\n const delegate = this._provider._getDelegateTracer();\n return delegate.startSpan(name, options, ctx);\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: [F] | [SpanOptions, F] | [SpanOptions, Context, F]\n ): ReturnType<F> {\n let options: SpanOptions = {};\n let context: Context = this._provider.getCurrentContext();\n let fn: F;\n\n if (args.length === 1) {\n fn = args[0];\n } else if (args.length === 2) {\n options = args[0];\n fn = args[1];\n } else {\n options = args[0];\n context = args[1];\n fn = args[2];\n }\n\n const span = this.startSpan(name, options, context);\n return this._provider.useSpan(span, true, true, true, () =>\n fn(span),\n ) as ReturnType<F>;\n }\n}\n\nclass NoOpTracer implements Tracer {\n startSpan(): Span {\n return trace.wrapSpanContext(INVALID_SPAN_CONTEXT);\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: [F] | [SpanOptions, F] | [SpanOptions, Context, F]\n ): ReturnType<F> {\n const fn =\n args.length === 1 ? args[0] : args.length === 2 ? args[1] : args[2];\n return fn(this.startSpan()) as ReturnType<F>;\n }\n}\n\n/**\n * Global singleton that manages tracer registration and context propagation.\n *\n * Acts as a proxy TracerProvider that delegates to the currently active\n * tracer's underlying OpenTelemetry provider.\n */\nexport class JudgmentTracerProvider implements TracerProvider {\n private static _instance: JudgmentTracerProvider | null = null;\n\n private _activeTracer: BaseTracer | null = null;\n private _instrumentations: Instrumentation[] = [];\n private _noOpTracer: NoOpTracer;\n private _proxyTracer: ProxyTracer;\n private _tracers = new Set<BaseTracer>();\n\n private constructor() {\n this._noOpTracer = new NoOpTracer();\n this._proxyTracer = new ProxyTracer(this);\n installOtelContextBridge(() => this.getCurrentContext());\n }\n\n /**\n * Get the singleton JudgmentTracerProvider instance.\n *\n * @returns The global provider instance.\n */\n static getInstance(): JudgmentTracerProvider {\n JudgmentTracerProvider._instance ??= new JudgmentTracerProvider();\n return JudgmentTracerProvider._instance;\n }\n\n /**\n * Install the JudgmentTracerProvider as the global tracer provider.\n * This generally does not need to be called - Judgeval automatically uses this for all its observability functionality.\n * Only use this if you specifically want to override the global tracer provider, which will enable all Opentelemetry captured instrumentations to flow through judgeval.\n * @returns True if the installation was successful, false otherwise.\n */\n static installAsGlobalTracerProvider(): boolean {\n const instance = JudgmentTracerProvider.getInstance();\n return trace.setGlobalTracerProvider(instance);\n }\n\n /**\n * Register a tracer with the provider.\n *\n * @param tracer - The tracer to register.\n */\n register(tracer: BaseTracer): void {\n this._tracers.add(tracer);\n }\n\n /**\n * Remove a tracer from the provider.\n *\n * @param tracer - The tracer to deregister.\n */\n deregister(tracer: BaseTracer): void {\n this._tracers.delete(tracer);\n }\n\n /**\n * Set a tracer as the active tracer.\n *\n * Cannot be called while a root span is active.\n *\n * @param tracer - The tracer to activate.\n * @returns `true` if activation succeeded.\n */\n setActive(tracer: BaseTracer): boolean {\n const currentSpan = this.getCurrentSpan();\n if (currentSpan?.isRecording()) {\n if (trace.getSpan(this.getCurrentContext()) === currentSpan) {\n Logger.error(\n \"Cannot set_active() while a root span is active. Keeping existing tracer provider.\",\n );\n return false;\n }\n }\n this.register(tracer);\n this._activeTracer = tracer;\n return true;\n }\n\n /**\n * Get the currently active tracer.\n *\n * @returns The active tracer, or `null` if none.\n */\n getActiveTracer(): BaseTracer | null {\n return this._activeTracer;\n }\n\n /**\n * Get the current OpenTelemetry context.\n *\n * @returns The current context.\n */\n getCurrentContext(): Context {\n return _contextStorage.getStore() ?? ROOT_CONTEXT;\n }\n\n /**\n * Get the span from the current context.\n *\n * @returns The current span, or `undefined` if none.\n */\n getCurrentSpan(): Span | undefined {\n const ctx = this.getCurrentContext();\n return trace.getSpan(ctx);\n }\n\n /**\n * Check whether there is an active root span.\n *\n * @returns `true` if a root span is currently recording.\n */\n hasActiveRootSpan(): boolean {\n const currentSpan = this.getCurrentSpan();\n if (!currentSpan?.isRecording()) return false;\n return true;\n }\n\n _getDelegateTracer(): Tracer {\n const tracer = this._activeTracer;\n if (!tracer) {\n Logger.debug(\"No active tracer, returning NoOpTracer\");\n return this._noOpTracer;\n }\n return tracer._tracerProvider.getTracer(TRACER_NAME);\n }\n\n getTracer(\n _instrumentingModuleName: string,\n _instrumentingLibraryVersion?: string,\n _options?: { schemaUrl?: string },\n ): Tracer {\n return this._proxyTracer;\n }\n\n /**\n * Register an OpenTelemetry instrumentation.\n *\n * @param instrumentor - The instrumentation to add.\n */\n addInstrumentation(instrumentor: Instrumentation): void {\n try {\n registerInstrumentations({\n tracerProvider: this,\n instrumentations: [instrumentor],\n });\n this._instrumentations.push(instrumentor);\n } catch (err: unknown) {\n Logger.error(`Failed to add instrumentation: ${String(err)}`);\n }\n }\n\n useSpan<T>(\n span: Span,\n endOnExit: boolean,\n recordException: boolean,\n setStatusOnException: boolean,\n fn: () => T,\n ): T {\n const prevCtx = this.getCurrentContext();\n const ctx = trace.setSpan(prevCtx, span);\n return _contextStorage.run(ctx, () =>\n runWithOtelBridgeGate(ctx, () => {\n try {\n const result = fn();\n if (result instanceof Promise) {\n return result\n .catch((exc: unknown) => {\n if (span.isRecording()) {\n if (recordException) span.recordException(exc as Error);\n if (setStatusOnException) {\n const err = exc as Error;\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: `${err.name}: ${err.message}`,\n });\n }\n }\n throw exc;\n })\n .finally(() => {\n if (endOnExit) span.end();\n }) as T;\n }\n if (endOnExit) span.end();\n return result;\n } catch (exc) {\n if (span.isRecording()) {\n if (recordException) span.recordException(exc as Error);\n if (setStatusOnException) {\n const err = exc as Error;\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: `${err.name}: ${err.message}`,\n });\n }\n }\n if (endOnExit) span.end();\n throw exc;\n }\n }),\n );\n }\n\n attachContext(ctx: Context): void {\n _contextStorage.enterWith(ctx);\n }\n\n /**\n * Run `fn` with `ctx` installed as the active context for the\n * duration of the callback. Sync or async.\n */\n withContext<T>(ctx: Context, fn: () => T): T {\n return _contextStorage.run(ctx, () => runWithOtelBridgeGate(ctx, fn));\n }\n\n /**\n * Flush all registered tracers.\n */\n async forceFlush(): Promise<void> {\n const results = await Promise.allSettled(\n Array.from(this._tracers).map((t) => t._tracerProvider.forceFlush()),\n );\n for (const r of results) {\n if (r.status === \"rejected\") {\n Logger.error(`forceFlush failed: ${String(r.reason)}`);\n }\n }\n }\n\n /**\n * Shut down all registered tracers and clear state.\n */\n async shutdown(): Promise<void> {\n const results = await Promise.allSettled(\n Array.from(this._tracers).map((t) => t._tracerProvider.shutdown()),\n );\n for (const r of results) {\n if (r.status === \"rejected\") {\n Logger.error(`shutdown failed: ${String(r.reason)}`);\n }\n }\n this._activeTracer = null;\n this._tracers.clear();\n }\n}\n",
14
+ "import {\n INVALID_SPAN_CONTEXT,\n ROOT_CONTEXT,\n SpanStatusCode,\n trace,\n type Context,\n type Span,\n type SpanOptions,\n type Tracer,\n type TracerProvider,\n} from \"@opentelemetry/api\";\nimport {\n registerInstrumentations,\n type Instrumentation,\n} from \"@opentelemetry/instrumentation\";\nimport { AsyncLocalStorage } from \"async_hooks\";\nimport { Logger } from \"../utils/logger\";\nimport type { BaseTracer } from \"./BaseTracer\";\nimport {\n installOtelContextBridge,\n runWithOtelBridgeGate,\n} from \"./instrumentation/OtelContextBridge\";\n\nconst TRACER_NAME = \"judgeval\";\n\nconst _contextStorage = new AsyncLocalStorage<Context>();\n\nclass ProxyTracer implements Tracer {\n private _provider: JudgmentTracerProvider;\n\n constructor(provider: JudgmentTracerProvider) {\n this._provider = provider;\n }\n\n startSpan(name: string, options?: SpanOptions, context?: Context): Span {\n const ctx = context ?? this._provider.getCurrentContext();\n const delegate = this._provider._getDelegateTracer();\n return delegate.startSpan(name, options, ctx);\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: [F] | [SpanOptions, F] | [SpanOptions, Context, F]\n ): ReturnType<F> {\n let options: SpanOptions = {};\n let context: Context = this._provider.getCurrentContext();\n let fn: F;\n\n if (args.length === 1) {\n fn = args[0];\n } else if (args.length === 2) {\n options = args[0];\n fn = args[1];\n } else {\n options = args[0];\n context = args[1];\n fn = args[2];\n }\n\n const span = this.startSpan(name, options, context);\n return this._provider.useSpan(span, false, false, false, () =>\n fn(span),\n ) as ReturnType<F>;\n }\n}\n\nclass NoOpTracer implements Tracer {\n startSpan(): Span {\n return trace.wrapSpanContext(INVALID_SPAN_CONTEXT);\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: [F] | [SpanOptions, F] | [SpanOptions, Context, F]\n ): ReturnType<F> {\n const fn =\n args.length === 1 ? args[0] : args.length === 2 ? args[1] : args[2];\n return fn(this.startSpan()) as ReturnType<F>;\n }\n}\n\n/**\n * Global singleton that manages tracer registration and context propagation.\n *\n * Acts as a proxy TracerProvider that delegates to the currently active\n * tracer's underlying OpenTelemetry provider.\n */\nexport class JudgmentTracerProvider implements TracerProvider {\n private static _instance: JudgmentTracerProvider | null = null;\n\n private _activeTracer: BaseTracer | null = null;\n private _instrumentations: Instrumentation[] = [];\n private _noOpTracer: NoOpTracer;\n private _proxyTracer: ProxyTracer;\n private _tracers = new Set<BaseTracer>();\n\n private constructor() {\n this._noOpTracer = new NoOpTracer();\n this._proxyTracer = new ProxyTracer(this);\n installOtelContextBridge(() => this.getCurrentContext());\n }\n\n /**\n * Get the singleton JudgmentTracerProvider instance.\n *\n * @returns The global provider instance.\n */\n static getInstance(): JudgmentTracerProvider {\n JudgmentTracerProvider._instance ??= new JudgmentTracerProvider();\n return JudgmentTracerProvider._instance;\n }\n\n /**\n * Install the JudgmentTracerProvider as the global tracer provider.\n * This generally does not need to be called - Judgeval automatically uses this for all its observability functionality.\n * Only use this if you specifically want to override the global tracer provider, which will enable all Opentelemetry captured instrumentations to flow through judgeval.\n * @returns True if the installation was successful, false otherwise.\n */\n static installAsGlobalTracerProvider(): boolean {\n const instance = JudgmentTracerProvider.getInstance();\n return trace.setGlobalTracerProvider(instance);\n }\n\n /**\n * Register a tracer with the provider.\n *\n * @param tracer - The tracer to register.\n */\n register(tracer: BaseTracer): void {\n this._tracers.add(tracer);\n }\n\n /**\n * Remove a tracer from the provider.\n *\n * @param tracer - The tracer to deregister.\n */\n deregister(tracer: BaseTracer): void {\n this._tracers.delete(tracer);\n }\n\n /**\n * Set a tracer as the active tracer.\n *\n * Cannot be called while a root span is active.\n *\n * @param tracer - The tracer to activate.\n * @returns `true` if activation succeeded.\n */\n setActive(tracer: BaseTracer): boolean {\n const currentSpan = this.getCurrentSpan();\n if (currentSpan?.isRecording()) {\n if (trace.getSpan(this.getCurrentContext()) === currentSpan) {\n Logger.error(\n \"Cannot set_active() while a root span is active. Keeping existing tracer provider.\",\n );\n return false;\n }\n }\n this.register(tracer);\n this._activeTracer = tracer;\n return true;\n }\n\n /**\n * Get the currently active tracer.\n *\n * @returns The active tracer, or `null` if none.\n */\n getActiveTracer(): BaseTracer | null {\n return this._activeTracer;\n }\n\n /**\n * Get the current OpenTelemetry context.\n *\n * @returns The current context.\n */\n getCurrentContext(): Context {\n return _contextStorage.getStore() ?? ROOT_CONTEXT;\n }\n\n /**\n * Get the span from the current context.\n *\n * @returns The current span, or `undefined` if none.\n */\n getCurrentSpan(): Span | undefined {\n const ctx = this.getCurrentContext();\n return trace.getSpan(ctx);\n }\n\n /**\n * Check whether there is an active root span.\n *\n * @returns `true` if a root span is currently recording.\n */\n hasActiveRootSpan(): boolean {\n const currentSpan = this.getCurrentSpan();\n if (!currentSpan?.isRecording()) return false;\n return true;\n }\n\n _getDelegateTracer(): Tracer {\n const tracer = this._activeTracer;\n if (!tracer) {\n Logger.debug(\"No active tracer, returning NoOpTracer\");\n return this._noOpTracer;\n }\n return tracer._tracerProvider.getTracer(TRACER_NAME);\n }\n\n getTracer(\n _instrumentingModuleName: string,\n _instrumentingLibraryVersion?: string,\n _options?: { schemaUrl?: string },\n ): Tracer {\n return this._proxyTracer;\n }\n\n /**\n * Register an OpenTelemetry instrumentation.\n *\n * @param instrumentor - The instrumentation to add.\n */\n addInstrumentation(instrumentor: Instrumentation): void {\n try {\n registerInstrumentations({\n tracerProvider: this,\n instrumentations: [instrumentor],\n });\n this._instrumentations.push(instrumentor);\n } catch (err: unknown) {\n Logger.error(`Failed to add instrumentation: ${String(err)}`);\n }\n }\n\n useSpan<T>(\n span: Span,\n endOnExit: boolean,\n recordException: boolean,\n setStatusOnException: boolean,\n fn: () => T,\n ): T {\n const prevCtx = this.getCurrentContext();\n const ctx = trace.setSpan(prevCtx, span);\n return _contextStorage.run(ctx, () =>\n runWithOtelBridgeGate(ctx, () => {\n try {\n const result = fn();\n if (result instanceof Promise) {\n return result\n .catch((exc: unknown) => {\n if (span.isRecording()) {\n if (recordException) span.recordException(exc as Error);\n if (setStatusOnException) {\n const err = exc as Error;\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: `${err.name}: ${err.message}`,\n });\n }\n }\n throw exc;\n })\n .finally(() => {\n if (endOnExit) span.end();\n }) as T;\n }\n if (endOnExit) span.end();\n return result;\n } catch (exc) {\n if (span.isRecording()) {\n if (recordException) span.recordException(exc as Error);\n if (setStatusOnException) {\n const err = exc as Error;\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: `${err.name}: ${err.message}`,\n });\n }\n }\n if (endOnExit) span.end();\n throw exc;\n }\n }),\n );\n }\n\n attachContext(ctx: Context): void {\n _contextStorage.enterWith(ctx);\n }\n\n /**\n * Run `fn` with `ctx` installed as the active context for the\n * duration of the callback. Sync or async.\n */\n withContext<T>(ctx: Context, fn: () => T): T {\n return _contextStorage.run(ctx, () => runWithOtelBridgeGate(ctx, fn));\n }\n\n /**\n * Flush all registered tracers.\n */\n async forceFlush(): Promise<void> {\n const results = await Promise.allSettled(\n Array.from(this._tracers).map((t) => t._tracerProvider.forceFlush()),\n );\n for (const r of results) {\n if (r.status === \"rejected\") {\n Logger.error(`forceFlush failed: ${String(r.reason)}`);\n }\n }\n }\n\n /**\n * Shut down all registered tracers and clear state.\n */\n async shutdown(): Promise<void> {\n const results = await Promise.allSettled(\n Array.from(this._tracers).map((t) => t._tracerProvider.shutdown()),\n );\n for (const r of results) {\n if (r.status === \"rejected\") {\n Logger.error(`shutdown failed: ${String(r.reason)}`);\n }\n }\n this._activeTracer = null;\n this._tracers.clear();\n }\n}\n",
15
15
  "import {\n ROOT_CONTEXT,\n context as otelContext,\n type Context,\n} from \"@opentelemetry/api\";\nimport { AsyncLocalStorage } from \"async_hooks\";\n\ntype OTelContextApi = typeof otelContext;\n\nlet installed = false;\nlet getJudgmentContext: (() => Context) | null = null;\n\nconst gateStorage = new AsyncLocalStorage<boolean>();\nconst bridgeContextStorage = new AsyncLocalStorage<Context>();\n\nconst originalActive = otelContext.active.bind(otelContext);\nconst originalWith = otelContext.with.bind(otelContext);\nconst originalBind = otelContext.bind.bind(otelContext);\n\nfunction isGateEnabled(): boolean {\n return gateStorage.getStore() === true;\n}\n\nexport function installOtelContextBridge(\n getCurrentJudgmentContext: () => Context,\n): void {\n getJudgmentContext = getCurrentJudgmentContext;\n if (installed) return;\n\n const api = otelContext as OTelContextApi & {\n active: () => Context;\n with: <A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n context: Context,\n fn: F,\n thisArg?: ThisParameterType<F>,\n ...args: A\n ) => ReturnType<F>;\n bind: <T>(context: Context, target: T) => T;\n };\n\n api.active = (): Context => {\n if (!isGateEnabled()) return originalActive();\n const bridged = bridgeContextStorage.getStore();\n if (bridged) return bridged;\n return getJudgmentContext ? getJudgmentContext() : ROOT_CONTEXT;\n };\n\n api.with = (contextValue, fn, thisArg, ...args) => {\n if (!isGateEnabled())\n return originalWith(contextValue, fn, thisArg, ...args);\n return bridgeContextStorage.run(contextValue, () =>\n fn.apply(thisArg, args),\n );\n };\n\n api.bind = (contextValue, target) => {\n if (!isGateEnabled()) return originalBind(contextValue, target);\n if (typeof target !== \"function\") return target;\n const fn = target as unknown as (...args: unknown[]) => unknown;\n return ((...args: unknown[]) =>\n bridgeContextStorage.run(contextValue, () =>\n fn(...args),\n )) as typeof target;\n };\n\n installed = true;\n}\n\nexport function runWithOtelBridgeGate<T>(ctx: Context, fn: () => T): T {\n return gateStorage.run(true, () => bridgeContextStorage.run(ctx, fn));\n}\n",
16
16
  "import {\n type BaggageEntry,\n type Context,\n type TextMapGetter,\n type TextMapPropagator,\n type TextMapSetter,\n} from \"@opentelemetry/api\";\nimport { isTracingSuppressed } from \"@opentelemetry/core\";\nimport {\n BAGGAGE_HEADER,\n BAGGAGE_ITEMS_SEPARATOR,\n BAGGAGE_MAX_NAME_VALUE_PAIRS,\n BAGGAGE_MAX_PER_NAME_VALUE_PAIRS,\n} from \"./constants\";\nimport { createBaggage, getBaggage, setBaggage } from \"./index\";\nimport { getKeyPairs, parsePairKeyValue, serializeKeyPairs } from \"./utils\";\n\n/**\n * Propagates {@link Baggage} through the W3C `baggage` header.\n *\n * Implements the W3C Baggage specification: https://w3c.github.io/baggage/\n */\nexport class JudgmentBaggagePropagator implements TextMapPropagator {\n inject(context: Context, carrier: unknown, setter: TextMapSetter): void {\n const baggage = getBaggage(context);\n if (!baggage || isTracingSuppressed(context)) return;\n const keyPairs = getKeyPairs(baggage)\n .filter((pair) => pair.length <= BAGGAGE_MAX_PER_NAME_VALUE_PAIRS)\n .slice(0, BAGGAGE_MAX_NAME_VALUE_PAIRS);\n const headerValue = serializeKeyPairs(keyPairs);\n if (headerValue.length > 0) {\n setter.set(carrier, BAGGAGE_HEADER, headerValue);\n }\n }\n\n extract(context: Context, carrier: unknown, getter: TextMapGetter): Context {\n const headerValue = getter.get(carrier, BAGGAGE_HEADER);\n const baggageString = Array.isArray(headerValue)\n ? headerValue.join(BAGGAGE_ITEMS_SEPARATOR)\n : headerValue;\n if (!baggageString) return context;\n const baggage: Record<string, BaggageEntry> = {};\n if (baggageString.length === 0) return context;\n const pairs = baggageString.split(BAGGAGE_ITEMS_SEPARATOR);\n pairs.forEach((entry) => {\n const keyPair = parsePairKeyValue(entry);\n if (keyPair) {\n const baggageEntry: BaggageEntry = { value: keyPair.value };\n if (keyPair.metadata) {\n baggageEntry.metadata = keyPair.metadata;\n }\n baggage[keyPair.key] = baggageEntry;\n }\n });\n if (Object.entries(baggage).length === 0) {\n return context;\n }\n return setBaggage(context, createBaggage(baggage));\n }\n\n fields(): string[] {\n return [BAGGAGE_HEADER];\n }\n}\n",
17
17
  "export const BAGGAGE_KEY_PAIR_SEPARATOR = \"=\";\nexport const BAGGAGE_PROPERTIES_SEPARATOR = \";\";\nexport const BAGGAGE_ITEMS_SEPARATOR = \",\";\n\n/** Name of the HTTP header used to propagate baggage. */\nexport const BAGGAGE_HEADER = \"baggage\";\n\n/** Maximum number of name-value pairs allowed by the W3C Baggage spec. */\nexport const BAGGAGE_MAX_NAME_VALUE_PAIRS = 180;\n\n/** Maximum number of bytes per a single name-value pair allowed by the W3C Baggage spec. */\nexport const BAGGAGE_MAX_PER_NAME_VALUE_PAIRS = 4096;\n\n/** Maximum total length of all name-value pairs allowed by the W3C Baggage spec. */\nexport const BAGGAGE_MAX_TOTAL_LENGTH = 8192;\n",
@@ -27,7 +27,7 @@
27
27
  "import type { JudgmentApiClient } from \"../internal/api\";\nimport { Logger } from \"./logger\";\nimport { retry } from \"./retry\";\n\nconst cache = new Map<string, string>();\nconst inflight = new Map<string, Promise<string>>();\n\nexport async function resolveProjectId(\n client: JudgmentApiClient,\n projectName: string,\n): Promise<string> {\n const cacheKey = `org:${client.getOrganizationId()}:project:${projectName}`;\n const cached = cache.get(cacheKey);\n if (cached) {\n return cached;\n }\n const pending = inflight.get(cacheKey);\n if (pending) {\n return pending;\n }\n const request = (async (): Promise<string> => {\n Logger.info(`Resolving project ID for project: ${projectName}`);\n const projectId = await retry(\n async () => {\n const response = await client.postV1projectsResolve({\n project_name: projectName,\n });\n const id = response.project_id;\n if (!id) {\n throw new Error(`Project ID not found for project: ${projectName}`);\n }\n return id;\n },\n {\n maxRetries: 3,\n backoff: (iteration) => iteration * 1000,\n onRetry: (attempt, error) => {\n Logger.warning(\n `Failed to resolve project ID for '${projectName}' (attempt ${attempt}): ${String(error)}`,\n );\n },\n },\n );\n Logger.info(`Resolved project ID: ${projectId}`);\n cache.set(cacheKey, projectId);\n return projectId;\n })();\n inflight.set(cacheKey, request);\n try {\n return await request;\n } finally {\n inflight.delete(cacheKey);\n }\n}\n",
28
28
  "import { version } from \"../package.json\" with { type: \"json\" };\n\nexport const VERSION = version;\n"
29
29
  ],
30
- "mappings": "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",
31
- "debugId": "F6297EAA524DDD8D64756E2164756E21",
30
+ "mappings": "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",
31
+ "debugId": "51779113799800CD64756E2164756E21",
32
32
  "names": []
33
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BaseTracer.d.ts","sourceRoot":"","sources":["../../src/trace/BaseTracer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseTracer.d.ts","sourceRoot":"","sources":["../../src/trace/BaseTracer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "judgeval",
3
- "version": "0.9.5",
3
+ "version": "0.9.6",
4
4
  "description": "JavaScript/TypeScript client for Judgment evaluation platform",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",