judgeval 0.4.1 → 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.
- package/dist/data/evaluation-run.d.ts +57 -0
- package/dist/data/evaluation-run.d.ts.map +1 -0
- package/dist/data/example.d.ts +2 -2
- package/dist/data/example.d.ts.map +1 -1
- package/dist/data/index.d.ts +1 -0
- package/dist/data/index.d.ts.map +1 -1
- package/dist/env.d.ts +5 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +25 -17
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/index.mjs.map +25 -17
- package/dist/index.umd.js +3 -3
- package/dist/index.umd.js.map +25 -17
- package/dist/internal/api/index.d.ts +4 -3
- package/dist/internal/api/index.d.ts.map +1 -1
- package/dist/internal/api/models/BaseScorer.d.ts +2 -2
- package/dist/internal/api/models/BaseScorer.d.ts.map +1 -1
- package/dist/internal/api/models/EvalResults.d.ts +2 -2
- package/dist/internal/api/models/EvalResults.d.ts.map +1 -1
- package/dist/internal/api/models/EvalResultsFetch.d.ts +2 -2
- package/dist/internal/api/models/EvalResultsFetch.d.ts.map +1 -1
- package/dist/internal/api/models/EvalResultsFetchResponse.d.ts +10 -0
- package/dist/internal/api/models/EvalResultsFetchResponse.d.ts.map +1 -0
- package/dist/internal/api/models/Example.d.ts +2 -2
- package/dist/internal/api/models/Example.d.ts.map +1 -1
- package/dist/internal/api/models/ExampleEvaluationRun.d.ts +3 -3
- package/dist/internal/api/models/ExampleEvaluationRun.d.ts.map +1 -1
- package/dist/internal/api/models/FetchPromptScorersRequest.d.ts +2 -2
- package/dist/internal/api/models/FetchPromptScorersRequest.d.ts.map +1 -1
- package/dist/internal/api/models/FetchPromptScorersResponse.d.ts +2 -2
- package/dist/internal/api/models/FetchPromptScorersResponse.d.ts.map +1 -1
- package/dist/internal/api/models/OtelTraceSpan.d.ts +3 -11
- package/dist/internal/api/models/OtelTraceSpan.d.ts.map +1 -1
- package/dist/internal/api/models/PromptScorer.d.ts +4 -2
- package/dist/internal/api/models/PromptScorer.d.ts.map +1 -1
- package/dist/internal/api/models/ResolveProjectNameRequest.d.ts +2 -2
- package/dist/internal/api/models/ResolveProjectNameRequest.d.ts.map +1 -1
- package/dist/internal/api/models/ResolveProjectNameResponse.d.ts +2 -2
- package/dist/internal/api/models/ResolveProjectNameResponse.d.ts.map +1 -1
- package/dist/internal/api/models/SavePromptScorerRequest.d.ts +5 -3
- package/dist/internal/api/models/SavePromptScorerRequest.d.ts.map +1 -1
- package/dist/internal/api/models/SavePromptScorerResponse.d.ts +2 -2
- package/dist/internal/api/models/SavePromptScorerResponse.d.ts.map +1 -1
- package/dist/internal/api/models/ScorerConfig.d.ts +3 -2
- package/dist/internal/api/models/ScorerConfig.d.ts.map +1 -1
- package/dist/internal/api/models/ScorerData.d.ts +2 -2
- package/dist/internal/api/models/ScorerData.d.ts.map +1 -1
- package/dist/internal/api/models/ScorerExistsRequest.d.ts +2 -2
- package/dist/internal/api/models/ScorerExistsRequest.d.ts.map +1 -1
- package/dist/internal/api/models/ScorerExistsResponse.d.ts +2 -2
- package/dist/internal/api/models/ScorerExistsResponse.d.ts.map +1 -1
- package/dist/internal/api/models/ScoringResult.d.ts +2 -2
- package/dist/internal/api/models/ScoringResult.d.ts.map +1 -1
- package/dist/internal/api/models/TraceEvaluationRun.d.ts +3 -3
- package/dist/internal/api/models/TraceEvaluationRun.d.ts.map +1 -1
- package/dist/internal/api/models.d.ts +1 -0
- package/dist/internal/api/models.d.ts.map +1 -1
- package/dist/judgment-client.d.ts +15 -0
- package/dist/judgment-client.d.ts.map +1 -0
- package/dist/scorers/adapters.d.ts +7 -0
- package/dist/scorers/adapters.d.ts.map +1 -0
- package/dist/scorers/api_scorers/answer-correctness-scorer.d.ts +5 -10
- package/dist/scorers/api_scorers/answer-correctness-scorer.d.ts.map +1 -1
- package/dist/scorers/api_scorers/answer-relevancy-scorer.d.ts +5 -10
- package/dist/scorers/api_scorers/answer-relevancy-scorer.d.ts.map +1 -1
- package/dist/scorers/api_scorers/faithfulness-scorer.d.ts +5 -10
- package/dist/scorers/api_scorers/faithfulness-scorer.d.ts.map +1 -1
- package/dist/scorers/api_scorers/index.d.ts +5 -1
- package/dist/scorers/api_scorers/index.d.ts.map +1 -1
- package/dist/scorers/api_scorers/instruction-adherence-scorer.d.ts +5 -10
- package/dist/scorers/api_scorers/instruction-adherence-scorer.d.ts.map +1 -1
- package/dist/scorers/api_scorers/prompt_scorer/base-prompt-scorer.d.ts +10 -37
- package/dist/scorers/api_scorers/prompt_scorer/base-prompt-scorer.d.ts.map +1 -1
- package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.d.ts +1 -9
- package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer-utils.d.ts.map +1 -1
- package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer.d.ts +6 -3
- package/dist/scorers/api_scorers/prompt_scorer/prompt-scorer.d.ts.map +1 -1
- package/dist/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.d.ts +4 -2
- package/dist/scorers/api_scorers/prompt_scorer/trace-prompt-scorer.d.ts.map +1 -1
- package/dist/scorers/example-scorer.d.ts +13 -0
- package/dist/scorers/example-scorer.d.ts.map +1 -0
- package/dist/scorers/index.d.ts +3 -2
- package/dist/scorers/index.d.ts.map +1 -1
- package/dist/scorers/local-scorer.d.ts +22 -0
- package/dist/scorers/local-scorer.d.ts.map +1 -0
- package/dist/scorers/remote-scorer.d.ts +20 -0
- package/dist/scorers/remote-scorer.d.ts.map +1 -0
- package/dist/tracer/Tracer.d.ts +8 -9
- package/dist/tracer/Tracer.d.ts.map +1 -1
- package/dist/tracer/TracerConfiguration.d.ts.map +1 -1
- package/dist/utils/annotate.d.ts.map +1 -1
- package/dist/utils/types.d.ts +2 -2
- package/dist/utils/types.d.ts.map +1 -1
- package/package.json +11 -7
- package/dist/scorers/api-scorer.d.ts +0 -23
- package/dist/scorers/api-scorer.d.ts.map +0 -1
- package/dist/scorers/base-scorer.d.ts +0 -10
- 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"}
|
package/dist/data/example.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Example as ExampleModel } from "../internal/api/models/Example";
|
|
2
|
-
export type Example<T extends Record<string,
|
|
3
|
-
export declare function Example<T extends Record<string,
|
|
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,
|
|
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"}
|
package/dist/data/index.d.ts
CHANGED
package/dist/data/index.d.ts.map
CHANGED
|
@@ -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
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var{defineProperty:G,getOwnPropertyNames:z,getOwnPropertyDescriptor:X}=Object,Q=Object.prototype.hasOwnProperty;var k=new WeakMap,Z=(t)=>{var e=k.get(t),s;if(e)return e;if(e=G({},"__esModule",{value:!0}),t&&typeof t==="object"||typeof t==="function")z(t).map((i)=>!Q.call(e,i)&&G(e,i,{get:()=>t[i],enumerable:!(s=X(t,i))||s.enumerable}));return k.set(t,e),e};var K=(t,e)=>{for(var s in e)G(t,s,{get:e[s],enumerable:!0,configurable:!0,set:(i)=>e[s]=()=>i})};var mt={};K(mt,{scorerExists:()=>A,pushPromptScorer:()=>S,parseFunctionArgs:()=>I,fetchPromptScorer:()=>O,createBaseScorer:()=>$,createAPIScorer:()=>Et,TracerConfigurationBuilder:()=>M,TracerConfiguration:()=>x,Tracer:()=>m,TracePromptScorer:()=>H,PromptScorer:()=>F,OpenTelemetryKeys:()=>u,NodeTracer:()=>v,NoOpSpanExporter:()=>h,Logger:()=>r,JudgmentSpanExporter:()=>w,JudgmentApiClient:()=>R,JudgmentAPIError:()=>b,JUDGMENT_ORG_ID:()=>E,JUDGMENT_NO_COLOR:()=>st,JUDGMENT_LOG_LEVEL:()=>C,JUDGMENT_ENABLE_MONITORING:()=>tt,JUDGMENT_ENABLE_EVALUATIONS:()=>et,JUDGMENT_DEFAULT_GPT_MODEL:()=>D,JUDGMENT_API_URL:()=>d,JUDGMENT_API_KEY:()=>l,ExampleParams:()=>q,Example:()=>lt,BrowserTracer:()=>P,BasePromptScorer:()=>p,APIScorerType:()=>L});module.exports=Z(mt);var V=require("@opentelemetry/exporter-trace-otlp-http");function f(t,e){let s=process.env[t];if(!s)return e??null;return s}var l=f("JUDGMENT_API_KEY"),E=f("JUDGMENT_ORG_ID"),d=f("JUDGMENT_API_URL","https://api.judgmentlabs.ai"),D=f("JUDGMENT_DEFAULT_GPT_MODEL","gpt-4.1"),tt=f("JUDGMENT_ENABLE_MONITORING","true"),et=f("JUDGMENT_ENABLE_EVALUATIONS","true"),st=f("JUDGMENT_NO_COLOR"),C=f("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=C.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 w{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.OTLPTraceExporter({url:t,headers:{Authorization:`Bearer ${e}`,"X-Organization-Id":s,"X-Project-Id":i}})}static builder(){return new W}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 W{_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 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"}}var N=require("@opentelemetry/api");class R{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 rt=/^([^(]+?)=>/,it=/^[^(]*\(\s*([^)]*)\)/m,ot=/,/,nt=/^\s*(_?)(\S+?)\1\s*$/,at=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;function ct(t){return Function.prototype.toString.call(t)}function ut(t){let e=ct(t).replace(at,"");return e.match(rt)||e.match(it)}function I(t){let e=ut(t);if(!e||!e[1])return[];return e[1].split(ot).map((s)=>{return s.replace(nt,(o,n,a)=>a).trim()}).filter((s)=>s.length>0)}class m{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=N.trace.getTracer(this.configuration.tracerName),this.apiClient=new R(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=N.trace.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=N.trace.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=N.trace.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=N.trace.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=N.trace.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||D,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 w.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||D,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 N.context.bind(N.context.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 J="opentelemetry.instrumentation.judgeval";class x{projectName;apiKey;organizationId;apiUrl;enableEvaluation;tracerName;resourceAttributes;initialize;constructor(t,e,s,i,o,n=J,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 M().projectName(t).build()}static builder(){return new M}}class M{_projectName;_apiKey=l;_organizationId=E;_apiUrl=d;_enableEvaluation=!0;_tracerName=J;_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 q;((_)=>{_.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"})(q||={});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;((T)=>{T.PROMPT_SCORER="Prompt Scorer";T.TRACE_PROMPT_SCORER="Trace Prompt Scorer";T.FAITHFULNESS="Faithfulness";T.ANSWER_RELEVANCY="Answer Relevancy";T.ANSWER_CORRECTNESS="Answer Correctness";T.INSTRUCTION_ADHERENCE="Instruction Adherence";T.EXECUTION_ORDER="Execution Order";T.TOOL_ORDER="Tool Order";T.CLASSIFIER="Classifier";T.TOOL_DEPENDENCY="Tool Dependency";T.CUSTOM="Custom"})(L||={});function Et(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 b 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 R(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 R(d,e,s).fetchScorers({names:[t]});if(o.scorers.length===0)throw new b(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 R(d,e,s).scorerExists({name:t})).exists}class p{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 b(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 b(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 p{constructor(t,e,s,i,o=[],n,a=l||"",c=E||""){super(t,e,s,i,o,n,a,c)}}class H extends p{constructor(t,e,s,i,o=[],n,a=l||"",c=E||""){super(t,e,s,i,o,n,a,c)}}var j=require("@opentelemetry/resources"),U=require("@opentelemetry/sdk-trace-web");var B="0.4.1";var y=B;class P extends m{webTracerProvider;async initialize(t={}){if(this._initialized)return this;try{let e={[u.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[u.ResourceKeys.TELEMETRY_SDK_VERSION]:y,...this.configuration.resourceAttributes,...t.resourceAttributes},s=await this.getSpanExporter();return this.webTracerProvider=new U.WebTracerProvider({resource:j.resourceFromAttributes(e),spanProcessors:[new U.BatchSpanProcessor(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(!m.instances.has(e))m.instances.set(e,new P(t));return m.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}}var Y=require("@opentelemetry/resources"),g=require("@opentelemetry/sdk-node");class v extends m{nodeSDK;async initialize(t={}){if(this._initialized)return this;try{let e={[u.ResourceKeys.SERVICE_NAME]:this.configuration.projectName,[u.ResourceKeys.TELEMETRY_SDK_VERSION]:y,...this.configuration.resourceAttributes,...t.resourceAttributes},s=await this.getSpanExporter();return this.nodeSDK=new g.NodeSDK({resource:Y.resourceFromAttributes(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(!m.instances.has(e))m.instances.set(e,new v(t));return m.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()}}
|
|
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
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=B4B296718866621164756E2164756E21
|
|
5
5
|
//# sourceMappingURL=index.cjs.map
|