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