judgeval 0.3.3 → 0.4.0

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.
@@ -1,4 +1,4 @@
1
1
  import { Example as ExampleModel } from "../internal/api/models/Example";
2
2
  export type Example<T extends Record<string, any> = Record<string, any>> = ExampleModel & T;
3
- export declare function createExample<T extends Record<string, any>>(properties: T): Example<T>;
3
+ export declare function Example<T extends Record<string, any>>(properties: T): Example<T>;
4
4
  //# sourceMappingURL=example.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../../src/data/example.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEzE,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IACrE,YAAY,GAAG,CAAC,CAAC;AAEnB,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzD,UAAU,EAAE,CAAC,GACZ,OAAO,CAAC,CAAC,CAAC,CASZ"}
1
+ {"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../../src/data/example.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEzE,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IACrE,YAAY,GAAG,CAAC,CAAC;AAEnB,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnD,UAAU,EAAE,CAAC,GACZ,OAAO,CAAC,CAAC,CAAC,CASZ"}
package/dist/env.d.ts CHANGED
@@ -5,4 +5,5 @@ export declare const JUDGMENT_DEFAULT_GPT_MODEL: string;
5
5
  export declare const JUDGMENT_ENABLE_MONITORING: string;
6
6
  export declare const JUDGMENT_ENABLE_EVALUATIONS: string;
7
7
  export declare const JUDGMENT_NO_COLOR: string | null;
8
+ export declare const JUDGMENT_LOG_LEVEL: string;
8
9
  //# sourceMappingURL=env.d.ts.map
package/dist/env.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,gBAAgB,eAAgC,CAAC;AAC9D,eAAO,MAAM,eAAe,eAA+B,CAAC;AAC5D,eAAO,MAAM,gBAAgB,QAG5B,CAAC;AACF,eAAO,MAAM,0BAA0B,QAGtC,CAAC;AACF,eAAO,MAAM,0BAA0B,QAGtC,CAAC;AACF,eAAO,MAAM,2BAA2B,QAGvC,CAAC;AACF,eAAO,MAAM,iBAAiB,eAAiC,CAAC"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,gBAAgB,eAAgC,CAAC;AAC9D,eAAO,MAAM,eAAe,eAA+B,CAAC;AAC5D,eAAO,MAAM,gBAAgB,QAG5B,CAAC;AACF,eAAO,MAAM,0BAA0B,QAGtC,CAAC;AACF,eAAO,MAAM,0BAA0B,QAGtC,CAAC;AACF,eAAO,MAAM,2BAA2B,QAGvC,CAAC;AACF,eAAO,MAAM,iBAAiB,eAAiC,CAAC;AAChE,eAAO,MAAM,kBAAkB,QAA0C,CAAC"}
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
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};
1
+ import{OTLPTraceExporter as V}from"@opentelemetry/exporter-trace-otlp-http";function N(t,e){let s=process.env[t];if(!s)return e??null;return s}var l=N("JUDGMENT_API_KEY"),E=N("JUDGMENT_ORG_ID"),d=N("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),M=N("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),rt=N("JUDGMENT_ENABLE_MONITORING","true"),it=N("JUDGMENT_ENABLE_EVALUATIONS","true"),ot=N("JUDGMENT_NO_COLOR"),G=N("JUDGMENT_LOG_LEVEL","warn");class r{static RESET="\x1B[0m";static RED="\x1B[31m";static YELLOW="\x1B[33m";static GRAY="\x1B[90m";static Level={DEBUG:0,INFO:1,WARNING:2,ERROR:3,CRITICAL:4};static initialized=!1;static currentLevel=r.Level.WARNING;static useColor=!0;static initialize(){if(!r.initialized){let t=process.env.JUDGMENT_NO_COLOR;r.useColor=!t&&process.stdout.isTTY;let e=G.toLowerCase();if(e){let s={debug:r.Level.DEBUG,info:r.Level.INFO,warning:r.Level.WARNING,warn:r.Level.WARNING,error:r.Level.ERROR,critical:r.Level.CRITICAL};r.currentLevel=s[e]??r.Level.WARNING}r.initialized=!0}}static setLevel(t){r.currentLevel=t}static setUseColor(t){r.useColor=t}static log(t,e){if(r.initialize(),t<r.currentLevel)return;let s=new Date().toISOString().replace("T"," ").substring(0,19),i=Object.keys(r.Level).find((a)=>r.Level[a]===t)||"UNKNOWN",o=`${s} - judgeval - ${i} - ${e}`;if(r.useColor)o=`${t===r.Level.DEBUG||t===r.Level.INFO?r.GRAY:t===r.Level.WARNING?r.YELLOW:r.RED}${o}${r.RESET}`;(t>=r.Level.ERROR?process.stderr:process.stdout).write(o+`
2
+ `)}static debug(t){r.log(r.Level.DEBUG,t)}static info(t){r.log(r.Level.INFO,t)}static warning(t){r.log(r.Level.WARNING,t)}static warn(t){r.log(r.Level.WARNING,t)}static error(t){r.log(r.Level.ERROR,t)}static critical(t){r.log(r.Level.CRITICAL,t)}}class p{delegate;projectId;constructor(t,e,s,i){if(!i||i.trim()==="")throw Error("projectId is required for JudgmentSpanExporter");this.projectId=i,this.delegate=new V({url:t,headers:{Authorization:`Bearer ${e}`,"X-Organization-Id":s,"X-Project-Id":i}})}static builder(){return new C}export(t,e){r.info(`JudgmentSpanExporter: Exported ${t.length} spans`),this.delegate.export(t,e)}shutdown(){return r.info(`JudgmentSpanExporter: Shutting down exporter for project ${this.projectId}`),this.delegate.shutdown()}forceFlush(){return r.info(`JudgmentSpanExporter: Force flushing spans for project ${this.projectId}`),this.delegate.forceFlush?.()??Promise.resolve()}}class C{_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 p(this._endpoint,this._apiKey,this._organizationId,this._projectId)}}class h{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 J,trace as b}from"@opentelemetry/api";class f{baseUrl;apiKey;organizationId;constructor(t,e,s){this.baseUrl=t,this.apiKey=e,this.organizationId=s}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"),s=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return}async addToRunEvalQueueTraces(t){let e=this.buildUrl("/add_to_run_eval_queue/traces"),s=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return}async logEvalResults(t){let e=this.buildUrl("/log_eval_results/"),s=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return}async fetchExperimentRun(t){let e=this.buildUrl("/fetch_experiment_run/"),s=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return}async getEvaluationStatus(t,e){let s=new URLSearchParams;s.set("experiment_run_id",t),s.set("project_name",e);let i=this.buildUrl("/get_evaluation_status/"+(s.toString()?"?"+s.toString():"")),o=await fetch(i,{method:"GET",headers:this.buildHeaders()});if(!o.ok)throw Error(`HTTP Error: ${o.status} - ${await o.text()}`);return}async scorerExists(t){let e=this.buildUrl("/scorer_exists/"),s=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return await s.json()}async saveScorer(t){let e=this.buildUrl("/save_scorer/"),s=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return await s.json()}async fetchScorers(t){let e=this.buildUrl("/fetch_scorers/"),s=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return await s.json()}async projectsResolve(t){let e=this.buildUrl("/projects/resolve/"),s=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return await s.json()}}var W=/^([^(]+?)=>/,B=/^[^(]*\(\s*([^)]*)\)/m,q=/,/,Y=/^\s*(_?)(\S+?)\1\s*$/,g=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function z(t){return Function.prototype.toString.call(t)}function j(t){let e=z(t).replace(g,"");return e.match(W)||e.match(B)}function I(t){let e=j(t);if(!e||!e[1])return[];return e[1].split(q).map((s)=>{return s.replace(Y,(o,n,a)=>a).trim()}).filter((s)=>s.length>0)}class T{static instances=new Map;apiClient;tracer;serializer=JSON.stringify;_initialized=!1;projectId=null;spanExporter=null;configuration;getConfiguration(){return this.configuration}getProjectId(){return this.projectId}getSerializer(){return this.serializer}constructor(t){this.configuration=t,this.tracer=b.getTracer(this.configuration.tracerName),this.apiClient=new f(this.configuration.apiUrl,this.configuration.apiKey,this.configuration.organizationId),this._initialized=!1}async resolveProjectId(){try{r.info(`Resolving project ID for project: ${this.configuration.projectName}`);let t=await this.apiClient.projectsResolve({project_name:this.configuration.projectName});r.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,r.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)}`)}}async getSpanExporter(){if(!this.spanExporter)try{let t=await this.resolveProjectId();this.spanExporter=this.createJudgmentSpanExporter(t)}catch(t){r.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."),this.spanExporter=new h}return this.spanExporter}setSpanKind(t){let e=b.getActiveSpan();if(!e){r.info("No active span found, skipping setSpanKind");return}if(t!==null)e.setAttribute(u.AttributeKeys.JUDGMENT_SPAN_KIND,t)}setAttribute(t,e){let s=b.getActiveSpan();if(!s){r.info("No active span found, skipping setAttribute");return}s.setAttribute(t,this.serializer(e))}setLLMSpan(){this.setSpanKind("llm")}setToolSpan(){this.setSpanKind("tool")}setGeneralSpan(){this.setSpanKind("span")}setAttributes(t){if(!t)return;let e=b.getActiveSpan();if(!e){r.info("No active span found, skipping setAttributes");return}for(let[s,i]of Object.entries(t))e.setAttribute(s,this.serializer(i))}setInput(t){this.setAttribute(u.AttributeKeys.JUDGMENT_INPUT,t)}setOutput(t){this.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,t)}asyncEvaluate(t,e,s){try{if(!this.configuration.enableEvaluation)return;let i=b.getActiveSpan();if(!i){r.info("No active span found, skipping asyncEvaluate");return}if(!i.isRecording()){r.info("Active span is not recording, skipping asyncEvaluate");return}let o=i.spanContext(),n=o.traceId,a=o.spanId;r.info(`asyncEvaluate: project=${this.configuration.projectName}, traceId=${n}, spanId=${a}, scorer=${t.name}`);let c=this.createEvaluationRun(t,e,s,n,a);this.enqueueEvaluation(c)}catch(i){r.error(`Failed to asyncEvaluate: ${i instanceof Error?i.message:String(i)}`)}}asyncTraceEvaluate(t,e){try{if(!this.configuration.enableEvaluation)return;let s=b.getActiveSpan();if(!s){r.info("No active span found, skipping asyncTraceEvaluate");return}if(!s.isRecording()){r.info("Active span is not recording, skipping asyncTraceEvaluate");return}let i=s.spanContext(),o=i.traceId,n=i.spanId;r.info(`asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${o}, spanId=${n}, scorer=${t.name}`);let a=this.createTraceEvaluationRun(t,e,o,n),c=this.serializer(a);s.setAttribute(u.AttributeKeys.PENDING_TRACE_EVAL,c)}catch(s){r.error(`Failed to asyncTraceEvaluate: ${s instanceof Error?s.message:String(s)}`)}}createTraceEvaluationRun(t,e,s,i){let o=`async_trace_evaluate_${i||Date.now()}`,n=e||M,a=t.getScorerConfig();return{project_name:this.configuration.projectName,eval_name:o,scorer:a,model:n,organization_id:this.configuration.organizationId,trace_id:s,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 p.builder().endpoint(e).apiKey(this.configuration.apiKey).organizationId(this.configuration.organizationId).projectId(t).build()}createEvaluationRun(t,e,s,i,o){let n=`async_evaluate_${o||Date.now()}`,a=s||M,c=t.getScorerConfig();return{project_name:this.configuration.projectName,eval_name:n,examples:[e],custom_scorers:[],judgment_scorers:[c],model:a,trace_id:i,trace_span_id:o}}async enqueueEvaluation(t){if(!this.apiClient){r.info("API client not available, skipping evaluation enqueue");return}try{await this.apiClient.addToRunEvalQueueExamples(t),r.info(`Enqueuing evaluation run: ${t.eval_name}`)}catch(e){r.error(`Failed to enqueue evaluation run: ${e instanceof Error?e.message:String(e)}`)}}_observe(t,e="span"){return J.bind(J.active(),(...s)=>{let i=t.name||"anonymous";return this.tracer.startActiveSpan(i,(o)=>{return this._executeWithSpan(o,t,s,e)})})}_executeWithSpan(t,e,s,i){try{t.setAttribute(u.AttributeKeys.JUDGMENT_SPAN_KIND,i);try{let n=I(e);if(n.length===s.length){let a={};n.forEach((c,_)=>{a[c]=s[_]}),t.setAttribute(u.AttributeKeys.JUDGMENT_INPUT,this.serializer(a))}}catch(n){r.warn(`Failed to parse function args: ${n instanceof Error?n.message:String(n)}`)}let o=e(...s);if(o instanceof Promise)return o.then((n)=>{return t.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(n)),n}).catch((n)=>{throw t.recordException(n),n}).finally(()=>{t.end()});else return t.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(o)),t.end(),o}catch(o){throw t.recordException(o),t.end(),o}}observe(t,e){try{if(typeof t==="function"){let s=this._observe(t,e||"span");return Object.defineProperty(s,"name",{value:t.name}),s}return(s,i,o)=>{try{if(!o)return;let n=o.value,a=this._observe(n,t||"span");return Object.defineProperty(a,"name",{value:n.name}),o.value=a,o}catch(n){r.error(`Failed to wrap method with observe: ${n instanceof Error?n.message:String(n)}`)}}}catch(s){if(r.error(`Failed to observe function: ${s instanceof Error?s.message:String(s)}`),typeof t==="function")return t;return()=>{}}}async shutdown(){}}var y="opentelemetry.instrumentation.judgeval";class x{projectName;apiKey;organizationId;apiUrl;enableEvaluation;tracerName;resourceAttributes;initialize;constructor(t,e,s,i,o,n=y,a={},c=!0){this.projectName=t;this.apiKey=e;this.organizationId=s;this.apiUrl=i;this.enableEvaluation=o;this.tracerName=n;this.resourceAttributes=a;this.initialize=c}static createDefault(t){return new U().projectName(t).build()}static builder(){return new U}}class U{_projectName;_apiKey=l;_organizationId=E;_apiUrl=d;_enableEvaluation=!0;_tracerName=y;_resourceAttributes={};_initialize=!0;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}resourceAttributes(t){return this._resourceAttributes=t,this}initialize(t){return this._initialize=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 x(this._projectName,this._apiKey,this._organizationId,this._apiUrl,this._enableEvaluation,this._tracerName,this._resourceAttributes,this._initialize)}}function Lt(t){return{example_id:void 0,created_at:new Date().toISOString(),name:null,...t}}var X;((_)=>{_.INPUT="input";_.ACTUAL_OUTPUT="actual_output";_.EXPECTED_OUTPUT="expected_output";_.CONTEXT="context";_.RETRIEVAL_CONTEXT="retrieval_context";_.TOOLS_CALLED="tools_called";_.EXPECTED_TOOLS="expected_tools";_.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,s=t.score;return e!=null&&s!=null&&s>=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 L;((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"})(L||={});function gt(t,e){let s=$();return s.scoreType=t,s.name=t,s.score_type=t,s.requiredParams=e,s.setThreshold=(i)=>{if(i<0||i>1)throw Error(`Threshold must be between 0 and 1, got: ${i}`);s.threshold=i},s.getScoreType=()=>{return s.scoreType},s.setRequiredParams=(i)=>{s.requiredParams=i},s}class R extends Error{statusCode;constructor(t,e){super(e);this.statusCode=t;this.name="JudgmentAPIError"}}async function S(t,e,s,i,o=l||"",n=E||"",a){if(!d||!o||!n)throw Error("Missing required API credentials");return(await new f(d,o,n).saveScorer({name:t,prompt:e,threshold:s,options:i,is_trace:a})).name}async function O(t,e=l||"",s=E||""){if(!d||!e||!s)throw Error("Missing required API credentials");let o=await new f(d,e,s).fetchScorers({names:[t]});if(o.scorers.length===0)throw new R(404,`Scorer with name ${t} not found`);let{created_at:n,updated_at:a,...c}=o.scorers[0];return c}async function A(t,e=l||"",s=E||""){if(!d||!e||!s)throw Error("Missing required API credentials");return(await new f(d,e,s).scorerExists({name:t})).exists}class w{scoreType;name;prompt;threshold;options;judgmentApiKey;organizationId;requiredParams;score_type;class_name;model;score;error;strict_mode;constructor(t,e,s,i,o,n,a=l||"",c=E||""){this.scoreType=t,this.name=e,this.prompt=s,this.threshold=i,this.requiredParams=o,this.options=n,this.judgmentApiKey=a,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||"",s=E||""){let i=await O(t,e,s),o=i.is_trace===!0,n=this.prototype.scoreType==="Trace Prompt Scorer";if(o!==n)throw new R(400,`Scorer with name ${t} is not a ${this.name}`);let a=o?"Trace Prompt Scorer":"Prompt Scorer";return new this(a,i.name,i.prompt,i.threshold,[],i.options,e,s)}static async create(t,e,s=0.5,i,o=l||"",n=E||""){if(await A(t,o,n))throw new R(400,`Scorer with name ${t} already exists. Either use the existing scorer with the get() method or use a new name.`);let a=this.prototype.scoreType==="Trace Prompt Scorer",c=a?"Trace Prompt Scorer":"Prompt Scorer";return await S(t,e,s,i,o,n,a),new this(c,t,e,s,[],i,o,n)}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 S(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 F extends w{constructor(t,e,s,i,o=[],n,a=l||"",c=E||""){super(t,e,s,i,o,n,a,c)}}class H extends w{constructor(t,e,s,i,o=[],n,a=l||"",c=E||""){super(t,e,s,i,o,n,a,c)}}import{resourceFromAttributes as Z}from"@opentelemetry/resources";import{BatchSpanProcessor as K,WebTracerProvider as tt}from"@opentelemetry/sdk-trace-web";var k="0.4.0";var D=k;class P 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]:D,...this.configuration.resourceAttributes,...t.resourceAttributes},s=await this.getSpanExporter();return this.webTracerProvider=new tt({resource:Z(e),spanProcessors:[new K(s)],...t}),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 P(t));return T.instances.get(e)}static async createDefault(t){let e=x.builder().projectName(t).build(),s=new P(e);if(e.initialize)await s.initialize();return s}static async createWithConfiguration(t){let e=new P(t);if(t.initialize)await e.initialize();return e}}import{resourceFromAttributes as et}from"@opentelemetry/resources";import{NodeSDK as st}from"@opentelemetry/sdk-node";class v 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]:D,...this.configuration.resourceAttributes,...t.resourceAttributes},s=await this.getSpanExporter();return this.nodeSDK=new st({resource:et(e),instrumentations:t.instrumentations,traceExporter:s,...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 v(t));return T.instances.get(e)}static async createDefault(t){let e=x.builder().projectName(t).enableEvaluation(!0).build(),s=new v(e);if(e.initialize)await s.initialize();return s}static async createWithConfiguration(t){let e=new v(t);if(t.initialize)await e.initialize();return e}async shutdown(){if(!this.nodeSDK){r.warn("Node SDK not initialized, skipping shutdown");return}await this.nodeSDK.shutdown()}}export{A as scorerExists,S as pushPromptScorer,I as parseFunctionArgs,O as fetchPromptScorer,$ as createBaseScorer,gt as createAPIScorer,U as TracerConfigurationBuilder,x as TracerConfiguration,T as Tracer,H as TracePromptScorer,F as PromptScorer,u as OpenTelemetryKeys,v as NodeTracer,h as NoOpSpanExporter,r as Logger,p as JudgmentSpanExporter,f as JudgmentApiClient,R as JudgmentAPIError,E as JUDGMENT_ORG_ID,ot as JUDGMENT_NO_COLOR,G as JUDGMENT_LOG_LEVEL,rt as JUDGMENT_ENABLE_MONITORING,it as JUDGMENT_ENABLE_EVALUATIONS,M as JUDGMENT_DEFAULT_GPT_MODEL,d as JUDGMENT_API_URL,l as JUDGMENT_API_KEY,X as ExampleParams,Lt as Example,P as BrowserTracer,w as BasePromptScorer,L as APIScorerType};
3
3
 
4
- //# debugId=B94AA7E5BEFF626164756E2164756E21
4
+ //# debugId=9F53F507DF440A0C64756E2164756E21
5
5
  //# sourceMappingURL=index.mjs.map
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/tracer/exporters/JudgmentSpanExporter.ts", "../src/tracer/exporters/NoOpSpanExporter.ts", "../src/tracer/OpenTelemetryKeys.ts", "../src/tracer/Tracer.ts", "../src/env.ts", "../src/internal/api/index.ts", "../src/utils/annotate.ts", "../src/utils/logger.ts", "../src/constants.ts", "../src/tracer/TracerConfiguration.ts", "../src/data/example.ts", "../src/data/example-params.ts", "../src/scorers/base-scorer.ts", "../src/scorers/api-scorer.ts", "../src/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.ts", "../src/scorers/api_scorers/prompt_scorer/base-prompt-scorer.ts", "../src/scorers/api_scorers/prompt_scorer/prompt-scorer.ts", "../src/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.ts", "../src/tracer/BrowserTracer.ts", "../src/version.ts", "../src/tracer/NodeTracer.ts"],
3
+ "sources": ["../src/tracer/exporters/JudgmentSpanExporter.ts", "../src/env.ts", "../src/utils/logger.ts", "../src/tracer/exporters/NoOpSpanExporter.ts", "../src/tracer/OpenTelemetryKeys.ts", "../src/tracer/Tracer.ts", "../src/internal/api/index.ts", "../src/utils/annotate.ts", "../src/constants.ts", "../src/tracer/TracerConfiguration.ts", "../src/data/example.ts", "../src/data/example-params.ts", "../src/scorers/base-scorer.ts", "../src/scorers/api-scorer.ts", "../src/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.ts", "../src/scorers/api_scorers/prompt_scorer/base-prompt-scorer.ts", "../src/scorers/api_scorers/prompt_scorer/prompt-scorer.ts", "../src/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.ts", "../src/tracer/BrowserTracer.ts", "../src/version.ts", "../src/tracer/NodeTracer.ts"],
4
4
  "sourcesContent": [
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",
5
+ "import { ExportResult } from \"@opentelemetry/core\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../../utils/logger\";\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 private readonly projectId: string;\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.projectId = projectId;\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 Logger.info(`JudgmentSpanExporter: Exported ${spans.length} spans`);\n this.delegate.export(spans, resultCallback);\n }\n\n /**\n * Shuts down the exporter.\n */\n shutdown(): Promise<void> {\n Logger.info(\n `JudgmentSpanExporter: Shutting down exporter for project ${this.projectId}`,\n );\n return this.delegate.shutdown();\n }\n\n /**\n * Forces the exporter to flush any pending spans.\n */\n forceFlush(): Promise<void> {\n Logger.info(\n `JudgmentSpanExporter: Force flushing spans for project ${this.projectId}`,\n );\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
+ "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\");\nexport const JUDGMENT_LOG_LEVEL = getEnvVar(\"JUDGMENT_LOG_LEVEL\", \"warn\");\n",
7
+ "import { JUDGMENT_LOG_LEVEL } from \"../env\";\n\nexport class Logger {\n private static readonly RESET = \"\\x1b[0m\";\n private static readonly RED = \"\\x1b[31m\";\n private static readonly YELLOW = \"\\x1b[33m\";\n private static readonly GRAY = \"\\x1b[90m\";\n\n public static Level = {\n DEBUG: 0,\n INFO: 1,\n WARNING: 2,\n ERROR: 3,\n CRITICAL: 4,\n } as const;\n\n private static initialized = false;\n private static currentLevel: number = Logger.Level.WARNING;\n private static useColor = true;\n\n private static initialize(): void {\n if (!Logger.initialized) {\n const noColor = process.env.JUDGMENT_NO_COLOR;\n Logger.useColor = !noColor && process.stdout.isTTY;\n\n const logLevel = JUDGMENT_LOG_LEVEL.toLowerCase();\n if (logLevel) {\n const levelMap: Record<string, number> = {\n debug: Logger.Level.DEBUG,\n info: Logger.Level.INFO,\n warning: Logger.Level.WARNING,\n warn: Logger.Level.WARNING,\n error: Logger.Level.ERROR,\n critical: Logger.Level.CRITICAL,\n };\n Logger.currentLevel = levelMap[logLevel] ?? Logger.Level.WARNING;\n }\n\n Logger.initialized = true;\n }\n }\n\n public static setLevel(level: number): void {\n Logger.currentLevel = level;\n }\n\n public static setUseColor(useColor: boolean): void {\n Logger.useColor = useColor;\n }\n\n private static log(level: number, message: string): void {\n Logger.initialize();\n\n if (level < Logger.currentLevel) {\n return;\n }\n\n const timestamp = new Date()\n .toISOString()\n .replace(\"T\", \" \")\n .substring(0, 19);\n const levelName =\n Object.keys(Logger.Level).find(\n (key) => Logger.Level[key as keyof typeof Logger.Level] === level,\n ) || \"UNKNOWN\";\n let formattedMessage = `${timestamp} - judgeval - ${levelName} - ${message}`;\n\n if (Logger.useColor) {\n const color =\n level === Logger.Level.DEBUG || level === Logger.Level.INFO\n ? Logger.GRAY\n : level === Logger.Level.WARNING\n ? Logger.YELLOW\n : Logger.RED;\n formattedMessage = `${color}${formattedMessage}${Logger.RESET}`;\n }\n\n const output =\n level >= Logger.Level.ERROR ? process.stderr : process.stdout;\n output.write(formattedMessage + \"\\n\");\n }\n\n public static debug(message: string): void {\n Logger.log(Logger.Level.DEBUG, message);\n }\n\n public static info(message: string): void {\n Logger.log(Logger.Level.INFO, message);\n }\n\n public static warning(message: string): void {\n Logger.log(Logger.Level.WARNING, message);\n }\n\n public static warn(message: string): void {\n Logger.log(Logger.Level.WARNING, message);\n }\n\n public static error(message: string): void {\n Logger.log(Logger.Level.ERROR, message);\n }\n\n public static critical(message: string): void {\n Logger.log(Logger.Level.CRITICAL, message);\n }\n}\n",
6
8
  "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
9
  "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 { 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
- "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
+ "import {\n context,\n Tracer as OpenTelemetryTracer,\n Span,\n trace,\n} from \"@opentelemetry/api\";\nimport { 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 = string;\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 private spanExporter: JudgmentSpanExporter | NoOpSpanExporter | 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 // Initialization is handled by the subclasses, since operation requires IO.\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 public async getSpanExporter(): Promise<\n JudgmentSpanExporter | NoOpSpanExporter\n > {\n if (!this.spanExporter) {\n try {\n const projectId = await this.resolveProjectId();\n this.spanExporter = 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 this.spanExporter = new NoOpSpanExporter();\n }\n }\n\n return this.spanExporter;\n }\n\n public setSpanKind(kind: SpanKind): void {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.info(\"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.info(\"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.info(\"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 try {\n if (!this.configuration.enableEvaluation) {\n return;\n }\n\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.info(\"No active span found, skipping asyncEvaluate\");\n return;\n }\n if (!currentSpan.isRecording()) {\n Logger.info(\"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 } catch (error) {\n Logger.error(\n `Failed to asyncEvaluate: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public asyncTraceEvaluate(scorer: BaseScorer, model?: string): void {\n try {\n if (!this.configuration.enableEvaluation) {\n return;\n }\n\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.info(\"No active span found, skipping asyncTraceEvaluate\");\n return;\n }\n if (!currentSpan.isRecording()) {\n Logger.info(\n \"Active span is not recording, skipping asyncTraceEvaluate\",\n );\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 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 asyncTraceEvaluate: ${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.info(\"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 private _observe<TArgs extends any[], TResult>(\n func: (...args: TArgs) => TResult,\n spanKind: SpanKind = \"span\",\n ): (...args: TArgs) => TResult {\n return context.bind(context.active(), (...args: TArgs): TResult => {\n const spanName = func.name || \"anonymous\";\n return this.tracer.startActiveSpan(spanName, (span) => {\n return this._executeWithSpan(span, func, args, spanKind);\n });\n });\n }\n\n private _executeWithSpan<TArgs extends any[], TResult>(\n span: Span,\n func: (...args: TArgs) => TResult,\n args: TArgs,\n spanKind: SpanKind,\n ): TResult {\n try {\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_SPAN_KIND,\n spanKind,\n );\n\n try {\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 } catch (error) {\n Logger.warn(\n `Failed to parse function args: ${error instanceof Error ? error.message : String(error)}`,\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 return res;\n })\n .catch((err) => {\n span.recordException(err as Error);\n throw err;\n })\n .finally(() => {\n span.end();\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 public observe(\n spanKind?: SpanKind,\n ): (\n target: any,\n propertyKey: string | symbol,\n descriptor?: PropertyDescriptor,\n ) => void;\n public observe<TArgs extends any[], TResult>(\n func: (...args: TArgs) => TResult,\n spanKind?: SpanKind,\n ): (...args: TArgs) => TResult;\n public observe<TArgs extends any[], TResult>(\n funcOrSpanKind?: ((...args: TArgs) => TResult) | SpanKind,\n spanKind?: SpanKind,\n ): any {\n try {\n if (typeof funcOrSpanKind === \"function\") {\n const wrapped = this._observe(funcOrSpanKind, spanKind || \"span\");\n Object.defineProperty(wrapped, \"name\", { value: funcOrSpanKind.name });\n return wrapped;\n }\n return (\n _target: any,\n _propertyKey: string | symbol,\n descriptor?: PropertyDescriptor,\n ) => {\n try {\n if (!descriptor) return;\n const originalMethod = descriptor.value;\n const wrapped = this._observe(\n originalMethod,\n funcOrSpanKind || \"span\",\n );\n Object.defineProperty(wrapped, \"name\", {\n value: originalMethod.name,\n });\n descriptor.value = wrapped;\n return descriptor;\n } catch (error) {\n Logger.error(\n `Failed to wrap method with observe: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n };\n } catch (error) {\n Logger.error(\n `Failed to observe function: ${error instanceof Error ? error.message : String(error)}`,\n );\n if (typeof funcOrSpanKind === \"function\") {\n return funcOrSpanKind;\n }\n return () => {};\n }\n }\n\n public async shutdown(): Promise<void> {}\n}\n",
10
11
  "/**\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
12
  "// 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",
12
- "export class Logger {\n private static readonly RESET = \"\\x1b[0m\";\n private static readonly RED = \"\\x1b[31m\";\n private static readonly YELLOW = \"\\x1b[33m\";\n private static readonly GRAY = \"\\x1b[90m\";\n\n public static Level = {\n DEBUG: 0,\n INFO: 1,\n WARNING: 2,\n ERROR: 3,\n CRITICAL: 4,\n } as const;\n\n private static initialized = false;\n private static currentLevel: number = Logger.Level.INFO;\n private static useColor = true;\n\n private static initialize(): void {\n if (!Logger.initialized) {\n const noColor = process.env.JUDGMENT_NO_COLOR;\n Logger.useColor = !noColor && process.stdout.isTTY;\n Logger.initialized = true;\n }\n }\n\n public static setLevel(level: number): void {\n Logger.currentLevel = level;\n }\n\n public static setUseColor(useColor: boolean): void {\n Logger.useColor = useColor;\n }\n\n private static log(level: number, message: string): void {\n Logger.initialize();\n\n if (level < Logger.currentLevel) {\n return;\n }\n\n const timestamp = new Date()\n .toISOString()\n .replace(\"T\", \" \")\n .substring(0, 19);\n const levelName =\n Object.keys(Logger.Level).find(\n (key) => Logger.Level[key as keyof typeof Logger.Level] === level,\n ) || \"UNKNOWN\";\n let formattedMessage = `${timestamp} - judgeval - ${levelName} - ${message}`;\n\n if (Logger.useColor) {\n const color =\n level === Logger.Level.DEBUG || level === Logger.Level.INFO\n ? Logger.GRAY\n : level === Logger.Level.WARNING\n ? Logger.YELLOW\n : Logger.RED;\n formattedMessage = `${color}${formattedMessage}${Logger.RESET}`;\n }\n\n const output =\n level >= Logger.Level.ERROR ? process.stderr : process.stdout;\n output.write(formattedMessage + \"\\n\");\n }\n\n public static debug(message: string): void {\n Logger.log(Logger.Level.DEBUG, message);\n }\n\n public static info(message: string): void {\n Logger.log(Logger.Level.INFO, message);\n }\n\n public static warning(message: string): void {\n Logger.log(Logger.Level.WARNING, message);\n }\n\n public static warn(message: string): void {\n Logger.log(Logger.Level.WARNING, message);\n }\n\n public static error(message: string): void {\n Logger.log(Logger.Level.ERROR, message);\n }\n\n public static critical(message: string): void {\n Logger.log(Logger.Level.CRITICAL, message);\n }\n}\n",
13
13
  "export const JUDGEVAL_TRACER_INSTRUMENTING_MODULE_NAME =\n \"opentelemetry.instrumentation.judgeval\" as const;\n",
14
- "import { JUDGEVAL_TRACER_INSTRUMENTING_MODULE_NAME } from \"../constants\";\nimport { JUDGMENT_API_KEY, JUDGMENT_API_URL, JUDGMENT_ORG_ID } from \"../env\";\n\n/**\n * Configuration for the Judgment Tracer that controls how tracing and evaluation behave.\n *\n * This class encapsulates all configuration parameters needed to initialize a Tracer.\n *\n * @example\n * ```typescript\n * const config = TracerConfiguration.builder()\n * .projectName(\"my-project\")\n * .apiKey(\"your-api-key\")\n * .organizationId(\"your-org-id\")\n * .enableEvaluation(true)\n * .build();\n *\n * const tracer = Tracer.createWithConfiguration(config);\n * ```\n */\nexport class TracerConfiguration {\n constructor(\n public readonly projectName: string,\n public readonly apiKey: string,\n public readonly organizationId: string,\n public readonly apiUrl: string,\n public readonly enableEvaluation: boolean,\n public readonly tracerName: string = JUDGEVAL_TRACER_INSTRUMENTING_MODULE_NAME,\n ) {}\n\n /**\n * Creates a default configuration with the given project name.\n *\n * This method uses default values from environment variables:\n * - API Key: JUDGMENT_API_KEY\n * - Organization ID: JUDGMENT_ORG_ID\n * - API URL: JUDGMENT_API_URL\n * - Evaluation: enabled\n *\n * @param projectName the name of the project\n * @returns a new TracerConfiguration with default values\n * @throws Error if project name is null or empty\n */\n public static createDefault(projectName: string): TracerConfiguration {\n return new TracerConfigurationBuilder().projectName(projectName).build();\n }\n\n public static builder(): TracerConfigurationBuilder {\n return new TracerConfigurationBuilder();\n }\n}\n\n/**\n * Builder for creating TracerConfiguration instances.\n *\n * @example\n * ```typescript\n * const config = TracerConfiguration.builder()\n * .projectName(\"my-project\")\n * .apiKey(\"custom-api-key\")\n * .organizationId(\"custom-org-id\")\n * .apiUrl(\"https://custom-api.judgmentlabs.ai\")\n * .enableEvaluation(false)\n * .build();\n * ```\n */\nexport class TracerConfigurationBuilder {\n private _projectName?: string;\n private _apiKey: string | null = JUDGMENT_API_KEY;\n private _organizationId: string | null = JUDGMENT_ORG_ID;\n private _apiUrl: string = JUDGMENT_API_URL;\n private _enableEvaluation: boolean = true;\n private _tracerName: string = JUDGEVAL_TRACER_INSTRUMENTING_MODULE_NAME;\n\n public projectName(projectName: string): this {\n this._projectName = projectName;\n return this;\n }\n\n public apiKey(apiKey: string): this {\n this._apiKey = apiKey;\n return this;\n }\n\n public organizationId(organizationId: string): this {\n this._organizationId = organizationId;\n return this;\n }\n\n public apiUrl(apiUrl: string): this {\n this._apiUrl = apiUrl;\n return this;\n }\n\n public enableEvaluation(enableEvaluation: boolean): this {\n this._enableEvaluation = enableEvaluation;\n return this;\n }\n\n public tracerName(tracerName: string): this {\n this._tracerName = tracerName;\n return this;\n }\n\n public build(): TracerConfiguration {\n if (!this._projectName) {\n throw new Error(\"Project name is required\");\n }\n\n if (!this._apiKey) {\n throw new Error(\"API key is required\");\n }\n\n if (!this._organizationId) {\n throw new Error(\"Organization ID is required\");\n }\n\n if (!this._apiUrl) {\n throw new Error(\"API URL is required\");\n }\n\n return new TracerConfiguration(\n this._projectName,\n this._apiKey,\n this._organizationId,\n this._apiUrl,\n this._enableEvaluation,\n this._tracerName,\n );\n }\n}\n",
15
- "import { Example as ExampleModel } from \"../internal/api/models/Example\";\n\nexport type Example<T extends Record<string, any> = Record<string, any>> =\n ExampleModel & T;\n\nexport function createExample<T extends Record<string, any>>(\n properties: T,\n): Example<T> {\n const example: Example<T> = {\n example_id: undefined,\n created_at: new Date().toISOString(),\n name: null,\n ...properties,\n } as Example<T>;\n\n return example;\n}\n",
14
+ "import { JUDGEVAL_TRACER_INSTRUMENTING_MODULE_NAME } from \"../constants\";\nimport { JUDGMENT_API_KEY, JUDGMENT_API_URL, JUDGMENT_ORG_ID } from \"../env\";\n\n/**\n * Configuration for the Judgment Tracer that controls how tracing and evaluation behave.\n *\n * This class encapsulates all configuration parameters needed to initialize a Tracer.\n *\n * @example\n * ```typescript\n * const config = TracerConfiguration.builder()\n * .projectName(\"my-project\")\n * .apiKey(\"your-api-key\")\n * .organizationId(\"your-org-id\")\n * .enableEvaluation(true)\n * .resourceAttributes({\n * \"custom.service.version\": \"1.0.0\",\n * \"custom.environment\": \"production\"\n * })\n * .initialize(true)\n * .build();\n *\n * const tracer = NodeTracer.createWithConfiguration(config);\n * // Tracer is ready to use immediately\n * ```\n */\nexport class TracerConfiguration {\n constructor(\n public readonly projectName: string,\n public readonly apiKey: string,\n public readonly organizationId: string,\n public readonly apiUrl: string,\n public readonly enableEvaluation: boolean,\n public readonly tracerName: string = JUDGEVAL_TRACER_INSTRUMENTING_MODULE_NAME,\n public readonly resourceAttributes: Record<string, unknown> = {},\n public readonly initialize: boolean = true,\n ) {}\n\n /**\n * Creates a default configuration with the given project name.\n *\n * This method uses default values from environment variables:\n * - API Key: JUDGMENT_API_KEY\n * - Organization ID: JUDGMENT_ORG_ID\n * - API URL: JUDGMENT_API_URL\n * - Evaluation: enabled\n *\n * @param projectName the name of the project\n * @returns a new TracerConfiguration with default values\n * @throws Error if project name is null or empty\n */\n public static createDefault(projectName: string): TracerConfiguration {\n return new TracerConfigurationBuilder().projectName(projectName).build();\n }\n\n public static builder(): TracerConfigurationBuilder {\n return new TracerConfigurationBuilder();\n }\n}\n\n/**\n * Builder for creating TracerConfiguration instances.\n *\n * @example\n * ```typescript\n * const config = TracerConfiguration.builder()\n * .projectName(\"my-project\")\n * .apiKey(\"custom-api-key\")\n * .organizationId(\"custom-org-id\")\n * .apiUrl(\"https://custom-api.judgmentlabs.ai\")\n * .enableEvaluation(false)\n * .resourceAttributes({\n * \"custom.service.version\": \"2.0.0\",\n * \"custom.region\": \"us-west-2\"\n * })\n * .initialize(false)\n * .build();\n *\n * const tracer = NodeTracer.createWithConfiguration(config);\n * await tracer.initialize({\n * instrumentations: []\n * });\n * ```\n */\nexport class TracerConfigurationBuilder {\n private _projectName?: string;\n private _apiKey: string | null = JUDGMENT_API_KEY;\n private _organizationId: string | null = JUDGMENT_ORG_ID;\n private _apiUrl: string = JUDGMENT_API_URL;\n private _enableEvaluation: boolean = true;\n private _tracerName: string = JUDGEVAL_TRACER_INSTRUMENTING_MODULE_NAME;\n private _resourceAttributes: Record<string, unknown> = {};\n private _initialize: boolean = true;\n\n public projectName(projectName: string): this {\n this._projectName = projectName;\n return this;\n }\n\n public apiKey(apiKey: string): this {\n this._apiKey = apiKey;\n return this;\n }\n\n public organizationId(organizationId: string): this {\n this._organizationId = organizationId;\n return this;\n }\n\n public apiUrl(apiUrl: string): this {\n this._apiUrl = apiUrl;\n return this;\n }\n\n public enableEvaluation(enableEvaluation: boolean): this {\n this._enableEvaluation = enableEvaluation;\n return this;\n }\n\n public tracerName(tracerName: string): this {\n this._tracerName = tracerName;\n return this;\n }\n\n public resourceAttributes(resourceAttributes: Record<string, unknown>): this {\n this._resourceAttributes = resourceAttributes;\n return this;\n }\n\n public initialize(initialize: boolean): this {\n this._initialize = initialize;\n return this;\n }\n\n public build(): TracerConfiguration {\n if (!this._projectName) {\n throw new Error(\"Project name is required\");\n }\n\n if (!this._apiKey) {\n throw new Error(\"API key is required\");\n }\n\n if (!this._organizationId) {\n throw new Error(\"Organization ID is required\");\n }\n\n if (!this._apiUrl) {\n throw new Error(\"API URL is required\");\n }\n\n return new TracerConfiguration(\n this._projectName,\n this._apiKey,\n this._organizationId,\n this._apiUrl,\n this._enableEvaluation,\n this._tracerName,\n this._resourceAttributes,\n this._initialize,\n );\n }\n}\n",
15
+ "import { Example as ExampleModel } from \"../internal/api/models/Example\";\n\nexport type Example<T extends Record<string, any> = Record<string, any>> =\n ExampleModel & T;\n\nexport function Example<T extends Record<string, any>>(\n properties: T,\n): Example<T> {\n const example: Example<T> = {\n example_id: undefined,\n created_at: new Date().toISOString(),\n name: null,\n ...properties,\n } as Example<T>;\n\n return example;\n}\n",
16
16
  "export enum ExampleParams {\n INPUT = \"input\",\n ACTUAL_OUTPUT = \"actual_output\",\n EXPECTED_OUTPUT = \"expected_output\",\n CONTEXT = \"context\",\n RETRIEVAL_CONTEXT = \"retrieval_context\",\n TOOLS_CALLED = \"tools_called\",\n EXPECTED_TOOLS = \"expected_tools\",\n ADDITIONAL_METADATA = \"additional_metadata\",\n}\n\nexport type ExampleParamKeys = keyof typeof ExampleParams;\nexport type ExampleParamValues = `${ExampleParams}`;\n",
17
17
  "import { ScorerConfig } from \"../internal/api/models\";\nimport { BaseScorer as BaseScorerModel } from \"../internal/api/models/BaseScorer\";\n\nexport type BaseScorer = BaseScorerModel & {\n addModel: (model: string) => void;\n successCheck: () => boolean;\n getRequiredParams: () => string[];\n getScorerConfig: () => ScorerConfig;\n};\n\nexport function createBaseScorer(): BaseScorer {\n const scorer: BaseScorer = {\n score_type: \"\",\n class_name: \"\",\n name: \"\",\n addModel: (model: string) => {\n scorer.model = model;\n },\n successCheck: () => {\n if (scorer.error != null) {\n return false;\n }\n if (scorer.score == null) {\n return false;\n }\n const threshold = scorer.threshold ?? 0.5;\n const score = scorer.score;\n return threshold != null && score != null && score >= threshold;\n },\n getRequiredParams: () => {\n return [];\n },\n getScorerConfig: () => {\n return {\n score_type: scorer.score_type,\n name: scorer.name,\n threshold: scorer.threshold ?? 0.5,\n strict_mode: scorer.strict_mode ?? false,\n required_params: [],\n kwargs: {},\n };\n },\n };\n\n scorer.class_name = \"BaseScorer\";\n scorer.name = scorer.class_name;\n if (scorer.strict_mode === true) {\n scorer.threshold = 1.0;\n }\n\n return scorer;\n}\n",
18
18
  "import { BaseScorer, createBaseScorer } from \"./base-scorer\";\n\nexport enum APIScorerType {\n PROMPT_SCORER = \"Prompt Scorer\",\n TRACE_PROMPT_SCORER = \"Trace Prompt Scorer\",\n FAITHFULNESS = \"Faithfulness\",\n ANSWER_RELEVANCY = \"Answer Relevancy\",\n ANSWER_CORRECTNESS = \"Answer Correctness\",\n INSTRUCTION_ADHERENCE = \"Instruction Adherence\",\n EXECUTION_ORDER = \"Execution Order\",\n TOOL_ORDER = \"Tool Order\",\n CLASSIFIER = \"Classifier\",\n TOOL_DEPENDENCY = \"Tool Dependency\",\n CUSTOM = \"Custom\",\n}\n\nexport type APIScorer<\n T extends APIScorerType = APIScorerType,\n P extends readonly string[] = readonly string[],\n> = BaseScorer & {\n scoreType: T;\n requiredParams: P;\n setThreshold: (threshold: number) => void;\n getScoreType: () => T;\n setRequiredParams: (params: P) => void;\n};\n\nexport function createAPIScorer<\n T extends APIScorerType,\n P extends readonly string[],\n>(scoreType: T, requiredParams: P): APIScorer<T, P> {\n const scorer = createBaseScorer() as APIScorer<T, P>;\n\n scorer.scoreType = scoreType;\n scorer.name = scoreType;\n scorer.score_type = scoreType;\n scorer.requiredParams = requiredParams;\n\n scorer.setThreshold = (threshold: number) => {\n if (threshold < 0 || threshold > 1) {\n throw new Error(`Threshold must be between 0 and 1, got: ${threshold}`);\n }\n scorer.threshold = threshold;\n };\n\n scorer.getScoreType = () => {\n return scorer.scoreType;\n };\n\n scorer.setRequiredParams = (params: P) => {\n scorer.requiredParams = params;\n };\n\n return scorer;\n}\n",
@@ -20,11 +20,11 @@
20
20
  "import { JUDGMENT_API_KEY, JUDGMENT_ORG_ID } from \"../../../env\";\nimport { ScorerConfig } from \"../../../internal/api/models\";\nimport { APIScorer, APIScorerType } from \"../../api-scorer\";\nimport {\n fetchPromptScorer,\n JudgmentAPIError,\n pushPromptScorer,\n scorerExists,\n} from \"./prompt-scorer-utils\";\n\nexport abstract class BasePromptScorer\n implements APIScorer<APIScorerType, readonly string[]>\n{\n public scoreType: APIScorerType;\n public name: string;\n public prompt: string;\n public threshold: number;\n public options?: Record<string, number> | null;\n public judgmentApiKey: string;\n public organizationId: string;\n public requiredParams: readonly string[];\n public score_type: string;\n public class_name: string;\n public model?: string;\n public score?: number;\n public error?: string | null;\n public strict_mode?: boolean;\n\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 this.scoreType = scoreType;\n this.name = name;\n this.prompt = prompt;\n this.threshold = threshold;\n this.requiredParams = requiredParams;\n this.options = options;\n this.judgmentApiKey = judgmentApiKey;\n this.organizationId = organizationId;\n this.score_type = scoreType;\n this.class_name = \"BasePromptScorer\";\n this.model = undefined;\n this.score = undefined;\n this.error = null;\n this.strict_mode = false;\n }\n score_breakdown?: Record<string, any> | null | undefined;\n reason?: string | null | undefined;\n using_native_model?: boolean | null | undefined;\n success?: boolean | null | undefined;\n model_client?: any;\n additional_metadata?: Record<string, any> | null | undefined;\n user?: string | null | undefined;\n server_hosted?: boolean | undefined;\n\n static async get<T extends BasePromptScorer>(\n this: new (...args: any[]) => T,\n name: string,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n ): Promise<T> {\n const config = await fetchPromptScorer(\n name,\n judgmentApiKey,\n organizationId,\n );\n\n const isTrace = config.is_trace === true;\n const expectedIsTrace =\n this.prototype.scoreType === APIScorerType.TRACE_PROMPT_SCORER;\n\n if (isTrace !== expectedIsTrace) {\n throw new JudgmentAPIError(\n 400,\n `Scorer with name ${name} is not a ${this.name}`,\n );\n }\n\n const scoreType = isTrace\n ? APIScorerType.TRACE_PROMPT_SCORER\n : APIScorerType.PROMPT_SCORER;\n\n return new this(\n scoreType,\n config.name, // Use config.name instead of name parameter\n config.prompt,\n config.threshold,\n [],\n config.options,\n judgmentApiKey,\n organizationId,\n );\n }\n\n static async create<T extends BasePromptScorer>(\n this: new (...args: any[]) => T,\n name: string,\n prompt: string,\n threshold: number = 0.5,\n options?: Record<string, number> | null,\n judgmentApiKey: string = JUDGMENT_API_KEY || \"\",\n organizationId: string = JUDGMENT_ORG_ID || \"\",\n ): Promise<T> {\n if (await scorerExists(name, judgmentApiKey, organizationId)) {\n throw new JudgmentAPIError(\n 400,\n `Scorer with name ${name} already exists. Either use the existing scorer with the get() method or use a new name.`,\n );\n }\n\n const isTrace =\n this.prototype.scoreType === APIScorerType.TRACE_PROMPT_SCORER;\n const scoreType = isTrace\n ? APIScorerType.TRACE_PROMPT_SCORER\n : APIScorerType.PROMPT_SCORER;\n\n await pushPromptScorer(\n name,\n prompt,\n threshold,\n options,\n judgmentApiKey,\n organizationId,\n isTrace,\n );\n\n return new this(\n scoreType,\n name,\n prompt,\n threshold,\n [],\n options,\n judgmentApiKey,\n organizationId,\n );\n }\n\n async updateThreshold(threshold: number): Promise<void> {\n this.setThreshold(threshold);\n await this.pushPromptScorer();\n }\n\n async setPrompt(prompt: string): Promise<void> {\n this.prompt = prompt;\n await this.pushPromptScorer();\n }\n\n async setOptions(options: Record<string, number> | null): Promise<void> {\n this.options = options;\n await this.pushPromptScorer();\n }\n\n async appendToPrompt(promptAddition: string): Promise<void> {\n this.prompt += promptAddition;\n await this.pushPromptScorer();\n }\n\n getThreshold(): number {\n return this.threshold;\n }\n\n getPrompt(): string {\n return this.prompt;\n }\n\n getOptions(): Record<string, number> | null {\n return this.options ? { ...this.options } : null;\n }\n\n getName(): string {\n return this.name;\n }\n\n getConfig(): Record<string, any> {\n return {\n name: this.name,\n prompt: this.prompt,\n threshold: this.threshold,\n options: this.options,\n } as const;\n }\n\n async pushPromptScorer(): Promise<void> {\n await pushPromptScorer(\n this.name,\n this.prompt,\n this.threshold,\n this.options,\n this.judgmentApiKey,\n this.organizationId,\n );\n }\n\n toString(): string {\n return `${this.constructor.name}(name=${this.name}, prompt=${\n this.prompt\n }, threshold=${this.threshold}, options=${JSON.stringify(this.options)})`;\n }\n\n addModel(model: string): void {\n this.model = model;\n }\n\n successCheck(): boolean {\n if (this.error != null) {\n return false;\n }\n if (this.score == null) {\n return false;\n }\n const threshold = this.threshold ?? 0.5;\n const score = this.score;\n return threshold != null && score != null && score >= threshold;\n }\n\n getRequiredParams(): string[] {\n if (Array.isArray(this.requiredParams)) {\n return [...this.requiredParams];\n }\n return [];\n }\n\n setThreshold(threshold: number): void {\n if (threshold < 0 || threshold > 1) {\n throw new Error(`Threshold must be between 0 and 1, got: ${threshold}`);\n }\n this.threshold = threshold;\n }\n\n getScoreType(): APIScorerType {\n return this.scoreType;\n }\n\n setRequiredParams(params: readonly string[]): void {\n this.requiredParams = params;\n }\n\n getScorerConfig(): ScorerConfig {\n return {\n score_type: this.getScoreType(),\n name: this.getName(),\n threshold: this.getThreshold(),\n strict_mode: this.strict_mode ?? false,\n required_params: this.getRequiredParams(),\n kwargs: {\n prompt: this.getPrompt(),\n ...(this.getOptions() ? { options: this.getOptions() } : {}),\n },\n };\n }\n}\n",
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
- "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.3\";\n",
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"
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 ...this.configuration.resourceAttributes,\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 ...options,\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 async createDefault(\n projectName: string,\n ): Promise<BrowserTracer> {\n const configuration = TracerConfiguration.builder()\n .projectName(projectName)\n .build();\n const tracer = new BrowserTracer(configuration);\n if (configuration.initialize) {\n await tracer.initialize();\n }\n return tracer;\n }\n\n public static async createWithConfiguration(\n configuration: TracerConfiguration,\n ): Promise<BrowserTracer> {\n const tracer = new BrowserTracer(configuration);\n if (configuration.initialize) {\n await tracer.initialize();\n }\n return tracer;\n }\n}\n",
24
+ "import { version } from \"../package.json\" with { type: \"json\" };\n\nexport const VERSION = version;\n",
25
+ "import { resourceFromAttributes } from \"@opentelemetry/resources\";\nimport { NodeSDK, NodeSDKConfiguration } from \"@opentelemetry/sdk-node\";\nimport { Logger } from \"../utils/logger\";\nimport { VERSION } from \"../version\";\nimport { OpenTelemetryKeys } from \"./OpenTelemetryKeys\";\nimport { Tracer, TracerInitializeOptions } from \"./Tracer\";\nimport { TracerConfiguration } from \"./TracerConfiguration\";\n\nexport type NodeTracerInitializeOptions = TracerInitializeOptions &\n Partial<NodeSDKConfiguration>;\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 ...this.configuration.resourceAttributes,\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 traceExporter: 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 async createDefault(projectName: string): Promise<NodeTracer> {\n const configuration = TracerConfiguration.builder()\n .projectName(projectName)\n .enableEvaluation(true)\n .build();\n const tracer = new NodeTracer(configuration);\n if (configuration.initialize) {\n await tracer.initialize();\n }\n return tracer;\n }\n\n public static async createWithConfiguration(\n configuration: TracerConfiguration,\n ): Promise<NodeTracer> {\n const tracer = new NodeTracer(configuration);\n if (configuration.initialize) {\n await tracer.initialize();\n }\n return tracer;\n }\n\n public async shutdown(): Promise<void> {\n if (!this.nodeSDK) {\n Logger.warn(\"Node SDK not initialized, skipping shutdown\");\n return;\n }\n await this.nodeSDK.shutdown();\n }\n}\n"
26
26
  ],
27
- "mappings": "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",
28
- "debugId": "B94AA7E5BEFF626164756E2164756E21",
27
+ "mappings": "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",
28
+ "debugId": "9F53F507DF440A0C64756E2164756E21",
29
29
  "names": []
30
30
  }