judgeval 0.3.2 → 0.3.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.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import{OTLPTraceExporter as k}from"@opentelemetry/exporter-trace-otlp-http";class v{delegate;constructor(t,e,r,n){if(!n||n.trim()==="")throw Error("projectId is required for JudgmentSpanExporter");this.delegate=new k({url:t,headers:{Authorization:`Bearer ${e}`,"X-Organization-Id":r,"X-Project-Id":n}})}static builder(){return new M}export(t,e){this.delegate.export(t,e)}shutdown(){return this.delegate.shutdown()}forceFlush(){return this.delegate.forceFlush?.()??Promise.resolve()}}class M{_endpoint;_apiKey;_organizationId;_projectId;constructor(){}endpoint(t){return this._endpoint=t,this}apiKey(t){return this._apiKey=t,this}organizationId(t){return this._organizationId=t,this}projectId(t){return this._projectId=t,this}build(){if(!this._endpoint||this._endpoint.trim()==="")throw Error("Endpoint is required");if(!this._apiKey||this._apiKey.trim()==="")throw Error("API key is required");if(!this._organizationId||this._organizationId.trim()==="")throw Error("Organization ID is required");if(!this._projectId||this._projectId.trim()==="")throw Error("Project ID is required");return new v(this._endpoint,this._apiKey,this._organizationId,this._projectId)}}class A{export(t,e){e({code:0})}flush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}class u{static AttributeKeys={JUDGMENT_SPAN_KIND:"judgment.span_kind",JUDGMENT_INPUT:"judgment.input",JUDGMENT_OUTPUT:"judgment.output",JUDGMENT_OFFLINE_MODE:"judgment.offline_mode",JUDGMENT_UPDATE_ID:"judgment.update_id",JUDGMENT_CUSTOMER_ID:"judgment.customer_id",JUDGMENT_AGENT_ID:"judgment.agent_id",JUDGMENT_PARENT_AGENT_ID:"judgment.parent_agent_id",JUDGMENT_AGENT_CLASS_NAME:"judgment.agent_class_name",JUDGMENT_AGENT_INSTANCE_NAME:"judgment.agent_instance_name",PENDING_TRACE_EVAL:"judgment.pending_trace_eval",GEN_AI_PROMPT:"gen_ai.prompt",GEN_AI_COMPLETION:"gen_ai.completion",GEN_AI_REQUEST_MODEL:"gen_ai.request.model",GEN_AI_RESPONSE_MODEL:"gen_ai.response.model",GEN_AI_SYSTEM:"gen_ai.system",GEN_AI_USAGE_INPUT_TOKENS:"gen_ai.usage.input_tokens",GEN_AI_USAGE_OUTPUT_TOKENS:"gen_ai.usage.output_tokens",GEN_AI_USAGE_COMPLETION_TOKENS:"gen_ai.usage.completion_tokens",GEN_AI_REQUEST_TEMPERATURE:"gen_ai.request.temperature",GEN_AI_REQUEST_MAX_TOKENS:"gen_ai.request.max_tokens",GEN_AI_RESPONSE_FINISH_REASONS:"gen_ai.response.finish_reasons",GEN_AI_USAGE_TOTAL_COST:"gen_ai.usage.total_cost_usd"};static InternalAttributeKeys={DISABLE_PARTIAL_EMIT:"disable_partial_emit",CANCELLED:"cancelled"};static ResourceKeys={SERVICE_NAME:"service.name",TELEMETRY_SDK_LANGUAGE:"telemetry.sdk.language",TELEMETRY_SDK_NAME:"telemetry.sdk.name",TELEMETRY_SDK_VERSION:"telemetry.sdk.version",JUDGMENT_PROJECT_ID:"judgment.project_id"}}import{context as C,SpanKind as Y,trace as f}from"@opentelemetry/api";function g(t,e){let r=process.env[t];if(!r)return e??null;return r}var p=g("JUDGMENT_API_KEY"),E=g("JUDGMENT_ORG_ID"),m=g("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),I=g("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),pt=g("JUDGMENT_ENABLE_MONITORING","true"),Et=g("JUDGMENT_ENABLE_EVALUATIONS","true"),dt=g("JUDGMENT_NO_COLOR");class N{baseUrl;apiKey;organizationId;constructor(t,e,r){this.baseUrl=t,this.apiKey=e,this.organizationId=r}buildUrl(t){return this.baseUrl+t}buildHeaders(){if(!this.apiKey||!this.organizationId)throw Error("API key and organization ID cannot be null");return{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId}}async addToRunEvalQueueExamples(t){let e=this.buildUrl("/add_to_run_eval_queue/examples"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async addToRunEvalQueueTraces(t){let e=this.buildUrl("/add_to_run_eval_queue/traces"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async logEvalResults(t){let e=this.buildUrl("/log_eval_results/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async fetchExperimentRun(t){let e=this.buildUrl("/fetch_experiment_run/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async getEvaluationStatus(t,e){let r=new URLSearchParams;r.set("experiment_run_id",t),r.set("project_name",e);let n=this.buildUrl("/get_evaluation_status/"+(r.toString()?"?"+r.toString():"")),s=await fetch(n,{method:"GET",headers:this.buildHeaders()});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return}async scorerExists(t){let e=this.buildUrl("/scorer_exists/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async saveScorer(t){let e=this.buildUrl("/save_scorer/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchScorers(t){let e=this.buildUrl("/fetch_scorers/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async projectsResolve(t){let e=this.buildUrl("/projects/resolve/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}}var z=/^([^(]+?)=>/,F=/^[^(]*\(\s*([^)]*)\)/m,H=/,/,q=/^\s*(_?)(\S+?)\1\s*$/,B=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function V(t){return Function.prototype.toString.call(t)}function W(t){let e=V(t).replace(B,"");return e.match(z)||e.match(F)}function G(t){let e=W(t);if(!e||!e[1])return[];return e[1].split(H).map((r)=>{return r.replace(q,(s,a,o)=>o).trim()}).filter((r)=>r.length>0)}class i{static RESET="\x1B[0m";static RED="\x1B[31m";static YELLOW="\x1B[33m";static GRAY="\x1B[90m";static Level={DEBUG:0,INFO:1,WARNING:2,ERROR:3,CRITICAL:4};static initialized=!1;static currentLevel=i.Level.INFO;static useColor=!0;static initialize(){if(!i.initialized){let t=process.env.JUDGMENT_NO_COLOR;i.useColor=!t&&process.stdout.isTTY,i.initialized=!0}}static setLevel(t){i.currentLevel=t}static setUseColor(t){i.useColor=t}static log(t,e){if(i.initialize(),t<i.currentLevel)return;let r=new Date().toISOString().replace("T"," ").substring(0,19),n=Object.keys(i.Level).find((o)=>i.Level[o]===t)||"UNKNOWN",s=`${r} - judgeval - ${n} - ${e}`;if(i.useColor)s=`${t===i.Level.DEBUG||t===i.Level.INFO?i.GRAY:t===i.Level.WARNING?i.YELLOW:i.RED}${s}${i.RESET}`;(t>=i.Level.ERROR?process.stderr:process.stdout).write(s+`
2
- `)}static debug(t){i.log(i.Level.DEBUG,t)}static info(t){i.log(i.Level.INFO,t)}static warning(t){i.log(i.Level.WARNING,t)}static warn(t){i.log(i.Level.WARNING,t)}static error(t){i.log(i.Level.ERROR,t)}static critical(t){i.log(i.Level.CRITICAL,t)}}class _{static instances=new Map;apiClient;tracer=null;serializer=JSON.stringify;_initialized=!1;projectId=null;configuration;getConfiguration(){return this.configuration}getProjectId(){return this.projectId}getSerializer(){return this.serializer}constructor(t){this.configuration=t,this.apiClient=new N(this.configuration.apiUrl,this.configuration.apiKey,this.configuration.organizationId),this._initialized=!1}async resolveProjectId(){try{i.info(`Resolving project ID for project: ${this.configuration.projectName}`);let t=await this.apiClient.projectsResolve({project_name:this.configuration.projectName});i.info(`Resolved project ID: ${t.project_id}`);let e=t.project_id?.toString();if(!e)throw Error(`Project ID not found for project: ${this.configuration.projectName}`);return this.projectId=e,i.info(`Successfully resolved project ID: ${this.projectId}`),this.projectId}catch(t){throw Error(`Failed to resolve project ID: ${t instanceof Error?t.message:String(t)}`)}}static getExporter(t,e,r){let n=m?.endsWith("/")?`${m}otel/v1/traces`:`${m}/otel/v1/traces`;return v.builder().endpoint(n).apiKey(t).organizationId(e).projectId(r).build()}async getSpanExporter(){try{let t=await this.resolveProjectId();return this.createJudgmentSpanExporter(t)}catch(t){return i.error("Failed to resolve project "+this.configuration.projectName+", please create it first at https://app.judgmentlabs.ai/org/"+(this.configuration.organizationId||"unknown")+"/projects. Skipping Judgment export."),new A}}setSpanKind(t){let e=f.getActiveSpan();if(!e){i.warn("No active span found, skipping setSpanKind");return}if(t!==null)e.setAttribute(u.AttributeKeys.JUDGMENT_SPAN_KIND,t)}setAttribute(t,e){let r=f.getActiveSpan();if(!r){i.warn("No active span found, skipping setAttribute");return}r.setAttribute(t,this.serializer(e))}setLLMSpan(){this.setSpanKind("llm")}setToolSpan(){this.setSpanKind("tool")}setGeneralSpan(){this.setSpanKind("span")}setAttributes(t){if(!t)return;let e=f.getActiveSpan();if(!e){i.warn("No active span found, skipping setAttributes");return}for(let[r,n]of Object.entries(t))e.setAttribute(r,this.serializer(n))}setInput(t){this.setAttribute(u.AttributeKeys.JUDGMENT_INPUT,t)}setOutput(t){this.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,t)}asyncEvaluate(t,e,r){if(!this._initialized){i.warn("Tracer not initialized, skipping asyncEvaluate");return}if(!this.configuration.enableEvaluation)return;let n=f.getActiveSpan();if(!n){i.warn("No active span found, skipping asyncEvaluate");return}if(!n.isRecording()){i.warn("Active span is not recording, skipping asyncEvaluate");return}let s=n.spanContext(),a=s.traceId,o=s.spanId;i.info(`asyncEvaluate: project=${this.configuration.projectName}, traceId=${a}, spanId=${o}, scorer=${t.name}`);let c=this.createEvaluationRun(t,e,r,a,o);this.enqueueEvaluation(c)}asyncTraceEvaluate(t,e){if(!this._initialized){i.warn("Tracer not initialized, skipping asyncTraceEvaluate");return}if(!this.configuration.enableEvaluation)return;let r=f.getActiveSpan();if(!r){i.warn("No active span found, skipping asyncTraceEvaluate");return}if(!r.isRecording()){i.warn("Active span is not recording, skipping asyncTraceEvaluate");return}let n=r.spanContext(),s=n.traceId,a=n.spanId;i.info(`asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${s}, spanId=${a}, scorer=${t.name}`);try{let o=this.createTraceEvaluationRun(t,e,s,a),c=this.serializer(o);r.setAttribute(u.AttributeKeys.PENDING_TRACE_EVAL,c)}catch(o){i.error(`Failed to serialize trace evaluation: ${o instanceof Error?o.message:String(o)}`)}}createTraceEvaluationRun(t,e,r,n){let s=`async_trace_evaluate_${n||Date.now()}`,a=e||I,o=t.getScorerConfig();return{project_name:this.configuration.projectName,eval_name:s,scorer:o,model:a,organization_id:this.configuration.organizationId,trace_id:r,trace_span_id:n}}createJudgmentSpanExporter(t){let e=this.configuration.apiUrl.endsWith("/")?`${this.configuration.apiUrl}otel/v1/traces`:`${this.configuration.apiUrl}/otel/v1/traces`;return v.builder().endpoint(e).apiKey(this.configuration.apiKey).organizationId(this.configuration.organizationId).projectId(t).build()}createEvaluationRun(t,e,r,n,s){let a=`async_evaluate_${s||Date.now()}`,o=r||I,c=t.getScorerConfig();return{project_name:this.configuration.projectName,eval_name:a,examples:[e],custom_scorers:[],judgment_scorers:[c],model:o,trace_id:n,trace_span_id:s}}async enqueueEvaluation(t){if(!this.apiClient){i.warn("API client not available, skipping evaluation enqueue");return}try{await this.apiClient.addToRunEvalQueueExamples(t),i.info(`Enqueuing evaluation run: ${t.eval_name}`)}catch(e){i.error(`Failed to enqueue evaluation run: ${e instanceof Error?e.message:String(e)}`)}}observe(t,e="span"){return(...r)=>{let n=f.getActiveSpan();if(!n)return i.warn("No active span found, skipping observe"),t(...r);let s=t.name||"anonymous",a=f.getTracer(this.configuration.tracerName);return C.with(f.setSpan(C.active(),n),()=>{return a.startActiveSpan(s,{kind:Y.INTERNAL},(o)=>{try{o.setAttribute(u.AttributeKeys.JUDGMENT_SPAN_KIND,e);let c=G(t);if(c.length===r.length){let T={};c.forEach((K,d)=>{T[K]=r[d]}),o.setAttribute(u.AttributeKeys.JUDGMENT_INPUT,this.serializer(T))}let l=t(...r);if(l instanceof Promise)return l.then((T)=>{return o.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(T)),o.end(),T}).catch((T)=>{throw o.recordException(T),o.end(),T});else return o.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(l)),o.end(),l}catch(c){throw o.recordException(c),o.end(),c}})})}}async shutdown(){}}var D="opentelemetry.instrumentation.judgeval";class h{projectName;apiKey;organizationId;apiUrl;enableEvaluation;tracerName;constructor(t,e,r,n,s,a=D){this.projectName=t;this.apiKey=e;this.organizationId=r;this.apiUrl=n;this.enableEvaluation=s;this.tracerName=a}static createDefault(t){return new U().projectName(t).build()}static builder(){return new U}}class U{_projectName;_apiKey=p;_organizationId=E;_apiUrl=m;_enableEvaluation=!0;_tracerName=D;projectName(t){return this._projectName=t,this}apiKey(t){return this._apiKey=t,this}organizationId(t){return this._organizationId=t,this}apiUrl(t){return this._apiUrl=t,this}enableEvaluation(t){return this._enableEvaluation=t,this}tracerName(t){return this._tracerName=t,this}build(){if(!this._projectName)throw Error("Project name is required");if(!this._apiKey)throw Error("API key is required");if(!this._organizationId)throw Error("Organization ID is required");if(!this._apiUrl)throw Error("API URL is required");return new h(this._projectName,this._apiKey,this._organizationId,this._apiUrl,this._enableEvaluation,this._tracerName)}}function Gt(t){return{example_id:void 0,created_at:new Date().toISOString(),name:null,...t}}var X;((l)=>{l.INPUT="input";l.ACTUAL_OUTPUT="actual_output";l.EXPECTED_OUTPUT="expected_output";l.CONTEXT="context";l.RETRIEVAL_CONTEXT="retrieval_context";l.TOOLS_CALLED="tools_called";l.EXPECTED_TOOLS="expected_tools";l.ADDITIONAL_METADATA="additional_metadata"})(X||={});function $(){let t={score_type:"",class_name:"",name:"",addModel:(e)=>{t.model=e},successCheck:()=>{if(t.error!=null)return!1;if(t.score==null)return!1;let e=t.threshold??0.5,r=t.score;return e!=null&&r!=null&&r>=e},getRequiredParams:()=>{return[]},getScorerConfig:()=>{return{score_type:t.score_type,name:t.name,threshold:t.threshold??0.5,strict_mode:t.strict_mode??!1,required_params:[],kwargs:{}}}};if(t.class_name="BaseScorer",t.name=t.class_name,t.strict_mode===!0)t.threshold=1;return t}var J;((d)=>{d.PROMPT_SCORER="Prompt Scorer";d.TRACE_PROMPT_SCORER="Trace Prompt Scorer";d.FAITHFULNESS="Faithfulness";d.ANSWER_RELEVANCY="Answer Relevancy";d.ANSWER_CORRECTNESS="Answer Correctness";d.INSTRUCTION_ADHERENCE="Instruction Adherence";d.EXECUTION_ORDER="Execution Order";d.TOOL_ORDER="Tool Order";d.CLASSIFIER="Classifier";d.TOOL_DEPENDENCY="Tool Dependency";d.CUSTOM="Custom"})(J||={});function Ft(t,e){let r=$();return r.scoreType=t,r.name=t,r.score_type=t,r.requiredParams=e,r.setThreshold=(n)=>{if(n<0||n>1)throw Error(`Threshold must be between 0 and 1, got: ${n}`);r.threshold=n},r.getScoreType=()=>{return r.scoreType},r.setRequiredParams=(n)=>{r.requiredParams=n},r}class S extends Error{statusCode;constructor(t,e){super(e);this.statusCode=t;this.name="JudgmentAPIError"}}async function b(t,e,r,n,s=p||"",a=E||"",o){if(!m||!s||!a)throw Error("Missing required API credentials");return(await new N(m,s,a).saveScorer({name:t,prompt:e,threshold:r,options:n,is_trace:o})).name}async function O(t,e=p||"",r=E||""){if(!m||!e||!r)throw Error("Missing required API credentials");let s=await new N(m,e,r).fetchScorers({names:[t]});if(s.scorers.length===0)throw new S(404,`Scorer with name ${t} not found`);let{created_at:a,updated_at:o,...c}=s.scorers[0];return c}async function P(t,e=p||"",r=E||""){if(!m||!e||!r)throw Error("Missing required API credentials");return(await new N(m,e,r).scorerExists({name:t})).exists}class R{scoreType;name;prompt;threshold;options;judgmentApiKey;organizationId;requiredParams;score_type;class_name;model;score;error;strict_mode;constructor(t,e,r,n,s,a,o=p||"",c=E||""){this.scoreType=t,this.name=e,this.prompt=r,this.threshold=n,this.requiredParams=s,this.options=a,this.judgmentApiKey=o,this.organizationId=c,this.score_type=t,this.class_name="BasePromptScorer",this.model=void 0,this.score=void 0,this.error=null,this.strict_mode=!1}score_breakdown;reason;using_native_model;success;model_client;additional_metadata;user;server_hosted;static async get(t,e=p||"",r=E||""){let n=await O(t,e,r),s=n.is_trace===!0,a=this.prototype.scoreType==="Trace Prompt Scorer";if(s!==a)throw new S(400,`Scorer with name ${t} is not a ${this.name}`);let o=s?"Trace Prompt Scorer":"Prompt Scorer";return new this(o,n.name,n.prompt,n.threshold,[],n.options,e,r)}static async create(t,e,r=0.5,n,s=p||"",a=E||""){if(await P(t,s,a))throw new S(400,`Scorer with name ${t} already exists. Either use the existing scorer with the get() method or use a new name.`);let o=this.prototype.scoreType==="Trace Prompt Scorer",c=o?"Trace Prompt Scorer":"Prompt Scorer";return await b(t,e,r,n,s,a,o),new this(c,t,e,r,[],n,s,a)}async updateThreshold(t){this.setThreshold(t),await this.pushPromptScorer()}async setPrompt(t){this.prompt=t,await this.pushPromptScorer()}async setOptions(t){this.options=t,await this.pushPromptScorer()}async appendToPrompt(t){this.prompt+=t,await this.pushPromptScorer()}getThreshold(){return this.threshold}getPrompt(){return this.prompt}getOptions(){return this.options?{...this.options}:null}getName(){return this.name}getConfig(){return{name:this.name,prompt:this.prompt,threshold:this.threshold,options:this.options}}async pushPromptScorer(){await b(this.name,this.prompt,this.threshold,this.options,this.judgmentApiKey,this.organizationId)}toString(){return`${this.constructor.name}(name=${this.name}, prompt=${this.prompt}, threshold=${this.threshold}, options=${JSON.stringify(this.options)})`}addModel(t){this.model=t}successCheck(){if(this.error!=null)return!1;if(this.score==null)return!1;let t=this.threshold??0.5,e=this.score;return t!=null&&e!=null&&e>=t}getRequiredParams(){if(Array.isArray(this.requiredParams))return[...this.requiredParams];return[]}setThreshold(t){if(t<0||t>1)throw Error(`Threshold must be between 0 and 1, got: ${t}`);this.threshold=t}getScoreType(){return this.scoreType}setRequiredParams(t){this.requiredParams=t}getScorerConfig(){return{score_type:this.getScoreType(),name:this.getName(),threshold:this.getThreshold(),strict_mode:this.strict_mode??!1,required_params:this.getRequiredParams(),kwargs:{prompt:this.getPrompt(),...this.getOptions()?{options:this.getOptions()}:{}}}}}class j extends R{constructor(t,e,r,n,s=[],a,o=p||"",c=E||""){super(t,e,r,n,s,a,o,c)}}class L extends R{constructor(t,e,r,n,s=[],a,o=p||"",c=E||""){super(t,e,r,n,s,a,o,c)}}import{resourceFromAttributes as Q}from"@opentelemetry/resources";import{BatchSpanProcessor as Z,WebTracerProvider as tt}from"@opentelemetry/sdk-trace-web";var y="0.3.2";class x extends _{webTracerProvider;async initialize(t={}){if(this._initialized)return this;try{let e={[u.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[u.ResourceKeys.TELEMETRY_SDK_VERSION]:y,...t.resourceAttributes},r=await this.getSpanExporter();return this.webTracerProvider=new tt({resource:Q(e),spanProcessors:[new Z(r)]}),this.webTracerProvider.register(),this._initialized=!0,this}catch(e){throw Error(`Failed to initialize browser tracer: ${e instanceof Error?e.message:String(e)}`)}}static getInstance(t){let e=`BrowserTracer:${t.projectName}`;if(!_.instances.has(e))_.instances.set(e,new x(t));return _.instances.get(e)}static createDefault(t){let e=h.builder().projectName(t).build();return x.getInstance(e)}static createWithConfiguration(t){return new x(t)}}import{resourceFromAttributes as et}from"@opentelemetry/resources";import{NodeSDK as rt}from"@opentelemetry/sdk-node";import{BatchSpanProcessor as nt}from"@opentelemetry/sdk-trace-node";class w extends _{nodeSDK;async initialize(t={}){if(this._initialized)return this;try{let e={[u.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[u.ResourceKeys.TELEMETRY_SDK_VERSION]:y,...t.resourceAttributes},r=await this.getSpanExporter();return this.nodeSDK=new rt({resource:et(e),instrumentations:t.instrumentations,spanProcessor:new nt(r),...t}),this.nodeSDK.start(),this._initialized=!0,this}catch(e){throw Error(`Failed to initialize node tracer: ${e instanceof Error?e.message:String(e)}`)}}static getInstance(t){let e=`NodeTracer:${t.projectName}`;if(!_.instances.has(e))_.instances.set(e,new w(t));return _.instances.get(e)}static createDefault(t){let e=h.builder().projectName(t).enableEvaluation(!0).build();return w.getInstance(e)}static createWithConfiguration(t){return new w(t)}async shutdown(){if(this.nodeSDK)await this.nodeSDK.shutdown()}}export{P as scorerExists,b as pushPromptScorer,G as parseFunctionArgs,O as fetchPromptScorer,Gt as createExample,$ as createBaseScorer,Ft as createAPIScorer,U as TracerConfigurationBuilder,h as TracerConfiguration,_ as Tracer,L as TracePromptScorer,j as PromptScorer,u as OpenTelemetryKeys,w as NodeTracer,A as NoOpSpanExporter,i as Logger,v as JudgmentSpanExporter,N as JudgmentApiClient,S as JudgmentAPIError,E as JUDGMENT_ORG_ID,dt as JUDGMENT_NO_COLOR,pt as JUDGMENT_ENABLE_MONITORING,Et as JUDGMENT_ENABLE_EVALUATIONS,I as JUDGMENT_DEFAULT_GPT_MODEL,m as JUDGMENT_API_URL,p as JUDGMENT_API_KEY,X as ExampleParams,x as BrowserTracer,R as BasePromptScorer,J as APIScorerType};
1
+ import{OTLPTraceExporter as L}from"@opentelemetry/exporter-trace-otlp-http";class N{delegate;constructor(t,e,r,i){if(!i||i.trim()==="")throw Error("projectId is required for JudgmentSpanExporter");this.delegate=new L({url:t,headers:{Authorization:`Bearer ${e}`,"X-Organization-Id":r,"X-Project-Id":i}})}static builder(){return new U}export(t,e){this.delegate.export(t,e)}shutdown(){return this.delegate.shutdown()}forceFlush(){return this.delegate.forceFlush?.()??Promise.resolve()}}class U{_endpoint;_apiKey;_organizationId;_projectId;constructor(){}endpoint(t){return this._endpoint=t,this}apiKey(t){return this._apiKey=t,this}organizationId(t){return this._organizationId=t,this}projectId(t){return this._projectId=t,this}build(){if(!this._endpoint||this._endpoint.trim()==="")throw Error("Endpoint is required");if(!this._apiKey||this._apiKey.trim()==="")throw Error("API key is required");if(!this._organizationId||this._organizationId.trim()==="")throw Error("Organization ID is required");if(!this._projectId||this._projectId.trim()==="")throw Error("Project ID is required");return new N(this._endpoint,this._apiKey,this._organizationId,this._projectId)}}class O{export(t,e){e({code:0})}flush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}class u{static AttributeKeys={JUDGMENT_SPAN_KIND:"judgment.span_kind",JUDGMENT_INPUT:"judgment.input",JUDGMENT_OUTPUT:"judgment.output",JUDGMENT_OFFLINE_MODE:"judgment.offline_mode",JUDGMENT_UPDATE_ID:"judgment.update_id",JUDGMENT_CUSTOMER_ID:"judgment.customer_id",JUDGMENT_AGENT_ID:"judgment.agent_id",JUDGMENT_PARENT_AGENT_ID:"judgment.parent_agent_id",JUDGMENT_AGENT_CLASS_NAME:"judgment.agent_class_name",JUDGMENT_AGENT_INSTANCE_NAME:"judgment.agent_instance_name",PENDING_TRACE_EVAL:"judgment.pending_trace_eval",GEN_AI_PROMPT:"gen_ai.prompt",GEN_AI_COMPLETION:"gen_ai.completion",GEN_AI_REQUEST_MODEL:"gen_ai.request.model",GEN_AI_RESPONSE_MODEL:"gen_ai.response.model",GEN_AI_SYSTEM:"gen_ai.system",GEN_AI_USAGE_INPUT_TOKENS:"gen_ai.usage.input_tokens",GEN_AI_USAGE_OUTPUT_TOKENS:"gen_ai.usage.output_tokens",GEN_AI_USAGE_COMPLETION_TOKENS:"gen_ai.usage.completion_tokens",GEN_AI_REQUEST_TEMPERATURE:"gen_ai.request.temperature",GEN_AI_REQUEST_MAX_TOKENS:"gen_ai.request.max_tokens",GEN_AI_RESPONSE_FINISH_REASONS:"gen_ai.response.finish_reasons",GEN_AI_USAGE_TOTAL_COST:"gen_ai.usage.total_cost_usd"};static InternalAttributeKeys={DISABLE_PARTIAL_EMIT:"disable_partial_emit",CANCELLED:"cancelled"};static ResourceKeys={SERVICE_NAME:"service.name",TELEMETRY_SDK_LANGUAGE:"telemetry.sdk.language",TELEMETRY_SDK_NAME:"telemetry.sdk.name",TELEMETRY_SDK_VERSION:"telemetry.sdk.version",JUDGMENT_PROJECT_ID:"judgment.project_id"}}import{trace as S}from"@opentelemetry/api";function T(t,e){let r=process.env[t];if(!r)return e??null;return r}var l=T("JUDGMENT_API_KEY"),p=T("JUDGMENT_ORG_ID"),E=T("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),y=T("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),ct=T("JUDGMENT_ENABLE_MONITORING","true"),ut=T("JUDGMENT_ENABLE_EVALUATIONS","true"),lt=T("JUDGMENT_NO_COLOR");class f{baseUrl;apiKey;organizationId;constructor(t,e,r){this.baseUrl=t,this.apiKey=e,this.organizationId=r}buildUrl(t){return this.baseUrl+t}buildHeaders(){if(!this.apiKey||!this.organizationId)throw Error("API key and organization ID cannot be null");return{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId}}async addToRunEvalQueueExamples(t){let e=this.buildUrl("/add_to_run_eval_queue/examples"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async addToRunEvalQueueTraces(t){let e=this.buildUrl("/add_to_run_eval_queue/traces"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async logEvalResults(t){let e=this.buildUrl("/log_eval_results/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async fetchExperimentRun(t){let e=this.buildUrl("/fetch_experiment_run/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async getEvaluationStatus(t,e){let r=new URLSearchParams;r.set("experiment_run_id",t),r.set("project_name",e);let i=this.buildUrl("/get_evaluation_status/"+(r.toString()?"?"+r.toString():"")),s=await fetch(i,{method:"GET",headers:this.buildHeaders()});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return}async scorerExists(t){let e=this.buildUrl("/scorer_exists/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async saveScorer(t){let e=this.buildUrl("/save_scorer/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchScorers(t){let e=this.buildUrl("/fetch_scorers/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async projectsResolve(t){let e=this.buildUrl("/projects/resolve/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}}var K=/^([^(]+?)=>/,k=/^[^(]*\(\s*([^)]*)\)/m,z=/,/,F=/^\s*(_?)(\S+?)\1\s*$/,H=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function q(t){return Function.prototype.toString.call(t)}function B(t){let e=q(t).replace(H,"");return e.match(K)||e.match(k)}function M(t){let e=B(t);if(!e||!e[1])return[];return e[1].split(z).map((r)=>{return r.replace(F,(s,a,o)=>o).trim()}).filter((r)=>r.length>0)}class n{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=n.Level.INFO;static useColor=!0;static initialize(){if(!n.initialized){let t=process.env.JUDGMENT_NO_COLOR;n.useColor=!t&&process.stdout.isTTY,n.initialized=!0}}static setLevel(t){n.currentLevel=t}static setUseColor(t){n.useColor=t}static log(t,e){if(n.initialize(),t<n.currentLevel)return;let r=new Date().toISOString().replace("T"," ").substring(0,19),i=Object.keys(n.Level).find((o)=>n.Level[o]===t)||"UNKNOWN",s=`${r} - judgeval - ${i} - ${e}`;if(n.useColor)s=`${t===n.Level.DEBUG||t===n.Level.INFO?n.GRAY:t===n.Level.WARNING?n.YELLOW:n.RED}${s}${n.RESET}`;(t>=n.Level.ERROR?process.stderr:process.stdout).write(s+`
2
+ `)}static debug(t){n.log(n.Level.DEBUG,t)}static info(t){n.log(n.Level.INFO,t)}static warning(t){n.log(n.Level.WARNING,t)}static warn(t){n.log(n.Level.WARNING,t)}static error(t){n.log(n.Level.ERROR,t)}static critical(t){n.log(n.Level.CRITICAL,t)}}class _{static instances=new Map;apiClient;tracer;serializer=JSON.stringify;_initialized=!1;projectId=null;configuration;getConfiguration(){return this.configuration}getProjectId(){return this.projectId}getSerializer(){return this.serializer}constructor(t){this.configuration=t,this.tracer=S.getTracer(this.configuration.tracerName),this.apiClient=new f(this.configuration.apiUrl,this.configuration.apiKey,this.configuration.organizationId),this._initialized=!1}async resolveProjectId(){try{n.info(`Resolving project ID for project: ${this.configuration.projectName}`);let t=await this.apiClient.projectsResolve({project_name:this.configuration.projectName});n.info(`Resolved project ID: ${t.project_id}`);let e=t.project_id?.toString();if(!e)throw Error(`Project ID not found for project: ${this.configuration.projectName}`);return this.projectId=e,n.info(`Successfully resolved project ID: ${this.projectId}`),this.projectId}catch(t){throw Error(`Failed to resolve project ID: ${t instanceof Error?t.message:String(t)}`)}}static getExporter(t,e,r){let i=E?.endsWith("/")?`${E}otel/v1/traces`:`${E}/otel/v1/traces`;return N.builder().endpoint(i).apiKey(t).organizationId(e).projectId(r).build()}async getSpanExporter(){try{let t=await this.resolveProjectId();return this.createJudgmentSpanExporter(t)}catch(t){return n.error("Failed to resolve project "+this.configuration.projectName+", please create it first at https://app.judgmentlabs.ai/org/"+(this.configuration.organizationId||"unknown")+"/projects. Skipping Judgment export."),new O}}setSpanKind(t){let e=S.getActiveSpan();if(!e){n.warn("No active span found, skipping setSpanKind");return}if(t!==null)e.setAttribute(u.AttributeKeys.JUDGMENT_SPAN_KIND,t)}setAttribute(t,e){let r=S.getActiveSpan();if(!r){n.warn("No active span found, skipping setAttribute");return}r.setAttribute(t,this.serializer(e))}setLLMSpan(){this.setSpanKind("llm")}setToolSpan(){this.setSpanKind("tool")}setGeneralSpan(){this.setSpanKind("span")}setAttributes(t){if(!t)return;let e=S.getActiveSpan();if(!e){n.warn("No active span found, skipping setAttributes");return}for(let[r,i]of Object.entries(t))e.setAttribute(r,this.serializer(i))}setInput(t){this.setAttribute(u.AttributeKeys.JUDGMENT_INPUT,t)}setOutput(t){this.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,t)}asyncEvaluate(t,e,r){if(!this._initialized){n.warn("Tracer not initialized, skipping asyncEvaluate");return}if(!this.configuration.enableEvaluation)return;let i=S.getActiveSpan();if(!i){n.warn("No active span found, skipping asyncEvaluate");return}if(!i.isRecording()){n.warn("Active span is not recording, skipping asyncEvaluate");return}let s=i.spanContext(),a=s.traceId,o=s.spanId;n.info(`asyncEvaluate: project=${this.configuration.projectName}, traceId=${a}, spanId=${o}, scorer=${t.name}`);let c=this.createEvaluationRun(t,e,r,a,o);this.enqueueEvaluation(c)}asyncTraceEvaluate(t,e){if(!this._initialized){n.warn("Tracer not initialized, skipping asyncTraceEvaluate");return}if(!this.configuration.enableEvaluation)return;let r=S.getActiveSpan();if(!r){n.warn("No active span found, skipping asyncTraceEvaluate");return}if(!r.isRecording()){n.warn("Active span is not recording, skipping asyncTraceEvaluate");return}let i=r.spanContext(),s=i.traceId,a=i.spanId;n.info(`asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${s}, spanId=${a}, scorer=${t.name}`);try{let o=this.createTraceEvaluationRun(t,e,s,a),c=this.serializer(o);r.setAttribute(u.AttributeKeys.PENDING_TRACE_EVAL,c)}catch(o){n.error(`Failed to serialize trace evaluation: ${o instanceof Error?o.message:String(o)}`)}}createTraceEvaluationRun(t,e,r,i){let s=`async_trace_evaluate_${i||Date.now()}`,a=e||y,o=t.getScorerConfig();return{project_name:this.configuration.projectName,eval_name:s,scorer:o,model:a,organization_id:this.configuration.organizationId,trace_id:r,trace_span_id:i}}createJudgmentSpanExporter(t){let e=this.configuration.apiUrl.endsWith("/")?`${this.configuration.apiUrl}otel/v1/traces`:`${this.configuration.apiUrl}/otel/v1/traces`;return N.builder().endpoint(e).apiKey(this.configuration.apiKey).organizationId(this.configuration.organizationId).projectId(t).build()}createEvaluationRun(t,e,r,i,s){let a=`async_evaluate_${s||Date.now()}`,o=r||y,c=t.getScorerConfig();return{project_name:this.configuration.projectName,eval_name:a,examples:[e],custom_scorers:[],judgment_scorers:[c],model:o,trace_id:i,trace_span_id:s}}async enqueueEvaluation(t){if(!this.apiClient){n.warn("API client not available, skipping evaluation enqueue");return}try{await this.apiClient.addToRunEvalQueueExamples(t),n.info(`Enqueuing evaluation run: ${t.eval_name}`)}catch(e){n.error(`Failed to enqueue evaluation run: ${e instanceof Error?e.message:String(e)}`)}}observe(t,e="span"){return(...r)=>{let i=t.name||"anonymous";return this.tracer.startActiveSpan(i,(s)=>{try{s.setAttribute(u.AttributeKeys.JUDGMENT_SPAN_KIND,e);let a=M(t);if(a.length===r.length){let c={};a.forEach((d,j)=>{c[d]=r[j]}),s.setAttribute(u.AttributeKeys.JUDGMENT_INPUT,this.serializer(c))}let o=t(...r);if(o instanceof Promise)return o.then((c)=>{return s.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(c)),s.end(),c}).catch((c)=>{throw s.recordException(c),s.end(),c});else return s.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(o)),s.end(),o}catch(a){throw s.recordException(a),s.end(),a}})}}async shutdown(){}}var I="opentelemetry.instrumentation.judgeval";class v{projectName;apiKey;organizationId;apiUrl;enableEvaluation;tracerName;constructor(t,e,r,i,s,a=I){this.projectName=t;this.apiKey=e;this.organizationId=r;this.apiUrl=i;this.enableEvaluation=s;this.tracerName=a}static createDefault(t){return new D().projectName(t).build()}static builder(){return new D}}class D{_projectName;_apiKey=l;_organizationId=p;_apiUrl=E;_enableEvaluation=!0;_tracerName=I;projectName(t){return this._projectName=t,this}apiKey(t){return this._apiKey=t,this}organizationId(t){return this._organizationId=t,this}apiUrl(t){return this._apiUrl=t,this}enableEvaluation(t){return this._enableEvaluation=t,this}tracerName(t){return this._tracerName=t,this}build(){if(!this._projectName)throw Error("Project name is required");if(!this._apiKey)throw Error("API key is required");if(!this._organizationId)throw Error("Organization ID is required");if(!this._apiUrl)throw Error("API URL is required");return new v(this._projectName,this._apiKey,this._organizationId,this._apiUrl,this._enableEvaluation,this._tracerName)}}function Ut(t){return{example_id:void 0,created_at:new Date().toISOString(),name:null,...t}}var V;((d)=>{d.INPUT="input";d.ACTUAL_OUTPUT="actual_output";d.EXPECTED_OUTPUT="expected_output";d.CONTEXT="context";d.RETRIEVAL_CONTEXT="retrieval_context";d.TOOLS_CALLED="tools_called";d.EXPECTED_TOOLS="expected_tools";d.ADDITIONAL_METADATA="additional_metadata"})(V||={});function G(){let t={score_type:"",class_name:"",name:"",addModel:(e)=>{t.model=e},successCheck:()=>{if(t.error!=null)return!1;if(t.score==null)return!1;let e=t.threshold??0.5,r=t.score;return e!=null&&r!=null&&r>=e},getRequiredParams:()=>{return[]},getScorerConfig:()=>{return{score_type:t.score_type,name:t.name,threshold:t.threshold??0.5,strict_mode:t.strict_mode??!1,required_params:[],kwargs:{}}}};if(t.class_name="BaseScorer",t.name=t.class_name,t.strict_mode===!0)t.threshold=1;return t}var C;((m)=>{m.PROMPT_SCORER="Prompt Scorer";m.TRACE_PROMPT_SCORER="Trace Prompt Scorer";m.FAITHFULNESS="Faithfulness";m.ANSWER_RELEVANCY="Answer Relevancy";m.ANSWER_CORRECTNESS="Answer Correctness";m.INSTRUCTION_ADHERENCE="Instruction Adherence";m.EXECUTION_ORDER="Execution Order";m.TOOL_ORDER="Tool Order";m.CLASSIFIER="Classifier";m.TOOL_DEPENDENCY="Tool Dependency";m.CUSTOM="Custom"})(C||={});function kt(t,e){let r=G();return r.scoreType=t,r.name=t,r.score_type=t,r.requiredParams=e,r.setThreshold=(i)=>{if(i<0||i>1)throw Error(`Threshold must be between 0 and 1, got: ${i}`);r.threshold=i},r.getScoreType=()=>{return r.scoreType},r.setRequiredParams=(i)=>{r.requiredParams=i},r}class g extends Error{statusCode;constructor(t,e){super(e);this.statusCode=t;this.name="JudgmentAPIError"}}async function R(t,e,r,i,s=l||"",a=p||"",o){if(!E||!s||!a)throw Error("Missing required API credentials");return(await new f(E,s,a).saveScorer({name:t,prompt:e,threshold:r,options:i,is_trace:o})).name}async function A(t,e=l||"",r=p||""){if(!E||!e||!r)throw Error("Missing required API credentials");let s=await new f(E,e,r).fetchScorers({names:[t]});if(s.scorers.length===0)throw new g(404,`Scorer with name ${t} not found`);let{created_at:a,updated_at:o,...c}=s.scorers[0];return c}async function w(t,e=l||"",r=p||""){if(!E||!e||!r)throw Error("Missing required API credentials");return(await new f(E,e,r).scorerExists({name:t})).exists}class h{scoreType;name;prompt;threshold;options;judgmentApiKey;organizationId;requiredParams;score_type;class_name;model;score;error;strict_mode;constructor(t,e,r,i,s,a,o=l||"",c=p||""){this.scoreType=t,this.name=e,this.prompt=r,this.threshold=i,this.requiredParams=s,this.options=a,this.judgmentApiKey=o,this.organizationId=c,this.score_type=t,this.class_name="BasePromptScorer",this.model=void 0,this.score=void 0,this.error=null,this.strict_mode=!1}score_breakdown;reason;using_native_model;success;model_client;additional_metadata;user;server_hosted;static async get(t,e=l||"",r=p||""){let i=await A(t,e,r),s=i.is_trace===!0,a=this.prototype.scoreType==="Trace Prompt Scorer";if(s!==a)throw new g(400,`Scorer with name ${t} is not a ${this.name}`);let o=s?"Trace Prompt Scorer":"Prompt Scorer";return new this(o,i.name,i.prompt,i.threshold,[],i.options,e,r)}static async create(t,e,r=0.5,i,s=l||"",a=p||""){if(await w(t,s,a))throw new g(400,`Scorer with name ${t} already exists. Either use the existing scorer with the get() method or use a new name.`);let o=this.prototype.scoreType==="Trace Prompt Scorer",c=o?"Trace Prompt Scorer":"Prompt Scorer";return await R(t,e,r,i,s,a,o),new this(c,t,e,r,[],i,s,a)}async updateThreshold(t){this.setThreshold(t),await this.pushPromptScorer()}async setPrompt(t){this.prompt=t,await this.pushPromptScorer()}async setOptions(t){this.options=t,await this.pushPromptScorer()}async appendToPrompt(t){this.prompt+=t,await this.pushPromptScorer()}getThreshold(){return this.threshold}getPrompt(){return this.prompt}getOptions(){return this.options?{...this.options}:null}getName(){return this.name}getConfig(){return{name:this.name,prompt:this.prompt,threshold:this.threshold,options:this.options}}async pushPromptScorer(){await R(this.name,this.prompt,this.threshold,this.options,this.judgmentApiKey,this.organizationId)}toString(){return`${this.constructor.name}(name=${this.name}, prompt=${this.prompt}, threshold=${this.threshold}, options=${JSON.stringify(this.options)})`}addModel(t){this.model=t}successCheck(){if(this.error!=null)return!1;if(this.score==null)return!1;let t=this.threshold??0.5,e=this.score;return t!=null&&e!=null&&e>=t}getRequiredParams(){if(Array.isArray(this.requiredParams))return[...this.requiredParams];return[]}setThreshold(t){if(t<0||t>1)throw Error(`Threshold must be between 0 and 1, got: ${t}`);this.threshold=t}getScoreType(){return this.scoreType}setRequiredParams(t){this.requiredParams=t}getScorerConfig(){return{score_type:this.getScoreType(),name:this.getName(),threshold:this.getThreshold(),strict_mode:this.strict_mode??!1,required_params:this.getRequiredParams(),kwargs:{prompt:this.getPrompt(),...this.getOptions()?{options:this.getOptions()}:{}}}}}class $ extends h{constructor(t,e,r,i,s=[],a,o=l||"",c=p||""){super(t,e,r,i,s,a,o,c)}}class J extends h{constructor(t,e,r,i,s=[],a,o=l||"",c=p||""){super(t,e,r,i,s,a,o,c)}}import{resourceFromAttributes as W}from"@opentelemetry/resources";import{BatchSpanProcessor as Y,WebTracerProvider as X}from"@opentelemetry/sdk-trace-web";var P="0.3.3";class b extends _{webTracerProvider;async initialize(t={}){if(this._initialized)return this;try{let e={[u.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[u.ResourceKeys.TELEMETRY_SDK_VERSION]:P,...t.resourceAttributes},r=await this.getSpanExporter();return this.webTracerProvider=new X({resource:W(e),spanProcessors:[new Y(r)]}),this.webTracerProvider.register(),this._initialized=!0,this}catch(e){throw Error(`Failed to initialize browser tracer: ${e instanceof Error?e.message:String(e)}`)}}static getInstance(t){let e=`BrowserTracer:${t.projectName}`;if(!_.instances.has(e))_.instances.set(e,new b(t));return _.instances.get(e)}static createDefault(t){let e=v.builder().projectName(t).build();return b.getInstance(e)}static createWithConfiguration(t){return new b(t)}}import{resourceFromAttributes as Q}from"@opentelemetry/resources";import{NodeSDK as Z}from"@opentelemetry/sdk-node";import{BatchSpanProcessor as tt}from"@opentelemetry/sdk-trace-node";class x extends _{nodeSDK;async initialize(t={}){if(this._initialized)return this;try{let e={[u.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[u.ResourceKeys.TELEMETRY_SDK_VERSION]:P,...t.resourceAttributes},r=await this.getSpanExporter();return this.nodeSDK=new Z({resource:Q(e),instrumentations:t.instrumentations,spanProcessor:new tt(r),...t}),this.nodeSDK.start(),this._initialized=!0,this}catch(e){throw Error(`Failed to initialize node tracer: ${e instanceof Error?e.message:String(e)}`)}}static getInstance(t){let e=`NodeTracer:${t.projectName}`;if(!_.instances.has(e))_.instances.set(e,new x(t));return _.instances.get(e)}static createDefault(t){let e=v.builder().projectName(t).enableEvaluation(!0).build();return x.getInstance(e)}static createWithConfiguration(t){return new x(t)}async shutdown(){if(this.nodeSDK)await this.nodeSDK.shutdown()}}export{w as scorerExists,R as pushPromptScorer,M as parseFunctionArgs,A as fetchPromptScorer,Ut as createExample,G as createBaseScorer,kt as createAPIScorer,D as TracerConfigurationBuilder,v as TracerConfiguration,_ as Tracer,J as TracePromptScorer,$ as PromptScorer,u as OpenTelemetryKeys,x as NodeTracer,O as NoOpSpanExporter,n as Logger,N as JudgmentSpanExporter,f as JudgmentApiClient,g as JudgmentAPIError,p as JUDGMENT_ORG_ID,lt as JUDGMENT_NO_COLOR,ct as JUDGMENT_ENABLE_MONITORING,ut as JUDGMENT_ENABLE_EVALUATIONS,y as JUDGMENT_DEFAULT_GPT_MODEL,E as JUDGMENT_API_URL,l as JUDGMENT_API_KEY,V as ExampleParams,b as BrowserTracer,h as BasePromptScorer,C as APIScorerType};
3
3
 
4
- //# debugId=6A697B7F3936AB8164756E2164756E21
4
+ //# debugId=B94AA7E5BEFF626164756E2164756E21
5
5
  //# sourceMappingURL=index.mjs.map
@@ -5,7 +5,7 @@
5
5
  "import { ExportResult } from \"@opentelemetry/core\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\n\n/**\n * SpanExporter implementation that sends spans to Judgment Labs with project identification.\n *\n * This exporter wraps the OTLP HTTP exporter and adds Judgment Labs specific headers and project\n * identification to all exported spans.\n */\nexport class JudgmentSpanExporter implements SpanExporter {\n private readonly delegate: SpanExporter;\n\n /**\n * Creates a new JudgmentSpanExporter with the specified configuration.\n *\n * @param endpoint the OTLP endpoint URL\n * @param apiKey the API key for authentication\n * @param organizationId the organization ID\n * @param projectId the project ID (must not be null or empty)\n * @throws Error if projectId is null or empty\n */\n constructor(\n endpoint: string,\n apiKey: string,\n organizationId: string,\n projectId: string,\n ) {\n if (!projectId || projectId.trim() === \"\") {\n throw new Error(\"projectId is required for JudgmentSpanExporter\");\n }\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 /**\n * Creates a new builder for constructing JudgmentSpanExporter instances.\n */\n public static builder(): JudgmentSpanExporterBuilder {\n return new JudgmentSpanExporterBuilder();\n }\n\n /**\n * Exports a collection of spans.\n */\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n this.delegate.export(spans, resultCallback);\n }\n\n /**\n * Shuts down the exporter.\n */\n shutdown(): Promise<void> {\n return this.delegate.shutdown();\n }\n\n /**\n * Forces the exporter to flush any pending spans.\n */\n forceFlush(): Promise<void> {\n return this.delegate.forceFlush?.() ?? Promise.resolve();\n }\n}\n\n/**\n * Builder for creating JudgmentSpanExporter instances.\n */\nexport class JudgmentSpanExporterBuilder {\n private _endpoint?: string;\n private _apiKey?: string;\n private _organizationId?: string;\n private _projectId?: string;\n\n constructor() {}\n\n /**\n * Sets the OTLP endpoint URL.\n *\n * @param endpoint the endpoint URL\n * @return this builder for method chaining\n */\n public endpoint(endpoint: string): this {\n this._endpoint = endpoint;\n return this;\n }\n\n /**\n * Sets the API key for authentication.\n *\n * @param apiKey the API key\n * @return this builder for method chaining\n */\n public apiKey(apiKey: string): this {\n this._apiKey = apiKey;\n return this;\n }\n\n /**\n * Sets the organization ID.\n *\n * @param organizationId the organization ID\n * @return this builder for method chaining\n */\n public organizationId(organizationId: string): this {\n this._organizationId = organizationId;\n return this;\n }\n\n /**\n * Sets the project ID.\n *\n * @param projectId the project ID\n * @return this builder for method chaining\n */\n public projectId(projectId: string): this {\n this._projectId = projectId;\n return this;\n }\n\n /**\n * Builds a new JudgmentSpanExporter with the current configuration.\n *\n * @return a new JudgmentSpanExporter instance\n * @throws Error if required fields are missing\n */\n public build(): JudgmentSpanExporter {\n if (!this._endpoint || this._endpoint.trim() === \"\") {\n throw new Error(\"Endpoint is required\");\n }\n if (!this._apiKey || this._apiKey.trim() === \"\") {\n throw new Error(\"API key is required\");\n }\n if (!this._organizationId || this._organizationId.trim() === \"\") {\n throw new Error(\"Organization ID is required\");\n }\n if (!this._projectId || this._projectId.trim() === \"\") {\n throw new Error(\"Project ID is required\");\n }\n\n return new JudgmentSpanExporter(\n this._endpoint,\n this._apiKey,\n this._organizationId,\n this._projectId,\n );\n }\n}\n",
6
6
  "import { ExportResult } from \"@opentelemetry/core\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\n\n/**\n * A no-op span exporter that does nothing.\n * Used when project resolution fails or tracing is disabled.\n */\nexport class NoOpSpanExporter implements SpanExporter {\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n resultCallback({ code: 0 });\n }\n\n flush(): Promise<void> {\n return Promise.resolve();\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n}\n",
7
7
  "export abstract class OpenTelemetryKeys {\n public static readonly AttributeKeys = {\n JUDGMENT_SPAN_KIND: \"judgment.span_kind\",\n JUDGMENT_INPUT: \"judgment.input\",\n JUDGMENT_OUTPUT: \"judgment.output\",\n JUDGMENT_OFFLINE_MODE: \"judgment.offline_mode\",\n JUDGMENT_UPDATE_ID: \"judgment.update_id\",\n\n JUDGMENT_CUSTOMER_ID: \"judgment.customer_id\",\n\n JUDGMENT_AGENT_ID: \"judgment.agent_id\",\n\n JUDGMENT_PARENT_AGENT_ID: \"judgment.parent_agent_id\",\n JUDGMENT_AGENT_CLASS_NAME: \"judgment.agent_class_name\",\n JUDGMENT_AGENT_INSTANCE_NAME: \"judgment.agent_instance_name\",\n\n PENDING_TRACE_EVAL: \"judgment.pending_trace_eval\",\n\n GEN_AI_PROMPT: \"gen_ai.prompt\",\n GEN_AI_COMPLETION: \"gen_ai.completion\",\n GEN_AI_REQUEST_MODEL: \"gen_ai.request.model\",\n GEN_AI_RESPONSE_MODEL: \"gen_ai.response.model\",\n GEN_AI_SYSTEM: \"gen_ai.system\",\n GEN_AI_USAGE_INPUT_TOKENS: \"gen_ai.usage.input_tokens\",\n GEN_AI_USAGE_OUTPUT_TOKENS: \"gen_ai.usage.output_tokens\",\n GEN_AI_USAGE_COMPLETION_TOKENS: \"gen_ai.usage.completion_tokens\",\n GEN_AI_REQUEST_TEMPERATURE: \"gen_ai.request.temperature\",\n GEN_AI_REQUEST_MAX_TOKENS: \"gen_ai.request.max_tokens\",\n GEN_AI_RESPONSE_FINISH_REASONS: \"gen_ai.response.finish_reasons\",\n\n GEN_AI_USAGE_TOTAL_COST: \"gen_ai.usage.total_cost_usd\",\n } as const;\n\n public static readonly InternalAttributeKeys = {\n DISABLE_PARTIAL_EMIT: \"disable_partial_emit\",\n CANCELLED: \"cancelled\",\n } as const;\n\n public static readonly ResourceKeys = {\n SERVICE_NAME: \"service.name\",\n TELEMETRY_SDK_LANGUAGE: \"telemetry.sdk.language\",\n TELEMETRY_SDK_NAME: \"telemetry.sdk.name\",\n TELEMETRY_SDK_VERSION: \"telemetry.sdk.version\",\n JUDGMENT_PROJECT_ID: \"judgment.project_id\",\n } as const;\n}\n",
8
- "import {\n context,\n SpanKind as OpenTelemetrySpanKind,\n trace,\n} from \"@opentelemetry/api\";\nimport { JUDGMENT_API_URL, JUDGMENT_DEFAULT_GPT_MODEL } from \"../env\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport {\n ExampleEvaluationRun,\n Example as ExampleModel,\n} from \"../internal/api/models\";\nimport { BaseScorer } from \"../scorers/base-scorer\";\nimport { parseFunctionArgs } from \"../utils/annotate\";\nimport { Logger } from \"../utils/logger\";\nimport { JudgmentSpanExporter, NoOpSpanExporter } from \"./exporters\";\nimport { OpenTelemetryKeys } from \"./OpenTelemetryKeys\";\nimport { TracerConfiguration } from \"./TracerConfiguration\";\n\nexport type Serializer = (obj: unknown) => string;\ntype SpanKind = (\"llm\" | \"tool\" | \"span\") & {};\n\nexport type TracerInitializeOptions = {\n resourceAttributes?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nexport abstract class Tracer {\n protected static instances: Map<string, Tracer> = new Map();\n\n public apiClient: JudgmentApiClient;\n public tracer: unknown = null;\n public serializer: Serializer = JSON.stringify;\n\n protected _initialized: boolean = false;\n\n private projectId: string | null = null;\n protected configuration: TracerConfiguration;\n\n public getConfiguration(): TracerConfiguration {\n return this.configuration;\n }\n\n public getProjectId(): string | null {\n return this.projectId;\n }\n\n public getSerializer(): Serializer {\n return this.serializer;\n }\n\n public constructor(configuration: TracerConfiguration) {\n this.configuration = configuration;\n\n this.apiClient = new JudgmentApiClient(\n this.configuration.apiUrl,\n this.configuration.apiKey,\n this.configuration.organizationId,\n );\n\n this._initialized = false;\n }\n\n public abstract initialize(options: TracerInitializeOptions): Promise<Tracer>;\n\n private async resolveProjectId(): Promise<string> {\n try {\n Logger.info(\n `Resolving project ID for project: ${this.configuration.projectName}`,\n );\n\n const response = await this.apiClient.projectsResolve({\n project_name: this.configuration.projectName,\n });\n Logger.info(`Resolved project ID: ${response.project_id}`);\n const resolvedProjectId = response.project_id?.toString();\n\n if (!resolvedProjectId) {\n throw new Error(\n `Project ID not found for project: ${this.configuration.projectName}`,\n );\n }\n\n this.projectId = resolvedProjectId;\n Logger.info(`Successfully resolved project ID: ${this.projectId}`);\n\n return this.projectId;\n } catch (error) {\n throw new Error(\n `Failed to resolve project ID: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public static getExporter(\n apiKey: string,\n organizationId: string,\n projectId: string,\n ): JudgmentSpanExporter {\n const endpoint = JUDGMENT_API_URL?.endsWith(\"/\")\n ? `${JUDGMENT_API_URL}otel/v1/traces`\n : `${JUDGMENT_API_URL}/otel/v1/traces`;\n\n return JudgmentSpanExporter.builder()\n .endpoint(endpoint)\n .apiKey(apiKey)\n .organizationId(organizationId)\n .projectId(projectId)\n .build();\n }\n\n public async getSpanExporter(): Promise<\n JudgmentSpanExporter | NoOpSpanExporter\n > {\n try {\n const projectId = await this.resolveProjectId();\n return this.createJudgmentSpanExporter(projectId);\n } catch (error) {\n Logger.error(\n \"Failed to resolve project \" +\n this.configuration.projectName +\n \", please create it first at https://app.judgmentlabs.ai/org/\" +\n (this.configuration.organizationId || \"unknown\") +\n \"/projects. Skipping Judgment export.\",\n );\n return new NoOpSpanExporter();\n }\n }\n\n public setSpanKind(kind: SpanKind): void {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setSpanKind\");\n return;\n }\n if (kind !== null) {\n currentSpan.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_SPAN_KIND,\n kind,\n );\n }\n }\n\n public setAttribute(key: string, value: unknown): void {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setAttribute\");\n return;\n }\n currentSpan.setAttribute(key, this.serializer(value));\n }\n\n public setLLMSpan(): void {\n this.setSpanKind(\"llm\");\n }\n\n public setToolSpan(): void {\n this.setSpanKind(\"tool\");\n }\n\n public setGeneralSpan(): void {\n this.setSpanKind(\"span\");\n }\n\n public setAttributes(attributes: Record<string, unknown>): void {\n if (!attributes) {\n return;\n }\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setAttributes\");\n return;\n }\n for (const [key, value] of Object.entries(attributes)) {\n currentSpan.setAttribute(key, this.serializer(value));\n }\n }\n\n public setInput(input: unknown): void {\n this.setAttribute(OpenTelemetryKeys.AttributeKeys.JUDGMENT_INPUT, input);\n }\n\n public setOutput(output: unknown): void {\n this.setAttribute(OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT, output);\n }\n\n public asyncEvaluate(\n scorer: BaseScorer,\n example: ExampleModel,\n model?: string,\n ): void {\n if (!this._initialized) {\n Logger.warn(\"Tracer not initialized, skipping asyncEvaluate\");\n return;\n }\n\n if (!this.configuration.enableEvaluation) {\n return;\n }\n\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping asyncEvaluate\");\n return;\n }\n if (!currentSpan.isRecording()) {\n Logger.warn(\"Active span is not recording, skipping asyncEvaluate\");\n return;\n }\n\n const spanContext = currentSpan.spanContext();\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n Logger.info(\n `asyncEvaluate: project=${this.configuration.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorer.name}`,\n );\n\n const evaluationRun = this.createEvaluationRun(\n scorer,\n example,\n model,\n traceId,\n spanId,\n );\n this.enqueueEvaluation(evaluationRun);\n }\n\n public asyncTraceEvaluate(scorer: BaseScorer, model?: string): void {\n if (!this._initialized) {\n Logger.warn(\"Tracer not initialized, skipping asyncTraceEvaluate\");\n return;\n }\n\n if (!this.configuration.enableEvaluation) {\n return;\n }\n\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping asyncTraceEvaluate\");\n return;\n }\n if (!currentSpan.isRecording()) {\n Logger.warn(\"Active span is not recording, skipping asyncTraceEvaluate\");\n return;\n }\n\n const spanContext = currentSpan.spanContext();\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n Logger.info(\n `asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorer.name}`,\n );\n\n try {\n const traceEvaluationRun = this.createTraceEvaluationRun(\n scorer,\n model,\n traceId,\n spanId,\n );\n const traceEvalJson = this.serializer(traceEvaluationRun);\n currentSpan.setAttribute(\n OpenTelemetryKeys.AttributeKeys.PENDING_TRACE_EVAL,\n traceEvalJson,\n );\n } catch (error) {\n Logger.error(\n `Failed to serialize trace evaluation: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private createTraceEvaluationRun(\n scorer: BaseScorer,\n model: string | undefined,\n traceId: string,\n spanId: string,\n ): Record<string, unknown> {\n const evalName = `async_trace_evaluate_${spanId || Date.now()}`;\n const modelName = model || JUDGMENT_DEFAULT_GPT_MODEL;\n\n const scorerConfig = scorer.getScorerConfig();\n\n return {\n project_name: this.configuration.projectName,\n eval_name: evalName,\n scorer: scorerConfig,\n model: modelName,\n organization_id: this.configuration.organizationId,\n trace_id: traceId,\n trace_span_id: spanId,\n };\n }\n\n private createJudgmentSpanExporter(projectId: string): JudgmentSpanExporter {\n const endpoint = this.configuration.apiUrl.endsWith(\"/\")\n ? `${this.configuration.apiUrl}otel/v1/traces`\n : `${this.configuration.apiUrl}/otel/v1/traces`;\n\n return JudgmentSpanExporter.builder()\n .endpoint(endpoint)\n .apiKey(this.configuration.apiKey)\n .organizationId(this.configuration.organizationId)\n .projectId(projectId)\n .build();\n }\n\n private createEvaluationRun(\n scorer: BaseScorer,\n example: ExampleModel,\n model: string | undefined,\n traceId: string,\n spanId: string,\n ): ExampleEvaluationRun {\n const runId = `async_evaluate_${spanId || Date.now()}`;\n const modelName = model || JUDGMENT_DEFAULT_GPT_MODEL;\n\n const scorerConfig = scorer.getScorerConfig();\n\n const evaluationRun: ExampleEvaluationRun = {\n project_name: this.configuration.projectName,\n eval_name: runId,\n examples: [example],\n custom_scorers: [],\n judgment_scorers: [scorerConfig],\n model: modelName,\n trace_id: traceId,\n trace_span_id: spanId,\n };\n\n return evaluationRun;\n }\n\n private async enqueueEvaluation(\n evaluationRun: ExampleEvaluationRun,\n ): Promise<void> {\n if (!this.apiClient) {\n Logger.warn(\"API client not available, skipping evaluation enqueue\");\n return;\n }\n\n try {\n await this.apiClient.addToRunEvalQueueExamples(evaluationRun);\n Logger.info(`Enqueuing evaluation run: ${evaluationRun.eval_name}`);\n } catch (error) {\n Logger.error(\n `Failed to enqueue evaluation run: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public observe<TArgs extends any[], TResult>(\n func: (...args: TArgs) => TResult,\n spanKind: SpanKind = \"span\",\n ): (...args: TArgs) => TResult {\n return (...args: TArgs) => {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping observe\");\n return func(...args);\n }\n\n const spanName = func.name || \"anonymous\";\n const tracer = trace.getTracer(this.configuration.tracerName);\n\n return context.with(trace.setSpan(context.active(), currentSpan), () => {\n return tracer.startActiveSpan(\n spanName,\n { kind: OpenTelemetrySpanKind.INTERNAL },\n (span) => {\n try {\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_SPAN_KIND,\n spanKind,\n );\n\n const argNames = parseFunctionArgs(func);\n if (argNames.length === args.length) {\n const inputObj: Record<string, unknown> = {};\n argNames.forEach((name, index) => {\n inputObj[name] = args[index];\n });\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_INPUT,\n this.serializer(inputObj),\n );\n }\n\n const result = func(...args);\n\n if (result instanceof Promise) {\n return result\n .then((res) => {\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT,\n this.serializer(res),\n );\n span.end();\n return res;\n })\n .catch((err) => {\n span.recordException(err as Error);\n span.end();\n throw err;\n }) as TResult;\n } else {\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT,\n this.serializer(result),\n );\n span.end();\n return result;\n }\n } catch (err) {\n span.recordException(err as Error);\n span.end();\n throw err;\n }\n },\n );\n });\n };\n }\n\n public async shutdown(): Promise<void> {}\n}\n",
8
+ "import { Tracer as OpenTelemetryTracer, trace } from \"@opentelemetry/api\";\nimport { JUDGMENT_API_URL, JUDGMENT_DEFAULT_GPT_MODEL } from \"../env\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport {\n ExampleEvaluationRun,\n Example as ExampleModel,\n} from \"../internal/api/models\";\nimport { BaseScorer } from \"../scorers/base-scorer\";\nimport { parseFunctionArgs } from \"../utils/annotate\";\nimport { Logger } from \"../utils/logger\";\nimport { JudgmentSpanExporter, NoOpSpanExporter } from \"./exporters\";\nimport { OpenTelemetryKeys } from \"./OpenTelemetryKeys\";\nimport { TracerConfiguration } from \"./TracerConfiguration\";\n\nexport type Serializer = (obj: unknown) => string;\ntype SpanKind = (\"llm\" | \"tool\" | \"span\") & {};\n\nexport type TracerInitializeOptions = {\n resourceAttributes?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nexport abstract class Tracer {\n protected static instances: Map<string, Tracer> = new Map();\n\n public apiClient: JudgmentApiClient;\n public tracer: OpenTelemetryTracer;\n public serializer: Serializer = JSON.stringify;\n\n protected _initialized: boolean = false;\n\n private projectId: string | null = null;\n protected configuration: TracerConfiguration;\n\n public getConfiguration(): TracerConfiguration {\n return this.configuration;\n }\n\n public getProjectId(): string | null {\n return this.projectId;\n }\n\n public getSerializer(): Serializer {\n return this.serializer;\n }\n\n public constructor(configuration: TracerConfiguration) {\n this.configuration = configuration;\n this.tracer = trace.getTracer(this.configuration.tracerName);\n\n this.apiClient = new JudgmentApiClient(\n this.configuration.apiUrl,\n this.configuration.apiKey,\n this.configuration.organizationId,\n );\n\n this._initialized = false;\n }\n\n public abstract initialize(options: TracerInitializeOptions): Promise<Tracer>;\n\n private async resolveProjectId(): Promise<string> {\n try {\n Logger.info(\n `Resolving project ID for project: ${this.configuration.projectName}`,\n );\n\n const response = await this.apiClient.projectsResolve({\n project_name: this.configuration.projectName,\n });\n Logger.info(`Resolved project ID: ${response.project_id}`);\n const resolvedProjectId = response.project_id?.toString();\n\n if (!resolvedProjectId) {\n throw new Error(\n `Project ID not found for project: ${this.configuration.projectName}`,\n );\n }\n\n this.projectId = resolvedProjectId;\n Logger.info(`Successfully resolved project ID: ${this.projectId}`);\n\n return this.projectId;\n } catch (error) {\n throw new Error(\n `Failed to resolve project ID: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public static getExporter(\n apiKey: string,\n organizationId: string,\n projectId: string,\n ): JudgmentSpanExporter {\n const endpoint = JUDGMENT_API_URL?.endsWith(\"/\")\n ? `${JUDGMENT_API_URL}otel/v1/traces`\n : `${JUDGMENT_API_URL}/otel/v1/traces`;\n\n return JudgmentSpanExporter.builder()\n .endpoint(endpoint)\n .apiKey(apiKey)\n .organizationId(organizationId)\n .projectId(projectId)\n .build();\n }\n\n public async getSpanExporter(): Promise<\n JudgmentSpanExporter | NoOpSpanExporter\n > {\n try {\n const projectId = await this.resolveProjectId();\n return this.createJudgmentSpanExporter(projectId);\n } catch (error) {\n Logger.error(\n \"Failed to resolve project \" +\n this.configuration.projectName +\n \", please create it first at https://app.judgmentlabs.ai/org/\" +\n (this.configuration.organizationId || \"unknown\") +\n \"/projects. Skipping Judgment export.\",\n );\n return new NoOpSpanExporter();\n }\n }\n\n public setSpanKind(kind: SpanKind): void {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setSpanKind\");\n return;\n }\n if (kind !== null) {\n currentSpan.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_SPAN_KIND,\n kind,\n );\n }\n }\n\n public setAttribute(key: string, value: unknown): void {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setAttribute\");\n return;\n }\n currentSpan.setAttribute(key, this.serializer(value));\n }\n\n public setLLMSpan(): void {\n this.setSpanKind(\"llm\");\n }\n\n public setToolSpan(): void {\n this.setSpanKind(\"tool\");\n }\n\n public setGeneralSpan(): void {\n this.setSpanKind(\"span\");\n }\n\n public setAttributes(attributes: Record<string, unknown>): void {\n if (!attributes) {\n return;\n }\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setAttributes\");\n return;\n }\n for (const [key, value] of Object.entries(attributes)) {\n currentSpan.setAttribute(key, this.serializer(value));\n }\n }\n\n public setInput(input: unknown): void {\n this.setAttribute(OpenTelemetryKeys.AttributeKeys.JUDGMENT_INPUT, input);\n }\n\n public setOutput(output: unknown): void {\n this.setAttribute(OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT, output);\n }\n\n public asyncEvaluate(\n scorer: BaseScorer,\n example: ExampleModel,\n model?: string,\n ): void {\n if (!this._initialized) {\n Logger.warn(\"Tracer not initialized, skipping asyncEvaluate\");\n return;\n }\n\n if (!this.configuration.enableEvaluation) {\n return;\n }\n\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping asyncEvaluate\");\n return;\n }\n if (!currentSpan.isRecording()) {\n Logger.warn(\"Active span is not recording, skipping asyncEvaluate\");\n return;\n }\n\n const spanContext = currentSpan.spanContext();\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n Logger.info(\n `asyncEvaluate: project=${this.configuration.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorer.name}`,\n );\n\n const evaluationRun = this.createEvaluationRun(\n scorer,\n example,\n model,\n traceId,\n spanId,\n );\n this.enqueueEvaluation(evaluationRun);\n }\n\n public asyncTraceEvaluate(scorer: BaseScorer, model?: string): void {\n if (!this._initialized) {\n Logger.warn(\"Tracer not initialized, skipping asyncTraceEvaluate\");\n return;\n }\n\n if (!this.configuration.enableEvaluation) {\n return;\n }\n\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping asyncTraceEvaluate\");\n return;\n }\n if (!currentSpan.isRecording()) {\n Logger.warn(\"Active span is not recording, skipping asyncTraceEvaluate\");\n return;\n }\n\n const spanContext = currentSpan.spanContext();\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n Logger.info(\n `asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorer.name}`,\n );\n\n try {\n const traceEvaluationRun = this.createTraceEvaluationRun(\n scorer,\n model,\n traceId,\n spanId,\n );\n const traceEvalJson = this.serializer(traceEvaluationRun);\n currentSpan.setAttribute(\n OpenTelemetryKeys.AttributeKeys.PENDING_TRACE_EVAL,\n traceEvalJson,\n );\n } catch (error) {\n Logger.error(\n `Failed to serialize trace evaluation: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private createTraceEvaluationRun(\n scorer: BaseScorer,\n model: string | undefined,\n traceId: string,\n spanId: string,\n ): Record<string, unknown> {\n const evalName = `async_trace_evaluate_${spanId || Date.now()}`;\n const modelName = model || JUDGMENT_DEFAULT_GPT_MODEL;\n\n const scorerConfig = scorer.getScorerConfig();\n\n return {\n project_name: this.configuration.projectName,\n eval_name: evalName,\n scorer: scorerConfig,\n model: modelName,\n organization_id: this.configuration.organizationId,\n trace_id: traceId,\n trace_span_id: spanId,\n };\n }\n\n private createJudgmentSpanExporter(projectId: string): JudgmentSpanExporter {\n const endpoint = this.configuration.apiUrl.endsWith(\"/\")\n ? `${this.configuration.apiUrl}otel/v1/traces`\n : `${this.configuration.apiUrl}/otel/v1/traces`;\n\n return JudgmentSpanExporter.builder()\n .endpoint(endpoint)\n .apiKey(this.configuration.apiKey)\n .organizationId(this.configuration.organizationId)\n .projectId(projectId)\n .build();\n }\n\n private createEvaluationRun(\n scorer: BaseScorer,\n example: ExampleModel,\n model: string | undefined,\n traceId: string,\n spanId: string,\n ): ExampleEvaluationRun {\n const runId = `async_evaluate_${spanId || Date.now()}`;\n const modelName = model || JUDGMENT_DEFAULT_GPT_MODEL;\n\n const scorerConfig = scorer.getScorerConfig();\n\n const evaluationRun: ExampleEvaluationRun = {\n project_name: this.configuration.projectName,\n eval_name: runId,\n examples: [example],\n custom_scorers: [],\n judgment_scorers: [scorerConfig],\n model: modelName,\n trace_id: traceId,\n trace_span_id: spanId,\n };\n\n return evaluationRun;\n }\n\n private async enqueueEvaluation(\n evaluationRun: ExampleEvaluationRun,\n ): Promise<void> {\n if (!this.apiClient) {\n Logger.warn(\"API client not available, skipping evaluation enqueue\");\n return;\n }\n\n try {\n await this.apiClient.addToRunEvalQueueExamples(evaluationRun);\n Logger.info(`Enqueuing evaluation run: ${evaluationRun.eval_name}`);\n } catch (error) {\n Logger.error(\n `Failed to enqueue evaluation run: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public observe<TArgs extends any[], TResult>(\n func: (...args: TArgs) => TResult,\n spanKind: SpanKind = \"span\",\n ): (...args: TArgs) => TResult {\n return (...args: TArgs): TResult => {\n const spanName = func.name || \"anonymous\";\n\n return this.tracer.startActiveSpan(spanName, (span) => {\n try {\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_SPAN_KIND,\n spanKind,\n );\n\n const argNames = parseFunctionArgs(func);\n if (argNames.length === args.length) {\n const inputObj: Record<string, unknown> = {};\n argNames.forEach((name, index) => {\n inputObj[name] = args[index];\n });\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_INPUT,\n this.serializer(inputObj),\n );\n }\n\n const result = func(...args);\n\n if (result instanceof Promise) {\n return result\n .then((res) => {\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT,\n this.serializer(res),\n );\n span.end();\n return res;\n })\n .catch((err) => {\n span.recordException(err as Error);\n span.end();\n throw err;\n }) as TResult;\n } else {\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT,\n this.serializer(result),\n );\n span.end();\n return result;\n }\n } catch (err) {\n span.recordException(err as Error);\n span.end();\n throw err;\n }\n });\n };\n }\n\n public async shutdown(): Promise<void> {}\n}\n",
9
9
  "function getEnvVar(varName: string): string | null;\nfunction getEnvVar(varName: string, defaultValue: string): string;\nfunction getEnvVar(varName: string, defaultValue?: string): string | null {\n const value = process.env[varName];\n if (!value) {\n return defaultValue ?? null;\n }\n return value;\n}\n\nexport const JUDGMENT_API_KEY = getEnvVar(\"JUDGMENT_API_KEY\");\nexport const JUDGMENT_ORG_ID = getEnvVar(\"JUDGMENT_ORG_ID\");\nexport const JUDGMENT_API_URL = getEnvVar(\n \"JUDGMENT_API_URL\",\n \"https://api.judgmentlabs.ai\",\n);\nexport const JUDGMENT_DEFAULT_GPT_MODEL = getEnvVar(\n \"JUDGMENT_DEFAULT_GPT_MODEL\",\n \"gpt-4.1\",\n);\nexport const JUDGMENT_ENABLE_MONITORING = getEnvVar(\n \"JUDGMENT_ENABLE_MONITORING\",\n \"true\",\n);\nexport const JUDGMENT_ENABLE_EVALUATIONS = getEnvVar(\n \"JUDGMENT_ENABLE_EVALUATIONS\",\n \"true\",\n);\nexport const JUDGMENT_NO_COLOR = getEnvVar(\"JUDGMENT_NO_COLOR\");\n",
10
10
  "/**\n * Auto-generated by scripts/generate-client.ts\n * DO NOT EDIT MANUALLY - This file is generated automatically\n */\nimport * as Models from \"./models\";\n\nexport class JudgmentApiClient {\n private baseUrl: string;\n private apiKey: string;\n private organizationId: string;\n\n constructor(baseUrl: string, apiKey: string, organizationId: string) {\n this.baseUrl = baseUrl;\n this.apiKey = apiKey;\n this.organizationId = organizationId;\n }\n\n private buildUrl(path: string): string {\n return this.baseUrl + path;\n }\n\n private buildHeaders(): Record<string, string> {\n if (!this.apiKey || !this.organizationId) {\n throw new Error(\"API key and organization ID cannot be null\");\n }\n return {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n \"X-Organization-Id\": this.organizationId,\n };\n }\n\n async addToRunEvalQueueExamples(\n payload: Models.ExampleEvaluationRun,\n ): Promise<void> {\n const url = this.buildUrl(\"/add_to_run_eval_queue/examples\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async addToRunEvalQueueTraces(\n payload: Models.TraceEvaluationRun,\n ): Promise<void> {\n const url = this.buildUrl(\"/add_to_run_eval_queue/traces\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async logEvalResults(payload: Models.EvalResults): Promise<void> {\n const url = this.buildUrl(\"/log_eval_results/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async fetchExperimentRun(payload: Models.EvalResultsFetch): Promise<void> {\n const url = this.buildUrl(\"/fetch_experiment_run/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async getEvaluationStatus(\n experiment_run_id: string,\n project_name: string,\n ): Promise<void> {\n const queryParams = new URLSearchParams();\n queryParams.set(\"experiment_run_id\", experiment_run_id);\n queryParams.set(\"project_name\", project_name);\n const url = this.buildUrl(\n \"/get_evaluation_status/\" +\n (queryParams.toString() ? \"?\" + queryParams.toString() : \"\"),\n );\n const response = await fetch(url, {\n method: \"GET\",\n headers: this.buildHeaders(),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async scorerExists(\n payload: Models.ScorerExistsRequest,\n ): Promise<Models.ScorerExistsResponse> {\n const url = this.buildUrl(\"/scorer_exists/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.ScorerExistsResponse;\n }\n\n async saveScorer(\n payload: Models.SavePromptScorerRequest,\n ): Promise<Models.SavePromptScorerResponse> {\n const url = this.buildUrl(\"/save_scorer/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.SavePromptScorerResponse;\n }\n\n async fetchScorers(\n payload: Models.FetchPromptScorersRequest,\n ): Promise<Models.FetchPromptScorersResponse> {\n const url = this.buildUrl(\"/fetch_scorers/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.FetchPromptScorersResponse;\n }\n\n async projectsResolve(\n payload: Models.ResolveProjectNameRequest,\n ): Promise<Models.ResolveProjectNameResponse> {\n const url = this.buildUrl(\"/projects/resolve/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.ResolveProjectNameResponse;\n }\n}\n",
11
11
  "// 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",
@@ -21,10 +21,10 @@
21
21
  "import { JUDGMENT_API_KEY, JUDGMENT_ORG_ID } from \"../../../env\";\nimport { APIScorerType } from \"../../api-scorer\";\nimport { BasePromptScorer } from \"./base-prompt-scorer\";\nexport {\n fetchPromptScorer,\n JudgmentAPIError,\n pushPromptScorer,\n scorerExists,\n} from \"./prompt-scorer-utils\";\n\nexport class PromptScorer extends BasePromptScorer {\n constructor(\n scoreType: APIScorerType,\n name: string,\n prompt: string,\n threshold: number,\n requiredParams: readonly string[] = [],\n options?: Record<string, number> | null,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n ) {\n super(\n scoreType,\n name,\n prompt,\n threshold,\n requiredParams,\n options,\n judgmentApiKey,\n organizationId,\n );\n }\n}\n",
22
22
  "import { JUDGMENT_API_KEY, JUDGMENT_ORG_ID } from \"../../../env\";\nimport { APIScorerType } from \"../../api-scorer\";\nimport { BasePromptScorer } from \"./base-prompt-scorer\";\n\nexport class TracePromptScorer extends BasePromptScorer {\n constructor(\n scoreType: APIScorerType,\n name: string,\n prompt: string,\n threshold: number,\n requiredParams: readonly string[] = [],\n options?: Record<string, number> | null,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n ) {\n super(\n scoreType,\n name,\n prompt,\n threshold,\n requiredParams,\n options,\n judgmentApiKey,\n organizationId,\n );\n }\n}\n",
23
23
  "import { resourceFromAttributes } from \"@opentelemetry/resources\";\nimport {\n BatchSpanProcessor,\n WebTracerProvider,\n} from \"@opentelemetry/sdk-trace-web\";\nimport { VERSION } from \"../version\";\nimport { OpenTelemetryKeys } from \"./OpenTelemetryKeys\";\nimport { Tracer, TracerInitializeOptions } from \"./Tracer\";\nimport { TracerConfiguration } from \"./TracerConfiguration\";\n\nexport type BrowserTracerInitializeOptions = TracerInitializeOptions & {};\n\nexport class BrowserTracer extends Tracer {\n private webTracerProvider?: WebTracerProvider;\n\n public async initialize(\n options: BrowserTracerInitializeOptions = {},\n ): Promise<BrowserTracer> {\n if (this._initialized) {\n return this;\n }\n\n try {\n const resourceAttributes = {\n [OpenTelemetryKeys.ResourceKeys.SERVICE_NAME]:\n this.configuration.projectName,\n [OpenTelemetryKeys.ResourceKeys.TELEMETRY_SDK_VERSION]: VERSION,\n ...options.resourceAttributes,\n };\n\n const spanExporter = await this.getSpanExporter();\n\n this.webTracerProvider = new WebTracerProvider({\n resource: resourceFromAttributes(resourceAttributes),\n spanProcessors: [new BatchSpanProcessor(spanExporter)],\n });\n\n this.webTracerProvider.register();\n\n this._initialized = true;\n return this;\n } catch (error) {\n throw new Error(\n `Failed to initialize browser tracer: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public static getInstance(configuration: TracerConfiguration): BrowserTracer {\n const key = `BrowserTracer:${configuration.projectName}`;\n if (!Tracer.instances.has(key)) {\n Tracer.instances.set(key, new BrowserTracer(configuration));\n }\n return Tracer.instances.get(key) as BrowserTracer;\n }\n\n public static createDefault(projectName: string): BrowserTracer {\n const configuration = TracerConfiguration.builder()\n .projectName(projectName)\n .build();\n return BrowserTracer.getInstance(configuration);\n }\n\n public static createWithConfiguration(\n configuration: TracerConfiguration,\n ): BrowserTracer {\n return new BrowserTracer(configuration);\n }\n}\n",
24
- "export const VERSION = \"0.3.2\";\n",
24
+ "export const VERSION = \"0.3.3\";\n",
25
25
  "import { resourceFromAttributes } from \"@opentelemetry/resources\";\nimport { NodeSDK, NodeSDKConfiguration } from \"@opentelemetry/sdk-node\";\nimport { BatchSpanProcessor } from \"@opentelemetry/sdk-trace-node\";\nimport { VERSION } from \"../version\";\nimport { OpenTelemetryKeys } from \"./OpenTelemetryKeys\";\nimport { Tracer, TracerInitializeOptions } from \"./Tracer\";\nimport { TracerConfiguration } from \"./TracerConfiguration\";\n\nexport type NodeTracerInitializeOptions = TracerInitializeOptions & {\n instrumentations?: NodeSDKConfiguration[\"instrumentations\"];\n resourceAttributes?: Record<string, unknown>;\n};\n\nexport class NodeTracer extends Tracer {\n private nodeSDK?: NodeSDK;\n\n public async initialize(\n options: NodeTracerInitializeOptions = {},\n ): Promise<NodeTracer> {\n if (this._initialized) {\n return this;\n }\n\n try {\n const resourceAttributes = {\n [OpenTelemetryKeys.ResourceKeys.SERVICE_NAME]:\n this.configuration.projectName,\n [OpenTelemetryKeys.ResourceKeys.TELEMETRY_SDK_VERSION]: VERSION,\n ...options.resourceAttributes,\n };\n\n const spanExporter = await this.getSpanExporter();\n\n this.nodeSDK = new NodeSDK({\n resource: resourceFromAttributes(resourceAttributes),\n instrumentations: options.instrumentations,\n spanProcessor: new BatchSpanProcessor(spanExporter),\n ...options,\n });\n\n this.nodeSDK.start();\n\n this._initialized = true;\n return this;\n } catch (error) {\n throw new Error(\n `Failed to initialize node tracer: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public static getInstance(configuration: TracerConfiguration): NodeTracer {\n const key = `NodeTracer:${configuration.projectName}`;\n if (!Tracer.instances.has(key)) {\n Tracer.instances.set(key, new NodeTracer(configuration));\n }\n return Tracer.instances.get(key) as NodeTracer;\n }\n\n public static createDefault(projectName: string): NodeTracer {\n const configuration = TracerConfiguration.builder()\n .projectName(projectName)\n .enableEvaluation(true)\n .build();\n return NodeTracer.getInstance(configuration);\n }\n\n public static createWithConfiguration(\n configuration: TracerConfiguration,\n ): NodeTracer {\n return new NodeTracer(configuration);\n }\n\n public async shutdown(): Promise<void> {\n if (this.nodeSDK) {\n await this.nodeSDK.shutdown();\n }\n }\n}\n"
26
26
  ],
27
- "mappings": "AACA,4BAAS,gDASF,MAAM,CAA6C,CACvC,SAWjB,WAAW,CACT,EACA,EACA,EACA,EACA,CACA,GAAI,CAAC,GAAa,EAAU,KAAK,IAAM,GACrC,MAAU,MAAM,gDAAgD,EAGlE,KAAK,SAAW,IAAI,EAAkB,CACpC,IAAK,EACL,QAAS,CACP,cAAe,UAAU,IACzB,oBAAqB,EACrB,eAAgB,CAClB,CACF,CAAC,QAMW,QAAO,EAAgC,CACnD,OAAO,IAAI,EAMb,MAAM,CACJ,EACA,EACM,CACN,KAAK,SAAS,OAAO,EAAO,CAAc,EAM5C,QAAQ,EAAkB,CACxB,OAAO,KAAK,SAAS,SAAS,EAMhC,UAAU,EAAkB,CAC1B,OAAO,KAAK,SAAS,aAAa,GAAK,QAAQ,QAAQ,EAE3D,CAKO,MAAM,CAA4B,CAC/B,UACA,QACA,gBACA,WAER,WAAW,EAAG,EAQP,QAAQ,CAAC,EAAwB,CAEtC,OADA,KAAK,UAAY,EACV,KASF,MAAM,CAAC,EAAsB,CAElC,OADA,KAAK,QAAU,EACR,KASF,cAAc,CAAC,EAA8B,CAElD,OADA,KAAK,gBAAkB,EAChB,KASF,SAAS,CAAC,EAAyB,CAExC,OADA,KAAK,WAAa,EACX,KASF,KAAK,EAAyB,CACnC,GAAI,CAAC,KAAK,WAAa,KAAK,UAAU,KAAK,IAAM,GAC/C,MAAU,MAAM,sBAAsB,EAExC,GAAI,CAAC,KAAK,SAAW,KAAK,QAAQ,KAAK,IAAM,GAC3C,MAAU,MAAM,qBAAqB,EAEvC,GAAI,CAAC,KAAK,iBAAmB,KAAK,gBAAgB,KAAK,IAAM,GAC3D,MAAU,MAAM,6BAA6B,EAE/C,GAAI,CAAC,KAAK,YAAc,KAAK,WAAW,KAAK,IAAM,GACjD,MAAU,MAAM,wBAAwB,EAG1C,OAAO,IAAI,EACT,KAAK,UACL,KAAK,QACL,KAAK,gBACL,KAAK,UACP,EAEJ,CCrJO,MAAM,CAAyC,CACpD,MAAM,CACJ,EACA,EACM,CACN,EAAe,CAAE,KAAM,CAAE,CAAC,EAG5B,KAAK,EAAkB,CACrB,OAAO,QAAQ,QAAQ,EAGzB,QAAQ,EAAkB,CACxB,OAAO,QAAQ,QAAQ,EAE3B,CCtBO,MAAe,CAAkB,OACf,eAAgB,CACrC,mBAAoB,qBACpB,eAAgB,iBAChB,gBAAiB,kBACjB,sBAAuB,wBACvB,mBAAoB,qBAEpB,qBAAsB,uBAEtB,kBAAmB,oBAEnB,yBAA0B,2BAC1B,0BAA2B,4BAC3B,6BAA8B,+BAE9B,mBAAoB,8BAEpB,cAAe,gBACf,kBAAmB,oBACnB,qBAAsB,uBACtB,sBAAuB,wBACvB,cAAe,gBACf,0BAA2B,4BAC3B,2BAA4B,6BAC5B,+BAAgC,iCAChC,2BAA4B,6BAC5B,0BAA2B,4BAC3B,+BAAgC,iCAEhC,wBAAyB,6BAC3B,QAEuB,uBAAwB,CAC7C,qBAAsB,uBACtB,UAAW,WACb,QAEuB,cAAe,CACpC,aAAc,eACd,uBAAwB,yBACxB,mBAAoB,qBACpB,sBAAuB,wBACvB,oBAAqB,qBACvB,CACF,CC7CA,kBACE,cACA,WACA,2BCDF,SAAS,CAAS,CAAC,EAAiB,EAAsC,CACxE,IAAM,EAAQ,QAAQ,IAAI,GAC1B,GAAI,CAAC,EACH,OAAO,GAAgB,KAEzB,OAAO,EAGF,IAAM,EAAmB,EAAU,kBAAkB,EAC/C,EAAkB,EAAU,iBAAiB,EAC7C,EAAmB,EAC9B,mBACA,6BACF,EACa,EAA6B,EACxC,6BACA,SACF,EACa,GAA6B,EACxC,6BACA,MACF,EACa,GAA8B,EACzC,8BACA,MACF,EACa,GAAoB,EAAU,mBAAmB,ECtBvD,MAAM,CAAkB,CACrB,QACA,OACA,eAER,WAAW,CAAC,EAAiB,EAAgB,EAAwB,CACnE,KAAK,QAAU,EACf,KAAK,OAAS,EACd,KAAK,eAAiB,EAGhB,QAAQ,CAAC,EAAsB,CACrC,OAAO,KAAK,QAAU,EAGhB,YAAY,EAA2B,CAC7C,GAAI,CAAC,KAAK,QAAU,CAAC,KAAK,eACxB,MAAU,MAAM,4CAA4C,EAE9D,MAAO,CACL,eAAgB,mBAChB,cAAe,UAAU,KAAK,SAC9B,oBAAqB,KAAK,cAC5B,OAGI,0BAAyB,CAC7B,EACe,CACf,IAAM,EAAM,KAAK,SAAS,iCAAiC,EACrD,EAAW,MAAM,MAAM,EAAK,CAChC,OAAQ,OACR,QAAS,KAAK,aAAa,EAC3B,KAAM,KAAK,UAAU,CAAO,CAC9B,CAAC,EAED,GAAI,CAAC,EAAS,GACZ,MAAU,MACR,eAAe,EAAS,YAAY,MAAM,EAAS,KAAK,GAC1D,EAGF,YAGI,wBAAuB,CAC3B,EACe,CACf,IAAM,EAAM,KAAK,SAAS,+BAA+B,EACnD,EAAW,MAAM,MAAM,EAAK,CAChC,OAAQ,OACR,QAAS,KAAK,aAAa,EAC3B,KAAM,KAAK,UAAU,CAAO,CAC9B,CAAC,EAED,GAAI,CAAC,EAAS,GACZ,MAAU,MACR,eAAe,EAAS,YAAY,MAAM,EAAS,KAAK,GAC1D,EAGF,YAGI,eAAc,CAAC,EAA4C,CAC/D,IAAM,EAAM,KAAK,SAAS,oBAAoB,EACxC,EAAW,MAAM,MAAM,EAAK,CAChC,OAAQ,OACR,QAAS,KAAK,aAAa,EAC3B,KAAM,KAAK,UAAU,CAAO,CAC9B,CAAC,EAED,GAAI,CAAC,EAAS,GACZ,MAAU,MACR,eAAe,EAAS,YAAY,MAAM,EAAS,KAAK,GAC1D,EAGF,YAGI,mBAAkB,CAAC,EAAiD,CACxE,IAAM,EAAM,KAAK,SAAS,wBAAwB,EAC5C,EAAW,MAAM,MAAM,EAAK,CAChC,OAAQ,OACR,QAAS,KAAK,aAAa,EAC3B,KAAM,KAAK,UAAU,CAAO,CAC9B,CAAC,EAED,GAAI,CAAC,EAAS,GACZ,MAAU,MACR,eAAe,EAAS,YAAY,MAAM,EAAS,KAAK,GAC1D,EAGF,YAGI,oBAAmB,CACvB,EACA,EACe,CACf,IAAM,EAAc,IAAI,gBACxB,EAAY,IAAI,oBAAqB,CAAiB,EACtD,EAAY,IAAI,eAAgB,CAAY,EAC5C,IAAM,EAAM,KAAK,SACf,2BACG,EAAY,SAAS,EAAI,IAAM,EAAY,SAAS,EAAI,GAC7D,EACM,EAAW,MAAM,MAAM,EAAK,CAChC,OAAQ,MACR,QAAS,KAAK,aAAa,CAC7B,CAAC,EAED,GAAI,CAAC,EAAS,GACZ,MAAU,MACR,eAAe,EAAS,YAAY,MAAM,EAAS,KAAK,GAC1D,EAGF,YAGI,aAAY,CAChB,EACsC,CACtC,IAAM,EAAM,KAAK,SAAS,iBAAiB,EACrC,EAAW,MAAM,MAAM,EAAK,CAChC,OAAQ,OACR,QAAS,KAAK,aAAa,EAC3B,KAAM,KAAK,UAAU,CAAO,CAC9B,CAAC,EAED,GAAI,CAAC,EAAS,GACZ,MAAU,MACR,eAAe,EAAS,YAAY,MAAM,EAAS,KAAK,GAC1D,EAGF,OAAQ,MAAM,EAAS,KAAK,OAGxB,WAAU,CACd,EAC0C,CAC1C,IAAM,EAAM,KAAK,SAAS,eAAe,EACnC,EAAW,MAAM,MAAM,EAAK,CAChC,OAAQ,OACR,QAAS,KAAK,aAAa,EAC3B,KAAM,KAAK,UAAU,CAAO,CAC9B,CAAC,EAED,GAAI,CAAC,EAAS,GACZ,MAAU,MACR,eAAe,EAAS,YAAY,MAAM,EAAS,KAAK,GAC1D,EAGF,OAAQ,MAAM,EAAS,KAAK,OAGxB,aAAY,CAChB,EAC4C,CAC5C,IAAM,EAAM,KAAK,SAAS,iBAAiB,EACrC,EAAW,MAAM,MAAM,EAAK,CAChC,OAAQ,OACR,QAAS,KAAK,aAAa,EAC3B,KAAM,KAAK,UAAU,CAAO,CAC9B,CAAC,EAED,GAAI,CAAC,EAAS,GACZ,MAAU,MACR,eAAe,EAAS,YAAY,MAAM,EAAS,KAAK,GAC1D,EAGF,OAAQ,MAAM,EAAS,KAAK,OAGxB,gBAAe,CACnB,EAC4C,CAC5C,IAAM,EAAM,KAAK,SAAS,oBAAoB,EACxC,EAAW,MAAM,MAAM,EAAK,CAChC,OAAQ,OACR,QAAS,KAAK,aAAa,EAC3B,KAAM,KAAK,UAAU,CAAO,CAC9B,CAAC,EAED,GAAI,CAAC,EAAS,GACZ,MAAU,MACR,eAAe,EAAS,YAAY,MAAM,EAAS,KAAK,GAC1D,EAGF,OAAQ,MAAM,EAAS,KAAK,EAEhC,CC1MA,IAAM,EAAY,cACZ,EAAU,wBACV,EAAe,IACf,EAAS,uBACT,EAAiB,mCAEvB,SAAS,CAAW,CAAC,EAAsB,CACzC,OAAO,SAAS,UAAU,SAAS,KAAK,CAAE,EAG5C,SAAS,CAAW,CAAC,EAAuC,CAC1D,IAAM,EAAS,EAAY,CAAE,EAAE,QAAQ,EAAgB,EAAE,EACzD,OAAO,EAAO,MAAM,CAAS,GAAK,EAAO,MAAM,CAAO,EAGjD,SAAS,CAAiB,CAAC,EAAwB,CACxD,IAAM,EAAO,EAAY,CAAE,EAC3B,GAAI,CAAC,GAAQ,CAAC,EAAK,GACjB,MAAO,CAAC,EAGV,OAAO,EAAK,GACT,MAAM,CAAY,EAClB,IAAI,CAAC,IAAQ,CAEZ,OADc,EAAI,QAAQ,EAAQ,CAAC,EAAK,EAAY,IAAS,CAAI,EACpD,KAAK,EACnB,EACA,OAAO,CAAC,IAAS,EAAK,OAAS,CAAC,EC7B9B,MAAM,CAAO,OACM,OAAQ,gBACR,KAAM,iBACN,QAAS,iBACT,MAAO,iBAEjB,OAAQ,CACpB,MAAO,EACP,KAAM,EACN,QAAS,EACT,MAAO,EACP,SAAU,CACZ,QAEe,aAAc,SACd,cAAuB,EAAO,MAAM,WACpC,UAAW,SAEX,WAAU,EAAS,CAChC,GAAI,CAAC,EAAO,YAAa,CACvB,IAAM,EAAU,QAAQ,IAAI,kBAC5B,EAAO,SAAW,CAAC,GAAW,QAAQ,OAAO,MAC7C,EAAO,YAAc,UAIX,SAAQ,CAAC,EAAqB,CAC1C,EAAO,aAAe,QAGV,YAAW,CAAC,EAAyB,CACjD,EAAO,SAAW,QAGL,IAAG,CAAC,EAAe,EAAuB,CAGvD,GAFA,EAAO,WAAW,EAEd,EAAQ,EAAO,aACjB,OAGF,IAAM,EAAY,IAAI,KAAK,EACxB,YAAY,EACZ,QAAQ,IAAK,GAAG,EAChB,UAAU,EAAG,EAAE,EACZ,EACJ,OAAO,KAAK,EAAO,KAAK,EAAE,KACxB,CAAC,IAAQ,EAAO,MAAM,KAAsC,CAC9D,GAAK,UACH,EAAmB,GAAG,kBAA0B,OAAe,IAEnE,GAAI,EAAO,SAOT,EAAmB,GALjB,IAAU,EAAO,MAAM,OAAS,IAAU,EAAO,MAAM,KACnD,EAAO,KACP,IAAU,EAAO,MAAM,QACrB,EAAO,OACP,EAAO,MACe,IAAmB,EAAO,SAIxD,GAAS,EAAO,MAAM,MAAQ,QAAQ,OAAS,QAAQ,QAClD,MAAM,EAAmB;AAAA,CAAI,QAGxB,MAAK,CAAC,EAAuB,CACzC,EAAO,IAAI,EAAO,MAAM,MAAO,CAAO,QAG1B,KAAI,CAAC,EAAuB,CACxC,EAAO,IAAI,EAAO,MAAM,KAAM,CAAO,QAGzB,QAAO,CAAC,EAAuB,CAC3C,EAAO,IAAI,EAAO,MAAM,QAAS,CAAO,QAG5B,KAAI,CAAC,EAAuB,CACxC,EAAO,IAAI,EAAO,MAAM,QAAS,CAAO,QAG5B,MAAK,CAAC,EAAuB,CACzC,EAAO,IAAI,EAAO,MAAM,MAAO,CAAO,QAG1B,SAAQ,CAAC,EAAuB,CAC5C,EAAO,IAAI,EAAO,MAAM,SAAU,CAAO,EAE7C,CJ/DO,MAAe,CAAO,OACV,WAAiC,IAAI,IAE/C,UACA,OAAkB,KAClB,WAAyB,KAAK,UAE3B,aAAwB,GAE1B,UAA2B,KACzB,cAEH,gBAAgB,EAAwB,CAC7C,OAAO,KAAK,cAGP,YAAY,EAAkB,CACnC,OAAO,KAAK,UAGP,aAAa,EAAe,CACjC,OAAO,KAAK,WAGP,WAAW,CAAC,EAAoC,CACrD,KAAK,cAAgB,EAErB,KAAK,UAAY,IAAI,EACnB,KAAK,cAAc,OACnB,KAAK,cAAc,OACnB,KAAK,cAAc,cACrB,EAEA,KAAK,aAAe,QAKR,iBAAgB,EAAoB,CAChD,GAAI,CACF,EAAO,KACL,qCAAqC,KAAK,cAAc,aAC1D,EAEA,IAAM,EAAW,MAAM,KAAK,UAAU,gBAAgB,CACpD,aAAc,KAAK,cAAc,WACnC,CAAC,EACD,EAAO,KAAK,wBAAwB,EAAS,YAAY,EACzD,IAAM,EAAoB,EAAS,YAAY,SAAS,EAExD,GAAI,CAAC,EACH,MAAU,MACR,qCAAqC,KAAK,cAAc,aAC1D,EAMF,OAHA,KAAK,UAAY,EACjB,EAAO,KAAK,qCAAqC,KAAK,WAAW,EAE1D,KAAK,UACZ,MAAO,EAAO,CACd,MAAU,MACR,iCAAiC,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GACxF,SAIU,YAAW,CACvB,EACA,EACA,EACsB,CACtB,IAAM,EAAW,GAAkB,SAAS,GAAG,EAC3C,GAAG,kBACH,GAAG,mBAEP,OAAO,EAAqB,QAAQ,EACjC,SAAS,CAAQ,EACjB,OAAO,CAAM,EACb,eAAe,CAAc,EAC7B,UAAU,CAAS,EACnB,MAAM,OAGE,gBAAe,EAE1B,CACA,GAAI,CACF,IAAM,EAAY,MAAM,KAAK,iBAAiB,EAC9C,OAAO,KAAK,2BAA2B,CAAS,EAChD,MAAO,EAAO,CAQd,OAPA,EAAO,MACL,6BACE,KAAK,cAAc,YACnB,gEACC,KAAK,cAAc,gBAAkB,WACtC,sCACJ,EACO,IAAI,GAIR,WAAW,CAAC,EAAsB,CACvC,IAAM,EAAc,EAAM,cAAc,EACxC,GAAI,CAAC,EAAa,CAChB,EAAO,KAAK,4CAA4C,EACxD,OAEF,GAAI,IAAS,KACX,EAAY,aACV,EAAkB,cAAc,mBAChC,CACF,EAIG,YAAY,CAAC,EAAa,EAAsB,CACrD,IAAM,EAAc,EAAM,cAAc,EACxC,GAAI,CAAC,EAAa,CAChB,EAAO,KAAK,6CAA6C,EACzD,OAEF,EAAY,aAAa,EAAK,KAAK,WAAW,CAAK,CAAC,EAG/C,UAAU,EAAS,CACxB,KAAK,YAAY,KAAK,EAGjB,WAAW,EAAS,CACzB,KAAK,YAAY,MAAM,EAGlB,cAAc,EAAS,CAC5B,KAAK,YAAY,MAAM,EAGlB,aAAa,CAAC,EAA2C,CAC9D,GAAI,CAAC,EACH,OAEF,IAAM,EAAc,EAAM,cAAc,EACxC,GAAI,CAAC,EAAa,CAChB,EAAO,KAAK,8CAA8C,EAC1D,OAEF,QAAY,EAAK,KAAU,OAAO,QAAQ,CAAU,EAClD,EAAY,aAAa,EAAK,KAAK,WAAW,CAAK,CAAC,EAIjD,QAAQ,CAAC,EAAsB,CACpC,KAAK,aAAa,EAAkB,cAAc,eAAgB,CAAK,EAGlE,SAAS,CAAC,EAAuB,CACtC,KAAK,aAAa,EAAkB,cAAc,gBAAiB,CAAM,EAGpE,aAAa,CAClB,EACA,EACA,EACM,CACN,GAAI,CAAC,KAAK,aAAc,CACtB,EAAO,KAAK,gDAAgD,EAC5D,OAGF,GAAI,CAAC,KAAK,cAAc,iBACtB,OAGF,IAAM,EAAc,EAAM,cAAc,EACxC,GAAI,CAAC,EAAa,CAChB,EAAO,KAAK,8CAA8C,EAC1D,OAEF,GAAI,CAAC,EAAY,YAAY,EAAG,CAC9B,EAAO,KAAK,sDAAsD,EAClE,OAGF,IAAM,EAAc,EAAY,YAAY,EACtC,EAAU,EAAY,QACtB,EAAS,EAAY,OAE3B,EAAO,KACL,0BAA0B,KAAK,cAAc,wBAAwB,aAAmB,aAAkB,EAAO,MACnH,EAEA,IAAM,EAAgB,KAAK,oBACzB,EACA,EACA,EACA,EACA,CACF,EACA,KAAK,kBAAkB,CAAa,EAG/B,kBAAkB,CAAC,EAAoB,EAAsB,CAClE,GAAI,CAAC,KAAK,aAAc,CACtB,EAAO,KAAK,qDAAqD,EACjE,OAGF,GAAI,CAAC,KAAK,cAAc,iBACtB,OAGF,IAAM,EAAc,EAAM,cAAc,EACxC,GAAI,CAAC,EAAa,CAChB,EAAO,KAAK,mDAAmD,EAC/D,OAEF,GAAI,CAAC,EAAY,YAAY,EAAG,CAC9B,EAAO,KAAK,2DAA2D,EACvE,OAGF,IAAM,EAAc,EAAY,YAAY,EACtC,EAAU,EAAY,QACtB,EAAS,EAAY,OAE3B,EAAO,KACL,+BAA+B,KAAK,cAAc,wBAAwB,aAAmB,aAAkB,EAAO,MACxH,EAEA,GAAI,CACF,IAAM,EAAqB,KAAK,yBAC9B,EACA,EACA,EACA,CACF,EACM,EAAgB,KAAK,WAAW,CAAkB,EACxD,EAAY,aACV,EAAkB,cAAc,mBAChC,CACF,EACA,MAAO,EAAO,CACd,EAAO,MACL,yCAAyC,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAChG,GAII,wBAAwB,CAC9B,EACA,EACA,EACA,EACyB,CACzB,IAAM,EAAW,wBAAwB,GAAU,KAAK,IAAI,IACtD,EAAY,GAAS,EAErB,EAAe,EAAO,gBAAgB,EAE5C,MAAO,CACL,aAAc,KAAK,cAAc,YACjC,UAAW,EACX,OAAQ,EACR,MAAO,EACP,gBAAiB,KAAK,cAAc,eACpC,SAAU,EACV,cAAe,CACjB,EAGM,0BAA0B,CAAC,EAAyC,CAC1E,IAAM,EAAW,KAAK,cAAc,OAAO,SAAS,GAAG,EACnD,GAAG,KAAK,cAAc,uBACtB,GAAG,KAAK,cAAc,wBAE1B,OAAO,EAAqB,QAAQ,EACjC,SAAS,CAAQ,EACjB,OAAO,KAAK,cAAc,MAAM,EAChC,eAAe,KAAK,cAAc,cAAc,EAChD,UAAU,CAAS,EACnB,MAAM,EAGH,mBAAmB,CACzB,EACA,EACA,EACA,EACA,EACsB,CACtB,IAAM,EAAQ,kBAAkB,GAAU,KAAK,IAAI,IAC7C,EAAY,GAAS,EAErB,EAAe,EAAO,gBAAgB,EAa5C,MAX4C,CAC1C,aAAc,KAAK,cAAc,YACjC,UAAW,EACX,SAAU,CAAC,CAAO,EAClB,eAAgB,CAAC,EACjB,iBAAkB,CAAC,CAAY,EAC/B,MAAO,EACP,SAAU,EACV,cAAe,CACjB,OAKY,kBAAiB,CAC7B,EACe,CACf,GAAI,CAAC,KAAK,UAAW,CACnB,EAAO,KAAK,uDAAuD,EACnE,OAGF,GAAI,CACF,MAAM,KAAK,UAAU,0BAA0B,CAAa,EAC5D,EAAO,KAAK,6BAA6B,EAAc,WAAW,EAClE,MAAO,EAAO,CACd,EAAO,MACL,qCAAqC,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAC5F,GAIG,OAAqC,CAC1C,EACA,EAAqB,OACQ,CAC7B,MAAO,IAAI,IAAgB,CACzB,IAAM,EAAc,EAAM,cAAc,EACxC,GAAI,CAAC,EAEH,OADA,EAAO,KAAK,wCAAwC,EAC7C,EAAK,GAAG,CAAI,EAGrB,IAAM,EAAW,EAAK,MAAQ,YACxB,EAAS,EAAM,UAAU,KAAK,cAAc,UAAU,EAE5D,OAAO,EAAQ,KAAK,EAAM,QAAQ,EAAQ,OAAO,EAAG,CAAW,EAAG,IAAM,CACtE,OAAO,EAAO,gBACZ,EACA,CAAE,KAAM,EAAsB,QAAS,EACvC,CAAC,IAAS,CACR,GAAI,CACF,EAAK,aACH,EAAkB,cAAc,mBAChC,CACF,EAEA,IAAM,EAAW,EAAkB,CAAI,EACvC,GAAI,EAAS,SAAW,EAAK,OAAQ,CACnC,IAAM,EAAoC,CAAC,EAC3C,EAAS,QAAQ,CAAC,EAAM,IAAU,CAChC,EAAS,GAAQ,EAAK,GACvB,EACD,EAAK,aACH,EAAkB,cAAc,eAChC,KAAK,WAAW,CAAQ,CAC1B,EAGF,IAAM,EAAS,EAAK,GAAG,CAAI,EAE3B,GAAI,aAAkB,QACpB,OAAO,EACJ,KAAK,CAAC,IAAQ,CAMb,OALA,EAAK,aACH,EAAkB,cAAc,gBAChC,KAAK,WAAW,CAAG,CACrB,EACA,EAAK,IAAI,EACF,EACR,EACA,MAAM,CAAC,IAAQ,CAGd,MAFA,EAAK,gBAAgB,CAAY,EACjC,EAAK,IAAI,EACH,EACP,EAOH,YALA,EAAK,aACH,EAAkB,cAAc,gBAChC,KAAK,WAAW,CAAM,CACxB,EACA,EAAK,IAAI,EACF,EAET,MAAO,EAAK,CAGZ,MAFA,EAAK,gBAAgB,CAAY,EACjC,EAAK,IAAI,EACH,GAGZ,EACD,QAIQ,SAAQ,EAAkB,EACzC,CK3aO,IAAM,EACX,yCCmBK,MAAM,CAAoB,CAEb,YACA,OACA,eACA,OACA,iBACA,WANlB,WAAW,CACO,EACA,EACA,EACA,EACA,EACA,EAAqB,EACrC,CANgB,mBACA,cACA,sBACA,cACA,wBACA,wBAgBJ,cAAa,CAAC,EAA0C,CACpE,OAAO,IAAI,EAA2B,EAAE,YAAY,CAAW,EAAE,MAAM,QAG3D,QAAO,EAA+B,CAClD,OAAO,IAAI,EAEf,CAgBO,MAAM,CAA2B,CAC9B,aACA,QAAyB,EACzB,gBAAiC,EACjC,QAAkB,EAClB,kBAA6B,GAC7B,YAAsB,EAEvB,WAAW,CAAC,EAA2B,CAE5C,OADA,KAAK,aAAe,EACb,KAGF,MAAM,CAAC,EAAsB,CAElC,OADA,KAAK,QAAU,EACR,KAGF,cAAc,CAAC,EAA8B,CAElD,OADA,KAAK,gBAAkB,EAChB,KAGF,MAAM,CAAC,EAAsB,CAElC,OADA,KAAK,QAAU,EACR,KAGF,gBAAgB,CAAC,EAAiC,CAEvD,OADA,KAAK,kBAAoB,EAClB,KAGF,UAAU,CAAC,EAA0B,CAE1C,OADA,KAAK,YAAc,EACZ,KAGF,KAAK,EAAwB,CAClC,GAAI,CAAC,KAAK,aACR,MAAU,MAAM,0BAA0B,EAG5C,GAAI,CAAC,KAAK,QACR,MAAU,MAAM,qBAAqB,EAGvC,GAAI,CAAC,KAAK,gBACR,MAAU,MAAM,6BAA6B,EAG/C,GAAI,CAAC,KAAK,QACR,MAAU,MAAM,qBAAqB,EAGvC,OAAO,IAAI,EACT,KAAK,aACL,KAAK,QACL,KAAK,gBACL,KAAK,QACL,KAAK,kBACL,KAAK,WACP,EAEJ,CC7HO,SAAS,EAA4C,CAC1D,EACY,CAQZ,MAP4B,CAC1B,WAAY,OACZ,WAAY,IAAI,KAAK,EAAE,YAAY,EACnC,KAAM,QACH,CACL,ECbK,IAAK,GAAL,CAAK,IAAL,CACL,QAAQ,QACR,gBAAgB,gBAChB,kBAAkB,kBAClB,UAAU,UACV,oBAAoB,oBACpB,eAAe,eACf,iBAAiB,iBACjB,sBAAsB,wBARZ,QCUL,SAAS,CAAgB,EAAe,CAC7C,IAAM,EAAqB,CACzB,WAAY,GACZ,WAAY,GACZ,KAAM,GACN,SAAU,CAAC,IAAkB,CAC3B,EAAO,MAAQ,GAEjB,aAAc,IAAM,CAClB,GAAI,EAAO,OAAS,KAClB,MAAO,GAET,GAAI,EAAO,OAAS,KAClB,MAAO,GAET,IAAM,EAAY,EAAO,WAAa,IAChC,EAAQ,EAAO,MACrB,OAAO,GAAa,MAAQ,GAAS,MAAQ,GAAS,GAExD,kBAAmB,IAAM,CACvB,MAAO,CAAC,GAEV,gBAAiB,IAAM,CACrB,MAAO,CACL,WAAY,EAAO,WACnB,KAAM,EAAO,KACb,UAAW,EAAO,WAAa,IAC/B,YAAa,EAAO,aAAe,GACnC,gBAAiB,CAAC,EAClB,OAAQ,CAAC,CACX,EAEJ,EAIA,GAFA,EAAO,WAAa,aACpB,EAAO,KAAO,EAAO,WACjB,EAAO,cAAgB,GACzB,EAAO,UAAY,EAGrB,OAAO,EChDF,IAAK,GAAL,CAAK,IAAL,CACL,gBAAgB,gBAChB,sBAAsB,sBACtB,eAAe,eACf,mBAAmB,mBACnB,qBAAqB,qBACrB,wBAAwB,wBACxB,kBAAkB,kBAClB,aAAa,aACb,aAAa,aACb,kBAAkB,kBAClB,SAAS,WAXC,QAyBL,SAAS,EAGf,CAAC,EAAc,EAAoC,CAClD,IAAM,EAAS,EAAiB,EAsBhC,OApBA,EAAO,UAAY,EACnB,EAAO,KAAO,EACd,EAAO,WAAa,EACpB,EAAO,eAAiB,EAExB,EAAO,aAAe,CAAC,IAAsB,CAC3C,GAAI,EAAY,GAAK,EAAY,EAC/B,MAAU,MAAM,2CAA2C,GAAW,EAExE,EAAO,UAAY,GAGrB,EAAO,aAAe,IAAM,CAC1B,OAAO,EAAO,WAGhB,EAAO,kBAAoB,CAAC,IAAc,CACxC,EAAO,eAAiB,GAGnB,EC9CF,MAAM,UAAyB,KAAM,CAEjC,WADT,WAAW,CACF,EACP,EACA,CACA,MAAM,CAAO,EAHN,kBAIP,KAAK,KAAO,mBAEhB,CAEA,eAAsB,CAAgB,CACpC,EACA,EACA,EACA,EACA,EAAyB,GAAoB,GAC7C,EAAyB,GAAmB,GAC5C,EACiB,CACjB,GAAI,CAAC,GAAoB,CAAC,GAAkB,CAAC,EAC3C,MAAU,MAAM,kCAAkC,EAepD,OAPiB,MALF,IAAI,EACjB,EACA,EACA,CACF,EAC8B,WAAW,CACvC,OACA,SACA,YACA,UACA,SAAU,CACZ,CAAC,GACe,KAGlB,eAAsB,CAAiB,CACrC,EACA,EAAyB,GAAoB,GAC7C,EAAyB,GAAmB,GAC5C,CACA,GAAI,CAAC,GAAoB,CAAC,GAAkB,CAAC,EAC3C,MAAU,MAAM,kCAAkC,EAQpD,IAAM,EAAW,MALF,IAAI,EACjB,EACA,EACA,CACF,EAC8B,aAAa,CAAE,MAAO,CAAC,CAAI,CAAE,CAAC,EAC5D,GAAI,EAAS,QAAQ,SAAW,EAC9B,MAAM,IAAI,EAAiB,IAAK,oBAAoB,aAAgB,EAEtE,IAAQ,aAAY,gBAAe,GAAW,EAAS,QAAQ,GAC/D,OAAO,EAGT,eAAsB,CAAY,CAChC,EACA,EAAyB,GAAoB,GAC7C,EAAyB,GAAmB,GAC1B,CAClB,GAAI,CAAC,GAAoB,CAAC,GAAkB,CAAC,EAC3C,MAAU,MAAM,kCAAkC,EASpD,OADiB,MALF,IAAI,EACjB,EACA,EACA,CACF,EAC8B,aAAa,CAAE,MAAK,CAAC,GACnC,OCxEX,MAAe,CAEtB,CACS,UACA,KACA,OACA,UACA,QACA,eACA,eACA,eACA,WACA,WACA,MACA,MACA,MACA,YAEP,WAAW,CACT,EACA,EACA,EACA,EACA,EACA,EACA,EAAyB,GAAoB,GAC7C,EAAyB,GAAmB,GAC5C,CACA,KAAK,UAAY,EACjB,KAAK,KAAO,EACZ,KAAK,OAAS,EACd,KAAK,UAAY,EACjB,KAAK,eAAiB,EACtB,KAAK,QAAU,EACf,KAAK,eAAiB,EACtB,KAAK,eAAiB,EACtB,KAAK,WAAa,EAClB,KAAK,WAAa,mBAClB,KAAK,MAAQ,OACb,KAAK,MAAQ,OACb,KAAK,MAAQ,KACb,KAAK,YAAc,GAErB,gBACA,OACA,mBACA,QACA,aACA,oBACA,KACA,0BAEa,IAA+B,CAE1C,EACA,EAAyB,GAAoB,GAC7C,EAAyB,GAAmB,GAChC,CACZ,IAAM,EAAS,MAAM,EACnB,EACA,EACA,CACF,EAEM,EAAU,EAAO,WAAa,GAC9B,EACJ,KAAK,UAAU,kCAEjB,GAAI,IAAY,EACd,MAAM,IAAI,EACR,IACA,oBAAoB,cAAiB,KAAK,MAC5C,EAGF,IAAM,EAAY,wCAIlB,OAAO,IAAI,KACT,EACA,EAAO,KACP,EAAO,OACP,EAAO,UACP,CAAC,EACD,EAAO,QACP,EACA,CACF,cAGW,OAAkC,CAE7C,EACA,EACA,EAAoB,IACpB,EACA,EAAyB,GAAoB,GAC7C,EAAyB,GAAmB,GAChC,CACZ,GAAI,MAAM,EAAa,EAAM,EAAgB,CAAc,EACzD,MAAM,IAAI,EACR,IACA,oBAAoB,2FACtB,EAGF,IAAM,EACJ,KAAK,UAAU,kCACX,EAAY,wCAclB,OAVA,MAAM,EACJ,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EAEO,IAAI,KACT,EACA,EACA,EACA,EACA,CAAC,EACD,EACA,EACA,CACF,OAGI,gBAAe,CAAC,EAAkC,CACtD,KAAK,aAAa,CAAS,EAC3B,MAAM,KAAK,iBAAiB,OAGxB,UAAS,CAAC,EAA+B,CAC7C,KAAK,OAAS,EACd,MAAM,KAAK,iBAAiB,OAGxB,WAAU,CAAC,EAAuD,CACtE,KAAK,QAAU,EACf,MAAM,KAAK,iBAAiB,OAGxB,eAAc,CAAC,EAAuC,CAC1D,KAAK,QAAU,EACf,MAAM,KAAK,iBAAiB,EAG9B,YAAY,EAAW,CACrB,OAAO,KAAK,UAGd,SAAS,EAAW,CAClB,OAAO,KAAK,OAGd,UAAU,EAAkC,CAC1C,OAAO,KAAK,QAAU,IAAK,KAAK,OAAQ,EAAI,KAG9C,OAAO,EAAW,CAChB,OAAO,KAAK,KAGd,SAAS,EAAwB,CAC/B,MAAO,CACL,KAAM,KAAK,KACX,OAAQ,KAAK,OACb,UAAW,KAAK,UAChB,QAAS,KAAK,OAChB,OAGI,iBAAgB,EAAkB,CACtC,MAAM,EACJ,KAAK,KACL,KAAK,OACL,KAAK,UACL,KAAK,QACL,KAAK,eACL,KAAK,cACP,EAGF,QAAQ,EAAW,CACjB,MAAO,GAAG,KAAK,YAAY,aAAa,KAAK,gBAC3C,KAAK,qBACQ,KAAK,sBAAsB,KAAK,UAAU,KAAK,OAAO,KAGvE,QAAQ,CAAC,EAAqB,CAC5B,KAAK,MAAQ,EAGf,YAAY,EAAY,CACtB,GAAI,KAAK,OAAS,KAChB,MAAO,GAET,GAAI,KAAK,OAAS,KAChB,MAAO,GAET,IAAM,EAAY,KAAK,WAAa,IAC9B,EAAQ,KAAK,MACnB,OAAO,GAAa,MAAQ,GAAS,MAAQ,GAAS,EAGxD,iBAAiB,EAAa,CAC5B,GAAI,MAAM,QAAQ,KAAK,cAAc,EACnC,MAAO,CAAC,GAAG,KAAK,cAAc,EAEhC,MAAO,CAAC,EAGV,YAAY,CAAC,EAAyB,CACpC,GAAI,EAAY,GAAK,EAAY,EAC/B,MAAU,MAAM,2CAA2C,GAAW,EAExE,KAAK,UAAY,EAGnB,YAAY,EAAkB,CAC5B,OAAO,KAAK,UAGd,iBAAiB,CAAC,EAAiC,CACjD,KAAK,eAAiB,EAGxB,eAAe,EAAiB,CAC9B,MAAO,CACL,WAAY,KAAK,aAAa,EAC9B,KAAM,KAAK,QAAQ,EACnB,UAAW,KAAK,aAAa,EAC7B,YAAa,KAAK,aAAe,GACjC,gBAAiB,KAAK,kBAAkB,EACxC,OAAQ,CACN,OAAQ,KAAK,UAAU,KACnB,KAAK,WAAW,EAAI,CAAE,QAAS,KAAK,WAAW,CAAE,EAAI,CAAC,CAC5D,CACF,EAEJ,CCxPO,MAAM,UAAqB,CAAiB,CACjD,WAAW,CACT,EACA,EACA,EACA,EACA,EAAoC,CAAC,EACrC,EACA,EAAyB,GAAoB,GAC7C,EAAyB,GAAmB,GAC5C,CACA,MACE,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EAEJ,CC5BO,MAAM,UAA0B,CAAiB,CACtD,WAAW,CACT,EACA,EACA,EACA,EACA,EAAoC,CAAC,EACrC,EACA,EAAyB,GAAoB,GAC7C,EAAyB,GAAmB,GAC5C,CACA,MACE,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,EAEJ,CC1BA,iCAAS,iCACT,6BACE,uBACA,sCCHK,IAAM,EAAU,QDYhB,MAAM,UAAsB,CAAO,CAChC,uBAEK,WAAU,CACrB,EAA0C,CAAC,EACnB,CACxB,GAAI,KAAK,aACP,OAAO,KAGT,GAAI,CACF,IAAM,EAAqB,EACxB,EAAkB,aAAa,cAC9B,KAAK,cAAc,aACpB,EAAkB,aAAa,uBAAwB,KACrD,EAAQ,kBACb,EAEM,EAAe,MAAM,KAAK,gBAAgB,EAUhD,OARA,KAAK,kBAAoB,IAAI,GAAkB,CAC7C,SAAU,EAAuB,CAAkB,EACnD,eAAgB,CAAC,IAAI,EAAmB,CAAY,CAAC,CACvD,CAAC,EAED,KAAK,kBAAkB,SAAS,EAEhC,KAAK,aAAe,GACb,KACP,MAAO,EAAO,CACd,MAAU,MACR,wCAAwC,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAC/F,SAIU,YAAW,CAAC,EAAmD,CAC3E,IAAM,EAAM,iBAAiB,EAAc,cAC3C,GAAI,CAAC,EAAO,UAAU,IAAI,CAAG,EAC3B,EAAO,UAAU,IAAI,EAAK,IAAI,EAAc,CAAa,CAAC,EAE5D,OAAO,EAAO,UAAU,IAAI,CAAG,QAGnB,cAAa,CAAC,EAAoC,CAC9D,IAAM,EAAgB,EAAoB,QAAQ,EAC/C,YAAY,CAAW,EACvB,MAAM,EACT,OAAO,EAAc,YAAY,CAAa,QAGlC,wBAAuB,CACnC,EACe,CACf,OAAO,IAAI,EAAc,CAAa,EAE1C,CEpEA,iCAAS,kCACT,kBAAS,iCACT,6BAAS,uCAWF,MAAM,UAAmB,CAAO,CAC7B,aAEK,WAAU,CACrB,EAAuC,CAAC,EACnB,CACrB,GAAI,KAAK,aACP,OAAO,KAGT,GAAI,CACF,IAAM,EAAqB,EACxB,EAAkB,aAAa,cAC9B,KAAK,cAAc,aACpB,EAAkB,aAAa,uBAAwB,KACrD,EAAQ,kBACb,EAEM,EAAe,MAAM,KAAK,gBAAgB,EAYhD,OAVA,KAAK,QAAU,IAAI,GAAQ,CACzB,SAAU,GAAuB,CAAkB,EACnD,iBAAkB,EAAQ,iBAC1B,cAAe,IAAI,GAAmB,CAAY,KAC/C,CACL,CAAC,EAED,KAAK,QAAQ,MAAM,EAEnB,KAAK,aAAe,GACb,KACP,MAAO,EAAO,CACd,MAAU,MACR,qCAAqC,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,GAC5F,SAIU,YAAW,CAAC,EAAgD,CACxE,IAAM,EAAM,cAAc,EAAc,cACxC,GAAI,CAAC,EAAO,UAAU,IAAI,CAAG,EAC3B,EAAO,UAAU,IAAI,EAAK,IAAI,EAAW,CAAa,CAAC,EAEzD,OAAO,EAAO,UAAU,IAAI,CAAG,QAGnB,cAAa,CAAC,EAAiC,CAC3D,IAAM,EAAgB,EAAoB,QAAQ,EAC/C,YAAY,CAAW,EACvB,iBAAiB,EAAI,EACrB,MAAM,EACT,OAAO,EAAW,YAAY,CAAa,QAG/B,wBAAuB,CACnC,EACY,CACZ,OAAO,IAAI,EAAW,CAAa,OAGxB,SAAQ,EAAkB,CACrC,GAAI,KAAK,QACP,MAAM,KAAK,QAAQ,SAAS,EAGlC",
28
- "debugId": "6A697B7F3936AB8164756E2164756E21",
27
+ "mappings": "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",
28
+ "debugId": "B94AA7E5BEFF626164756E2164756E21",
29
29
  "names": []
30
30
  }
package/dist/index.umd.js CHANGED
@@ -1,5 +1,5 @@
1
- (()=>{var{defineProperty:G,getOwnPropertyNames:X,getOwnPropertyDescriptor:Q}=Object,Z=Object.prototype.hasOwnProperty;var k=new WeakMap,tt=(t)=>{var e=k.get(t),r;if(e)return e;if(e=G({},"__esModule",{value:!0}),t&&typeof t==="object"||typeof t==="function")X(t).map((n)=>!Z.call(e,n)&&G(e,n,{get:()=>t[n],enumerable:!(r=Q(t,n))||r.enumerable}));return k.set(t,e),e};var et=(t,e)=>{for(var r in e)G(t,r,{get:e[r],enumerable:!0,configurable:!0,set:(n)=>e[r]=()=>n})};var S=((t)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var mt={};et(mt,{scorerExists:()=>y,pushPromptScorer:()=>x,parseFunctionArgs:()=>C,fetchPromptScorer:()=>P,createExample:()=>Et,createBaseScorer:()=>J,createAPIScorer:()=>dt,TracerConfigurationBuilder:()=>D,TracerConfiguration:()=>R,Tracer:()=>T,TracePromptScorer:()=>K,PromptScorer:()=>L,OpenTelemetryKeys:()=>u,NodeTracer:()=>A,NoOpSpanExporter:()=>O,Logger:()=>i,JudgmentSpanExporter:()=>v,JudgmentApiClient:()=>g,JudgmentAPIError:()=>N,JUDGMENT_ORG_ID:()=>E,JUDGMENT_NO_COLOR:()=>it,JUDGMENT_ENABLE_MONITORING:()=>rt,JUDGMENT_ENABLE_EVALUATIONS:()=>nt,JUDGMENT_DEFAULT_GPT_MODEL:()=>I,JUDGMENT_API_URL:()=>d,JUDGMENT_API_KEY:()=>p,ExampleParams:()=>H,BrowserTracer:()=>w,BasePromptScorer:()=>b,APIScorerType:()=>j});var z=S("@opentelemetry/exporter-trace-otlp-http");class v{delegate;constructor(t,e,r,n){if(!n||n.trim()==="")throw Error("projectId is required for JudgmentSpanExporter");this.delegate=new z.OTLPTraceExporter({url:t,headers:{Authorization:`Bearer ${e}`,"X-Organization-Id":r,"X-Project-Id":n}})}static builder(){return new F}export(t,e){this.delegate.export(t,e)}shutdown(){return this.delegate.shutdown()}forceFlush(){return this.delegate.forceFlush?.()??Promise.resolve()}}class F{_endpoint;_apiKey;_organizationId;_projectId;constructor(){}endpoint(t){return this._endpoint=t,this}apiKey(t){return this._apiKey=t,this}organizationId(t){return this._organizationId=t,this}projectId(t){return this._projectId=t,this}build(){if(!this._endpoint||this._endpoint.trim()==="")throw Error("Endpoint is required");if(!this._apiKey||this._apiKey.trim()==="")throw Error("API key is required");if(!this._organizationId||this._organizationId.trim()==="")throw Error("Organization ID is required");if(!this._projectId||this._projectId.trim()==="")throw Error("Project ID is required");return new v(this._endpoint,this._apiKey,this._organizationId,this._projectId)}}class O{export(t,e){e({code:0})}flush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}class u{static AttributeKeys={JUDGMENT_SPAN_KIND:"judgment.span_kind",JUDGMENT_INPUT:"judgment.input",JUDGMENT_OUTPUT:"judgment.output",JUDGMENT_OFFLINE_MODE:"judgment.offline_mode",JUDGMENT_UPDATE_ID:"judgment.update_id",JUDGMENT_CUSTOMER_ID:"judgment.customer_id",JUDGMENT_AGENT_ID:"judgment.agent_id",JUDGMENT_PARENT_AGENT_ID:"judgment.parent_agent_id",JUDGMENT_AGENT_CLASS_NAME:"judgment.agent_class_name",JUDGMENT_AGENT_INSTANCE_NAME:"judgment.agent_instance_name",PENDING_TRACE_EVAL:"judgment.pending_trace_eval",GEN_AI_PROMPT:"gen_ai.prompt",GEN_AI_COMPLETION:"gen_ai.completion",GEN_AI_REQUEST_MODEL:"gen_ai.request.model",GEN_AI_RESPONSE_MODEL:"gen_ai.response.model",GEN_AI_SYSTEM:"gen_ai.system",GEN_AI_USAGE_INPUT_TOKENS:"gen_ai.usage.input_tokens",GEN_AI_USAGE_OUTPUT_TOKENS:"gen_ai.usage.output_tokens",GEN_AI_USAGE_COMPLETION_TOKENS:"gen_ai.usage.completion_tokens",GEN_AI_REQUEST_TEMPERATURE:"gen_ai.request.temperature",GEN_AI_REQUEST_MAX_TOKENS:"gen_ai.request.max_tokens",GEN_AI_RESPONSE_FINISH_REASONS:"gen_ai.response.finish_reasons",GEN_AI_USAGE_TOTAL_COST:"gen_ai.usage.total_cost_usd"};static InternalAttributeKeys={DISABLE_PARTIAL_EMIT:"disable_partial_emit",CANCELLED:"cancelled"};static ResourceKeys={SERVICE_NAME:"service.name",TELEMETRY_SDK_LANGUAGE:"telemetry.sdk.language",TELEMETRY_SDK_NAME:"telemetry.sdk.name",TELEMETRY_SDK_VERSION:"telemetry.sdk.version",JUDGMENT_PROJECT_ID:"judgment.project_id"}}var m=S("@opentelemetry/api");function h(t,e){let r=process.env[t];if(!r)return e??null;return r}var p=h("JUDGMENT_API_KEY"),E=h("JUDGMENT_ORG_ID"),d=h("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),I=h("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),rt=h("JUDGMENT_ENABLE_MONITORING","true"),nt=h("JUDGMENT_ENABLE_EVALUATIONS","true"),it=h("JUDGMENT_NO_COLOR");class g{baseUrl;apiKey;organizationId;constructor(t,e,r){this.baseUrl=t,this.apiKey=e,this.organizationId=r}buildUrl(t){return this.baseUrl+t}buildHeaders(){if(!this.apiKey||!this.organizationId)throw Error("API key and organization ID cannot be null");return{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId}}async addToRunEvalQueueExamples(t){let e=this.buildUrl("/add_to_run_eval_queue/examples"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async addToRunEvalQueueTraces(t){let e=this.buildUrl("/add_to_run_eval_queue/traces"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async logEvalResults(t){let e=this.buildUrl("/log_eval_results/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async fetchExperimentRun(t){let e=this.buildUrl("/fetch_experiment_run/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async getEvaluationStatus(t,e){let r=new URLSearchParams;r.set("experiment_run_id",t),r.set("project_name",e);let n=this.buildUrl("/get_evaluation_status/"+(r.toString()?"?"+r.toString():"")),s=await fetch(n,{method:"GET",headers:this.buildHeaders()});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return}async scorerExists(t){let e=this.buildUrl("/scorer_exists/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async saveScorer(t){let e=this.buildUrl("/save_scorer/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchScorers(t){let e=this.buildUrl("/fetch_scorers/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async projectsResolve(t){let e=this.buildUrl("/projects/resolve/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}}var st=/^([^(]+?)=>/,ot=/^[^(]*\(\s*([^)]*)\)/m,at=/,/,ct=/^\s*(_?)(\S+?)\1\s*$/,ut=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function lt(t){return Function.prototype.toString.call(t)}function pt(t){let e=lt(t).replace(ut,"");return e.match(st)||e.match(ot)}function C(t){let e=pt(t);if(!e||!e[1])return[];return e[1].split(at).map((r)=>{return r.replace(ct,(s,a,o)=>o).trim()}).filter((r)=>r.length>0)}class i{static RESET="\x1B[0m";static RED="\x1B[31m";static YELLOW="\x1B[33m";static GRAY="\x1B[90m";static Level={DEBUG:0,INFO:1,WARNING:2,ERROR:3,CRITICAL:4};static initialized=!1;static currentLevel=i.Level.INFO;static useColor=!0;static initialize(){if(!i.initialized){let t=process.env.JUDGMENT_NO_COLOR;i.useColor=!t&&process.stdout.isTTY,i.initialized=!0}}static setLevel(t){i.currentLevel=t}static setUseColor(t){i.useColor=t}static log(t,e){if(i.initialize(),t<i.currentLevel)return;let r=new Date().toISOString().replace("T"," ").substring(0,19),n=Object.keys(i.Level).find((o)=>i.Level[o]===t)||"UNKNOWN",s=`${r} - judgeval - ${n} - ${e}`;if(i.useColor)s=`${t===i.Level.DEBUG||t===i.Level.INFO?i.GRAY:t===i.Level.WARNING?i.YELLOW:i.RED}${s}${i.RESET}`;(t>=i.Level.ERROR?process.stderr:process.stdout).write(s+`
2
- `)}static debug(t){i.log(i.Level.DEBUG,t)}static info(t){i.log(i.Level.INFO,t)}static warning(t){i.log(i.Level.WARNING,t)}static warn(t){i.log(i.Level.WARNING,t)}static error(t){i.log(i.Level.ERROR,t)}static critical(t){i.log(i.Level.CRITICAL,t)}}class T{static instances=new Map;apiClient;tracer=null;serializer=JSON.stringify;_initialized=!1;projectId=null;configuration;getConfiguration(){return this.configuration}getProjectId(){return this.projectId}getSerializer(){return this.serializer}constructor(t){this.configuration=t,this.apiClient=new g(this.configuration.apiUrl,this.configuration.apiKey,this.configuration.organizationId),this._initialized=!1}async resolveProjectId(){try{i.info(`Resolving project ID for project: ${this.configuration.projectName}`);let t=await this.apiClient.projectsResolve({project_name:this.configuration.projectName});i.info(`Resolved project ID: ${t.project_id}`);let e=t.project_id?.toString();if(!e)throw Error(`Project ID not found for project: ${this.configuration.projectName}`);return this.projectId=e,i.info(`Successfully resolved project ID: ${this.projectId}`),this.projectId}catch(t){throw Error(`Failed to resolve project ID: ${t instanceof Error?t.message:String(t)}`)}}static getExporter(t,e,r){let n=d?.endsWith("/")?`${d}otel/v1/traces`:`${d}/otel/v1/traces`;return v.builder().endpoint(n).apiKey(t).organizationId(e).projectId(r).build()}async getSpanExporter(){try{let t=await this.resolveProjectId();return this.createJudgmentSpanExporter(t)}catch(t){return i.error("Failed to resolve project "+this.configuration.projectName+", please create it first at https://app.judgmentlabs.ai/org/"+(this.configuration.organizationId||"unknown")+"/projects. Skipping Judgment export."),new O}}setSpanKind(t){let e=m.trace.getActiveSpan();if(!e){i.warn("No active span found, skipping setSpanKind");return}if(t!==null)e.setAttribute(u.AttributeKeys.JUDGMENT_SPAN_KIND,t)}setAttribute(t,e){let r=m.trace.getActiveSpan();if(!r){i.warn("No active span found, skipping setAttribute");return}r.setAttribute(t,this.serializer(e))}setLLMSpan(){this.setSpanKind("llm")}setToolSpan(){this.setSpanKind("tool")}setGeneralSpan(){this.setSpanKind("span")}setAttributes(t){if(!t)return;let e=m.trace.getActiveSpan();if(!e){i.warn("No active span found, skipping setAttributes");return}for(let[r,n]of Object.entries(t))e.setAttribute(r,this.serializer(n))}setInput(t){this.setAttribute(u.AttributeKeys.JUDGMENT_INPUT,t)}setOutput(t){this.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,t)}asyncEvaluate(t,e,r){if(!this._initialized){i.warn("Tracer not initialized, skipping asyncEvaluate");return}if(!this.configuration.enableEvaluation)return;let n=m.trace.getActiveSpan();if(!n){i.warn("No active span found, skipping asyncEvaluate");return}if(!n.isRecording()){i.warn("Active span is not recording, skipping asyncEvaluate");return}let s=n.spanContext(),a=s.traceId,o=s.spanId;i.info(`asyncEvaluate: project=${this.configuration.projectName}, traceId=${a}, spanId=${o}, scorer=${t.name}`);let c=this.createEvaluationRun(t,e,r,a,o);this.enqueueEvaluation(c)}asyncTraceEvaluate(t,e){if(!this._initialized){i.warn("Tracer not initialized, skipping asyncTraceEvaluate");return}if(!this.configuration.enableEvaluation)return;let r=m.trace.getActiveSpan();if(!r){i.warn("No active span found, skipping asyncTraceEvaluate");return}if(!r.isRecording()){i.warn("Active span is not recording, skipping asyncTraceEvaluate");return}let n=r.spanContext(),s=n.traceId,a=n.spanId;i.info(`asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${s}, spanId=${a}, scorer=${t.name}`);try{let o=this.createTraceEvaluationRun(t,e,s,a),c=this.serializer(o);r.setAttribute(u.AttributeKeys.PENDING_TRACE_EVAL,c)}catch(o){i.error(`Failed to serialize trace evaluation: ${o instanceof Error?o.message:String(o)}`)}}createTraceEvaluationRun(t,e,r,n){let s=`async_trace_evaluate_${n||Date.now()}`,a=e||I,o=t.getScorerConfig();return{project_name:this.configuration.projectName,eval_name:s,scorer:o,model:a,organization_id:this.configuration.organizationId,trace_id:r,trace_span_id:n}}createJudgmentSpanExporter(t){let e=this.configuration.apiUrl.endsWith("/")?`${this.configuration.apiUrl}otel/v1/traces`:`${this.configuration.apiUrl}/otel/v1/traces`;return v.builder().endpoint(e).apiKey(this.configuration.apiKey).organizationId(this.configuration.organizationId).projectId(t).build()}createEvaluationRun(t,e,r,n,s){let a=`async_evaluate_${s||Date.now()}`,o=r||I,c=t.getScorerConfig();return{project_name:this.configuration.projectName,eval_name:a,examples:[e],custom_scorers:[],judgment_scorers:[c],model:o,trace_id:n,trace_span_id:s}}async enqueueEvaluation(t){if(!this.apiClient){i.warn("API client not available, skipping evaluation enqueue");return}try{await this.apiClient.addToRunEvalQueueExamples(t),i.info(`Enqueuing evaluation run: ${t.eval_name}`)}catch(e){i.error(`Failed to enqueue evaluation run: ${e instanceof Error?e.message:String(e)}`)}}observe(t,e="span"){return(...r)=>{let n=m.trace.getActiveSpan();if(!n)return i.warn("No active span found, skipping observe"),t(...r);let s=t.name||"anonymous",a=m.trace.getTracer(this.configuration.tracerName);return m.context.with(m.trace.setSpan(m.context.active(),n),()=>{return a.startActiveSpan(s,{kind:m.SpanKind.INTERNAL},(o)=>{try{o.setAttribute(u.AttributeKeys.JUDGMENT_SPAN_KIND,e);let c=C(t);if(c.length===r.length){let f={};c.forEach((Y,_)=>{f[Y]=r[_]}),o.setAttribute(u.AttributeKeys.JUDGMENT_INPUT,this.serializer(f))}let l=t(...r);if(l instanceof Promise)return l.then((f)=>{return o.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(f)),o.end(),f}).catch((f)=>{throw o.recordException(f),o.end(),f});else return o.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(l)),o.end(),l}catch(c){throw o.recordException(c),o.end(),c}})})}}async shutdown(){}}var $="opentelemetry.instrumentation.judgeval";class R{projectName;apiKey;organizationId;apiUrl;enableEvaluation;tracerName;constructor(t,e,r,n,s,a=$){this.projectName=t;this.apiKey=e;this.organizationId=r;this.apiUrl=n;this.enableEvaluation=s;this.tracerName=a}static createDefault(t){return new D().projectName(t).build()}static builder(){return new D}}class D{_projectName;_apiKey=p;_organizationId=E;_apiUrl=d;_enableEvaluation=!0;_tracerName=$;projectName(t){return this._projectName=t,this}apiKey(t){return this._apiKey=t,this}organizationId(t){return this._organizationId=t,this}apiUrl(t){return this._apiUrl=t,this}enableEvaluation(t){return this._enableEvaluation=t,this}tracerName(t){return this._tracerName=t,this}build(){if(!this._projectName)throw Error("Project name is required");if(!this._apiKey)throw Error("API key is required");if(!this._organizationId)throw Error("Organization ID is required");if(!this._apiUrl)throw Error("API URL is required");return new R(this._projectName,this._apiKey,this._organizationId,this._apiUrl,this._enableEvaluation,this._tracerName)}}function Et(t){return{example_id:void 0,created_at:new Date().toISOString(),name:null,...t}}var H;((l)=>{l.INPUT="input";l.ACTUAL_OUTPUT="actual_output";l.EXPECTED_OUTPUT="expected_output";l.CONTEXT="context";l.RETRIEVAL_CONTEXT="retrieval_context";l.TOOLS_CALLED="tools_called";l.EXPECTED_TOOLS="expected_tools";l.ADDITIONAL_METADATA="additional_metadata"})(H||={});function J(){let t={score_type:"",class_name:"",name:"",addModel:(e)=>{t.model=e},successCheck:()=>{if(t.error!=null)return!1;if(t.score==null)return!1;let e=t.threshold??0.5,r=t.score;return e!=null&&r!=null&&r>=e},getRequiredParams:()=>{return[]},getScorerConfig:()=>{return{score_type:t.score_type,name:t.name,threshold:t.threshold??0.5,strict_mode:t.strict_mode??!1,required_params:[],kwargs:{}}}};if(t.class_name="BaseScorer",t.name=t.class_name,t.strict_mode===!0)t.threshold=1;return t}var j;((_)=>{_.PROMPT_SCORER="Prompt Scorer";_.TRACE_PROMPT_SCORER="Trace Prompt Scorer";_.FAITHFULNESS="Faithfulness";_.ANSWER_RELEVANCY="Answer Relevancy";_.ANSWER_CORRECTNESS="Answer Correctness";_.INSTRUCTION_ADHERENCE="Instruction Adherence";_.EXECUTION_ORDER="Execution Order";_.TOOL_ORDER="Tool Order";_.CLASSIFIER="Classifier";_.TOOL_DEPENDENCY="Tool Dependency";_.CUSTOM="Custom"})(j||={});function dt(t,e){let r=J();return r.scoreType=t,r.name=t,r.score_type=t,r.requiredParams=e,r.setThreshold=(n)=>{if(n<0||n>1)throw Error(`Threshold must be between 0 and 1, got: ${n}`);r.threshold=n},r.getScoreType=()=>{return r.scoreType},r.setRequiredParams=(n)=>{r.requiredParams=n},r}class N extends Error{statusCode;constructor(t,e){super(e);this.statusCode=t;this.name="JudgmentAPIError"}}async function x(t,e,r,n,s=p||"",a=E||"",o){if(!d||!s||!a)throw Error("Missing required API credentials");return(await new g(d,s,a).saveScorer({name:t,prompt:e,threshold:r,options:n,is_trace:o})).name}async function P(t,e=p||"",r=E||""){if(!d||!e||!r)throw Error("Missing required API credentials");let s=await new g(d,e,r).fetchScorers({names:[t]});if(s.scorers.length===0)throw new N(404,`Scorer with name ${t} not found`);let{created_at:a,updated_at:o,...c}=s.scorers[0];return c}async function y(t,e=p||"",r=E||""){if(!d||!e||!r)throw Error("Missing required API credentials");return(await new g(d,e,r).scorerExists({name:t})).exists}class b{scoreType;name;prompt;threshold;options;judgmentApiKey;organizationId;requiredParams;score_type;class_name;model;score;error;strict_mode;constructor(t,e,r,n,s,a,o=p||"",c=E||""){this.scoreType=t,this.name=e,this.prompt=r,this.threshold=n,this.requiredParams=s,this.options=a,this.judgmentApiKey=o,this.organizationId=c,this.score_type=t,this.class_name="BasePromptScorer",this.model=void 0,this.score=void 0,this.error=null,this.strict_mode=!1}score_breakdown;reason;using_native_model;success;model_client;additional_metadata;user;server_hosted;static async get(t,e=p||"",r=E||""){let n=await P(t,e,r),s=n.is_trace===!0,a=this.prototype.scoreType==="Trace Prompt Scorer";if(s!==a)throw new N(400,`Scorer with name ${t} is not a ${this.name}`);let o=s?"Trace Prompt Scorer":"Prompt Scorer";return new this(o,n.name,n.prompt,n.threshold,[],n.options,e,r)}static async create(t,e,r=0.5,n,s=p||"",a=E||""){if(await y(t,s,a))throw new N(400,`Scorer with name ${t} already exists. Either use the existing scorer with the get() method or use a new name.`);let o=this.prototype.scoreType==="Trace Prompt Scorer",c=o?"Trace Prompt Scorer":"Prompt Scorer";return await x(t,e,r,n,s,a,o),new this(c,t,e,r,[],n,s,a)}async updateThreshold(t){this.setThreshold(t),await this.pushPromptScorer()}async setPrompt(t){this.prompt=t,await this.pushPromptScorer()}async setOptions(t){this.options=t,await this.pushPromptScorer()}async appendToPrompt(t){this.prompt+=t,await this.pushPromptScorer()}getThreshold(){return this.threshold}getPrompt(){return this.prompt}getOptions(){return this.options?{...this.options}:null}getName(){return this.name}getConfig(){return{name:this.name,prompt:this.prompt,threshold:this.threshold,options:this.options}}async pushPromptScorer(){await x(this.name,this.prompt,this.threshold,this.options,this.judgmentApiKey,this.organizationId)}toString(){return`${this.constructor.name}(name=${this.name}, prompt=${this.prompt}, threshold=${this.threshold}, options=${JSON.stringify(this.options)})`}addModel(t){this.model=t}successCheck(){if(this.error!=null)return!1;if(this.score==null)return!1;let t=this.threshold??0.5,e=this.score;return t!=null&&e!=null&&e>=t}getRequiredParams(){if(Array.isArray(this.requiredParams))return[...this.requiredParams];return[]}setThreshold(t){if(t<0||t>1)throw Error(`Threshold must be between 0 and 1, got: ${t}`);this.threshold=t}getScoreType(){return this.scoreType}setRequiredParams(t){this.requiredParams=t}getScorerConfig(){return{score_type:this.getScoreType(),name:this.getName(),threshold:this.getThreshold(),strict_mode:this.strict_mode??!1,required_params:this.getRequiredParams(),kwargs:{prompt:this.getPrompt(),...this.getOptions()?{options:this.getOptions()}:{}}}}}class L extends b{constructor(t,e,r,n,s=[],a,o=p||"",c=E||""){super(t,e,r,n,s,a,o,c)}}class K extends b{constructor(t,e,r,n,s=[],a,o=p||"",c=E||""){super(t,e,r,n,s,a,o,c)}}var q=S("@opentelemetry/resources"),M=S("@opentelemetry/sdk-trace-web");var U="0.3.2";class w extends T{webTracerProvider;async initialize(t={}){if(this._initialized)return this;try{let e={[u.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[u.ResourceKeys.TELEMETRY_SDK_VERSION]:U,...t.resourceAttributes},r=await this.getSpanExporter();return this.webTracerProvider=new M.WebTracerProvider({resource:q.resourceFromAttributes(e),spanProcessors:[new M.BatchSpanProcessor(r)]}),this.webTracerProvider.register(),this._initialized=!0,this}catch(e){throw Error(`Failed to initialize browser tracer: ${e instanceof Error?e.message:String(e)}`)}}static getInstance(t){let e=`BrowserTracer:${t.projectName}`;if(!T.instances.has(e))T.instances.set(e,new w(t));return T.instances.get(e)}static createDefault(t){let e=R.builder().projectName(t).build();return w.getInstance(e)}static createWithConfiguration(t){return new w(t)}}var B=S("@opentelemetry/resources"),V=S("@opentelemetry/sdk-node"),W=S("@opentelemetry/sdk-trace-node");class A extends T{nodeSDK;async initialize(t={}){if(this._initialized)return this;try{let e={[u.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[u.ResourceKeys.TELEMETRY_SDK_VERSION]:U,...t.resourceAttributes},r=await this.getSpanExporter();return this.nodeSDK=new V.NodeSDK({resource:B.resourceFromAttributes(e),instrumentations:t.instrumentations,spanProcessor:new W.BatchSpanProcessor(r),...t}),this.nodeSDK.start(),this._initialized=!0,this}catch(e){throw Error(`Failed to initialize node tracer: ${e instanceof Error?e.message:String(e)}`)}}static getInstance(t){let e=`NodeTracer:${t.projectName}`;if(!T.instances.has(e))T.instances.set(e,new A(t));return T.instances.get(e)}static createDefault(t){let e=R.builder().projectName(t).enableEvaluation(!0).build();return A.getInstance(e)}static createWithConfiguration(t){return new A(t)}async shutdown(){if(this.nodeSDK)await this.nodeSDK.shutdown()}}})();
1
+ (()=>{var{defineProperty:M,getOwnPropertyNames:Y,getOwnPropertyDescriptor:X}=Object,Q=Object.prototype.hasOwnProperty;var K=new WeakMap,Z=(t)=>{var e=K.get(t),r;if(e)return e;if(e=M({},"__esModule",{value:!0}),t&&typeof t==="object"||typeof t==="function")Y(t).map((i)=>!Q.call(e,i)&&M(e,i,{get:()=>t[i],enumerable:!(r=X(t,i))||r.enumerable}));return K.set(t,e),e};var tt=(t,e)=>{for(var r in e)M(t,r,{get:e[r],enumerable:!0,configurable:!0,set:(i)=>e[r]=()=>i})};var g=((t)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var dt={};tt(dt,{scorerExists:()=>P,pushPromptScorer:()=>b,parseFunctionArgs:()=>G,fetchPromptScorer:()=>w,createExample:()=>pt,createBaseScorer:()=>$,createAPIScorer:()=>Et,TracerConfigurationBuilder:()=>I,TracerConfiguration:()=>h,Tracer:()=>m,TracePromptScorer:()=>L,PromptScorer:()=>j,OpenTelemetryKeys:()=>u,NodeTracer:()=>O,NoOpSpanExporter:()=>A,Logger:()=>n,JudgmentSpanExporter:()=>N,JudgmentApiClient:()=>T,JudgmentAPIError:()=>f,JUDGMENT_ORG_ID:()=>p,JUDGMENT_NO_COLOR:()=>it,JUDGMENT_ENABLE_MONITORING:()=>et,JUDGMENT_ENABLE_EVALUATIONS:()=>rt,JUDGMENT_DEFAULT_GPT_MODEL:()=>y,JUDGMENT_API_URL:()=>E,JUDGMENT_API_KEY:()=>l,ExampleParams:()=>F,BrowserTracer:()=>x,BasePromptScorer:()=>R,APIScorerType:()=>J});var k=g("@opentelemetry/exporter-trace-otlp-http");class N{delegate;constructor(t,e,r,i){if(!i||i.trim()==="")throw Error("projectId is required for JudgmentSpanExporter");this.delegate=new k.OTLPTraceExporter({url:t,headers:{Authorization:`Bearer ${e}`,"X-Organization-Id":r,"X-Project-Id":i}})}static builder(){return new z}export(t,e){this.delegate.export(t,e)}shutdown(){return this.delegate.shutdown()}forceFlush(){return this.delegate.forceFlush?.()??Promise.resolve()}}class z{_endpoint;_apiKey;_organizationId;_projectId;constructor(){}endpoint(t){return this._endpoint=t,this}apiKey(t){return this._apiKey=t,this}organizationId(t){return this._organizationId=t,this}projectId(t){return this._projectId=t,this}build(){if(!this._endpoint||this._endpoint.trim()==="")throw Error("Endpoint is required");if(!this._apiKey||this._apiKey.trim()==="")throw Error("API key is required");if(!this._organizationId||this._organizationId.trim()==="")throw Error("Organization ID is required");if(!this._projectId||this._projectId.trim()==="")throw Error("Project ID is required");return new N(this._endpoint,this._apiKey,this._organizationId,this._projectId)}}class A{export(t,e){e({code:0})}flush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}class u{static AttributeKeys={JUDGMENT_SPAN_KIND:"judgment.span_kind",JUDGMENT_INPUT:"judgment.input",JUDGMENT_OUTPUT:"judgment.output",JUDGMENT_OFFLINE_MODE:"judgment.offline_mode",JUDGMENT_UPDATE_ID:"judgment.update_id",JUDGMENT_CUSTOMER_ID:"judgment.customer_id",JUDGMENT_AGENT_ID:"judgment.agent_id",JUDGMENT_PARENT_AGENT_ID:"judgment.parent_agent_id",JUDGMENT_AGENT_CLASS_NAME:"judgment.agent_class_name",JUDGMENT_AGENT_INSTANCE_NAME:"judgment.agent_instance_name",PENDING_TRACE_EVAL:"judgment.pending_trace_eval",GEN_AI_PROMPT:"gen_ai.prompt",GEN_AI_COMPLETION:"gen_ai.completion",GEN_AI_REQUEST_MODEL:"gen_ai.request.model",GEN_AI_RESPONSE_MODEL:"gen_ai.response.model",GEN_AI_SYSTEM:"gen_ai.system",GEN_AI_USAGE_INPUT_TOKENS:"gen_ai.usage.input_tokens",GEN_AI_USAGE_OUTPUT_TOKENS:"gen_ai.usage.output_tokens",GEN_AI_USAGE_COMPLETION_TOKENS:"gen_ai.usage.completion_tokens",GEN_AI_REQUEST_TEMPERATURE:"gen_ai.request.temperature",GEN_AI_REQUEST_MAX_TOKENS:"gen_ai.request.max_tokens",GEN_AI_RESPONSE_FINISH_REASONS:"gen_ai.response.finish_reasons",GEN_AI_USAGE_TOTAL_COST:"gen_ai.usage.total_cost_usd"};static InternalAttributeKeys={DISABLE_PARTIAL_EMIT:"disable_partial_emit",CANCELLED:"cancelled"};static ResourceKeys={SERVICE_NAME:"service.name",TELEMETRY_SDK_LANGUAGE:"telemetry.sdk.language",TELEMETRY_SDK_NAME:"telemetry.sdk.name",TELEMETRY_SDK_VERSION:"telemetry.sdk.version",JUDGMENT_PROJECT_ID:"judgment.project_id"}}var v=g("@opentelemetry/api");function S(t,e){let r=process.env[t];if(!r)return e??null;return r}var l=S("JUDGMENT_API_KEY"),p=S("JUDGMENT_ORG_ID"),E=S("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),y=S("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),et=S("JUDGMENT_ENABLE_MONITORING","true"),rt=S("JUDGMENT_ENABLE_EVALUATIONS","true"),it=S("JUDGMENT_NO_COLOR");class T{baseUrl;apiKey;organizationId;constructor(t,e,r){this.baseUrl=t,this.apiKey=e,this.organizationId=r}buildUrl(t){return this.baseUrl+t}buildHeaders(){if(!this.apiKey||!this.organizationId)throw Error("API key and organization ID cannot be null");return{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId}}async addToRunEvalQueueExamples(t){let e=this.buildUrl("/add_to_run_eval_queue/examples"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async addToRunEvalQueueTraces(t){let e=this.buildUrl("/add_to_run_eval_queue/traces"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async logEvalResults(t){let e=this.buildUrl("/log_eval_results/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async fetchExperimentRun(t){let e=this.buildUrl("/fetch_experiment_run/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async getEvaluationStatus(t,e){let r=new URLSearchParams;r.set("experiment_run_id",t),r.set("project_name",e);let i=this.buildUrl("/get_evaluation_status/"+(r.toString()?"?"+r.toString():"")),s=await fetch(i,{method:"GET",headers:this.buildHeaders()});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return}async scorerExists(t){let e=this.buildUrl("/scorer_exists/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async saveScorer(t){let e=this.buildUrl("/save_scorer/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchScorers(t){let e=this.buildUrl("/fetch_scorers/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async projectsResolve(t){let e=this.buildUrl("/projects/resolve/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}}var nt=/^([^(]+?)=>/,st=/^[^(]*\(\s*([^)]*)\)/m,ot=/,/,at=/^\s*(_?)(\S+?)\1\s*$/,ct=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function ut(t){return Function.prototype.toString.call(t)}function lt(t){let e=ut(t).replace(ct,"");return e.match(nt)||e.match(st)}function G(t){let e=lt(t);if(!e||!e[1])return[];return e[1].split(ot).map((r)=>{return r.replace(at,(s,a,o)=>o).trim()}).filter((r)=>r.length>0)}class n{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=n.Level.INFO;static useColor=!0;static initialize(){if(!n.initialized){let t=process.env.JUDGMENT_NO_COLOR;n.useColor=!t&&process.stdout.isTTY,n.initialized=!0}}static setLevel(t){n.currentLevel=t}static setUseColor(t){n.useColor=t}static log(t,e){if(n.initialize(),t<n.currentLevel)return;let r=new Date().toISOString().replace("T"," ").substring(0,19),i=Object.keys(n.Level).find((o)=>n.Level[o]===t)||"UNKNOWN",s=`${r} - judgeval - ${i} - ${e}`;if(n.useColor)s=`${t===n.Level.DEBUG||t===n.Level.INFO?n.GRAY:t===n.Level.WARNING?n.YELLOW:n.RED}${s}${n.RESET}`;(t>=n.Level.ERROR?process.stderr:process.stdout).write(s+`
2
+ `)}static debug(t){n.log(n.Level.DEBUG,t)}static info(t){n.log(n.Level.INFO,t)}static warning(t){n.log(n.Level.WARNING,t)}static warn(t){n.log(n.Level.WARNING,t)}static error(t){n.log(n.Level.ERROR,t)}static critical(t){n.log(n.Level.CRITICAL,t)}}class m{static instances=new Map;apiClient;tracer;serializer=JSON.stringify;_initialized=!1;projectId=null;configuration;getConfiguration(){return this.configuration}getProjectId(){return this.projectId}getSerializer(){return this.serializer}constructor(t){this.configuration=t,this.tracer=v.trace.getTracer(this.configuration.tracerName),this.apiClient=new T(this.configuration.apiUrl,this.configuration.apiKey,this.configuration.organizationId),this._initialized=!1}async resolveProjectId(){try{n.info(`Resolving project ID for project: ${this.configuration.projectName}`);let t=await this.apiClient.projectsResolve({project_name:this.configuration.projectName});n.info(`Resolved project ID: ${t.project_id}`);let e=t.project_id?.toString();if(!e)throw Error(`Project ID not found for project: ${this.configuration.projectName}`);return this.projectId=e,n.info(`Successfully resolved project ID: ${this.projectId}`),this.projectId}catch(t){throw Error(`Failed to resolve project ID: ${t instanceof Error?t.message:String(t)}`)}}static getExporter(t,e,r){let i=E?.endsWith("/")?`${E}otel/v1/traces`:`${E}/otel/v1/traces`;return N.builder().endpoint(i).apiKey(t).organizationId(e).projectId(r).build()}async getSpanExporter(){try{let t=await this.resolveProjectId();return this.createJudgmentSpanExporter(t)}catch(t){return n.error("Failed to resolve project "+this.configuration.projectName+", please create it first at https://app.judgmentlabs.ai/org/"+(this.configuration.organizationId||"unknown")+"/projects. Skipping Judgment export."),new A}}setSpanKind(t){let e=v.trace.getActiveSpan();if(!e){n.warn("No active span found, skipping setSpanKind");return}if(t!==null)e.setAttribute(u.AttributeKeys.JUDGMENT_SPAN_KIND,t)}setAttribute(t,e){let r=v.trace.getActiveSpan();if(!r){n.warn("No active span found, skipping setAttribute");return}r.setAttribute(t,this.serializer(e))}setLLMSpan(){this.setSpanKind("llm")}setToolSpan(){this.setSpanKind("tool")}setGeneralSpan(){this.setSpanKind("span")}setAttributes(t){if(!t)return;let e=v.trace.getActiveSpan();if(!e){n.warn("No active span found, skipping setAttributes");return}for(let[r,i]of Object.entries(t))e.setAttribute(r,this.serializer(i))}setInput(t){this.setAttribute(u.AttributeKeys.JUDGMENT_INPUT,t)}setOutput(t){this.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,t)}asyncEvaluate(t,e,r){if(!this._initialized){n.warn("Tracer not initialized, skipping asyncEvaluate");return}if(!this.configuration.enableEvaluation)return;let i=v.trace.getActiveSpan();if(!i){n.warn("No active span found, skipping asyncEvaluate");return}if(!i.isRecording()){n.warn("Active span is not recording, skipping asyncEvaluate");return}let s=i.spanContext(),a=s.traceId,o=s.spanId;n.info(`asyncEvaluate: project=${this.configuration.projectName}, traceId=${a}, spanId=${o}, scorer=${t.name}`);let c=this.createEvaluationRun(t,e,r,a,o);this.enqueueEvaluation(c)}asyncTraceEvaluate(t,e){if(!this._initialized){n.warn("Tracer not initialized, skipping asyncTraceEvaluate");return}if(!this.configuration.enableEvaluation)return;let r=v.trace.getActiveSpan();if(!r){n.warn("No active span found, skipping asyncTraceEvaluate");return}if(!r.isRecording()){n.warn("Active span is not recording, skipping asyncTraceEvaluate");return}let i=r.spanContext(),s=i.traceId,a=i.spanId;n.info(`asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${s}, spanId=${a}, scorer=${t.name}`);try{let o=this.createTraceEvaluationRun(t,e,s,a),c=this.serializer(o);r.setAttribute(u.AttributeKeys.PENDING_TRACE_EVAL,c)}catch(o){n.error(`Failed to serialize trace evaluation: ${o instanceof Error?o.message:String(o)}`)}}createTraceEvaluationRun(t,e,r,i){let s=`async_trace_evaluate_${i||Date.now()}`,a=e||y,o=t.getScorerConfig();return{project_name:this.configuration.projectName,eval_name:s,scorer:o,model:a,organization_id:this.configuration.organizationId,trace_id:r,trace_span_id:i}}createJudgmentSpanExporter(t){let e=this.configuration.apiUrl.endsWith("/")?`${this.configuration.apiUrl}otel/v1/traces`:`${this.configuration.apiUrl}/otel/v1/traces`;return N.builder().endpoint(e).apiKey(this.configuration.apiKey).organizationId(this.configuration.organizationId).projectId(t).build()}createEvaluationRun(t,e,r,i,s){let a=`async_evaluate_${s||Date.now()}`,o=r||y,c=t.getScorerConfig();return{project_name:this.configuration.projectName,eval_name:a,examples:[e],custom_scorers:[],judgment_scorers:[c],model:o,trace_id:i,trace_span_id:s}}async enqueueEvaluation(t){if(!this.apiClient){n.warn("API client not available, skipping evaluation enqueue");return}try{await this.apiClient.addToRunEvalQueueExamples(t),n.info(`Enqueuing evaluation run: ${t.eval_name}`)}catch(e){n.error(`Failed to enqueue evaluation run: ${e instanceof Error?e.message:String(e)}`)}}observe(t,e="span"){return(...r)=>{let i=t.name||"anonymous";return this.tracer.startActiveSpan(i,(s)=>{try{s.setAttribute(u.AttributeKeys.JUDGMENT_SPAN_KIND,e);let a=G(t);if(a.length===r.length){let c={};a.forEach((d,W)=>{c[d]=r[W]}),s.setAttribute(u.AttributeKeys.JUDGMENT_INPUT,this.serializer(c))}let o=t(...r);if(o instanceof Promise)return o.then((c)=>{return s.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(c)),s.end(),c}).catch((c)=>{throw s.recordException(c),s.end(),c});else return s.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(o)),s.end(),o}catch(a){throw s.recordException(a),s.end(),a}})}}async shutdown(){}}var C="opentelemetry.instrumentation.judgeval";class h{projectName;apiKey;organizationId;apiUrl;enableEvaluation;tracerName;constructor(t,e,r,i,s,a=C){this.projectName=t;this.apiKey=e;this.organizationId=r;this.apiUrl=i;this.enableEvaluation=s;this.tracerName=a}static createDefault(t){return new I().projectName(t).build()}static builder(){return new I}}class I{_projectName;_apiKey=l;_organizationId=p;_apiUrl=E;_enableEvaluation=!0;_tracerName=C;projectName(t){return this._projectName=t,this}apiKey(t){return this._apiKey=t,this}organizationId(t){return this._organizationId=t,this}apiUrl(t){return this._apiUrl=t,this}enableEvaluation(t){return this._enableEvaluation=t,this}tracerName(t){return this._tracerName=t,this}build(){if(!this._projectName)throw Error("Project name is required");if(!this._apiKey)throw Error("API key is required");if(!this._organizationId)throw Error("Organization ID is required");if(!this._apiUrl)throw Error("API URL is required");return new h(this._projectName,this._apiKey,this._organizationId,this._apiUrl,this._enableEvaluation,this._tracerName)}}function pt(t){return{example_id:void 0,created_at:new Date().toISOString(),name:null,...t}}var F;((d)=>{d.INPUT="input";d.ACTUAL_OUTPUT="actual_output";d.EXPECTED_OUTPUT="expected_output";d.CONTEXT="context";d.RETRIEVAL_CONTEXT="retrieval_context";d.TOOLS_CALLED="tools_called";d.EXPECTED_TOOLS="expected_tools";d.ADDITIONAL_METADATA="additional_metadata"})(F||={});function $(){let t={score_type:"",class_name:"",name:"",addModel:(e)=>{t.model=e},successCheck:()=>{if(t.error!=null)return!1;if(t.score==null)return!1;let e=t.threshold??0.5,r=t.score;return e!=null&&r!=null&&r>=e},getRequiredParams:()=>{return[]},getScorerConfig:()=>{return{score_type:t.score_type,name:t.name,threshold:t.threshold??0.5,strict_mode:t.strict_mode??!1,required_params:[],kwargs:{}}}};if(t.class_name="BaseScorer",t.name=t.class_name,t.strict_mode===!0)t.threshold=1;return t}var J;((_)=>{_.PROMPT_SCORER="Prompt Scorer";_.TRACE_PROMPT_SCORER="Trace Prompt Scorer";_.FAITHFULNESS="Faithfulness";_.ANSWER_RELEVANCY="Answer Relevancy";_.ANSWER_CORRECTNESS="Answer Correctness";_.INSTRUCTION_ADHERENCE="Instruction Adherence";_.EXECUTION_ORDER="Execution Order";_.TOOL_ORDER="Tool Order";_.CLASSIFIER="Classifier";_.TOOL_DEPENDENCY="Tool Dependency";_.CUSTOM="Custom"})(J||={});function Et(t,e){let r=$();return r.scoreType=t,r.name=t,r.score_type=t,r.requiredParams=e,r.setThreshold=(i)=>{if(i<0||i>1)throw Error(`Threshold must be between 0 and 1, got: ${i}`);r.threshold=i},r.getScoreType=()=>{return r.scoreType},r.setRequiredParams=(i)=>{r.requiredParams=i},r}class f extends Error{statusCode;constructor(t,e){super(e);this.statusCode=t;this.name="JudgmentAPIError"}}async function b(t,e,r,i,s=l||"",a=p||"",o){if(!E||!s||!a)throw Error("Missing required API credentials");return(await new T(E,s,a).saveScorer({name:t,prompt:e,threshold:r,options:i,is_trace:o})).name}async function w(t,e=l||"",r=p||""){if(!E||!e||!r)throw Error("Missing required API credentials");let s=await new T(E,e,r).fetchScorers({names:[t]});if(s.scorers.length===0)throw new f(404,`Scorer with name ${t} not found`);let{created_at:a,updated_at:o,...c}=s.scorers[0];return c}async function P(t,e=l||"",r=p||""){if(!E||!e||!r)throw Error("Missing required API credentials");return(await new T(E,e,r).scorerExists({name:t})).exists}class R{scoreType;name;prompt;threshold;options;judgmentApiKey;organizationId;requiredParams;score_type;class_name;model;score;error;strict_mode;constructor(t,e,r,i,s,a,o=l||"",c=p||""){this.scoreType=t,this.name=e,this.prompt=r,this.threshold=i,this.requiredParams=s,this.options=a,this.judgmentApiKey=o,this.organizationId=c,this.score_type=t,this.class_name="BasePromptScorer",this.model=void 0,this.score=void 0,this.error=null,this.strict_mode=!1}score_breakdown;reason;using_native_model;success;model_client;additional_metadata;user;server_hosted;static async get(t,e=l||"",r=p||""){let i=await w(t,e,r),s=i.is_trace===!0,a=this.prototype.scoreType==="Trace Prompt Scorer";if(s!==a)throw new f(400,`Scorer with name ${t} is not a ${this.name}`);let o=s?"Trace Prompt Scorer":"Prompt Scorer";return new this(o,i.name,i.prompt,i.threshold,[],i.options,e,r)}static async create(t,e,r=0.5,i,s=l||"",a=p||""){if(await P(t,s,a))throw new f(400,`Scorer with name ${t} already exists. Either use the existing scorer with the get() method or use a new name.`);let o=this.prototype.scoreType==="Trace Prompt Scorer",c=o?"Trace Prompt Scorer":"Prompt Scorer";return await b(t,e,r,i,s,a,o),new this(c,t,e,r,[],i,s,a)}async updateThreshold(t){this.setThreshold(t),await this.pushPromptScorer()}async setPrompt(t){this.prompt=t,await this.pushPromptScorer()}async setOptions(t){this.options=t,await this.pushPromptScorer()}async appendToPrompt(t){this.prompt+=t,await this.pushPromptScorer()}getThreshold(){return this.threshold}getPrompt(){return this.prompt}getOptions(){return this.options?{...this.options}:null}getName(){return this.name}getConfig(){return{name:this.name,prompt:this.prompt,threshold:this.threshold,options:this.options}}async pushPromptScorer(){await b(this.name,this.prompt,this.threshold,this.options,this.judgmentApiKey,this.organizationId)}toString(){return`${this.constructor.name}(name=${this.name}, prompt=${this.prompt}, threshold=${this.threshold}, options=${JSON.stringify(this.options)})`}addModel(t){this.model=t}successCheck(){if(this.error!=null)return!1;if(this.score==null)return!1;let t=this.threshold??0.5,e=this.score;return t!=null&&e!=null&&e>=t}getRequiredParams(){if(Array.isArray(this.requiredParams))return[...this.requiredParams];return[]}setThreshold(t){if(t<0||t>1)throw Error(`Threshold must be between 0 and 1, got: ${t}`);this.threshold=t}getScoreType(){return this.scoreType}setRequiredParams(t){this.requiredParams=t}getScorerConfig(){return{score_type:this.getScoreType(),name:this.getName(),threshold:this.getThreshold(),strict_mode:this.strict_mode??!1,required_params:this.getRequiredParams(),kwargs:{prompt:this.getPrompt(),...this.getOptions()?{options:this.getOptions()}:{}}}}}class j extends R{constructor(t,e,r,i,s=[],a,o=l||"",c=p||""){super(t,e,r,i,s,a,o,c)}}class L extends R{constructor(t,e,r,i,s=[],a,o=l||"",c=p||""){super(t,e,r,i,s,a,o,c)}}var H=g("@opentelemetry/resources"),U=g("@opentelemetry/sdk-trace-web");var D="0.3.3";class x extends m{webTracerProvider;async initialize(t={}){if(this._initialized)return this;try{let e={[u.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[u.ResourceKeys.TELEMETRY_SDK_VERSION]:D,...t.resourceAttributes},r=await this.getSpanExporter();return this.webTracerProvider=new U.WebTracerProvider({resource:H.resourceFromAttributes(e),spanProcessors:[new U.BatchSpanProcessor(r)]}),this.webTracerProvider.register(),this._initialized=!0,this}catch(e){throw Error(`Failed to initialize browser tracer: ${e instanceof Error?e.message:String(e)}`)}}static getInstance(t){let e=`BrowserTracer:${t.projectName}`;if(!m.instances.has(e))m.instances.set(e,new x(t));return m.instances.get(e)}static createDefault(t){let e=h.builder().projectName(t).build();return x.getInstance(e)}static createWithConfiguration(t){return new x(t)}}var q=g("@opentelemetry/resources"),B=g("@opentelemetry/sdk-node"),V=g("@opentelemetry/sdk-trace-node");class O extends m{nodeSDK;async initialize(t={}){if(this._initialized)return this;try{let e={[u.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[u.ResourceKeys.TELEMETRY_SDK_VERSION]:D,...t.resourceAttributes},r=await this.getSpanExporter();return this.nodeSDK=new B.NodeSDK({resource:q.resourceFromAttributes(e),instrumentations:t.instrumentations,spanProcessor:new V.BatchSpanProcessor(r),...t}),this.nodeSDK.start(),this._initialized=!0,this}catch(e){throw Error(`Failed to initialize node tracer: ${e instanceof Error?e.message:String(e)}`)}}static getInstance(t){let e=`NodeTracer:${t.projectName}`;if(!m.instances.has(e))m.instances.set(e,new O(t));return m.instances.get(e)}static createDefault(t){let e=h.builder().projectName(t).enableEvaluation(!0).build();return O.getInstance(e)}static createWithConfiguration(t){return new O(t)}async shutdown(){if(this.nodeSDK)await this.nodeSDK.shutdown()}}})();
3
3
 
4
- //# debugId=B7CCA58D2A18793064756E2164756E21
4
+ //# debugId=B0A57EE31830E82264756E2164756E21
5
5
  //# sourceMappingURL=index.umd.js.map
@@ -5,7 +5,7 @@
5
5
  "import { ExportResult } from \"@opentelemetry/core\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\n\n/**\n * SpanExporter implementation that sends spans to Judgment Labs with project identification.\n *\n * This exporter wraps the OTLP HTTP exporter and adds Judgment Labs specific headers and project\n * identification to all exported spans.\n */\nexport class JudgmentSpanExporter implements SpanExporter {\n private readonly delegate: SpanExporter;\n\n /**\n * Creates a new JudgmentSpanExporter with the specified configuration.\n *\n * @param endpoint the OTLP endpoint URL\n * @param apiKey the API key for authentication\n * @param organizationId the organization ID\n * @param projectId the project ID (must not be null or empty)\n * @throws Error if projectId is null or empty\n */\n constructor(\n endpoint: string,\n apiKey: string,\n organizationId: string,\n projectId: string,\n ) {\n if (!projectId || projectId.trim() === \"\") {\n throw new Error(\"projectId is required for JudgmentSpanExporter\");\n }\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 /**\n * Creates a new builder for constructing JudgmentSpanExporter instances.\n */\n public static builder(): JudgmentSpanExporterBuilder {\n return new JudgmentSpanExporterBuilder();\n }\n\n /**\n * Exports a collection of spans.\n */\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n this.delegate.export(spans, resultCallback);\n }\n\n /**\n * Shuts down the exporter.\n */\n shutdown(): Promise<void> {\n return this.delegate.shutdown();\n }\n\n /**\n * Forces the exporter to flush any pending spans.\n */\n forceFlush(): Promise<void> {\n return this.delegate.forceFlush?.() ?? Promise.resolve();\n }\n}\n\n/**\n * Builder for creating JudgmentSpanExporter instances.\n */\nexport class JudgmentSpanExporterBuilder {\n private _endpoint?: string;\n private _apiKey?: string;\n private _organizationId?: string;\n private _projectId?: string;\n\n constructor() {}\n\n /**\n * Sets the OTLP endpoint URL.\n *\n * @param endpoint the endpoint URL\n * @return this builder for method chaining\n */\n public endpoint(endpoint: string): this {\n this._endpoint = endpoint;\n return this;\n }\n\n /**\n * Sets the API key for authentication.\n *\n * @param apiKey the API key\n * @return this builder for method chaining\n */\n public apiKey(apiKey: string): this {\n this._apiKey = apiKey;\n return this;\n }\n\n /**\n * Sets the organization ID.\n *\n * @param organizationId the organization ID\n * @return this builder for method chaining\n */\n public organizationId(organizationId: string): this {\n this._organizationId = organizationId;\n return this;\n }\n\n /**\n * Sets the project ID.\n *\n * @param projectId the project ID\n * @return this builder for method chaining\n */\n public projectId(projectId: string): this {\n this._projectId = projectId;\n return this;\n }\n\n /**\n * Builds a new JudgmentSpanExporter with the current configuration.\n *\n * @return a new JudgmentSpanExporter instance\n * @throws Error if required fields are missing\n */\n public build(): JudgmentSpanExporter {\n if (!this._endpoint || this._endpoint.trim() === \"\") {\n throw new Error(\"Endpoint is required\");\n }\n if (!this._apiKey || this._apiKey.trim() === \"\") {\n throw new Error(\"API key is required\");\n }\n if (!this._organizationId || this._organizationId.trim() === \"\") {\n throw new Error(\"Organization ID is required\");\n }\n if (!this._projectId || this._projectId.trim() === \"\") {\n throw new Error(\"Project ID is required\");\n }\n\n return new JudgmentSpanExporter(\n this._endpoint,\n this._apiKey,\n this._organizationId,\n this._projectId,\n );\n }\n}\n",
6
6
  "import { ExportResult } from \"@opentelemetry/core\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\n\n/**\n * A no-op span exporter that does nothing.\n * Used when project resolution fails or tracing is disabled.\n */\nexport class NoOpSpanExporter implements SpanExporter {\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n resultCallback({ code: 0 });\n }\n\n flush(): Promise<void> {\n return Promise.resolve();\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n}\n",
7
7
  "export abstract class OpenTelemetryKeys {\n public static readonly AttributeKeys = {\n JUDGMENT_SPAN_KIND: \"judgment.span_kind\",\n JUDGMENT_INPUT: \"judgment.input\",\n JUDGMENT_OUTPUT: \"judgment.output\",\n JUDGMENT_OFFLINE_MODE: \"judgment.offline_mode\",\n JUDGMENT_UPDATE_ID: \"judgment.update_id\",\n\n JUDGMENT_CUSTOMER_ID: \"judgment.customer_id\",\n\n JUDGMENT_AGENT_ID: \"judgment.agent_id\",\n\n JUDGMENT_PARENT_AGENT_ID: \"judgment.parent_agent_id\",\n JUDGMENT_AGENT_CLASS_NAME: \"judgment.agent_class_name\",\n JUDGMENT_AGENT_INSTANCE_NAME: \"judgment.agent_instance_name\",\n\n PENDING_TRACE_EVAL: \"judgment.pending_trace_eval\",\n\n GEN_AI_PROMPT: \"gen_ai.prompt\",\n GEN_AI_COMPLETION: \"gen_ai.completion\",\n GEN_AI_REQUEST_MODEL: \"gen_ai.request.model\",\n GEN_AI_RESPONSE_MODEL: \"gen_ai.response.model\",\n GEN_AI_SYSTEM: \"gen_ai.system\",\n GEN_AI_USAGE_INPUT_TOKENS: \"gen_ai.usage.input_tokens\",\n GEN_AI_USAGE_OUTPUT_TOKENS: \"gen_ai.usage.output_tokens\",\n GEN_AI_USAGE_COMPLETION_TOKENS: \"gen_ai.usage.completion_tokens\",\n GEN_AI_REQUEST_TEMPERATURE: \"gen_ai.request.temperature\",\n GEN_AI_REQUEST_MAX_TOKENS: \"gen_ai.request.max_tokens\",\n GEN_AI_RESPONSE_FINISH_REASONS: \"gen_ai.response.finish_reasons\",\n\n GEN_AI_USAGE_TOTAL_COST: \"gen_ai.usage.total_cost_usd\",\n } as const;\n\n public static readonly InternalAttributeKeys = {\n DISABLE_PARTIAL_EMIT: \"disable_partial_emit\",\n CANCELLED: \"cancelled\",\n } as const;\n\n public static readonly ResourceKeys = {\n SERVICE_NAME: \"service.name\",\n TELEMETRY_SDK_LANGUAGE: \"telemetry.sdk.language\",\n TELEMETRY_SDK_NAME: \"telemetry.sdk.name\",\n TELEMETRY_SDK_VERSION: \"telemetry.sdk.version\",\n JUDGMENT_PROJECT_ID: \"judgment.project_id\",\n } as const;\n}\n",
8
- "import {\n context,\n SpanKind as OpenTelemetrySpanKind,\n trace,\n} from \"@opentelemetry/api\";\nimport { JUDGMENT_API_URL, JUDGMENT_DEFAULT_GPT_MODEL } from \"../env\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport {\n ExampleEvaluationRun,\n Example as ExampleModel,\n} from \"../internal/api/models\";\nimport { BaseScorer } from \"../scorers/base-scorer\";\nimport { parseFunctionArgs } from \"../utils/annotate\";\nimport { Logger } from \"../utils/logger\";\nimport { JudgmentSpanExporter, NoOpSpanExporter } from \"./exporters\";\nimport { OpenTelemetryKeys } from \"./OpenTelemetryKeys\";\nimport { TracerConfiguration } from \"./TracerConfiguration\";\n\nexport type Serializer = (obj: unknown) => string;\ntype SpanKind = (\"llm\" | \"tool\" | \"span\") & {};\n\nexport type TracerInitializeOptions = {\n resourceAttributes?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nexport abstract class Tracer {\n protected static instances: Map<string, Tracer> = new Map();\n\n public apiClient: JudgmentApiClient;\n public tracer: unknown = null;\n public serializer: Serializer = JSON.stringify;\n\n protected _initialized: boolean = false;\n\n private projectId: string | null = null;\n protected configuration: TracerConfiguration;\n\n public getConfiguration(): TracerConfiguration {\n return this.configuration;\n }\n\n public getProjectId(): string | null {\n return this.projectId;\n }\n\n public getSerializer(): Serializer {\n return this.serializer;\n }\n\n public constructor(configuration: TracerConfiguration) {\n this.configuration = configuration;\n\n this.apiClient = new JudgmentApiClient(\n this.configuration.apiUrl,\n this.configuration.apiKey,\n this.configuration.organizationId,\n );\n\n this._initialized = false;\n }\n\n public abstract initialize(options: TracerInitializeOptions): Promise<Tracer>;\n\n private async resolveProjectId(): Promise<string> {\n try {\n Logger.info(\n `Resolving project ID for project: ${this.configuration.projectName}`,\n );\n\n const response = await this.apiClient.projectsResolve({\n project_name: this.configuration.projectName,\n });\n Logger.info(`Resolved project ID: ${response.project_id}`);\n const resolvedProjectId = response.project_id?.toString();\n\n if (!resolvedProjectId) {\n throw new Error(\n `Project ID not found for project: ${this.configuration.projectName}`,\n );\n }\n\n this.projectId = resolvedProjectId;\n Logger.info(`Successfully resolved project ID: ${this.projectId}`);\n\n return this.projectId;\n } catch (error) {\n throw new Error(\n `Failed to resolve project ID: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public static getExporter(\n apiKey: string,\n organizationId: string,\n projectId: string,\n ): JudgmentSpanExporter {\n const endpoint = JUDGMENT_API_URL?.endsWith(\"/\")\n ? `${JUDGMENT_API_URL}otel/v1/traces`\n : `${JUDGMENT_API_URL}/otel/v1/traces`;\n\n return JudgmentSpanExporter.builder()\n .endpoint(endpoint)\n .apiKey(apiKey)\n .organizationId(organizationId)\n .projectId(projectId)\n .build();\n }\n\n public async getSpanExporter(): Promise<\n JudgmentSpanExporter | NoOpSpanExporter\n > {\n try {\n const projectId = await this.resolveProjectId();\n return this.createJudgmentSpanExporter(projectId);\n } catch (error) {\n Logger.error(\n \"Failed to resolve project \" +\n this.configuration.projectName +\n \", please create it first at https://app.judgmentlabs.ai/org/\" +\n (this.configuration.organizationId || \"unknown\") +\n \"/projects. Skipping Judgment export.\",\n );\n return new NoOpSpanExporter();\n }\n }\n\n public setSpanKind(kind: SpanKind): void {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setSpanKind\");\n return;\n }\n if (kind !== null) {\n currentSpan.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_SPAN_KIND,\n kind,\n );\n }\n }\n\n public setAttribute(key: string, value: unknown): void {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setAttribute\");\n return;\n }\n currentSpan.setAttribute(key, this.serializer(value));\n }\n\n public setLLMSpan(): void {\n this.setSpanKind(\"llm\");\n }\n\n public setToolSpan(): void {\n this.setSpanKind(\"tool\");\n }\n\n public setGeneralSpan(): void {\n this.setSpanKind(\"span\");\n }\n\n public setAttributes(attributes: Record<string, unknown>): void {\n if (!attributes) {\n return;\n }\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setAttributes\");\n return;\n }\n for (const [key, value] of Object.entries(attributes)) {\n currentSpan.setAttribute(key, this.serializer(value));\n }\n }\n\n public setInput(input: unknown): void {\n this.setAttribute(OpenTelemetryKeys.AttributeKeys.JUDGMENT_INPUT, input);\n }\n\n public setOutput(output: unknown): void {\n this.setAttribute(OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT, output);\n }\n\n public asyncEvaluate(\n scorer: BaseScorer,\n example: ExampleModel,\n model?: string,\n ): void {\n if (!this._initialized) {\n Logger.warn(\"Tracer not initialized, skipping asyncEvaluate\");\n return;\n }\n\n if (!this.configuration.enableEvaluation) {\n return;\n }\n\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping asyncEvaluate\");\n return;\n }\n if (!currentSpan.isRecording()) {\n Logger.warn(\"Active span is not recording, skipping asyncEvaluate\");\n return;\n }\n\n const spanContext = currentSpan.spanContext();\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n Logger.info(\n `asyncEvaluate: project=${this.configuration.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorer.name}`,\n );\n\n const evaluationRun = this.createEvaluationRun(\n scorer,\n example,\n model,\n traceId,\n spanId,\n );\n this.enqueueEvaluation(evaluationRun);\n }\n\n public asyncTraceEvaluate(scorer: BaseScorer, model?: string): void {\n if (!this._initialized) {\n Logger.warn(\"Tracer not initialized, skipping asyncTraceEvaluate\");\n return;\n }\n\n if (!this.configuration.enableEvaluation) {\n return;\n }\n\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping asyncTraceEvaluate\");\n return;\n }\n if (!currentSpan.isRecording()) {\n Logger.warn(\"Active span is not recording, skipping asyncTraceEvaluate\");\n return;\n }\n\n const spanContext = currentSpan.spanContext();\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n Logger.info(\n `asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorer.name}`,\n );\n\n try {\n const traceEvaluationRun = this.createTraceEvaluationRun(\n scorer,\n model,\n traceId,\n spanId,\n );\n const traceEvalJson = this.serializer(traceEvaluationRun);\n currentSpan.setAttribute(\n OpenTelemetryKeys.AttributeKeys.PENDING_TRACE_EVAL,\n traceEvalJson,\n );\n } catch (error) {\n Logger.error(\n `Failed to serialize trace evaluation: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private createTraceEvaluationRun(\n scorer: BaseScorer,\n model: string | undefined,\n traceId: string,\n spanId: string,\n ): Record<string, unknown> {\n const evalName = `async_trace_evaluate_${spanId || Date.now()}`;\n const modelName = model || JUDGMENT_DEFAULT_GPT_MODEL;\n\n const scorerConfig = scorer.getScorerConfig();\n\n return {\n project_name: this.configuration.projectName,\n eval_name: evalName,\n scorer: scorerConfig,\n model: modelName,\n organization_id: this.configuration.organizationId,\n trace_id: traceId,\n trace_span_id: spanId,\n };\n }\n\n private createJudgmentSpanExporter(projectId: string): JudgmentSpanExporter {\n const endpoint = this.configuration.apiUrl.endsWith(\"/\")\n ? `${this.configuration.apiUrl}otel/v1/traces`\n : `${this.configuration.apiUrl}/otel/v1/traces`;\n\n return JudgmentSpanExporter.builder()\n .endpoint(endpoint)\n .apiKey(this.configuration.apiKey)\n .organizationId(this.configuration.organizationId)\n .projectId(projectId)\n .build();\n }\n\n private createEvaluationRun(\n scorer: BaseScorer,\n example: ExampleModel,\n model: string | undefined,\n traceId: string,\n spanId: string,\n ): ExampleEvaluationRun {\n const runId = `async_evaluate_${spanId || Date.now()}`;\n const modelName = model || JUDGMENT_DEFAULT_GPT_MODEL;\n\n const scorerConfig = scorer.getScorerConfig();\n\n const evaluationRun: ExampleEvaluationRun = {\n project_name: this.configuration.projectName,\n eval_name: runId,\n examples: [example],\n custom_scorers: [],\n judgment_scorers: [scorerConfig],\n model: modelName,\n trace_id: traceId,\n trace_span_id: spanId,\n };\n\n return evaluationRun;\n }\n\n private async enqueueEvaluation(\n evaluationRun: ExampleEvaluationRun,\n ): Promise<void> {\n if (!this.apiClient) {\n Logger.warn(\"API client not available, skipping evaluation enqueue\");\n return;\n }\n\n try {\n await this.apiClient.addToRunEvalQueueExamples(evaluationRun);\n Logger.info(`Enqueuing evaluation run: ${evaluationRun.eval_name}`);\n } catch (error) {\n Logger.error(\n `Failed to enqueue evaluation run: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public observe<TArgs extends any[], TResult>(\n func: (...args: TArgs) => TResult,\n spanKind: SpanKind = \"span\",\n ): (...args: TArgs) => TResult {\n return (...args: TArgs) => {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping observe\");\n return func(...args);\n }\n\n const spanName = func.name || \"anonymous\";\n const tracer = trace.getTracer(this.configuration.tracerName);\n\n return context.with(trace.setSpan(context.active(), currentSpan), () => {\n return tracer.startActiveSpan(\n spanName,\n { kind: OpenTelemetrySpanKind.INTERNAL },\n (span) => {\n try {\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_SPAN_KIND,\n spanKind,\n );\n\n const argNames = parseFunctionArgs(func);\n if (argNames.length === args.length) {\n const inputObj: Record<string, unknown> = {};\n argNames.forEach((name, index) => {\n inputObj[name] = args[index];\n });\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_INPUT,\n this.serializer(inputObj),\n );\n }\n\n const result = func(...args);\n\n if (result instanceof Promise) {\n return result\n .then((res) => {\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT,\n this.serializer(res),\n );\n span.end();\n return res;\n })\n .catch((err) => {\n span.recordException(err as Error);\n span.end();\n throw err;\n }) as TResult;\n } else {\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT,\n this.serializer(result),\n );\n span.end();\n return result;\n }\n } catch (err) {\n span.recordException(err as Error);\n span.end();\n throw err;\n }\n },\n );\n });\n };\n }\n\n public async shutdown(): Promise<void> {}\n}\n",
8
+ "import { Tracer as OpenTelemetryTracer, trace } from \"@opentelemetry/api\";\nimport { JUDGMENT_API_URL, JUDGMENT_DEFAULT_GPT_MODEL } from \"../env\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport {\n ExampleEvaluationRun,\n Example as ExampleModel,\n} from \"../internal/api/models\";\nimport { BaseScorer } from \"../scorers/base-scorer\";\nimport { parseFunctionArgs } from \"../utils/annotate\";\nimport { Logger } from \"../utils/logger\";\nimport { JudgmentSpanExporter, NoOpSpanExporter } from \"./exporters\";\nimport { OpenTelemetryKeys } from \"./OpenTelemetryKeys\";\nimport { TracerConfiguration } from \"./TracerConfiguration\";\n\nexport type Serializer = (obj: unknown) => string;\ntype SpanKind = (\"llm\" | \"tool\" | \"span\") & {};\n\nexport type TracerInitializeOptions = {\n resourceAttributes?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nexport abstract class Tracer {\n protected static instances: Map<string, Tracer> = new Map();\n\n public apiClient: JudgmentApiClient;\n public tracer: OpenTelemetryTracer;\n public serializer: Serializer = JSON.stringify;\n\n protected _initialized: boolean = false;\n\n private projectId: string | null = null;\n protected configuration: TracerConfiguration;\n\n public getConfiguration(): TracerConfiguration {\n return this.configuration;\n }\n\n public getProjectId(): string | null {\n return this.projectId;\n }\n\n public getSerializer(): Serializer {\n return this.serializer;\n }\n\n public constructor(configuration: TracerConfiguration) {\n this.configuration = configuration;\n this.tracer = trace.getTracer(this.configuration.tracerName);\n\n this.apiClient = new JudgmentApiClient(\n this.configuration.apiUrl,\n this.configuration.apiKey,\n this.configuration.organizationId,\n );\n\n this._initialized = false;\n }\n\n public abstract initialize(options: TracerInitializeOptions): Promise<Tracer>;\n\n private async resolveProjectId(): Promise<string> {\n try {\n Logger.info(\n `Resolving project ID for project: ${this.configuration.projectName}`,\n );\n\n const response = await this.apiClient.projectsResolve({\n project_name: this.configuration.projectName,\n });\n Logger.info(`Resolved project ID: ${response.project_id}`);\n const resolvedProjectId = response.project_id?.toString();\n\n if (!resolvedProjectId) {\n throw new Error(\n `Project ID not found for project: ${this.configuration.projectName}`,\n );\n }\n\n this.projectId = resolvedProjectId;\n Logger.info(`Successfully resolved project ID: ${this.projectId}`);\n\n return this.projectId;\n } catch (error) {\n throw new Error(\n `Failed to resolve project ID: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public static getExporter(\n apiKey: string,\n organizationId: string,\n projectId: string,\n ): JudgmentSpanExporter {\n const endpoint = JUDGMENT_API_URL?.endsWith(\"/\")\n ? `${JUDGMENT_API_URL}otel/v1/traces`\n : `${JUDGMENT_API_URL}/otel/v1/traces`;\n\n return JudgmentSpanExporter.builder()\n .endpoint(endpoint)\n .apiKey(apiKey)\n .organizationId(organizationId)\n .projectId(projectId)\n .build();\n }\n\n public async getSpanExporter(): Promise<\n JudgmentSpanExporter | NoOpSpanExporter\n > {\n try {\n const projectId = await this.resolveProjectId();\n return this.createJudgmentSpanExporter(projectId);\n } catch (error) {\n Logger.error(\n \"Failed to resolve project \" +\n this.configuration.projectName +\n \", please create it first at https://app.judgmentlabs.ai/org/\" +\n (this.configuration.organizationId || \"unknown\") +\n \"/projects. Skipping Judgment export.\",\n );\n return new NoOpSpanExporter();\n }\n }\n\n public setSpanKind(kind: SpanKind): void {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setSpanKind\");\n return;\n }\n if (kind !== null) {\n currentSpan.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_SPAN_KIND,\n kind,\n );\n }\n }\n\n public setAttribute(key: string, value: unknown): void {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setAttribute\");\n return;\n }\n currentSpan.setAttribute(key, this.serializer(value));\n }\n\n public setLLMSpan(): void {\n this.setSpanKind(\"llm\");\n }\n\n public setToolSpan(): void {\n this.setSpanKind(\"tool\");\n }\n\n public setGeneralSpan(): void {\n this.setSpanKind(\"span\");\n }\n\n public setAttributes(attributes: Record<string, unknown>): void {\n if (!attributes) {\n return;\n }\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping setAttributes\");\n return;\n }\n for (const [key, value] of Object.entries(attributes)) {\n currentSpan.setAttribute(key, this.serializer(value));\n }\n }\n\n public setInput(input: unknown): void {\n this.setAttribute(OpenTelemetryKeys.AttributeKeys.JUDGMENT_INPUT, input);\n }\n\n public setOutput(output: unknown): void {\n this.setAttribute(OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT, output);\n }\n\n public asyncEvaluate(\n scorer: BaseScorer,\n example: ExampleModel,\n model?: string,\n ): void {\n if (!this._initialized) {\n Logger.warn(\"Tracer not initialized, skipping asyncEvaluate\");\n return;\n }\n\n if (!this.configuration.enableEvaluation) {\n return;\n }\n\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping asyncEvaluate\");\n return;\n }\n if (!currentSpan.isRecording()) {\n Logger.warn(\"Active span is not recording, skipping asyncEvaluate\");\n return;\n }\n\n const spanContext = currentSpan.spanContext();\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n Logger.info(\n `asyncEvaluate: project=${this.configuration.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorer.name}`,\n );\n\n const evaluationRun = this.createEvaluationRun(\n scorer,\n example,\n model,\n traceId,\n spanId,\n );\n this.enqueueEvaluation(evaluationRun);\n }\n\n public asyncTraceEvaluate(scorer: BaseScorer, model?: string): void {\n if (!this._initialized) {\n Logger.warn(\"Tracer not initialized, skipping asyncTraceEvaluate\");\n return;\n }\n\n if (!this.configuration.enableEvaluation) {\n return;\n }\n\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.warn(\"No active span found, skipping asyncTraceEvaluate\");\n return;\n }\n if (!currentSpan.isRecording()) {\n Logger.warn(\"Active span is not recording, skipping asyncTraceEvaluate\");\n return;\n }\n\n const spanContext = currentSpan.spanContext();\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n Logger.info(\n `asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorer.name}`,\n );\n\n try {\n const traceEvaluationRun = this.createTraceEvaluationRun(\n scorer,\n model,\n traceId,\n spanId,\n );\n const traceEvalJson = this.serializer(traceEvaluationRun);\n currentSpan.setAttribute(\n OpenTelemetryKeys.AttributeKeys.PENDING_TRACE_EVAL,\n traceEvalJson,\n );\n } catch (error) {\n Logger.error(\n `Failed to serialize trace evaluation: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private createTraceEvaluationRun(\n scorer: BaseScorer,\n model: string | undefined,\n traceId: string,\n spanId: string,\n ): Record<string, unknown> {\n const evalName = `async_trace_evaluate_${spanId || Date.now()}`;\n const modelName = model || JUDGMENT_DEFAULT_GPT_MODEL;\n\n const scorerConfig = scorer.getScorerConfig();\n\n return {\n project_name: this.configuration.projectName,\n eval_name: evalName,\n scorer: scorerConfig,\n model: modelName,\n organization_id: this.configuration.organizationId,\n trace_id: traceId,\n trace_span_id: spanId,\n };\n }\n\n private createJudgmentSpanExporter(projectId: string): JudgmentSpanExporter {\n const endpoint = this.configuration.apiUrl.endsWith(\"/\")\n ? `${this.configuration.apiUrl}otel/v1/traces`\n : `${this.configuration.apiUrl}/otel/v1/traces`;\n\n return JudgmentSpanExporter.builder()\n .endpoint(endpoint)\n .apiKey(this.configuration.apiKey)\n .organizationId(this.configuration.organizationId)\n .projectId(projectId)\n .build();\n }\n\n private createEvaluationRun(\n scorer: BaseScorer,\n example: ExampleModel,\n model: string | undefined,\n traceId: string,\n spanId: string,\n ): ExampleEvaluationRun {\n const runId = `async_evaluate_${spanId || Date.now()}`;\n const modelName = model || JUDGMENT_DEFAULT_GPT_MODEL;\n\n const scorerConfig = scorer.getScorerConfig();\n\n const evaluationRun: ExampleEvaluationRun = {\n project_name: this.configuration.projectName,\n eval_name: runId,\n examples: [example],\n custom_scorers: [],\n judgment_scorers: [scorerConfig],\n model: modelName,\n trace_id: traceId,\n trace_span_id: spanId,\n };\n\n return evaluationRun;\n }\n\n private async enqueueEvaluation(\n evaluationRun: ExampleEvaluationRun,\n ): Promise<void> {\n if (!this.apiClient) {\n Logger.warn(\"API client not available, skipping evaluation enqueue\");\n return;\n }\n\n try {\n await this.apiClient.addToRunEvalQueueExamples(evaluationRun);\n Logger.info(`Enqueuing evaluation run: ${evaluationRun.eval_name}`);\n } catch (error) {\n Logger.error(\n `Failed to enqueue evaluation run: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public observe<TArgs extends any[], TResult>(\n func: (...args: TArgs) => TResult,\n spanKind: SpanKind = \"span\",\n ): (...args: TArgs) => TResult {\n return (...args: TArgs): TResult => {\n const spanName = func.name || \"anonymous\";\n\n return this.tracer.startActiveSpan(spanName, (span) => {\n try {\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_SPAN_KIND,\n spanKind,\n );\n\n const argNames = parseFunctionArgs(func);\n if (argNames.length === args.length) {\n const inputObj: Record<string, unknown> = {};\n argNames.forEach((name, index) => {\n inputObj[name] = args[index];\n });\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_INPUT,\n this.serializer(inputObj),\n );\n }\n\n const result = func(...args);\n\n if (result instanceof Promise) {\n return result\n .then((res) => {\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT,\n this.serializer(res),\n );\n span.end();\n return res;\n })\n .catch((err) => {\n span.recordException(err as Error);\n span.end();\n throw err;\n }) as TResult;\n } else {\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT,\n this.serializer(result),\n );\n span.end();\n return result;\n }\n } catch (err) {\n span.recordException(err as Error);\n span.end();\n throw err;\n }\n });\n };\n }\n\n public async shutdown(): Promise<void> {}\n}\n",
9
9
  "function getEnvVar(varName: string): string | null;\nfunction getEnvVar(varName: string, defaultValue: string): string;\nfunction getEnvVar(varName: string, defaultValue?: string): string | null {\n const value = process.env[varName];\n if (!value) {\n return defaultValue ?? null;\n }\n return value;\n}\n\nexport const JUDGMENT_API_KEY = getEnvVar(\"JUDGMENT_API_KEY\");\nexport const JUDGMENT_ORG_ID = getEnvVar(\"JUDGMENT_ORG_ID\");\nexport const JUDGMENT_API_URL = getEnvVar(\n \"JUDGMENT_API_URL\",\n \"https://api.judgmentlabs.ai\",\n);\nexport const JUDGMENT_DEFAULT_GPT_MODEL = getEnvVar(\n \"JUDGMENT_DEFAULT_GPT_MODEL\",\n \"gpt-4.1\",\n);\nexport const JUDGMENT_ENABLE_MONITORING = getEnvVar(\n \"JUDGMENT_ENABLE_MONITORING\",\n \"true\",\n);\nexport const JUDGMENT_ENABLE_EVALUATIONS = getEnvVar(\n \"JUDGMENT_ENABLE_EVALUATIONS\",\n \"true\",\n);\nexport const JUDGMENT_NO_COLOR = getEnvVar(\"JUDGMENT_NO_COLOR\");\n",
10
10
  "/**\n * Auto-generated by scripts/generate-client.ts\n * DO NOT EDIT MANUALLY - This file is generated automatically\n */\nimport * as Models from \"./models\";\n\nexport class JudgmentApiClient {\n private baseUrl: string;\n private apiKey: string;\n private organizationId: string;\n\n constructor(baseUrl: string, apiKey: string, organizationId: string) {\n this.baseUrl = baseUrl;\n this.apiKey = apiKey;\n this.organizationId = organizationId;\n }\n\n private buildUrl(path: string): string {\n return this.baseUrl + path;\n }\n\n private buildHeaders(): Record<string, string> {\n if (!this.apiKey || !this.organizationId) {\n throw new Error(\"API key and organization ID cannot be null\");\n }\n return {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n \"X-Organization-Id\": this.organizationId,\n };\n }\n\n async addToRunEvalQueueExamples(\n payload: Models.ExampleEvaluationRun,\n ): Promise<void> {\n const url = this.buildUrl(\"/add_to_run_eval_queue/examples\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async addToRunEvalQueueTraces(\n payload: Models.TraceEvaluationRun,\n ): Promise<void> {\n const url = this.buildUrl(\"/add_to_run_eval_queue/traces\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async logEvalResults(payload: Models.EvalResults): Promise<void> {\n const url = this.buildUrl(\"/log_eval_results/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async fetchExperimentRun(payload: Models.EvalResultsFetch): Promise<void> {\n const url = this.buildUrl(\"/fetch_experiment_run/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async getEvaluationStatus(\n experiment_run_id: string,\n project_name: string,\n ): Promise<void> {\n const queryParams = new URLSearchParams();\n queryParams.set(\"experiment_run_id\", experiment_run_id);\n queryParams.set(\"project_name\", project_name);\n const url = this.buildUrl(\n \"/get_evaluation_status/\" +\n (queryParams.toString() ? \"?\" + queryParams.toString() : \"\"),\n );\n const response = await fetch(url, {\n method: \"GET\",\n headers: this.buildHeaders(),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async scorerExists(\n payload: Models.ScorerExistsRequest,\n ): Promise<Models.ScorerExistsResponse> {\n const url = this.buildUrl(\"/scorer_exists/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.ScorerExistsResponse;\n }\n\n async saveScorer(\n payload: Models.SavePromptScorerRequest,\n ): Promise<Models.SavePromptScorerResponse> {\n const url = this.buildUrl(\"/save_scorer/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.SavePromptScorerResponse;\n }\n\n async fetchScorers(\n payload: Models.FetchPromptScorersRequest,\n ): Promise<Models.FetchPromptScorersResponse> {\n const url = this.buildUrl(\"/fetch_scorers/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.FetchPromptScorersResponse;\n }\n\n async projectsResolve(\n payload: Models.ResolveProjectNameRequest,\n ): Promise<Models.ResolveProjectNameResponse> {\n const url = this.buildUrl(\"/projects/resolve/\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return (await response.json()) as Models.ResolveProjectNameResponse;\n }\n}\n",
11
11
  "// 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",
@@ -21,10 +21,10 @@
21
21
  "import { JUDGMENT_API_KEY, JUDGMENT_ORG_ID } from \"../../../env\";\nimport { APIScorerType } from \"../../api-scorer\";\nimport { BasePromptScorer } from \"./base-prompt-scorer\";\nexport {\n fetchPromptScorer,\n JudgmentAPIError,\n pushPromptScorer,\n scorerExists,\n} from \"./prompt-scorer-utils\";\n\nexport class PromptScorer extends BasePromptScorer {\n constructor(\n scoreType: APIScorerType,\n name: string,\n prompt: string,\n threshold: number,\n requiredParams: readonly string[] = [],\n options?: Record<string, number> | null,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n ) {\n super(\n scoreType,\n name,\n prompt,\n threshold,\n requiredParams,\n options,\n judgmentApiKey,\n organizationId,\n );\n }\n}\n",
22
22
  "import { JUDGMENT_API_KEY, JUDGMENT_ORG_ID } from \"../../../env\";\nimport { APIScorerType } from \"../../api-scorer\";\nimport { BasePromptScorer } from \"./base-prompt-scorer\";\n\nexport class TracePromptScorer extends BasePromptScorer {\n constructor(\n scoreType: APIScorerType,\n name: string,\n prompt: string,\n threshold: number,\n requiredParams: readonly string[] = [],\n options?: Record<string, number> | null,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n ) {\n super(\n scoreType,\n name,\n prompt,\n threshold,\n requiredParams,\n options,\n judgmentApiKey,\n organizationId,\n );\n }\n}\n",
23
23
  "import { resourceFromAttributes } from \"@opentelemetry/resources\";\nimport {\n BatchSpanProcessor,\n WebTracerProvider,\n} from \"@opentelemetry/sdk-trace-web\";\nimport { VERSION } from \"../version\";\nimport { OpenTelemetryKeys } from \"./OpenTelemetryKeys\";\nimport { Tracer, TracerInitializeOptions } from \"./Tracer\";\nimport { TracerConfiguration } from \"./TracerConfiguration\";\n\nexport type BrowserTracerInitializeOptions = TracerInitializeOptions & {};\n\nexport class BrowserTracer extends Tracer {\n private webTracerProvider?: WebTracerProvider;\n\n public async initialize(\n options: BrowserTracerInitializeOptions = {},\n ): Promise<BrowserTracer> {\n if (this._initialized) {\n return this;\n }\n\n try {\n const resourceAttributes = {\n [OpenTelemetryKeys.ResourceKeys.SERVICE_NAME]:\n this.configuration.projectName,\n [OpenTelemetryKeys.ResourceKeys.TELEMETRY_SDK_VERSION]: VERSION,\n ...options.resourceAttributes,\n };\n\n const spanExporter = await this.getSpanExporter();\n\n this.webTracerProvider = new WebTracerProvider({\n resource: resourceFromAttributes(resourceAttributes),\n spanProcessors: [new BatchSpanProcessor(spanExporter)],\n });\n\n this.webTracerProvider.register();\n\n this._initialized = true;\n return this;\n } catch (error) {\n throw new Error(\n `Failed to initialize browser tracer: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public static getInstance(configuration: TracerConfiguration): BrowserTracer {\n const key = `BrowserTracer:${configuration.projectName}`;\n if (!Tracer.instances.has(key)) {\n Tracer.instances.set(key, new BrowserTracer(configuration));\n }\n return Tracer.instances.get(key) as BrowserTracer;\n }\n\n public static createDefault(projectName: string): BrowserTracer {\n const configuration = TracerConfiguration.builder()\n .projectName(projectName)\n .build();\n return BrowserTracer.getInstance(configuration);\n }\n\n public static createWithConfiguration(\n configuration: TracerConfiguration,\n ): BrowserTracer {\n return new BrowserTracer(configuration);\n }\n}\n",
24
- "export const VERSION = \"0.3.2\";\n",
24
+ "export const VERSION = \"0.3.3\";\n",
25
25
  "import { resourceFromAttributes } from \"@opentelemetry/resources\";\nimport { NodeSDK, NodeSDKConfiguration } from \"@opentelemetry/sdk-node\";\nimport { BatchSpanProcessor } from \"@opentelemetry/sdk-trace-node\";\nimport { VERSION } from \"../version\";\nimport { OpenTelemetryKeys } from \"./OpenTelemetryKeys\";\nimport { Tracer, TracerInitializeOptions } from \"./Tracer\";\nimport { TracerConfiguration } from \"./TracerConfiguration\";\n\nexport type NodeTracerInitializeOptions = TracerInitializeOptions & {\n instrumentations?: NodeSDKConfiguration[\"instrumentations\"];\n resourceAttributes?: Record<string, unknown>;\n};\n\nexport class NodeTracer extends Tracer {\n private nodeSDK?: NodeSDK;\n\n public async initialize(\n options: NodeTracerInitializeOptions = {},\n ): Promise<NodeTracer> {\n if (this._initialized) {\n return this;\n }\n\n try {\n const resourceAttributes = {\n [OpenTelemetryKeys.ResourceKeys.SERVICE_NAME]:\n this.configuration.projectName,\n [OpenTelemetryKeys.ResourceKeys.TELEMETRY_SDK_VERSION]: VERSION,\n ...options.resourceAttributes,\n };\n\n const spanExporter = await this.getSpanExporter();\n\n this.nodeSDK = new NodeSDK({\n resource: resourceFromAttributes(resourceAttributes),\n instrumentations: options.instrumentations,\n spanProcessor: new BatchSpanProcessor(spanExporter),\n ...options,\n });\n\n this.nodeSDK.start();\n\n this._initialized = true;\n return this;\n } catch (error) {\n throw new Error(\n `Failed to initialize node tracer: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public static getInstance(configuration: TracerConfiguration): NodeTracer {\n const key = `NodeTracer:${configuration.projectName}`;\n if (!Tracer.instances.has(key)) {\n Tracer.instances.set(key, new NodeTracer(configuration));\n }\n return Tracer.instances.get(key) as NodeTracer;\n }\n\n public static createDefault(projectName: string): NodeTracer {\n const configuration = TracerConfiguration.builder()\n .projectName(projectName)\n .enableEvaluation(true)\n .build();\n return NodeTracer.getInstance(configuration);\n }\n\n public static createWithConfiguration(\n configuration: TracerConfiguration,\n ): NodeTracer {\n return new NodeTracer(configuration);\n }\n\n public async shutdown(): Promise<void> {\n if (this.nodeSDK) {\n await this.nodeSDK.shutdown();\n }\n }\n}\n"
26
26
  ],
27
- "mappings": "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",
28
- "debugId": "B7CCA58D2A18793064756E2164756E21",
27
+ "mappings": "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",
28
+ "debugId": "B0A57EE31830E82264756E2164756E21",
29
29
  "names": []
30
30
  }
@@ -1,3 +1,4 @@
1
+ import { Tracer as OpenTelemetryTracer } from "@opentelemetry/api";
1
2
  import { JudgmentApiClient } from "../internal/api";
2
3
  import { Example as ExampleModel } from "../internal/api/models";
3
4
  import { BaseScorer } from "../scorers/base-scorer";
@@ -12,7 +13,7 @@ export type TracerInitializeOptions = {
12
13
  export declare abstract class Tracer {
13
14
  protected static instances: Map<string, Tracer>;
14
15
  apiClient: JudgmentApiClient;
15
- tracer: unknown;
16
+ tracer: OpenTelemetryTracer;
16
17
  serializer: Serializer;
17
18
  protected _initialized: boolean;
18
19
  private projectId;
@@ -1 +1 @@
1
- {"version":3,"file":"Tracer.d.ts","sourceRoot":"","sources":["../../src/tracer/Tracer.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAEL,OAAO,IAAI,YAAY,EACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;AAClD,KAAK,QAAQ,GAAG,CAAC,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE/C,MAAM,MAAM,uBAAuB,GAAG;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,8BAAsB,MAAM;IAC1B,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAErD,SAAS,EAAE,iBAAiB,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAQ;IACvB,UAAU,EAAE,UAAU,CAAkB;IAE/C,SAAS,CAAC,YAAY,EAAE,OAAO,CAAS;IAExC,OAAO,CAAC,SAAS,CAAuB;IACxC,SAAS,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAEtC,gBAAgB,IAAI,mBAAmB;IAIvC,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,aAAa,IAAI,UAAU;gBAIf,aAAa,EAAE,mBAAmB;aAYrC,UAAU,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;YAE/D,gBAAgB;WA6BhB,WAAW,CACvB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAChB,oBAAoB;IAaV,eAAe,IAAI,OAAO,CACrC,oBAAoB,GAAG,gBAAgB,CACxC;IAgBM,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAcjC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAS/C,UAAU,IAAI,IAAI;IAIlB,WAAW,IAAI,IAAI;IAInB,cAAc,IAAI,IAAI;IAItB,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAcxD,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9B,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIhC,aAAa,CAClB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,YAAY,EACrB,KAAK,CAAC,EAAE,MAAM,GACb,IAAI;IAsCA,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IA+CnE,OAAO,CAAC,wBAAwB;IAsBhC,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,mBAAmB;YA0Bb,iBAAiB;IAkBxB,OAAO,CAAC,KAAK,SAAS,GAAG,EAAE,EAAE,OAAO,EACzC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,EACjC,QAAQ,GAAE,QAAiB,GAC1B,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO;IAsEjB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CACvC"}
1
+ {"version":3,"file":"Tracer.d.ts","sourceRoot":"","sources":["../../src/tracer/Tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,mBAAmB,EAAS,MAAM,oBAAoB,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAEL,OAAO,IAAI,YAAY,EACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;AAClD,KAAK,QAAQ,GAAG,CAAC,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE/C,MAAM,MAAM,uBAAuB,GAAG;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,8BAAsB,MAAM;IAC1B,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAErD,SAAS,EAAE,iBAAiB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,EAAE,UAAU,CAAkB;IAE/C,SAAS,CAAC,YAAY,EAAE,OAAO,CAAS;IAExC,OAAO,CAAC,SAAS,CAAuB;IACxC,SAAS,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAEtC,gBAAgB,IAAI,mBAAmB;IAIvC,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,aAAa,IAAI,UAAU;gBAIf,aAAa,EAAE,mBAAmB;aAarC,UAAU,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;YAE/D,gBAAgB;WA6BhB,WAAW,CACvB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAChB,oBAAoB;IAaV,eAAe,IAAI,OAAO,CACrC,oBAAoB,GAAG,gBAAgB,CACxC;IAgBM,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAcjC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAS/C,UAAU,IAAI,IAAI;IAIlB,WAAW,IAAI,IAAI;IAInB,cAAc,IAAI,IAAI;IAItB,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAcxD,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9B,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIhC,aAAa,CAClB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,YAAY,EACrB,KAAK,CAAC,EAAE,MAAM,GACb,IAAI;IAsCA,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IA+CnE,OAAO,CAAC,wBAAwB;IAsBhC,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,mBAAmB;YA0Bb,iBAAiB;IAkBxB,OAAO,CAAC,KAAK,SAAS,GAAG,EAAE,EAAE,OAAO,EACzC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,EACjC,QAAQ,GAAE,QAAiB,GAC1B,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO;IAyDjB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CACvC"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.3.2";
1
+ export declare const VERSION = "0.3.3";
2
2
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "judgeval",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "description": "JavaScript/TypeScript client for Judgment evaluation platform",
5
5
  "main": "./dist/index.mjs",
6
6
  "module": "./dist/index.mjs",