judgeval 0.9.1 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
- var{defineProperty:$,getOwnPropertyNames:he,getOwnPropertyDescriptor:xe}=Object,Te=Object.prototype.hasOwnProperty;var K=new WeakMap,ve=(e)=>{var t=K.get(e),s;if(t)return t;if(t=$({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")he(e).map((o)=>!Te.call(t,o)&&$(t,o,{get:()=>e[o],enumerable:!(s=xe(e,o))||s.enumerable}));return K.set(e,t),t};var ge=(e,t)=>{for(var s in t)$(e,s,{get:t[s],enumerable:!0,configurable:!0,set:(o)=>t[s]=()=>o})};var be={};ge(be,{Tracer:()=>N,NoOpSpanExporter:()=>P,JudgmentTracerProvider:()=>R,JudgmentSpanExporter:()=>f,Judgeval:()=>A,BaseTracer:()=>p});module.exports=ve(be);function I(e,t){let s=process.env[e];if(!s)return t??null;return s}var C=I("JUDGMENT_API_KEY"),G=I("JUDGMENT_ORG_ID"),j=I("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),B=I("JUDGMENT_LOG_LEVEL","warn");class T{baseUrl;apiKey;organizationId;constructor(e,t,s){this.baseUrl=e,this.apiKey=t,this.organizationId=s}getBaseUrl(){return this.baseUrl}getApiKey(){return this.apiKey}getOrganizationId(){return this.organizationId}async request(e,t,s){let o=await fetch(t,{method:e,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId},body:s!==void 0?JSON.stringify(s):void 0});if(!o.ok){let n=await o.text();throw Error(`HTTP ${o.status}: ${n}`)}return o.json()}async postOtelV1traces(){let e=this.baseUrl+"/otel/v1/traces";return this.request("POST",e,{})}async postOtelTriggerRootSpanRules(e){let t=this.baseUrl+"/otel/trigger_root_span_rules";return this.request("POST",t,e)}async postV1projectsResolve(e){let t=this.baseUrl+"/v1/projects/resolve/";return this.request("POST",t,e)}async postV1projects(e){let t=this.baseUrl+"/v1/projects";return this.request("POST",t,e)}async deleteV1projects(e){let t=this.baseUrl+`/v1/projects/${e}`;return this.request("DELETE",t,{})}async postV1projectsDatasets(e,t){let s=this.baseUrl+`/v1/projects/${e}/datasets`;return this.request("POST",s,t)}async getV1projectsDatasets(e){let t=this.baseUrl+`/v1/projects/${e}/datasets`;return this.request("GET",t,void 0)}async postV1projectsDatasetsByDatasetNameExamples(e,t,s){let o=this.baseUrl+`/v1/projects/${e}/datasets/${t}/examples`;return this.request("POST",o,s)}async getV1projectsDatasetsByDatasetName(e,t){let s=this.baseUrl+`/v1/projects/${e}/datasets/${t}`;return this.request("GET",s,void 0)}async postV1projectsEvaluateExamples(e,t){let s=this.baseUrl+`/v1/projects/${e}/evaluate/examples`;return this.request("POST",s,t)}async postV1projectsEvaluateTraces(e,t){let s=this.baseUrl+`/v1/projects/${e}/evaluate/traces`;return this.request("POST",s,t)}async postV1projectsEvalResults(e,t){let s=this.baseUrl+`/v1/projects/${e}/eval-results`;return this.request("POST",s,t)}async postV1projectsEvalResultsExamples(e,t){let s=this.baseUrl+`/v1/projects/${e}/eval-results/examples`;return this.request("POST",s,t)}async getV1projectsExperimentsByRunId(e,t){let s=this.baseUrl+`/v1/projects/${e}/experiments/${t}`;return this.request("GET",s,void 0)}async postV1projectsEvalQueueExamples(e,t){let s=this.baseUrl+`/v1/projects/${e}/eval-queue/examples`;return this.request("POST",s,t)}async postV1projectsEvalQueueTraces(e,t){let s=this.baseUrl+`/v1/projects/${e}/eval-queue/traces`;return this.request("POST",s,t)}async getV1projectsPromptsByName(e,t,s,o){let n=new URLSearchParams;if(s!==void 0)n.set("commit_id",s);if(o!==void 0)n.set("tag",o);let i=this.baseUrl+`/v1/projects/${e}/prompts/${t}`+(n.toString()?"?"+n.toString():"");return this.request("GET",i,void 0)}async postV1projectsPrompts(e,t){let s=this.baseUrl+`/v1/projects/${e}/prompts`;return this.request("POST",s,t)}async postV1projectsPromptsByNameTags(e,t,s){let o=this.baseUrl+`/v1/projects/${e}/prompts/${t}/tags`;return this.request("POST",o,s)}async deleteV1projectsPromptsByNameTags(e,t,s){let o=this.baseUrl+`/v1/projects/${e}/prompts/${t}/tags`;return this.request("DELETE",o,s)}async getV1projectsPromptsByNameVersions(e,t){let s=this.baseUrl+`/v1/projects/${e}/prompts/${t}/versions`;return this.request("GET",s,void 0)}async getV1projectsScorers(e,t,s){let o=new URLSearchParams;if(t!==void 0)o.set("names",t);if(s!==void 0)o.set("is_trace",s);let n=this.baseUrl+`/v1/projects/${e}/scorers`+(o.toString()?"?"+o.toString():"");return this.request("GET",n,void 0)}async getV1projectsScorersByNameExists(e,t){let s=this.baseUrl+`/v1/projects/${e}/scorers/${t}/exists`;return this.request("GET",s,void 0)}async postV1projectsScorersCustom(e,t){let s=this.baseUrl+`/v1/projects/${e}/scorers/custom`;return this.request("POST",s,t)}async getV1projectsScorersCustomByNameExists(e,t){let s=this.baseUrl+`/v1/projects/${e}/scorers/custom/${t}/exists`;return this.request("GET",s,void 0)}async postV1projectsTracesByTraceIdTags(e,t,s){let o=this.baseUrl+`/v1/projects/${e}/traces/${t}/tags`;return this.request("POST",o,s)}async getV1e2eFetchTraceByProjectNameByTraceId(e,t){let s=this.baseUrl+`/v1/e2e_fetch_trace/${e}/${t}`;return this.request("GET",s,void 0)}async getV1e2eTracesPerProject(e,t,s){let o=new URLSearchParams;if(t!==void 0)o.set("limit",t);if(s!==void 0)o.set("offset",s);let n=this.baseUrl+`/v1/e2e_traces_per_project/${e}`+(o.toString()?"?"+o.toString():"");return this.request("GET",n,void 0)}async postV1e2eFetchSpanScore(e){let t=this.baseUrl+"/v1/e2e_fetch_span_score/";return this.request("POST",t,e)}}class A{internalClient;constructor(e={}){let t=e.apiKey??C,s=e.organizationId??G,o=e.apiUrl??j;if(!t)throw Error("API key is required");if(!s)throw Error("Organization ID is required");if(!o)throw Error("API URL is required");this.internalClient=new T(o,t,s)}static create(e={}){return new A(e)}}var y=require("@opentelemetry/api"),Ee=require("crypto");var Ue=/^([^(]+?)=>/,ye=/^[^(]*\(\s*([^)]*)\)/m,De=/,/,Ne=/^\s*(_?)(\S+?)\1\s*$/,Ie=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function Ce(e){return Function.prototype.toString.call(e)}function Ge(e){let t=Ce(e).replace(Ie,"");return t.match(Ue)||t.match(ye)}function ee(e){let t=Ge(e);if(!t||!t[1])return[];return t[1].split(De).map((s)=>{return s.replace(Ne,(n,i,l)=>l).trim()}).filter((s)=>s.length>0)}class r{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=r.Level.WARNING;static useColor=!0;static initialize(){if(!r.initialized){let e=process.env.JUDGMENT_NO_COLOR;r.useColor=!e&&process.stdout.isTTY;let t=B.toLowerCase();if(t){let s={debug:r.Level.DEBUG,info:r.Level.INFO,warning:r.Level.WARNING,warn:r.Level.WARNING,error:r.Level.ERROR,critical:r.Level.CRITICAL};r.currentLevel=s[t]??r.Level.WARNING}r.initialized=!0}}static setLevel(e){r.currentLevel=e}static setUseColor(e){r.useColor=e}static log(e,t){if(r.initialize(),e<r.currentLevel)return;let s=new Date().toISOString().replace("T"," ").substring(0,19),o=Object.keys(r.Level).find((l)=>r.Level[l]===e)??"UNKNOWN",n=`${s} - judgeval - ${o} - ${t}`;if(r.useColor)n=`${e===r.Level.DEBUG||e===r.Level.INFO?r.GRAY:e===r.Level.WARNING?r.YELLOW:r.RED}${n}${r.RESET}`;(e>=r.Level.ERROR?process.stderr:process.stdout).write(n+`
2
- `)}static debug(e){r.log(r.Level.DEBUG,e)}static info(e){r.log(r.Level.INFO,e)}static warning(e){r.log(r.Level.WARNING,e)}static warn(e){r.log(r.Level.WARNING,e)}static error(e){r.log(r.Level.ERROR,e)}static critical(e){r.log(r.Level.CRITICAL,e)}}var J;function je(e,t){if(typeof t==="bigint")return t.toString();if(typeof t==="object"&&t!==null){if(J.has(t))return"[Circular]";J.add(t)}return t}function q(e){try{let t=JSON.stringify(e);if(typeof t==="string")return t;return String(t)}catch{try{J=new WeakSet;let t=JSON.stringify(e,je);return typeof t==="string"?t:String(e)}catch(t){return r.error(`safeStringify failed: ${t}`),String(e)}}}function v(e,t){if(typeof e==="string"||typeof e==="number"||typeof e==="boolean")return e;return t(e)}var c=require("@opentelemetry/api"),pe=require("@opentelemetry/instrumentation"),ie=require("async_hooks");var S=require("@opentelemetry/api"),k=require("async_hooks"),te=!1,F=null,oe=new k.AsyncLocalStorage,O=new k.AsyncLocalStorage,se=S.context.active.bind(S.context),Ae=S.context.with.bind(S.context),qe=S.context.bind.bind(S.context);function V(){return oe.getStore()===!0}function ne(e){if(F=e,te)return;let t=S.context;t.active=()=>{if(!V())return se();let s=O.getStore();if(s)return s;return F?F():se()},t.with=(s,o,n,...i)=>{if(!V())return Ae(s,o,n,...i);return O.run(s,()=>o.apply(n,i))},t.bind=(s,o)=>{if(!V())return qe(s,o);if(typeof o!=="function")return o;let n=o;return(...i)=>O.run(s,()=>n(...i))},te=!0}function re(e,t){return oe.run(!0,()=>O.run(e,t))}var Oe="judgeval",Y=new ie.AsyncLocalStorage;class le{_provider;constructor(e){this._provider=e}startSpan(e,t,s){let o=s??this._provider.getCurrentContext();return this._provider._getDelegateTracer().startSpan(e,t,o)}startActiveSpan(e,...t){let s={},o=this._provider.getCurrentContext(),n;if(t.length===1)n=t[0];else if(t.length===2)s=t[0],n=t[1];else s=t[0],o=t[1],n=t[2];let i=this.startSpan(e,s,o);return this._provider.useSpan(i,!0,!0,!0,()=>n(i))}}class me{startSpan(){return c.trace.wrapSpanContext(c.INVALID_SPAN_CONTEXT)}startActiveSpan(e,...t){return(t.length===1?t[0]:t.length===2?t[1]:t[2])(this.startSpan())}}class R{static _instance=null;_activeTracer=null;_instrumentations=[];_noOpTracer;_proxyTracer;_tracers=new Set;constructor(){this._noOpTracer=new me,this._proxyTracer=new le(this),ne(()=>this.getCurrentContext())}static getInstance(){return R._instance??=new R,R._instance}static installAsGlobalTracerProvider(){let e=R.getInstance();return c.trace.setGlobalTracerProvider(e)}register(e){this._tracers.add(e)}deregister(e){this._tracers.delete(e)}setActive(e){let t=this.getCurrentSpan();if(t?.isRecording()){if(c.trace.getSpan(this.getCurrentContext())===t)return r.error("Cannot set_active() while a root span is active. Keeping existing tracer provider."),!1}return this.register(e),this._activeTracer=e,!0}getActiveTracer(){return this._activeTracer}getCurrentContext(){return Y.getStore()??c.context.active()}getCurrentSpan(){let e=this.getCurrentContext();return c.trace.getSpan(e)}hasActiveRootSpan(){if(!this.getCurrentSpan()?.isRecording())return!1;return!0}_getDelegateTracer(){let e=this._activeTracer;if(!e)return r.debug("No active tracer, returning NoOpTracer"),this._noOpTracer;return e._tracerProvider.getTracer(Oe)}getTracer(e,t,s){return this._proxyTracer}addInstrumentation(e){try{pe.registerInstrumentations({tracerProvider:this,instrumentations:[e]}),this._instrumentations.push(e)}catch(t){r.error(`Failed to add instrumentation: ${String(t)}`)}}useSpan(e,t,s,o,n){let i=this.getCurrentContext(),l=c.trace.setSpan(i,e);return Y.run(l,()=>re(l,()=>{try{let m=n();if(m instanceof Promise)return m.catch((u)=>{if(e.isRecording()){if(s)e.recordException(u);if(o){let _=u;e.setStatus({code:c.SpanStatusCode.ERROR,message:`${_.name}: ${_.message}`})}}throw u}).finally(()=>{if(t)e.end()});if(t)e.end();return m}catch(m){if(e.isRecording()){if(s)e.recordException(m);if(o){let u=m;e.setStatus({code:c.SpanStatusCode.ERROR,message:`${u.name}: ${u.message}`})}}if(t)e.end();throw m}}))}attachContext(e){Y.enterWith(e)}async forceFlush(){await Promise.all(Array.from(this._tracers).map((e)=>e._tracerProvider.forceFlush()))}async shutdown(){await Promise.all(Array.from(this._tracers).map((e)=>e._tracerProvider.shutdown())),this._activeTracer=null,this._tracers.clear()}}var g=Symbol.for("judgment.customer_id"),U=Symbol.for("judgment.session_id");var ue="judgeval";class p{projectName;projectId;apiKey;organizationId;apiUrl;environment;serializer;_tracerProvider;_client;_enableMonitoring;constructor(e,t,s,o,n,i,l,m,u,_){this.projectName=e,this.projectId=t,this.apiKey=s,this.organizationId=o,this.apiUrl=n,this.environment=i,this.serializer=l,this._tracerProvider=m,this._client=u,this._enableMonitoring=_}setActive(){return R.getInstance().setActive(this)}static _getProxyProvider(){return R.getInstance()}static _getSerializer(){return p._getProxyProvider().getActiveTracer()?.serializer??q}static _getCurrentTraceAndSpanId(){let t=p._getProxyProvider().getCurrentSpan();if(!t?.isRecording())return null;let s=t.spanContext();if(!s.traceId||!(s.traceFlags&1))return null;return[s.traceId,s.spanId]}static _emitPartial(){let e=p._getProxyProvider().getActiveTracer();if(!e)return;e.getSpanProcessor().emitPartial()}static getCurrentSpan(){return p._getProxyProvider().getCurrentSpan()}static async forceFlush(){await p._getProxyProvider().forceFlush()}static async shutdown(){await p._getProxyProvider().shutdown()}static registerOTELInstrumentation(e){p._getProxyProvider().addInstrumentation(e)}static getOTELTracer(){return p._getProxyProvider().getTracer(ue)}static startSpan(e,t){let s=p.getOTELTracer().startSpan(e,{attributes:t});return p._emitPartial(),s}static startActiveSpan(e,t,s){return p.getOTELTracer().startActiveSpan(e,{attributes:s},(o)=>{p._emitPartial();let n=t(o);if(n instanceof Promise)return n.finally(()=>{o.end()});return o.end(),n})}static span(e,t){return p.startActiveSpan(e,(s)=>{try{let o=t(s);if(o instanceof Promise)return o.catch((n)=>{throw s.setStatus({code:y.SpanStatusCode.ERROR,message:String(n)}),s.recordException(n),n});return o}catch(o){throw s.setStatus({code:y.SpanStatusCode.ERROR,message:String(o)}),s.recordException(o),o}})}static with(e,t){return p.span(e,t)}static observe(e,t="span",s,o=!0,n=!0,i=!1){let l=p._getProxyProvider(),m=(u)=>{let _=s??u.name;return(...x)=>{return l.getTracer(ue).startActiveSpan(_,(E)=>{if(t)E.setAttribute("judgment.span_kind",t);try{if(o)E.setAttribute("judgment.input",v(Me(u,x),p._getSerializer()));p._emitPartial();let a=u(...x);if(a instanceof Promise)return a.then((d)=>{if(n)E.setAttribute("judgment.output",v(d,p._getSerializer()));return d}).catch((d)=>{throw E.recordException(d),E.setStatus({code:y.SpanStatusCode.ERROR,message:String(d)}),d}).finally(()=>{E.end()});if(n)E.setAttribute("judgment.output",v(a,p._getSerializer()));return E.end(),a}catch(a){throw E.recordException(a),E.setStatus({code:y.SpanStatusCode.ERROR,message:String(a)}),E.end(),a}})}};if(!e)return m;return m(e)}static setSpanKind(e){if(!e)return;let t=p._getProxyProvider().getCurrentSpan();if(t?.isRecording())t.setAttribute("judgment.span_kind",e)}static setLLMSpan(){p.setSpanKind("llm")}static setToolSpan(){p.setSpanKind("tool")}static setGeneralSpan(){p.setSpanKind("span")}static setAttribute(e,t){let s=p._getProxyProvider().getCurrentSpan();if(!s?.isRecording())return;if(!e||t==null)return;s.setAttribute(e,v(t,p._getSerializer()))}static setAttributes(e){for(let[t,s]of Object.entries(e))p.setAttribute(t,s)}static setInput(e){p.setAttribute("judgment.input",e)}static setOutput(e){p.setAttribute("judgment.output",e)}static recordLLMMetadata(e){let t=p._getProxyProvider().getCurrentSpan();if(!t?.isRecording())return;if(typeof e.non_cached_input_tokens==="number")t.setAttribute("judgment.usage.non_cached_input_tokens",e.non_cached_input_tokens);if(typeof e.output_tokens==="number")t.setAttribute("judgment.usage.output_tokens",e.output_tokens);if(typeof e.cache_read_input_tokens==="number")t.setAttribute("judgment.usage.cache_read_input_tokens",e.cache_read_input_tokens);if(typeof e.cache_creation_input_tokens==="number")t.setAttribute("judgment.usage.cache_creation_input_tokens",e.cache_creation_input_tokens);if(typeof e.total_cost_usd==="number")t.setAttribute("judgment.usage.total_cost_usd",e.total_cost_usd)}static setCustomerId(e){let t=p._getProxyProvider(),s=t.getCurrentSpan();if(!s?.isRecording())return;s.setAttribute("judgment.customer_id",e);let o=t.getCurrentContext().setValue(g,e);t.attachContext(o)}static setSessionId(e){let t=p._getProxyProvider(),s=t.getCurrentSpan();if(!s?.isRecording())return;let o=s.spanContext();if(!o.traceId||!(o.traceFlags&1))return;s.setAttribute("judgment.session_id",e);let n=t.getCurrentContext().setValue(U,e);t.attachContext(n)}static tag(e){if(!e||Array.isArray(e)&&e.length===0)return;let s=p._getProxyProvider().getActiveTracer();if(!s?.projectId||!s._client)return;let o=p._getCurrentTraceAndSpanId();if(!o)return;let[n]=o,i=Array.isArray(e)?e:[e];s._client.postV1projectsTracesByTraceIdTags(s.projectId,n,{tags:i}).catch((l)=>{r.error(`tag failed: ${String(l)}`)})}static _pendingEvals=new Map;static asyncEvaluate(e,t){let s=p._getProxyProvider(),o=s.getActiveTracer();if(!o){r.warning("asyncEvaluate: no active tracer");return}if(!o.projectId){r.warning("asyncEvaluate: no project configured");return}let n=s.getCurrentSpan();if(!n?.isRecording()){r.warning("asyncEvaluate: no active span");return}let i=n.spanContext(),l=`${i.traceId}:${i.spanId}`,m=p._pendingEvals.get(l)??[],u={project_id:o.projectId,eval_name:`async_evaluate_${e}_${m.length}`,judges:[{name:e}],examples:[{...t,example_id:Ee.randomUUID(),created_at:new Date().toISOString(),trace_id:i.traceId,span_id:i.spanId}],is_offline:!1,is_behavior:!1};m.push(u),p._pendingEvals.set(l,m),n.setAttribute("judgment.pending_trace_eval",JSON.stringify(m))}}function Me(e,t){try{let s=ee(e).map((n)=>n.replace(/^\.\.\./,"").split("=")[0].trim()).filter((n)=>n.length>0),o={};return s.forEach((n,i)=>{if(i<t.length)o[n]=t[i]}),o}catch{return{}}}var Re=require("@opentelemetry/exporter-trace-otlp-http");class f{_delegate;constructor(e,t,s,o){this._delegate=new Re.OTLPTraceExporter({url:e,headers:{Authorization:`Bearer ${t}`,"X-Organization-Id":s,"X-Project-Id":o}})}export(e,t){r.info(`Exported ${e.length} spans`),this._delegate?.export(e,t)}shutdown(){return this._delegate?.shutdown()??Promise.resolve()}forceFlush(){return this._delegate?.forceFlush()??Promise.resolve()}}var ce=require("@opentelemetry/core");class P extends f{constructor(){super("https://api.judgmentlabs.ai/otel/v1/traces","","","");this._delegate=null}export(e,t){t({code:ce.ExportResultCode.SUCCESS})}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}}var ae=require("@opentelemetry/sdk-trace-base");var _e=[];function D(e){_e.push(e)}function M(){return _e.map((e)=>e())}class Q{onStart(e,t){let s=t.getValue(g);if(s)e.setAttribute("judgment.customer_id",s)}onEnd(e){}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}D(()=>new Q);class H{onStart(e,t){let s=t.getValue(U);if(s)e.setAttribute("judgment.session_id",s)}onEnd(e){}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}D(()=>new H);function w(e){return`${e.traceId}:${e.spanId}`}class h extends ae.BatchSpanProcessor{tracer;_internalAttributes=new Map;constructor(e,t,s){super(t,s);this.tracer=e}_cleanupSpanState(e){this._internalAttributes.delete(e)}setInternalAttribute(e,t,s){let o=w(e),n=this._internalAttributes.get(o);if(!n)n=new Map,this._internalAttributes.set(o,n);n.set(t,s)}getInternalAttribute(e,t,s=null){let o=w(e),n=this._internalAttributes.get(o);if(!n)return s;return n.has(t)?n.get(t):s}_emitSpan(e){let t=e.spanContext(),s=w(t),o=this._internalAttributes.get(s);if(!o)o=new Map,this._internalAttributes.set(s,o);let n=o.get("judgment.update_id")??0;o.set("judgment.update_id",n+1);let i={...e.attributes,"judgment.update_id":n},l=Object.create(e);Object.defineProperty(l,"attributes",{value:i,writable:!1}),Object.defineProperty(l,"endTime",{value:e.startTime,writable:!1}),super.onEnd(l)}emitPartial(){let t=R.getInstance().getCurrentSpan();if(!t?.isRecording())return;if(this.getInternalAttribute(t.spanContext(),"disable_partial_emit",!1))return;this._emitSpan(t)}onStart(e,t){for(let s of M())s.onStart(e,t)}onEnd(e){for(let n of M())n.onEnd(e);let t=e.spanContext();if(!this.getInternalAttribute(t,"cancelled",!1))this._emitSpan(e);let o=w(t);this._cleanupSpanState(o)}}class b extends h{constructor(){super(null,new P)}onStart(e,t){}onEnd(e){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}emitPartial(){}setInternalAttribute(e,t,s){}getInternalAttribute(e,t,s=null){return s}}var L=require("@opentelemetry/resources"),Z=require("@opentelemetry/sdk-trace-node");var de=new Map,X=new Map;async function Se(e,t){let s=`org:${e.getOrganizationId()}:project:${t}`,o=de.get(s);if(o)return o;let n=X.get(s);if(n)return n;let i=(async()=>{r.info(`Resolving project ID for project: ${t}`);let m=(await e.postV1projectsResolve({project_name:t})).project_id;if(!m)throw Error(`Project ID not found for project: ${t}`);return r.info(`Resolved project ID: ${m}`),de.set(s,m),m})();X.set(s,i);try{return await i}finally{X.delete(s)}}var fe="0.9.1";var Pe=fe;class N extends p{_spanExporter=null;_spanProcessor=null;constructor(e,t,s,o,n,i,l,m,u,_){super(e,t,s,o,n,i,l,m,u,_)}static async init(e={}){let t=e.apiKey??C,s=e.organizationId??G,o=e.apiUrl??j,n=e.projectName??null,i=e.serializer??q,l=!0;if(!n)r.warning("project_name not provided. Tracer will not export spans."),l=!1;if(!t)r.warning("api_key not provided. Tracer will not export spans."),l=!1;if(!s)r.warning("organization_id not provided. Tracer will not export spans."),l=!1;if(!o)r.warning("api_url not provided. Tracer will not export spans."),l=!1;let m=null,u=null;if(l&&n&&t&&s&&o){if(m=new T(o,t,s),u=await Se(m,n).catch(()=>null),!u)r.warning(`Project '${n}' not found. Tracer will not export spans.`),l=!1}let _={"service.name":n??"unknown","telemetry.sdk.name":"judgeval","telemetry.sdk.version":Pe};if(e.environment)_["deployment.environment"]=e.environment;if(e.resourceAttributes)Object.assign(_,e.resourceAttributes);let x=L.defaultResource().merge(L.resourceFromAttributes(_)),z=new Z.NodeTracerProvider({resource:x}),E=new N(n,u,t,s,o,e.environment??null,i,z,m,l);if(l){let d=new Z.NodeTracerProvider({resource:x,spanProcessors:[E.getSpanProcessor()]});E._tracerProvider=d}if(R.getInstance().register(E),e.setActive??!0)E.setActive();return E}getSpanExporter(){if(this._spanExporter)return this._spanExporter;if(!this._enableMonitoring||!this.projectId||!this.apiKey||!this.organizationId||!this.apiUrl)this._spanExporter=new P;else{let e=this.apiUrl.endsWith("/")?this.apiUrl+"otel/v1/traces":this.apiUrl+"/otel/v1/traces";this._spanExporter=new f(e,this.apiKey,this.organizationId,this.projectId)}return this._spanExporter}getSpanProcessor(){if(this._spanProcessor)return this._spanProcessor;if(!this._enableMonitoring)this._spanProcessor=new b;else this._spanProcessor=new h(this,this.getSpanExporter());return this._spanProcessor}}
1
+ var{defineProperty:$,getOwnPropertyNames:Te,getOwnPropertyDescriptor:he}=Object,xe=Object.prototype.hasOwnProperty;var K=new WeakMap,ve=(e)=>{var t=K.get(e),s;if(t)return t;if(t=$({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")Te(e).map((o)=>!xe.call(t,o)&&$(t,o,{get:()=>e[o],enumerable:!(s=he(e,o))||s.enumerable}));return K.set(e,t),t};var ge=(e,t)=>{for(var s in t)$(e,s,{get:t[s],enumerable:!0,configurable:!0,set:(o)=>t[s]=()=>o})};var Le={};ge(Le,{Tracer:()=>N,NoOpSpanExporter:()=>P,JudgmentTracerProvider:()=>R,JudgmentSpanExporter:()=>f,Judgeval:()=>A,BaseTracer:()=>p});module.exports=ve(Le);function I(e,t){let s=process.env[e];if(!s)return t??null;return s}var C=I("JUDGMENT_API_KEY"),G=I("JUDGMENT_ORG_ID"),j=I("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),B=I("JUDGMENT_LOG_LEVEL","warn");class x{baseUrl;apiKey;organizationId;constructor(e,t,s){this.baseUrl=e,this.apiKey=t,this.organizationId=s}getBaseUrl(){return this.baseUrl}getApiKey(){return this.apiKey}getOrganizationId(){return this.organizationId}async request(e,t,s){let o=await fetch(t,{method:e,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId},body:s!==void 0?JSON.stringify(s):void 0});if(!o.ok){let n=await o.text();throw Error(`HTTP ${o.status}: ${n}`)}return o.json()}async postOtelV1traces(){let e=this.baseUrl+"/otel/v1/traces";return this.request("POST",e,{})}async postOtelTriggerRootSpanRules(e){let t=this.baseUrl+"/otel/trigger_root_span_rules";return this.request("POST",t,e)}async postV1projectsResolve(e){let t=this.baseUrl+"/v1/projects/resolve/";return this.request("POST",t,e)}async postV1projects(e){let t=this.baseUrl+"/v1/projects";return this.request("POST",t,e)}async deleteV1projects(e){let t=this.baseUrl+`/v1/projects/${e}`;return this.request("DELETE",t,{})}async postV1projectsDatasets(e,t){let s=this.baseUrl+`/v1/projects/${e}/datasets`;return this.request("POST",s,t)}async getV1projectsDatasets(e){let t=this.baseUrl+`/v1/projects/${e}/datasets`;return this.request("GET",t,void 0)}async postV1projectsDatasetsByDatasetNameExamples(e,t,s){let o=this.baseUrl+`/v1/projects/${e}/datasets/${t}/examples`;return this.request("POST",o,s)}async getV1projectsDatasetsByDatasetName(e,t){let s=this.baseUrl+`/v1/projects/${e}/datasets/${t}`;return this.request("GET",s,void 0)}async postV1projectsEvaluateExamples(e,t){let s=this.baseUrl+`/v1/projects/${e}/evaluate/examples`;return this.request("POST",s,t)}async postV1projectsEvaluateTraces(e,t){let s=this.baseUrl+`/v1/projects/${e}/evaluate/traces`;return this.request("POST",s,t)}async postV1projectsEvalResults(e,t){let s=this.baseUrl+`/v1/projects/${e}/eval-results`;return this.request("POST",s,t)}async postV1projectsEvalResultsExamples(e,t){let s=this.baseUrl+`/v1/projects/${e}/eval-results/examples`;return this.request("POST",s,t)}async getV1projectsExperimentsByRunId(e,t){let s=this.baseUrl+`/v1/projects/${e}/experiments/${t}`;return this.request("GET",s,void 0)}async postV1projectsEvalQueueExamples(e,t){let s=this.baseUrl+`/v1/projects/${e}/eval-queue/examples`;return this.request("POST",s,t)}async postV1projectsEvalQueueTraces(e,t){let s=this.baseUrl+`/v1/projects/${e}/eval-queue/traces`;return this.request("POST",s,t)}async getV1projectsPromptsByName(e,t,s,o){let n=new URLSearchParams;if(s!==void 0)n.set("commit_id",s);if(o!==void 0)n.set("tag",o);let i=this.baseUrl+`/v1/projects/${e}/prompts/${t}`+(n.toString()?"?"+n.toString():"");return this.request("GET",i,void 0)}async postV1projectsPrompts(e,t){let s=this.baseUrl+`/v1/projects/${e}/prompts`;return this.request("POST",s,t)}async postV1projectsPromptsByNameTags(e,t,s){let o=this.baseUrl+`/v1/projects/${e}/prompts/${t}/tags`;return this.request("POST",o,s)}async deleteV1projectsPromptsByNameTags(e,t,s){let o=this.baseUrl+`/v1/projects/${e}/prompts/${t}/tags`;return this.request("DELETE",o,s)}async getV1projectsPromptsByNameVersions(e,t){let s=this.baseUrl+`/v1/projects/${e}/prompts/${t}/versions`;return this.request("GET",s,void 0)}async getV1projectsScorers(e,t,s){let o=new URLSearchParams;if(t!==void 0)o.set("names",t);if(s!==void 0)o.set("is_trace",s);let n=this.baseUrl+`/v1/projects/${e}/scorers`+(o.toString()?"?"+o.toString():"");return this.request("GET",n,void 0)}async getV1projectsScorersByNameExists(e,t){let s=this.baseUrl+`/v1/projects/${e}/scorers/${t}/exists`;return this.request("GET",s,void 0)}async postV1projectsScorersCustom(e,t){let s=this.baseUrl+`/v1/projects/${e}/scorers/custom`;return this.request("POST",s,t)}async getV1projectsScorersCustomByNameExists(e,t){let s=this.baseUrl+`/v1/projects/${e}/scorers/custom/${t}/exists`;return this.request("GET",s,void 0)}async postV1projectsTracesByTraceIdTags(e,t,s){let o=this.baseUrl+`/v1/projects/${e}/traces/${t}/tags`;return this.request("POST",o,s)}async getV1e2eFetchTraceByProjectNameByTraceId(e,t){let s=this.baseUrl+`/v1/e2e_fetch_trace/${e}/${t}`;return this.request("GET",s,void 0)}async getV1e2eTracesPerProject(e,t,s){let o=new URLSearchParams;if(t!==void 0)o.set("limit",t);if(s!==void 0)o.set("offset",s);let n=this.baseUrl+`/v1/e2e_traces_per_project/${e}`+(o.toString()?"?"+o.toString():"");return this.request("GET",n,void 0)}async postV1e2eFetchSpanScore(e){let t=this.baseUrl+"/v1/e2e_fetch_span_score/";return this.request("POST",t,e)}}class A{internalClient;constructor(e={}){let t=e.apiKey??C,s=e.organizationId??G,o=e.apiUrl??j;if(!t)throw Error("API key is required");if(!s)throw Error("Organization ID is required");if(!o)throw Error("API URL is required");this.internalClient=new x(o,t,s)}static create(e={}){return new A(e)}}var y=require("@opentelemetry/api"),Ee=require("crypto");var Ue=/^([^(]+?)=>/,ye=/^[^(]*\(\s*([^)]*)\)/m,De=/,/,Ne=/^\s*(_?)(\S+?)\1\s*$/,Ie=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function Ce(e){return Function.prototype.toString.call(e)}function Ge(e){let t=Ce(e).replace(Ie,"");return t.match(Ue)||t.match(ye)}function ee(e){let t=Ge(e);if(!t||!t[1])return[];return t[1].split(De).map((s)=>{return s.replace(Ne,(n,i,l)=>l).trim()}).filter((s)=>s.length>0)}class r{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=r.Level.WARNING;static useColor=!0;static initialize(){if(!r.initialized){let e=process.env.JUDGMENT_NO_COLOR;r.useColor=!e&&process.stdout.isTTY;let t=B.toLowerCase();if(t){let s={debug:r.Level.DEBUG,info:r.Level.INFO,warning:r.Level.WARNING,warn:r.Level.WARNING,error:r.Level.ERROR,critical:r.Level.CRITICAL};r.currentLevel=s[t]??r.Level.WARNING}r.initialized=!0}}static setLevel(e){r.currentLevel=e}static setUseColor(e){r.useColor=e}static log(e,t){if(r.initialize(),e<r.currentLevel)return;let s=new Date().toISOString().replace("T"," ").substring(0,19),o=Object.keys(r.Level).find((l)=>r.Level[l]===e)??"UNKNOWN",n=`${s} - judgeval - ${o} - ${t}`;if(r.useColor)n=`${e===r.Level.DEBUG||e===r.Level.INFO?r.GRAY:e===r.Level.WARNING?r.YELLOW:r.RED}${n}${r.RESET}`;(e>=r.Level.ERROR?process.stderr:process.stdout).write(n+`
2
+ `)}static debug(e){r.log(r.Level.DEBUG,e)}static info(e){r.log(r.Level.INFO,e)}static warning(e){r.log(r.Level.WARNING,e)}static warn(e){r.log(r.Level.WARNING,e)}static error(e){r.log(r.Level.ERROR,e)}static critical(e){r.log(r.Level.CRITICAL,e)}}var J;function je(e,t){if(typeof t==="bigint")return t.toString();if(typeof t==="object"&&t!==null){if(J.has(t))return"[Circular]";J.add(t)}return t}function q(e){try{let t=JSON.stringify(e);if(typeof t==="string")return t;return String(t)}catch{try{J=new WeakSet;let t=JSON.stringify(e,je);return typeof t==="string"?t:String(e)}catch(t){return r.error(`safeStringify failed: ${t}`),String(e)}}}function v(e,t){if(typeof e==="string"||typeof e==="number"||typeof e==="boolean")return e;return t(e)}var c=require("@opentelemetry/api"),pe=require("@opentelemetry/instrumentation"),ie=require("async_hooks");var S=require("@opentelemetry/api"),k=require("async_hooks"),te=!1,F=null,oe=new k.AsyncLocalStorage,O=new k.AsyncLocalStorage,se=S.context.active.bind(S.context),Ae=S.context.with.bind(S.context),qe=S.context.bind.bind(S.context);function V(){return oe.getStore()===!0}function ne(e){if(F=e,te)return;let t=S.context;t.active=()=>{if(!V())return se();let s=O.getStore();if(s)return s;return F?F():se()},t.with=(s,o,n,...i)=>{if(!V())return Ae(s,o,n,...i);return O.run(s,()=>o.apply(n,i))},t.bind=(s,o)=>{if(!V())return qe(s,o);if(typeof o!=="function")return o;let n=o;return(...i)=>O.run(s,()=>n(...i))},te=!0}function re(e,t){return oe.run(!0,()=>O.run(e,t))}var Oe="judgeval",Y=new ie.AsyncLocalStorage;class le{_provider;constructor(e){this._provider=e}startSpan(e,t,s){let o=s??this._provider.getCurrentContext();return this._provider._getDelegateTracer().startSpan(e,t,o)}startActiveSpan(e,...t){let s={},o=this._provider.getCurrentContext(),n;if(t.length===1)n=t[0];else if(t.length===2)s=t[0],n=t[1];else s=t[0],o=t[1],n=t[2];let i=this.startSpan(e,s,o);return this._provider.useSpan(i,!0,!0,!0,()=>n(i))}}class me{startSpan(){return c.trace.wrapSpanContext(c.INVALID_SPAN_CONTEXT)}startActiveSpan(e,...t){return(t.length===1?t[0]:t.length===2?t[1]:t[2])(this.startSpan())}}class R{static _instance=null;_activeTracer=null;_instrumentations=[];_noOpTracer;_proxyTracer;_tracers=new Set;constructor(){this._noOpTracer=new me,this._proxyTracer=new le(this),ne(()=>this.getCurrentContext())}static getInstance(){return R._instance??=new R,R._instance}static installAsGlobalTracerProvider(){let e=R.getInstance();return c.trace.setGlobalTracerProvider(e)}register(e){this._tracers.add(e)}deregister(e){this._tracers.delete(e)}setActive(e){let t=this.getCurrentSpan();if(t?.isRecording()){if(c.trace.getSpan(this.getCurrentContext())===t)return r.error("Cannot set_active() while a root span is active. Keeping existing tracer provider."),!1}return this.register(e),this._activeTracer=e,!0}getActiveTracer(){return this._activeTracer}getCurrentContext(){return Y.getStore()??c.context.active()}getCurrentSpan(){let e=this.getCurrentContext();return c.trace.getSpan(e)}hasActiveRootSpan(){if(!this.getCurrentSpan()?.isRecording())return!1;return!0}_getDelegateTracer(){let e=this._activeTracer;if(!e)return r.debug("No active tracer, returning NoOpTracer"),this._noOpTracer;return e._tracerProvider.getTracer(Oe)}getTracer(e,t,s){return this._proxyTracer}addInstrumentation(e){try{pe.registerInstrumentations({tracerProvider:this,instrumentations:[e]}),this._instrumentations.push(e)}catch(t){r.error(`Failed to add instrumentation: ${String(t)}`)}}useSpan(e,t,s,o,n){let i=this.getCurrentContext(),l=c.trace.setSpan(i,e);return Y.run(l,()=>re(l,()=>{try{let m=n();if(m instanceof Promise)return m.catch((u)=>{if(e.isRecording()){if(s)e.recordException(u);if(o){let _=u;e.setStatus({code:c.SpanStatusCode.ERROR,message:`${_.name}: ${_.message}`})}}throw u}).finally(()=>{if(t)e.end()});if(t)e.end();return m}catch(m){if(e.isRecording()){if(s)e.recordException(m);if(o){let u=m;e.setStatus({code:c.SpanStatusCode.ERROR,message:`${u.name}: ${u.message}`})}}if(t)e.end();throw m}}))}attachContext(e){Y.enterWith(e)}async forceFlush(){await Promise.all(Array.from(this._tracers).map((e)=>e._tracerProvider.forceFlush()))}async shutdown(){await Promise.all(Array.from(this._tracers).map((e)=>e._tracerProvider.shutdown())),this._activeTracer=null,this._tracers.clear()}}var g=Symbol.for("judgment.customer_id"),U=Symbol.for("judgment.session_id");var ue="judgeval";class p{projectName;projectId;apiKey;organizationId;apiUrl;environment;serializer;_tracerProvider;_client;_enableMonitoring;constructor(e,t,s,o,n,i,l,m,u,_){this.projectName=e,this.projectId=t,this.apiKey=s,this.organizationId=o,this.apiUrl=n,this.environment=i,this.serializer=l,this._tracerProvider=m,this._client=u,this._enableMonitoring=_}setActive(){return R.getInstance().setActive(this)}static _getProxyProvider(){return R.getInstance()}static _getSerializer(){return p._getProxyProvider().getActiveTracer()?.serializer??q}static _getCurrentTraceAndSpanId(){let t=p._getProxyProvider().getCurrentSpan();if(!t?.isRecording())return null;let s=t.spanContext();if(!s.traceId||!(s.traceFlags&1))return null;return[s.traceId,s.spanId]}static _emitPartial(){let e=p._getProxyProvider().getActiveTracer();if(!e)return;e.getSpanProcessor().emitPartial()}static getCurrentSpan(){return p._getProxyProvider().getCurrentSpan()}static async forceFlush(){await p._getProxyProvider().forceFlush()}static async shutdown(){await p._getProxyProvider().shutdown()}static registerOTELInstrumentation(e){p._getProxyProvider().addInstrumentation(e)}static getOTELTracer(){return p._getProxyProvider().getTracer(ue)}static startSpan(e,t){let s=p.getOTELTracer().startSpan(e,{attributes:t});return p._emitPartial(),s}static startActiveSpan(e,t,s){return p.getOTELTracer().startActiveSpan(e,{attributes:s},(o)=>{p._emitPartial();let n=t(o);if(n instanceof Promise)return n.finally(()=>{o.end()});return o.end(),n})}static span(e,t){return p.startActiveSpan(e,(s)=>{try{let o=t(s);if(o instanceof Promise)return o.catch((n)=>{throw s.setStatus({code:y.SpanStatusCode.ERROR,message:String(n)}),s.recordException(n),n});return o}catch(o){throw s.setStatus({code:y.SpanStatusCode.ERROR,message:String(o)}),s.recordException(o),o}})}static with(e,t){return p.span(e,t)}static observe(e,t="span",s,o=!0,n=!0,i=!1){let l=p._getProxyProvider(),m=(u)=>{let _=s??u.name;return(...h)=>{return l.getTracer(ue).startActiveSpan(_,(E)=>{if(t)E.setAttribute("judgment.span_kind",t);try{if(o)E.setAttribute("judgment.input",v(Me(u,h),p._getSerializer()));p._emitPartial();let d=u(...h);if(d instanceof Promise)return d.then((a)=>{if(n)E.setAttribute("judgment.output",v(a,p._getSerializer()));return a}).catch((a)=>{throw E.recordException(a),E.setStatus({code:y.SpanStatusCode.ERROR,message:String(a)}),a}).finally(()=>{E.end()});if(n)E.setAttribute("judgment.output",v(d,p._getSerializer()));return E.end(),d}catch(d){throw E.recordException(d),E.setStatus({code:y.SpanStatusCode.ERROR,message:String(d)}),E.end(),d}})}};if(!e)return m;return m(e)}static setSpanKind(e){if(!e)return;let t=p._getProxyProvider().getCurrentSpan();if(t?.isRecording())t.setAttribute("judgment.span_kind",e)}static setLLMSpan(){p.setSpanKind("llm")}static setToolSpan(){p.setSpanKind("tool")}static setGeneralSpan(){p.setSpanKind("span")}static setAttribute(e,t){let s=p._getProxyProvider().getCurrentSpan();if(!s?.isRecording())return;if(!e||t==null)return;s.setAttribute(e,v(t,p._getSerializer()))}static setAttributes(e){for(let[t,s]of Object.entries(e))p.setAttribute(t,s)}static setInput(e){p.setAttribute("judgment.input",e)}static setOutput(e){p.setAttribute("judgment.output",e)}static recordLLMMetadata(e){let t=p._getProxyProvider().getCurrentSpan();if(!t?.isRecording())return;if(typeof e.model==="string")t.setAttribute("judgment.llm.model",e.model);if(typeof e.provider==="string")t.setAttribute("judgment.llm.provider",e.provider);if(typeof e.non_cached_input_tokens==="number")t.setAttribute("judgment.usage.non_cached_input_tokens",e.non_cached_input_tokens);if(typeof e.output_tokens==="number")t.setAttribute("judgment.usage.output_tokens",e.output_tokens);if(typeof e.cache_read_input_tokens==="number")t.setAttribute("judgment.usage.cache_read_input_tokens",e.cache_read_input_tokens);if(typeof e.cache_creation_input_tokens==="number")t.setAttribute("judgment.usage.cache_creation_input_tokens",e.cache_creation_input_tokens);if(typeof e.total_cost_usd==="number")t.setAttribute("judgment.usage.total_cost_usd",e.total_cost_usd)}static setCustomerId(e){let t=p._getProxyProvider(),s=t.getCurrentSpan();if(!s?.isRecording())return;s.setAttribute("judgment.customer_id",e);let o=t.getCurrentContext().setValue(g,e);t.attachContext(o)}static setSessionId(e){let t=p._getProxyProvider(),s=t.getCurrentSpan();if(!s?.isRecording())return;let o=s.spanContext();if(!o.traceId||!(o.traceFlags&1))return;s.setAttribute("judgment.session_id",e);let n=t.getCurrentContext().setValue(U,e);t.attachContext(n)}static tag(e){if(!e||Array.isArray(e)&&e.length===0)return;let s=p._getProxyProvider().getActiveTracer();if(!s?.projectId||!s._client)return;let o=p._getCurrentTraceAndSpanId();if(!o)return;let[n]=o,i=Array.isArray(e)?e:[e];s._client.postV1projectsTracesByTraceIdTags(s.projectId,n,{tags:i}).catch((l)=>{r.error(`tag failed: ${String(l)}`)})}static _pendingEvals=new Map;static asyncEvaluate(e,t){let s=p._getProxyProvider(),o=s.getActiveTracer();if(!o){r.warning("asyncEvaluate: no active tracer");return}if(!o.projectId){r.warning("asyncEvaluate: no project configured");return}let n=s.getCurrentSpan();if(!n?.isRecording()){r.warning("asyncEvaluate: no active span");return}let i=n.spanContext(),l=`${i.traceId}:${i.spanId}`,m=p._pendingEvals.get(l)??[],u={project_id:o.projectId,eval_name:`async_evaluate_${e}_${m.length}`,judges:[{name:e}],examples:[{...t,example_id:Ee.randomUUID(),created_at:new Date().toISOString(),trace_id:i.traceId,span_id:i.spanId}],is_offline:!1,is_behavior:!1};m.push(u),p._pendingEvals.set(l,m),n.setAttribute("judgment.pending_trace_eval",JSON.stringify(m))}}function Me(e,t){try{let s=ee(e).map((n)=>n.replace(/^\.\.\./,"").split("=")[0].trim()).filter((n)=>n.length>0),o={};return s.forEach((n,i)=>{if(i<t.length)o[n]=t[i]}),o}catch{return{}}}var Re=require("@opentelemetry/exporter-trace-otlp-http");class f{_delegate;constructor(e,t,s,o){this._delegate=new Re.OTLPTraceExporter({url:e,headers:{Authorization:`Bearer ${t}`,"X-Organization-Id":s,"X-Project-Id":o}})}export(e,t){r.info(`Exported ${e.length} spans`),this._delegate?.export(e,t)}shutdown(){return this._delegate?.shutdown()??Promise.resolve()}forceFlush(){return this._delegate?.forceFlush()??Promise.resolve()}}var ce=require("@opentelemetry/core");class P extends f{constructor(){super("https://api.judgmentlabs.ai/otel/v1/traces","","","");this._delegate=null}export(e,t){t({code:ce.ExportResultCode.SUCCESS})}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}}var de=require("@opentelemetry/sdk-trace-base");var _e=[];function D(e){_e.push(e)}function M(){return _e.map((e)=>e())}class Q{onStart(e,t){let s=t.getValue(g);if(s)e.setAttribute("judgment.customer_id",s)}onEnd(e){}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}D(()=>new Q);class H{onStart(e,t){let s=t.getValue(U);if(s)e.setAttribute("judgment.session_id",s)}onEnd(e){}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}D(()=>new H);function w(e){return`${e.traceId}:${e.spanId}`}function we(e){return e[0]===0&&e[1]===0}class T extends de.BatchSpanProcessor{tracer;_internalAttributes=new Map;constructor(e,t,s){super(t,s);this.tracer=e}_cleanupSpanState(e){this._internalAttributes.delete(e)}setInternalAttribute(e,t,s){let o=w(e),n=this._internalAttributes.get(o);if(!n)n=new Map,this._internalAttributes.set(o,n);n.set(t,s)}getInternalAttribute(e,t,s=null){let o=w(e),n=this._internalAttributes.get(o);if(!n)return s;return n.has(t)?n.get(t):s}_emitSpan(e){let t=e.spanContext(),s=w(t),o=this._internalAttributes.get(s);if(!o)o=new Map,this._internalAttributes.set(s,o);let n=o.get("judgment.update_id")??0;o.set("judgment.update_id",n+1);let i={...e.attributes,"judgment.update_id":n},l=Object.create(e);Object.defineProperty(l,"attributes",{value:i,writable:!1});let m=we(e.endTime)?e.startTime:e.endTime;Object.defineProperty(l,"endTime",{value:m,writable:!1}),super.onEnd(l)}emitPartial(){let t=R.getInstance().getCurrentSpan();if(!t?.isRecording())return;if(this.getInternalAttribute(t.spanContext(),"disable_partial_emit",!1))return;this._emitSpan(t)}onStart(e,t){for(let s of M())s.onStart(e,t)}onEnd(e){for(let n of M())n.onEnd(e);let t=e.spanContext();if(!this.getInternalAttribute(t,"cancelled",!1))this._emitSpan(e);let o=w(t);this._cleanupSpanState(o)}}class b extends T{constructor(){super(null,new P)}onStart(e,t){}onEnd(e){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}emitPartial(){}setInternalAttribute(e,t,s){}getInternalAttribute(e,t,s=null){return s}}var L=require("@opentelemetry/resources"),Z=require("@opentelemetry/sdk-trace-node");var ae=new Map,X=new Map;async function Se(e,t){let s=`org:${e.getOrganizationId()}:project:${t}`,o=ae.get(s);if(o)return o;let n=X.get(s);if(n)return n;let i=(async()=>{r.info(`Resolving project ID for project: ${t}`);let m=(await e.postV1projectsResolve({project_name:t})).project_id;if(!m)throw Error(`Project ID not found for project: ${t}`);return r.info(`Resolved project ID: ${m}`),ae.set(s,m),m})();X.set(s,i);try{return await i}finally{X.delete(s)}}var fe="0.9.3";var Pe=fe;class N extends p{_spanExporter=null;_spanProcessor=null;constructor(e,t,s,o,n,i,l,m,u,_){super(e,t,s,o,n,i,l,m,u,_)}static async init(e={}){let t=e.apiKey??C,s=e.organizationId??G,o=e.apiUrl??j,n=e.projectName??null,i=e.serializer??q,l=!0;if(!n)r.warning("project_name not provided. Tracer will not export spans."),l=!1;if(!t)r.warning("api_key not provided. Tracer will not export spans."),l=!1;if(!s)r.warning("organization_id not provided. Tracer will not export spans."),l=!1;if(!o)r.warning("api_url not provided. Tracer will not export spans."),l=!1;let m=null,u=null;if(l&&n&&t&&s&&o){if(m=new x(o,t,s),u=await Se(m,n).catch(()=>null),!u)r.warning(`Project '${n}' not found. Tracer will not export spans.`),l=!1}let _={"service.name":n??"unknown","telemetry.sdk.name":"judgeval","telemetry.sdk.version":Pe};if(e.environment)_["deployment.environment"]=e.environment;if(e.resourceAttributes)Object.assign(_,e.resourceAttributes);let h=L.defaultResource().merge(L.resourceFromAttributes(_)),z=new Z.NodeTracerProvider({resource:h}),E=new N(n,u,t,s,o,e.environment??null,i,z,m,l);if(l){let a=new Z.NodeTracerProvider({resource:h,spanProcessors:[E.getSpanProcessor()]});E._tracerProvider=a}if(R.getInstance().register(E),e.setActive??!0)E.setActive();return E}getSpanExporter(){if(this._spanExporter)return this._spanExporter;if(!this._enableMonitoring||!this.projectId||!this.apiKey||!this.organizationId||!this.apiUrl)this._spanExporter=new P;else{let e=this.apiUrl.endsWith("/")?this.apiUrl+"otel/v1/traces":this.apiUrl+"/otel/v1/traces";this._spanExporter=new f(e,this.apiKey,this.organizationId,this.projectId)}return this._spanExporter}getSpanProcessor(){if(this._spanProcessor)return this._spanProcessor;if(!this._enableMonitoring)this._spanProcessor=new b;else this._spanProcessor=new T(this,this.getSpanExporter());return this._spanProcessor}}
3
3
 
4
- //# debugId=857E7F3FE5951BB964756E2164756E21
4
+ //# debugId=57BEA594B633BC4564756E2164756E21
5
5
  //# sourceMappingURL=index.cjs.map
@@ -5,7 +5,7 @@
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 TriggerRootSpanRulesRequest,\n TriggerRootSpanRulesResponse,\n UntagPromptRequest,\n UntagPromptResponse,\n UploadCustomScorerRequest,\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 postOtelTriggerRootSpanRules(\n payload: TriggerRootSpanRulesRequest,\n ): Promise<TriggerRootSpanRulesResponse> {\n const url = this.baseUrl + \"/otel/trigger_root_span_rules\";\n return this.request(\"POST\", url, payload);\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(\n projectId: string,\n payload: UploadCustomScorerRequest,\n ): Promise<UploadCustomScorerResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/scorers/custom`;\n return this.request(\"POST\", url, payload);\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\";\nexport interface JudgevalConfig {\n apiKey?: string;\n organizationId?: string;\n apiUrl?: string;\n}\n\nexport class Judgeval {\n private readonly internalClient: JudgmentApiClient;\n\n protected constructor(config: JudgevalConfig = {}) {\n const apiKey = config.apiKey ?? JUDGMENT_API_KEY;\n const organizationId = config.organizationId ?? JUDGMENT_ORG_ID;\n const apiUrl = config.apiUrl ?? JUDGMENT_API_URL;\n\n if (!apiKey) {\n throw new Error(\"API key is required\");\n }\n if (!organizationId) {\n throw new Error(\"Organization ID is required\");\n }\n if (!apiUrl) {\n throw new Error(\"API URL is required\");\n }\n\n this.internalClient = new JudgmentApiClient(apiUrl, apiKey, organizationId);\n }\n\n static create(config: JudgevalConfig = {}): Judgeval {\n return new Judgeval(config);\n }\n}\n",
8
- "import {\n type Attributes,\n type Span,\n SpanStatusCode,\n type Tracer,\n} from \"@opentelemetry/api\";\nimport type { Instrumentation } from \"@opentelemetry/instrumentation\";\nimport type { BasicTracerProvider } from \"@opentelemetry/sdk-trace-base\";\nimport { randomUUID } from \"crypto\";\nimport { AttributeKeys } from \"../JudgmentAttributeKeys\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport type { PendingEvalPayload } from \"../internal/api/models/PendingEvalPayload\";\nimport { parseFunctionArgs } from \"../utils/annotate\";\nimport { Logger } from \"../utils/logger\";\nimport {\n safeStringify,\n serializeAttribute,\n Serializer,\n} from \"../utils/serializer\";\nimport { JudgmentTracerProvider } from \"./JudgmentTracerProvider\";\nimport type { JudgmentSpanExporter } from \"./exporters/JudgmentSpanExporter\";\nimport type { JudgmentSpanProcessor } from \"./processors/JudgmentSpanProcessor\";\nimport {\n CUSTOMER_ID_KEY,\n SESSION_ID_KEY,\n} from \"./processors/_lifecycles/contextKeys\";\n\nconst TRACER_NAME = \"judgeval\";\n\nexport interface LLMMetadata {\n non_cached_input_tokens?: number | null | undefined;\n output_tokens?: number | null | undefined;\n cache_read_input_tokens?: number | null | undefined;\n cache_creation_input_tokens?: number | null | undefined;\n total_cost_usd?: number | null | undefined;\n}\n\nexport interface TracerConfig {\n projectName?: string;\n apiKey?: string;\n organizationId?: string;\n apiUrl?: string;\n environment?: string;\n setActive?: boolean;\n serializer?: (value: unknown) => string;\n resourceAttributes?: Record<string, string>;\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 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 const tracer = BaseTracer._getProxyProvider().getActiveTracer();\n if (!tracer) return;\n tracer.getSpanProcessor().emitPartial();\n }\n\n // ------------------------------------------------------------------ //\n // Static API: Span Access & Lifecycle //\n // ------------------------------------------------------------------ //\n\n static getCurrentSpan(): Span | undefined {\n const proxy = BaseTracer._getProxyProvider();\n return proxy.getCurrentSpan();\n }\n\n static async forceFlush(): Promise<void> {\n const proxy = BaseTracer._getProxyProvider();\n await proxy.forceFlush();\n }\n\n static async shutdown(): Promise<void> {\n const proxy = BaseTracer._getProxyProvider();\n await proxy.shutdown();\n }\n\n static registerOTELInstrumentation(instrumentor: Instrumentation): void {\n const proxy = BaseTracer._getProxyProvider();\n proxy.addInstrumentation(instrumentor);\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Creation (OTEL-like signatures) //\n // ------------------------------------------------------------------ //\n\n static getOTELTracer(): Tracer {\n const proxy = BaseTracer._getProxyProvider();\n return proxy.getTracer(TRACER_NAME);\n }\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 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 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 static with<T>(spanName: string, fn: (span: Span) => T): T {\n return BaseTracer.span(spanName, fn);\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 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 static setSpanKind(kind: string): void {\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 static setLLMSpan(): void {\n BaseTracer.setSpanKind(\"llm\");\n }\n\n static setToolSpan(): void {\n BaseTracer.setSpanKind(\"tool\");\n }\n\n static setGeneralSpan(): void {\n BaseTracer.setSpanKind(\"span\");\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Attribute Operations //\n // ------------------------------------------------------------------ //\n\n static setAttribute(key: string, value: unknown): void {\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 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 static setInput(inputData: unknown): void {\n BaseTracer.setAttribute(AttributeKeys.JUDGMENT_INPUT, inputData);\n }\n\n static setOutput(outputData: unknown): void {\n BaseTracer.setAttribute(AttributeKeys.JUDGMENT_OUTPUT, outputData);\n }\n\n static recordLLMMetadata(metadata: LLMMetadata): void {\n const currentSpan = BaseTracer._getProxyProvider().getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\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 // Static: Context Propagation //\n // ------------------------------------------------------------------ //\n\n static setCustomerId(customerId: string): void {\n const proxy = BaseTracer._getProxyProvider();\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n currentSpan.setAttribute(AttributeKeys.JUDGMENT_CUSTOMER_ID, customerId);\n const ctx = proxy.getCurrentContext().setValue(CUSTOMER_ID_KEY, customerId);\n proxy.attachContext(ctx);\n }\n\n static setSessionId(sessionId: string): void {\n const proxy = BaseTracer._getProxyProvider();\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n const spanCtx = currentSpan.spanContext();\n if (!spanCtx.traceId || !(spanCtx.traceFlags & 0x01)) return;\n currentSpan.setAttribute(AttributeKeys.JUDGMENT_SESSION_ID, sessionId);\n const ctx = proxy.getCurrentContext().setValue(SESSION_ID_KEY, sessionId);\n proxy.attachContext(ctx);\n }\n\n // ------------------------------------------------------------------ //\n // Static: Tags //\n // ------------------------------------------------------------------ //\n\n static tag(tags: string | string[]): void {\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 // Static API: Async Evaluation //\n // ------------------------------------------------------------------ //\n\n // TODO: cleanup?\n private static _pendingEvals = new Map<string, PendingEvalPayload[]>();\n\n static asyncEvaluate(judge: string, example?: Record<string, unknown>): void {\n const proxy = BaseTracer._getProxyProvider();\n const tracer = proxy.getActiveTracer();\n if (!tracer) {\n Logger.warning(\"asyncEvaluate: no active tracer\");\n return;\n }\n if (!tracer.projectId) {\n Logger.warning(\"asyncEvaluate: no project configured\");\n return;\n }\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) {\n Logger.warning(\"asyncEvaluate: no active span\");\n return;\n }\n\n const ctx = currentSpan.spanContext();\n const spanKey = `${ctx.traceId}:${ctx.spanId}`;\n const payloads = BaseTracer._pendingEvals.get(spanKey) ?? [];\n\n const payload: PendingEvalPayload = {\n project_id: tracer.projectId,\n eval_name: `async_evaluate_${judge}_${payloads.length}`,\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\n payloads.push(payload);\n BaseTracer._pendingEvals.set(spanKey, payloads);\n\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_PENDING_TRACE_EVAL,\n JSON.stringify(payloads),\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 Span,\n SpanStatusCode,\n type Tracer,\n} from \"@opentelemetry/api\";\nimport type { Instrumentation } from \"@opentelemetry/instrumentation\";\nimport type { BasicTracerProvider } from \"@opentelemetry/sdk-trace-base\";\nimport { randomUUID } from \"crypto\";\nimport { AttributeKeys } from \"../JudgmentAttributeKeys\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport type { PendingEvalPayload } from \"../internal/api/models/PendingEvalPayload\";\nimport { parseFunctionArgs } from \"../utils/annotate\";\nimport { Logger } from \"../utils/logger\";\nimport {\n safeStringify,\n serializeAttribute,\n Serializer,\n} from \"../utils/serializer\";\nimport { Maybe } from \"../utils/type-helpers\";\nimport { JudgmentTracerProvider } from \"./JudgmentTracerProvider\";\nimport type { JudgmentSpanExporter } from \"./exporters/JudgmentSpanExporter\";\nimport type { JudgmentSpanProcessor } from \"./processors/JudgmentSpanProcessor\";\nimport {\n CUSTOMER_ID_KEY,\n SESSION_ID_KEY,\n} from \"./processors/_lifecycles/contextKeys\";\n\nconst TRACER_NAME = \"judgeval\";\n\nexport interface LLMMetadata {\n model?: Maybe<string>;\n provider?: Maybe<string>;\n non_cached_input_tokens?: Maybe<number>;\n output_tokens?: Maybe<number>;\n cache_read_input_tokens?: Maybe<number>;\n cache_creation_input_tokens?: Maybe<number>;\n total_cost_usd?: Maybe<number>;\n}\n\nexport interface TracerConfig {\n projectName?: string;\n apiKey?: string;\n organizationId?: string;\n apiUrl?: string;\n environment?: string;\n setActive?: boolean;\n serializer?: (value: unknown) => string;\n resourceAttributes?: Record<string, string>;\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 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 const tracer = BaseTracer._getProxyProvider().getActiveTracer();\n if (!tracer) return;\n tracer.getSpanProcessor().emitPartial();\n }\n\n // ------------------------------------------------------------------ //\n // Static API: Span Access & Lifecycle //\n // ------------------------------------------------------------------ //\n\n static getCurrentSpan(): Span | undefined {\n const proxy = BaseTracer._getProxyProvider();\n return proxy.getCurrentSpan();\n }\n\n static async forceFlush(): Promise<void> {\n const proxy = BaseTracer._getProxyProvider();\n await proxy.forceFlush();\n }\n\n static async shutdown(): Promise<void> {\n const proxy = BaseTracer._getProxyProvider();\n await proxy.shutdown();\n }\n\n static registerOTELInstrumentation(instrumentor: Instrumentation): void {\n const proxy = BaseTracer._getProxyProvider();\n proxy.addInstrumentation(instrumentor);\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Creation (OTEL-like signatures) //\n // ------------------------------------------------------------------ //\n\n static getOTELTracer(): Tracer {\n const proxy = BaseTracer._getProxyProvider();\n return proxy.getTracer(TRACER_NAME);\n }\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 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 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 static with<T>(spanName: string, fn: (span: Span) => T): T {\n return BaseTracer.span(spanName, fn);\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 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 static setSpanKind(kind: string): void {\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 static setLLMSpan(): void {\n BaseTracer.setSpanKind(\"llm\");\n }\n\n static setToolSpan(): void {\n BaseTracer.setSpanKind(\"tool\");\n }\n\n static setGeneralSpan(): void {\n BaseTracer.setSpanKind(\"span\");\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Attribute Operations //\n // ------------------------------------------------------------------ //\n\n static setAttribute(key: string, value: unknown): void {\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 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 static setInput(inputData: unknown): void {\n BaseTracer.setAttribute(AttributeKeys.JUDGMENT_INPUT, inputData);\n }\n\n static setOutput(outputData: unknown): void {\n BaseTracer.setAttribute(AttributeKeys.JUDGMENT_OUTPUT, outputData);\n }\n\n static recordLLMMetadata(metadata: LLMMetadata): void {\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 // Static: Context Propagation //\n // ------------------------------------------------------------------ //\n\n static setCustomerId(customerId: string): void {\n const proxy = BaseTracer._getProxyProvider();\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n currentSpan.setAttribute(AttributeKeys.JUDGMENT_CUSTOMER_ID, customerId);\n const ctx = proxy.getCurrentContext().setValue(CUSTOMER_ID_KEY, customerId);\n proxy.attachContext(ctx);\n }\n\n static setSessionId(sessionId: string): void {\n const proxy = BaseTracer._getProxyProvider();\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n const spanCtx = currentSpan.spanContext();\n if (!spanCtx.traceId || !(spanCtx.traceFlags & 0x01)) return;\n currentSpan.setAttribute(AttributeKeys.JUDGMENT_SESSION_ID, sessionId);\n const ctx = proxy.getCurrentContext().setValue(SESSION_ID_KEY, sessionId);\n proxy.attachContext(ctx);\n }\n\n // ------------------------------------------------------------------ //\n // Static: Tags //\n // ------------------------------------------------------------------ //\n\n static tag(tags: string | string[]): void {\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 // Static API: Async Evaluation //\n // ------------------------------------------------------------------ //\n\n // TODO: cleanup?\n private static _pendingEvals = new Map<string, PendingEvalPayload[]>();\n\n static asyncEvaluate(judge: string, example?: Record<string, unknown>): void {\n const proxy = BaseTracer._getProxyProvider();\n const tracer = proxy.getActiveTracer();\n if (!tracer) {\n Logger.warning(\"asyncEvaluate: no active tracer\");\n return;\n }\n if (!tracer.projectId) {\n Logger.warning(\"asyncEvaluate: no project configured\");\n return;\n }\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) {\n Logger.warning(\"asyncEvaluate: no active span\");\n return;\n }\n\n const ctx = currentSpan.spanContext();\n const spanKey = `${ctx.traceId}:${ctx.spanId}`;\n const payloads = BaseTracer._pendingEvals.get(spanKey) ?? [];\n\n const payload: PendingEvalPayload = {\n project_id: tracer.projectId,\n eval_name: `async_evaluate_${judge}_${payloads.length}`,\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\n payloads.push(payload);\n BaseTracer._pendingEvals.set(spanKey, payloads);\n\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_PENDING_TRACE_EVAL,\n JSON.stringify(payloads),\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\nexport class Logger {\n private static readonly RESET = \"\\x1b[0m\";\n private static readonly RED = \"\\x1b[31m\";\n private static readonly YELLOW = \"\\x1b[33m\";\n private static readonly GRAY = \"\\x1b[90m\";\n\n public static Level = {\n DEBUG: 0,\n INFO: 1,\n WARNING: 2,\n ERROR: 3,\n CRITICAL: 4,\n } as const;\n\n private static initialized = false;\n private static currentLevel: number = Logger.Level.WARNING;\n private static useColor = true;\n\n private static initialize(): void {\n if (!Logger.initialized) {\n const noColor = process.env.JUDGMENT_NO_COLOR;\n Logger.useColor = !noColor && process.stdout.isTTY;\n\n const logLevel = JUDGMENT_LOG_LEVEL.toLowerCase();\n if (logLevel) {\n const levelMap: Record<string, number> = {\n debug: Logger.Level.DEBUG,\n info: Logger.Level.INFO,\n warning: Logger.Level.WARNING,\n warn: Logger.Level.WARNING,\n error: Logger.Level.ERROR,\n critical: Logger.Level.CRITICAL,\n };\n Logger.currentLevel = levelMap[logLevel] ?? Logger.Level.WARNING;\n }\n\n Logger.initialized = true;\n }\n }\n\n public static setLevel(level: number): void {\n Logger.currentLevel = level;\n }\n\n public static setUseColor(useColor: boolean): void {\n Logger.useColor = useColor;\n }\n\n private static log(level: number, message: string): void {\n Logger.initialize();\n\n if (level < Logger.currentLevel) {\n return;\n }\n\n const timestamp = new Date()\n .toISOString()\n .replace(\"T\", \" \")\n .substring(0, 19);\n const levelName =\n Object.keys(Logger.Level).find(\n (key) => Logger.Level[key as keyof typeof Logger.Level] === level,\n ) ?? \"UNKNOWN\";\n let formattedMessage = `${timestamp} - judgeval - ${levelName} - ${message}`;\n\n if (Logger.useColor) {\n const color =\n level === Logger.Level.DEBUG || level === Logger.Level.INFO\n ? Logger.GRAY\n : level === Logger.Level.WARNING\n ? Logger.YELLOW\n : Logger.RED;\n formattedMessage = `${color}${formattedMessage}${Logger.RESET}`;\n }\n\n const output =\n level >= Logger.Level.ERROR ? process.stderr : process.stdout;\n output.write(formattedMessage + \"\\n\");\n }\n\n public static debug(message: string): void {\n Logger.log(Logger.Level.DEBUG, message);\n }\n\n public static info(message: string): void {\n Logger.log(Logger.Level.INFO, message);\n }\n\n public static warning(message: string): void {\n Logger.log(Logger.Level.WARNING, message);\n }\n\n public static warn(message: string): void {\n Logger.log(Logger.Level.WARNING, message);\n }\n\n public static error(message: string): void {\n Logger.log(Logger.Level.ERROR, message);\n }\n\n public static critical(message: string): void {\n Logger.log(Logger.Level.CRITICAL, message);\n }\n}\n",
11
11
  "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",
@@ -14,7 +14,7 @@
14
14
  "export const CUSTOMER_ID_KEY = Symbol.for(\"judgment.customer_id\");\nexport const SESSION_ID_KEY = Symbol.for(\"judgment.session_id\");\n",
15
15
  "import type { ExportResult } from \"@opentelemetry/core\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport type { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../../utils/logger\";\n\nexport class JudgmentSpanExporter implements SpanExporter {\n protected _delegate: OTLPTraceExporter | null;\n\n constructor(\n endpoint: string,\n apiKey: string,\n organizationId: string,\n projectId: string,\n ) {\n this._delegate = new OTLPTraceExporter({\n url: endpoint,\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"X-Organization-Id\": organizationId,\n \"X-Project-Id\": projectId,\n },\n });\n }\n\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n Logger.info(`Exported ${spans.length} spans`);\n this._delegate?.export(spans, resultCallback);\n }\n\n shutdown(): Promise<void> {\n return this._delegate?.shutdown() ?? Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return this._delegate?.forceFlush() ?? Promise.resolve();\n }\n}\n",
16
16
  "import { ExportResultCode, type ExportResult } from \"@opentelemetry/core\";\nimport type { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport { JudgmentSpanExporter } from \"./JudgmentSpanExporter\";\n\nexport class NoOpSpanExporter extends JudgmentSpanExporter {\n constructor() {\n // Not used.\n super(\"https://api.judgmentlabs.ai/otel/v1/traces\", \"\", \"\", \"\");\n this._delegate = null;\n }\n\n override export(\n _spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n resultCallback({ code: ExportResultCode.SUCCESS });\n }\n\n override shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n override forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n",
17
- "import type { Context, SpanContext } from \"@opentelemetry/api\";\nimport {\n BatchSpanProcessor,\n type ReadableSpan,\n type Span,\n type SpanExporter,\n} from \"@opentelemetry/sdk-trace-base\";\nimport {\n AttributeKeys,\n InternalAttributeKeys,\n} from \"../../JudgmentAttributeKeys\";\nimport type { BaseTracer } from \"../BaseTracer\";\nimport { JudgmentTracerProvider } from \"../JudgmentTracerProvider\";\nimport { getAll } from \"./_lifecycles\";\n\ntype SpanKey = `${string}:${string}`;\n\nfunction makeSpanKey(ctx: SpanContext): SpanKey {\n return `${ctx.traceId}:${ctx.spanId}`;\n}\n\nexport class JudgmentSpanProcessor extends BatchSpanProcessor {\n tracer: BaseTracer | null;\n private _internalAttributes = new Map<SpanKey, Map<string, unknown>>();\n\n constructor(\n tracer: BaseTracer | null,\n exporter: SpanExporter,\n config?: {\n maxQueueSize?: number;\n scheduledDelayMillis?: number;\n maxExportBatchSize?: number;\n exportTimeoutMillis?: number;\n },\n ) {\n super(exporter, config);\n this.tracer = tracer;\n }\n\n private _cleanupSpanState(spanKey: SpanKey): void {\n this._internalAttributes.delete(spanKey);\n }\n\n setInternalAttribute(\n spanContext: SpanContext,\n key: string,\n value: unknown,\n ): void {\n const spanKey = makeSpanKey(spanContext);\n let attrs = this._internalAttributes.get(spanKey);\n if (!attrs) {\n attrs = new Map();\n this._internalAttributes.set(spanKey, attrs);\n }\n attrs.set(key, value);\n }\n\n getInternalAttribute(\n spanContext: SpanContext,\n key: string,\n defaultValue: unknown = null,\n ): unknown {\n const spanKey = makeSpanKey(spanContext);\n const attrs = this._internalAttributes.get(spanKey);\n if (!attrs) return defaultValue;\n return attrs.has(key) ? attrs.get(key) : defaultValue;\n }\n\n private _emitSpan(span: ReadableSpan): void {\n const ctx = span.spanContext();\n const spanKey = makeSpanKey(ctx);\n let attrs = this._internalAttributes.get(spanKey);\n if (!attrs) {\n attrs = new Map();\n this._internalAttributes.set(spanKey, attrs);\n }\n\n const currId =\n (attrs.get(AttributeKeys.JUDGMENT_UPDATE_ID) as number | undefined) ?? 0;\n attrs.set(AttributeKeys.JUDGMENT_UPDATE_ID, currId + 1);\n\n const newAttributes = {\n ...span.attributes,\n [AttributeKeys.JUDGMENT_UPDATE_ID]: currId,\n };\n\n const emittedSpan = Object.create(span) as ReadableSpan;\n Object.defineProperty(emittedSpan, \"attributes\", {\n value: newAttributes,\n writable: false,\n });\n Object.defineProperty(emittedSpan, \"endTime\", {\n value: span.startTime,\n writable: false,\n });\n\n super.onEnd(emittedSpan);\n }\n\n emitPartial(): void {\n const proxy = JudgmentTracerProvider.getInstance();\n const span = proxy.getCurrentSpan();\n if (!span?.isRecording()) return;\n if (\n this.getInternalAttribute(\n span.spanContext(),\n InternalAttributeKeys.DISABLE_PARTIAL_EMIT,\n false,\n )\n )\n return;\n // TODO: review, is this fine?\n this._emitSpan(span as unknown as ReadableSpan);\n }\n\n onStart(span: Span, parentContext: Context): void {\n for (const processor of getAll()) {\n processor.onStart(span, parentContext);\n }\n }\n\n onEnd(span: ReadableSpan): void {\n for (const processor of getAll()) {\n processor.onEnd(span);\n }\n const ctx = span.spanContext();\n const isCancelled = this.getInternalAttribute(\n ctx,\n InternalAttributeKeys.CANCELLED,\n false,\n );\n if (!isCancelled) {\n this._emitSpan(span);\n }\n const spanKey = makeSpanKey(ctx);\n this._cleanupSpanState(spanKey);\n }\n}\n",
17
+ "import type { Context, HrTime, SpanContext } from \"@opentelemetry/api\";\nimport {\n BatchSpanProcessor,\n type ReadableSpan,\n type Span,\n type SpanExporter,\n} from \"@opentelemetry/sdk-trace-base\";\nimport {\n AttributeKeys,\n InternalAttributeKeys,\n} from \"../../JudgmentAttributeKeys\";\nimport type { BaseTracer } from \"../BaseTracer\";\nimport { JudgmentTracerProvider } from \"../JudgmentTracerProvider\";\nimport { getAll } from \"./_lifecycles\";\n\ntype SpanKey = `${string}:${string}`;\n\nfunction makeSpanKey(ctx: SpanContext): SpanKey {\n return `${ctx.traceId}:${ctx.spanId}`;\n}\n\nfunction isZeroHrTime(hrTime: HrTime): boolean {\n return hrTime[0] === 0 && hrTime[1] === 0;\n}\n\nexport class JudgmentSpanProcessor extends BatchSpanProcessor {\n tracer: BaseTracer | null;\n private _internalAttributes = new Map<SpanKey, Map<string, unknown>>();\n\n constructor(\n tracer: BaseTracer | null,\n exporter: SpanExporter,\n config?: {\n maxQueueSize?: number;\n scheduledDelayMillis?: number;\n maxExportBatchSize?: number;\n exportTimeoutMillis?: number;\n },\n ) {\n super(exporter, config);\n this.tracer = tracer;\n }\n\n private _cleanupSpanState(spanKey: SpanKey): void {\n this._internalAttributes.delete(spanKey);\n }\n\n setInternalAttribute(\n spanContext: SpanContext,\n key: string,\n value: unknown,\n ): void {\n const spanKey = makeSpanKey(spanContext);\n let attrs = this._internalAttributes.get(spanKey);\n if (!attrs) {\n attrs = new Map();\n this._internalAttributes.set(spanKey, attrs);\n }\n attrs.set(key, value);\n }\n\n getInternalAttribute(\n spanContext: SpanContext,\n key: string,\n defaultValue: unknown = null,\n ): unknown {\n const spanKey = makeSpanKey(spanContext);\n const attrs = this._internalAttributes.get(spanKey);\n if (!attrs) return defaultValue;\n return attrs.has(key) ? attrs.get(key) : defaultValue;\n }\n\n private _emitSpan(span: ReadableSpan): void {\n const ctx = span.spanContext();\n const spanKey = makeSpanKey(ctx);\n let attrs = this._internalAttributes.get(spanKey);\n if (!attrs) {\n attrs = new Map();\n this._internalAttributes.set(spanKey, attrs);\n }\n\n const currId =\n (attrs.get(AttributeKeys.JUDGMENT_UPDATE_ID) as number | undefined) ?? 0;\n attrs.set(AttributeKeys.JUDGMENT_UPDATE_ID, currId + 1);\n\n const newAttributes = {\n ...span.attributes,\n [AttributeKeys.JUDGMENT_UPDATE_ID]: currId,\n };\n\n const emittedSpan = Object.create(span) as ReadableSpan;\n Object.defineProperty(emittedSpan, \"attributes\", {\n value: newAttributes,\n writable: false,\n });\n const endTime = isZeroHrTime(span.endTime) ? span.startTime : span.endTime;\n Object.defineProperty(emittedSpan, \"endTime\", {\n value: endTime,\n writable: false,\n });\n\n super.onEnd(emittedSpan);\n }\n\n emitPartial(): void {\n const proxy = JudgmentTracerProvider.getInstance();\n const span = proxy.getCurrentSpan();\n if (!span?.isRecording()) return;\n if (\n this.getInternalAttribute(\n span.spanContext(),\n InternalAttributeKeys.DISABLE_PARTIAL_EMIT,\n false,\n )\n )\n return;\n // TODO: review, is this fine?\n this._emitSpan(span as unknown as ReadableSpan);\n }\n\n onStart(span: Span, parentContext: Context): void {\n for (const processor of getAll()) {\n processor.onStart(span, parentContext);\n }\n }\n\n onEnd(span: ReadableSpan): void {\n for (const processor of getAll()) {\n processor.onEnd(span);\n }\n const ctx = span.spanContext();\n const isCancelled = this.getInternalAttribute(\n ctx,\n InternalAttributeKeys.CANCELLED,\n false,\n );\n if (!isCancelled) {\n this._emitSpan(span);\n }\n const spanKey = makeSpanKey(ctx);\n this._cleanupSpanState(spanKey);\n }\n}\n",
18
18
  "import type { SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\n\ntype ProcessorFactory = () => SpanProcessor;\nconst processors: ProcessorFactory[] = [];\n\nexport function register(processorFactory: ProcessorFactory): void {\n processors.push(processorFactory);\n}\n\nexport function getAll(): SpanProcessor[] {\n return processors.map((factory) => factory());\n}\n\nexport function clear(): void {\n processors.length = 0;\n}\n",
19
19
  "import type { Context } from \"@opentelemetry/api\";\nimport type {\n ReadableSpan,\n Span,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { AttributeKeys } from \"../../../JudgmentAttributeKeys\";\nimport type { Maybe } from \"../../../utils/type-helpers\";\nimport { CUSTOMER_ID_KEY } from \"./contextKeys\";\nimport { register } from \"./registry\";\n\nclass CustomerIdProcessor implements SpanProcessor {\n onStart(span: Span, parentContext: Context): void {\n const customerId = parentContext.getValue(CUSTOMER_ID_KEY) as Maybe<string>;\n if (customerId) {\n span.setAttribute(AttributeKeys.JUDGMENT_CUSTOMER_ID, customerId);\n }\n }\n\n onEnd(_span: ReadableSpan): void {\n /* empty */\n }\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n}\n\nregister(() => new CustomerIdProcessor());\nexport { CustomerIdProcessor };\n",
20
20
  "import type { Context } from \"@opentelemetry/api\";\nimport type {\n ReadableSpan,\n Span,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { AttributeKeys } from \"../../../JudgmentAttributeKeys\";\nimport type { Maybe } from \"../../../utils/type-helpers\";\nimport { SESSION_ID_KEY } from \"./contextKeys\";\nimport { register } from \"./registry\";\n\nclass SessionIdProcessor implements SpanProcessor {\n onStart(span: Span, parentContext: Context): void {\n const sessionId = parentContext.getValue(SESSION_ID_KEY) as Maybe<string>;\n if (sessionId) {\n span.setAttribute(AttributeKeys.JUDGMENT_SESSION_ID, sessionId);\n }\n }\n\n onEnd(_span: ReadableSpan): void {\n /* empty */\n }\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n}\n\nregister(() => new SessionIdProcessor());\nexport { SessionIdProcessor };\n",
@@ -23,7 +23,7 @@
23
23
  "import type { JudgmentApiClient } from \"../internal/api\";\nimport { Logger } from \"./logger\";\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 response = await client.postV1projectsResolve({\n project_name: projectName,\n });\n const projectId = response.project_id;\n if (!projectId) {\n throw new Error(`Project ID not found for project: ${projectName}`);\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",
24
24
  "import { version } from \"../package.json\" with { type: \"json\" };\n\nexport const VERSION = version;\n"
25
25
  ],
26
- "mappings": "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",
27
- "debugId": "857E7F3FE5951BB964756E2164756E21",
26
+ "mappings": "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",
27
+ "debugId": "57BEA594B633BC4564756E2164756E21",
28
28
  "names": []
29
29
  }
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- function D(e,t){let s=process.env[e];if(!s)return t??null;return s}var N=D("JUDGMENT_API_KEY"),I=D("JUDGMENT_ORG_ID"),C=D("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),H=D("JUDGMENT_LOG_LEVEL","warn");class x{baseUrl;apiKey;organizationId;constructor(e,t,s){this.baseUrl=e,this.apiKey=t,this.organizationId=s}getBaseUrl(){return this.baseUrl}getApiKey(){return this.apiKey}getOrganizationId(){return this.organizationId}async request(e,t,s){let o=await fetch(t,{method:e,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId},body:s!==void 0?JSON.stringify(s):void 0});if(!o.ok){let n=await o.text();throw Error(`HTTP ${o.status}: ${n}`)}return o.json()}async postOtelV1traces(){let e=this.baseUrl+"/otel/v1/traces";return this.request("POST",e,{})}async postOtelTriggerRootSpanRules(e){let t=this.baseUrl+"/otel/trigger_root_span_rules";return this.request("POST",t,e)}async postV1projectsResolve(e){let t=this.baseUrl+"/v1/projects/resolve/";return this.request("POST",t,e)}async postV1projects(e){let t=this.baseUrl+"/v1/projects";return this.request("POST",t,e)}async deleteV1projects(e){let t=this.baseUrl+`/v1/projects/${e}`;return this.request("DELETE",t,{})}async postV1projectsDatasets(e,t){let s=this.baseUrl+`/v1/projects/${e}/datasets`;return this.request("POST",s,t)}async getV1projectsDatasets(e){let t=this.baseUrl+`/v1/projects/${e}/datasets`;return this.request("GET",t,void 0)}async postV1projectsDatasetsByDatasetNameExamples(e,t,s){let o=this.baseUrl+`/v1/projects/${e}/datasets/${t}/examples`;return this.request("POST",o,s)}async getV1projectsDatasetsByDatasetName(e,t){let s=this.baseUrl+`/v1/projects/${e}/datasets/${t}`;return this.request("GET",s,void 0)}async postV1projectsEvaluateExamples(e,t){let s=this.baseUrl+`/v1/projects/${e}/evaluate/examples`;return this.request("POST",s,t)}async postV1projectsEvaluateTraces(e,t){let s=this.baseUrl+`/v1/projects/${e}/evaluate/traces`;return this.request("POST",s,t)}async postV1projectsEvalResults(e,t){let s=this.baseUrl+`/v1/projects/${e}/eval-results`;return this.request("POST",s,t)}async postV1projectsEvalResultsExamples(e,t){let s=this.baseUrl+`/v1/projects/${e}/eval-results/examples`;return this.request("POST",s,t)}async getV1projectsExperimentsByRunId(e,t){let s=this.baseUrl+`/v1/projects/${e}/experiments/${t}`;return this.request("GET",s,void 0)}async postV1projectsEvalQueueExamples(e,t){let s=this.baseUrl+`/v1/projects/${e}/eval-queue/examples`;return this.request("POST",s,t)}async postV1projectsEvalQueueTraces(e,t){let s=this.baseUrl+`/v1/projects/${e}/eval-queue/traces`;return this.request("POST",s,t)}async getV1projectsPromptsByName(e,t,s,o){let n=new URLSearchParams;if(s!==void 0)n.set("commit_id",s);if(o!==void 0)n.set("tag",o);let i=this.baseUrl+`/v1/projects/${e}/prompts/${t}`+(n.toString()?"?"+n.toString():"");return this.request("GET",i,void 0)}async postV1projectsPrompts(e,t){let s=this.baseUrl+`/v1/projects/${e}/prompts`;return this.request("POST",s,t)}async postV1projectsPromptsByNameTags(e,t,s){let o=this.baseUrl+`/v1/projects/${e}/prompts/${t}/tags`;return this.request("POST",o,s)}async deleteV1projectsPromptsByNameTags(e,t,s){let o=this.baseUrl+`/v1/projects/${e}/prompts/${t}/tags`;return this.request("DELETE",o,s)}async getV1projectsPromptsByNameVersions(e,t){let s=this.baseUrl+`/v1/projects/${e}/prompts/${t}/versions`;return this.request("GET",s,void 0)}async getV1projectsScorers(e,t,s){let o=new URLSearchParams;if(t!==void 0)o.set("names",t);if(s!==void 0)o.set("is_trace",s);let n=this.baseUrl+`/v1/projects/${e}/scorers`+(o.toString()?"?"+o.toString():"");return this.request("GET",n,void 0)}async getV1projectsScorersByNameExists(e,t){let s=this.baseUrl+`/v1/projects/${e}/scorers/${t}/exists`;return this.request("GET",s,void 0)}async postV1projectsScorersCustom(e,t){let s=this.baseUrl+`/v1/projects/${e}/scorers/custom`;return this.request("POST",s,t)}async getV1projectsScorersCustomByNameExists(e,t){let s=this.baseUrl+`/v1/projects/${e}/scorers/custom/${t}/exists`;return this.request("GET",s,void 0)}async postV1projectsTracesByTraceIdTags(e,t,s){let o=this.baseUrl+`/v1/projects/${e}/traces/${t}/tags`;return this.request("POST",o,s)}async getV1e2eFetchTraceByProjectNameByTraceId(e,t){let s=this.baseUrl+`/v1/e2e_fetch_trace/${e}/${t}`;return this.request("GET",s,void 0)}async getV1e2eTracesPerProject(e,t,s){let o=new URLSearchParams;if(t!==void 0)o.set("limit",t);if(s!==void 0)o.set("offset",s);let n=this.baseUrl+`/v1/e2e_traces_per_project/${e}`+(o.toString()?"?"+o.toString():"");return this.request("GET",n,void 0)}async postV1e2eFetchSpanScore(e){let t=this.baseUrl+"/v1/e2e_fetch_span_score/";return this.request("POST",t,e)}}class b{internalClient;constructor(e={}){let t=e.apiKey??N,s=e.organizationId??I,o=e.apiUrl??C;if(!t)throw Error("API key is required");if(!s)throw Error("Organization ID is required");if(!o)throw Error("API URL is required");this.internalClient=new x(o,t,s)}static create(e={}){return new b(e)}}import{SpanStatusCode as A}from"@opentelemetry/api";import{randomUUID as De}from"crypto";var Re=/^([^(]+?)=>/,ce=/^[^(]*\(\s*([^)]*)\)/m,_e=/,/,ae=/^\s*(_?)(\S+?)\1\s*$/,de=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function Se(e){return Function.prototype.toString.call(e)}function fe(e){let t=Se(e).replace(de,"");return t.match(Re)||t.match(ce)}function X(e){let t=fe(e);if(!t||!t[1])return[];return t[1].split(_e).map((s)=>{return s.replace(ae,(n,i,l)=>l).trim()}).filter((s)=>s.length>0)}class r{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=r.Level.WARNING;static useColor=!0;static initialize(){if(!r.initialized){let e=process.env.JUDGMENT_NO_COLOR;r.useColor=!e&&process.stdout.isTTY;let t=H.toLowerCase();if(t){let s={debug:r.Level.DEBUG,info:r.Level.INFO,warning:r.Level.WARNING,warn:r.Level.WARNING,error:r.Level.ERROR,critical:r.Level.CRITICAL};r.currentLevel=s[t]??r.Level.WARNING}r.initialized=!0}}static setLevel(e){r.currentLevel=e}static setUseColor(e){r.useColor=e}static log(e,t){if(r.initialize(),e<r.currentLevel)return;let s=new Date().toISOString().replace("T"," ").substring(0,19),o=Object.keys(r.Level).find((l)=>r.Level[l]===e)??"UNKNOWN",n=`${s} - judgeval - ${o} - ${t}`;if(r.useColor)n=`${e===r.Level.DEBUG||e===r.Level.INFO?r.GRAY:e===r.Level.WARNING?r.YELLOW:r.RED}${n}${r.RESET}`;(e>=r.Level.ERROR?process.stderr:process.stdout).write(n+`
2
- `)}static debug(e){r.log(r.Level.DEBUG,e)}static info(e){r.log(r.Level.INFO,e)}static warning(e){r.log(r.Level.WARNING,e)}static warn(e){r.log(r.Level.WARNING,e)}static error(e){r.log(r.Level.ERROR,e)}static critical(e){r.log(r.Level.CRITICAL,e)}}var L;function Pe(e,t){if(typeof t==="bigint")return t.toString();if(typeof t==="object"&&t!==null){if(L.has(t))return"[Circular]";L.add(t)}return t}function G(e){try{let t=JSON.stringify(e);if(typeof t==="string")return t;return String(t)}catch{try{L=new WeakSet;let t=JSON.stringify(e,Pe);return typeof t==="string"?t:String(e)}catch(t){return r.error(`safeStringify failed: ${t}`),String(e)}}}function T(e,t){if(typeof e==="string"||typeof e==="number"||typeof e==="boolean")return e;return t(e)}import{INVALID_SPAN_CONTEXT as Te,context as ve,SpanStatusCode as se,trace as v}from"@opentelemetry/api";import{registerInstrumentations as ge}from"@opentelemetry/instrumentation";import{AsyncLocalStorage as Ue}from"async_hooks";import{context as d}from"@opentelemetry/api";import{AsyncLocalStorage as K}from"async_hooks";var Z=!1,$=null,B=new K,j=new K,z=d.active.bind(d),he=d.with.bind(d),xe=d.bind.bind(d);function J(){return B.getStore()===!0}function ee(e){if($=e,Z)return;let t=d;t.active=()=>{if(!J())return z();let s=j.getStore();if(s)return s;return $?$():z()},t.with=(s,o,n,...i)=>{if(!J())return he(s,o,n,...i);return j.run(s,()=>o.apply(n,i))},t.bind=(s,o)=>{if(!J())return xe(s,o);if(typeof o!=="function")return o;let n=o;return(...i)=>j.run(s,()=>n(...i))},Z=!0}function te(e,t){return B.run(!0,()=>j.run(e,t))}var ye="judgeval",F=new Ue;class oe{_provider;constructor(e){this._provider=e}startSpan(e,t,s){let o=s??this._provider.getCurrentContext();return this._provider._getDelegateTracer().startSpan(e,t,o)}startActiveSpan(e,...t){let s={},o=this._provider.getCurrentContext(),n;if(t.length===1)n=t[0];else if(t.length===2)s=t[0],n=t[1];else s=t[0],o=t[1],n=t[2];let i=this.startSpan(e,s,o);return this._provider.useSpan(i,!0,!0,!0,()=>n(i))}}class ne{startSpan(){return v.wrapSpanContext(Te)}startActiveSpan(e,...t){return(t.length===1?t[0]:t.length===2?t[1]:t[2])(this.startSpan())}}class R{static _instance=null;_activeTracer=null;_instrumentations=[];_noOpTracer;_proxyTracer;_tracers=new Set;constructor(){this._noOpTracer=new ne,this._proxyTracer=new oe(this),ee(()=>this.getCurrentContext())}static getInstance(){return R._instance??=new R,R._instance}static installAsGlobalTracerProvider(){let e=R.getInstance();return v.setGlobalTracerProvider(e)}register(e){this._tracers.add(e)}deregister(e){this._tracers.delete(e)}setActive(e){let t=this.getCurrentSpan();if(t?.isRecording()){if(v.getSpan(this.getCurrentContext())===t)return r.error("Cannot set_active() while a root span is active. Keeping existing tracer provider."),!1}return this.register(e),this._activeTracer=e,!0}getActiveTracer(){return this._activeTracer}getCurrentContext(){return F.getStore()??ve.active()}getCurrentSpan(){let e=this.getCurrentContext();return v.getSpan(e)}hasActiveRootSpan(){if(!this.getCurrentSpan()?.isRecording())return!1;return!0}_getDelegateTracer(){let e=this._activeTracer;if(!e)return r.debug("No active tracer, returning NoOpTracer"),this._noOpTracer;return e._tracerProvider.getTracer(ye)}getTracer(e,t,s){return this._proxyTracer}addInstrumentation(e){try{ge({tracerProvider:this,instrumentations:[e]}),this._instrumentations.push(e)}catch(t){r.error(`Failed to add instrumentation: ${String(t)}`)}}useSpan(e,t,s,o,n){let i=this.getCurrentContext(),l=v.setSpan(i,e);return F.run(l,()=>te(l,()=>{try{let m=n();if(m instanceof Promise)return m.catch((u)=>{if(e.isRecording()){if(s)e.recordException(u);if(o){let c=u;e.setStatus({code:se.ERROR,message:`${c.name}: ${c.message}`})}}throw u}).finally(()=>{if(t)e.end()});if(t)e.end();return m}catch(m){if(e.isRecording()){if(s)e.recordException(m);if(o){let u=m;e.setStatus({code:se.ERROR,message:`${u.name}: ${u.message}`})}}if(t)e.end();throw m}}))}attachContext(e){F.enterWith(e)}async forceFlush(){await Promise.all(Array.from(this._tracers).map((e)=>e._tracerProvider.forceFlush()))}async shutdown(){await Promise.all(Array.from(this._tracers).map((e)=>e._tracerProvider.shutdown())),this._activeTracer=null,this._tracers.clear()}}var g=Symbol.for("judgment.customer_id"),U=Symbol.for("judgment.session_id");var re="judgeval";class p{projectName;projectId;apiKey;organizationId;apiUrl;environment;serializer;_tracerProvider;_client;_enableMonitoring;constructor(e,t,s,o,n,i,l,m,u,c){this.projectName=e,this.projectId=t,this.apiKey=s,this.organizationId=o,this.apiUrl=n,this.environment=i,this.serializer=l,this._tracerProvider=m,this._client=u,this._enableMonitoring=c}setActive(){return R.getInstance().setActive(this)}static _getProxyProvider(){return R.getInstance()}static _getSerializer(){return p._getProxyProvider().getActiveTracer()?.serializer??G}static _getCurrentTraceAndSpanId(){let t=p._getProxyProvider().getCurrentSpan();if(!t?.isRecording())return null;let s=t.spanContext();if(!s.traceId||!(s.traceFlags&1))return null;return[s.traceId,s.spanId]}static _emitPartial(){let e=p._getProxyProvider().getActiveTracer();if(!e)return;e.getSpanProcessor().emitPartial()}static getCurrentSpan(){return p._getProxyProvider().getCurrentSpan()}static async forceFlush(){await p._getProxyProvider().forceFlush()}static async shutdown(){await p._getProxyProvider().shutdown()}static registerOTELInstrumentation(e){p._getProxyProvider().addInstrumentation(e)}static getOTELTracer(){return p._getProxyProvider().getTracer(re)}static startSpan(e,t){let s=p.getOTELTracer().startSpan(e,{attributes:t});return p._emitPartial(),s}static startActiveSpan(e,t,s){return p.getOTELTracer().startActiveSpan(e,{attributes:s},(o)=>{p._emitPartial();let n=t(o);if(n instanceof Promise)return n.finally(()=>{o.end()});return o.end(),n})}static span(e,t){return p.startActiveSpan(e,(s)=>{try{let o=t(s);if(o instanceof Promise)return o.catch((n)=>{throw s.setStatus({code:A.ERROR,message:String(n)}),s.recordException(n),n});return o}catch(o){throw s.setStatus({code:A.ERROR,message:String(o)}),s.recordException(o),o}})}static with(e,t){return p.span(e,t)}static observe(e,t="span",s,o=!0,n=!0,i=!1){let l=p._getProxyProvider(),m=(u)=>{let c=s??u.name;return(...h)=>{return l.getTracer(re).startActiveSpan(c,(E)=>{if(t)E.setAttribute("judgment.span_kind",t);try{if(o)E.setAttribute("judgment.input",T(Ne(u,h),p._getSerializer()));p._emitPartial();let _=u(...h);if(_ instanceof Promise)return _.then((a)=>{if(n)E.setAttribute("judgment.output",T(a,p._getSerializer()));return a}).catch((a)=>{throw E.recordException(a),E.setStatus({code:A.ERROR,message:String(a)}),a}).finally(()=>{E.end()});if(n)E.setAttribute("judgment.output",T(_,p._getSerializer()));return E.end(),_}catch(_){throw E.recordException(_),E.setStatus({code:A.ERROR,message:String(_)}),E.end(),_}})}};if(!e)return m;return m(e)}static setSpanKind(e){if(!e)return;let t=p._getProxyProvider().getCurrentSpan();if(t?.isRecording())t.setAttribute("judgment.span_kind",e)}static setLLMSpan(){p.setSpanKind("llm")}static setToolSpan(){p.setSpanKind("tool")}static setGeneralSpan(){p.setSpanKind("span")}static setAttribute(e,t){let s=p._getProxyProvider().getCurrentSpan();if(!s?.isRecording())return;if(!e||t==null)return;s.setAttribute(e,T(t,p._getSerializer()))}static setAttributes(e){for(let[t,s]of Object.entries(e))p.setAttribute(t,s)}static setInput(e){p.setAttribute("judgment.input",e)}static setOutput(e){p.setAttribute("judgment.output",e)}static recordLLMMetadata(e){let t=p._getProxyProvider().getCurrentSpan();if(!t?.isRecording())return;if(typeof e.non_cached_input_tokens==="number")t.setAttribute("judgment.usage.non_cached_input_tokens",e.non_cached_input_tokens);if(typeof e.output_tokens==="number")t.setAttribute("judgment.usage.output_tokens",e.output_tokens);if(typeof e.cache_read_input_tokens==="number")t.setAttribute("judgment.usage.cache_read_input_tokens",e.cache_read_input_tokens);if(typeof e.cache_creation_input_tokens==="number")t.setAttribute("judgment.usage.cache_creation_input_tokens",e.cache_creation_input_tokens);if(typeof e.total_cost_usd==="number")t.setAttribute("judgment.usage.total_cost_usd",e.total_cost_usd)}static setCustomerId(e){let t=p._getProxyProvider(),s=t.getCurrentSpan();if(!s?.isRecording())return;s.setAttribute("judgment.customer_id",e);let o=t.getCurrentContext().setValue(g,e);t.attachContext(o)}static setSessionId(e){let t=p._getProxyProvider(),s=t.getCurrentSpan();if(!s?.isRecording())return;let o=s.spanContext();if(!o.traceId||!(o.traceFlags&1))return;s.setAttribute("judgment.session_id",e);let n=t.getCurrentContext().setValue(U,e);t.attachContext(n)}static tag(e){if(!e||Array.isArray(e)&&e.length===0)return;let s=p._getProxyProvider().getActiveTracer();if(!s?.projectId||!s._client)return;let o=p._getCurrentTraceAndSpanId();if(!o)return;let[n]=o,i=Array.isArray(e)?e:[e];s._client.postV1projectsTracesByTraceIdTags(s.projectId,n,{tags:i}).catch((l)=>{r.error(`tag failed: ${String(l)}`)})}static _pendingEvals=new Map;static asyncEvaluate(e,t){let s=p._getProxyProvider(),o=s.getActiveTracer();if(!o){r.warning("asyncEvaluate: no active tracer");return}if(!o.projectId){r.warning("asyncEvaluate: no project configured");return}let n=s.getCurrentSpan();if(!n?.isRecording()){r.warning("asyncEvaluate: no active span");return}let i=n.spanContext(),l=`${i.traceId}:${i.spanId}`,m=p._pendingEvals.get(l)??[],u={project_id:o.projectId,eval_name:`async_evaluate_${e}_${m.length}`,judges:[{name:e}],examples:[{...t,example_id:De(),created_at:new Date().toISOString(),trace_id:i.traceId,span_id:i.spanId}],is_offline:!1,is_behavior:!1};m.push(u),p._pendingEvals.set(l,m),n.setAttribute("judgment.pending_trace_eval",JSON.stringify(m))}}function Ne(e,t){try{let s=X(e).map((n)=>n.replace(/^\.\.\./,"").split("=")[0].trim()).filter((n)=>n.length>0),o={};return s.forEach((n,i)=>{if(i<t.length)o[n]=t[i]}),o}catch{return{}}}import{OTLPTraceExporter as Ie}from"@opentelemetry/exporter-trace-otlp-http";class S{_delegate;constructor(e,t,s,o){this._delegate=new Ie({url:e,headers:{Authorization:`Bearer ${t}`,"X-Organization-Id":s,"X-Project-Id":o}})}export(e,t){r.info(`Exported ${e.length} spans`),this._delegate?.export(e,t)}shutdown(){return this._delegate?.shutdown()??Promise.resolve()}forceFlush(){return this._delegate?.forceFlush()??Promise.resolve()}}import{ExportResultCode as Ce}from"@opentelemetry/core";class f extends S{constructor(){super("https://api.judgmentlabs.ai/otel/v1/traces","","","");this._delegate=null}export(e,t){t({code:Ce.SUCCESS})}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}}import{BatchSpanProcessor as Ge}from"@opentelemetry/sdk-trace-base";var pe=[];function y(e){pe.push(e)}function q(){return pe.map((e)=>e())}class k{onStart(e,t){let s=t.getValue(g);if(s)e.setAttribute("judgment.customer_id",s)}onEnd(e){}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}y(()=>new k);class Y{onStart(e,t){let s=t.getValue(U);if(s)e.setAttribute("judgment.session_id",s)}onEnd(e){}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}y(()=>new Y);function O(e){return`${e.traceId}:${e.spanId}`}class P extends Ge{tracer;_internalAttributes=new Map;constructor(e,t,s){super(t,s);this.tracer=e}_cleanupSpanState(e){this._internalAttributes.delete(e)}setInternalAttribute(e,t,s){let o=O(e),n=this._internalAttributes.get(o);if(!n)n=new Map,this._internalAttributes.set(o,n);n.set(t,s)}getInternalAttribute(e,t,s=null){let o=O(e),n=this._internalAttributes.get(o);if(!n)return s;return n.has(t)?n.get(t):s}_emitSpan(e){let t=e.spanContext(),s=O(t),o=this._internalAttributes.get(s);if(!o)o=new Map,this._internalAttributes.set(s,o);let n=o.get("judgment.update_id")??0;o.set("judgment.update_id",n+1);let i={...e.attributes,"judgment.update_id":n},l=Object.create(e);Object.defineProperty(l,"attributes",{value:i,writable:!1}),Object.defineProperty(l,"endTime",{value:e.startTime,writable:!1}),super.onEnd(l)}emitPartial(){let t=R.getInstance().getCurrentSpan();if(!t?.isRecording())return;if(this.getInternalAttribute(t.spanContext(),"disable_partial_emit",!1))return;this._emitSpan(t)}onStart(e,t){for(let s of q())s.onStart(e,t)}onEnd(e){for(let n of q())n.onEnd(e);let t=e.spanContext();if(!this.getInternalAttribute(t,"cancelled",!1))this._emitSpan(e);let o=O(t);this._cleanupSpanState(o)}}class M extends P{constructor(){super(null,new f)}onStart(e,t){}onEnd(e){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}emitPartial(){}setInternalAttribute(e,t,s){}getInternalAttribute(e,t,s=null){return s}}import{defaultResource as Ae,resourceFromAttributes as qe}from"@opentelemetry/resources";import{NodeTracerProvider as Ee}from"@opentelemetry/sdk-trace-node";var ie=new Map,W=new Map;async function le(e,t){let s=`org:${e.getOrganizationId()}:project:${t}`,o=ie.get(s);if(o)return o;let n=W.get(s);if(n)return n;let i=(async()=>{r.info(`Resolving project ID for project: ${t}`);let m=(await e.postV1projectsResolve({project_name:t})).project_id;if(!m)throw Error(`Project ID not found for project: ${t}`);return r.info(`Resolved project ID: ${m}`),ie.set(s,m),m})();W.set(s,i);try{return await i}finally{W.delete(s)}}var me="0.9.1";var ue=me;class w extends p{_spanExporter=null;_spanProcessor=null;constructor(e,t,s,o,n,i,l,m,u,c){super(e,t,s,o,n,i,l,m,u,c)}static async init(e={}){let t=e.apiKey??N,s=e.organizationId??I,o=e.apiUrl??C,n=e.projectName??null,i=e.serializer??G,l=!0;if(!n)r.warning("project_name not provided. Tracer will not export spans."),l=!1;if(!t)r.warning("api_key not provided. Tracer will not export spans."),l=!1;if(!s)r.warning("organization_id not provided. Tracer will not export spans."),l=!1;if(!o)r.warning("api_url not provided. Tracer will not export spans."),l=!1;let m=null,u=null;if(l&&n&&t&&s&&o){if(m=new x(o,t,s),u=await le(m,n).catch(()=>null),!u)r.warning(`Project '${n}' not found. Tracer will not export spans.`),l=!1}let c={"service.name":n??"unknown","telemetry.sdk.name":"judgeval","telemetry.sdk.version":ue};if(e.environment)c["deployment.environment"]=e.environment;if(e.resourceAttributes)Object.assign(c,e.resourceAttributes);let h=Ae().merge(qe(c)),Q=new Ee({resource:h}),E=new w(n,u,t,s,o,e.environment??null,i,Q,m,l);if(l){let a=new Ee({resource:h,spanProcessors:[E.getSpanProcessor()]});E._tracerProvider=a}if(R.getInstance().register(E),e.setActive??!0)E.setActive();return E}getSpanExporter(){if(this._spanExporter)return this._spanExporter;if(!this._enableMonitoring||!this.projectId||!this.apiKey||!this.organizationId||!this.apiUrl)this._spanExporter=new f;else{let e=this.apiUrl.endsWith("/")?this.apiUrl+"otel/v1/traces":this.apiUrl+"/otel/v1/traces";this._spanExporter=new S(e,this.apiKey,this.organizationId,this.projectId)}return this._spanExporter}getSpanProcessor(){if(this._spanProcessor)return this._spanProcessor;if(!this._enableMonitoring)this._spanProcessor=new M;else this._spanProcessor=new P(this,this.getSpanExporter());return this._spanProcessor}}export{w as Tracer,f as NoOpSpanExporter,R as JudgmentTracerProvider,S as JudgmentSpanExporter,b as Judgeval,p as BaseTracer};
1
+ function D(e,t){let s=process.env[e];if(!s)return t??null;return s}var N=D("JUDGMENT_API_KEY"),I=D("JUDGMENT_ORG_ID"),C=D("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),H=D("JUDGMENT_LOG_LEVEL","warn");class h{baseUrl;apiKey;organizationId;constructor(e,t,s){this.baseUrl=e,this.apiKey=t,this.organizationId=s}getBaseUrl(){return this.baseUrl}getApiKey(){return this.apiKey}getOrganizationId(){return this.organizationId}async request(e,t,s){let o=await fetch(t,{method:e,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId},body:s!==void 0?JSON.stringify(s):void 0});if(!o.ok){let n=await o.text();throw Error(`HTTP ${o.status}: ${n}`)}return o.json()}async postOtelV1traces(){let e=this.baseUrl+"/otel/v1/traces";return this.request("POST",e,{})}async postOtelTriggerRootSpanRules(e){let t=this.baseUrl+"/otel/trigger_root_span_rules";return this.request("POST",t,e)}async postV1projectsResolve(e){let t=this.baseUrl+"/v1/projects/resolve/";return this.request("POST",t,e)}async postV1projects(e){let t=this.baseUrl+"/v1/projects";return this.request("POST",t,e)}async deleteV1projects(e){let t=this.baseUrl+`/v1/projects/${e}`;return this.request("DELETE",t,{})}async postV1projectsDatasets(e,t){let s=this.baseUrl+`/v1/projects/${e}/datasets`;return this.request("POST",s,t)}async getV1projectsDatasets(e){let t=this.baseUrl+`/v1/projects/${e}/datasets`;return this.request("GET",t,void 0)}async postV1projectsDatasetsByDatasetNameExamples(e,t,s){let o=this.baseUrl+`/v1/projects/${e}/datasets/${t}/examples`;return this.request("POST",o,s)}async getV1projectsDatasetsByDatasetName(e,t){let s=this.baseUrl+`/v1/projects/${e}/datasets/${t}`;return this.request("GET",s,void 0)}async postV1projectsEvaluateExamples(e,t){let s=this.baseUrl+`/v1/projects/${e}/evaluate/examples`;return this.request("POST",s,t)}async postV1projectsEvaluateTraces(e,t){let s=this.baseUrl+`/v1/projects/${e}/evaluate/traces`;return this.request("POST",s,t)}async postV1projectsEvalResults(e,t){let s=this.baseUrl+`/v1/projects/${e}/eval-results`;return this.request("POST",s,t)}async postV1projectsEvalResultsExamples(e,t){let s=this.baseUrl+`/v1/projects/${e}/eval-results/examples`;return this.request("POST",s,t)}async getV1projectsExperimentsByRunId(e,t){let s=this.baseUrl+`/v1/projects/${e}/experiments/${t}`;return this.request("GET",s,void 0)}async postV1projectsEvalQueueExamples(e,t){let s=this.baseUrl+`/v1/projects/${e}/eval-queue/examples`;return this.request("POST",s,t)}async postV1projectsEvalQueueTraces(e,t){let s=this.baseUrl+`/v1/projects/${e}/eval-queue/traces`;return this.request("POST",s,t)}async getV1projectsPromptsByName(e,t,s,o){let n=new URLSearchParams;if(s!==void 0)n.set("commit_id",s);if(o!==void 0)n.set("tag",o);let i=this.baseUrl+`/v1/projects/${e}/prompts/${t}`+(n.toString()?"?"+n.toString():"");return this.request("GET",i,void 0)}async postV1projectsPrompts(e,t){let s=this.baseUrl+`/v1/projects/${e}/prompts`;return this.request("POST",s,t)}async postV1projectsPromptsByNameTags(e,t,s){let o=this.baseUrl+`/v1/projects/${e}/prompts/${t}/tags`;return this.request("POST",o,s)}async deleteV1projectsPromptsByNameTags(e,t,s){let o=this.baseUrl+`/v1/projects/${e}/prompts/${t}/tags`;return this.request("DELETE",o,s)}async getV1projectsPromptsByNameVersions(e,t){let s=this.baseUrl+`/v1/projects/${e}/prompts/${t}/versions`;return this.request("GET",s,void 0)}async getV1projectsScorers(e,t,s){let o=new URLSearchParams;if(t!==void 0)o.set("names",t);if(s!==void 0)o.set("is_trace",s);let n=this.baseUrl+`/v1/projects/${e}/scorers`+(o.toString()?"?"+o.toString():"");return this.request("GET",n,void 0)}async getV1projectsScorersByNameExists(e,t){let s=this.baseUrl+`/v1/projects/${e}/scorers/${t}/exists`;return this.request("GET",s,void 0)}async postV1projectsScorersCustom(e,t){let s=this.baseUrl+`/v1/projects/${e}/scorers/custom`;return this.request("POST",s,t)}async getV1projectsScorersCustomByNameExists(e,t){let s=this.baseUrl+`/v1/projects/${e}/scorers/custom/${t}/exists`;return this.request("GET",s,void 0)}async postV1projectsTracesByTraceIdTags(e,t,s){let o=this.baseUrl+`/v1/projects/${e}/traces/${t}/tags`;return this.request("POST",o,s)}async getV1e2eFetchTraceByProjectNameByTraceId(e,t){let s=this.baseUrl+`/v1/e2e_fetch_trace/${e}/${t}`;return this.request("GET",s,void 0)}async getV1e2eTracesPerProject(e,t,s){let o=new URLSearchParams;if(t!==void 0)o.set("limit",t);if(s!==void 0)o.set("offset",s);let n=this.baseUrl+`/v1/e2e_traces_per_project/${e}`+(o.toString()?"?"+o.toString():"");return this.request("GET",n,void 0)}async postV1e2eFetchSpanScore(e){let t=this.baseUrl+"/v1/e2e_fetch_span_score/";return this.request("POST",t,e)}}class b{internalClient;constructor(e={}){let t=e.apiKey??N,s=e.organizationId??I,o=e.apiUrl??C;if(!t)throw Error("API key is required");if(!s)throw Error("Organization ID is required");if(!o)throw Error("API URL is required");this.internalClient=new h(o,t,s)}static create(e={}){return new b(e)}}import{SpanStatusCode as A}from"@opentelemetry/api";import{randomUUID as De}from"crypto";var Re=/^([^(]+?)=>/,ce=/^[^(]*\(\s*([^)]*)\)/m,_e=/,/,de=/^\s*(_?)(\S+?)\1\s*$/,ae=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function Se(e){return Function.prototype.toString.call(e)}function fe(e){let t=Se(e).replace(ae,"");return t.match(Re)||t.match(ce)}function X(e){let t=fe(e);if(!t||!t[1])return[];return t[1].split(_e).map((s)=>{return s.replace(de,(n,i,l)=>l).trim()}).filter((s)=>s.length>0)}class r{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=r.Level.WARNING;static useColor=!0;static initialize(){if(!r.initialized){let e=process.env.JUDGMENT_NO_COLOR;r.useColor=!e&&process.stdout.isTTY;let t=H.toLowerCase();if(t){let s={debug:r.Level.DEBUG,info:r.Level.INFO,warning:r.Level.WARNING,warn:r.Level.WARNING,error:r.Level.ERROR,critical:r.Level.CRITICAL};r.currentLevel=s[t]??r.Level.WARNING}r.initialized=!0}}static setLevel(e){r.currentLevel=e}static setUseColor(e){r.useColor=e}static log(e,t){if(r.initialize(),e<r.currentLevel)return;let s=new Date().toISOString().replace("T"," ").substring(0,19),o=Object.keys(r.Level).find((l)=>r.Level[l]===e)??"UNKNOWN",n=`${s} - judgeval - ${o} - ${t}`;if(r.useColor)n=`${e===r.Level.DEBUG||e===r.Level.INFO?r.GRAY:e===r.Level.WARNING?r.YELLOW:r.RED}${n}${r.RESET}`;(e>=r.Level.ERROR?process.stderr:process.stdout).write(n+`
2
+ `)}static debug(e){r.log(r.Level.DEBUG,e)}static info(e){r.log(r.Level.INFO,e)}static warning(e){r.log(r.Level.WARNING,e)}static warn(e){r.log(r.Level.WARNING,e)}static error(e){r.log(r.Level.ERROR,e)}static critical(e){r.log(r.Level.CRITICAL,e)}}var L;function Pe(e,t){if(typeof t==="bigint")return t.toString();if(typeof t==="object"&&t!==null){if(L.has(t))return"[Circular]";L.add(t)}return t}function G(e){try{let t=JSON.stringify(e);if(typeof t==="string")return t;return String(t)}catch{try{L=new WeakSet;let t=JSON.stringify(e,Pe);return typeof t==="string"?t:String(e)}catch(t){return r.error(`safeStringify failed: ${t}`),String(e)}}}function x(e,t){if(typeof e==="string"||typeof e==="number"||typeof e==="boolean")return e;return t(e)}import{INVALID_SPAN_CONTEXT as xe,context as ve,SpanStatusCode as se,trace as v}from"@opentelemetry/api";import{registerInstrumentations as ge}from"@opentelemetry/instrumentation";import{AsyncLocalStorage as Ue}from"async_hooks";import{context as a}from"@opentelemetry/api";import{AsyncLocalStorage as K}from"async_hooks";var Z=!1,$=null,B=new K,j=new K,z=a.active.bind(a),Te=a.with.bind(a),he=a.bind.bind(a);function J(){return B.getStore()===!0}function ee(e){if($=e,Z)return;let t=a;t.active=()=>{if(!J())return z();let s=j.getStore();if(s)return s;return $?$():z()},t.with=(s,o,n,...i)=>{if(!J())return Te(s,o,n,...i);return j.run(s,()=>o.apply(n,i))},t.bind=(s,o)=>{if(!J())return he(s,o);if(typeof o!=="function")return o;let n=o;return(...i)=>j.run(s,()=>n(...i))},Z=!0}function te(e,t){return B.run(!0,()=>j.run(e,t))}var ye="judgeval",F=new Ue;class oe{_provider;constructor(e){this._provider=e}startSpan(e,t,s){let o=s??this._provider.getCurrentContext();return this._provider._getDelegateTracer().startSpan(e,t,o)}startActiveSpan(e,...t){let s={},o=this._provider.getCurrentContext(),n;if(t.length===1)n=t[0];else if(t.length===2)s=t[0],n=t[1];else s=t[0],o=t[1],n=t[2];let i=this.startSpan(e,s,o);return this._provider.useSpan(i,!0,!0,!0,()=>n(i))}}class ne{startSpan(){return v.wrapSpanContext(xe)}startActiveSpan(e,...t){return(t.length===1?t[0]:t.length===2?t[1]:t[2])(this.startSpan())}}class R{static _instance=null;_activeTracer=null;_instrumentations=[];_noOpTracer;_proxyTracer;_tracers=new Set;constructor(){this._noOpTracer=new ne,this._proxyTracer=new oe(this),ee(()=>this.getCurrentContext())}static getInstance(){return R._instance??=new R,R._instance}static installAsGlobalTracerProvider(){let e=R.getInstance();return v.setGlobalTracerProvider(e)}register(e){this._tracers.add(e)}deregister(e){this._tracers.delete(e)}setActive(e){let t=this.getCurrentSpan();if(t?.isRecording()){if(v.getSpan(this.getCurrentContext())===t)return r.error("Cannot set_active() while a root span is active. Keeping existing tracer provider."),!1}return this.register(e),this._activeTracer=e,!0}getActiveTracer(){return this._activeTracer}getCurrentContext(){return F.getStore()??ve.active()}getCurrentSpan(){let e=this.getCurrentContext();return v.getSpan(e)}hasActiveRootSpan(){if(!this.getCurrentSpan()?.isRecording())return!1;return!0}_getDelegateTracer(){let e=this._activeTracer;if(!e)return r.debug("No active tracer, returning NoOpTracer"),this._noOpTracer;return e._tracerProvider.getTracer(ye)}getTracer(e,t,s){return this._proxyTracer}addInstrumentation(e){try{ge({tracerProvider:this,instrumentations:[e]}),this._instrumentations.push(e)}catch(t){r.error(`Failed to add instrumentation: ${String(t)}`)}}useSpan(e,t,s,o,n){let i=this.getCurrentContext(),l=v.setSpan(i,e);return F.run(l,()=>te(l,()=>{try{let m=n();if(m instanceof Promise)return m.catch((u)=>{if(e.isRecording()){if(s)e.recordException(u);if(o){let c=u;e.setStatus({code:se.ERROR,message:`${c.name}: ${c.message}`})}}throw u}).finally(()=>{if(t)e.end()});if(t)e.end();return m}catch(m){if(e.isRecording()){if(s)e.recordException(m);if(o){let u=m;e.setStatus({code:se.ERROR,message:`${u.name}: ${u.message}`})}}if(t)e.end();throw m}}))}attachContext(e){F.enterWith(e)}async forceFlush(){await Promise.all(Array.from(this._tracers).map((e)=>e._tracerProvider.forceFlush()))}async shutdown(){await Promise.all(Array.from(this._tracers).map((e)=>e._tracerProvider.shutdown())),this._activeTracer=null,this._tracers.clear()}}var g=Symbol.for("judgment.customer_id"),U=Symbol.for("judgment.session_id");var re="judgeval";class p{projectName;projectId;apiKey;organizationId;apiUrl;environment;serializer;_tracerProvider;_client;_enableMonitoring;constructor(e,t,s,o,n,i,l,m,u,c){this.projectName=e,this.projectId=t,this.apiKey=s,this.organizationId=o,this.apiUrl=n,this.environment=i,this.serializer=l,this._tracerProvider=m,this._client=u,this._enableMonitoring=c}setActive(){return R.getInstance().setActive(this)}static _getProxyProvider(){return R.getInstance()}static _getSerializer(){return p._getProxyProvider().getActiveTracer()?.serializer??G}static _getCurrentTraceAndSpanId(){let t=p._getProxyProvider().getCurrentSpan();if(!t?.isRecording())return null;let s=t.spanContext();if(!s.traceId||!(s.traceFlags&1))return null;return[s.traceId,s.spanId]}static _emitPartial(){let e=p._getProxyProvider().getActiveTracer();if(!e)return;e.getSpanProcessor().emitPartial()}static getCurrentSpan(){return p._getProxyProvider().getCurrentSpan()}static async forceFlush(){await p._getProxyProvider().forceFlush()}static async shutdown(){await p._getProxyProvider().shutdown()}static registerOTELInstrumentation(e){p._getProxyProvider().addInstrumentation(e)}static getOTELTracer(){return p._getProxyProvider().getTracer(re)}static startSpan(e,t){let s=p.getOTELTracer().startSpan(e,{attributes:t});return p._emitPartial(),s}static startActiveSpan(e,t,s){return p.getOTELTracer().startActiveSpan(e,{attributes:s},(o)=>{p._emitPartial();let n=t(o);if(n instanceof Promise)return n.finally(()=>{o.end()});return o.end(),n})}static span(e,t){return p.startActiveSpan(e,(s)=>{try{let o=t(s);if(o instanceof Promise)return o.catch((n)=>{throw s.setStatus({code:A.ERROR,message:String(n)}),s.recordException(n),n});return o}catch(o){throw s.setStatus({code:A.ERROR,message:String(o)}),s.recordException(o),o}})}static with(e,t){return p.span(e,t)}static observe(e,t="span",s,o=!0,n=!0,i=!1){let l=p._getProxyProvider(),m=(u)=>{let c=s??u.name;return(...T)=>{return l.getTracer(re).startActiveSpan(c,(E)=>{if(t)E.setAttribute("judgment.span_kind",t);try{if(o)E.setAttribute("judgment.input",x(Ne(u,T),p._getSerializer()));p._emitPartial();let _=u(...T);if(_ instanceof Promise)return _.then((d)=>{if(n)E.setAttribute("judgment.output",x(d,p._getSerializer()));return d}).catch((d)=>{throw E.recordException(d),E.setStatus({code:A.ERROR,message:String(d)}),d}).finally(()=>{E.end()});if(n)E.setAttribute("judgment.output",x(_,p._getSerializer()));return E.end(),_}catch(_){throw E.recordException(_),E.setStatus({code:A.ERROR,message:String(_)}),E.end(),_}})}};if(!e)return m;return m(e)}static setSpanKind(e){if(!e)return;let t=p._getProxyProvider().getCurrentSpan();if(t?.isRecording())t.setAttribute("judgment.span_kind",e)}static setLLMSpan(){p.setSpanKind("llm")}static setToolSpan(){p.setSpanKind("tool")}static setGeneralSpan(){p.setSpanKind("span")}static setAttribute(e,t){let s=p._getProxyProvider().getCurrentSpan();if(!s?.isRecording())return;if(!e||t==null)return;s.setAttribute(e,x(t,p._getSerializer()))}static setAttributes(e){for(let[t,s]of Object.entries(e))p.setAttribute(t,s)}static setInput(e){p.setAttribute("judgment.input",e)}static setOutput(e){p.setAttribute("judgment.output",e)}static recordLLMMetadata(e){let t=p._getProxyProvider().getCurrentSpan();if(!t?.isRecording())return;if(typeof e.model==="string")t.setAttribute("judgment.llm.model",e.model);if(typeof e.provider==="string")t.setAttribute("judgment.llm.provider",e.provider);if(typeof e.non_cached_input_tokens==="number")t.setAttribute("judgment.usage.non_cached_input_tokens",e.non_cached_input_tokens);if(typeof e.output_tokens==="number")t.setAttribute("judgment.usage.output_tokens",e.output_tokens);if(typeof e.cache_read_input_tokens==="number")t.setAttribute("judgment.usage.cache_read_input_tokens",e.cache_read_input_tokens);if(typeof e.cache_creation_input_tokens==="number")t.setAttribute("judgment.usage.cache_creation_input_tokens",e.cache_creation_input_tokens);if(typeof e.total_cost_usd==="number")t.setAttribute("judgment.usage.total_cost_usd",e.total_cost_usd)}static setCustomerId(e){let t=p._getProxyProvider(),s=t.getCurrentSpan();if(!s?.isRecording())return;s.setAttribute("judgment.customer_id",e);let o=t.getCurrentContext().setValue(g,e);t.attachContext(o)}static setSessionId(e){let t=p._getProxyProvider(),s=t.getCurrentSpan();if(!s?.isRecording())return;let o=s.spanContext();if(!o.traceId||!(o.traceFlags&1))return;s.setAttribute("judgment.session_id",e);let n=t.getCurrentContext().setValue(U,e);t.attachContext(n)}static tag(e){if(!e||Array.isArray(e)&&e.length===0)return;let s=p._getProxyProvider().getActiveTracer();if(!s?.projectId||!s._client)return;let o=p._getCurrentTraceAndSpanId();if(!o)return;let[n]=o,i=Array.isArray(e)?e:[e];s._client.postV1projectsTracesByTraceIdTags(s.projectId,n,{tags:i}).catch((l)=>{r.error(`tag failed: ${String(l)}`)})}static _pendingEvals=new Map;static asyncEvaluate(e,t){let s=p._getProxyProvider(),o=s.getActiveTracer();if(!o){r.warning("asyncEvaluate: no active tracer");return}if(!o.projectId){r.warning("asyncEvaluate: no project configured");return}let n=s.getCurrentSpan();if(!n?.isRecording()){r.warning("asyncEvaluate: no active span");return}let i=n.spanContext(),l=`${i.traceId}:${i.spanId}`,m=p._pendingEvals.get(l)??[],u={project_id:o.projectId,eval_name:`async_evaluate_${e}_${m.length}`,judges:[{name:e}],examples:[{...t,example_id:De(),created_at:new Date().toISOString(),trace_id:i.traceId,span_id:i.spanId}],is_offline:!1,is_behavior:!1};m.push(u),p._pendingEvals.set(l,m),n.setAttribute("judgment.pending_trace_eval",JSON.stringify(m))}}function Ne(e,t){try{let s=X(e).map((n)=>n.replace(/^\.\.\./,"").split("=")[0].trim()).filter((n)=>n.length>0),o={};return s.forEach((n,i)=>{if(i<t.length)o[n]=t[i]}),o}catch{return{}}}import{OTLPTraceExporter as Ie}from"@opentelemetry/exporter-trace-otlp-http";class S{_delegate;constructor(e,t,s,o){this._delegate=new Ie({url:e,headers:{Authorization:`Bearer ${t}`,"X-Organization-Id":s,"X-Project-Id":o}})}export(e,t){r.info(`Exported ${e.length} spans`),this._delegate?.export(e,t)}shutdown(){return this._delegate?.shutdown()??Promise.resolve()}forceFlush(){return this._delegate?.forceFlush()??Promise.resolve()}}import{ExportResultCode as Ce}from"@opentelemetry/core";class f extends S{constructor(){super("https://api.judgmentlabs.ai/otel/v1/traces","","","");this._delegate=null}export(e,t){t({code:Ce.SUCCESS})}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}}import{BatchSpanProcessor as Ge}from"@opentelemetry/sdk-trace-base";var pe=[];function y(e){pe.push(e)}function q(){return pe.map((e)=>e())}class k{onStart(e,t){let s=t.getValue(g);if(s)e.setAttribute("judgment.customer_id",s)}onEnd(e){}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}y(()=>new k);class Y{onStart(e,t){let s=t.getValue(U);if(s)e.setAttribute("judgment.session_id",s)}onEnd(e){}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}y(()=>new Y);function O(e){return`${e.traceId}:${e.spanId}`}function je(e){return e[0]===0&&e[1]===0}class P extends Ge{tracer;_internalAttributes=new Map;constructor(e,t,s){super(t,s);this.tracer=e}_cleanupSpanState(e){this._internalAttributes.delete(e)}setInternalAttribute(e,t,s){let o=O(e),n=this._internalAttributes.get(o);if(!n)n=new Map,this._internalAttributes.set(o,n);n.set(t,s)}getInternalAttribute(e,t,s=null){let o=O(e),n=this._internalAttributes.get(o);if(!n)return s;return n.has(t)?n.get(t):s}_emitSpan(e){let t=e.spanContext(),s=O(t),o=this._internalAttributes.get(s);if(!o)o=new Map,this._internalAttributes.set(s,o);let n=o.get("judgment.update_id")??0;o.set("judgment.update_id",n+1);let i={...e.attributes,"judgment.update_id":n},l=Object.create(e);Object.defineProperty(l,"attributes",{value:i,writable:!1});let m=je(e.endTime)?e.startTime:e.endTime;Object.defineProperty(l,"endTime",{value:m,writable:!1}),super.onEnd(l)}emitPartial(){let t=R.getInstance().getCurrentSpan();if(!t?.isRecording())return;if(this.getInternalAttribute(t.spanContext(),"disable_partial_emit",!1))return;this._emitSpan(t)}onStart(e,t){for(let s of q())s.onStart(e,t)}onEnd(e){for(let n of q())n.onEnd(e);let t=e.spanContext();if(!this.getInternalAttribute(t,"cancelled",!1))this._emitSpan(e);let o=O(t);this._cleanupSpanState(o)}}class M extends P{constructor(){super(null,new f)}onStart(e,t){}onEnd(e){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}emitPartial(){}setInternalAttribute(e,t,s){}getInternalAttribute(e,t,s=null){return s}}import{defaultResource as qe,resourceFromAttributes as Oe}from"@opentelemetry/resources";import{NodeTracerProvider as Ee}from"@opentelemetry/sdk-trace-node";var ie=new Map,W=new Map;async function le(e,t){let s=`org:${e.getOrganizationId()}:project:${t}`,o=ie.get(s);if(o)return o;let n=W.get(s);if(n)return n;let i=(async()=>{r.info(`Resolving project ID for project: ${t}`);let m=(await e.postV1projectsResolve({project_name:t})).project_id;if(!m)throw Error(`Project ID not found for project: ${t}`);return r.info(`Resolved project ID: ${m}`),ie.set(s,m),m})();W.set(s,i);try{return await i}finally{W.delete(s)}}var me="0.9.3";var ue=me;class w extends p{_spanExporter=null;_spanProcessor=null;constructor(e,t,s,o,n,i,l,m,u,c){super(e,t,s,o,n,i,l,m,u,c)}static async init(e={}){let t=e.apiKey??N,s=e.organizationId??I,o=e.apiUrl??C,n=e.projectName??null,i=e.serializer??G,l=!0;if(!n)r.warning("project_name not provided. Tracer will not export spans."),l=!1;if(!t)r.warning("api_key not provided. Tracer will not export spans."),l=!1;if(!s)r.warning("organization_id not provided. Tracer will not export spans."),l=!1;if(!o)r.warning("api_url not provided. Tracer will not export spans."),l=!1;let m=null,u=null;if(l&&n&&t&&s&&o){if(m=new h(o,t,s),u=await le(m,n).catch(()=>null),!u)r.warning(`Project '${n}' not found. Tracer will not export spans.`),l=!1}let c={"service.name":n??"unknown","telemetry.sdk.name":"judgeval","telemetry.sdk.version":ue};if(e.environment)c["deployment.environment"]=e.environment;if(e.resourceAttributes)Object.assign(c,e.resourceAttributes);let T=qe().merge(Oe(c)),Q=new Ee({resource:T}),E=new w(n,u,t,s,o,e.environment??null,i,Q,m,l);if(l){let d=new Ee({resource:T,spanProcessors:[E.getSpanProcessor()]});E._tracerProvider=d}if(R.getInstance().register(E),e.setActive??!0)E.setActive();return E}getSpanExporter(){if(this._spanExporter)return this._spanExporter;if(!this._enableMonitoring||!this.projectId||!this.apiKey||!this.organizationId||!this.apiUrl)this._spanExporter=new f;else{let e=this.apiUrl.endsWith("/")?this.apiUrl+"otel/v1/traces":this.apiUrl+"/otel/v1/traces";this._spanExporter=new S(e,this.apiKey,this.organizationId,this.projectId)}return this._spanExporter}getSpanProcessor(){if(this._spanProcessor)return this._spanProcessor;if(!this._enableMonitoring)this._spanProcessor=new M;else this._spanProcessor=new P(this,this.getSpanExporter());return this._spanProcessor}}export{w as Tracer,f as NoOpSpanExporter,R as JudgmentTracerProvider,S as JudgmentSpanExporter,b as Judgeval,p as BaseTracer};
3
3
 
4
- //# debugId=B863D2B61C4C13B264756E2164756E21
4
+ //# debugId=687F1644B3A1259E64756E2164756E21
5
5
  //# sourceMappingURL=index.mjs.map
@@ -5,7 +5,7 @@
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 TriggerRootSpanRulesRequest,\n TriggerRootSpanRulesResponse,\n UntagPromptRequest,\n UntagPromptResponse,\n UploadCustomScorerRequest,\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 postOtelTriggerRootSpanRules(\n payload: TriggerRootSpanRulesRequest,\n ): Promise<TriggerRootSpanRulesResponse> {\n const url = this.baseUrl + \"/otel/trigger_root_span_rules\";\n return this.request(\"POST\", url, payload);\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(\n projectId: string,\n payload: UploadCustomScorerRequest,\n ): Promise<UploadCustomScorerResponse> {\n const url = this.baseUrl + `/v1/projects/${projectId}/scorers/custom`;\n return this.request(\"POST\", url, payload);\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\";\nexport interface JudgevalConfig {\n apiKey?: string;\n organizationId?: string;\n apiUrl?: string;\n}\n\nexport class Judgeval {\n private readonly internalClient: JudgmentApiClient;\n\n protected constructor(config: JudgevalConfig = {}) {\n const apiKey = config.apiKey ?? JUDGMENT_API_KEY;\n const organizationId = config.organizationId ?? JUDGMENT_ORG_ID;\n const apiUrl = config.apiUrl ?? JUDGMENT_API_URL;\n\n if (!apiKey) {\n throw new Error(\"API key is required\");\n }\n if (!organizationId) {\n throw new Error(\"Organization ID is required\");\n }\n if (!apiUrl) {\n throw new Error(\"API URL is required\");\n }\n\n this.internalClient = new JudgmentApiClient(apiUrl, apiKey, organizationId);\n }\n\n static create(config: JudgevalConfig = {}): Judgeval {\n return new Judgeval(config);\n }\n}\n",
8
- "import {\n type Attributes,\n type Span,\n SpanStatusCode,\n type Tracer,\n} from \"@opentelemetry/api\";\nimport type { Instrumentation } from \"@opentelemetry/instrumentation\";\nimport type { BasicTracerProvider } from \"@opentelemetry/sdk-trace-base\";\nimport { randomUUID } from \"crypto\";\nimport { AttributeKeys } from \"../JudgmentAttributeKeys\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport type { PendingEvalPayload } from \"../internal/api/models/PendingEvalPayload\";\nimport { parseFunctionArgs } from \"../utils/annotate\";\nimport { Logger } from \"../utils/logger\";\nimport {\n safeStringify,\n serializeAttribute,\n Serializer,\n} from \"../utils/serializer\";\nimport { JudgmentTracerProvider } from \"./JudgmentTracerProvider\";\nimport type { JudgmentSpanExporter } from \"./exporters/JudgmentSpanExporter\";\nimport type { JudgmentSpanProcessor } from \"./processors/JudgmentSpanProcessor\";\nimport {\n CUSTOMER_ID_KEY,\n SESSION_ID_KEY,\n} from \"./processors/_lifecycles/contextKeys\";\n\nconst TRACER_NAME = \"judgeval\";\n\nexport interface LLMMetadata {\n non_cached_input_tokens?: number | null | undefined;\n output_tokens?: number | null | undefined;\n cache_read_input_tokens?: number | null | undefined;\n cache_creation_input_tokens?: number | null | undefined;\n total_cost_usd?: number | null | undefined;\n}\n\nexport interface TracerConfig {\n projectName?: string;\n apiKey?: string;\n organizationId?: string;\n apiUrl?: string;\n environment?: string;\n setActive?: boolean;\n serializer?: (value: unknown) => string;\n resourceAttributes?: Record<string, string>;\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 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 const tracer = BaseTracer._getProxyProvider().getActiveTracer();\n if (!tracer) return;\n tracer.getSpanProcessor().emitPartial();\n }\n\n // ------------------------------------------------------------------ //\n // Static API: Span Access & Lifecycle //\n // ------------------------------------------------------------------ //\n\n static getCurrentSpan(): Span | undefined {\n const proxy = BaseTracer._getProxyProvider();\n return proxy.getCurrentSpan();\n }\n\n static async forceFlush(): Promise<void> {\n const proxy = BaseTracer._getProxyProvider();\n await proxy.forceFlush();\n }\n\n static async shutdown(): Promise<void> {\n const proxy = BaseTracer._getProxyProvider();\n await proxy.shutdown();\n }\n\n static registerOTELInstrumentation(instrumentor: Instrumentation): void {\n const proxy = BaseTracer._getProxyProvider();\n proxy.addInstrumentation(instrumentor);\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Creation (OTEL-like signatures) //\n // ------------------------------------------------------------------ //\n\n static getOTELTracer(): Tracer {\n const proxy = BaseTracer._getProxyProvider();\n return proxy.getTracer(TRACER_NAME);\n }\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 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 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 static with<T>(spanName: string, fn: (span: Span) => T): T {\n return BaseTracer.span(spanName, fn);\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 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 static setSpanKind(kind: string): void {\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 static setLLMSpan(): void {\n BaseTracer.setSpanKind(\"llm\");\n }\n\n static setToolSpan(): void {\n BaseTracer.setSpanKind(\"tool\");\n }\n\n static setGeneralSpan(): void {\n BaseTracer.setSpanKind(\"span\");\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Attribute Operations //\n // ------------------------------------------------------------------ //\n\n static setAttribute(key: string, value: unknown): void {\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 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 static setInput(inputData: unknown): void {\n BaseTracer.setAttribute(AttributeKeys.JUDGMENT_INPUT, inputData);\n }\n\n static setOutput(outputData: unknown): void {\n BaseTracer.setAttribute(AttributeKeys.JUDGMENT_OUTPUT, outputData);\n }\n\n static recordLLMMetadata(metadata: LLMMetadata): void {\n const currentSpan = BaseTracer._getProxyProvider().getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\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 // Static: Context Propagation //\n // ------------------------------------------------------------------ //\n\n static setCustomerId(customerId: string): void {\n const proxy = BaseTracer._getProxyProvider();\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n currentSpan.setAttribute(AttributeKeys.JUDGMENT_CUSTOMER_ID, customerId);\n const ctx = proxy.getCurrentContext().setValue(CUSTOMER_ID_KEY, customerId);\n proxy.attachContext(ctx);\n }\n\n static setSessionId(sessionId: string): void {\n const proxy = BaseTracer._getProxyProvider();\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n const spanCtx = currentSpan.spanContext();\n if (!spanCtx.traceId || !(spanCtx.traceFlags & 0x01)) return;\n currentSpan.setAttribute(AttributeKeys.JUDGMENT_SESSION_ID, sessionId);\n const ctx = proxy.getCurrentContext().setValue(SESSION_ID_KEY, sessionId);\n proxy.attachContext(ctx);\n }\n\n // ------------------------------------------------------------------ //\n // Static: Tags //\n // ------------------------------------------------------------------ //\n\n static tag(tags: string | string[]): void {\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 // Static API: Async Evaluation //\n // ------------------------------------------------------------------ //\n\n // TODO: cleanup?\n private static _pendingEvals = new Map<string, PendingEvalPayload[]>();\n\n static asyncEvaluate(judge: string, example?: Record<string, unknown>): void {\n const proxy = BaseTracer._getProxyProvider();\n const tracer = proxy.getActiveTracer();\n if (!tracer) {\n Logger.warning(\"asyncEvaluate: no active tracer\");\n return;\n }\n if (!tracer.projectId) {\n Logger.warning(\"asyncEvaluate: no project configured\");\n return;\n }\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) {\n Logger.warning(\"asyncEvaluate: no active span\");\n return;\n }\n\n const ctx = currentSpan.spanContext();\n const spanKey = `${ctx.traceId}:${ctx.spanId}`;\n const payloads = BaseTracer._pendingEvals.get(spanKey) ?? [];\n\n const payload: PendingEvalPayload = {\n project_id: tracer.projectId,\n eval_name: `async_evaluate_${judge}_${payloads.length}`,\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\n payloads.push(payload);\n BaseTracer._pendingEvals.set(spanKey, payloads);\n\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_PENDING_TRACE_EVAL,\n JSON.stringify(payloads),\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 Span,\n SpanStatusCode,\n type Tracer,\n} from \"@opentelemetry/api\";\nimport type { Instrumentation } from \"@opentelemetry/instrumentation\";\nimport type { BasicTracerProvider } from \"@opentelemetry/sdk-trace-base\";\nimport { randomUUID } from \"crypto\";\nimport { AttributeKeys } from \"../JudgmentAttributeKeys\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport type { PendingEvalPayload } from \"../internal/api/models/PendingEvalPayload\";\nimport { parseFunctionArgs } from \"../utils/annotate\";\nimport { Logger } from \"../utils/logger\";\nimport {\n safeStringify,\n serializeAttribute,\n Serializer,\n} from \"../utils/serializer\";\nimport { Maybe } from \"../utils/type-helpers\";\nimport { JudgmentTracerProvider } from \"./JudgmentTracerProvider\";\nimport type { JudgmentSpanExporter } from \"./exporters/JudgmentSpanExporter\";\nimport type { JudgmentSpanProcessor } from \"./processors/JudgmentSpanProcessor\";\nimport {\n CUSTOMER_ID_KEY,\n SESSION_ID_KEY,\n} from \"./processors/_lifecycles/contextKeys\";\n\nconst TRACER_NAME = \"judgeval\";\n\nexport interface LLMMetadata {\n model?: Maybe<string>;\n provider?: Maybe<string>;\n non_cached_input_tokens?: Maybe<number>;\n output_tokens?: Maybe<number>;\n cache_read_input_tokens?: Maybe<number>;\n cache_creation_input_tokens?: Maybe<number>;\n total_cost_usd?: Maybe<number>;\n}\n\nexport interface TracerConfig {\n projectName?: string;\n apiKey?: string;\n organizationId?: string;\n apiUrl?: string;\n environment?: string;\n setActive?: boolean;\n serializer?: (value: unknown) => string;\n resourceAttributes?: Record<string, string>;\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 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 const tracer = BaseTracer._getProxyProvider().getActiveTracer();\n if (!tracer) return;\n tracer.getSpanProcessor().emitPartial();\n }\n\n // ------------------------------------------------------------------ //\n // Static API: Span Access & Lifecycle //\n // ------------------------------------------------------------------ //\n\n static getCurrentSpan(): Span | undefined {\n const proxy = BaseTracer._getProxyProvider();\n return proxy.getCurrentSpan();\n }\n\n static async forceFlush(): Promise<void> {\n const proxy = BaseTracer._getProxyProvider();\n await proxy.forceFlush();\n }\n\n static async shutdown(): Promise<void> {\n const proxy = BaseTracer._getProxyProvider();\n await proxy.shutdown();\n }\n\n static registerOTELInstrumentation(instrumentor: Instrumentation): void {\n const proxy = BaseTracer._getProxyProvider();\n proxy.addInstrumentation(instrumentor);\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Creation (OTEL-like signatures) //\n // ------------------------------------------------------------------ //\n\n static getOTELTracer(): Tracer {\n const proxy = BaseTracer._getProxyProvider();\n return proxy.getTracer(TRACER_NAME);\n }\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 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 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 static with<T>(spanName: string, fn: (span: Span) => T): T {\n return BaseTracer.span(spanName, fn);\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 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 static setSpanKind(kind: string): void {\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 static setLLMSpan(): void {\n BaseTracer.setSpanKind(\"llm\");\n }\n\n static setToolSpan(): void {\n BaseTracer.setSpanKind(\"tool\");\n }\n\n static setGeneralSpan(): void {\n BaseTracer.setSpanKind(\"span\");\n }\n\n // ------------------------------------------------------------------ //\n // Static: Span Attribute Operations //\n // ------------------------------------------------------------------ //\n\n static setAttribute(key: string, value: unknown): void {\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 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 static setInput(inputData: unknown): void {\n BaseTracer.setAttribute(AttributeKeys.JUDGMENT_INPUT, inputData);\n }\n\n static setOutput(outputData: unknown): void {\n BaseTracer.setAttribute(AttributeKeys.JUDGMENT_OUTPUT, outputData);\n }\n\n static recordLLMMetadata(metadata: LLMMetadata): void {\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 // Static: Context Propagation //\n // ------------------------------------------------------------------ //\n\n static setCustomerId(customerId: string): void {\n const proxy = BaseTracer._getProxyProvider();\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n currentSpan.setAttribute(AttributeKeys.JUDGMENT_CUSTOMER_ID, customerId);\n const ctx = proxy.getCurrentContext().setValue(CUSTOMER_ID_KEY, customerId);\n proxy.attachContext(ctx);\n }\n\n static setSessionId(sessionId: string): void {\n const proxy = BaseTracer._getProxyProvider();\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) return;\n const spanCtx = currentSpan.spanContext();\n if (!spanCtx.traceId || !(spanCtx.traceFlags & 0x01)) return;\n currentSpan.setAttribute(AttributeKeys.JUDGMENT_SESSION_ID, sessionId);\n const ctx = proxy.getCurrentContext().setValue(SESSION_ID_KEY, sessionId);\n proxy.attachContext(ctx);\n }\n\n // ------------------------------------------------------------------ //\n // Static: Tags //\n // ------------------------------------------------------------------ //\n\n static tag(tags: string | string[]): void {\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 // Static API: Async Evaluation //\n // ------------------------------------------------------------------ //\n\n // TODO: cleanup?\n private static _pendingEvals = new Map<string, PendingEvalPayload[]>();\n\n static asyncEvaluate(judge: string, example?: Record<string, unknown>): void {\n const proxy = BaseTracer._getProxyProvider();\n const tracer = proxy.getActiveTracer();\n if (!tracer) {\n Logger.warning(\"asyncEvaluate: no active tracer\");\n return;\n }\n if (!tracer.projectId) {\n Logger.warning(\"asyncEvaluate: no project configured\");\n return;\n }\n const currentSpan = proxy.getCurrentSpan();\n if (!currentSpan?.isRecording()) {\n Logger.warning(\"asyncEvaluate: no active span\");\n return;\n }\n\n const ctx = currentSpan.spanContext();\n const spanKey = `${ctx.traceId}:${ctx.spanId}`;\n const payloads = BaseTracer._pendingEvals.get(spanKey) ?? [];\n\n const payload: PendingEvalPayload = {\n project_id: tracer.projectId,\n eval_name: `async_evaluate_${judge}_${payloads.length}`,\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\n payloads.push(payload);\n BaseTracer._pendingEvals.set(spanKey, payloads);\n\n currentSpan.setAttribute(\n AttributeKeys.JUDGMENT_PENDING_TRACE_EVAL,\n JSON.stringify(payloads),\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\nexport class Logger {\n private static readonly RESET = \"\\x1b[0m\";\n private static readonly RED = \"\\x1b[31m\";\n private static readonly YELLOW = \"\\x1b[33m\";\n private static readonly GRAY = \"\\x1b[90m\";\n\n public static Level = {\n DEBUG: 0,\n INFO: 1,\n WARNING: 2,\n ERROR: 3,\n CRITICAL: 4,\n } as const;\n\n private static initialized = false;\n private static currentLevel: number = Logger.Level.WARNING;\n private static useColor = true;\n\n private static initialize(): void {\n if (!Logger.initialized) {\n const noColor = process.env.JUDGMENT_NO_COLOR;\n Logger.useColor = !noColor && process.stdout.isTTY;\n\n const logLevel = JUDGMENT_LOG_LEVEL.toLowerCase();\n if (logLevel) {\n const levelMap: Record<string, number> = {\n debug: Logger.Level.DEBUG,\n info: Logger.Level.INFO,\n warning: Logger.Level.WARNING,\n warn: Logger.Level.WARNING,\n error: Logger.Level.ERROR,\n critical: Logger.Level.CRITICAL,\n };\n Logger.currentLevel = levelMap[logLevel] ?? Logger.Level.WARNING;\n }\n\n Logger.initialized = true;\n }\n }\n\n public static setLevel(level: number): void {\n Logger.currentLevel = level;\n }\n\n public static setUseColor(useColor: boolean): void {\n Logger.useColor = useColor;\n }\n\n private static log(level: number, message: string): void {\n Logger.initialize();\n\n if (level < Logger.currentLevel) {\n return;\n }\n\n const timestamp = new Date()\n .toISOString()\n .replace(\"T\", \" \")\n .substring(0, 19);\n const levelName =\n Object.keys(Logger.Level).find(\n (key) => Logger.Level[key as keyof typeof Logger.Level] === level,\n ) ?? \"UNKNOWN\";\n let formattedMessage = `${timestamp} - judgeval - ${levelName} - ${message}`;\n\n if (Logger.useColor) {\n const color =\n level === Logger.Level.DEBUG || level === Logger.Level.INFO\n ? Logger.GRAY\n : level === Logger.Level.WARNING\n ? Logger.YELLOW\n : Logger.RED;\n formattedMessage = `${color}${formattedMessage}${Logger.RESET}`;\n }\n\n const output =\n level >= Logger.Level.ERROR ? process.stderr : process.stdout;\n output.write(formattedMessage + \"\\n\");\n }\n\n public static debug(message: string): void {\n Logger.log(Logger.Level.DEBUG, message);\n }\n\n public static info(message: string): void {\n Logger.log(Logger.Level.INFO, message);\n }\n\n public static warning(message: string): void {\n Logger.log(Logger.Level.WARNING, message);\n }\n\n public static warn(message: string): void {\n Logger.log(Logger.Level.WARNING, message);\n }\n\n public static error(message: string): void {\n Logger.log(Logger.Level.ERROR, message);\n }\n\n public static critical(message: string): void {\n Logger.log(Logger.Level.CRITICAL, message);\n }\n}\n",
11
11
  "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",
@@ -14,7 +14,7 @@
14
14
  "export const CUSTOMER_ID_KEY = Symbol.for(\"judgment.customer_id\");\nexport const SESSION_ID_KEY = Symbol.for(\"judgment.session_id\");\n",
15
15
  "import type { ExportResult } from \"@opentelemetry/core\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport type { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../../utils/logger\";\n\nexport class JudgmentSpanExporter implements SpanExporter {\n protected _delegate: OTLPTraceExporter | null;\n\n constructor(\n endpoint: string,\n apiKey: string,\n organizationId: string,\n projectId: string,\n ) {\n this._delegate = new OTLPTraceExporter({\n url: endpoint,\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"X-Organization-Id\": organizationId,\n \"X-Project-Id\": projectId,\n },\n });\n }\n\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n Logger.info(`Exported ${spans.length} spans`);\n this._delegate?.export(spans, resultCallback);\n }\n\n shutdown(): Promise<void> {\n return this._delegate?.shutdown() ?? Promise.resolve();\n }\n\n forceFlush(): Promise<void> {\n return this._delegate?.forceFlush() ?? Promise.resolve();\n }\n}\n",
16
16
  "import { ExportResultCode, type ExportResult } from \"@opentelemetry/core\";\nimport type { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport { JudgmentSpanExporter } from \"./JudgmentSpanExporter\";\n\nexport class NoOpSpanExporter extends JudgmentSpanExporter {\n constructor() {\n // Not used.\n super(\"https://api.judgmentlabs.ai/otel/v1/traces\", \"\", \"\", \"\");\n this._delegate = null;\n }\n\n override export(\n _spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n resultCallback({ code: ExportResultCode.SUCCESS });\n }\n\n override shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n override forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n",
17
- "import type { Context, SpanContext } from \"@opentelemetry/api\";\nimport {\n BatchSpanProcessor,\n type ReadableSpan,\n type Span,\n type SpanExporter,\n} from \"@opentelemetry/sdk-trace-base\";\nimport {\n AttributeKeys,\n InternalAttributeKeys,\n} from \"../../JudgmentAttributeKeys\";\nimport type { BaseTracer } from \"../BaseTracer\";\nimport { JudgmentTracerProvider } from \"../JudgmentTracerProvider\";\nimport { getAll } from \"./_lifecycles\";\n\ntype SpanKey = `${string}:${string}`;\n\nfunction makeSpanKey(ctx: SpanContext): SpanKey {\n return `${ctx.traceId}:${ctx.spanId}`;\n}\n\nexport class JudgmentSpanProcessor extends BatchSpanProcessor {\n tracer: BaseTracer | null;\n private _internalAttributes = new Map<SpanKey, Map<string, unknown>>();\n\n constructor(\n tracer: BaseTracer | null,\n exporter: SpanExporter,\n config?: {\n maxQueueSize?: number;\n scheduledDelayMillis?: number;\n maxExportBatchSize?: number;\n exportTimeoutMillis?: number;\n },\n ) {\n super(exporter, config);\n this.tracer = tracer;\n }\n\n private _cleanupSpanState(spanKey: SpanKey): void {\n this._internalAttributes.delete(spanKey);\n }\n\n setInternalAttribute(\n spanContext: SpanContext,\n key: string,\n value: unknown,\n ): void {\n const spanKey = makeSpanKey(spanContext);\n let attrs = this._internalAttributes.get(spanKey);\n if (!attrs) {\n attrs = new Map();\n this._internalAttributes.set(spanKey, attrs);\n }\n attrs.set(key, value);\n }\n\n getInternalAttribute(\n spanContext: SpanContext,\n key: string,\n defaultValue: unknown = null,\n ): unknown {\n const spanKey = makeSpanKey(spanContext);\n const attrs = this._internalAttributes.get(spanKey);\n if (!attrs) return defaultValue;\n return attrs.has(key) ? attrs.get(key) : defaultValue;\n }\n\n private _emitSpan(span: ReadableSpan): void {\n const ctx = span.spanContext();\n const spanKey = makeSpanKey(ctx);\n let attrs = this._internalAttributes.get(spanKey);\n if (!attrs) {\n attrs = new Map();\n this._internalAttributes.set(spanKey, attrs);\n }\n\n const currId =\n (attrs.get(AttributeKeys.JUDGMENT_UPDATE_ID) as number | undefined) ?? 0;\n attrs.set(AttributeKeys.JUDGMENT_UPDATE_ID, currId + 1);\n\n const newAttributes = {\n ...span.attributes,\n [AttributeKeys.JUDGMENT_UPDATE_ID]: currId,\n };\n\n const emittedSpan = Object.create(span) as ReadableSpan;\n Object.defineProperty(emittedSpan, \"attributes\", {\n value: newAttributes,\n writable: false,\n });\n Object.defineProperty(emittedSpan, \"endTime\", {\n value: span.startTime,\n writable: false,\n });\n\n super.onEnd(emittedSpan);\n }\n\n emitPartial(): void {\n const proxy = JudgmentTracerProvider.getInstance();\n const span = proxy.getCurrentSpan();\n if (!span?.isRecording()) return;\n if (\n this.getInternalAttribute(\n span.spanContext(),\n InternalAttributeKeys.DISABLE_PARTIAL_EMIT,\n false,\n )\n )\n return;\n // TODO: review, is this fine?\n this._emitSpan(span as unknown as ReadableSpan);\n }\n\n onStart(span: Span, parentContext: Context): void {\n for (const processor of getAll()) {\n processor.onStart(span, parentContext);\n }\n }\n\n onEnd(span: ReadableSpan): void {\n for (const processor of getAll()) {\n processor.onEnd(span);\n }\n const ctx = span.spanContext();\n const isCancelled = this.getInternalAttribute(\n ctx,\n InternalAttributeKeys.CANCELLED,\n false,\n );\n if (!isCancelled) {\n this._emitSpan(span);\n }\n const spanKey = makeSpanKey(ctx);\n this._cleanupSpanState(spanKey);\n }\n}\n",
17
+ "import type { Context, HrTime, SpanContext } from \"@opentelemetry/api\";\nimport {\n BatchSpanProcessor,\n type ReadableSpan,\n type Span,\n type SpanExporter,\n} from \"@opentelemetry/sdk-trace-base\";\nimport {\n AttributeKeys,\n InternalAttributeKeys,\n} from \"../../JudgmentAttributeKeys\";\nimport type { BaseTracer } from \"../BaseTracer\";\nimport { JudgmentTracerProvider } from \"../JudgmentTracerProvider\";\nimport { getAll } from \"./_lifecycles\";\n\ntype SpanKey = `${string}:${string}`;\n\nfunction makeSpanKey(ctx: SpanContext): SpanKey {\n return `${ctx.traceId}:${ctx.spanId}`;\n}\n\nfunction isZeroHrTime(hrTime: HrTime): boolean {\n return hrTime[0] === 0 && hrTime[1] === 0;\n}\n\nexport class JudgmentSpanProcessor extends BatchSpanProcessor {\n tracer: BaseTracer | null;\n private _internalAttributes = new Map<SpanKey, Map<string, unknown>>();\n\n constructor(\n tracer: BaseTracer | null,\n exporter: SpanExporter,\n config?: {\n maxQueueSize?: number;\n scheduledDelayMillis?: number;\n maxExportBatchSize?: number;\n exportTimeoutMillis?: number;\n },\n ) {\n super(exporter, config);\n this.tracer = tracer;\n }\n\n private _cleanupSpanState(spanKey: SpanKey): void {\n this._internalAttributes.delete(spanKey);\n }\n\n setInternalAttribute(\n spanContext: SpanContext,\n key: string,\n value: unknown,\n ): void {\n const spanKey = makeSpanKey(spanContext);\n let attrs = this._internalAttributes.get(spanKey);\n if (!attrs) {\n attrs = new Map();\n this._internalAttributes.set(spanKey, attrs);\n }\n attrs.set(key, value);\n }\n\n getInternalAttribute(\n spanContext: SpanContext,\n key: string,\n defaultValue: unknown = null,\n ): unknown {\n const spanKey = makeSpanKey(spanContext);\n const attrs = this._internalAttributes.get(spanKey);\n if (!attrs) return defaultValue;\n return attrs.has(key) ? attrs.get(key) : defaultValue;\n }\n\n private _emitSpan(span: ReadableSpan): void {\n const ctx = span.spanContext();\n const spanKey = makeSpanKey(ctx);\n let attrs = this._internalAttributes.get(spanKey);\n if (!attrs) {\n attrs = new Map();\n this._internalAttributes.set(spanKey, attrs);\n }\n\n const currId =\n (attrs.get(AttributeKeys.JUDGMENT_UPDATE_ID) as number | undefined) ?? 0;\n attrs.set(AttributeKeys.JUDGMENT_UPDATE_ID, currId + 1);\n\n const newAttributes = {\n ...span.attributes,\n [AttributeKeys.JUDGMENT_UPDATE_ID]: currId,\n };\n\n const emittedSpan = Object.create(span) as ReadableSpan;\n Object.defineProperty(emittedSpan, \"attributes\", {\n value: newAttributes,\n writable: false,\n });\n const endTime = isZeroHrTime(span.endTime) ? span.startTime : span.endTime;\n Object.defineProperty(emittedSpan, \"endTime\", {\n value: endTime,\n writable: false,\n });\n\n super.onEnd(emittedSpan);\n }\n\n emitPartial(): void {\n const proxy = JudgmentTracerProvider.getInstance();\n const span = proxy.getCurrentSpan();\n if (!span?.isRecording()) return;\n if (\n this.getInternalAttribute(\n span.spanContext(),\n InternalAttributeKeys.DISABLE_PARTIAL_EMIT,\n false,\n )\n )\n return;\n // TODO: review, is this fine?\n this._emitSpan(span as unknown as ReadableSpan);\n }\n\n onStart(span: Span, parentContext: Context): void {\n for (const processor of getAll()) {\n processor.onStart(span, parentContext);\n }\n }\n\n onEnd(span: ReadableSpan): void {\n for (const processor of getAll()) {\n processor.onEnd(span);\n }\n const ctx = span.spanContext();\n const isCancelled = this.getInternalAttribute(\n ctx,\n InternalAttributeKeys.CANCELLED,\n false,\n );\n if (!isCancelled) {\n this._emitSpan(span);\n }\n const spanKey = makeSpanKey(ctx);\n this._cleanupSpanState(spanKey);\n }\n}\n",
18
18
  "import type { SpanProcessor } from \"@opentelemetry/sdk-trace-base\";\n\ntype ProcessorFactory = () => SpanProcessor;\nconst processors: ProcessorFactory[] = [];\n\nexport function register(processorFactory: ProcessorFactory): void {\n processors.push(processorFactory);\n}\n\nexport function getAll(): SpanProcessor[] {\n return processors.map((factory) => factory());\n}\n\nexport function clear(): void {\n processors.length = 0;\n}\n",
19
19
  "import type { Context } from \"@opentelemetry/api\";\nimport type {\n ReadableSpan,\n Span,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { AttributeKeys } from \"../../../JudgmentAttributeKeys\";\nimport type { Maybe } from \"../../../utils/type-helpers\";\nimport { CUSTOMER_ID_KEY } from \"./contextKeys\";\nimport { register } from \"./registry\";\n\nclass CustomerIdProcessor implements SpanProcessor {\n onStart(span: Span, parentContext: Context): void {\n const customerId = parentContext.getValue(CUSTOMER_ID_KEY) as Maybe<string>;\n if (customerId) {\n span.setAttribute(AttributeKeys.JUDGMENT_CUSTOMER_ID, customerId);\n }\n }\n\n onEnd(_span: ReadableSpan): void {\n /* empty */\n }\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n}\n\nregister(() => new CustomerIdProcessor());\nexport { CustomerIdProcessor };\n",
20
20
  "import type { Context } from \"@opentelemetry/api\";\nimport type {\n ReadableSpan,\n Span,\n SpanProcessor,\n} from \"@opentelemetry/sdk-trace-base\";\nimport { AttributeKeys } from \"../../../JudgmentAttributeKeys\";\nimport type { Maybe } from \"../../../utils/type-helpers\";\nimport { SESSION_ID_KEY } from \"./contextKeys\";\nimport { register } from \"./registry\";\n\nclass SessionIdProcessor implements SpanProcessor {\n onStart(span: Span, parentContext: Context): void {\n const sessionId = parentContext.getValue(SESSION_ID_KEY) as Maybe<string>;\n if (sessionId) {\n span.setAttribute(AttributeKeys.JUDGMENT_SESSION_ID, sessionId);\n }\n }\n\n onEnd(_span: ReadableSpan): void {\n /* empty */\n }\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n}\n\nregister(() => new SessionIdProcessor());\nexport { SessionIdProcessor };\n",
@@ -23,7 +23,7 @@
23
23
  "import type { JudgmentApiClient } from \"../internal/api\";\nimport { Logger } from \"./logger\";\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 response = await client.postV1projectsResolve({\n project_name: projectName,\n });\n const projectId = response.project_id;\n if (!projectId) {\n throw new Error(`Project ID not found for project: ${projectName}`);\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",
24
24
  "import { version } from \"../package.json\" with { type: \"json\" };\n\nexport const VERSION = version;\n"
25
25
  ],
26
- "mappings": "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",
27
- "debugId": "B863D2B61C4C13B264756E2164756E21",
26
+ "mappings": "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",
27
+ "debugId": "687F1644B3A1259E64756E2164756E21",
28
28
  "names": []
29
29
  }
@@ -3,14 +3,17 @@ import type { Instrumentation } from "@opentelemetry/instrumentation";
3
3
  import type { BasicTracerProvider } from "@opentelemetry/sdk-trace-base";
4
4
  import { JudgmentApiClient } from "../internal/api";
5
5
  import { Serializer } from "../utils/serializer";
6
+ import { Maybe } from "../utils/type-helpers";
6
7
  import type { JudgmentSpanExporter } from "./exporters/JudgmentSpanExporter";
7
8
  import type { JudgmentSpanProcessor } from "./processors/JudgmentSpanProcessor";
8
9
  export interface LLMMetadata {
9
- non_cached_input_tokens?: number | null | undefined;
10
- output_tokens?: number | null | undefined;
11
- cache_read_input_tokens?: number | null | undefined;
12
- cache_creation_input_tokens?: number | null | undefined;
13
- total_cost_usd?: number | null | undefined;
10
+ model?: Maybe<string>;
11
+ provider?: Maybe<string>;
12
+ non_cached_input_tokens?: Maybe<number>;
13
+ output_tokens?: Maybe<number>;
14
+ cache_read_input_tokens?: Maybe<number>;
15
+ cache_creation_input_tokens?: Maybe<number>;
16
+ total_cost_usd?: Maybe<number>;
14
17
  }
15
18
  export interface TracerConfig {
16
19
  projectName?: string;
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"JudgmentSpanProcessor.d.ts","sourceRoot":"","sources":["../../../src/trace/processors/JudgmentSpanProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,IAAI,EACT,KAAK,YAAY,EAClB,MAAM,+BAA+B,CAAC;AAKvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAUhD,qBAAa,qBAAsB,SAAQ,kBAAkB;IAC3D,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,mBAAmB,CAA4C;gBAGrE,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,QAAQ,EAAE,YAAY,EACtB,MAAM,CAAC,EAAE;QACP,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B;IAMH,OAAO,CAAC,iBAAiB;IAIzB,oBAAoB,CAClB,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GACb,IAAI;IAUP,oBAAoB,CAClB,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,MAAM,EACX,YAAY,GAAE,OAAc,GAC3B,OAAO;IAOV,OAAO,CAAC,SAAS;IA+BjB,WAAW,IAAI,IAAI;IAgBnB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI;IAMjD,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;CAgBhC"}
1
+ {"version":3,"file":"JudgmentSpanProcessor.d.ts","sourceRoot":"","sources":["../../../src/trace/processors/JudgmentSpanProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAU,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EACL,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,IAAI,EACT,KAAK,YAAY,EAClB,MAAM,+BAA+B,CAAC;AAKvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAchD,qBAAa,qBAAsB,SAAQ,kBAAkB;IAC3D,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,mBAAmB,CAA4C;gBAGrE,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,QAAQ,EAAE,YAAY,EACtB,MAAM,CAAC,EAAE;QACP,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B;IAMH,OAAO,CAAC,iBAAiB;IAIzB,oBAAoB,CAClB,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GACb,IAAI;IAUP,oBAAoB,CAClB,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,MAAM,EACX,YAAY,GAAE,OAAc,GAC3B,OAAO;IAOV,OAAO,CAAC,SAAS;IAgCjB,WAAW,IAAI,IAAI;IAgBnB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI;IAMjD,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;CAgBhC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "judgeval",
3
- "version": "0.9.1",
3
+ "version": "0.9.3",
4
4
  "description": "JavaScript/TypeScript client for Judgment evaluation platform",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",