judgeval 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/data/evaluation-run.d.ts +57 -0
  2. package/dist/data/evaluation-run.d.ts.map +1 -0
  3. package/dist/data/example.d.ts +2 -2
  4. package/dist/data/example.d.ts.map +1 -1
  5. package/dist/data/index.d.ts +1 -0
  6. package/dist/data/index.d.ts.map +1 -1
  7. package/dist/env.d.ts +5 -0
  8. package/dist/env.d.ts.map +1 -1
  9. package/dist/index.cjs +5 -0
  10. package/dist/index.cjs.map +38 -0
  11. package/dist/index.d.ts +4 -4
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.mjs +3 -3
  14. package/dist/index.mjs.map +25 -17
  15. package/dist/index.umd.js +3 -3
  16. package/dist/index.umd.js.map +25 -17
  17. package/dist/internal/api/index.d.ts +4 -3
  18. package/dist/internal/api/index.d.ts.map +1 -1
  19. package/dist/internal/api/models/BaseScorer.d.ts +2 -2
  20. package/dist/internal/api/models/BaseScorer.d.ts.map +1 -1
  21. package/dist/internal/api/models/EvalResults.d.ts +2 -2
  22. package/dist/internal/api/models/EvalResults.d.ts.map +1 -1
  23. package/dist/internal/api/models/EvalResultsFetch.d.ts +2 -2
  24. package/dist/internal/api/models/EvalResultsFetch.d.ts.map +1 -1
  25. package/dist/internal/api/models/EvalResultsFetchResponse.d.ts +10 -0
  26. package/dist/internal/api/models/EvalResultsFetchResponse.d.ts.map +1 -0
  27. package/dist/internal/api/models/Example.d.ts +2 -2
  28. package/dist/internal/api/models/Example.d.ts.map +1 -1
  29. package/dist/internal/api/models/ExampleEvaluationRun.d.ts +3 -3
  30. package/dist/internal/api/models/ExampleEvaluationRun.d.ts.map +1 -1
  31. package/dist/internal/api/models/FetchPromptScorersRequest.d.ts +2 -2
  32. package/dist/internal/api/models/FetchPromptScorersRequest.d.ts.map +1 -1
  33. package/dist/internal/api/models/FetchPromptScorersResponse.d.ts +2 -2
  34. package/dist/internal/api/models/FetchPromptScorersResponse.d.ts.map +1 -1
  35. package/dist/internal/api/models/OtelTraceSpan.d.ts +3 -11
  36. package/dist/internal/api/models/OtelTraceSpan.d.ts.map +1 -1
  37. package/dist/internal/api/models/PromptScorer.d.ts +4 -2
  38. package/dist/internal/api/models/PromptScorer.d.ts.map +1 -1
  39. package/dist/internal/api/models/ResolveProjectNameRequest.d.ts +2 -2
  40. package/dist/internal/api/models/ResolveProjectNameRequest.d.ts.map +1 -1
  41. package/dist/internal/api/models/ResolveProjectNameResponse.d.ts +2 -2
  42. package/dist/internal/api/models/ResolveProjectNameResponse.d.ts.map +1 -1
  43. package/dist/internal/api/models/SavePromptScorerRequest.d.ts +5 -3
  44. package/dist/internal/api/models/SavePromptScorerRequest.d.ts.map +1 -1
  45. package/dist/internal/api/models/SavePromptScorerResponse.d.ts +2 -2
  46. package/dist/internal/api/models/SavePromptScorerResponse.d.ts.map +1 -1
  47. package/dist/internal/api/models/ScorerConfig.d.ts +3 -2
  48. package/dist/internal/api/models/ScorerConfig.d.ts.map +1 -1
  49. package/dist/internal/api/models/ScorerData.d.ts +2 -2
  50. package/dist/internal/api/models/ScorerData.d.ts.map +1 -1
  51. package/dist/internal/api/models/ScorerExistsRequest.d.ts +2 -2
  52. package/dist/internal/api/models/ScorerExistsRequest.d.ts.map +1 -1
  53. package/dist/internal/api/models/ScorerExistsResponse.d.ts +2 -2
  54. package/dist/internal/api/models/ScorerExistsResponse.d.ts.map +1 -1
  55. package/dist/internal/api/models/ScoringResult.d.ts +2 -2
  56. package/dist/internal/api/models/ScoringResult.d.ts.map +1 -1
  57. package/dist/internal/api/models/TraceEvaluationRun.d.ts +3 -3
  58. package/dist/internal/api/models/TraceEvaluationRun.d.ts.map +1 -1
  59. package/dist/internal/api/models.d.ts +1 -0
  60. package/dist/internal/api/models.d.ts.map +1 -1
  61. package/dist/judgment-client.d.ts +15 -0
  62. package/dist/judgment-client.d.ts.map +1 -0
  63. package/dist/scorers/adapters.d.ts +7 -0
  64. package/dist/scorers/adapters.d.ts.map +1 -0
  65. package/dist/scorers/api_scorers/answer-correctness-scorer.d.ts +5 -10
  66. package/dist/scorers/api_scorers/answer-correctness-scorer.d.ts.map +1 -1
  67. package/dist/scorers/api_scorers/answer-relevancy-scorer.d.ts +5 -10
  68. package/dist/scorers/api_scorers/answer-relevancy-scorer.d.ts.map +1 -1
  69. package/dist/scorers/api_scorers/faithfulness-scorer.d.ts +5 -10
  70. package/dist/scorers/api_scorers/faithfulness-scorer.d.ts.map +1 -1
  71. package/dist/scorers/api_scorers/index.d.ts +5 -1
  72. package/dist/scorers/api_scorers/index.d.ts.map +1 -1
  73. package/dist/scorers/api_scorers/instruction-adherence-scorer.d.ts +5 -10
  74. package/dist/scorers/api_scorers/instruction-adherence-scorer.d.ts.map +1 -1
  75. package/dist/scorers/api_scorers/prompt_scorer/base-prompt-scorer.d.ts +10 -37
  76. package/dist/scorers/api_scorers/prompt_scorer/base-prompt-scorer.d.ts.map +1 -1
  77. package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.d.ts +1 -9
  78. package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.d.ts.map +1 -1
  79. package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer.d.ts +6 -3
  80. package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer.d.ts.map +1 -1
  81. package/dist/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.d.ts +4 -2
  82. package/dist/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.d.ts.map +1 -1
  83. package/dist/scorers/example-scorer.d.ts +13 -0
  84. package/dist/scorers/example-scorer.d.ts.map +1 -0
  85. package/dist/scorers/index.d.ts +3 -2
  86. package/dist/scorers/index.d.ts.map +1 -1
  87. package/dist/scorers/local-scorer.d.ts +22 -0
  88. package/dist/scorers/local-scorer.d.ts.map +1 -0
  89. package/dist/scorers/remote-scorer.d.ts +20 -0
  90. package/dist/scorers/remote-scorer.d.ts.map +1 -0
  91. package/dist/tracer/Tracer.d.ts +8 -9
  92. package/dist/tracer/Tracer.d.ts.map +1 -1
  93. package/dist/tracer/TracerConfiguration.d.ts.map +1 -1
  94. package/dist/utils/annotate.d.ts.map +1 -1
  95. package/dist/utils/types.d.ts +2 -2
  96. package/dist/utils/types.d.ts.map +1 -1
  97. package/package.json +15 -9
  98. package/dist/scorers/api-scorer.d.ts +0 -23
  99. package/dist/scorers/api-scorer.d.ts.map +0 -1
  100. package/dist/scorers/base-scorer.d.ts +0 -10
  101. package/dist/scorers/base-scorer.d.ts.map +0 -1
@@ -0,0 +1,57 @@
1
+ import { ExampleEvaluationRun as ExampleEvaluationRunModel } from "../internal/api/models/ExampleEvaluationRun";
2
+ import { TraceEvaluationRun as TraceEvaluationRunModel } from "../internal/api/models/TraceEvaluationRun";
3
+ import { LocalScorer } from "../scorers/local-scorer";
4
+ import { RemoteScorer } from "../scorers/remote-scorer";
5
+ import { Example } from "./example";
6
+ export type ScorerInput = LocalScorer | RemoteScorer;
7
+ export declare class EvaluationRun {
8
+ id: string;
9
+ created_at: string;
10
+ local_scorers: LocalScorer[];
11
+ remote_scorers: RemoteScorer[];
12
+ model?: string | null;
13
+ constructor(params: {
14
+ scorers?: ScorerInput[];
15
+ model?: string;
16
+ });
17
+ protected toBaseModel(): {
18
+ id: string;
19
+ created_at: string;
20
+ custom_scorers: import("../internal/api/models").BaseScorer[] | undefined;
21
+ judgment_scorers: import("../internal/api/models").ScorerConfig[] | undefined;
22
+ model: string | null | undefined;
23
+ };
24
+ }
25
+ export declare class ExampleEvaluationRun extends EvaluationRun implements ExampleEvaluationRunModel {
26
+ project_name: string;
27
+ eval_name: string;
28
+ examples: Example[];
29
+ trace_span_id?: string | null;
30
+ trace_id?: string | null;
31
+ constructor(params: {
32
+ examples: Example[];
33
+ scorers?: ScorerInput[];
34
+ project_name: string;
35
+ eval_name: string;
36
+ model?: string;
37
+ trace_span_id?: string | null;
38
+ trace_id?: string | null;
39
+ });
40
+ toModel(): ExampleEvaluationRunModel;
41
+ }
42
+ export declare class TraceEvaluationRun extends EvaluationRun implements TraceEvaluationRunModel {
43
+ project_name: string;
44
+ eval_name: string;
45
+ trace_and_span_ids: [string, string][];
46
+ is_offline?: boolean;
47
+ constructor(params: {
48
+ trace_and_span_ids: [string, string][];
49
+ scorers?: ScorerInput[];
50
+ project_name: string;
51
+ eval_name: string;
52
+ model?: string;
53
+ is_offline?: boolean;
54
+ });
55
+ toModel(): TraceEvaluationRunModel;
56
+ }
57
+ //# sourceMappingURL=evaluation-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluation-run.d.ts","sourceRoot":"","sources":["../../src/data/evaluation-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,IAAI,yBAAyB,EAAE,MAAM,6CAA6C,CAAC;AAChH,OAAO,EAAE,kBAAkB,IAAI,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAK1G,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;AAErD,qBAAa,aAAa;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,WAAW,EAAE,CAAM;IAClC,cAAc,EAAE,YAAY,EAAE,CAAM;IACpC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEV,MAAM,EAAE;QAAE,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAgB/D,SAAS,CAAC,WAAW;;;;;;;CAetB;AAED,qBAAa,oBACX,SAAQ,aACR,YAAW,yBAAyB;IAEpC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEb,MAAM,EAAE;QAClB,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B;IAmBD,OAAO,IAAI,yBAAyB;CAUrC;AAED,qBAAa,kBACX,SAAQ,aACR,YAAW,uBAAuB;IAElC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;gBAET,MAAM,EAAE;QAClB,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QACvC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB;IAiBD,OAAO,IAAI,uBAAuB;CASnC"}
@@ -1,4 +1,4 @@
1
1
  import { Example as ExampleModel } from "../internal/api/models/Example";
2
- export type Example<T extends Record<string, any> = Record<string, any>> = ExampleModel & T;
3
- export declare function Example<T extends Record<string, any>>(properties: T): Example<T>;
2
+ export type Example<T extends Record<string, unknown> = Record<string, unknown>> = ExampleModel & T & Record<string, unknown>;
3
+ export declare function Example<T extends Record<string, unknown>>(properties: T): Example<T>;
4
4
  //# sourceMappingURL=example.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../../src/data/example.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEzE,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IACrE,YAAY,GAAG,CAAC,CAAC;AAEnB,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnD,UAAU,EAAE,CAAC,GACZ,OAAO,CAAC,CAAC,CAAC,CASZ"}
1
+ {"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../../src/data/example.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAEzE,MAAM,MAAM,OAAO,CACjB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACzD,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/C,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvD,UAAU,EAAE,CAAC,GACZ,OAAO,CAAC,CAAC,CAAC,CASZ"}
@@ -1,3 +1,4 @@
1
+ export * from "./evaluation-run";
1
2
  export * from "./example";
2
3
  export * from "./example-params";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC"}
package/dist/env.d.ts CHANGED
@@ -1,9 +1,14 @@
1
1
  export declare const JUDGMENT_API_KEY: string | null;
2
2
  export declare const JUDGMENT_ORG_ID: string | null;
3
3
  export declare const JUDGMENT_API_URL: string;
4
+ export declare const JUDGMENT_LLM_PROXY_URL: string;
4
5
  export declare const JUDGMENT_DEFAULT_GPT_MODEL: string;
5
6
  export declare const JUDGMENT_ENABLE_MONITORING: string;
6
7
  export declare const JUDGMENT_ENABLE_EVALUATIONS: string;
7
8
  export declare const JUDGMENT_NO_COLOR: string | null;
8
9
  export declare const JUDGMENT_LOG_LEVEL: string;
10
+ export declare const OPENAI_API_KEY: string | null;
11
+ export declare const ANTHROPIC_API_KEY: string | null;
12
+ export declare const GOOGLE_API_KEY: string | null;
13
+ export declare const GEMINI_API_KEY: string | null;
9
14
  //# sourceMappingURL=env.d.ts.map
package/dist/env.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,gBAAgB,eAAgC,CAAC;AAC9D,eAAO,MAAM,eAAe,eAA+B,CAAC;AAC5D,eAAO,MAAM,gBAAgB,QAG5B,CAAC;AACF,eAAO,MAAM,0BAA0B,QAGtC,CAAC;AACF,eAAO,MAAM,0BAA0B,QAGtC,CAAC;AACF,eAAO,MAAM,2BAA2B,QAGvC,CAAC;AACF,eAAO,MAAM,iBAAiB,eAAiC,CAAC;AAChE,eAAO,MAAM,kBAAkB,QAA0C,CAAC"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,gBAAgB,eAAgC,CAAC;AAC9D,eAAO,MAAM,eAAe,eAA+B,CAAC;AAC5D,eAAO,MAAM,gBAAgB,QAG5B,CAAC;AACF,eAAO,MAAM,sBAAsB,QAGlC,CAAC;AACF,eAAO,MAAM,0BAA0B,QAGtC,CAAC;AACF,eAAO,MAAM,0BAA0B,QAGtC,CAAC;AACF,eAAO,MAAM,2BAA2B,QAGvC,CAAC;AACF,eAAO,MAAM,iBAAiB,eAAiC,CAAC;AAChE,eAAO,MAAM,kBAAkB,QAA0C,CAAC;AAE1E,eAAO,MAAM,cAAc,eAA8B,CAAC;AAC1D,eAAO,MAAM,iBAAiB,eAAiC,CAAC;AAChE,eAAO,MAAM,cAAc,eAA8B,CAAC;AAC1D,eAAO,MAAM,cAAc,eAA8B,CAAC"}
package/dist/index.cjs ADDED
@@ -0,0 +1,5 @@
1
+ var{defineProperty:L,getOwnPropertyNames:ot,getOwnPropertyDescriptor:it}=Object,nt=Object.prototype.hasOwnProperty;var q=new WeakMap,at=(t)=>{var e=q.get(t),r;if(e)return e;if(e=L({},"__esModule",{value:!0}),t&&typeof t==="object"||typeof t==="function")ot(t).map((s)=>!nt.call(e,s)&&L(e,s,{get:()=>t[s],enumerable:!(r=it(t,s))||r.enumerable}));return q.set(t,e),e};var lt=(t,e)=>{for(var r in e)L(t,r,{get:e[r],enumerable:!0,configurable:!0,set:(s)=>e[r]=()=>s})};var wt={};lt(wt,{parseFunctionArgs:()=>z,fetchPromptScorer:()=>P,TracerConfigurationBuilder:()=>I,TracerConfiguration:()=>N,Tracer:()=>h,TracePromptScorer:()=>G,TraceEvaluationRun:()=>B,RemoteScorer:()=>p,PromptScorer:()=>D,OpenTelemetryKeys:()=>c,OPENAI_API_KEY:()=>Et,NodeTracer:()=>A,NoOpSpanExporter:()=>M,Logger:()=>i,LocalScorer:()=>g,JudgmentSpanExporter:()=>S,JudgmentClient:()=>V,JudgmentAPIError:()=>T,JUDGMENT_ORG_ID:()=>m,JUDGMENT_NO_COLOR:()=>dt,JUDGMENT_LOG_LEVEL:()=>$,JUDGMENT_LLM_PROXY_URL:()=>ut,JUDGMENT_ENABLE_MONITORING:()=>mt,JUDGMENT_ENABLE_EVALUATIONS:()=>pt,JUDGMENT_DEFAULT_GPT_MODEL:()=>U,JUDGMENT_API_URL:()=>_,JUDGMENT_API_KEY:()=>u,InstructionAdherenceScorer:()=>Y,GOOGLE_API_KEY:()=>_t,GEMINI_API_KEY:()=>Tt,FaithfulnessScorer:()=>F,ExampleScorer:()=>W,ExampleParams:()=>b,ExampleEvaluationRun:()=>O,Example:()=>ct,EvaluationRun:()=>v,BrowserTracer:()=>w,BasePromptScorer:()=>f,AnswerRelevancyScorer:()=>j,AnswerCorrectnessScorer:()=>k,ANTHROPIC_API_KEY:()=>ht});module.exports=at(wt);function H(t){return{score_type:"Custom",name:t.name,class_name:t.constructor.name,threshold:t.threshold,strict_mode:t.strictMode,model:t.model,score:t.score,score_breakdown:null,reason:t.reason,using_native_model:null,success:t.success,model_client:null,error:t.error,additional_metadata:t.metadata,user:null,server_hosted:!1}}function y(t){return{score_type:t.scoreType,name:t.name,threshold:t.threshold,model:t.model,strict_mode:t.strictMode,required_params:Array.from(t.requiredParams),kwargs:t.kwargs}}class g{name;threshold;strictMode;model;score=null;reason=null;error=null;success=!1;metadata=null;constructor(t){this.name=t.name,this.strictMode=t.strictMode??!1,this.threshold=this.strictMode?1:t.threshold??0.5,this.model=t.model??null}successCheck(){if(this.error!==null)return!1;if(this.score===null)return!1;return this.score>=this.threshold}}class p{scoreType;name;threshold;strictMode;model;requiredParams;kwargs;constructor(t){this.scoreType=t.scoreType,this.name=t.name??t.scoreType,this.strictMode=t.strictMode??!1,this.threshold=this.strictMode?1:t.threshold??0.5,this.model=t.model??null,this.requiredParams=Object.freeze(t.requiredParams??[]),this.kwargs=t.kwargs??{}}}class v{id;created_at;local_scorers=[];remote_scorers=[];model;constructor(t){let{scorers:e=[],model:r}=t;this.id=crypto.randomUUID(),this.created_at=new Date().toISOString(),this.model=r??null;for(let s of e)if(s instanceof g)this.local_scorers.push(s);else if(s instanceof p)this.remote_scorers.push(s)}toBaseModel(){return{id:this.id,created_at:this.created_at,custom_scorers:this.local_scorers.length>0?this.local_scorers.map(H):void 0,judgment_scorers:this.remote_scorers.length>0?this.remote_scorers.map(y):void 0,model:this.model}}}class O extends v{project_name;eval_name;examples;trace_span_id;trace_id;constructor(t){let{examples:e,project_name:r,eval_name:s,trace_span_id:o,trace_id:n,...a}=t;super(a);this.project_name=r,this.eval_name=s,this.examples=e,this.trace_span_id=o??null,this.trace_id=n??null}toModel(){return{...this.toBaseModel(),project_name:this.project_name,eval_name:this.eval_name,examples:this.examples,trace_span_id:this.trace_span_id,trace_id:this.trace_id}}}class B extends v{project_name;eval_name;trace_and_span_ids;is_offline;constructor(t){let{trace_and_span_ids:e,project_name:r,eval_name:s,is_offline:o,...n}=t;super(n);this.project_name=r,this.eval_name=s,this.trace_and_span_ids=e,this.is_offline=o??!1}toModel(){return{...this.toBaseModel(),project_name:this.project_name,eval_name:this.eval_name,trace_and_span_ids:this.trace_and_span_ids,is_offline:this.is_offline}}}function ct(t){return{example_id:void 0,created_at:new Date().toISOString(),name:null,...t}}var b;((d)=>{d.INPUT="input";d.ACTUAL_OUTPUT="actual_output";d.EXPECTED_OUTPUT="expected_output";d.CONTEXT="context";d.RETRIEVAL_CONTEXT="retrieval_context";d.TOOLS_CALLED="tools_called";d.EXPECTED_TOOLS="expected_tools";d.ADDITIONAL_METADATA="additional_metadata"})(b||={});function E(t,e){let r=process.env[t];if(!r)return e??null;return r}var u=E("JUDGMENT_API_KEY"),m=E("JUDGMENT_ORG_ID"),_=E("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),ut=E("JUDGMENT_LLM_PROXY_URL","https://api.judgmentlabs.ai/llm/proxy/v1"),U=E("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),mt=E("JUDGMENT_ENABLE_MONITORING","true"),pt=E("JUDGMENT_ENABLE_EVALUATIONS","true"),dt=E("JUDGMENT_NO_COLOR"),$=E("JUDGMENT_LOG_LEVEL","warn"),Et=E("OPENAI_API_KEY"),ht=E("ANTHROPIC_API_KEY"),_t=E("GOOGLE_API_KEY"),Tt=E("GEMINI_API_KEY");class f extends p{prompt;model;options;description;judgmentApiKey;organizationId;constructor(t,e,r,s,o,n,a,l=u??"",d=m??""){super({scoreType:t,name:e,threshold:s,model:o,requiredParams:[],kwargs:{prompt:r,...n?{options:n}:{},...a?{description:a}:{}}});this.prompt=r,this.model=o,this.options=n,this.description=a,this.judgmentApiKey=l,this.organizationId=d}getThreshold(){return this.threshold}getPrompt(){return this.prompt}getOptions(){return this.options?{...this.options}:null}getModel(){return this.model}getDescription(){return this.description}getName(){return this.name}getConfig(){return{name:this.name,prompt:this.prompt,threshold:this.threshold,model:this.model,options:this.options,description:this.description}}toString(){return`${this.constructor.name}(name=${this.name}, prompt=${this.prompt}, threshold=${this.threshold}, model=${this.model}, options=${JSON.stringify(this.options)}, description=${this.description})`}}class R{baseUrl;apiKey;organizationId;constructor(t,e,r){this.baseUrl=t,this.apiKey=e,this.organizationId=r}buildUrl(t){return this.baseUrl+t}buildHeaders(){if(!this.apiKey||!this.organizationId)throw Error("API key and organization ID cannot be null");return{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId}}async addToRunEvalQueueExamples(t){let e=this.buildUrl("/add_to_run_eval_queue/examples"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async addToRunEvalQueueTraces(t){let e=this.buildUrl("/add_to_run_eval_queue/traces"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async logEvalResults(t){let e=this.buildUrl("/log_eval_results/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchExperimentRun(t){let e=this.buildUrl("/fetch_experiment_run/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async scorerExists(t){let e=this.buildUrl("/scorer_exists/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async saveScorer(t){let e=this.buildUrl("/save_scorer/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchScorers(t){let e=this.buildUrl("/fetch_scorers/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async projectsResolve(t){let e=this.buildUrl("/projects/resolve/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}}class T extends Error{statusCode;constructor(t,e){super(e);this.statusCode=t;this.name="JudgmentAPIError"}}async function P(t,e=u??"",r=m??""){if(!_||!e||!r)throw Error("Missing required API credentials");let o=await new R(_,e,r).fetchScorers({names:[t]});if(o.scorers.length===0)throw new T(404,`Scorer with name ${t} not found`);return o.scorers[0]}class D extends f{constructor(t,e,r,s,o,n,a=u??"",l=m??""){super("Prompt Scorer",t,e,r,s,o,n,a,l)}getScoreType(){return"Prompt Scorer"}getIsTrace(){return!1}static async get(t,e=u??"",r=m??""){let s=await P(t,e,r);if(s.is_trace===!0)throw new T(400,`Scorer with name ${t} is a TracePromptScorer, not a PromptScorer`);return new D(s.name,s.prompt,s.threshold,s.model??null,s.options,s.description,e,r)}}class G extends f{constructor(t,e,r,s,o,n,a=u??"",l=m??""){super("Trace Prompt Scorer",t,e,r,s,o,n,a,l)}getScoreType(){return"Trace Prompt Scorer"}getIsTrace(){return!0}static async get(t,e=u??"",r=m??""){let s=await P(t,e,r);if(s.is_trace!==!0)throw new T(400,`Scorer with name ${t} is a PromptScorer, not a TracePromptScorer`);return new G(s.name,s.prompt,s.threshold,s.model??null,s.options,s.description,e,r)}}class k extends p{constructor(t={}){super({scoreType:"Answer Correctness",...t,requiredParams:["input","actual_output","expected_output"]})}static get(t={}){return new k(t)}}class j extends p{constructor(t={}){super({scoreType:"Answer Relevancy",...t,requiredParams:["input","actual_output"]})}static get(t={}){return new j(t)}}class F extends p{constructor(t={}){super({scoreType:"Faithfulness",...t,requiredParams:["input","actual_output","retrieval_context"]})}static get(t={}){return new F(t)}}class Y extends p{constructor(t={}){super({scoreType:"Instruction Adherence",...t,requiredParams:["input","actual_output"]})}static get(t={}){return new Y(t)}}class W extends g{static get(t){return new this({name:t.name,threshold:t.threshold,strictMode:t.strictMode,model:t.model})}}var X=require("@opentelemetry/exporter-trace-otlp-http");class i{static RESET="\x1B[0m";static RED="\x1B[31m";static YELLOW="\x1B[33m";static GRAY="\x1B[90m";static Level={DEBUG:0,INFO:1,WARNING:2,ERROR:3,CRITICAL:4};static initialized=!1;static currentLevel=i.Level.WARNING;static useColor=!0;static initialize(){if(!i.initialized){let t=process.env.JUDGMENT_NO_COLOR;i.useColor=!t&&process.stdout.isTTY;let e=$.toLowerCase();if(e){let r={debug:i.Level.DEBUG,info:i.Level.INFO,warning:i.Level.WARNING,warn:i.Level.WARNING,error:i.Level.ERROR,critical:i.Level.CRITICAL};i.currentLevel=r[e]??i.Level.WARNING}i.initialized=!0}}static setLevel(t){i.currentLevel=t}static setUseColor(t){i.useColor=t}static log(t,e){if(i.initialize(),t<i.currentLevel)return;let r=new Date().toISOString().replace("T"," ").substring(0,19),s=Object.keys(i.Level).find((a)=>i.Level[a]===t)??"UNKNOWN",o=`${r} - judgeval - ${s} - ${e}`;if(i.useColor)o=`${t===i.Level.DEBUG||t===i.Level.INFO?i.GRAY:t===i.Level.WARNING?i.YELLOW:i.RED}${o}${i.RESET}`;(t>=i.Level.ERROR?process.stderr:process.stdout).write(o+`
2
+ `)}static debug(t){i.log(i.Level.DEBUG,t)}static info(t){i.log(i.Level.INFO,t)}static warning(t){i.log(i.Level.WARNING,t)}static warn(t){i.log(i.Level.WARNING,t)}static error(t){i.log(i.Level.ERROR,t)}static critical(t){i.log(i.Level.CRITICAL,t)}}class S{delegate;projectId;constructor(t,e,r,s){if(!s||s.trim()==="")throw Error("projectId is required for JudgmentSpanExporter");this.projectId=s,this.delegate=new X.OTLPTraceExporter({url:t,headers:{Authorization:`Bearer ${e}`,"X-Organization-Id":r,"X-Project-Id":s}})}static builder(){return new Q}export(t,e){i.info(`JudgmentSpanExporter: Exported ${t.length} spans`),this.delegate.export(t,e)}shutdown(){return i.info(`JudgmentSpanExporter: Shutting down exporter for project ${this.projectId}`),this.delegate.shutdown()}forceFlush(){return i.info(`JudgmentSpanExporter: Force flushing spans for project ${this.projectId}`),this.delegate.forceFlush?.()??Promise.resolve()}}class Q{_endpoint;_apiKey;_organizationId;_projectId;constructor(){}endpoint(t){return this._endpoint=t,this}apiKey(t){return this._apiKey=t,this}organizationId(t){return this._organizationId=t,this}projectId(t){return this._projectId=t,this}build(){if(!this._endpoint||this._endpoint.trim()==="")throw Error("Endpoint is required");if(!this._apiKey||this._apiKey.trim()==="")throw Error("API key is required");if(!this._organizationId||this._organizationId.trim()==="")throw Error("Organization ID is required");if(!this._projectId||this._projectId.trim()==="")throw Error("Project ID is required");return new S(this._endpoint,this._apiKey,this._organizationId,this._projectId)}}class M{export(t,e){e({code:0})}flush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}class c{static AttributeKeys={JUDGMENT_SPAN_KIND:"judgment.span_kind",JUDGMENT_INPUT:"judgment.input",JUDGMENT_OUTPUT:"judgment.output",JUDGMENT_OFFLINE_MODE:"judgment.offline_mode",JUDGMENT_UPDATE_ID:"judgment.update_id",JUDGMENT_CUSTOMER_ID:"judgment.customer_id",JUDGMENT_AGENT_ID:"judgment.agent_id",JUDGMENT_PARENT_AGENT_ID:"judgment.parent_agent_id",JUDGMENT_AGENT_CLASS_NAME:"judgment.agent_class_name",JUDGMENT_AGENT_INSTANCE_NAME:"judgment.agent_instance_name",PENDING_TRACE_EVAL:"judgment.pending_trace_eval",GEN_AI_PROMPT:"gen_ai.prompt",GEN_AI_COMPLETION:"gen_ai.completion",GEN_AI_REQUEST_MODEL:"gen_ai.request.model",GEN_AI_RESPONSE_MODEL:"gen_ai.response.model",GEN_AI_SYSTEM:"gen_ai.system",GEN_AI_USAGE_INPUT_TOKENS:"gen_ai.usage.input_tokens",GEN_AI_USAGE_OUTPUT_TOKENS:"gen_ai.usage.output_tokens",GEN_AI_USAGE_COMPLETION_TOKENS:"gen_ai.usage.completion_tokens",GEN_AI_REQUEST_TEMPERATURE:"gen_ai.request.temperature",GEN_AI_REQUEST_MAX_TOKENS:"gen_ai.request.max_tokens",GEN_AI_RESPONSE_FINISH_REASONS:"gen_ai.response.finish_reasons",GEN_AI_USAGE_TOTAL_COST:"gen_ai.usage.total_cost_usd"};static InternalAttributeKeys={DISABLE_PARTIAL_EMIT:"disable_partial_emit",CANCELLED:"cancelled"};static ResourceKeys={SERVICE_NAME:"service.name",TELEMETRY_SDK_LANGUAGE:"telemetry.sdk.language",TELEMETRY_SDK_NAME:"telemetry.sdk.name",TELEMETRY_SDK_VERSION:"telemetry.sdk.version",JUDGMENT_PROJECT_ID:"judgment.project_id"}}var x=require("@opentelemetry/api");var ft=/^([^(]+?)=>/,Rt=/^[^(]*\(\s*([^)]*)\)/m,xt=/,/,Nt=/^\s*(_?)(\S+?)\1\s*$/,gt=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function bt(t){return Function.prototype.toString.call(t)}function Pt(t){let e=bt(t).replace(gt,"");return e.match(ft)||e.match(Rt)}function z(t){let e=Pt(t);if(!e||!e[1])return[];return e[1].split(xt).map((r)=>{return r.replace(Nt,(o,n,a)=>a).trim()}).filter((r)=>r.length>0)}class h{static instances=new Map;apiClient;tracer;serializer=JSON.stringify;_initialized=!1;projectId=null;spanExporter=null;configuration;getConfiguration(){return this.configuration}getProjectId(){return this.projectId}getSerializer(){return this.serializer}constructor(t){this.configuration=t,this.tracer=x.trace.getTracer(this.configuration.tracerName),this.apiClient=new R(this.configuration.apiUrl,this.configuration.apiKey,this.configuration.organizationId),this._initialized=!1}async resolveProjectId(){try{i.info(`Resolving project ID for project: ${this.configuration.projectName}`);let t=await this.apiClient.projectsResolve({project_name:this.configuration.projectName});i.info(`Resolved project ID: ${t.project_id}`);let e=t.project_id;return this.projectId=e,i.info(`Successfully resolved project ID: ${this.projectId}`),this.projectId}catch(t){throw Error(`Failed to resolve project ID: ${t instanceof Error?t.message:String(t)}`)}}async getSpanExporter(){if(!this.spanExporter)try{let t=await this.resolveProjectId();this.spanExporter=this.createJudgmentSpanExporter(t)}catch{i.error("Failed to resolve project "+this.configuration.projectName+", please create it first at https://app.judgmentlabs.ai/org/"+(this.configuration.organizationId||"unknown")+"/projects. Skipping Judgment export."),this.spanExporter=new M}return this.spanExporter}setSpanKind(t){let e=x.trace.getActiveSpan();if(!e){i.info("No active span found, skipping setSpanKind");return}e.setAttribute(c.AttributeKeys.JUDGMENT_SPAN_KIND,t)}setAttribute(t,e){let r=x.trace.getActiveSpan();if(!r){i.info("No active span found, skipping setAttribute");return}r.setAttribute(t,this.serializer(e))}setLLMSpan(){this.setSpanKind("llm")}setToolSpan(){this.setSpanKind("tool")}setGeneralSpan(){this.setSpanKind("span")}setAttributes(t){let e=x.trace.getActiveSpan();if(!e){i.info("No active span found, skipping setAttributes");return}for(let[r,s]of Object.entries(t))e.setAttribute(r,this.serializer(s))}setInput(t){this.setAttribute(c.AttributeKeys.JUDGMENT_INPUT,t)}setOutput(t){this.setAttribute(c.AttributeKeys.JUDGMENT_OUTPUT,t)}asyncEvaluate(t,e,r){try{if(!this.configuration.enableEvaluation)return;let s=x.trace.getActiveSpan();if(!s){i.info("No active span found, skipping asyncEvaluate");return}if(!s.isRecording()){i.info("Active span is not recording, skipping asyncEvaluate");return}let o=s.spanContext(),n=o.traceId,a=o.spanId;i.info(`asyncEvaluate: project=${this.configuration.projectName}, traceId=${n}, spanId=${a}, scorer=${t.name}`);let l=this.createEvaluationRun(t,e,r,n,a);this.enqueueEvaluation(l)}catch(s){i.error(`Failed to asyncEvaluate: ${s instanceof Error?s.message:String(s)}`)}}asyncTraceEvaluate(t,e){try{if(!this.configuration.enableEvaluation)return;let r=x.trace.getActiveSpan();if(!r){i.info("No active span found, skipping asyncTraceEvaluate");return}if(!r.isRecording()){i.info("Active span is not recording, skipping asyncTraceEvaluate");return}let s=r.spanContext(),o=s.traceId,n=s.spanId;i.info(`asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${o}, spanId=${n}, scorer=${t.name}`);let a=this.createTraceEvaluationRun(t,e,o,n),l=this.serializer(a);r.setAttribute(c.AttributeKeys.PENDING_TRACE_EVAL,l)}catch(r){i.error(`Failed to asyncTraceEvaluate: ${r instanceof Error?r.message:String(r)}`)}}createTraceEvaluationRun(t,e,r,s){let o=`async_trace_evaluate_${s||Date.now()}`,n=e??U,a=y(t);return{project_name:this.configuration.projectName,eval_name:o,judgment_scorers:[a],model:n,trace_and_span_ids:[[r,s]]}}createJudgmentSpanExporter(t){let e=this.configuration.apiUrl.endsWith("/")?`${this.configuration.apiUrl}otel/v1/traces`:`${this.configuration.apiUrl}/otel/v1/traces`;return S.builder().endpoint(e).apiKey(this.configuration.apiKey).organizationId(this.configuration.organizationId).projectId(t).build()}createEvaluationRun(t,e,r,s,o){let n=`async_evaluate_${o||Date.now()}`,a=r??U,l=y(t);return{project_name:this.configuration.projectName,eval_name:n,examples:[e],custom_scorers:[],judgment_scorers:[l],model:a,trace_id:s,trace_span_id:o}}async enqueueEvaluation(t){try{await this.apiClient.addToRunEvalQueueExamples(t),i.info(`Enqueuing evaluation run: ${t.eval_name}`)}catch(e){i.error(`Failed to enqueue evaluation run: ${e instanceof Error?e.message:String(e)}`)}}_observe(t,e="span"){return(...r)=>{let s=t.name||"anonymous";return this.tracer.startActiveSpan(s,(o)=>{try{o.setAttribute(c.AttributeKeys.JUDGMENT_SPAN_KIND,e);try{let a=z(t);if(a.length===r.length){let l={};a.forEach((d,st)=>{l[d]=r[st]}),o.setAttribute(c.AttributeKeys.JUDGMENT_INPUT,this.serializer(l))}}catch(a){i.warn(`Failed to parse function args: ${a instanceof Error?a.message:String(a)}`)}let n=t(...r);if(n instanceof Promise)return n.then((a)=>{return o.setAttribute(c.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(a)),a}).catch((a)=>{throw o.recordException(a instanceof Error?a:Error(String(a))),a}).finally(()=>{o.end()});return o.setAttribute(c.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(n)),o.end(),n}catch(n){throw o.recordException(n),o.end(),n}})}}observe(t,e){try{if(typeof t==="function"){let r=this._observe(t,e??"span");return Object.defineProperty(r,"name",{value:t.name}),r}return(r,s,o)=>{try{if(!o)return;let n=o.value,a=this._observe(n,t??"span");return Object.defineProperty(a,"name",{value:n.name}),o.value=a,o}catch(n){i.error(`Failed to wrap method with observe: ${n instanceof Error?n.message:String(n)}`)}}}catch(r){if(i.error(`Failed to observe function: ${r instanceof Error?r.message:String(r)}`),typeof t==="function")return t;return()=>{}}}async shutdown(){}}var K="opentelemetry.instrumentation.judgeval";class N{projectName;apiKey;organizationId;apiUrl;enableEvaluation;tracerName;resourceAttributes;initialize;constructor(t,e,r,s,o,n=K,a={},l=!0){this.projectName=t;this.apiKey=e;this.organizationId=r;this.apiUrl=s;this.enableEvaluation=o;this.tracerName=n;this.resourceAttributes=a;this.initialize=l}static createDefault(t){return new I().projectName(t).build()}static builder(){return new I}}class I{_projectName;_apiKey=u;_organizationId=m;_apiUrl=_;_enableEvaluation=!0;_tracerName=K;_resourceAttributes={};_initialize=!0;projectName(t){return this._projectName=t,this}apiKey(t){return this._apiKey=t,this}organizationId(t){return this._organizationId=t,this}apiUrl(t){return this._apiUrl=t,this}enableEvaluation(t){return this._enableEvaluation=t,this}tracerName(t){return this._tracerName=t,this}resourceAttributes(t){return this._resourceAttributes=t,this}initialize(t){return this._initialize=t,this}build(){if(!this._projectName)throw Error("Project name is required");if(!this._apiKey)throw Error("API key is required");if(!this._organizationId)throw Error("Organization ID is required");if(!this._apiUrl)throw Error("API URL is required");return new N(this._projectName,this._apiKey,this._organizationId,this._apiUrl,this._enableEvaluation,this._tracerName,this._resourceAttributes,this._initialize)}}class V{apiClient;constructor(t=u,e=m){if(t===null||e===null)throw Error("API key and organization ID are required");this.apiClient=new R(_,t,e)}async runEvaluation(t,e,r,s,o){if(t.length===0)throw Error("No examples provided");let n=new O({project_name:r,eval_name:s,examples:t,scorers:e,model:o}),a=Boolean(n.local_scorers.length),l=Boolean(n.remote_scorers.length);if(a&&l)throw Error("Cannot run both local and remote scorers at the same time");if(l)return this.runRemoteScorers(n);return this.runLocalScorers(n)}async runRemoteScorers(t){console.log("Running evaluation..."),await this.apiClient.addToRunEvalQueueExamples(t.toModel());let e=await this.pollForResults(t.project_name,t.id,t.examples.length);return console.log(`View results at: ${e.ui_results_url}/example`),e.results}async runLocalScorers(t){console.log("Running local evaluation...");let e=await this.executeLocalScorers(t),r=await this.apiClient.logEvalResults({results:e,run:t.toModel()});return console.log(`View results at: ${r.ui_results_url}/example`),e}async executeLocalScorers(t){let e=[];for(let r of t.examples){let s=[];for(let o of t.local_scorers){try{o.score=await o.scoreExample(r),o.success=o.successCheck()}catch(n){o.error=n instanceof Error?n.message:String(n),o.score=null,o.success=!1}s.push({name:o.name,threshold:o.threshold,success:o.success,score:o.score,reason:o.reason,strict_mode:o.strictMode,evaluation_model:o.model,error:o.error,additional_metadata:o.metadata})}e.push({success:s.every((o)=>o.success),scorers_data:s,data_object:r})}return e}async pollForResults(t,e,r){for(let s=0;s<60;s++){let o=await this.apiClient.fetchExperimentRun({experiment_run_id:e,project_name:t});if(o.results.length===r)return o;await new Promise((n)=>setTimeout(n,5000))}throw Error("Evaluation timed out")}}var tt=require("@opentelemetry/resources"),J=require("@opentelemetry/sdk-trace-web");var Z="0.5.0";var C=Z;class w extends h{webTracerProvider;async initialize(t={}){if(this._initialized)return this;try{let e={[c.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[c.ResourceKeys.TELEMETRY_SDK_VERSION]:C,...this.configuration.resourceAttributes,...t.resourceAttributes},r=await this.getSpanExporter();return this.webTracerProvider=new J.WebTracerProvider({resource:tt.resourceFromAttributes(e),spanProcessors:[new J.BatchSpanProcessor(r)],...t}),this.webTracerProvider.register(),this._initialized=!0,this}catch(e){throw Error(`Failed to initialize browser tracer: ${e instanceof Error?e.message:String(e)}`)}}static getInstance(t){let e=`BrowserTracer:${t.projectName}`;if(!h.instances.has(e))h.instances.set(e,new w(t));return h.instances.get(e)}static async createDefault(t){let e=N.builder().projectName(t).build(),r=new w(e);if(e.initialize)await r.initialize();return r}static async createWithConfiguration(t){let e=new w(t);if(t.initialize)await e.initialize();return e}}var et=require("@opentelemetry/resources"),rt=require("@opentelemetry/sdk-node");class A extends h{nodeSDK;async initialize(t={}){if(this._initialized)return this;try{let e={[c.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[c.ResourceKeys.TELEMETRY_SDK_VERSION]:C,...this.configuration.resourceAttributes,...t.resourceAttributes},r=await this.getSpanExporter();return this.nodeSDK=new rt.NodeSDK({resource:et.resourceFromAttributes(e),instrumentations:t.instrumentations,traceExporter:r,...t}),this.nodeSDK.start(),this._initialized=!0,this}catch(e){throw Error(`Failed to initialize node tracer: ${e instanceof Error?e.message:String(e)}`)}}static getInstance(t){let e=`NodeTracer:${t.projectName}`;if(!h.instances.has(e))h.instances.set(e,new A(t));return h.instances.get(e)}static async createDefault(t){let e=N.builder().projectName(t).enableEvaluation(!0).build(),r=new A(e);if(e.initialize)await r.initialize();return r}static async createWithConfiguration(t){let e=new A(t);if(t.initialize)await e.initialize();return e}async shutdown(){if(!this.nodeSDK){i.warn("Node SDK not initialized, skipping shutdown");return}await this.nodeSDK.shutdown()}}
3
+
4
+ //# debugId=B4B296718866621164756E2164756E21
5
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,38 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/scorers/adapters.ts", "../src/scorers/local-scorer.ts", "../src/scorers/remote-scorer.ts", "../src/data/evaluation-run.ts", "../src/data/example.ts", "../src/data/example-params.ts", "../src/env.ts", "../src/scorers/api_scorers/prompt_scorer/base-prompt-scorer.ts", "../src/internal/api/index.ts", "../src/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.ts", "../src/scorers/api_scorers/prompt_scorer/prompt-scorer.ts", "../src/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.ts", "../src/scorers/api_scorers/answer-correctness-scorer.ts", "../src/scorers/api_scorers/answer-relevancy-scorer.ts", "../src/scorers/api_scorers/faithfulness-scorer.ts", "../src/scorers/api_scorers/instruction-adherence-scorer.ts", "../src/scorers/example-scorer.ts", "../src/tracer/exporters/JudgmentSpanExporter.ts", "../src/utils/logger.ts", "../src/tracer/exporters/NoOpSpanExporter.ts", "../src/tracer/OpenTelemetryKeys.ts", "../src/tracer/Tracer.ts", "../src/utils/annotate.ts", "../src/constants.ts", "../src/tracer/TracerConfiguration.ts", "../src/judgment-client.ts", "../src/tracer/BrowserTracer.ts", "../src/version.ts", "../src/tracer/NodeTracer.ts"],
4
+ "sourcesContent": [
5
+ "import { BaseScorer as BaseScorerModel } from \"../internal/api/models/BaseScorer\";\nimport { ScorerConfig } from \"../internal/api/models/ScorerConfig\";\nimport { LocalScorer } from \"./local-scorer\";\nimport { RemoteScorer } from \"./remote-scorer\";\n\nexport function localScorerToBaseScorer(scorer: LocalScorer): BaseScorerModel {\n return {\n score_type: \"Custom\",\n name: scorer.name,\n class_name: scorer.constructor.name,\n threshold: scorer.threshold,\n strict_mode: scorer.strictMode,\n model: scorer.model,\n score: scorer.score,\n score_breakdown: null,\n reason: scorer.reason,\n using_native_model: null,\n success: scorer.success,\n model_client: null,\n error: scorer.error,\n additional_metadata: scorer.metadata,\n user: null,\n server_hosted: false,\n };\n}\n\nexport function remoteScorerToScorerConfig(scorer: RemoteScorer): ScorerConfig {\n return {\n score_type: scorer.scoreType,\n name: scorer.name,\n threshold: scorer.threshold,\n model: scorer.model,\n strict_mode: scorer.strictMode,\n required_params: Array.from(scorer.requiredParams),\n kwargs: scorer.kwargs,\n };\n}\n",
6
+ "import { Example } from \"../data\";\n\nexport abstract class LocalScorer {\n readonly name: string;\n readonly threshold: number;\n readonly strictMode: boolean;\n readonly model: string | null;\n\n score: number | null = null;\n reason: string | null = null;\n error: string | null = null;\n success = false;\n metadata: Record<string, unknown> | null = null;\n\n constructor(config: LocalScorerConfig) {\n this.name = config.name;\n this.strictMode = config.strictMode ?? false;\n this.threshold = this.strictMode ? 1.0 : (config.threshold ?? 0.5);\n this.model = config.model ?? null;\n }\n\n abstract scoreExample(example: Example): Promise<number>;\n\n successCheck(): boolean {\n if (this.error !== null) return false;\n if (this.score === null) return false;\n return this.score >= this.threshold;\n }\n}\n\nexport interface LocalScorerConfig {\n name: string;\n threshold?: number;\n strictMode?: boolean;\n model?: string | null;\n}\n",
7
+ "export class RemoteScorer {\n readonly scoreType: string;\n readonly name: string;\n readonly threshold: number;\n readonly strictMode: boolean;\n readonly model: string | null;\n readonly requiredParams: readonly string[];\n readonly kwargs: Record<string, unknown>;\n\n constructor(config: RemoteScorerConfig) {\n this.scoreType = config.scoreType;\n this.name = config.name ?? config.scoreType;\n this.strictMode = config.strictMode ?? false;\n this.threshold = this.strictMode ? 1.0 : (config.threshold ?? 0.5);\n this.model = config.model ?? null;\n this.requiredParams = Object.freeze(config.requiredParams ?? []);\n this.kwargs = config.kwargs ?? {};\n }\n}\n\nexport interface RemoteScorerConfig {\n scoreType: string;\n name?: string;\n threshold?: number;\n strictMode?: boolean;\n model?: string | null;\n requiredParams?: string[];\n kwargs?: Record<string, unknown>;\n}\n",
8
+ "import { ExampleEvaluationRun as ExampleEvaluationRunModel } from \"../internal/api/models/ExampleEvaluationRun\";\nimport { TraceEvaluationRun as TraceEvaluationRunModel } from \"../internal/api/models/TraceEvaluationRun\";\nimport {\n localScorerToBaseScorer,\n remoteScorerToScorerConfig,\n} from \"../scorers/adapters\";\nimport { LocalScorer } from \"../scorers/local-scorer\";\nimport { RemoteScorer } from \"../scorers/remote-scorer\";\nimport { Example } from \"./example\";\n\nexport type ScorerInput = LocalScorer | RemoteScorer;\n\nexport class EvaluationRun {\n id: string;\n created_at: string;\n local_scorers: LocalScorer[] = [];\n remote_scorers: RemoteScorer[] = [];\n model?: string | null;\n\n constructor(params: { scorers?: ScorerInput[]; model?: string }) {\n const { scorers = [], model } = params;\n\n this.id = crypto.randomUUID();\n this.created_at = new Date().toISOString();\n this.model = model ?? null;\n\n for (const scorer of scorers) {\n if (scorer instanceof LocalScorer) {\n this.local_scorers.push(scorer);\n } else if (scorer instanceof RemoteScorer) {\n this.remote_scorers.push(scorer);\n }\n }\n }\n\n protected toBaseModel() {\n return {\n id: this.id,\n created_at: this.created_at,\n custom_scorers:\n this.local_scorers.length > 0\n ? this.local_scorers.map(localScorerToBaseScorer)\n : undefined,\n judgment_scorers:\n this.remote_scorers.length > 0\n ? this.remote_scorers.map(remoteScorerToScorerConfig)\n : undefined,\n model: this.model,\n };\n }\n}\n\nexport class ExampleEvaluationRun\n extends EvaluationRun\n implements ExampleEvaluationRunModel\n{\n project_name: string;\n eval_name: string;\n examples: Example[];\n trace_span_id?: string | null;\n trace_id?: string | null;\n\n constructor(params: {\n examples: Example[];\n scorers?: ScorerInput[];\n project_name: string;\n eval_name: string;\n model?: string;\n trace_span_id?: string | null;\n trace_id?: string | null;\n }) {\n const {\n examples,\n project_name,\n eval_name,\n trace_span_id,\n trace_id,\n ...baseParams\n } = params;\n\n super(baseParams);\n\n this.project_name = project_name;\n this.eval_name = eval_name;\n this.examples = examples;\n this.trace_span_id = trace_span_id ?? null;\n this.trace_id = trace_id ?? null;\n }\n\n toModel(): ExampleEvaluationRunModel {\n return {\n ...this.toBaseModel(),\n project_name: this.project_name,\n eval_name: this.eval_name,\n examples: this.examples,\n trace_span_id: this.trace_span_id,\n trace_id: this.trace_id,\n };\n }\n}\n\nexport class TraceEvaluationRun\n extends EvaluationRun\n implements TraceEvaluationRunModel\n{\n project_name: string;\n eval_name: string;\n trace_and_span_ids: [string, string][];\n is_offline?: boolean;\n\n constructor(params: {\n trace_and_span_ids: [string, string][];\n scorers?: ScorerInput[];\n project_name: string;\n eval_name: string;\n model?: string;\n is_offline?: boolean;\n }) {\n const {\n trace_and_span_ids,\n project_name,\n eval_name,\n is_offline,\n ...baseParams\n } = params;\n\n super(baseParams);\n\n this.project_name = project_name;\n this.eval_name = eval_name;\n this.trace_and_span_ids = trace_and_span_ids;\n this.is_offline = is_offline ?? false;\n }\n\n toModel(): TraceEvaluationRunModel {\n return {\n ...this.toBaseModel(),\n project_name: this.project_name,\n eval_name: this.eval_name,\n trace_and_span_ids: this.trace_and_span_ids,\n is_offline: this.is_offline,\n };\n }\n}\n",
9
+ "import { Example as ExampleModel } from \"../internal/api/models/Example\";\n\nexport type Example<\n T extends Record<string, unknown> = Record<string, unknown>,\n> = ExampleModel & T & Record<string, unknown>;\n\nexport function Example<T extends Record<string, unknown>>(\n properties: T,\n): Example<T> {\n const example: Example<T> = {\n example_id: undefined,\n created_at: new Date().toISOString(),\n name: null,\n ...properties,\n } as Example<T>;\n\n return example;\n}\n",
10
+ "export enum ExampleParams {\n INPUT = \"input\",\n ACTUAL_OUTPUT = \"actual_output\",\n EXPECTED_OUTPUT = \"expected_output\",\n CONTEXT = \"context\",\n RETRIEVAL_CONTEXT = \"retrieval_context\",\n TOOLS_CALLED = \"tools_called\",\n EXPECTED_TOOLS = \"expected_tools\",\n ADDITIONAL_METADATA = \"additional_metadata\",\n}\n\nexport type ExampleParamKeys = keyof typeof ExampleParams;\nexport type ExampleParamValues = `${ExampleParams}`;\n",
11
+ "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_LLM_PROXY_URL = getEnvVar(\n \"JUDGMENT_LLM_PROXY_URL\",\n \"https://api.judgmentlabs.ai/llm/proxy/v1\",\n);\nexport const JUDGMENT_DEFAULT_GPT_MODEL = getEnvVar(\n \"JUDGMENT_DEFAULT_GPT_MODEL\",\n \"gpt-4.1\",\n);\nexport const JUDGMENT_ENABLE_MONITORING = getEnvVar(\n \"JUDGMENT_ENABLE_MONITORING\",\n \"true\",\n);\nexport const JUDGMENT_ENABLE_EVALUATIONS = getEnvVar(\n \"JUDGMENT_ENABLE_EVALUATIONS\",\n \"true\",\n);\nexport const JUDGMENT_NO_COLOR = getEnvVar(\"JUDGMENT_NO_COLOR\");\nexport const JUDGMENT_LOG_LEVEL = getEnvVar(\"JUDGMENT_LOG_LEVEL\", \"warn\");\n\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",
12
+ "import { JUDGMENT_API_KEY, JUDGMENT_ORG_ID } from \"../../../env\";\nimport { RemoteScorer } from \"../../remote-scorer\";\n\nexport abstract class BasePromptScorer extends RemoteScorer {\n public prompt: string;\n public model: string | null;\n public options?: Record<string, number> | null;\n public description?: string | null;\n public judgmentApiKey: string;\n public organizationId: string;\n\n constructor(\n scoreType: string,\n name: string,\n prompt: string,\n threshold: number,\n model: string | null,\n options?: Record<string, number> | null,\n description?: string | null,\n judgmentApiKey: string = JUDGMENT_API_KEY ?? \"\",\n organizationId: string = JUDGMENT_ORG_ID ?? \"\",\n ) {\n super({\n scoreType,\n name,\n threshold,\n model,\n requiredParams: [],\n kwargs: {\n prompt,\n ...(options ? { options } : {}),\n ...(description ? { description } : {}),\n },\n });\n this.prompt = prompt;\n this.model = model;\n this.options = options;\n this.description = description;\n this.judgmentApiKey = judgmentApiKey;\n this.organizationId = organizationId;\n }\n\n protected abstract getScoreType(): string;\n protected abstract getIsTrace(): boolean;\n\n getThreshold(): number {\n return this.threshold;\n }\n\n getPrompt(): string {\n return this.prompt;\n }\n\n getOptions(): Record<string, number> | null {\n return this.options ? { ...this.options } : null;\n }\n\n getModel(): string | null {\n return this.model;\n }\n\n getDescription(): string | null | undefined {\n return this.description;\n }\n\n getName(): string {\n return this.name;\n }\n\n getConfig(): Record<string, unknown> {\n return {\n name: this.name,\n prompt: this.prompt,\n threshold: this.threshold,\n model: this.model,\n options: this.options,\n description: this.description,\n };\n }\n\n toString(): string {\n return `${this.constructor.name}(name=${this.name}, prompt=${\n this.prompt\n }, threshold=${this.threshold}, model=${this.model}, options=${JSON.stringify(this.options)}, description=${this.description})`;\n }\n}\n",
13
+ "/**\n * Auto-generated by scripts/generate-client.ts\n * DO NOT EDIT MANUALLY - This file is generated automatically\n */\nimport * as Models from \"./models\";\n\nexport class JudgmentApiClient {\n private baseUrl: string;\n private apiKey: string;\n private organizationId: string;\n\n constructor(baseUrl: string, apiKey: string, organizationId: string) {\n this.baseUrl = baseUrl;\n this.apiKey = apiKey;\n this.organizationId = organizationId;\n }\n\n private buildUrl(path: string): string {\n return this.baseUrl + path;\n }\n\n private buildHeaders(): Record<string, string> {\n if (!this.apiKey || !this.organizationId) {\n throw new Error(\"API key and organization ID cannot be null\");\n }\n return {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n \"X-Organization-Id\": this.organizationId,\n };\n }\n\n async addToRunEvalQueueExamples(\n payload: Models.ExampleEvaluationRun,\n ): Promise<void> {\n const url = this.buildUrl(\"/add_to_run_eval_queue/examples\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async addToRunEvalQueueTraces(\n payload: Models.TraceEvaluationRun,\n ): Promise<void> {\n const url = this.buildUrl(\"/add_to_run_eval_queue/traces\");\n const response = await fetch(url, {\n method: \"POST\",\n headers: this.buildHeaders(),\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP Error: ${response.status} - ${await response.text()}`,\n );\n }\n\n return;\n }\n\n async logEvalResults(\n payload: Models.EvalResults,\n ): Promise<{ ui_results_url: string }> {\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 { ui_results_url: string };\n }\n\n async fetchExperimentRun(\n payload: Models.EvalResultsFetch,\n ): Promise<Models.EvalResultsFetchResponse> {\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.EvalResultsFetchResponse;\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",
14
+ "import {\n JUDGMENT_API_KEY,\n JUDGMENT_API_URL,\n JUDGMENT_ORG_ID,\n} from \"../../../env\";\nimport { JudgmentApiClient } from \"../../../internal/api\";\n\nexport class JudgmentAPIError extends Error {\n constructor(\n public statusCode: number,\n message: string,\n ) {\n super(message);\n this.name = \"JudgmentAPIError\";\n }\n}\n\nexport async function fetchPromptScorer(\n name: string,\n judgmentApiKey: string = JUDGMENT_API_KEY ?? \"\",\n organizationId: string = JUDGMENT_ORG_ID ?? \"\",\n) {\n if (!JUDGMENT_API_URL || !judgmentApiKey || !organizationId) {\n throw new Error(\"Missing required API credentials\");\n }\n\n const client = new JudgmentApiClient(\n JUDGMENT_API_URL,\n judgmentApiKey,\n organizationId,\n );\n const response = await client.fetchScorers({ names: [name] });\n if (response.scorers.length === 0) {\n throw new JudgmentAPIError(404, `Scorer with name ${name} not found`);\n }\n return response.scorers[0];\n}\n",
15
+ "import { JUDGMENT_API_KEY, JUDGMENT_ORG_ID } from \"../../../env\";\nimport { BasePromptScorer } from \"./base-prompt-scorer\";\nimport { fetchPromptScorer, JudgmentAPIError } from \"./prompt-scorer-utils\";\n\nexport { fetchPromptScorer, JudgmentAPIError };\n\nexport class PromptScorer extends BasePromptScorer {\n constructor(\n name: string,\n prompt: string,\n threshold: number,\n model: string | null,\n options?: Record<string, number> | null,\n description?: string | null,\n judgmentApiKey: string = JUDGMENT_API_KEY ?? \"\",\n organizationId: string = JUDGMENT_ORG_ID ?? \"\",\n ) {\n super(\n \"Prompt Scorer\",\n name,\n prompt,\n threshold,\n model,\n options,\n description,\n judgmentApiKey,\n organizationId,\n );\n }\n\n protected getScoreType(): string {\n return \"Prompt Scorer\";\n }\n\n protected getIsTrace(): boolean {\n return false;\n }\n\n static async get(\n name: string,\n judgmentApiKey: string = JUDGMENT_API_KEY ?? \"\",\n organizationId: string = JUDGMENT_ORG_ID ?? \"\",\n ): Promise<PromptScorer> {\n const config = await fetchPromptScorer(\n name,\n judgmentApiKey,\n organizationId,\n );\n\n if (config.is_trace === true) {\n throw new JudgmentAPIError(\n 400,\n `Scorer with name ${name} is a TracePromptScorer, not a PromptScorer`,\n );\n }\n\n return new PromptScorer(\n config.name,\n config.prompt,\n config.threshold,\n config.model ?? null,\n config.options,\n config.description,\n judgmentApiKey,\n organizationId,\n );\n }\n}\n",
16
+ "import { JUDGMENT_API_KEY, JUDGMENT_ORG_ID } from \"../../../env\";\nimport { BasePromptScorer } from \"./base-prompt-scorer\";\nimport { fetchPromptScorer, JudgmentAPIError } from \"./prompt-scorer-utils\";\n\nexport class TracePromptScorer extends BasePromptScorer {\n constructor(\n name: string,\n prompt: string,\n threshold: number,\n model: string | null,\n options?: Record<string, number> | null,\n description?: string | null,\n judgmentApiKey: string = JUDGMENT_API_KEY ?? \"\",\n organizationId: string = JUDGMENT_ORG_ID ?? \"\",\n ) {\n super(\n \"Trace Prompt Scorer\",\n name,\n prompt,\n threshold,\n model,\n options,\n description,\n judgmentApiKey,\n organizationId,\n );\n }\n\n protected getScoreType(): string {\n return \"Trace Prompt Scorer\";\n }\n\n protected getIsTrace(): boolean {\n return true;\n }\n\n static async get(\n name: string,\n judgmentApiKey: string = JUDGMENT_API_KEY ?? \"\",\n organizationId: string = JUDGMENT_ORG_ID ?? \"\",\n ): Promise<TracePromptScorer> {\n const config = await fetchPromptScorer(\n name,\n judgmentApiKey,\n organizationId,\n );\n\n if (config.is_trace !== true) {\n throw new JudgmentAPIError(\n 400,\n `Scorer with name ${name} is a PromptScorer, not a TracePromptScorer`,\n );\n }\n\n return new TracePromptScorer(\n config.name,\n config.prompt,\n config.threshold,\n config.model ?? null,\n config.options,\n config.description,\n judgmentApiKey,\n organizationId,\n );\n }\n}\n",
17
+ "import { ExampleParams } from \"../../data\";\nimport { RemoteScorer, RemoteScorerConfig } from \"../remote-scorer\";\n\nexport class AnswerCorrectnessScorer extends RemoteScorer {\n private constructor(config: Partial<RemoteScorerConfig> = {}) {\n super({\n scoreType: \"Answer Correctness\",\n ...config,\n requiredParams: [\n ExampleParams.INPUT,\n ExampleParams.ACTUAL_OUTPUT,\n ExampleParams.EXPECTED_OUTPUT,\n ],\n });\n }\n\n static get(\n config: Partial<RemoteScorerConfig> = {},\n ): AnswerCorrectnessScorer {\n return new AnswerCorrectnessScorer(config);\n }\n}\n",
18
+ "import { ExampleParams } from \"../../data\";\nimport { RemoteScorer, RemoteScorerConfig } from \"../remote-scorer\";\n\nexport class AnswerRelevancyScorer extends RemoteScorer {\n private constructor(config: Partial<RemoteScorerConfig> = {}) {\n super({\n scoreType: \"Answer Relevancy\",\n ...config,\n requiredParams: [ExampleParams.INPUT, ExampleParams.ACTUAL_OUTPUT],\n });\n }\n\n static get(config: Partial<RemoteScorerConfig> = {}): AnswerRelevancyScorer {\n return new AnswerRelevancyScorer(config);\n }\n}\n",
19
+ "import { ExampleParams } from \"../../data\";\nimport { RemoteScorer, RemoteScorerConfig } from \"../remote-scorer\";\n\nexport class FaithfulnessScorer extends RemoteScorer {\n private constructor(config: Partial<RemoteScorerConfig> = {}) {\n super({\n scoreType: \"Faithfulness\",\n ...config,\n requiredParams: [\n ExampleParams.INPUT,\n ExampleParams.ACTUAL_OUTPUT,\n ExampleParams.RETRIEVAL_CONTEXT,\n ],\n });\n }\n\n static get(config: Partial<RemoteScorerConfig> = {}): FaithfulnessScorer {\n return new FaithfulnessScorer(config);\n }\n}\n",
20
+ "import { ExampleParams } from \"../../data\";\nimport { RemoteScorer, RemoteScorerConfig } from \"../remote-scorer\";\n\nexport class InstructionAdherenceScorer extends RemoteScorer {\n private constructor(config: Partial<RemoteScorerConfig> = {}) {\n super({\n scoreType: \"Instruction Adherence\",\n ...config,\n requiredParams: [ExampleParams.INPUT, ExampleParams.ACTUAL_OUTPUT],\n });\n }\n\n static get(\n config: Partial<RemoteScorerConfig> = {},\n ): InstructionAdherenceScorer {\n return new InstructionAdherenceScorer(config);\n }\n}\n",
21
+ "import { Example } from \"../data\";\nimport { LocalScorer, LocalScorerConfig } from \"./local-scorer\";\n\nexport abstract class ExampleScorer extends LocalScorer {\n abstract scoreExample(example: Example): Promise<number>;\n\n static get<T extends ExampleScorer>(\n this: new (config: LocalScorerConfig) => T,\n options: ExampleScorerOptions,\n ): T {\n return new this({\n name: options.name,\n threshold: options.threshold,\n strictMode: options.strictMode,\n model: options.model,\n });\n }\n}\n\nexport interface ExampleScorerOptions {\n name: string;\n threshold?: number;\n strictMode?: boolean;\n model?: string | null;\n}\n",
22
+ "import { ExportResult } from \"@opentelemetry/core\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-http\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\nimport { Logger } from \"../../utils/logger\";\n\n/**\n * SpanExporter implementation that sends spans to Judgment Labs with project identification.\n *\n * This exporter wraps the OTLP HTTP exporter and adds Judgment Labs specific headers and project\n * identification to all exported spans.\n */\nexport class JudgmentSpanExporter implements SpanExporter {\n private readonly delegate: SpanExporter;\n private readonly projectId: string;\n\n /**\n * Creates a new JudgmentSpanExporter with the specified configuration.\n *\n * @param endpoint the OTLP endpoint URL\n * @param apiKey the API key for authentication\n * @param organizationId the organization ID\n * @param projectId the project ID (must not be null or empty)\n * @throws Error if projectId is null or empty\n */\n constructor(\n endpoint: string,\n apiKey: string,\n organizationId: string,\n projectId: string,\n ) {\n if (!projectId || projectId.trim() === \"\") {\n throw new Error(\"projectId is required for JudgmentSpanExporter\");\n }\n\n this.projectId = projectId;\n this.delegate = new OTLPTraceExporter({\n url: endpoint,\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"X-Organization-Id\": organizationId,\n \"X-Project-Id\": projectId,\n },\n });\n }\n\n /**\n * Creates a new builder for constructing JudgmentSpanExporter instances.\n */\n public static builder(): JudgmentSpanExporterBuilder {\n return new JudgmentSpanExporterBuilder();\n }\n\n /**\n * Exports a collection of spans.\n */\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n Logger.info(`JudgmentSpanExporter: Exported ${spans.length} spans`);\n this.delegate.export(spans, resultCallback);\n }\n\n /**\n * Shuts down the exporter.\n */\n shutdown(): Promise<void> {\n Logger.info(\n `JudgmentSpanExporter: Shutting down exporter for project ${this.projectId}`,\n );\n return this.delegate.shutdown();\n }\n\n /**\n * Forces the exporter to flush any pending spans.\n */\n forceFlush(): Promise<void> {\n Logger.info(\n `JudgmentSpanExporter: Force flushing spans for project ${this.projectId}`,\n );\n return this.delegate.forceFlush?.() ?? Promise.resolve();\n }\n}\n\n/**\n * Builder for creating JudgmentSpanExporter instances.\n */\nexport class JudgmentSpanExporterBuilder {\n private _endpoint?: string;\n private _apiKey?: string;\n private _organizationId?: string;\n private _projectId?: string;\n\n constructor() {}\n\n /**\n * Sets the OTLP endpoint URL.\n *\n * @param endpoint the endpoint URL\n * @return this builder for method chaining\n */\n public endpoint(endpoint: string): this {\n this._endpoint = endpoint;\n return this;\n }\n\n /**\n * Sets the API key for authentication.\n *\n * @param apiKey the API key\n * @return this builder for method chaining\n */\n public apiKey(apiKey: string): this {\n this._apiKey = apiKey;\n return this;\n }\n\n /**\n * Sets the organization ID.\n *\n * @param organizationId the organization ID\n * @return this builder for method chaining\n */\n public organizationId(organizationId: string): this {\n this._organizationId = organizationId;\n return this;\n }\n\n /**\n * Sets the project ID.\n *\n * @param projectId the project ID\n * @return this builder for method chaining\n */\n public projectId(projectId: string): this {\n this._projectId = projectId;\n return this;\n }\n\n /**\n * Builds a new JudgmentSpanExporter with the current configuration.\n *\n * @return a new JudgmentSpanExporter instance\n * @throws Error if required fields are missing\n */\n public build(): JudgmentSpanExporter {\n if (!this._endpoint || this._endpoint.trim() === \"\") {\n throw new Error(\"Endpoint is required\");\n }\n if (!this._apiKey || this._apiKey.trim() === \"\") {\n throw new Error(\"API key is required\");\n }\n if (!this._organizationId || this._organizationId.trim() === \"\") {\n throw new Error(\"Organization ID is required\");\n }\n if (!this._projectId || this._projectId.trim() === \"\") {\n throw new Error(\"Project ID is required\");\n }\n\n return new JudgmentSpanExporter(\n this._endpoint,\n this._apiKey,\n this._organizationId,\n this._projectId,\n );\n }\n}\n",
23
+ "import { JUDGMENT_LOG_LEVEL } from \"../env\";\n\nexport class Logger {\n private static readonly RESET = \"\\x1b[0m\";\n private static readonly RED = \"\\x1b[31m\";\n private static readonly YELLOW = \"\\x1b[33m\";\n private static readonly GRAY = \"\\x1b[90m\";\n\n public static Level = {\n DEBUG: 0,\n INFO: 1,\n WARNING: 2,\n ERROR: 3,\n CRITICAL: 4,\n } as const;\n\n private static initialized = false;\n private static currentLevel: number = Logger.Level.WARNING;\n private static useColor = true;\n\n private static initialize(): void {\n if (!Logger.initialized) {\n const noColor = process.env.JUDGMENT_NO_COLOR;\n Logger.useColor = !noColor && process.stdout.isTTY;\n\n const logLevel = JUDGMENT_LOG_LEVEL.toLowerCase();\n if (logLevel) {\n const levelMap: Record<string, number> = {\n debug: Logger.Level.DEBUG,\n info: Logger.Level.INFO,\n warning: Logger.Level.WARNING,\n warn: Logger.Level.WARNING,\n error: Logger.Level.ERROR,\n critical: Logger.Level.CRITICAL,\n };\n Logger.currentLevel = levelMap[logLevel] ?? Logger.Level.WARNING;\n }\n\n Logger.initialized = true;\n }\n }\n\n public static setLevel(level: number): void {\n Logger.currentLevel = level;\n }\n\n public static setUseColor(useColor: boolean): void {\n Logger.useColor = useColor;\n }\n\n private static log(level: number, message: string): void {\n Logger.initialize();\n\n if (level < Logger.currentLevel) {\n return;\n }\n\n const timestamp = new Date()\n .toISOString()\n .replace(\"T\", \" \")\n .substring(0, 19);\n const levelName =\n Object.keys(Logger.Level).find(\n (key) => Logger.Level[key as keyof typeof Logger.Level] === level,\n ) ?? \"UNKNOWN\";\n let formattedMessage = `${timestamp} - judgeval - ${levelName} - ${message}`;\n\n if (Logger.useColor) {\n const color =\n level === Logger.Level.DEBUG || level === Logger.Level.INFO\n ? Logger.GRAY\n : level === Logger.Level.WARNING\n ? Logger.YELLOW\n : Logger.RED;\n formattedMessage = `${color}${formattedMessage}${Logger.RESET}`;\n }\n\n const output =\n level >= Logger.Level.ERROR ? process.stderr : process.stdout;\n output.write(formattedMessage + \"\\n\");\n }\n\n public static debug(message: string): void {\n Logger.log(Logger.Level.DEBUG, message);\n }\n\n public static info(message: string): void {\n Logger.log(Logger.Level.INFO, message);\n }\n\n public static warning(message: string): void {\n Logger.log(Logger.Level.WARNING, message);\n }\n\n public static warn(message: string): void {\n Logger.log(Logger.Level.WARNING, message);\n }\n\n public static error(message: string): void {\n Logger.log(Logger.Level.ERROR, message);\n }\n\n public static critical(message: string): void {\n Logger.log(Logger.Level.CRITICAL, message);\n }\n}\n",
24
+ "import { ExportResult } from \"@opentelemetry/core\";\nimport { ReadableSpan, SpanExporter } from \"@opentelemetry/sdk-trace-base\";\n\n/**\n * A no-op span exporter that does nothing.\n * Used when project resolution fails or tracing is disabled.\n */\nexport class NoOpSpanExporter implements SpanExporter {\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n resultCallback({ code: 0 });\n }\n\n flush(): Promise<void> {\n return Promise.resolve();\n }\n\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n}\n",
25
+ "export abstract class OpenTelemetryKeys {\n public static readonly AttributeKeys = {\n JUDGMENT_SPAN_KIND: \"judgment.span_kind\",\n JUDGMENT_INPUT: \"judgment.input\",\n JUDGMENT_OUTPUT: \"judgment.output\",\n JUDGMENT_OFFLINE_MODE: \"judgment.offline_mode\",\n JUDGMENT_UPDATE_ID: \"judgment.update_id\",\n\n JUDGMENT_CUSTOMER_ID: \"judgment.customer_id\",\n\n JUDGMENT_AGENT_ID: \"judgment.agent_id\",\n\n JUDGMENT_PARENT_AGENT_ID: \"judgment.parent_agent_id\",\n JUDGMENT_AGENT_CLASS_NAME: \"judgment.agent_class_name\",\n JUDGMENT_AGENT_INSTANCE_NAME: \"judgment.agent_instance_name\",\n\n PENDING_TRACE_EVAL: \"judgment.pending_trace_eval\",\n\n GEN_AI_PROMPT: \"gen_ai.prompt\",\n GEN_AI_COMPLETION: \"gen_ai.completion\",\n GEN_AI_REQUEST_MODEL: \"gen_ai.request.model\",\n GEN_AI_RESPONSE_MODEL: \"gen_ai.response.model\",\n GEN_AI_SYSTEM: \"gen_ai.system\",\n GEN_AI_USAGE_INPUT_TOKENS: \"gen_ai.usage.input_tokens\",\n GEN_AI_USAGE_OUTPUT_TOKENS: \"gen_ai.usage.output_tokens\",\n GEN_AI_USAGE_COMPLETION_TOKENS: \"gen_ai.usage.completion_tokens\",\n GEN_AI_REQUEST_TEMPERATURE: \"gen_ai.request.temperature\",\n GEN_AI_REQUEST_MAX_TOKENS: \"gen_ai.request.max_tokens\",\n GEN_AI_RESPONSE_FINISH_REASONS: \"gen_ai.response.finish_reasons\",\n\n GEN_AI_USAGE_TOTAL_COST: \"gen_ai.usage.total_cost_usd\",\n } as const;\n\n public static readonly InternalAttributeKeys = {\n DISABLE_PARTIAL_EMIT: \"disable_partial_emit\",\n CANCELLED: \"cancelled\",\n } as const;\n\n public static readonly ResourceKeys = {\n SERVICE_NAME: \"service.name\",\n TELEMETRY_SDK_LANGUAGE: \"telemetry.sdk.language\",\n TELEMETRY_SDK_NAME: \"telemetry.sdk.name\",\n TELEMETRY_SDK_VERSION: \"telemetry.sdk.version\",\n JUDGMENT_PROJECT_ID: \"judgment.project_id\",\n } as const;\n}\n",
26
+ "import { Tracer as OpenTelemetryTracer, trace } from \"@opentelemetry/api\";\nimport { JUDGMENT_DEFAULT_GPT_MODEL } from \"../env\";\nimport { JudgmentApiClient } from \"../internal/api\";\nimport {\n ExampleEvaluationRun as ExampleEvaluationRunModel,\n Example as ExampleModel,\n TraceEvaluationRun as TraceEvaluationRunModel,\n} from \"../internal/api/models\";\nimport { remoteScorerToScorerConfig } from \"../scorers/adapters\";\nimport { RemoteScorer } from \"../scorers/remote-scorer\";\nimport { parseFunctionArgs } from \"../utils/annotate\";\nimport { Logger } from \"../utils/logger\";\nimport { JudgmentSpanExporter, NoOpSpanExporter } from \"./exporters\";\nimport { OpenTelemetryKeys } from \"./OpenTelemetryKeys\";\nimport { TracerConfiguration } from \"./TracerConfiguration\";\n\nexport type Serializer = (obj: unknown) => string;\ntype SpanKind = string;\n\nexport interface TracerInitializeOptions {\n resourceAttributes?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport abstract class Tracer {\n protected static instances = new Map<string, Tracer>();\n\n public apiClient: JudgmentApiClient;\n public tracer: OpenTelemetryTracer;\n public serializer: Serializer = JSON.stringify;\n\n protected _initialized = false;\n\n private projectId: string | null = null;\n private spanExporter: JudgmentSpanExporter | NoOpSpanExporter | null = null;\n protected configuration: TracerConfiguration;\n\n public getConfiguration(): TracerConfiguration {\n return this.configuration;\n }\n\n public getProjectId(): string | null {\n return this.projectId;\n }\n\n public getSerializer(): Serializer {\n return this.serializer;\n }\n\n protected constructor(configuration: TracerConfiguration) {\n this.configuration = configuration;\n this.tracer = trace.getTracer(this.configuration.tracerName);\n\n this.apiClient = new JudgmentApiClient(\n this.configuration.apiUrl,\n this.configuration.apiKey,\n this.configuration.organizationId,\n );\n\n this._initialized = false;\n // Initialization is handled by the subclasses, since operation requires IO.\n }\n\n public abstract initialize(options: TracerInitializeOptions): Promise<Tracer>;\n\n private async resolveProjectId(): Promise<string> {\n try {\n Logger.info(\n `Resolving project ID for project: ${this.configuration.projectName}`,\n );\n\n const response = await this.apiClient.projectsResolve({\n project_name: this.configuration.projectName,\n });\n Logger.info(`Resolved project ID: ${response.project_id}`);\n const resolvedProjectId = response.project_id;\n\n this.projectId = resolvedProjectId;\n Logger.info(`Successfully resolved project ID: ${this.projectId}`);\n\n return this.projectId;\n } catch (error) {\n throw new Error(\n `Failed to resolve project ID: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n public async getSpanExporter(): Promise<\n JudgmentSpanExporter | NoOpSpanExporter\n > {\n if (!this.spanExporter) {\n try {\n const projectId = await this.resolveProjectId();\n this.spanExporter = this.createJudgmentSpanExporter(projectId);\n } catch {\n Logger.error(\n \"Failed to resolve project \" +\n this.configuration.projectName +\n \", please create it first at https://app.judgmentlabs.ai/org/\" +\n (this.configuration.organizationId || \"unknown\") +\n \"/projects. Skipping Judgment export.\",\n );\n this.spanExporter = new NoOpSpanExporter();\n }\n }\n\n return this.spanExporter;\n }\n\n public setSpanKind(kind: SpanKind): void {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.info(\"No active span found, skipping setSpanKind\");\n return;\n }\n currentSpan.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_SPAN_KIND,\n kind,\n );\n }\n\n public setAttribute(key: string, value: unknown): void {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.info(\"No active span found, skipping setAttribute\");\n return;\n }\n currentSpan.setAttribute(key, this.serializer(value));\n }\n\n public setLLMSpan(): void {\n this.setSpanKind(\"llm\");\n }\n\n public setToolSpan(): void {\n this.setSpanKind(\"tool\");\n }\n\n public setGeneralSpan(): void {\n this.setSpanKind(\"span\");\n }\n\n public setAttributes(attributes: Record<string, unknown>): void {\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.info(\"No active span found, skipping setAttributes\");\n return;\n }\n for (const [key, value] of Object.entries(attributes)) {\n currentSpan.setAttribute(key, this.serializer(value));\n }\n }\n\n public setInput(input: unknown): void {\n this.setAttribute(OpenTelemetryKeys.AttributeKeys.JUDGMENT_INPUT, input);\n }\n\n public setOutput(output: unknown): void {\n this.setAttribute(OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT, output);\n }\n\n public asyncEvaluate(\n scorer: RemoteScorer,\n example: ExampleModel,\n model?: string,\n ): void {\n try {\n if (!this.configuration.enableEvaluation) {\n return;\n }\n\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.info(\"No active span found, skipping asyncEvaluate\");\n return;\n }\n if (!currentSpan.isRecording()) {\n Logger.info(\"Active span is not recording, skipping asyncEvaluate\");\n return;\n }\n\n const spanContext = currentSpan.spanContext();\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n Logger.info(\n `asyncEvaluate: project=${this.configuration.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorer.name}`,\n );\n\n const evaluationRun = this.createEvaluationRun(\n scorer,\n example,\n model,\n traceId,\n spanId,\n );\n void this.enqueueEvaluation(evaluationRun);\n } catch (error) {\n Logger.error(\n `Failed to asyncEvaluate: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public asyncTraceEvaluate(scorer: RemoteScorer, model?: string): void {\n try {\n if (!this.configuration.enableEvaluation) {\n return;\n }\n\n const currentSpan = trace.getActiveSpan();\n if (!currentSpan) {\n Logger.info(\"No active span found, skipping asyncTraceEvaluate\");\n return;\n }\n if (!currentSpan.isRecording()) {\n Logger.info(\n \"Active span is not recording, skipping asyncTraceEvaluate\",\n );\n return;\n }\n\n const spanContext = currentSpan.spanContext();\n const traceId = spanContext.traceId;\n const spanId = spanContext.spanId;\n\n Logger.info(\n `asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${traceId}, spanId=${spanId}, scorer=${scorer.name}`,\n );\n\n const traceEvaluationRun = this.createTraceEvaluationRun(\n scorer,\n model,\n traceId,\n spanId,\n );\n const traceEvalJson = this.serializer(traceEvaluationRun);\n currentSpan.setAttribute(\n OpenTelemetryKeys.AttributeKeys.PENDING_TRACE_EVAL,\n traceEvalJson,\n );\n } catch (error) {\n Logger.error(\n `Failed to asyncTraceEvaluate: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private createTraceEvaluationRun(\n scorer: RemoteScorer,\n model: string | undefined,\n traceId: string,\n spanId: string,\n ): TraceEvaluationRunModel {\n const evalName = `async_trace_evaluate_${spanId || Date.now()}`;\n const modelName = model ?? JUDGMENT_DEFAULT_GPT_MODEL;\n\n const scorerConfig = remoteScorerToScorerConfig(scorer);\n\n return {\n project_name: this.configuration.projectName,\n eval_name: evalName,\n judgment_scorers: [scorerConfig],\n model: modelName,\n trace_and_span_ids: [[traceId, spanId]],\n };\n }\n\n private createJudgmentSpanExporter(projectId: string): JudgmentSpanExporter {\n const endpoint = this.configuration.apiUrl.endsWith(\"/\")\n ? `${this.configuration.apiUrl}otel/v1/traces`\n : `${this.configuration.apiUrl}/otel/v1/traces`;\n\n return JudgmentSpanExporter.builder()\n .endpoint(endpoint)\n .apiKey(this.configuration.apiKey)\n .organizationId(this.configuration.organizationId)\n .projectId(projectId)\n .build();\n }\n\n private createEvaluationRun(\n scorer: RemoteScorer,\n example: ExampleModel,\n model: string | undefined,\n traceId: string,\n spanId: string,\n ): ExampleEvaluationRunModel {\n const runId = `async_evaluate_${spanId || Date.now()}`;\n const modelName = model ?? JUDGMENT_DEFAULT_GPT_MODEL;\n\n const scorerConfig = remoteScorerToScorerConfig(scorer);\n\n const evaluationRun: ExampleEvaluationRunModel = {\n project_name: this.configuration.projectName,\n eval_name: runId,\n examples: [example],\n custom_scorers: [],\n judgment_scorers: [scorerConfig],\n model: modelName,\n trace_id: traceId,\n trace_span_id: spanId,\n };\n\n return evaluationRun;\n }\n\n private async enqueueEvaluation(\n evaluationRun: ExampleEvaluationRunModel,\n ): Promise<void> {\n try {\n await this.apiClient.addToRunEvalQueueExamples(evaluationRun);\n Logger.info(`Enqueuing evaluation run: ${evaluationRun.eval_name}`);\n } catch (error) {\n Logger.error(\n `Failed to enqueue evaluation run: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private _observe<TArgs extends unknown[], TResult>(\n func: (...args: TArgs) => TResult,\n spanKind: SpanKind = \"span\",\n ): (...args: TArgs) => TResult {\n return (...args: TArgs): TResult => {\n const spanName = func.name || \"anonymous\";\n return this.tracer.startActiveSpan(spanName, (span) => {\n try {\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_SPAN_KIND,\n spanKind,\n );\n\n try {\n const argNames = parseFunctionArgs(func);\n if (argNames.length === args.length) {\n const inputObj: Record<string, unknown> = {};\n argNames.forEach((name, index) => {\n inputObj[name] = args[index];\n });\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_INPUT,\n this.serializer(inputObj),\n );\n }\n } catch (error) {\n Logger.warn(\n `Failed to parse function args: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n\n const result = func(...args);\n\n if (result instanceof Promise) {\n return result\n .then((res: TResult) => {\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT,\n this.serializer(res),\n );\n return res;\n })\n .catch((err: unknown) => {\n span.recordException(\n err instanceof Error ? err : new Error(String(err)),\n );\n throw err;\n })\n .finally(() => {\n span.end();\n }) as TResult;\n }\n\n span.setAttribute(\n OpenTelemetryKeys.AttributeKeys.JUDGMENT_OUTPUT,\n this.serializer(result),\n );\n span.end();\n return result;\n } catch (err) {\n span.recordException(err as Error);\n span.end();\n throw err;\n }\n });\n };\n }\n\n public observe(\n spanKind?: SpanKind,\n ): (\n target: unknown,\n propertyKey: string | symbol,\n descriptor?: PropertyDescriptor,\n ) => void;\n public observe<TArgs extends unknown[], TResult>(\n func: (...args: TArgs) => TResult,\n spanKind?: SpanKind,\n ): (...args: TArgs) => TResult;\n public observe<TArgs extends unknown[], TResult>(\n funcOrSpanKind?: ((...args: TArgs) => TResult) | SpanKind,\n spanKind?: SpanKind,\n ): unknown {\n try {\n if (typeof funcOrSpanKind === \"function\") {\n const wrapped = this._observe(funcOrSpanKind, spanKind ?? \"span\");\n Object.defineProperty(wrapped, \"name\", { value: funcOrSpanKind.name });\n return wrapped;\n }\n return (\n _target: unknown,\n _propertyKey: string | symbol,\n descriptor?: PropertyDescriptor,\n ) => {\n try {\n if (!descriptor) return;\n const originalMethod = descriptor.value as (\n ...args: unknown[]\n ) => unknown;\n const wrapped = this._observe(\n originalMethod,\n funcOrSpanKind ?? \"span\",\n );\n Object.defineProperty(wrapped, \"name\", {\n value: originalMethod.name,\n });\n descriptor.value = wrapped;\n return descriptor;\n } catch (error) {\n Logger.error(\n `Failed to wrap method with observe: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n };\n } catch (error) {\n Logger.error(\n `Failed to observe function: ${error instanceof Error ? error.message : String(error)}`,\n );\n if (typeof funcOrSpanKind === \"function\") {\n return funcOrSpanKind;\n }\n return () => {\n /* empty */\n };\n }\n }\n\n public async shutdown(): Promise<void> {\n /* empty */\n }\n}\n",
27
+ "/* eslint-disable */\n/// Adopted from https://github.com/angular/angular.js/blob/master/src/auto/injector.js\n\nconst ARROW_ARG = /^([^(]+?)=>/;\nconst FN_ARGS = /^[^(]*\\(\\s*([^)]*)\\)/m;\nconst FN_ARG_SPLIT = /,/;\nconst FN_ARG = /^\\s*(_?)(\\S+?)\\1\\s*$/;\nconst STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/gm;\n\nfunction stringifyFn(fn: Function): string {\n return Function.prototype.toString.call(fn);\n}\n\nfunction extractArgs(fn: Function): RegExpMatchArray | null {\n const fnText = stringifyFn(fn).replace(STRIP_COMMENTS, \"\");\n return fnText.match(ARROW_ARG) || fnText.match(FN_ARGS);\n}\n\nexport function parseFunctionArgs(fn: Function): string[] {\n const args = extractArgs(fn);\n if (!args || !args[1]) {\n return [];\n }\n\n return args[1]\n .split(FN_ARG_SPLIT)\n .map((arg) => {\n const match = arg.replace(FN_ARG, (all, underscore, name) => name);\n return match.trim();\n })\n .filter((name) => name.length > 0);\n}\n",
28
+ "export const JUDGEVAL_TRACER_INSTRUMENTING_MODULE_NAME =\n \"opentelemetry.instrumentation.judgeval\" as const;\n",
29
+ "import { JUDGEVAL_TRACER_INSTRUMENTING_MODULE_NAME } from \"../constants\";\nimport { JUDGMENT_API_KEY, JUDGMENT_API_URL, JUDGMENT_ORG_ID } from \"../env\";\n\n/**\n * Configuration for the Judgment Tracer that controls how tracing and evaluation behave.\n *\n * This class encapsulates all configuration parameters needed to initialize a Tracer.\n *\n * @example\n * ```typescript\n * const config = TracerConfiguration.builder()\n * .projectName(\"my-project\")\n * .apiKey(\"your-api-key\")\n * .organizationId(\"your-org-id\")\n * .enableEvaluation(true)\n * .resourceAttributes({\n * \"custom.service.version\": \"1.0.0\",\n * \"custom.environment\": \"production\"\n * })\n * .initialize(true)\n * .build();\n *\n * const tracer = NodeTracer.createWithConfiguration(config);\n * // Tracer is ready to use immediately\n * ```\n */\nexport class TracerConfiguration {\n constructor(\n public readonly projectName: string,\n public readonly apiKey: string,\n public readonly organizationId: string,\n public readonly apiUrl: string,\n public readonly enableEvaluation: boolean,\n public readonly tracerName: string = JUDGEVAL_TRACER_INSTRUMENTING_MODULE_NAME,\n public readonly resourceAttributes: Record<string, unknown> = {},\n public readonly initialize = true,\n ) {}\n\n /**\n * Creates a default configuration with the given project name.\n *\n * This method uses default values from environment variables:\n * - API Key: JUDGMENT_API_KEY\n * - Organization ID: JUDGMENT_ORG_ID\n * - API URL: JUDGMENT_API_URL\n * - Evaluation: enabled\n *\n * @param projectName the name of the project\n * @returns a new TracerConfiguration with default values\n * @throws Error if project name is null or empty\n */\n public static createDefault(projectName: string): TracerConfiguration {\n return new TracerConfigurationBuilder().projectName(projectName).build();\n }\n\n public static builder(): TracerConfigurationBuilder {\n return new TracerConfigurationBuilder();\n }\n}\n\n/**\n * Builder for creating TracerConfiguration instances.\n *\n * @example\n * ```typescript\n * const config = TracerConfiguration.builder()\n * .projectName(\"my-project\")\n * .apiKey(\"custom-api-key\")\n * .organizationId(\"custom-org-id\")\n * .apiUrl(\"https://custom-api.judgmentlabs.ai\")\n * .enableEvaluation(false)\n * .resourceAttributes({\n * \"custom.service.version\": \"2.0.0\",\n * \"custom.region\": \"us-west-2\"\n * })\n * .initialize(false)\n * .build();\n *\n * const tracer = NodeTracer.createWithConfiguration(config);\n * await tracer.initialize({\n * instrumentations: []\n * });\n * ```\n */\nexport class TracerConfigurationBuilder {\n private _projectName?: string;\n private _apiKey: string | null = JUDGMENT_API_KEY;\n private _organizationId: string | null = JUDGMENT_ORG_ID;\n private _apiUrl: string = JUDGMENT_API_URL;\n private _enableEvaluation = true;\n private _tracerName: string = JUDGEVAL_TRACER_INSTRUMENTING_MODULE_NAME;\n private _resourceAttributes: Record<string, unknown> = {};\n private _initialize = true;\n\n public projectName(projectName: string): this {\n this._projectName = projectName;\n return this;\n }\n\n public apiKey(apiKey: string): this {\n this._apiKey = apiKey;\n return this;\n }\n\n public organizationId(organizationId: string): this {\n this._organizationId = organizationId;\n return this;\n }\n\n public apiUrl(apiUrl: string): this {\n this._apiUrl = apiUrl;\n return this;\n }\n\n public enableEvaluation(enableEvaluation: boolean): this {\n this._enableEvaluation = enableEvaluation;\n return this;\n }\n\n public tracerName(tracerName: string): this {\n this._tracerName = tracerName;\n return this;\n }\n\n public resourceAttributes(resourceAttributes: Record<string, unknown>): this {\n this._resourceAttributes = resourceAttributes;\n return this;\n }\n\n public initialize(initialize: boolean): this {\n this._initialize = initialize;\n return this;\n }\n\n public build(): TracerConfiguration {\n if (!this._projectName) {\n throw new Error(\"Project name is required\");\n }\n\n if (!this._apiKey) {\n throw new Error(\"API key is required\");\n }\n\n if (!this._organizationId) {\n throw new Error(\"Organization ID is required\");\n }\n\n if (!this._apiUrl) {\n throw new Error(\"API URL is required\");\n }\n\n return new TracerConfiguration(\n this._projectName,\n this._apiKey,\n this._organizationId,\n this._apiUrl,\n this._enableEvaluation,\n this._tracerName,\n this._resourceAttributes,\n this._initialize,\n );\n }\n}\n",
30
+ "import type { Example } from \"./data\";\nimport { ExampleEvaluationRun } from \"./data\";\nimport { JUDGMENT_API_KEY, JUDGMENT_API_URL, JUDGMENT_ORG_ID } from \"./env\";\nimport { JudgmentApiClient } from \"./internal/api\";\nimport { ScorerData, ScoringResult } from \"./internal/api/models\";\nimport { LocalScorer } from \"./scorers/local-scorer\";\nimport { RemoteScorer } from \"./scorers/remote-scorer\";\n\nexport class JudgmentClient {\n private readonly apiClient: JudgmentApiClient;\n\n constructor(\n apiKey: string | null = JUDGMENT_API_KEY,\n organizationId: string | null = JUDGMENT_ORG_ID,\n ) {\n if (apiKey === null || organizationId === null) {\n throw new Error(\"API key and organization ID are required\");\n }\n\n this.apiClient = new JudgmentApiClient(\n JUDGMENT_API_URL,\n apiKey,\n organizationId,\n );\n }\n\n async runEvaluation(\n examples: Example[],\n scorers: RemoteScorer[],\n projectName: string,\n evalRunName: string,\n model?: string,\n ): Promise<ScoringResult[]>;\n async runEvaluation(\n examples: Example[],\n scorers: LocalScorer[],\n projectName: string,\n evalRunName: string,\n model?: string,\n ): Promise<ScoringResult[]>;\n async runEvaluation(\n examples: Example[],\n scorers: RemoteScorer[] | LocalScorer[],\n projectName: string,\n evalRunName: string,\n model?: string,\n ): Promise<ScoringResult[]> {\n if (examples.length === 0) {\n throw new Error(\"No examples provided\");\n }\n\n const evalRun = new ExampleEvaluationRun({\n project_name: projectName,\n eval_name: evalRunName,\n examples,\n scorers,\n model,\n });\n\n const hasLocalScorers = Boolean(evalRun.local_scorers.length);\n const hasRemoteScorers = Boolean(evalRun.remote_scorers.length);\n\n if (hasLocalScorers && hasRemoteScorers) {\n throw new Error(\n \"Cannot run both local and remote scorers at the same time\",\n );\n }\n\n if (hasRemoteScorers) {\n return this.runRemoteScorers(evalRun);\n }\n\n return this.runLocalScorers(evalRun);\n }\n\n private async runRemoteScorers(\n evaluationRun: ExampleEvaluationRun,\n ): Promise<ScoringResult[]> {\n console.log(\"Running evaluation...\");\n\n await this.apiClient.addToRunEvalQueueExamples(evaluationRun.toModel());\n\n const response = await this.pollForResults(\n evaluationRun.project_name,\n evaluationRun.id,\n evaluationRun.examples.length,\n );\n\n console.log(`View results at: ${response.ui_results_url}/example`);\n\n return response.results;\n }\n\n private async runLocalScorers(\n evaluationRun: ExampleEvaluationRun,\n ): Promise<ScoringResult[]> {\n console.log(\"Running local evaluation...\");\n\n const results = await this.executeLocalScorers(evaluationRun);\n\n const response = await this.apiClient.logEvalResults({\n results,\n run: evaluationRun.toModel(),\n });\n\n console.log(`View results at: ${response.ui_results_url}/example`);\n\n return results;\n }\n\n private async executeLocalScorers(\n evaluationRun: ExampleEvaluationRun,\n ): Promise<ScoringResult[]> {\n const results: ScoringResult[] = [];\n\n for (const example of evaluationRun.examples) {\n const scorersData: ScorerData[] = [];\n\n for (const scorer of evaluationRun.local_scorers) {\n try {\n scorer.score = await scorer.scoreExample(example);\n scorer.success = scorer.successCheck();\n } catch (error) {\n scorer.error = error instanceof Error ? error.message : String(error);\n scorer.score = null;\n scorer.success = false;\n }\n\n scorersData.push({\n name: scorer.name,\n threshold: scorer.threshold,\n success: scorer.success,\n score: scorer.score,\n reason: scorer.reason,\n strict_mode: scorer.strictMode,\n evaluation_model: scorer.model,\n error: scorer.error,\n additional_metadata: scorer.metadata,\n });\n }\n\n results.push({\n success: scorersData.every((s) => s.success),\n scorers_data: scorersData,\n data_object: example,\n });\n }\n\n return results;\n }\n\n private async pollForResults(\n projectName: string,\n experimentRunId: string,\n expectedCount: number,\n ) {\n for (let i = 0; i < 60; i++) {\n const response = await this.apiClient.fetchExperimentRun({\n experiment_run_id: experimentRunId,\n project_name: projectName,\n });\n\n if (response.results.length === expectedCount) {\n return response;\n }\n\n await new Promise((resolve) => setTimeout(resolve, 5000));\n }\n\n throw new Error(\"Evaluation timed out\");\n }\n}\n",
31
+ "import { resourceFromAttributes } from \"@opentelemetry/resources\";\nimport {\n BatchSpanProcessor,\n WebTracerProvider,\n} from \"@opentelemetry/sdk-trace-web\";\nimport { VERSION } from \"../version\";\nimport { OpenTelemetryKeys } from \"./OpenTelemetryKeys\";\nimport { Tracer, TracerInitializeOptions } from \"./Tracer\";\nimport { TracerConfiguration } from \"./TracerConfiguration\";\n\nexport type BrowserTracerInitializeOptions = TracerInitializeOptions & {};\n\nexport class BrowserTracer extends Tracer {\n private webTracerProvider?: WebTracerProvider;\n\n public async initialize(\n options: BrowserTracerInitializeOptions = {},\n ): Promise<BrowserTracer> {\n if (this._initialized) {\n return this;\n }\n\n try {\n const resourceAttributes = {\n [OpenTelemetryKeys.ResourceKeys.SERVICE_NAME]:\n this.configuration.projectName,\n [OpenTelemetryKeys.ResourceKeys.TELEMETRY_SDK_VERSION]: VERSION,\n ...this.configuration.resourceAttributes,\n ...options.resourceAttributes,\n };\n\n const spanExporter = await this.getSpanExporter();\n\n this.webTracerProvider = new WebTracerProvider({\n resource: resourceFromAttributes(resourceAttributes),\n spanProcessors: [new BatchSpanProcessor(spanExporter)],\n ...options,\n });\n\n this.webTracerProvider.register();\n\n this._initialized = true;\n return this;\n } catch (error) {\n throw new Error(\n `Failed to initialize browser tracer: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public static getInstance(configuration: TracerConfiguration): BrowserTracer {\n const key = `BrowserTracer:${configuration.projectName}`;\n if (!Tracer.instances.has(key)) {\n Tracer.instances.set(key, new BrowserTracer(configuration));\n }\n return Tracer.instances.get(key) as BrowserTracer;\n }\n\n public static async createDefault(\n projectName: string,\n ): Promise<BrowserTracer> {\n const configuration = TracerConfiguration.builder()\n .projectName(projectName)\n .build();\n const tracer = new BrowserTracer(configuration);\n if (configuration.initialize) {\n await tracer.initialize();\n }\n return tracer;\n }\n\n public static async createWithConfiguration(\n configuration: TracerConfiguration,\n ): Promise<BrowserTracer> {\n const tracer = new BrowserTracer(configuration);\n if (configuration.initialize) {\n await tracer.initialize();\n }\n return tracer;\n }\n}\n",
32
+ "import { version } from \"../package.json\" with { type: \"json\" };\n\nexport const VERSION = version;\n",
33
+ "import { resourceFromAttributes } from \"@opentelemetry/resources\";\nimport { NodeSDK, NodeSDKConfiguration } from \"@opentelemetry/sdk-node\";\nimport { Logger } from \"../utils/logger\";\nimport { VERSION } from \"../version\";\nimport { OpenTelemetryKeys } from \"./OpenTelemetryKeys\";\nimport { Tracer, TracerInitializeOptions } from \"./Tracer\";\nimport { TracerConfiguration } from \"./TracerConfiguration\";\n\nexport type NodeTracerInitializeOptions = TracerInitializeOptions &\n Partial<NodeSDKConfiguration>;\n\nexport class NodeTracer extends Tracer {\n private nodeSDK?: NodeSDK;\n\n public async initialize(\n options: NodeTracerInitializeOptions = {},\n ): Promise<NodeTracer> {\n if (this._initialized) {\n return this;\n }\n\n try {\n const resourceAttributes = {\n [OpenTelemetryKeys.ResourceKeys.SERVICE_NAME]:\n this.configuration.projectName,\n [OpenTelemetryKeys.ResourceKeys.TELEMETRY_SDK_VERSION]: VERSION,\n ...this.configuration.resourceAttributes,\n ...options.resourceAttributes,\n };\n\n const spanExporter = await this.getSpanExporter();\n\n this.nodeSDK = new NodeSDK({\n resource: resourceFromAttributes(resourceAttributes),\n instrumentations: options.instrumentations,\n traceExporter: spanExporter,\n ...options,\n });\n\n this.nodeSDK.start();\n\n this._initialized = true;\n return this;\n } catch (error) {\n throw new Error(\n `Failed to initialize node tracer: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public static getInstance(configuration: TracerConfiguration): NodeTracer {\n const key = `NodeTracer:${configuration.projectName}`;\n if (!Tracer.instances.has(key)) {\n Tracer.instances.set(key, new NodeTracer(configuration));\n }\n return Tracer.instances.get(key) as NodeTracer;\n }\n\n public static async createDefault(projectName: string): Promise<NodeTracer> {\n const configuration = TracerConfiguration.builder()\n .projectName(projectName)\n .enableEvaluation(true)\n .build();\n const tracer = new NodeTracer(configuration);\n if (configuration.initialize) {\n await tracer.initialize();\n }\n return tracer;\n }\n\n public static async createWithConfiguration(\n configuration: TracerConfiguration,\n ): Promise<NodeTracer> {\n const tracer = new NodeTracer(configuration);\n if (configuration.initialize) {\n await tracer.initialize();\n }\n return tracer;\n }\n\n public async shutdown(): Promise<void> {\n if (!this.nodeSDK) {\n Logger.warn(\"Node SDK not initialized, skipping shutdown\");\n return;\n }\n await this.nodeSDK.shutdown();\n }\n}\n"
34
+ ],
35
+ "mappings": "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",
36
+ "debugId": "B4B296718866621164756E2164756E21",
37
+ "names": []
38
+ }
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- export * from "./tracer";
2
- export * from "./utils/logger";
3
1
  export * from "./data";
2
+ export * from "./env";
4
3
  export * from "./scorers";
5
- export * from "./internal/api";
4
+ export * from "./tracer";
6
5
  export * from "./utils/annotate";
6
+ export * from "./utils/logger";
7
7
  export * from "./utils/types";
8
- export * from "./env";
8
+ export { JudgmentClient } from "./judgment-client";
9
9
  export { BrowserTracer } from "./tracer/BrowserTracer";
10
10
  export { NodeTracer } from "./tracer/NodeTracer";
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAE/B,cAAc,QAAQ,CAAC;AAEvB,cAAc,WAAW,CAAC;AAE1B,cAAc,gBAAgB,CAAC;AAE/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAE9B,cAAc,OAAO,CAAC;AAEtB,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import{OTLPTraceExporter as V}from"@opentelemetry/exporter-trace-otlp-http";function N(t,e){let s=process.env[t];if(!s)return e??null;return s}var l=N("JUDGMENT_API_KEY"),E=N("JUDGMENT_ORG_ID"),d=N("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),M=N("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),rt=N("JUDGMENT_ENABLE_MONITORING","true"),it=N("JUDGMENT_ENABLE_EVALUATIONS","true"),ot=N("JUDGMENT_NO_COLOR"),G=N("JUDGMENT_LOG_LEVEL","warn");class r{static RESET="\x1B[0m";static RED="\x1B[31m";static YELLOW="\x1B[33m";static GRAY="\x1B[90m";static Level={DEBUG:0,INFO:1,WARNING:2,ERROR:3,CRITICAL:4};static initialized=!1;static currentLevel=r.Level.WARNING;static useColor=!0;static initialize(){if(!r.initialized){let t=process.env.JUDGMENT_NO_COLOR;r.useColor=!t&&process.stdout.isTTY;let e=G.toLowerCase();if(e){let s={debug:r.Level.DEBUG,info:r.Level.INFO,warning:r.Level.WARNING,warn:r.Level.WARNING,error:r.Level.ERROR,critical:r.Level.CRITICAL};r.currentLevel=s[e]??r.Level.WARNING}r.initialized=!0}}static setLevel(t){r.currentLevel=t}static setUseColor(t){r.useColor=t}static log(t,e){if(r.initialize(),t<r.currentLevel)return;let s=new Date().toISOString().replace("T"," ").substring(0,19),i=Object.keys(r.Level).find((a)=>r.Level[a]===t)||"UNKNOWN",o=`${s} - judgeval - ${i} - ${e}`;if(r.useColor)o=`${t===r.Level.DEBUG||t===r.Level.INFO?r.GRAY:t===r.Level.WARNING?r.YELLOW:r.RED}${o}${r.RESET}`;(t>=r.Level.ERROR?process.stderr:process.stdout).write(o+`
2
- `)}static debug(t){r.log(r.Level.DEBUG,t)}static info(t){r.log(r.Level.INFO,t)}static warning(t){r.log(r.Level.WARNING,t)}static warn(t){r.log(r.Level.WARNING,t)}static error(t){r.log(r.Level.ERROR,t)}static critical(t){r.log(r.Level.CRITICAL,t)}}class p{delegate;projectId;constructor(t,e,s,i){if(!i||i.trim()==="")throw Error("projectId is required for JudgmentSpanExporter");this.projectId=i,this.delegate=new V({url:t,headers:{Authorization:`Bearer ${e}`,"X-Organization-Id":s,"X-Project-Id":i}})}static builder(){return new C}export(t,e){r.info(`JudgmentSpanExporter: Exported ${t.length} spans`),this.delegate.export(t,e)}shutdown(){return r.info(`JudgmentSpanExporter: Shutting down exporter for project ${this.projectId}`),this.delegate.shutdown()}forceFlush(){return r.info(`JudgmentSpanExporter: Force flushing spans for project ${this.projectId}`),this.delegate.forceFlush?.()??Promise.resolve()}}class C{_endpoint;_apiKey;_organizationId;_projectId;constructor(){}endpoint(t){return this._endpoint=t,this}apiKey(t){return this._apiKey=t,this}organizationId(t){return this._organizationId=t,this}projectId(t){return this._projectId=t,this}build(){if(!this._endpoint||this._endpoint.trim()==="")throw Error("Endpoint is required");if(!this._apiKey||this._apiKey.trim()==="")throw Error("API key is required");if(!this._organizationId||this._organizationId.trim()==="")throw Error("Organization ID is required");if(!this._projectId||this._projectId.trim()==="")throw Error("Project ID is required");return new p(this._endpoint,this._apiKey,this._organizationId,this._projectId)}}class h{export(t,e){e({code:0})}flush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}class u{static AttributeKeys={JUDGMENT_SPAN_KIND:"judgment.span_kind",JUDGMENT_INPUT:"judgment.input",JUDGMENT_OUTPUT:"judgment.output",JUDGMENT_OFFLINE_MODE:"judgment.offline_mode",JUDGMENT_UPDATE_ID:"judgment.update_id",JUDGMENT_CUSTOMER_ID:"judgment.customer_id",JUDGMENT_AGENT_ID:"judgment.agent_id",JUDGMENT_PARENT_AGENT_ID:"judgment.parent_agent_id",JUDGMENT_AGENT_CLASS_NAME:"judgment.agent_class_name",JUDGMENT_AGENT_INSTANCE_NAME:"judgment.agent_instance_name",PENDING_TRACE_EVAL:"judgment.pending_trace_eval",GEN_AI_PROMPT:"gen_ai.prompt",GEN_AI_COMPLETION:"gen_ai.completion",GEN_AI_REQUEST_MODEL:"gen_ai.request.model",GEN_AI_RESPONSE_MODEL:"gen_ai.response.model",GEN_AI_SYSTEM:"gen_ai.system",GEN_AI_USAGE_INPUT_TOKENS:"gen_ai.usage.input_tokens",GEN_AI_USAGE_OUTPUT_TOKENS:"gen_ai.usage.output_tokens",GEN_AI_USAGE_COMPLETION_TOKENS:"gen_ai.usage.completion_tokens",GEN_AI_REQUEST_TEMPERATURE:"gen_ai.request.temperature",GEN_AI_REQUEST_MAX_TOKENS:"gen_ai.request.max_tokens",GEN_AI_RESPONSE_FINISH_REASONS:"gen_ai.response.finish_reasons",GEN_AI_USAGE_TOTAL_COST:"gen_ai.usage.total_cost_usd"};static InternalAttributeKeys={DISABLE_PARTIAL_EMIT:"disable_partial_emit",CANCELLED:"cancelled"};static ResourceKeys={SERVICE_NAME:"service.name",TELEMETRY_SDK_LANGUAGE:"telemetry.sdk.language",TELEMETRY_SDK_NAME:"telemetry.sdk.name",TELEMETRY_SDK_VERSION:"telemetry.sdk.version",JUDGMENT_PROJECT_ID:"judgment.project_id"}}import{context as J,trace as b}from"@opentelemetry/api";class f{baseUrl;apiKey;organizationId;constructor(t,e,s){this.baseUrl=t,this.apiKey=e,this.organizationId=s}buildUrl(t){return this.baseUrl+t}buildHeaders(){if(!this.apiKey||!this.organizationId)throw Error("API key and organization ID cannot be null");return{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId}}async addToRunEvalQueueExamples(t){let e=this.buildUrl("/add_to_run_eval_queue/examples"),s=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return}async addToRunEvalQueueTraces(t){let e=this.buildUrl("/add_to_run_eval_queue/traces"),s=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return}async logEvalResults(t){let e=this.buildUrl("/log_eval_results/"),s=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return}async fetchExperimentRun(t){let e=this.buildUrl("/fetch_experiment_run/"),s=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return}async getEvaluationStatus(t,e){let s=new URLSearchParams;s.set("experiment_run_id",t),s.set("project_name",e);let i=this.buildUrl("/get_evaluation_status/"+(s.toString()?"?"+s.toString():"")),o=await fetch(i,{method:"GET",headers:this.buildHeaders()});if(!o.ok)throw Error(`HTTP Error: ${o.status} - ${await o.text()}`);return}async scorerExists(t){let e=this.buildUrl("/scorer_exists/"),s=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return await s.json()}async saveScorer(t){let e=this.buildUrl("/save_scorer/"),s=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return await s.json()}async fetchScorers(t){let e=this.buildUrl("/fetch_scorers/"),s=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return await s.json()}async projectsResolve(t){let e=this.buildUrl("/projects/resolve/"),s=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!s.ok)throw Error(`HTTP Error: ${s.status} - ${await s.text()}`);return await s.json()}}var W=/^([^(]+?)=>/,B=/^[^(]*\(\s*([^)]*)\)/m,q=/,/,Y=/^\s*(_?)(\S+?)\1\s*$/,g=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function z(t){return Function.prototype.toString.call(t)}function j(t){let e=z(t).replace(g,"");return e.match(W)||e.match(B)}function I(t){let e=j(t);if(!e||!e[1])return[];return e[1].split(q).map((s)=>{return s.replace(Y,(o,n,a)=>a).trim()}).filter((s)=>s.length>0)}class T{static instances=new Map;apiClient;tracer;serializer=JSON.stringify;_initialized=!1;projectId=null;spanExporter=null;configuration;getConfiguration(){return this.configuration}getProjectId(){return this.projectId}getSerializer(){return this.serializer}constructor(t){this.configuration=t,this.tracer=b.getTracer(this.configuration.tracerName),this.apiClient=new f(this.configuration.apiUrl,this.configuration.apiKey,this.configuration.organizationId),this._initialized=!1}async resolveProjectId(){try{r.info(`Resolving project ID for project: ${this.configuration.projectName}`);let t=await this.apiClient.projectsResolve({project_name:this.configuration.projectName});r.info(`Resolved project ID: ${t.project_id}`);let e=t.project_id?.toString();if(!e)throw Error(`Project ID not found for project: ${this.configuration.projectName}`);return this.projectId=e,r.info(`Successfully resolved project ID: ${this.projectId}`),this.projectId}catch(t){throw Error(`Failed to resolve project ID: ${t instanceof Error?t.message:String(t)}`)}}async getSpanExporter(){if(!this.spanExporter)try{let t=await this.resolveProjectId();this.spanExporter=this.createJudgmentSpanExporter(t)}catch(t){r.error("Failed to resolve project "+this.configuration.projectName+", please create it first at https://app.judgmentlabs.ai/org/"+(this.configuration.organizationId||"unknown")+"/projects. Skipping Judgment export."),this.spanExporter=new h}return this.spanExporter}setSpanKind(t){let e=b.getActiveSpan();if(!e){r.info("No active span found, skipping setSpanKind");return}if(t!==null)e.setAttribute(u.AttributeKeys.JUDGMENT_SPAN_KIND,t)}setAttribute(t,e){let s=b.getActiveSpan();if(!s){r.info("No active span found, skipping setAttribute");return}s.setAttribute(t,this.serializer(e))}setLLMSpan(){this.setSpanKind("llm")}setToolSpan(){this.setSpanKind("tool")}setGeneralSpan(){this.setSpanKind("span")}setAttributes(t){if(!t)return;let e=b.getActiveSpan();if(!e){r.info("No active span found, skipping setAttributes");return}for(let[s,i]of Object.entries(t))e.setAttribute(s,this.serializer(i))}setInput(t){this.setAttribute(u.AttributeKeys.JUDGMENT_INPUT,t)}setOutput(t){this.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,t)}asyncEvaluate(t,e,s){try{if(!this.configuration.enableEvaluation)return;let i=b.getActiveSpan();if(!i){r.info("No active span found, skipping asyncEvaluate");return}if(!i.isRecording()){r.info("Active span is not recording, skipping asyncEvaluate");return}let o=i.spanContext(),n=o.traceId,a=o.spanId;r.info(`asyncEvaluate: project=${this.configuration.projectName}, traceId=${n}, spanId=${a}, scorer=${t.name}`);let c=this.createEvaluationRun(t,e,s,n,a);this.enqueueEvaluation(c)}catch(i){r.error(`Failed to asyncEvaluate: ${i instanceof Error?i.message:String(i)}`)}}asyncTraceEvaluate(t,e){try{if(!this.configuration.enableEvaluation)return;let s=b.getActiveSpan();if(!s){r.info("No active span found, skipping asyncTraceEvaluate");return}if(!s.isRecording()){r.info("Active span is not recording, skipping asyncTraceEvaluate");return}let i=s.spanContext(),o=i.traceId,n=i.spanId;r.info(`asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${o}, spanId=${n}, scorer=${t.name}`);let a=this.createTraceEvaluationRun(t,e,o,n),c=this.serializer(a);s.setAttribute(u.AttributeKeys.PENDING_TRACE_EVAL,c)}catch(s){r.error(`Failed to asyncTraceEvaluate: ${s instanceof Error?s.message:String(s)}`)}}createTraceEvaluationRun(t,e,s,i){let o=`async_trace_evaluate_${i||Date.now()}`,n=e||M,a=t.getScorerConfig();return{project_name:this.configuration.projectName,eval_name:o,scorer:a,model:n,organization_id:this.configuration.organizationId,trace_id:s,trace_span_id:i}}createJudgmentSpanExporter(t){let e=this.configuration.apiUrl.endsWith("/")?`${this.configuration.apiUrl}otel/v1/traces`:`${this.configuration.apiUrl}/otel/v1/traces`;return p.builder().endpoint(e).apiKey(this.configuration.apiKey).organizationId(this.configuration.organizationId).projectId(t).build()}createEvaluationRun(t,e,s,i,o){let n=`async_evaluate_${o||Date.now()}`,a=s||M,c=t.getScorerConfig();return{project_name:this.configuration.projectName,eval_name:n,examples:[e],custom_scorers:[],judgment_scorers:[c],model:a,trace_id:i,trace_span_id:o}}async enqueueEvaluation(t){if(!this.apiClient){r.info("API client not available, skipping evaluation enqueue");return}try{await this.apiClient.addToRunEvalQueueExamples(t),r.info(`Enqueuing evaluation run: ${t.eval_name}`)}catch(e){r.error(`Failed to enqueue evaluation run: ${e instanceof Error?e.message:String(e)}`)}}_observe(t,e="span"){return J.bind(J.active(),(...s)=>{let i=t.name||"anonymous";return this.tracer.startActiveSpan(i,(o)=>{return this._executeWithSpan(o,t,s,e)})})}_executeWithSpan(t,e,s,i){try{t.setAttribute(u.AttributeKeys.JUDGMENT_SPAN_KIND,i);try{let n=I(e);if(n.length===s.length){let a={};n.forEach((c,_)=>{a[c]=s[_]}),t.setAttribute(u.AttributeKeys.JUDGMENT_INPUT,this.serializer(a))}}catch(n){r.warn(`Failed to parse function args: ${n instanceof Error?n.message:String(n)}`)}let o=e(...s);if(o instanceof Promise)return o.then((n)=>{return t.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(n)),n}).catch((n)=>{throw t.recordException(n),n}).finally(()=>{t.end()});else return t.setAttribute(u.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(o)),t.end(),o}catch(o){throw t.recordException(o),t.end(),o}}observe(t,e){try{if(typeof t==="function"){let s=this._observe(t,e||"span");return Object.defineProperty(s,"name",{value:t.name}),s}return(s,i,o)=>{try{if(!o)return;let n=o.value,a=this._observe(n,t||"span");return Object.defineProperty(a,"name",{value:n.name}),o.value=a,o}catch(n){r.error(`Failed to wrap method with observe: ${n instanceof Error?n.message:String(n)}`)}}}catch(s){if(r.error(`Failed to observe function: ${s instanceof Error?s.message:String(s)}`),typeof t==="function")return t;return()=>{}}}async shutdown(){}}var y="opentelemetry.instrumentation.judgeval";class x{projectName;apiKey;organizationId;apiUrl;enableEvaluation;tracerName;resourceAttributes;initialize;constructor(t,e,s,i,o,n=y,a={},c=!0){this.projectName=t;this.apiKey=e;this.organizationId=s;this.apiUrl=i;this.enableEvaluation=o;this.tracerName=n;this.resourceAttributes=a;this.initialize=c}static createDefault(t){return new U().projectName(t).build()}static builder(){return new U}}class U{_projectName;_apiKey=l;_organizationId=E;_apiUrl=d;_enableEvaluation=!0;_tracerName=y;_resourceAttributes={};_initialize=!0;projectName(t){return this._projectName=t,this}apiKey(t){return this._apiKey=t,this}organizationId(t){return this._organizationId=t,this}apiUrl(t){return this._apiUrl=t,this}enableEvaluation(t){return this._enableEvaluation=t,this}tracerName(t){return this._tracerName=t,this}resourceAttributes(t){return this._resourceAttributes=t,this}initialize(t){return this._initialize=t,this}build(){if(!this._projectName)throw Error("Project name is required");if(!this._apiKey)throw Error("API key is required");if(!this._organizationId)throw Error("Organization ID is required");if(!this._apiUrl)throw Error("API URL is required");return new x(this._projectName,this._apiKey,this._organizationId,this._apiUrl,this._enableEvaluation,this._tracerName,this._resourceAttributes,this._initialize)}}function Lt(t){return{example_id:void 0,created_at:new Date().toISOString(),name:null,...t}}var X;((_)=>{_.INPUT="input";_.ACTUAL_OUTPUT="actual_output";_.EXPECTED_OUTPUT="expected_output";_.CONTEXT="context";_.RETRIEVAL_CONTEXT="retrieval_context";_.TOOLS_CALLED="tools_called";_.EXPECTED_TOOLS="expected_tools";_.ADDITIONAL_METADATA="additional_metadata"})(X||={});function $(){let t={score_type:"",class_name:"",name:"",addModel:(e)=>{t.model=e},successCheck:()=>{if(t.error!=null)return!1;if(t.score==null)return!1;let e=t.threshold??0.5,s=t.score;return e!=null&&s!=null&&s>=e},getRequiredParams:()=>{return[]},getScorerConfig:()=>{return{score_type:t.score_type,name:t.name,threshold:t.threshold??0.5,strict_mode:t.strict_mode??!1,required_params:[],kwargs:{}}}};if(t.class_name="BaseScorer",t.name=t.class_name,t.strict_mode===!0)t.threshold=1;return t}var L;((m)=>{m.PROMPT_SCORER="Prompt Scorer";m.TRACE_PROMPT_SCORER="Trace Prompt Scorer";m.FAITHFULNESS="Faithfulness";m.ANSWER_RELEVANCY="Answer Relevancy";m.ANSWER_CORRECTNESS="Answer Correctness";m.INSTRUCTION_ADHERENCE="Instruction Adherence";m.EXECUTION_ORDER="Execution Order";m.TOOL_ORDER="Tool Order";m.CLASSIFIER="Classifier";m.TOOL_DEPENDENCY="Tool Dependency";m.CUSTOM="Custom"})(L||={});function gt(t,e){let s=$();return s.scoreType=t,s.name=t,s.score_type=t,s.requiredParams=e,s.setThreshold=(i)=>{if(i<0||i>1)throw Error(`Threshold must be between 0 and 1, got: ${i}`);s.threshold=i},s.getScoreType=()=>{return s.scoreType},s.setRequiredParams=(i)=>{s.requiredParams=i},s}class R extends Error{statusCode;constructor(t,e){super(e);this.statusCode=t;this.name="JudgmentAPIError"}}async function S(t,e,s,i,o=l||"",n=E||"",a){if(!d||!o||!n)throw Error("Missing required API credentials");return(await new f(d,o,n).saveScorer({name:t,prompt:e,threshold:s,options:i,is_trace:a})).name}async function O(t,e=l||"",s=E||""){if(!d||!e||!s)throw Error("Missing required API credentials");let o=await new f(d,e,s).fetchScorers({names:[t]});if(o.scorers.length===0)throw new R(404,`Scorer with name ${t} not found`);let{created_at:n,updated_at:a,...c}=o.scorers[0];return c}async function A(t,e=l||"",s=E||""){if(!d||!e||!s)throw Error("Missing required API credentials");return(await new f(d,e,s).scorerExists({name:t})).exists}class w{scoreType;name;prompt;threshold;options;judgmentApiKey;organizationId;requiredParams;score_type;class_name;model;score;error;strict_mode;constructor(t,e,s,i,o,n,a=l||"",c=E||""){this.scoreType=t,this.name=e,this.prompt=s,this.threshold=i,this.requiredParams=o,this.options=n,this.judgmentApiKey=a,this.organizationId=c,this.score_type=t,this.class_name="BasePromptScorer",this.model=void 0,this.score=void 0,this.error=null,this.strict_mode=!1}score_breakdown;reason;using_native_model;success;model_client;additional_metadata;user;server_hosted;static async get(t,e=l||"",s=E||""){let i=await O(t,e,s),o=i.is_trace===!0,n=this.prototype.scoreType==="Trace Prompt Scorer";if(o!==n)throw new R(400,`Scorer with name ${t} is not a ${this.name}`);let a=o?"Trace Prompt Scorer":"Prompt Scorer";return new this(a,i.name,i.prompt,i.threshold,[],i.options,e,s)}static async create(t,e,s=0.5,i,o=l||"",n=E||""){if(await A(t,o,n))throw new R(400,`Scorer with name ${t} already exists. Either use the existing scorer with the get() method or use a new name.`);let a=this.prototype.scoreType==="Trace Prompt Scorer",c=a?"Trace Prompt Scorer":"Prompt Scorer";return await S(t,e,s,i,o,n,a),new this(c,t,e,s,[],i,o,n)}async updateThreshold(t){this.setThreshold(t),await this.pushPromptScorer()}async setPrompt(t){this.prompt=t,await this.pushPromptScorer()}async setOptions(t){this.options=t,await this.pushPromptScorer()}async appendToPrompt(t){this.prompt+=t,await this.pushPromptScorer()}getThreshold(){return this.threshold}getPrompt(){return this.prompt}getOptions(){return this.options?{...this.options}:null}getName(){return this.name}getConfig(){return{name:this.name,prompt:this.prompt,threshold:this.threshold,options:this.options}}async pushPromptScorer(){await S(this.name,this.prompt,this.threshold,this.options,this.judgmentApiKey,this.organizationId)}toString(){return`${this.constructor.name}(name=${this.name}, prompt=${this.prompt}, threshold=${this.threshold}, options=${JSON.stringify(this.options)})`}addModel(t){this.model=t}successCheck(){if(this.error!=null)return!1;if(this.score==null)return!1;let t=this.threshold??0.5,e=this.score;return t!=null&&e!=null&&e>=t}getRequiredParams(){if(Array.isArray(this.requiredParams))return[...this.requiredParams];return[]}setThreshold(t){if(t<0||t>1)throw Error(`Threshold must be between 0 and 1, got: ${t}`);this.threshold=t}getScoreType(){return this.scoreType}setRequiredParams(t){this.requiredParams=t}getScorerConfig(){return{score_type:this.getScoreType(),name:this.getName(),threshold:this.getThreshold(),strict_mode:this.strict_mode??!1,required_params:this.getRequiredParams(),kwargs:{prompt:this.getPrompt(),...this.getOptions()?{options:this.getOptions()}:{}}}}}class F extends w{constructor(t,e,s,i,o=[],n,a=l||"",c=E||""){super(t,e,s,i,o,n,a,c)}}class H extends w{constructor(t,e,s,i,o=[],n,a=l||"",c=E||""){super(t,e,s,i,o,n,a,c)}}import{resourceFromAttributes as Z}from"@opentelemetry/resources";import{BatchSpanProcessor as K,WebTracerProvider as tt}from"@opentelemetry/sdk-trace-web";var k="0.4.0";var D=k;class P extends T{webTracerProvider;async initialize(t={}){if(this._initialized)return this;try{let e={[u.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[u.ResourceKeys.TELEMETRY_SDK_VERSION]:D,...this.configuration.resourceAttributes,...t.resourceAttributes},s=await this.getSpanExporter();return this.webTracerProvider=new tt({resource:Z(e),spanProcessors:[new K(s)],...t}),this.webTracerProvider.register(),this._initialized=!0,this}catch(e){throw Error(`Failed to initialize browser tracer: ${e instanceof Error?e.message:String(e)}`)}}static getInstance(t){let e=`BrowserTracer:${t.projectName}`;if(!T.instances.has(e))T.instances.set(e,new P(t));return T.instances.get(e)}static async createDefault(t){let e=x.builder().projectName(t).build(),s=new P(e);if(e.initialize)await s.initialize();return s}static async createWithConfiguration(t){let e=new P(t);if(t.initialize)await e.initialize();return e}}import{resourceFromAttributes as et}from"@opentelemetry/resources";import{NodeSDK as st}from"@opentelemetry/sdk-node";class v extends T{nodeSDK;async initialize(t={}){if(this._initialized)return this;try{let e={[u.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[u.ResourceKeys.TELEMETRY_SDK_VERSION]:D,...this.configuration.resourceAttributes,...t.resourceAttributes},s=await this.getSpanExporter();return this.nodeSDK=new st({resource:et(e),instrumentations:t.instrumentations,traceExporter:s,...t}),this.nodeSDK.start(),this._initialized=!0,this}catch(e){throw Error(`Failed to initialize node tracer: ${e instanceof Error?e.message:String(e)}`)}}static getInstance(t){let e=`NodeTracer:${t.projectName}`;if(!T.instances.has(e))T.instances.set(e,new v(t));return T.instances.get(e)}static async createDefault(t){let e=x.builder().projectName(t).enableEvaluation(!0).build(),s=new v(e);if(e.initialize)await s.initialize();return s}static async createWithConfiguration(t){let e=new v(t);if(t.initialize)await e.initialize();return e}async shutdown(){if(!this.nodeSDK){r.warn("Node SDK not initialized, skipping shutdown");return}await this.nodeSDK.shutdown()}}export{A as scorerExists,S as pushPromptScorer,I as parseFunctionArgs,O as fetchPromptScorer,$ as createBaseScorer,gt as createAPIScorer,U as TracerConfigurationBuilder,x as TracerConfiguration,T as Tracer,H as TracePromptScorer,F as PromptScorer,u as OpenTelemetryKeys,v as NodeTracer,h as NoOpSpanExporter,r as Logger,p as JudgmentSpanExporter,f as JudgmentApiClient,R as JudgmentAPIError,E as JUDGMENT_ORG_ID,ot as JUDGMENT_NO_COLOR,G as JUDGMENT_LOG_LEVEL,rt as JUDGMENT_ENABLE_MONITORING,it as JUDGMENT_ENABLE_EVALUATIONS,M as JUDGMENT_DEFAULT_GPT_MODEL,d as JUDGMENT_API_URL,l as JUDGMENT_API_KEY,X as ExampleParams,Lt as Example,P as BrowserTracer,w as BasePromptScorer,L as APIScorerType};
1
+ function L(t){return{score_type:"Custom",name:t.name,class_name:t.constructor.name,threshold:t.threshold,strict_mode:t.strictMode,model:t.model,score:t.score,score_breakdown:null,reason:t.reason,using_native_model:null,success:t.success,model_client:null,error:t.error,additional_metadata:t.metadata,user:null,server_hosted:!1}}function g(t){return{score_type:t.scoreType,name:t.name,threshold:t.threshold,model:t.model,strict_mode:t.strictMode,required_params:Array.from(t.requiredParams),kwargs:t.kwargs}}class b{name;threshold;strictMode;model;score=null;reason=null;error=null;success=!1;metadata=null;constructor(t){this.name=t.name,this.strictMode=t.strictMode??!1,this.threshold=this.strictMode?1:t.threshold??0.5,this.model=t.model??null}successCheck(){if(this.error!==null)return!1;if(this.score===null)return!1;return this.score>=this.threshold}}class d{scoreType;name;threshold;strictMode;model;requiredParams;kwargs;constructor(t){this.scoreType=t.scoreType,this.name=t.name??t.scoreType,this.strictMode=t.strictMode??!1,this.threshold=this.strictMode?1:t.threshold??0.5,this.model=t.model??null,this.requiredParams=Object.freeze(t.requiredParams??[]),this.kwargs=t.kwargs??{}}}class O{id;created_at;local_scorers=[];remote_scorers=[];model;constructor(t){let{scorers:e=[],model:r}=t;this.id=crypto.randomUUID(),this.created_at=new Date().toISOString(),this.model=r??null;for(let s of e)if(s instanceof b)this.local_scorers.push(s);else if(s instanceof d)this.remote_scorers.push(s)}toBaseModel(){return{id:this.id,created_at:this.created_at,custom_scorers:this.local_scorers.length>0?this.local_scorers.map(L):void 0,judgment_scorers:this.remote_scorers.length>0?this.remote_scorers.map(g):void 0,model:this.model}}}class U extends O{project_name;eval_name;examples;trace_span_id;trace_id;constructor(t){let{examples:e,project_name:r,eval_name:s,trace_span_id:o,trace_id:n,...a}=t;super(a);this.project_name=r,this.eval_name=s,this.examples=e,this.trace_span_id=o??null,this.trace_id=n??null}toModel(){return{...this.toBaseModel(),project_name:this.project_name,eval_name:this.eval_name,examples:this.examples,trace_span_id:this.trace_span_id,trace_id:this.trace_id}}}class B extends O{project_name;eval_name;trace_and_span_ids;is_offline;constructor(t){let{trace_and_span_ids:e,project_name:r,eval_name:s,is_offline:o,...n}=t;super(n);this.project_name=r,this.eval_name=s,this.trace_and_span_ids=e,this.is_offline=o??!1}toModel(){return{...this.toBaseModel(),project_name:this.project_name,eval_name:this.eval_name,trace_and_span_ids:this.trace_and_span_ids,is_offline:this.is_offline}}}function ft(t){return{example_id:void 0,created_at:new Date().toISOString(),name:null,...t}}var P;((p)=>{p.INPUT="input";p.ACTUAL_OUTPUT="actual_output";p.EXPECTED_OUTPUT="expected_output";p.CONTEXT="context";p.RETRIEVAL_CONTEXT="retrieval_context";p.TOOLS_CALLED="tools_called";p.EXPECTED_TOOLS="expected_tools";p.ADDITIONAL_METADATA="additional_metadata"})(P||={});function E(t,e){let r=process.env[t];if(!r)return e??null;return r}var u=E("JUDGMENT_API_KEY"),m=E("JUDGMENT_ORG_ID"),_=E("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),St=E("JUDGMENT_LLM_PROXY_URL","https://api.judgmentlabs.ai/llm/proxy/v1"),D=E("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),wt=E("JUDGMENT_ENABLE_MONITORING","true"),At=E("JUDGMENT_ENABLE_EVALUATIONS","true"),yt=E("JUDGMENT_NO_COLOR"),$=E("JUDGMENT_LOG_LEVEL","warn"),Mt=E("OPENAI_API_KEY"),vt=E("ANTHROPIC_API_KEY"),Ot=E("GOOGLE_API_KEY"),Ut=E("GEMINI_API_KEY");class R extends d{prompt;model;options;description;judgmentApiKey;organizationId;constructor(t,e,r,s,o,n,a,l=u??"",p=m??""){super({scoreType:t,name:e,threshold:s,model:o,requiredParams:[],kwargs:{prompt:r,...n?{options:n}:{},...a?{description:a}:{}}});this.prompt=r,this.model=o,this.options=n,this.description=a,this.judgmentApiKey=l,this.organizationId=p}getThreshold(){return this.threshold}getPrompt(){return this.prompt}getOptions(){return this.options?{...this.options}:null}getModel(){return this.model}getDescription(){return this.description}getName(){return this.name}getConfig(){return{name:this.name,prompt:this.prompt,threshold:this.threshold,model:this.model,options:this.options,description:this.description}}toString(){return`${this.constructor.name}(name=${this.name}, prompt=${this.prompt}, threshold=${this.threshold}, model=${this.model}, options=${JSON.stringify(this.options)}, description=${this.description})`}}class T{baseUrl;apiKey;organizationId;constructor(t,e,r){this.baseUrl=t,this.apiKey=e,this.organizationId=r}buildUrl(t){return this.baseUrl+t}buildHeaders(){if(!this.apiKey||!this.organizationId)throw Error("API key and organization ID cannot be null");return{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-Organization-Id":this.organizationId}}async addToRunEvalQueueExamples(t){let e=this.buildUrl("/add_to_run_eval_queue/examples"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async addToRunEvalQueueTraces(t){let e=this.buildUrl("/add_to_run_eval_queue/traces"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return}async logEvalResults(t){let e=this.buildUrl("/log_eval_results/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchExperimentRun(t){let e=this.buildUrl("/fetch_experiment_run/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async scorerExists(t){let e=this.buildUrl("/scorer_exists/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async saveScorer(t){let e=this.buildUrl("/save_scorer/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async fetchScorers(t){let e=this.buildUrl("/fetch_scorers/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}async projectsResolve(t){let e=this.buildUrl("/projects/resolve/"),r=await fetch(e,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t)});if(!r.ok)throw Error(`HTTP Error: ${r.status} - ${await r.text()}`);return await r.json()}}class f extends Error{statusCode;constructor(t,e){super(e);this.statusCode=t;this.name="JudgmentAPIError"}}async function S(t,e=u??"",r=m??""){if(!_||!e||!r)throw Error("Missing required API credentials");let o=await new T(_,e,r).fetchScorers({names:[t]});if(o.scorers.length===0)throw new f(404,`Scorer with name ${t} not found`);return o.scorers[0]}class G extends R{constructor(t,e,r,s,o,n,a=u??"",l=m??""){super("Prompt Scorer",t,e,r,s,o,n,a,l)}getScoreType(){return"Prompt Scorer"}getIsTrace(){return!1}static async get(t,e=u??"",r=m??""){let s=await S(t,e,r);if(s.is_trace===!0)throw new f(400,`Scorer with name ${t} is a TracePromptScorer, not a PromptScorer`);return new G(s.name,s.prompt,s.threshold,s.model??null,s.options,s.description,e,r)}}class I extends R{constructor(t,e,r,s,o,n,a=u??"",l=m??""){super("Trace Prompt Scorer",t,e,r,s,o,n,a,l)}getScoreType(){return"Trace Prompt Scorer"}getIsTrace(){return!0}static async get(t,e=u??"",r=m??""){let s=await S(t,e,r);if(s.is_trace!==!0)throw new f(400,`Scorer with name ${t} is a PromptScorer, not a TracePromptScorer`);return new I(s.name,s.prompt,s.threshold,s.model??null,s.options,s.description,e,r)}}class k extends d{constructor(t={}){super({scoreType:"Answer Correctness",...t,requiredParams:["input","actual_output","expected_output"]})}static get(t={}){return new k(t)}}class j extends d{constructor(t={}){super({scoreType:"Answer Relevancy",...t,requiredParams:["input","actual_output"]})}static get(t={}){return new j(t)}}class F extends d{constructor(t={}){super({scoreType:"Faithfulness",...t,requiredParams:["input","actual_output","retrieval_context"]})}static get(t={}){return new F(t)}}class Y extends d{constructor(t={}){super({scoreType:"Instruction Adherence",...t,requiredParams:["input","actual_output"]})}static get(t={}){return new Y(t)}}class W extends b{static get(t){return new this({name:t.name,threshold:t.threshold,strictMode:t.strictMode,model:t.model})}}import{OTLPTraceExporter as X}from"@opentelemetry/exporter-trace-otlp-http";class i{static RESET="\x1B[0m";static RED="\x1B[31m";static YELLOW="\x1B[33m";static GRAY="\x1B[90m";static Level={DEBUG:0,INFO:1,WARNING:2,ERROR:3,CRITICAL:4};static initialized=!1;static currentLevel=i.Level.WARNING;static useColor=!0;static initialize(){if(!i.initialized){let t=process.env.JUDGMENT_NO_COLOR;i.useColor=!t&&process.stdout.isTTY;let e=$.toLowerCase();if(e){let r={debug:i.Level.DEBUG,info:i.Level.INFO,warning:i.Level.WARNING,warn:i.Level.WARNING,error:i.Level.ERROR,critical:i.Level.CRITICAL};i.currentLevel=r[e]??i.Level.WARNING}i.initialized=!0}}static setLevel(t){i.currentLevel=t}static setUseColor(t){i.useColor=t}static log(t,e){if(i.initialize(),t<i.currentLevel)return;let r=new Date().toISOString().replace("T"," ").substring(0,19),s=Object.keys(i.Level).find((a)=>i.Level[a]===t)??"UNKNOWN",o=`${r} - judgeval - ${s} - ${e}`;if(i.useColor)o=`${t===i.Level.DEBUG||t===i.Level.INFO?i.GRAY:t===i.Level.WARNING?i.YELLOW:i.RED}${o}${i.RESET}`;(t>=i.Level.ERROR?process.stderr:process.stdout).write(o+`
2
+ `)}static debug(t){i.log(i.Level.DEBUG,t)}static info(t){i.log(i.Level.INFO,t)}static warning(t){i.log(i.Level.WARNING,t)}static warn(t){i.log(i.Level.WARNING,t)}static error(t){i.log(i.Level.ERROR,t)}static critical(t){i.log(i.Level.CRITICAL,t)}}class w{delegate;projectId;constructor(t,e,r,s){if(!s||s.trim()==="")throw Error("projectId is required for JudgmentSpanExporter");this.projectId=s,this.delegate=new X({url:t,headers:{Authorization:`Bearer ${e}`,"X-Organization-Id":r,"X-Project-Id":s}})}static builder(){return new z}export(t,e){i.info(`JudgmentSpanExporter: Exported ${t.length} spans`),this.delegate.export(t,e)}shutdown(){return i.info(`JudgmentSpanExporter: Shutting down exporter for project ${this.projectId}`),this.delegate.shutdown()}forceFlush(){return i.info(`JudgmentSpanExporter: Force flushing spans for project ${this.projectId}`),this.delegate.forceFlush?.()??Promise.resolve()}}class z{_endpoint;_apiKey;_organizationId;_projectId;constructor(){}endpoint(t){return this._endpoint=t,this}apiKey(t){return this._apiKey=t,this}organizationId(t){return this._organizationId=t,this}projectId(t){return this._projectId=t,this}build(){if(!this._endpoint||this._endpoint.trim()==="")throw Error("Endpoint is required");if(!this._apiKey||this._apiKey.trim()==="")throw Error("API key is required");if(!this._organizationId||this._organizationId.trim()==="")throw Error("Organization ID is required");if(!this._projectId||this._projectId.trim()==="")throw Error("Project ID is required");return new w(this._endpoint,this._apiKey,this._organizationId,this._projectId)}}class M{export(t,e){e({code:0})}flush(){return Promise.resolve()}shutdown(){return Promise.resolve()}}class c{static AttributeKeys={JUDGMENT_SPAN_KIND:"judgment.span_kind",JUDGMENT_INPUT:"judgment.input",JUDGMENT_OUTPUT:"judgment.output",JUDGMENT_OFFLINE_MODE:"judgment.offline_mode",JUDGMENT_UPDATE_ID:"judgment.update_id",JUDGMENT_CUSTOMER_ID:"judgment.customer_id",JUDGMENT_AGENT_ID:"judgment.agent_id",JUDGMENT_PARENT_AGENT_ID:"judgment.parent_agent_id",JUDGMENT_AGENT_CLASS_NAME:"judgment.agent_class_name",JUDGMENT_AGENT_INSTANCE_NAME:"judgment.agent_instance_name",PENDING_TRACE_EVAL:"judgment.pending_trace_eval",GEN_AI_PROMPT:"gen_ai.prompt",GEN_AI_COMPLETION:"gen_ai.completion",GEN_AI_REQUEST_MODEL:"gen_ai.request.model",GEN_AI_RESPONSE_MODEL:"gen_ai.response.model",GEN_AI_SYSTEM:"gen_ai.system",GEN_AI_USAGE_INPUT_TOKENS:"gen_ai.usage.input_tokens",GEN_AI_USAGE_OUTPUT_TOKENS:"gen_ai.usage.output_tokens",GEN_AI_USAGE_COMPLETION_TOKENS:"gen_ai.usage.completion_tokens",GEN_AI_REQUEST_TEMPERATURE:"gen_ai.request.temperature",GEN_AI_REQUEST_MAX_TOKENS:"gen_ai.request.max_tokens",GEN_AI_RESPONSE_FINISH_REASONS:"gen_ai.response.finish_reasons",GEN_AI_USAGE_TOTAL_COST:"gen_ai.usage.total_cost_usd"};static InternalAttributeKeys={DISABLE_PARTIAL_EMIT:"disable_partial_emit",CANCELLED:"cancelled"};static ResourceKeys={SERVICE_NAME:"service.name",TELEMETRY_SDK_LANGUAGE:"telemetry.sdk.language",TELEMETRY_SDK_NAME:"telemetry.sdk.name",TELEMETRY_SDK_VERSION:"telemetry.sdk.version",JUDGMENT_PROJECT_ID:"judgment.project_id"}}import{trace as x}from"@opentelemetry/api";var Q=/^([^(]+?)=>/,Z=/^[^(]*\(\s*([^)]*)\)/m,tt=/,/,et=/^\s*(_?)(\S+?)\1\s*$/,rt=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function st(t){return Function.prototype.toString.call(t)}function ot(t){let e=st(t).replace(rt,"");return e.match(Q)||e.match(Z)}function K(t){let e=ot(t);if(!e||!e[1])return[];return e[1].split(tt).map((r)=>{return r.replace(et,(o,n,a)=>a).trim()}).filter((r)=>r.length>0)}class h{static instances=new Map;apiClient;tracer;serializer=JSON.stringify;_initialized=!1;projectId=null;spanExporter=null;configuration;getConfiguration(){return this.configuration}getProjectId(){return this.projectId}getSerializer(){return this.serializer}constructor(t){this.configuration=t,this.tracer=x.getTracer(this.configuration.tracerName),this.apiClient=new T(this.configuration.apiUrl,this.configuration.apiKey,this.configuration.organizationId),this._initialized=!1}async resolveProjectId(){try{i.info(`Resolving project ID for project: ${this.configuration.projectName}`);let t=await this.apiClient.projectsResolve({project_name:this.configuration.projectName});i.info(`Resolved project ID: ${t.project_id}`);let e=t.project_id;return this.projectId=e,i.info(`Successfully resolved project ID: ${this.projectId}`),this.projectId}catch(t){throw Error(`Failed to resolve project ID: ${t instanceof Error?t.message:String(t)}`)}}async getSpanExporter(){if(!this.spanExporter)try{let t=await this.resolveProjectId();this.spanExporter=this.createJudgmentSpanExporter(t)}catch{i.error("Failed to resolve project "+this.configuration.projectName+", please create it first at https://app.judgmentlabs.ai/org/"+(this.configuration.organizationId||"unknown")+"/projects. Skipping Judgment export."),this.spanExporter=new M}return this.spanExporter}setSpanKind(t){let e=x.getActiveSpan();if(!e){i.info("No active span found, skipping setSpanKind");return}e.setAttribute(c.AttributeKeys.JUDGMENT_SPAN_KIND,t)}setAttribute(t,e){let r=x.getActiveSpan();if(!r){i.info("No active span found, skipping setAttribute");return}r.setAttribute(t,this.serializer(e))}setLLMSpan(){this.setSpanKind("llm")}setToolSpan(){this.setSpanKind("tool")}setGeneralSpan(){this.setSpanKind("span")}setAttributes(t){let e=x.getActiveSpan();if(!e){i.info("No active span found, skipping setAttributes");return}for(let[r,s]of Object.entries(t))e.setAttribute(r,this.serializer(s))}setInput(t){this.setAttribute(c.AttributeKeys.JUDGMENT_INPUT,t)}setOutput(t){this.setAttribute(c.AttributeKeys.JUDGMENT_OUTPUT,t)}asyncEvaluate(t,e,r){try{if(!this.configuration.enableEvaluation)return;let s=x.getActiveSpan();if(!s){i.info("No active span found, skipping asyncEvaluate");return}if(!s.isRecording()){i.info("Active span is not recording, skipping asyncEvaluate");return}let o=s.spanContext(),n=o.traceId,a=o.spanId;i.info(`asyncEvaluate: project=${this.configuration.projectName}, traceId=${n}, spanId=${a}, scorer=${t.name}`);let l=this.createEvaluationRun(t,e,r,n,a);this.enqueueEvaluation(l)}catch(s){i.error(`Failed to asyncEvaluate: ${s instanceof Error?s.message:String(s)}`)}}asyncTraceEvaluate(t,e){try{if(!this.configuration.enableEvaluation)return;let r=x.getActiveSpan();if(!r){i.info("No active span found, skipping asyncTraceEvaluate");return}if(!r.isRecording()){i.info("Active span is not recording, skipping asyncTraceEvaluate");return}let s=r.spanContext(),o=s.traceId,n=s.spanId;i.info(`asyncTraceEvaluate: project=${this.configuration.projectName}, traceId=${o}, spanId=${n}, scorer=${t.name}`);let a=this.createTraceEvaluationRun(t,e,o,n),l=this.serializer(a);r.setAttribute(c.AttributeKeys.PENDING_TRACE_EVAL,l)}catch(r){i.error(`Failed to asyncTraceEvaluate: ${r instanceof Error?r.message:String(r)}`)}}createTraceEvaluationRun(t,e,r,s){let o=`async_trace_evaluate_${s||Date.now()}`,n=e??D,a=g(t);return{project_name:this.configuration.projectName,eval_name:o,judgment_scorers:[a],model:n,trace_and_span_ids:[[r,s]]}}createJudgmentSpanExporter(t){let e=this.configuration.apiUrl.endsWith("/")?`${this.configuration.apiUrl}otel/v1/traces`:`${this.configuration.apiUrl}/otel/v1/traces`;return w.builder().endpoint(e).apiKey(this.configuration.apiKey).organizationId(this.configuration.organizationId).projectId(t).build()}createEvaluationRun(t,e,r,s,o){let n=`async_evaluate_${o||Date.now()}`,a=r??D,l=g(t);return{project_name:this.configuration.projectName,eval_name:n,examples:[e],custom_scorers:[],judgment_scorers:[l],model:a,trace_id:s,trace_span_id:o}}async enqueueEvaluation(t){try{await this.apiClient.addToRunEvalQueueExamples(t),i.info(`Enqueuing evaluation run: ${t.eval_name}`)}catch(e){i.error(`Failed to enqueue evaluation run: ${e instanceof Error?e.message:String(e)}`)}}_observe(t,e="span"){return(...r)=>{let s=t.name||"anonymous";return this.tracer.startActiveSpan(s,(o)=>{try{o.setAttribute(c.AttributeKeys.JUDGMENT_SPAN_KIND,e);try{let a=K(t);if(a.length===r.length){let l={};a.forEach((p,H)=>{l[p]=r[H]}),o.setAttribute(c.AttributeKeys.JUDGMENT_INPUT,this.serializer(l))}}catch(a){i.warn(`Failed to parse function args: ${a instanceof Error?a.message:String(a)}`)}let n=t(...r);if(n instanceof Promise)return n.then((a)=>{return o.setAttribute(c.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(a)),a}).catch((a)=>{throw o.recordException(a instanceof Error?a:Error(String(a))),a}).finally(()=>{o.end()});return o.setAttribute(c.AttributeKeys.JUDGMENT_OUTPUT,this.serializer(n)),o.end(),n}catch(n){throw o.recordException(n),o.end(),n}})}}observe(t,e){try{if(typeof t==="function"){let r=this._observe(t,e??"span");return Object.defineProperty(r,"name",{value:t.name}),r}return(r,s,o)=>{try{if(!o)return;let n=o.value,a=this._observe(n,t??"span");return Object.defineProperty(a,"name",{value:n.name}),o.value=a,o}catch(n){i.error(`Failed to wrap method with observe: ${n instanceof Error?n.message:String(n)}`)}}}catch(r){if(i.error(`Failed to observe function: ${r instanceof Error?r.message:String(r)}`),typeof t==="function")return t;return()=>{}}}async shutdown(){}}var C="opentelemetry.instrumentation.judgeval";class N{projectName;apiKey;organizationId;apiUrl;enableEvaluation;tracerName;resourceAttributes;initialize;constructor(t,e,r,s,o,n=C,a={},l=!0){this.projectName=t;this.apiKey=e;this.organizationId=r;this.apiUrl=s;this.enableEvaluation=o;this.tracerName=n;this.resourceAttributes=a;this.initialize=l}static createDefault(t){return new J().projectName(t).build()}static builder(){return new J}}class J{_projectName;_apiKey=u;_organizationId=m;_apiUrl=_;_enableEvaluation=!0;_tracerName=C;_resourceAttributes={};_initialize=!0;projectName(t){return this._projectName=t,this}apiKey(t){return this._apiKey=t,this}organizationId(t){return this._organizationId=t,this}apiUrl(t){return this._apiUrl=t,this}enableEvaluation(t){return this._enableEvaluation=t,this}tracerName(t){return this._tracerName=t,this}resourceAttributes(t){return this._resourceAttributes=t,this}initialize(t){return this._initialize=t,this}build(){if(!this._projectName)throw Error("Project name is required");if(!this._apiKey)throw Error("API key is required");if(!this._organizationId)throw Error("Organization ID is required");if(!this._apiUrl)throw Error("API URL is required");return new N(this._projectName,this._apiKey,this._organizationId,this._apiUrl,this._enableEvaluation,this._tracerName,this._resourceAttributes,this._initialize)}}class V{apiClient;constructor(t=u,e=m){if(t===null||e===null)throw Error("API key and organization ID are required");this.apiClient=new T(_,t,e)}async runEvaluation(t,e,r,s,o){if(t.length===0)throw Error("No examples provided");let n=new U({project_name:r,eval_name:s,examples:t,scorers:e,model:o}),a=Boolean(n.local_scorers.length),l=Boolean(n.remote_scorers.length);if(a&&l)throw Error("Cannot run both local and remote scorers at the same time");if(l)return this.runRemoteScorers(n);return this.runLocalScorers(n)}async runRemoteScorers(t){console.log("Running evaluation..."),await this.apiClient.addToRunEvalQueueExamples(t.toModel());let e=await this.pollForResults(t.project_name,t.id,t.examples.length);return console.log(`View results at: ${e.ui_results_url}/example`),e.results}async runLocalScorers(t){console.log("Running local evaluation...");let e=await this.executeLocalScorers(t),r=await this.apiClient.logEvalResults({results:e,run:t.toModel()});return console.log(`View results at: ${r.ui_results_url}/example`),e}async executeLocalScorers(t){let e=[];for(let r of t.examples){let s=[];for(let o of t.local_scorers){try{o.score=await o.scoreExample(r),o.success=o.successCheck()}catch(n){o.error=n instanceof Error?n.message:String(n),o.score=null,o.success=!1}s.push({name:o.name,threshold:o.threshold,success:o.success,score:o.score,reason:o.reason,strict_mode:o.strictMode,evaluation_model:o.model,error:o.error,additional_metadata:o.metadata})}e.push({success:s.every((o)=>o.success),scorers_data:s,data_object:r})}return e}async pollForResults(t,e,r){for(let s=0;s<60;s++){let o=await this.apiClient.fetchExperimentRun({experiment_run_id:e,project_name:t});if(o.results.length===r)return o;await new Promise((n)=>setTimeout(n,5000))}throw Error("Evaluation timed out")}}import{resourceFromAttributes as nt}from"@opentelemetry/resources";import{BatchSpanProcessor as at,WebTracerProvider as lt}from"@opentelemetry/sdk-trace-web";var q="0.5.0";var v=q;class A extends h{webTracerProvider;async initialize(t={}){if(this._initialized)return this;try{let e={[c.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[c.ResourceKeys.TELEMETRY_SDK_VERSION]:v,...this.configuration.resourceAttributes,...t.resourceAttributes},r=await this.getSpanExporter();return this.webTracerProvider=new lt({resource:nt(e),spanProcessors:[new at(r)],...t}),this.webTracerProvider.register(),this._initialized=!0,this}catch(e){throw Error(`Failed to initialize browser tracer: ${e instanceof Error?e.message:String(e)}`)}}static getInstance(t){let e=`BrowserTracer:${t.projectName}`;if(!h.instances.has(e))h.instances.set(e,new A(t));return h.instances.get(e)}static async createDefault(t){let e=N.builder().projectName(t).build(),r=new A(e);if(e.initialize)await r.initialize();return r}static async createWithConfiguration(t){let e=new A(t);if(t.initialize)await e.initialize();return e}}import{resourceFromAttributes as ct}from"@opentelemetry/resources";import{NodeSDK as ut}from"@opentelemetry/sdk-node";class y extends h{nodeSDK;async initialize(t={}){if(this._initialized)return this;try{let e={[c.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[c.ResourceKeys.TELEMETRY_SDK_VERSION]:v,...this.configuration.resourceAttributes,...t.resourceAttributes},r=await this.getSpanExporter();return this.nodeSDK=new ut({resource:ct(e),instrumentations:t.instrumentations,traceExporter:r,...t}),this.nodeSDK.start(),this._initialized=!0,this}catch(e){throw Error(`Failed to initialize node tracer: ${e instanceof Error?e.message:String(e)}`)}}static getInstance(t){let e=`NodeTracer:${t.projectName}`;if(!h.instances.has(e))h.instances.set(e,new y(t));return h.instances.get(e)}static async createDefault(t){let e=N.builder().projectName(t).enableEvaluation(!0).build(),r=new y(e);if(e.initialize)await r.initialize();return r}static async createWithConfiguration(t){let e=new y(t);if(t.initialize)await e.initialize();return e}async shutdown(){if(!this.nodeSDK){i.warn("Node SDK not initialized, skipping shutdown");return}await this.nodeSDK.shutdown()}}export{K as parseFunctionArgs,S as fetchPromptScorer,J as TracerConfigurationBuilder,N as TracerConfiguration,h as Tracer,I as TracePromptScorer,B as TraceEvaluationRun,d as RemoteScorer,G as PromptScorer,c as OpenTelemetryKeys,Mt as OPENAI_API_KEY,y as NodeTracer,M as NoOpSpanExporter,i as Logger,b as LocalScorer,w as JudgmentSpanExporter,V as JudgmentClient,f as JudgmentAPIError,m as JUDGMENT_ORG_ID,yt as JUDGMENT_NO_COLOR,$ as JUDGMENT_LOG_LEVEL,St as JUDGMENT_LLM_PROXY_URL,wt as JUDGMENT_ENABLE_MONITORING,At as JUDGMENT_ENABLE_EVALUATIONS,D as JUDGMENT_DEFAULT_GPT_MODEL,_ as JUDGMENT_API_URL,u as JUDGMENT_API_KEY,Y as InstructionAdherenceScorer,Ot as GOOGLE_API_KEY,Ut as GEMINI_API_KEY,F as FaithfulnessScorer,W as ExampleScorer,P as ExampleParams,U as ExampleEvaluationRun,ft as Example,O as EvaluationRun,A as BrowserTracer,R as BasePromptScorer,j as AnswerRelevancyScorer,k as AnswerCorrectnessScorer,vt as ANTHROPIC_API_KEY};
3
3
 
4
- //# debugId=9F53F507DF440A0C64756E2164756E21
4
+ //# debugId=62DE0459BF3776C064756E2164756E21
5
5
  //# sourceMappingURL=index.mjs.map