syntropylabs-evalkit 0.1.27 → 0.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +15 -15
- package/dist/index.mjs +11 -11
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var api=require('@opentelemetry/api'),crypto=require('crypto'),sdkTraceNode=require('@opentelemetry/sdk-trace-node'),sdkTraceBase=require('@opentelemetry/sdk-trace-base'),resources=require('@opentelemetry/resources'),semanticConventions=require('@opentelemetry/semantic-conventions'),module$1=require('module');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;var
|
|
2
|
-
`),k,t.metrics);});}catch(k){u="ERROR",m=k?.message??String(k);}finally{d(u);}let v={scenarioId:s,name:o,status:u,turns:y,scores:h};return m&&(v.error=m),{result:v,traceId:l}}async function re(n,t){let e="sim_"+ht(8),r="run_"+ht(8),o=t.maxTurns??12,s=[],i=[];for(let c of t.scenarios){let{result:a,traceId:l}=await mr(n,t,c,{simulationId:e,runId:r,maxTurns:o});s.push(a),i.push(l);}await n.flush();for(let c of i)U.delete(c),Q.delete(c);return {simulationId:e,runId:r,results:s}}var oe=_(()=>{Y();gt();});var M,se=_(()=>{(function(n){n[n.SUCCESS=0]="SUCCESS",n[n.FAILED=1]="FAILED";})(M||(M={}));});var ae=_(()=>{se();});function Ot(n){return n[0]*1e3+n[1]/1e6}function fr(n){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[n]??"INTERNAL"}function gr(n){return n===1?"OK":n===2?"ERROR":"UNSET"}function yr(n){let t={};for(let[e,r]of Object.entries(n))e.startsWith("evalkit.")||e==="gen_ai.system"||r!=null&&(t[e]=r);return t}function ce(n){return new Promise(t=>setTimeout(t,n))}var ie,vt,le=_(()=>{ae();Y();ie=3,vt=class{constructor(t){this.authFailures=0;this.disabled=false;this.url=`${t.baseUrl.replace(/\/$/,"")}/v1/ingest`,this.subscriptionKey=t.subscriptionKey,this.debug=t.debug??false;}export(t,e){if(this.disabled){e({code:M.FAILED});return}let r=t.map(s=>this.toEnvelope(s)),o={events:r};this.debug&&console.log(`[evalkit] sending ${r.length} span(s) \u2192 ${this.url}`),this.fetchWithRetry(this.url,{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":this.subscriptionKey},body:JSON.stringify(o)}).then(async s=>{if(!s.ok){let i=await s.text().catch(()=>"(no body)");s.status===401||s.status===403?(this.authFailures++,this.authFailures>=ie?(this.disabled=true,console.error(`[evalkit] export rejected ${s.status}: ${i} \u2014 disabling tracing after ${this.authFailures} consecutive auth failures; check your EvalKit subscription key.`)):this.debug&&console.warn(`[evalkit] export rejected ${s.status} (auth failure ${this.authFailures}/${ie})`)):console.error(`[evalkit] export failed ${s.status}: ${i}`),e({code:M.FAILED});return}if(this.authFailures=0,this.debug){let i=await s.json().catch(()=>({}));console.log(`[evalkit] exported ${r.length} span(s) \u2014 status: ${i.status}`);}e({code:M.SUCCESS});}).catch(s=>{console.error("[evalkit] export network error:",s),e({code:M.FAILED});});}async fetchWithRetry(t,e,r=3){let o=[200,600,1800],s;for(let i=0;i<=r;i++)try{let c=await fetch(t,e);if(c.ok||c.status>=400&&c.status<500)return c;if(i<r)this.debug&&console.warn(`[evalkit] HTTP ${c.status}, retry ${i+1}/${r}`),await ce(o[i]??1800);else return c}catch(c){s=c,i<r&&(this.debug&&console.warn(`[evalkit] network error, retry ${i+1}/${r}:`,c),await ce(o[i]??1800));}throw s}shutdown(){return Promise.resolve()}toEnvelope(t){let e=t.spanContext(),r=t.attributes,o=Ot(t.startTime),s=Ot(t.endTime),i=t.events.map(l=>({name:l.name,timestamp:new Date(Ot(l.time)).toISOString(),attributes:l.attributes})),c={traceId:e.traceId,spanId:e.spanId,parentSpanId:t.parentSpanId,spanKind:fr(t.kind),spanType:r["evalkit.span_type"]??"log",status:gr(t.status.code),statusMessage:t.status.message,serviceName:t.resource.attributes["service.name"],operation:t.name,model:r["gen_ai.response.model"]??r["gen_ai.request.model"],provider:r["gen_ai.system"],prompt:r["evalkit.prompt"],completion:r["evalkit.completion"],tokensIn:Math.round(r["gen_ai.usage.input_tokens"]||0)||void 0,tokensOut:Math.round(r["gen_ai.usage.output_tokens"]||0)||void 0,latencyMs:Math.round(s-o),startTime:new Date(o).toISOString(),endTime:new Date(s).toISOString(),events:i.length>0?i:void 0,attributes:yr(r),createdAt:new Date(o).toISOString(),environment:r["evalkit.environment"],appVersion:r["evalkit.app_version"],userId:r["evalkit.user_id"],sessionId:r["evalkit.session_id"],deviceId:r["evalkit.device_id"],sdkVersion:r["evalkit.sdk_version"]},a=U.get(e.traceId);return a&&(c.isSimulation=true,c.simulationId=a.simulationId,c.scenarioId=a.scenarioId,c.runId=a.runId),c}};});function V(n,t=kr){let e;try{e=JSON.stringify(n);}catch{}if(e===void 0)try{e=String(n);}catch{e="<unserializable>";}return e.length>t?e.slice(0,t)+"\u2026":e}var Cr,kr;exports.EvalKitClient=void 0;var At=_(()=>{le();Cr="0.1.27",kr=4096;exports.EvalKitClient=class{constructor(t){this.options={serviceName:"unknown",debug:false,maxExportBatchSize:512,scheduledDelayMillis:5e3,maxBodyBytes:10*1024*1024,baseUrl:"https://api.syntropylabs.ai",apiUrl:"https://api.syntropylabs.ai",environment:"",appVersion:"",...t};let e=new vt({baseUrl:this.options.baseUrl,subscriptionKey:this.options.subscriptionKey,debug:this.options.debug});this.provider=new sdkTraceNode.NodeTracerProvider({resource:new resources.Resource({[semanticConventions.ATTR_SERVICE_NAME]:this.options.serviceName}),spanProcessors:[new sdkTraceBase.BatchSpanProcessor(e,{maxExportBatchSize:this.options.maxExportBatchSize,scheduledDelayMillis:this.options.scheduledDelayMillis})]}),this.provider.register(),this.tracer=api.trace.getTracer("evalkit","0.1.0");}metaAttributes(){let t={"evalkit.sdk_version":Cr};return this.options.environment&&(t["evalkit.environment"]=this.options.environment),this.options.appVersion&&(t["evalkit.app_version"]=this.options.appVersion),this.options.deviceId&&(t["evalkit.device_id"]=this.options.deviceId),t}startTrace(t,e){let r=this.tracer.startSpan(t,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"log",...this.metaAttributes(),...e}},api.context.active()),o=api.trace.setSpan(api.context.active(),r);return {traceId:r.spanContext().traceId,ctx:o,end:(i="OK")=>{r.setStatus({code:i==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),r.end();}}}startHttpTrace(t,e,r){let o=this.tracer.startSpan(t,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":e.method,"http.url":e.url,...e.headers?{"http.request.headers":JSON.stringify(e.headers)}:{},...e.requestBody!==void 0?{"http.request.body":JSON.stringify(e.requestBody)}:{},...this.metaAttributes(),...r}},api.context.active()),s=api.trace.setSpan(api.context.active(),o);return {traceId:o.spanContext().traceId,ctx:s,end:(c="OK",a)=>{a?.statusCode!==void 0&&o.setAttribute("http.status_code",a.statusCode),a?.body!==void 0&&o.setAttribute("http.response.body",JSON.stringify(a.body)),a?.headers&&o.setAttribute("http.response.headers",JSON.stringify(a.headers)),o.setStatus({code:c==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),o.end();}}}startSpan(t,e,r){let o=this.tracer.startSpan(t,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"function_call",...this.metaAttributes(),...e}},r??api.context.active());return {ctx:api.trace.setSpan(api.context.active(),o),end:(i="OK",c)=>{c&&o.setAttributes(c),o.setStatus({code:i==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),o.end();}}}traceFunction(t,e,r,o=true){let s=this;return function(...i){let c={"evalkit.span_type":"function_call",...r};o&&i.length&&(c["function.args"]=V(i));let{ctx:a,end:l}=s.startSpan(t,c),d;try{d=api.context.with(a,()=>e.apply(this,i));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(a)?.recordException(u),l("ERROR",{"error.message":u.message}),p}return d&&typeof d.then=="function"?d.then(p=>(l("OK",o?{"function.result":V(p)}:void 0),p),p=>{let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(a)?.recordException(u),l("ERROR",{"error.message":u.message}),p}):(l("OK",o?{"function.result":V(d)}:void 0),d)}}traceTool(t,e,r,o=true){let s=this;return function(...i){let c={"evalkit.span_type":"tool_call","tool.name":t,"gen_ai.tool.name":t,...r};o&&i.length&&(c["tool.arguments"]=V(i.length===1?i[0]:i));let{ctx:a,end:l}=s.startSpan(t,c),d;try{d=api.context.with(a,()=>e.apply(this,i));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(a)?.recordException(u),l("ERROR",{"error.message":u.message}),p}return d&&typeof d.then=="function"?d.then(p=>(l("OK",o?{"tool.result":V(p)}:void 0),p),p=>{let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(a)?.recordException(u),l("ERROR",{"error.message":u.message}),p}):(l("OK",o?{"tool.result":V(d)}:void 0),d)}}async flush(){await this.provider.forceFlush();}async destroy(){await this.provider.shutdown();}};});function K(n){if(!n)return api.context.active();let t=n.split("-");return t.length===4&&t[0]==="00"&&t[1].length===32&&t[2].length===16?api.trace.setSpanContext(api.ROOT_CONTEXT,{traceId:t[1],spanId:t[2],traceFlags:parseInt(t[3],16),isRemote:true}):api.context.active()}var J=_(()=>{});function xt(n){return n.length<=ue?n:n.slice(0,ue)+"\u2026"}function _t(n){if(typeof n=="string")return n;try{return JSON.stringify(n??{})}catch{return String(n)}}function Or(n){try{let t=JSON.parse(n);return t&&typeof t=="object"?t:void 0}catch{return}}function de(n,t){let e=[];try{for(let r of n?.choices??[])for(let o of r?.message?.tool_calls??[]){let s=o?.function?.name??"";s&&e.push({name:s,argsJson:xt(_t(o?.function?.arguments??"")),id:o?.id??""});}}catch{}return e}function me(n,t){let e=[];try{for(let r of n??[]){if(r?.type!=="tool_use")continue;let o=r?.name??"";o&&e.push({name:o,argsJson:xt(_t(r?.input??{})),id:r?.id??""});}}catch{}return e}function fe(n,t){let e=[];try{let r=[];if(Array.isArray(n?.functionCalls))r.push(...n.functionCalls);else for(let s of n?.candidates??[])for(let i of s?.content?.parts??[])i?.functionCall?.name&&r.push(i.functionCall);let o=0;for(let s of r){let i=s?.name??"";i&&e.push({name:i,argsJson:xt(_t(s?.args??{})),id:s?.id??`call_${o++}`});}}catch{}return e}function ge(n,t){let e=[];try{for(let r of n?.generations??[])for(let o of r??[])for(let s of o?.message?.tool_calls??[]){let i=s?.name??"";i&&e.push({name:i,argsJson:xt(_t(s?.args??{})),id:s?.id??""});}}catch{}return e}function j(n,t,e){if(!e.length)return;let r=t.spanContext().traceId,o=api.trace.setSpan(api.context.active(),t);for(let s of e){if(!s.name)continue;let i={"gen_ai.tool.name":s.name,"gen_ai.tool.call.id":s.id,"gen_ai.tool.call.arguments":s.argsJson};s.result!=null&&(i["gen_ai.tool.call.result"]=s.result);try{t.addEvent("gen_ai.tool.call",i);}catch{}try{yt(r,s.name,Or(s.argsJson));}catch{}if(s.result!=null)try{n.tracer.startSpan(s.name,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"tool_call",...i,"tool.name":s.name,"tool.arguments":s.argsJson,"tool.result":s.result}},o).end();}catch{}}}var ue,Z=_(()=>{Y();ue=32768;});function Ir(n,t){let e="",r=0,o=0,s=false;function i(c){s||(s=true,c?(t.recordException(c),t.setStatus({code:api.SpanStatusCode.ERROR,message:c.message})):(t.setAttributes({"evalkit.completion":e,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:api.SpanStatusCode.OK})),t.end());}return new Proxy(n,{get(c,a,l){if(a===Symbol.asyncIterator)return function(){let p=c[Symbol.asyncIterator]();return {async next(){try{let u=await p.next();if(!u.done&&u.value){let m=u.value,f=m.choices?.[0]?.delta?.content;f&&(e+=f),m.usage&&(r=m.usage.prompt_tokens??0,o=m.usage.completion_tokens??0);}return u.done&&i(),u}catch(u){throw i(u instanceof Error?u:new Error(String(u))),u}},return(){return i(),p.return?.()??Promise.resolve({done:true,value:void 0})},throw(u){return i(u instanceof Error?u:new Error(String(u))),p.throw?.(u)??Promise.reject(u)},[Symbol.asyncIterator](){return this}}};let d=Reflect.get(c,a,l);return typeof d=="function"?d.bind(c):d}})}function B(n,t,e,r="openai"){if(t.create.__evalkit)return;let o=t.create;t.create=async function(...s){let i=s[0],c=e??api.context.active(),a=n.tracer.startSpan("chat.completions.create",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":r,"gen_ai.request.model":i.model??"unknown",...i.temperature!=null&&{"gen_ai.request.temperature":i.temperature},...i.max_tokens!=null&&{"gen_ai.request.max_tokens":i.max_tokens},...i.top_p!=null&&{"gen_ai.request.top_p":i.top_p},"evalkit.prompt":Kr(i.messages??[])}},c),l=api.trace.setSpan(c,a);if(i?.stream){let m;try{m=await api.context.with(l,()=>o.apply(this,s));}catch(f){let g=f instanceof Error?f:new Error(String(f));throw a.recordException(g),a.setStatus({code:api.SpanStatusCode.ERROR,message:g.message}),a.end(),f}return Ir(m,a)}let d;try{d=await api.context.with(l,()=>o.apply(this,s));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.recordException(f),a.setStatus({code:api.SpanStatusCode.ERROR,message:f.message}),a.end(),m}let p=d.choices?.[0],u=p?.message.content??"";return a.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.prompt_tokens??0,"gen_ai.usage.output_tokens":d.usage?.completion_tokens??0,"gen_ai.usage.total_tokens":d.usage?.total_tokens??0,"gen_ai.response.finish_reasons":p?.finish_reason?[p.finish_reason]:[],"evalkit.completion":u}),j(n,a,de(d)),a.setStatus({code:api.SpanStatusCode.OK}),a.end(),d},t.create.__evalkit=true;}function Kr(n){return n.map(t=>`${t.role}: ${t.content??""}`).join(`
|
|
3
|
-
`)}var
|
|
4
|
-
`)}var
|
|
5
|
-
`)??"",d=
|
|
6
|
-
`),u=
|
|
7
|
-
`),
|
|
8
|
-
`);}let
|
|
9
|
-
`);if(
|
|
10
|
-
`)}function
|
|
11
|
-
`))}catch{return P(
|
|
12
|
-
`))}catch{return ""}}function
|
|
13
|
-
`))});},handleChatModelStart(o,s,
|
|
14
|
-
`),d=api.context.active(),p=n.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-vertex","gen_ai.request.model":o,"evalkit.prompt":l}},d),u=api.trace.setSpan(d,p),m;try{m=await api.context.with(u,()=>r.apply(this,s));}catch(h){let v=h instanceof Error?h:new Error(String(h));throw p.recordException(v),p.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),p.end(),h}let f=m?.response,g=f?.candidates?.[0],y=g?.content?.parts?.map(h=>h.text??"").join("")??"";return p.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":f?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":f?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":f?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":g?.finishReason?[g.finishReason]:[],"evalkit.completion":y}),p.setStatus({code:api.SpanStatusCode.OK}),p.end(),m},t.generateContent.__evalkit=true;}var Wt=_(()=>{Ct();});function $e(n,t={},e){function r(o,s,i){let c={...t,...s};o.addHook("onRequest",(a,l,d)=>{let p=a.routerPath??a.routeOptions?.url??a.url??"/",u=typeof c.name=="function"?c.name(a):c.name??`${String(a.method??"GET")} ${String(p)}`,m=a.headers?.traceparent,f=e?e(m):api.context.active(),{traceId:g,end:y,ctx:h}=api.context.with(f,()=>n.startHttpTrace(u,{method:String(a.method??"GET"),url:String(a.url??"/"),headers:a.headers,requestBody:void 0}));a._evalkitCtx=h,a._evalkitTraceId=g,a._evalkitEnd=y,a._evalkitEnded=false,api.context.with(h,d);}),o.addHook("preHandler",(a,l,d)=>{if(a._evalkitCtx&&a.body!==void 0){let p=api.trace.getActiveSpan();if(p?.isRecording())try{p.setAttribute("http.request.body",typeof a.body=="string"?a.body.slice(0,n.options.maxBodyBytes):JSON.stringify(a.body).slice(0,n.options.maxBodyBytes));}catch{}}api.context.with(a._evalkitCtx??api.context.active(),d);}),o.addHook("onSend",(a,l,d,p)=>{try{if(d!=null){let u=(typeof d=="string"?d:JSON.stringify(d)).slice(0,n.options.maxBodyBytes);a._evalkitRespBody=u;}}catch{}p(null,d);}),o.addHook("onResponse",(a,l,d)=>{if(typeof a._evalkitEnd=="function"&&!a._evalkitEnded){a._evalkitEnded=true;let p=l.statusCode??200;a._evalkitEnd(p>=400?"ERROR":"OK",{statusCode:p,body:a._evalkitRespBody});}d();}),o.addHook("onError",(a,l,d,p)=>{typeof a._evalkitEnd=="function"&&!a._evalkitEnded&&(a._evalkitEnded=true,a._evalkitEnd("ERROR",{statusCode:l.statusCode??500})),p();}),i();}return r[Symbol.for("skip-override")]=true,r}var Ge=_(()=>{});function He(n,t){return (e,r,o)=>{let s=typeof t?.name=="function"?t.name(e):t?.name??`${String(e.method)} ${String(e.route?.path??e.path??e.url)}`,i=K(e.headers?.traceparent),{end:c,ctx:a,traceId:l}=api.context.with(i,()=>n.startHttpTrace(s,{method:String(e.method??"GET"),url:String(e.originalUrl??e.url??"/"),headers:e.headers,requestBody:e.body}));e._evalkitCtx=a,e._evalkitTraceId=l;let d=api.trace.getSpan(a)?.spanContext().spanId??"0000000000000000";r.setHeader?.("x-trace-id",l),r.setHeader?.("traceparent",`00-${l}-${d}-01`);let p=n.options.maxBodyBytes,u=[],m=0,f=h=>{if(!(!h||m>=p))try{let v=Buffer.isBuffer(h)?h:typeof h=="string"?Buffer.from(h):null;v?.length&&(u.push(v),m+=v.length);}catch{}},g=r.write.bind(r),y=r.end;r.write=function(h,...v){return f(h),g(h,...v)},r.end=function(...h){f(h[0]);let v=r.statusCode??200,k;if(u.length)try{k=Buffer.concat(u).subarray(0,p).toString("utf-8");}catch{}return c(v>=400?"ERROR":"OK",{statusCode:v,headers:r.getHeaders?r.getHeaders():void 0,body:k}),y.apply(r,h)},api.context.with(a,()=>o());}}var Ue=_(()=>{J();});function Ve(n,t){return async(e,r)=>{let o=typeof t?.name=="function"?t.name(e):t?.name??`${String(e.method??"GET")} ${String(e.path??"/")}`,s=K(e.request?.headers?.traceparent),{end:i,ctx:c}=api.context.with(s,()=>n.startHttpTrace(o,{method:String(e.method??"GET"),url:String(e.href??e.url??"/"),headers:e.request?.headers,requestBody:e.request?.body}));e._evalkitCtx=c;try{await api.context.with(c,r);let a=e.status??200,l;try{let d=e.body;d!=null&&(l=(typeof d=="string"?d:JSON.stringify(d)).slice(0,n.options.maxBodyBytes));}catch{}i(a>=400?"ERROR":"OK",{statusCode:a,body:l});}catch(a){throw i("ERROR",{statusCode:e.status??500}),a}}}var De=_(()=>{J();});function ze(n,t){return async(e,r)=>{let o=e.req,s=o.url??"/",i=s;try{i=new URL(s).pathname;}catch{}let c=typeof t?.name=="function"?t.name(e):t?.name??`${String(o.method??"GET")} ${i}`,a=K(o.header("traceparent")),{end:l,ctx:d}=api.context.with(a,()=>n.startHttpTrace(c,{method:String(o.method??"GET"),url:s,headers:Object.fromEntries(o.raw?.headers??[])}));try{await api.context.with(d,r);let p=e.res?.status??200,u;try{if(e.res&&typeof e.res.clone=="function"){let m=await e.res.clone().text();m&&(u=m.slice(0,n.options.maxBodyBytes));}}catch{}l(p>=400?"ERROR":"OK",{statusCode:p,body:u});}catch(p){throw l("ERROR",{statusCode:500}),p}}}var We=_(()=>{J();});function Xe(n,t){return {name:"@evalkit/hapi",register(e){let r=new WeakMap;e.ext("onRequest",(o,s)=>{let i=typeof t?.name=="function"?t.name(o):t?.name??`${String(o.method?.toUpperCase()??"GET")} ${String(o.path??"/")}`,c=K(o.headers?.traceparent),{end:a,ctx:l}=api.context.with(c,()=>n.startHttpTrace(i,{method:String(o.method?.toUpperCase()??"GET"),url:String(o.url?.href??o.path??"/"),headers:o.headers}));return r.set(o,{end:a,ctx:l}),s.continue}),e.ext("onPreResponse",(o,s)=>{let i=r.get(o);if(i){let c=o.response?.output?.statusCode??o.response?.statusCode??200,a;try{let l=o.response?.source??o.response?.result;l!=null&&(a=(typeof l=="string"?l:JSON.stringify(l)).slice(0,n.options.maxBodyBytes));}catch{}i.end(c>=400?"ERROR":"OK",{statusCode:c,body:a}),r.delete(o);}return s.continue});}}}var Qe=_(()=>{J();});exports.EvalKitInterceptor=void 0;var Xt=_(()=>{exports.EvalKitInterceptor=class{constructor(t){this.client=t;}intercept(t,e){let r=t.switchToHttp?.();if(!r)return e.handle();let o=r.getRequest(),s=r.getResponse(),i=`${String(o.method??"GET")} ${String(o.route?.path??o.path??o.url??"/")}`,{ctx:c,end:a}=this.client.startHttpTrace(i,{method:String(o.method??"GET"),url:String(o.originalUrl??o.url??"/"),headers:o.headers,requestBody:o.body}),l=this.client.options.maxBodyBytes,d=[],p=0,u=f=>{if(!(!f||p>=l))try{let g=Buffer.isBuffer(f)?f:typeof f=="string"?Buffer.from(f):null;g?.length&&(d.push(g),p+=g.length);}catch{}};if(s&&typeof s.write=="function"){let f=s.write.bind(s);s.write=function(g,...y){return u(g),f(g,...y)};}if(s&&typeof s.end=="function"){let f=s.end.bind(s);s.end=function(g,...y){return u(g),f(g,...y)};}let m=api.context.with(c,()=>e.handle());return {subscribe(f){return m.subscribe({next:g=>f.next?.(g),error:g=>{a("ERROR"),f.error?.(g);},complete:()=>{let g=s?.statusCode??200,y;if(d.length)try{y=Buffer.concat(d).subarray(0,l).toString("utf-8");}catch{}a(g>=400?"ERROR":"OK",{statusCode:g,body:y}),f.complete?.();}})},pipe(...f){return m.pipe(...f)}}}};});function Eo(n,t){let e=globalThis.Reflect;if(!e||typeof e.defineMetadata!="function")return;let r=typeof e.getOwnMetadataKeys=="function"?e.getOwnMetadataKeys:e.getMetadataKeys,o=typeof e.getOwnMetadata=="function"?e.getOwnMetadata:e.getMetadata;if(typeof r!="function"||typeof o!="function")return;let s=[];try{s=r.call(e,n)||[];}catch{return}for(let i of s)try{e.defineMetadata(i,o.call(e,i,n),t);}catch{}}function Ye(n,t,e){let r=e?.include??bo,o=e?.captureIO??true,s=new Set,i=0,c=[...t.getProviders(),...t.getControllers()];for(let a of c){let l=a?.instance;if(!l||typeof l!="object")continue;let d=l.constructor?.name??"";if(!r.test(d))continue;let p=Object.getPrototypeOf(l);if(!(!p||p===Object.prototype||s.has(p))){s.add(p);for(let u of Object.getOwnPropertyNames(p)){if(So.has(u))continue;let m=Object.getOwnPropertyDescriptor(p,u);if(!m||typeof m.value!="function"||m.get||m.set||m.value.__evalkitTraced)continue;let f=m.value,g=n.traceFunction(`${d}.${u}`,f,void 0,o);Eo(f,g);try{Object.defineProperty(g,"name",{value:u,configurable:!0});}catch{}try{Object.defineProperty(g,"length",{value:f.length,configurable:!0});}catch{}g.__evalkitTraced=true,Object.defineProperty(p,u,{...m,value:g}),i++;}}}return i}var So,bo,Ze=_(()=>{So=new Set(["constructor","onModuleInit","onModuleDestroy","onApplicationBootstrap","onApplicationShutdown","beforeApplicationShutdown","configure","validate","authenticate","serializeUser","deserializeUser","canActivate","intercept","transform","catch","use"]),bo=/(Service|Controller|Gateway|Resolver|Repository|UseCase|Handler)$/;});function Qt(n){return wo.some(t=>t.test(n))}function Oo(n,t,e){let r="",o="GET";if(typeof n=="string")r=n,o=(t?.method??"GET").toUpperCase();else if(n instanceof URL)r=n.href,o=(t?.method??"GET").toUpperCase();else {let i=n.hostname??n.host??"localhost",c=n.port?`:${n.port}`:"",a=n.path??"/";r=`${e}://${i}${c}${a}`,o=(n.method??t?.method??"GET").toUpperCase();}let s=r;try{s=new URL(r.startsWith("http")?r:`${e}://localhost${r}`).pathname;}catch{}return {url:r,method:o,pathname:s}}function nn(n){let t,e;try{let s=typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href)));t=s("http"),e=s("https");}catch{return}let r=[{mod:t,scheme:"http"},{mod:e,scheme:"https"}];for(let{mod:s,scheme:i}of r){let a=function(l,d,p){let u=typeof d=="function"?void 0:d,{url:m,method:f,pathname:g}=Oo(l,u,i);if(Qt(m)||!api.trace.getActiveSpan()?.isRecording())return c.call(s,l,d,p);let h={...typeof l=="object"&&!(l instanceof URL)?l.headers??{}:{},...u?.headers??{}},v=h["x-evalkit-span-id"];if(v){typeof l=="object"&&!(l instanceof URL)&&l.headers&&delete l.headers["x-evalkit-span-id"],u?.headers&&delete u.headers["x-evalkit-span-id"];let b=z.get(String(v));if(b){let x=T({...h});delete x["x-evalkit-span-id"],Object.keys(x).length&&b.setAttributes({"http.request.headers":JSON.stringify(x)});}return c.call(s,l,d,p)}let k=T(h),R=n.tracer.startSpan(`${f} ${g}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":f,"http.url":m,...Object.keys(k).length?{"http.request.headers":JSON.stringify(k)}:{}}},api.context.active()),A=c.call(s,l,d,p),O=R.spanContext();return A.setHeader("traceparent",`00-${O.traceId}-${O.spanId}-01`),A.on("response",b=>{let x=b.statusCode??0;R.setAttributes({"http.status_code":x,...b.headers?{"http.response.headers":JSON.stringify(T(b.headers))}:{}}),R.setStatus({code:x>=400?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),R.end();}),A.on("error",b=>{R.setAttributes({"http.status_code":0,"error.message":b.message}),R.recordException(b instanceof Error?b:new Error(String(b))),R.setStatus({code:api.SpanStatusCode.ERROR,message:b.message}),R.end();}),A};let c=s.request;c.__evalkit||(a.__evalkit=true,Object.defineProperty(s,"request",{value:a,writable:true,configurable:true}));}}function rn(n){let t;try{t=(typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href))))("http");}catch{return}if(t.Server.prototype.emit.__evalkit_server)return;let e=t.Server.prototype.emit;function r(o,...s){if(o!=="request")return e.call(this,o,...s);let i=s[0],c=s[1],a=i.url??"/";if(Qt(a))return e.call(this,o,...s);if(api.trace.getActiveSpan()?.isRecording())return e.call(this,o,...s);let l=(i.method??"GET").toUpperCase(),d=a;try{d=new URL(a,"http://localhost").pathname;}catch{}let p=i.headers.traceparent,u=p?To(Array.isArray(p)?p[0]:p):api.context.active(),m=n.tracer.startSpan(`${l} ${d}`,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":l,"http.url":a,"http.request.headers":JSON.stringify(T(i.headers))}},u),f=api.trace.setSpan(u,m),g=m.spanContext();c.setHeader("x-trace-id",g.traceId),c.setHeader("traceparent",`00-${g.traceId}-${g.spanId}-01`);let y=n.options.maxBodyBytes,h=[],v=0;i.on("data",x=>{try{if(x&&v<y){let E=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;E&&E.length&&(h.push(E),v+=E.length);}}catch{}}),i.on("end",()=>{if(h.length)try{let x=Buffer.concat(h).subarray(0,y).toString("utf-8");x&&m.setAttribute("http.request.body",x);}catch{}});let k=[],R=0,A=x=>{try{if(x&&typeof x!="function"&&R<y){let E=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;E&&E.length&&(k.push(E),R+=E.length);}}catch{}},O=c.write.bind(c),b=c.end.bind(c);return c.write=function(x,...E){return A(x),O(x,...E)},c.end=function(x,...E){return A(x),b(x,...E)},c.on("finish",()=>{m.setAttribute("http.status_code",c.statusCode);try{let x=c.getHeaders();x&&Object.keys(x).length&&m.setAttribute("http.response.headers",JSON.stringify(T(x)));}catch{}if(k.length)try{let x=Buffer.concat(k).subarray(0,y).toString("utf-8");x&&m.setAttribute("http.response.body",x);}catch{}m.setStatus({code:c.statusCode>=400?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),m.end();}),c.on("error",x=>{m.setAttribute("error.message",x.message),m.recordException(x instanceof Error?x:new Error(String(x))),m.setStatus({code:api.SpanStatusCode.ERROR,message:x.message}),m.end();}),api.context.with(f,()=>e.call(this,o,...s))}r.__evalkit_server=true,t.Server.prototype.emit=r;}function To(n){let t=n.split("-");if(t.length<4)return api.context.active();let[,e,r,o]=t;if(!e||!r)return api.context.active();try{let s={traceId:e,spanId:r,isRemote:!0,traceFlags:parseInt(o??"01",16)};return api.trace.setSpanContext(api.context.active(),s)}catch{return api.context.active()}}function on(){if(typeof globalThis.fetch!="function"||globalThis.fetch.__evalkit)return;let n=globalThis.fetch.bind(globalThis);globalThis.fetch=async function(e,r){let o=typeof e=="string"?e:e instanceof URL?e.href:e.url;if(Qt(o))return n(e,r);let s=api.trace.getActiveSpan();if(!s?.isRecording())return n(e,r);let i=(r?.method??"GET").toUpperCase(),c=o;try{c=new URL(o).pathname;}catch{}let a={};r?.headers&&new Headers(r.headers).forEach((g,y)=>{a[y]=g;});let l=T(a),d=s.spanContext(),p=`00-${d.traceId}-${d.spanId}-01`,u=new Headers(r?.headers);u.set("traceparent",p);let m={...r,headers:u};Object.keys(l).length&&s.addEvent("http.fetch.request",{"http.method":i,"http.url":o,"http.request.headers":JSON.stringify(l)});try{let f=await n(e,m),g={};return f.headers.forEach((y,h)=>{g[h]=y;}),s.addEvent("http.fetch.response",{"http.url":o,"http.status_code":f.status,"http.response.headers":JSON.stringify(T(g))}),f}catch(f){throw s.addEvent("http.fetch.error",{"http.url":o,"error.message":f?.message??String(f),"error.stack":f?.stack??""}),f}},globalThis.fetch.__evalkit=true;}var wo,sn=_(()=>{Nt();jt();wo=[/\/v1\/ingest/,/\/health(z)?$/,/169\.254\./,/metadata\.google/,/storage\.googleapis/];});function cn(n){if(console.__evalkit)return;let t=console.log.bind(console),e=console.warn.bind(console),r=console.error.bind(console),o=i=>i.map(c=>{if(typeof c=="string")return c;if(c instanceof Error)return `${c.message}
|
|
15
|
-
${c.stack??""}`;try{return JSON.stringify(c)}catch{return String(c)}}).join(" ").slice(0,2e3),s=(i,c)=>{let a=api.trace.getActiveSpan();if(a?.isRecording())a.addEvent(`log.${i}`,{"log.level":i,"log.message":c});else {let l=n.tracer.startSpan(`log.${i}`,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":i,"log.message":c}},api.context.active());l.setStatus({code:i==="ERROR"?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),l.end();}};console.log=(...i)=>{t(...i),s("INFO",o(i));},console.warn=(...i)=>{e(...i),s("WARN",o(i));},console.error=(...i)=>{r(...i),s("ERROR",o(i));},console.__evalkit=true;}var ln=_(()=>{});function un(n,t,e){let r=api.trace.getActiveSpan();if(r?.isRecording())r.addEvent(t,{"error.message":e.message,"error.stack":e.stack??"","log.level":"ERROR","log.message":`${t}: ${e.message}`}),r.recordException(e),r.setStatus({code:api.SpanStatusCode.ERROR,message:e.message});else {let o=n.tracer.startSpan(t,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":"ERROR","log.message":`${t}: ${e.message}`,"error.message":e.message,"error.stack":e.stack??""}},api.context.active());o.recordException(e),o.setStatus({code:api.SpanStatusCode.ERROR,message:e.message}),o.end();}}function dn(n){typeof process>"u"||(process.on("unhandledRejection",t=>{let e=t instanceof Error?t:new Error(String(t));un(n,"error.unhandled_rejection",e);}),process.on("uncaughtException",t=>{un(n,"error.uncaught_exception",t instanceof Error?t:new Error(String(t)));}));}var mn=_(()=>{});function No(n){let t=Dt("mongoose");t&&kt(n,t);}function jo(n){let t=Dt("axios");t&&rt(n,t.default??t);}async function Bo(n){try{let e=w()("pg"),r=e.Client??e.default?.Client;if(r){ot(n,r);return}}catch{}try{let t=await S("pg"),e=t.Client??t.default?.Client;e&&ot(n,e);}catch{}}async function $o(n){try{let t=w(),e=t("mysql2"),r=e.Connection??e.default?.Connection??t("mysql2/lib/connection");if(r){st(n,r);return}}catch{}try{let t=await S("mysql2"),e=t.Connection??t.default?.Connection;e&&st(n,e);}catch{}}async function Go(n){try{let e=w()("ioredis"),r=e.default??e.Redis??e;if(r?.prototype){nt(n,r);return}}catch{}try{let t=await S("ioredis"),e=t.default??t.Redis??t;e?.prototype&&nt(n,e);}catch{}}async function Lo(n){try{let e=w()("openai"),o=(e.default??e.OpenAI??e)?.Chat?.Completions?.prototype;if(o){B(n,o);return}}catch{}try{let t=await S("openai"),r=(t.default??t.OpenAI??t)?.Chat?.Completions?.prototype;r&&B(n,r);}catch{}}async function Ho(n){try{let e=w()("@anthropic-ai/sdk"),o=(e.default??e.Anthropic??e)?.Messages?.prototype;if(o){$(n,o);return}}catch{}try{let t=await S("@anthropic-ai/sdk"),r=(t.default??t.Anthropic??t)?.Messages?.prototype;r&&$(n,r);}catch{}}async function Uo(n){try{let e=w()("@aws-sdk/client-bedrock-runtime"),o=(e.BedrockRuntimeClient??e.default?.BedrockRuntimeClient)?.prototype;if(o){at(n,o);return}}catch{}try{let t=await S("@aws-sdk/client-bedrock-runtime"),r=(t.BedrockRuntimeClient??t.default?.BedrockRuntimeClient)?.prototype;r&&at(n,r);}catch{}}async function Fo(n){try{let e=w()("@anthropic-ai/sdk"),o=(e.AnthropicVertex??e.default?.AnthropicVertex)?.Messages?.prototype;if(o){ut(n,o);return}}catch{}try{let t=await S("@anthropic-ai/sdk"),r=(t.AnthropicVertex??t.default?.AnthropicVertex)?.Messages?.prototype;r&&ut(n,r);}catch{}}async function Vo(n){try{let e=w()("@google-cloud/vertexai"),o=(e.GenerativeModel??e.default?.GenerativeModel)?.prototype;if(o){dt(n,o);return}}catch{}try{let t=await S("@google-cloud/vertexai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&dt(n,r);}catch{}}async function Do(n){try{let e=w()("cohere-ai"),o=(e.CohereClient??e.default?.CohereClient??e.default)?.prototype;if(o){it(n,o);return}}catch{}try{let t=await S("cohere-ai"),r=(t.CohereClient??t.default?.CohereClient??t.default)?.prototype;r&&it(n,r);}catch{}}async function Jo(n){try{let e=w()("@google/generative-ai"),o=(e.GenerativeModel??e.default?.GenerativeModel)?.prototype;if(o){ct(n,o);return}}catch{}try{let t=await S("@google/generative-ai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&ct(n,r);}catch{}}async function zo(n){try{let e=w()("@google/genai"),r=e.Models??e.default?.Models;if(r?.prototype){pt(n,r.prototype);return}}catch{}try{let t=await S("@google/genai"),e=t.Models??t.default?.Models;e?.prototype&&pt(n,e.prototype);}catch{}}async function Wo(n){try{let e=w()("groq-sdk"),o=(e.default??e.Groq??e)?.Chat?.Completions?.prototype;if(o){B(n,o,void 0,"groq");return}}catch{}try{let t=await S("groq-sdk"),r=(t.default??t.Groq??t)?.Chat?.Completions?.prototype;r&&B(n,r,void 0,"groq");}catch{}}async function Xo(n){try{let{patchLangChain:t}=await Promise.resolve().then(()=>(zt(),Ne));await t(n);}catch{}}function fn(n){try{rn(n);}catch{}try{nn(n);}catch{}on(),cn(n),dn(n),No(n),jo(n),Promise.all([Lo(n),Ho(n),Uo(n),Fo(n),Vo(n),Do(n),Jo(n),zo(n),Wo(n),Xo(n),Bo(n),$o(n),Go(n)]).catch(()=>{});}var gn=_(()=>{Jt();Kt();Ct();Lt();Wt();Ht();Ut();Vt();Mt();$t();Gt();qt();Bt();sn();ln();mn();});var Zt={};Yt(Zt,{EvalKitClient:()=>exports.EvalKitClient,EvalKitInterceptor:()=>exports.EvalKitInterceptor,TraceMethod:()=>Un,Traced:()=>Fn,createNestjsInterceptor:()=>Nn,currentTraceId:()=>zn,default:()=>exports.default,enableNestjsAutoTrace:()=>Dn,evaluate:()=>H,expressMiddleware:()=>In,fastifyPlugin:()=>Kn,flush:()=>Bn,generateScenarios:()=>Wn,hapiPlugin:()=>qn,honoMiddleware:()=>Mn,init:()=>yn,koaMiddleware:()=>Pn,langchainHandler:()=>bn,patchAnthropicClient:()=>vn,patchAnthropicVertexClient:()=>_n,patchAxiosClient:()=>On,patchBedrockClient:()=>xn,patchCohereClient:()=>kn,patchGoogleAIModel:()=>Rn,patchGoogleGenAIModels:()=>Sn,patchMongooseClient:()=>En,patchMysql2Client:()=>An,patchOpenAIClient:()=>hn,patchPgClient:()=>Tn,patchRedisClient:()=>wn,patchVertexGenerativeModel:()=>Cn,simulateUser:()=>Xn,startHttpTrace:()=>$n,startSpan:()=>Gn,startTrace:()=>jn,traceFunction:()=>Ln,traceObject:()=>Vn,traceTool:()=>Hn,withTrace:()=>Jn});function C(){if(!L)throw new Error("[evalkit] call evalkit.init() before using the SDK");return L}function yn(n){return L&&L.destroy(),L=new exports.EvalKitClient(n),fn(L),L}function hn(n,t){B(C(),n.chat.completions,t);}function vn(n,t){$(C(),n.messages,t);}function xn(n){at(C(),n);}function _n(n){ut(C(),n.messages);}function Cn(n){dt(C(),n);}function kn(n){it(C(),n);}function Rn(n){ct(C(),n);}function Sn(n){pt(C(),n);}function bn(){return Et(C())}function En(n){kt(C(),n);}function wn(n){nt(C(),n);}function On(n){rt(C(),n);}function Tn(n){ot(C(),n);}function An(n){st(C(),n);}function In(n){return He(C(),n)}function Kn(n){return $e(C(),n,Zo)}function Pn(n){return Ve(C(),n)}function Mn(n){return ze(C(),n)}function qn(n){return Xe(C(),n)}function Nn(){return new exports.EvalKitInterceptor(C())}function jn(n,t){return C().startTrace(n,t)}async function Bn(){return C().flush()}function $n(n,t,e){return C().startHttpTrace(n,t,e)}function Gn(n,t,e){return C().startSpan(n,t,e)}function Ln(n,t,e,r=true){return C().traceFunction(n,t,e,r)}function Hn(n,t,e,r=true){return C().traceTool(n,t,e,r)}function Un(n){return (t,e,r)=>{let o=r.value,s=n??`${t.constructor?.name??"unknown"}.${String(e)}`,i;return r.value=function(...c){return i||(i=C().traceFunction(s,o)),i.apply(this,c)},r}}function Fn(n){return t=>{let e=t.prototype,r=n?.prefix??t.name;for(let o of Object.getOwnPropertyNames(e)){if(o==="constructor")continue;let s=Object.getOwnPropertyDescriptor(e,o);if(!s||typeof s.value!="function")continue;let i=s.value,c=`${r}.${o}`,a=null;Object.defineProperty(e,o,{...s,value:function(...l){return a||(a=C().traceFunction(c,i)),a.apply(this,l)}});}return t}}function Vn(n,t){let e=C(),r=t?.prefix,o=t?.captureIO??true;for(let s of Object.keys(n)){let i=n[s];if(typeof i=="function"&&!i.__evalkitTraced){let c=r?`${r}.${s}`:s,a=e.traceFunction(c,i,void 0,o);a.__evalkitTraced=true,n[s]=a;}}return n}async function Dn(n,t){let e,r=n;if(typeof r.getProviders=="function"&&typeof r.getControllers=="function")e=n;else if(typeof r.get=="function")try{let s=await import('@nestjs/core');s.DiscoveryService&&(e=r.get(s.DiscoveryService));}catch(o){console.warn("[evalkit] enableNestjsAutoTrace: could not resolve DiscoveryService:",o?.message);}return e?Ye(C(),e,t):0}function Jn(n,t){return api.context.with(n,t)}function zn(){let n=api.trace.getActiveSpan();return n?.isRecording()?n.spanContext().traceId:void 0}function Wn(n){return ne(C(),n)}function Xn(n){return re(C(),n)}function Zo(n){return K(n)}var L;exports.default=void 0;var te=_(()=>{gt();oe();At();J();Kt();Ct();Mt();qt();Bt();$t();Gt();Lt();Ht();Ut();Vt();zt();Wt();Ge();Ue();De();We();Qe();Xt();Ze();gn();At();Xt();gt();L=null;exports.default={init:yn,evaluate:H,generateScenarios:Wn,simulateUser:Xn,patchOpenAIClient:hn,patchAnthropicClient:vn,patchBedrockClient:xn,patchAnthropicVertexClient:_n,patchVertexGenerativeModel:Cn,patchCohereClient:kn,patchGoogleAIModel:Rn,patchGoogleGenAIModels:Sn,langchainHandler:bn,patchMongooseClient:En,patchRedisClient:wn,patchAxiosClient:On,patchPgClient:Tn,patchMysql2Client:An,expressMiddleware:In,fastifyPlugin:Kn,koaMiddleware:Pn,honoMiddleware:Mn,hapiPlugin:qn,createNestjsInterceptor:Nn,startTrace:jn,startHttpTrace:$n,startSpan:Gn,traceFunction:Ln,traceTool:Hn,traceObject:Vn,TraceMethod:Un,Traced:Fn,enableNestjsAutoTrace:Dn,withTrace:Jn,currentTraceId:zn,flush:Bn};});te();exports.TraceMethod=Un;exports.Traced=Fn;exports.createNestjsInterceptor=Nn;exports.currentTraceId=zn;exports.enableNestjsAutoTrace=Dn;exports.evaluate=H;exports.expressMiddleware=In;exports.fastifyPlugin=Kn;exports.flush=Bn;exports.generateScenarios=Wn;exports.hapiPlugin=qn;exports.honoMiddleware=Mn;exports.init=yn;exports.koaMiddleware=Pn;exports.langchainHandler=bn;exports.patchAnthropicClient=vn;exports.patchAnthropicVertexClient=_n;exports.patchAxiosClient=On;exports.patchBedrockClient=xn;exports.patchCohereClient=kn;exports.patchGoogleAIModel=Rn;exports.patchGoogleGenAIModels=Sn;exports.patchMongooseClient=En;exports.patchMysql2Client=An;exports.patchOpenAIClient=hn;exports.patchPgClient=Tn;exports.patchRedisClient=wn;exports.patchVertexGenerativeModel=Cn;exports.simulateUser=Xn;exports.startHttpTrace=$n;exports.startSpan=Gn;exports.startTrace=jn;exports.traceFunction=Ln;exports.traceObject=Vn;exports.traceTool=Hn;exports.withTrace=Jn;
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var api=require('@opentelemetry/api'),crypto=require('crypto'),sdkTraceNode=require('@opentelemetry/sdk-trace-node'),sdkTraceBase=require('@opentelemetry/sdk-trace-base'),resources=require('@opentelemetry/resources'),semanticConventions=require('@opentelemetry/semantic-conventions'),module$1=require('module');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;var At=Object.defineProperty;var tr=Object.getOwnPropertyDescriptor;var er=Object.getOwnPropertyNames;var nr=Object.prototype.hasOwnProperty;var I=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var x=(e,t)=>()=>(e&&(t=e(e=0)),t);var ee=(e,t)=>{for(var n in t)At(e,n,{get:t[n],enumerable:true});},rr=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of er(t))!nr.call(e,o)&&o!==n&&At(e,o,{get:()=>t[o],enumerable:!(r=tr(t,o))||r.enumerable});return e};var or=e=>rr(At({},"__esModule",{value:true}),e);function sr(e,t){if(t.length===0)return {score:1,lcsLength:0};let n=e.length,r=t.length,o=Array.from({length:n+1},()=>new Array(r+1).fill(0));for(let a=1;a<=n;a++)for(let c=1;c<=r;c++)e[a-1]===t[c-1]?o[a][c]=o[a-1][c-1]+1:o[a][c]=Math.max(o[a-1][c],o[a][c-1]);let s=o[n][r];return {score:s/t.length,lcsLength:s}}function ar(e,t){if(e.length===0&&t.length===0)return {score:1,precision:1,recall:1};if(e.length===0||t.length===0)return {score:0,precision:0,recall:0};let n=new Set(e),r=new Set(t),o=new Set([...n].filter(i=>r.has(i))),s=o.size/n.size,a=o.size/r.size;return {score:s+a===0?0:2*s*a/(s+a),precision:s,recall:a}}function ir(e,t){if(t.length===0)return {score:1,called:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,called:r,total:t.length}}function cr(e,t){if(t.length===0)return {score:1,matched:[],missing:[]};let n=e.toLowerCase(),r=t.filter(s=>n.includes(s.toLowerCase())),o=t.filter(s=>!n.includes(s.toLowerCase()));return {score:r.length/t.length,matched:r,missing:o}}function lr(e,t){let n={},r=[];if(t.requiredTerms!==void 0&&t.requiredTerms.length>0){let s=e.toLowerCase(),a=t.requiredTerms.every(c=>s.includes(c.toLowerCase()));n.requiredTerms=a,r.push(a);}if(t.hasCitations!==void 0){let s=/\[[\d]+\]|\(\w[^)]{1,80}\d{4}\)|\bhttps?:\/\//.test(e);n.hasCitations=t.hasCitations?s:!s,r.push(n.hasCitations);}if(t.slideCount!==void 0){let s=/slide\s+\d+|section\s+\d+|##\s+\d+\./gi,c=(e.match(s)??[]).length===t.slideCount;n.slideCount=c,r.push(c);}return r.length===0?{score:1,checks:n}:{score:r.filter(Boolean).length/r.length,checks:n}}function pr(e,t){if(e.length===0)return {score:1,relevant:0,total:0};let n=new Set(t),r=e.filter(o=>n.has(o)).length;return {score:r/e.length,relevant:r,total:e.length}}function ur(e,t){if(t.length===0)return {score:1,covered:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,covered:r,total:t.length}}function U(e){let t=new Set(e.metrics??["tool_trajectory","tool_f1","tool_correctness","response_match","constraint_compliance","contextual_precision","contextual_recall"]),n=(e.toolCalls??[]).map(i=>i.name),r=e.expectedTools??[],o={},s={};if(t.has("tool_trajectory")&&r.length>0){let i=sr(n,r);o.tool_trajectory=i.score,s.tool_trajectory={lcsLength:i.lcsLength,expectedCount:r.length};}if(t.has("tool_f1")&&(n.length>0||r.length>0)){let i=ar(n,r);o.tool_f1=i.score,s.tool_f1={precision:i.precision,recall:i.recall};}if(t.has("tool_correctness")&&r.length>0){let i=ir(n,r);o.tool_correctness=i.score,s.tool_correctness={called:i.called,total:i.total};}let a=e.constraints?.requiredTerms??[];if(t.has("response_match")&&a.length>0){let i=cr(e.output,a);o.response_match=i.score,s.response_match={matched:i.matched,missing:i.missing};}if(t.has("constraint_compliance")&&e.constraints){let i=lr(e.output,e.constraints);o.constraint_compliance=i.score,s.constraint_compliance={checks:i.checks};}if(t.has("contextual_precision")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let i=pr(e.retrievedContext,e.expectedContext);o.contextual_precision=i.score,s.contextual_precision={relevant:i.relevant,total:i.total};}if(t.has("contextual_recall")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let i=ur(e.retrievedContext,e.expectedContext);o.contextual_recall=i.score,s.contextual_recall={covered:i.covered,total:i.total};}let c={scores:o,details:s};try{let i=(re(),or(ne)),l={"evalkit.span_type":"eval_result","evalkit.eval_type":"offline"};for(let[p,u]of Object.entries(o))l[`evalkit.metric.${p}`]=u;let{end:d}=i.startSpan("evaluation",l);d("OK");}catch{}return c}var vt=x(()=>{});function xt(e,t,n){if(!e||!t||!F.has(e))return;let r=Z.get(e)??[];r.push({name:t,args:n}),Z.set(e,r);}var F,Z,tt=x(()=>{F=new Map,Z=new Map;});function _t(e){return crypto.randomBytes(e).toString("hex")}function oe(e){return typeof e=="function"?{name:e.name||"tool"}:typeof e=="string"||e&&typeof e=="object"?e:String(e)}async function se(e,t){let n=(t.apiUrl??process.env.EVALKIT_API_URL??e.options.apiUrl).replace(/\/$/,""),r={agentInstructions:t.agentInstructions,count:t.count??5};t.tools&&(r.tools=t.tools.map(oe)),t.functionSchemas&&(r.functionSchemas=t.functionSchemas.map(oe)),t.context!==void 0&&(r.context=t.context),t.rag&&(r.rag=t.rag),t.categories&&(r.categories=t.categories),t.model&&(r.model=t.model),t.provider&&(r.provider=t.provider),t.apiKey&&(r.apiKey=t.apiKey),t.temperature!==void 0&&(r.temperature=t.temperature);let o=await fetch(n+"/scenarios/generate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":e.options.subscriptionKey},body:JSON.stringify(r)});if(!o.ok){let a=await o.text().catch(()=>"");throw new Error(`generateScenarios failed ${o.status}: ${a}`)}return (await o.json()).scenarios??[]}function fr(e){let t=e.turns??e.messages??[],n=[];for(let r of t)typeof r=="string"?n.push(r):r&&typeof r=="object"&&r.content&&(r.role??"user")==="user"&&n.push(String(r.content));return n.length===0&&e.starting_prompt&&n.push(String(e.starting_prompt)),n}function gr(e,t,n,r){let o=Array.from(new Set([...e.constraints?.required_terms??[],...e.target_keywords??[]])),s={};o.length&&(s.requiredTerms=o),e.constraints?.has_citations!==void 0&&(s.hasCitations=e.constraints.has_citations);try{return U({output:t,toolCalls:n,expectedTools:e.expected_tools??[],constraints:s,metrics:r}).scores}catch{return {}}}async function yr(e,t,n,r){let o=n.name??"scenario",s=n.scenario_id??"scn_"+_t(6),a="sess_"+_t(6),c=fr(n).slice(0,r.maxTurns),i={...n.setup?.state??{},__safe_mode__:t.safeMode??true},{traceId:l,end:d,ctx:p}=e.startTrace(`scenario:${o}`,{"evalkit.session_id":a});F.set(l,{simulationId:r.simulationId,runId:r.runId,scenarioId:s});let u="OK",m,f=[],g=[],y=0,h={};try{await api.context.with(p,async()=>{for(let R=0;R<c.length;R++){let T={message:c[R],sessionId:a,state:i,turn:R+1},w=await t.entrypoint(T);w&&typeof w=="object"&&"text"in w?(f.push(w.text),w.toolCalls&&g.push(...w.toolCalls)):f.push(String(w)),y++;}let k=g.length?g:Z.get(l)??[];h=gr(n,f.join(`
|
|
2
|
+
`),k,t.metrics);});}catch(k){u="ERROR",m=k?.message??String(k);}finally{d(u);}let v={scenarioId:s,name:o,status:u,turns:y,scores:h};return m&&(v.error=m),{result:v,traceId:l}}async function ae(e,t){let n="sim_"+_t(8),r="run_"+_t(8),o=t.maxTurns??12,s=[],a=[];for(let c of t.scenarios){let{result:i,traceId:l}=await yr(e,t,c,{simulationId:n,runId:r,maxTurns:o});s.push(i),a.push(l);}await e.flush();for(let c of a)F.delete(c),Z.delete(c);return {simulationId:n,runId:r,results:s}}var ie=x(()=>{tt();vt();});var M,ce=x(()=>{(function(e){e[e.SUCCESS=0]="SUCCESS",e[e.FAILED=1]="FAILED";})(M||(M={}));});var le=x(()=>{ce();});function hr(e,t){let n=s=>{try{return JSON.stringify(s).length}catch{return 1/0}};if(n(e)<=V)return e;let r=s=>`\u2026[dropped ${s} bytes \u2014 exceeded trace span size limit]`,o=e.attributes;if(o)for(let s of ["http.response.body","http.request.body","gen_ai.response.body","gen_ai.request.body","response.body","request.body"]){let a=o[s];typeof a=="string"&&a.length>1024&&(o[s]=r(a.length));}if(n(e)<=V||(e.prompt&&e.prompt.length>1024&&(e.prompt=r(e.prompt.length)),e.completion&&e.completion.length>1024&&(e.completion=r(e.completion.length)),e.statusMessage&&e.statusMessage.length>4096&&(e.statusMessage=e.statusMessage.slice(0,4096)),n(e)<=V))return e;if(o)for(let[s,a]of Object.entries(o))typeof a=="string"&&a.length>512&&(o[s]=a.slice(0,512)+"\u2026");return n(e)<=V||(e.attributes={"trace.truncated":true},e.events=void 0,e.prompt=void 0,e.completion=void 0,n(e)<=V)?e:(t&&console.warn(`[evalkit] dropping oversized span "${e.operation}" (${n(e)}B > ${V}B)`),null)}function It(e){return e[0]*1e3+e[1]/1e6}function vr(e){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[e]??"INTERNAL"}function xr(e){return e===1?"OK":e===2?"ERROR":"UNSET"}function _r(e){let t={};for(let[n,r]of Object.entries(e))n.startsWith("evalkit.")||n==="gen_ai.system"||r!=null&&(t[n]=r);return t}function ue(e){return new Promise(t=>setTimeout(t,e))}var pe,V,Ct,de=x(()=>{le();tt();pe=3,V=900*1024,Ct=class{constructor(t){this.authFailures=0;this.disabled=false;this.url=`${t.baseUrl.replace(/\/$/,"")}/v1/ingest`,this.subscriptionKey=t.subscriptionKey,this.debug=t.debug??false;}export(t,n){if(this.disabled){n({code:M.FAILED});return}let r=t.map(s=>hr(this.toEnvelope(s),this.debug)).filter(s=>s!==null);if(r.length===0){n({code:M.SUCCESS});return}let o={events:r};this.debug&&console.log(`[evalkit] sending ${r.length} span(s) \u2192 ${this.url}`),this.fetchWithRetry(this.url,{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":this.subscriptionKey},body:JSON.stringify(o)}).then(async s=>{if(!s.ok){let a=await s.text().catch(()=>"(no body)");s.status===401||s.status===403?(this.authFailures++,this.authFailures>=pe?(this.disabled=true,console.error(`[evalkit] export rejected ${s.status}: ${a} \u2014 disabling tracing after ${this.authFailures} consecutive auth failures; check your EvalKit subscription key.`)):this.debug&&console.warn(`[evalkit] export rejected ${s.status} (auth failure ${this.authFailures}/${pe})`)):console.error(`[evalkit] export failed ${s.status}: ${a}`),n({code:M.FAILED});return}if(this.authFailures=0,this.debug){let a=await s.json().catch(()=>({}));console.log(`[evalkit] exported ${r.length} span(s) \u2014 status: ${a.status}`);}n({code:M.SUCCESS});}).catch(s=>{console.error("[evalkit] export network error:",s),n({code:M.FAILED});});}async fetchWithRetry(t,n,r=3){let o=[200,600,1800],s;for(let a=0;a<=r;a++)try{let c=await fetch(t,n);if(c.ok||c.status>=400&&c.status<500)return c;if(a<r)this.debug&&console.warn(`[evalkit] HTTP ${c.status}, retry ${a+1}/${r}`),await ue(o[a]??1800);else return c}catch(c){s=c,a<r&&(this.debug&&console.warn(`[evalkit] network error, retry ${a+1}/${r}:`,c),await ue(o[a]??1800));}throw s}shutdown(){return Promise.resolve()}toEnvelope(t){let n=t.spanContext(),r=t.attributes,o=It(t.startTime),s=It(t.endTime),a=t.events.map(l=>({name:l.name,timestamp:new Date(It(l.time)).toISOString(),attributes:l.attributes})),c={traceId:n.traceId,spanId:n.spanId,parentSpanId:t.parentSpanId,spanKind:vr(t.kind),spanType:r["evalkit.span_type"]??"log",status:xr(t.status.code),statusMessage:t.status.message,serviceName:t.resource.attributes["service.name"],operation:t.name,model:r["gen_ai.response.model"]??r["gen_ai.request.model"],provider:r["gen_ai.system"],prompt:r["evalkit.prompt"],completion:r["evalkit.completion"],tokensIn:Math.round(r["gen_ai.usage.input_tokens"]||0)||void 0,tokensOut:Math.round(r["gen_ai.usage.output_tokens"]||0)||void 0,latencyMs:Math.round(s-o),startTime:new Date(o).toISOString(),endTime:new Date(s).toISOString(),events:a.length>0?a:void 0,attributes:_r(r),createdAt:new Date(o).toISOString(),environment:r["evalkit.environment"],appVersion:r["evalkit.app_version"],userId:r["evalkit.user_id"],sessionId:r["evalkit.session_id"],deviceId:r["evalkit.device_id"],sdkVersion:r["evalkit.sdk_version"]},i=F.get(n.traceId);return i&&(c.isSimulation=true,c.simulationId=i.simulationId,c.scenarioId=i.scenarioId,c.runId=i.runId),c}};});function J(e,t=Er){let n;try{n=JSON.stringify(e);}catch{}if(n===void 0)try{n=String(e);}catch{n="<unserializable>";}return n.length>t?n.slice(0,t)+"\u2026":n}var br,Er;exports.EvalKitClient=void 0;var Mt=x(()=>{de();br="0.1.27",Er=4096;exports.EvalKitClient=class{constructor(t){this.options={serviceName:"unknown",debug:false,maxExportBatchSize:512,scheduledDelayMillis:5e3,maxBodyBytes:10*1024*1024,baseUrl:"https://api.syntropylabs.ai",apiUrl:"https://api.syntropylabs.ai",environment:"",appVersion:"",...t};let n=new Ct({baseUrl:this.options.baseUrl,subscriptionKey:this.options.subscriptionKey,debug:this.options.debug});this.provider=new sdkTraceNode.NodeTracerProvider({resource:new resources.Resource({[semanticConventions.ATTR_SERVICE_NAME]:this.options.serviceName}),spanProcessors:[new sdkTraceBase.BatchSpanProcessor(n,{maxExportBatchSize:this.options.maxExportBatchSize,scheduledDelayMillis:this.options.scheduledDelayMillis})]}),this.provider.register(),this.tracer=api.trace.getTracer("evalkit","0.1.0");}metaAttributes(){let t={"evalkit.sdk_version":br};return this.options.environment&&(t["evalkit.environment"]=this.options.environment),this.options.appVersion&&(t["evalkit.app_version"]=this.options.appVersion),this.options.deviceId&&(t["evalkit.device_id"]=this.options.deviceId),t}startTrace(t,n){let r=this.tracer.startSpan(t,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"log",...this.metaAttributes(),...n}},api.context.active()),o=api.trace.setSpan(api.context.active(),r);return {traceId:r.spanContext().traceId,ctx:o,end:(a="OK")=>{r.setStatus({code:a==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),r.end();}}}startHttpTrace(t,n,r){let o=this.tracer.startSpan(t,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":n.method,"http.url":n.url,...n.headers?{"http.request.headers":JSON.stringify(n.headers)}:{},...n.requestBody!==void 0?{"http.request.body":JSON.stringify(n.requestBody)}:{},...this.metaAttributes(),...r}},api.context.active()),s=api.trace.setSpan(api.context.active(),o);return {traceId:o.spanContext().traceId,ctx:s,end:(c="OK",i)=>{i?.statusCode!==void 0&&o.setAttribute("http.status_code",i.statusCode),i?.body!==void 0&&o.setAttribute("http.response.body",JSON.stringify(i.body)),i?.headers&&o.setAttribute("http.response.headers",JSON.stringify(i.headers)),o.setStatus({code:c==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),o.end();}}}startSpan(t,n,r){let o=this.tracer.startSpan(t,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"function_call",...this.metaAttributes(),...n}},r??api.context.active());return {ctx:api.trace.setSpan(api.context.active(),o),end:(a="OK",c)=>{c&&o.setAttributes(c),o.setStatus({code:a==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR}),o.end();}}}traceFunction(t,n,r,o=true){let s=this;return function(...a){let c={"evalkit.span_type":"function_call",...r};o&&a.length&&(c["function.args"]=J(a));let{ctx:i,end:l}=s.startSpan(t,c),d;try{d=api.context.with(i,()=>n.apply(this,a));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}return d&&typeof d.then=="function"?d.then(p=>(l("OK",o?{"function.result":J(p)}:void 0),p),p=>{let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}):(l("OK",o?{"function.result":J(d)}:void 0),d)}}traceTool(t,n,r,o=true){let s=this;return function(...a){let c={"evalkit.span_type":"tool_call","tool.name":t,"gen_ai.tool.name":t,...r};o&&a.length&&(c["tool.arguments"]=J(a.length===1?a[0]:a));let{ctx:i,end:l}=s.startSpan(t,c),d;try{d=api.context.with(i,()=>n.apply(this,a));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}return d&&typeof d.then=="function"?d.then(p=>(l("OK",o?{"tool.result":J(p)}:void 0),p),p=>{let u=p instanceof Error?p:new Error(String(p));throw api.trace.getSpan(i)?.recordException(u),l("ERROR",{"error.message":u.message}),p}):(l("OK",o?{"tool.result":J(d)}:void 0),d)}}async flush(){await this.provider.forceFlush();}async destroy(){await this.provider.shutdown();}};});function K(e){if(!e)return api.context.active();let t=e.split("-");return t.length===4&&t[0]==="00"&&t[1].length===32&&t[2].length===16?api.trace.setSpanContext(api.ROOT_CONTEXT,{traceId:t[1],spanId:t[2],traceFlags:parseInt(t[3],16),isRemote:true}):api.context.active()}var W=x(()=>{});function kt(e){return e.length<=fe?e:e.slice(0,fe)+"\u2026"}function Rt(e){if(typeof e=="string")return e;try{return JSON.stringify(e??{})}catch{return String(e)}}function Kr(e){try{let t=JSON.parse(e);return t&&typeof t=="object"?t:void 0}catch{return}}function ge(e,t){let n=[];try{for(let r of e?.choices??[])for(let o of r?.message?.tool_calls??[]){let s=o?.function?.name??"";s&&n.push({name:s,argsJson:kt(Rt(o?.function?.arguments??"")),id:o?.id??""});}}catch{}return n}function ye(e,t){let n=[];try{for(let r of e??[]){if(r?.type!=="tool_use")continue;let o=r?.name??"";o&&n.push({name:o,argsJson:kt(Rt(r?.input??{})),id:r?.id??""});}}catch{}return n}function he(e,t){let n=[];try{let r=[];if(Array.isArray(e?.functionCalls))r.push(...e.functionCalls);else for(let s of e?.candidates??[])for(let a of s?.content?.parts??[])a?.functionCall?.name&&r.push(a.functionCall);let o=0;for(let s of r){let a=s?.name??"";a&&n.push({name:a,argsJson:kt(Rt(s?.args??{})),id:s?.id??`call_${o++}`});}}catch{}return n}function ve(e,t){let n=[];try{for(let r of e?.generations??[])for(let o of r??[])for(let s of o?.message?.tool_calls??[]){let a=s?.name??"";a&&n.push({name:a,argsJson:kt(Rt(s?.args??{})),id:s?.id??""});}}catch{}return n}function B(e,t,n){if(!n.length)return;let r=t.spanContext().traceId,o=api.trace.setSpan(api.context.active(),t);for(let s of n){if(!s.name)continue;let a={"gen_ai.tool.name":s.name,"gen_ai.tool.call.id":s.id,"gen_ai.tool.call.arguments":s.argsJson};s.result!=null&&(a["gen_ai.tool.call.result"]=s.result);try{t.addEvent("gen_ai.tool.call",a);}catch{}try{xt(r,s.name,Kr(s.argsJson));}catch{}if(s.result!=null)try{e.tracer.startSpan(s.name,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"tool_call",...a,"tool.name":s.name,"tool.arguments":s.argsJson,"tool.result":s.result}},o).end();}catch{}}}var fe,et=x(()=>{tt();fe=32768;});function qr(e,t){let n="",r=0,o=0,s=false;function a(c){s||(s=true,c?(t.recordException(c),t.setStatus({code:api.SpanStatusCode.ERROR,message:c.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:api.SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(c,i,l){if(i===Symbol.asyncIterator)return function(){let p=c[Symbol.asyncIterator]();return {async next(){try{let u=await p.next();if(!u.done&&u.value){let m=u.value,f=m.choices?.[0]?.delta?.content;f&&(n+=f),m.usage&&(r=m.usage.prompt_tokens??0,o=m.usage.completion_tokens??0);}return u.done&&a(),u}catch(u){throw a(u instanceof Error?u:new Error(String(u))),u}},return(){return a(),p.return?.()??Promise.resolve({done:true,value:void 0})},throw(u){return a(u instanceof Error?u:new Error(String(u))),p.throw?.(u)??Promise.reject(u)},[Symbol.asyncIterator](){return this}}};let d=Reflect.get(c,i,l);return typeof d=="function"?d.bind(c):d}})}function $(e,t,n,r="openai"){if(t.create.__evalkit)return;let o=t.create;t.create=async function(...s){let a=s[0],c=n??api.context.active(),i=e.tracer.startSpan("chat.completions.create",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":r,"gen_ai.request.model":a.model??"unknown",...a.temperature!=null&&{"gen_ai.request.temperature":a.temperature},...a.max_tokens!=null&&{"gen_ai.request.max_tokens":a.max_tokens},...a.top_p!=null&&{"gen_ai.request.top_p":a.top_p},"evalkit.prompt":Nr(a.messages??[])}},c),l=api.trace.setSpan(c,i);if(a?.stream){let m;try{m=await api.context.with(l,()=>o.apply(this,s));}catch(f){let g=f instanceof Error?f:new Error(String(f));throw i.recordException(g),i.setStatus({code:api.SpanStatusCode.ERROR,message:g.message}),i.end(),f}return qr(m,i)}let d;try{d=await api.context.with(l,()=>o.apply(this,s));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw i.recordException(f),i.setStatus({code:api.SpanStatusCode.ERROR,message:f.message}),i.end(),m}let p=d.choices?.[0],u=p?.message.content??"";return i.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.prompt_tokens??0,"gen_ai.usage.output_tokens":d.usage?.completion_tokens??0,"gen_ai.usage.total_tokens":d.usage?.total_tokens??0,"gen_ai.response.finish_reasons":p?.finish_reason?[p.finish_reason]:[],"evalkit.completion":u}),B(e,i,ge(d)),i.setStatus({code:api.SpanStatusCode.OK}),i.end(),d},t.create.__evalkit=true;}function Nr(e){return e.map(t=>`${t.role}: ${t.content??""}`).join(`
|
|
3
|
+
`)}var qt=x(()=>{et();});function $r(e,t){let n="",r=0,o=0,s=false;function a(i){let l=i?.type;if(l==="content_block_delta"){let d=i.delta;d?.type==="text_delta"&&d.text&&(n+=d.text);}else l==="message_start"?r=i.message?.usage?.input_tokens??0:l==="message_delta"&&(o=i.usage?.output_tokens??0);}function c(i){s||(s=true,i?(t.recordException(i),t.setStatus({code:api.SpanStatusCode.ERROR,message:i.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:api.SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(i,l,d){if(l===Symbol.asyncIterator)return function(){let u=i[Symbol.asyncIterator]();return {async next(){try{let m=await u.next();return !m.done&&m.value&&a(m.value),m.done&&c(),m}catch(m){throw c(m instanceof Error?m:new Error(String(m))),m}},return(){return c(),u.return?.()??Promise.resolve({done:true,value:void 0})},throw(m){return c(m instanceof Error?m:new Error(String(m))),u.throw?.(m)??Promise.reject(m)},[Symbol.asyncIterator](){return this}}};let p=Reflect.get(i,l,d);return typeof p=="function"?p.bind(i):p}})}function G(e,t,n){if(t.create.__evalkit)return;let r=t.create;t.create=async function(...o){let s=o[0],a=n??api.context.active(),c=Gr(s.system,s.messages??[]),i=e.tracer.startSpan("messages.create",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"anthropic","gen_ai.request.model":s.model??"unknown",...s.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s.max_tokens!=null&&{"gen_ai.request.max_tokens":s.max_tokens},...s.top_p!=null&&{"gen_ai.request.top_p":s.top_p},"evalkit.prompt":c}},a),l=api.trace.setSpan(a,i);if(s?.stream){let u;try{u=await api.context.with(l,()=>r.apply(this,o));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw i.recordException(f),i.setStatus({code:api.SpanStatusCode.ERROR,message:f.message}),i.end(),m}return $r(u,i)}let d;try{d=await api.context.with(l,()=>r.apply(this,o));}catch(u){let m=u instanceof Error?u:new Error(String(u));throw i.recordException(m),i.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),i.end(),u}let p=d.content.filter(u=>u.type==="text").map(u=>u.text??"").join("");return i.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.input_tokens??0,"gen_ai.usage.output_tokens":d.usage?.output_tokens??0,"gen_ai.response.finish_reasons":d.stop_reason?[d.stop_reason]:[],"evalkit.completion":p}),B(e,i,ye(d.content)),i.setStatus({code:api.SpanStatusCode.OK}),i.end(),d},t.create.__evalkit=true;}function Gr(e,t){let n=[];return e&&n.push(`system: ${e}`),n.push(...t.map(r=>`${r.role}: ${r.content}`)),n.join(`
|
|
4
|
+
`)}var St=x(()=>{et();});function bt(e,t){let n=t.Query?.prototype;if(!n||n.__evalkit)return;let r=n.exec;n.exec=async function(){if(!api.trace.getActiveSpan()?.isRecording())return r.call(this);let s=this.op??"query",a=this.model?.collection?.name??this._collection?.collectionName??"unknown",c=e.tracer.startSpan(`${s} ${a}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mongodb","db.operation":s,"db.collection":a,"db.query":JSON.stringify(this._conditions??{})}},api.context.active());try{let i=await r.call(this);return c.setStatus({code:api.SpanStatusCode.OK}),c.end(),i}catch(i){let l=i instanceof Error?i:new Error(String(i));throw c.recordException(l),c.setStatus({code:api.SpanStatusCode.ERROR,message:l.message}),c.end(),i}},n.__evalkit=true;}var jt=x(()=>{});function ot(e,t){let r=t?.prototype&&(typeof t.prototype.sendCommand=="function"||typeof t.prototype.call=="function")?t.prototype:Object.getPrototypeOf(t);if(!r||r.__evalkit_redis)return;let o=typeof r.sendCommand=="function"?"sendCommand":typeof r.call=="function"?"call":null;if(!o)return;let s=r[o];r[o]=async function(a,...c){if(!api.trace.getActiveSpan()?.isRecording())return s.call(this,a,...c);let l=Array.isArray(a)?a[0]:a?.name??a?.args?.[0]??"cmd",d=(typeof l=="string"?l:String(l)).toUpperCase(),p=e.tracer.startSpan(`redis ${d}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"redis","db.operation":d}},api.context.active());try{let u=await s.call(this,a,...c);return p.setStatus({code:api.SpanStatusCode.OK}),p.end(),u}catch(u){let m=u instanceof Error?u:new Error(String(u));throw p.recordException(m),p.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),p.end(),u}},r.__evalkit_redis=true;}var Bt=x(()=>{});function O(e){let t={};for(let[n,r]of Object.entries(e))Jr.test(n)||r!==void 0&&(t[n]=Array.isArray(r)?r.join(", "):String(r));return t}var Jr,$t=x(()=>{Jr=/^(authorization|cookie|set-cookie|x-api-key|api-key|x-auth-token|proxy-authorization|x-secret|x-access-token|token|password)$/i;});var X,Gt=x(()=>{X=new Map;});function st(e,t){if(!t.__evalkit_axios){if(t.__evalkit_axios=true,typeof t.create=="function"){let n=t.create.bind(t);t.create=function(...r){let o=n(...r);return st(e,o),o};}t.interceptors.request.use(n=>{let r=(n.baseURL?n.baseURL.replace(/\/$/,""):"")+(n.url??"");if(Yr.some(d=>d.test(r))||!api.trace.getActiveSpan()?.isRecording())return n;let s=n.url??"";try{s=new URL(r,n.baseURL??"http://localhost").pathname;}catch{}let a=(n.method??"get").toUpperCase(),c=O(n.headers??{}),i=e.tracer.startSpan(`${a} ${s}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":a,"http.url":r,...Object.keys(c).length?{"http.request.headers":JSON.stringify(c)}:{},...n.data!==void 0?{"http.request.body":typeof n.data=="string"?n.data.slice(0,e.options.maxBodyBytes):JSON.stringify(n.data).slice(0,e.options.maxBodyBytes)}:{}}},api.context.active()),l=i.spanContext();return n.headers=n.headers??{},n.headers.traceparent=`00-${l.traceId}-${l.spanId}-01`,n.headers["x-evalkit-span-id"]=l.spanId,X.set(l.spanId,i),n.__evalkitSpan=i,n.__evalkitSpanId=l.spanId,n}),t.interceptors.response.use(n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&X.delete(n.config.__evalkitSpanId),r){let o=O(n.headers??{}),s=n.data,a;s!=null&&(a=(typeof s=="string"?s:JSON.stringify(s)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":n.status,...Object.keys(o).length?{"http.response.headers":JSON.stringify(o)}:{},...a!==void 0?{"http.response.body":a}:{}}),r.setStatus({code:api.SpanStatusCode.OK}),r.end();}return n},n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&X.delete(n.config.__evalkitSpanId),r){let o=n.response?.status??0,s=O(n.response?.headers??{}),a=n.response?.data,c;a!=null&&(c=(typeof a=="string"?a:JSON.stringify(a)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":o,"error.message":n.message,...Object.keys(s).length?{"http.response.headers":JSON.stringify(s)}:{},...c!==void 0?{"http.response.body":c}:{}}),r.recordException(n instanceof Error?n:new Error(String(n))),r.setStatus({code:api.SpanStatusCode.ERROR,message:n.message}),r.end();}throw n});}}var Yr,Lt=x(()=>{$t();Gt();Yr=[/\/v1\/ingest/,/\/health(z)?$/];});function at(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!n||n.__evalkit_pg)return;let r=n.query;typeof r=="function"&&(n.query=function(...o){if(!api.trace.getActiveSpan()?.isRecording())return r.apply(this,o);let a=typeof o[0]=="string"?o[0]:o[0]?.text??o[0]?.name??"query",c=Array.isArray(o[1])?o[1]:o[0]?.values??void 0,l=a.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",p=a.match(/(?:FROM|INTO|UPDATE|JOIN)\s+"?(\w+)"?/i)?.[1]??"",u=p?`${l} ${p}`:`pg ${l}`,m=e.tracer.startSpan(u,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"postgresql","db.operation":l,"db.statement":a.slice(0,2048),...c!==void 0?{"db.params":JSON.stringify(c).slice(0,1024)}:{},...p?{"db.sql.table":p}:{}}},api.context.active()),f=o[o.length-1];if(typeof f=="function"){let y=f,h=o.slice(0,-1).concat([(v,k)=>{v?(m.recordException(v),m.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),m.setAttribute("error.message",v.message)):(m.setAttribute("db.rows_affected",k?.rowCount??0),m.setStatus({code:api.SpanStatusCode.OK})),m.end(),y(v,k);}]);return r.apply(this,h)}return r.apply(this,o).then(y=>(m.setAttribute("db.rows_affected",y?.rowCount??0),m.setStatus({code:api.SpanStatusCode.OK}),m.end(),y),y=>{let h=y instanceof Error?y:new Error(String(y));throw m.recordException(h),m.setStatus({code:api.SpanStatusCode.ERROR,message:h.message}),m.setAttribute("error.message",h.message),m.end(),y})},n.__evalkit_pg=true);}var Ht=x(()=>{});function it(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!(!n||n.__evalkit_mysql2)){for(let r of ["query","execute"]){let o=n[r];typeof o=="function"&&(n[r]=function(...s){if(!api.trace.getActiveSpan()?.isRecording())return o.apply(this,s);let c=typeof s[0]=="string"?s[0]:s[0]?.sql??"query",i=Array.isArray(s[1])?s[1]:void 0,d=c.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",u=c.match(/(?:FROM|INTO|UPDATE|JOIN)\s+`?(\w+)`?/i)?.[1]??"",m=u?`${d} ${u}`:`mysql ${d}`,f=e.tracer.startSpan(m,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mysql","db.operation":d,"db.statement":c.slice(0,2048),...i!==void 0?{"db.params":JSON.stringify(i).slice(0,1024)}:{},...u?{"db.sql.table":u}:{}}},api.context.active()),g=s[s.length-1];if(typeof g=="function"){let h=g,v=s.slice(0,-1).concat([(k,R,T)=>{k?(f.recordException(k),f.setStatus({code:api.SpanStatusCode.ERROR,message:k.message}),f.setAttribute("error.message",k.message)):(f.setAttribute("db.rows_affected",Array.isArray(R)?R.length:R?.affectedRows??0),f.setStatus({code:api.SpanStatusCode.OK})),f.end(),h(k,R,T);}]);return o.apply(this,v)}let y=o.apply(this,s);return y&&typeof y.then=="function"?y.then(([h,v])=>(f.setAttribute("db.rows_affected",Array.isArray(h)?h.length:h?.affectedRows??0),f.setStatus({code:api.SpanStatusCode.OK}),f.end(),[h,v]),h=>{let v=h instanceof Error?h:new Error(String(h));throw f.recordException(v),f.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),f.setAttribute("error.message",v.message),f.end(),h}):(f.end(),y)});}n.__evalkit_mysql2=true;}}var Ut=x(()=>{});function ao(e){if(!e||typeof e!="object")return false;let t=e.constructor?.name??"";return t==="ConverseCommand"||t==="ConverseStreamCommand"}function ct(e,t,n){if(t.send.__evalkit)return;let r=t.send;t.send=async function(...o){let s=o[0];if(!ao(s))return r.apply(this,o);let a=s.input,c=a?.modelId??"unknown",i=c.split(".")[0]??"bedrock",l=a?.system?.map(v=>v.text).join(`
|
|
5
|
+
`)??"",d=a?.messages?.map(v=>`${v.role}: ${v.content.map(k=>k.text??"").join("")}`)??[],p=[l?`system: ${l}`:"",...d].filter(Boolean).join(`
|
|
6
|
+
`),u=a?.inferenceConfig??{},m=api.context.active(),f=e.tracer.startSpan("converse",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":i,"gen_ai.request.model":c,...u.temperature!=null&&{"gen_ai.request.temperature":u.temperature},...u.maxTokens!=null&&{"gen_ai.request.max_tokens":u.maxTokens},...u.topP!=null&&{"gen_ai.request.top_p":u.topP},"evalkit.prompt":p}},m),g=api.trace.setSpan(m,f),y;try{y=await api.context.with(g,()=>r.apply(this,o));}catch(v){let k=v instanceof Error?v:new Error(String(v));throw f.recordException(k),f.setStatus({code:api.SpanStatusCode.ERROR,message:k.message}),f.end(),v}let h=y.output?.message?.content?.map(v=>v.text??"").join("")??"";return f.setAttributes({"gen_ai.response.model":c,"gen_ai.usage.input_tokens":y.usage?.inputTokens??0,"gen_ai.usage.output_tokens":y.usage?.outputTokens??0,"gen_ai.usage.total_tokens":y.usage?.totalTokens??0,"gen_ai.response.finish_reasons":y.stopReason?[y.stopReason]:[],"evalkit.completion":h}),f.setStatus({code:api.SpanStatusCode.OK}),f.end(),y},t.send.__evalkit=true;}var Ft=x(()=>{});function lt(e,t,n){if(t.chat.__evalkit)return;let r=t.chat;t.chat=async function(...o){let s=o[0];if(s?.stream)return r.apply(this,o);let a=s?.chatHistory?.map(u=>`${u.role}: ${u.message??""}`)??[],c=[s?.preamble?`system: ${s.preamble}`:"",...a,`user: ${s?.message??""}`].filter(Boolean).join(`
|
|
7
|
+
`),i=api.context.active(),l=e.tracer.startSpan("chat",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"cohere","gen_ai.request.model":s?.model??"unknown",...s?.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s?.maxTokens!=null&&{"gen_ai.request.max_tokens":s.maxTokens},"evalkit.prompt":c}},i),d=api.trace.setSpan(i,l),p;try{p=await api.context.with(d,()=>r.apply(this,o));}catch(u){let m=u instanceof Error?u:new Error(String(u));throw l.recordException(m),l.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),l.end(),u}return l.setAttributes({"gen_ai.response.model":s?.model??"unknown","gen_ai.response.id":p.generationId??"","gen_ai.usage.input_tokens":p.meta?.tokens?.inputTokens??0,"gen_ai.usage.output_tokens":p.meta?.tokens?.outputTokens??0,"gen_ai.response.finish_reasons":p.finishReason?[p.finishReason]:[],"evalkit.completion":p.text??""}),l.setStatus({code:api.SpanStatusCode.OK}),l.end(),p},t.chat.__evalkit=true;}var Vt=x(()=>{});function pt(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let a=s[0],c="";if(typeof a=="string")c=`user: ${a}`;else {let g=a,y=g?.systemInstruction?.parts?.map(v=>v.text??"").join("")??"",h=g?.contents?.map(v=>`${v.role??"user"}: ${v.parts.map(k=>k.text??"").join("")}`)??[];c=[y?`system: ${y}`:"",...h].filter(Boolean).join(`
|
|
8
|
+
`);}let i=api.context.active(),l=e.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-ai","gen_ai.request.model":o,"evalkit.prompt":c}},i),d=api.trace.setSpan(i,l),p;try{p=await api.context.with(d,()=>r.apply(this,s));}catch(g){let y=g instanceof Error?g:new Error(String(g));throw l.recordException(y),l.setStatus({code:api.SpanStatusCode.ERROR,message:y.message}),l.end(),g}let u=p?.response,m=u?.candidates?.[0],f=m?.content?.parts?.map(g=>g.text??"").join("")??"";return l.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":u?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":u?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":u?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":m?.finishReason?[m.finishReason]:[],"evalkit.completion":f}),l.setStatus({code:api.SpanStatusCode.OK}),l.end(),p},t.generateContent.__evalkit=true;}var Dt=x(()=>{});function Ae(e){return e?.text??""}function uo(e){if(typeof e=="string")return e;if(Array.isArray(e))return e.map(t=>{if(typeof t=="string")return t;let n=t,r=n.role??"user",o=(n.parts??[]).map(Ae).join("");return o?`${r}: ${o}`:""}).filter(Boolean).join(`
|
|
9
|
+
`);if(e&&typeof e=="object"){let t=e;if(t.parts)return (t.parts??[]).map(Ae).join("")}return e!=null?String(e):""}function mo(e){let t=e?.systemInstruction;return t?typeof t=="string"?t:Array.isArray(t?.parts)?t.parts.map(n=>n?.text??"").join(""):typeof t?.text=="string"?t.text:"":""}function Ie(e){let t=mo(e?.config),n=uo(e?.contents);return [t?`system: ${t}`:"",n].filter(Boolean).join(`
|
|
10
|
+
`)}function Ke(e){let t=[];for(let n of e?.candidates??[])for(let r of n.content?.parts??[])r.text&&t.push(r.text);return t.length?t.join(""):e?.text??""}function Me(e,t,n){Jt&&B(Jt,t,he(e));}function dt(e,t,n){if(Jt=e,t.generateContent&&!t.generateContent.__evalkit){let r=t.generateContent;t.generateContent=async function(...o){let s=o[0]??{},a=s.model??"unknown",c=api.context.active(),i=e.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":a,"evalkit.prompt":Ie(s)}},c),l=api.trace.setSpan(c,i),d;try{d=await api.context.with(l,()=>r.apply(this,o));}catch(p){let u=p instanceof Error?p:new Error(String(p));throw i.recordException(u),i.setStatus({code:api.SpanStatusCode.ERROR,message:u.message}),i.end(),p}i.setAttributes({"gen_ai.response.model":a,"gen_ai.usage.input_tokens":d?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":d?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":d?.usageMetadata?.totalTokenCount??0,"evalkit.completion":Ke(d)});try{Me(d,i,i.spanContext().traceId);}catch{}return i.setStatus({code:api.SpanStatusCode.OK}),i.end(),d},t.generateContent.__evalkit=true;}if(t.generateContentStream&&!t.generateContentStream.__evalkit){let r=t.generateContentStream;t.generateContentStream=async function(...o){let s=o[0]??{},a=s.model??"unknown",c=api.context.active(),i=e.tracer.startSpan("generateContentStream",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":a,"gen_ai.streaming":true,"evalkit.prompt":Ie(s)}},c),l=api.trace.setSpan(c,i),d;try{d=await api.context.with(l,()=>r.apply(this,o));}catch(u){let m=u instanceof Error?u:new Error(String(u));throw i.recordException(m),i.setStatus({code:api.SpanStatusCode.ERROR,message:m.message}),i.end(),u}async function*p(){let u=[],m=0,f=0;try{for await(let g of d){try{let y=Ke(g);y&&u.push(y),g?.usageMetadata&&(m=g.usageMetadata.promptTokenCount??m,f=g.usageMetadata.candidatesTokenCount??f),Me(g,i,i.spanContext().traceId);}catch{}yield g;}i.setAttributes({"gen_ai.response.model":a,"gen_ai.usage.input_tokens":m,"gen_ai.usage.output_tokens":f,"evalkit.completion":u.join("")}),i.setStatus({code:api.SpanStatusCode.OK});}catch(g){let y=g instanceof Error?g:new Error(String(g));throw i.recordException(y),i.setStatus({code:api.SpanStatusCode.ERROR,message:y.message}),g}finally{i.end();}}return p()},t.generateContentStream.__evalkit=true;}}var Jt,zt=x(()=>{et();Jt=null;});function Wt(e){if(typeof I>"u")return null;let t=I.cache;if(!t)return null;let n=Object.keys(t).find(r=>{let o=r.split("/node_modules/");return o.length>1&&o[o.length-1].startsWith(e+"/")});return n?t[n]?.exports??null:null}function E(){return typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href)))}var S,Xt=x(()=>{S=new Function("s","return import(s)");});var $e={};ee($e,{langchainCallbackHandler:()=>Tt,langchainHandlerMethods:()=>Be,patchLangChain:()=>Co});function P(e,t=ho){let n;try{n=typeof e=="string"?e:JSON.stringify(e);}catch{n=String(e);}return n==null?"":n.length>t?n.slice(0,t)+"\u2026":n}function Ne(e){let t=e?.id;if(Array.isArray(t)){for(let n of ["openai","anthropic","google","vertexai","cohere","mistral","bedrock","ollama","groq"])if(t.includes(n))return n==="vertexai"?"vertex-ai":n;return t[t.length-1]}}function je(e,t){let n=t?.invocation_params??{};for(let o of ["model","model_name","modelName","model_id","deployment_name"])if(n[o])return String(n[o]);let r=e?.kwargs??{};for(let o of ["model","model_name","modelName","model_id"])if(r[o])return String(r[o]);return "unknown"}function vo(e){try{let n=((Array.isArray(e?.[0])?e[0]:e)??[]).map(r=>{let o=(typeof r?._getType=="function"?r._getType():void 0)??r?.role??r?.type??"message",s=typeof r?.content=="string"?r.content:P(r?.content);return `${o}: ${s}`});return P(n.join(`
|
|
11
|
+
`))}catch{return P(e)}}function xo(e){try{let t=[];for(let n of e?.generations??[])for(let r of n??[])r?.text?t.push(String(r.text)):r?.message?.content&&t.push(typeof r.message.content=="string"?r.message.content:P(r.message.content));return P(t.filter(Boolean).join(`
|
|
12
|
+
`))}catch{return ""}}function _o(e){let t=0,n=0;try{let r=e?.llmOutput?.tokenUsage??e?.llmOutput?.usage??{};if(t=r.promptTokens??r.prompt_tokens??r.input_tokens??0,n=r.completionTokens??r.completion_tokens??r.output_tokens??0,!t&&!n)for(let o of e?.generations??[])for(let s of o??[]){let a=s?.message?.usage_metadata;a&&(t=a.input_tokens??t,n=a.output_tokens??n);}}catch{}return {tin:t||0,tout:n||0}}function Be(e){let t=new Map;function n(o,s,a,c,i){try{let l=s?t.get(s):void 0,d=l?l.ctx:api.context.active(),p=e.tracer.startSpan(c,{kind:a==="llm_call"?api.SpanKind.CLIENT:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":a,"evalkit.framework":"langchain",...i}},d);t.set(o,{span:p,ctx:api.trace.setSpan(d,p)});}catch{}}function r(o,s,a,c){try{let i=t.get(o);if(!i)return;t.delete(o),a&&i.span.setAttributes(a),i.span.setStatus({code:s==="OK"?api.SpanStatusCode.OK:api.SpanStatusCode.ERROR,message:c}),i.span.end();}catch{}}return {handleChainStart(o,s,a,c,i,l,d,p){let u=p??o?.id?.[o.id.length-1]??"chain";n(a,c,"function_call",String(u),i?.length?{"langchain.tags":i.join(",")}:{});},handleChainEnd(o,s){r(s,"OK");},handleChainError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleLLMStart(o,s,a,c,i){let l=je(o,i);n(a,c,"llm_call","llm.generate",{"gen_ai.request.model":l,"gen_ai.system":Ne(o)??"","evalkit.prompt":P((s??[]).join(`
|
|
13
|
+
`))});},handleChatModelStart(o,s,a,c,i){let l=je(o,i);n(a,c,"llm_call","chat.generate",{"gen_ai.request.model":l,"gen_ai.system":Ne(o)??"","evalkit.prompt":vo(s)});},handleLLMEnd(o,s){let{tin:a,tout:c}=_o(o),i=t.get(s);try{i&&B(e,i.span,ve(o));}catch{}r(s,"OK",{"evalkit.completion":xo(o),"gen_ai.usage.input_tokens":a,"gen_ai.usage.output_tokens":c,"gen_ai.usage.total_tokens":a+c});},handleLLMError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleToolStart(o,s,a,c,i,l,d){let p=d??o?.id?.[o.id.length-1]??"tool",u=t.get(c??"");xt(u?.span.spanContext().traceId,String(p)),n(a,c,"tool_call",String(p),{"tool.name":String(p),"tool.arguments":P(s)});},handleToolEnd(o,s){r(s,"OK",{"tool.result":P(o)});},handleToolError(o,s){r(s,"ERROR",void 0,String(o?.message??o));},handleRetrieverStart(o,s,a,c){let i=o?.id?.[o.id.length-1]??"retriever";n(a,c,"db_query",String(i),{"retriever.query":P(s)});},handleRetrieverEnd(o,s){let a=Array.isArray(o)?o.length:0;r(s,"OK",{"retriever.document_count":a});},handleRetrieverError(o,s){r(s,"ERROR",void 0,String(o?.message??o));}}}async function Tt(e){try{let n=(await S("@langchain/core/callbacks/base")).BaseCallbackHandler.fromMethods(Be(e));return n.name="evalkit",n.__evalkit=!0,n}catch{return null}}async function Co(e){let t=await Tt(e);if(!t)return null;try{let r=(await S("@langchain/core/callbacks/manager")).CallbackManager;if(r&&typeof r.configure=="function"&&!r.__evalkitPatched){let o=r.configure.bind(r);r.configure=(...s)=>{let a=o(...s);try{a&&![...a.handlers??[],...a.inheritableHandlers??[]].some(l=>l?.__evalkit)&&typeof a.addHandler=="function"&&a.addHandler(t,!0);}catch{}return a},r.__evalkitPatched=!0;}}catch{}return t}var ho,Yt=x(()=>{tt();et();Xt();ho=4096;});function mt(e,t,n){G(e,t,n);}function ft(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let a=s[0],c=a?.systemInstruction?.parts?.map(h=>h.text??"").join("")??"",i=a?.contents?.map(h=>`${h.role??"user"}: ${h.parts.map(v=>v.text??"").join("")}`)??[],l=[c?`system: ${c}`:"",...i].filter(Boolean).join(`
|
|
14
|
+
`),d=api.context.active(),p=e.tracer.startSpan("generateContent",{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-vertex","gen_ai.request.model":o,"evalkit.prompt":l}},d),u=api.trace.setSpan(d,p),m;try{m=await api.context.with(u,()=>r.apply(this,s));}catch(h){let v=h instanceof Error?h:new Error(String(h));throw p.recordException(v),p.setStatus({code:api.SpanStatusCode.ERROR,message:v.message}),p.end(),h}let f=m?.response,g=f?.candidates?.[0],y=g?.content?.parts?.map(h=>h.text??"").join("")??"";return p.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":f?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":f?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":f?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":g?.finishReason?[g.finishReason]:[],"evalkit.completion":y}),p.setStatus({code:api.SpanStatusCode.OK}),p.end(),m},t.generateContent.__evalkit=true;}var Qt=x(()=>{St();});function He(e,t={},n){function r(o,s,a){let c={...t,...s};o.addHook("onRequest",(i,l,d)=>{let p=i.routerPath??i.routeOptions?.url??i.url??"/",u=typeof c.name=="function"?c.name(i):c.name??`${String(i.method??"GET")} ${String(p)}`,m=i.headers?.traceparent,f=n?n(m):api.context.active(),{traceId:g,end:y,ctx:h}=api.context.with(f,()=>e.startHttpTrace(u,{method:String(i.method??"GET"),url:String(i.url??"/"),headers:i.headers,requestBody:void 0}));i._evalkitCtx=h,i._evalkitTraceId=g,i._evalkitEnd=y,i._evalkitEnded=false,api.context.with(h,d);}),o.addHook("preHandler",(i,l,d)=>{if(i._evalkitCtx&&i.body!==void 0){let p=api.trace.getActiveSpan();if(p?.isRecording())try{p.setAttribute("http.request.body",typeof i.body=="string"?i.body.slice(0,e.options.maxBodyBytes):JSON.stringify(i.body).slice(0,e.options.maxBodyBytes));}catch{}}api.context.with(i._evalkitCtx??api.context.active(),d);}),o.addHook("onSend",(i,l,d,p)=>{try{if(d!=null){let u=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes);i._evalkitRespBody=u;}}catch{}p(null,d);}),o.addHook("onResponse",(i,l,d)=>{if(typeof i._evalkitEnd=="function"&&!i._evalkitEnded){i._evalkitEnded=true;let p=l.statusCode??200;i._evalkitEnd(p>=400?"ERROR":"OK",{statusCode:p,body:i._evalkitRespBody});}d();}),o.addHook("onError",(i,l,d,p)=>{typeof i._evalkitEnd=="function"&&!i._evalkitEnded&&(i._evalkitEnded=true,i._evalkitEnd("ERROR",{statusCode:l.statusCode??500})),p();}),a();}return r[Symbol.for("skip-override")]=true,r}var Ue=x(()=>{});function Ve(e,t){return (n,r,o)=>{let s=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method)} ${String(n.route?.path??n.path??n.url)}`,a=K(n.headers?.traceparent),{end:c,ctx:i,traceId:l}=api.context.with(a,()=>e.startHttpTrace(s,{method:String(n.method??"GET"),url:String(n.originalUrl??n.url??"/"),headers:n.headers,requestBody:n.body}));n._evalkitCtx=i,n._evalkitTraceId=l;let d=api.trace.getSpan(i)?.spanContext().spanId??"0000000000000000";r.setHeader?.("x-trace-id",l),r.setHeader?.("traceparent",`00-${l}-${d}-01`);let p=e.options.maxBodyBytes,u=[],m=0,f=h=>{if(!(!h||m>=p))try{let v=Buffer.isBuffer(h)?h:typeof h=="string"?Buffer.from(h):null;v?.length&&(u.push(v),m+=v.length);}catch{}},g=r.write.bind(r),y=r.end;r.write=function(h,...v){return f(h),g(h,...v)},r.end=function(...h){f(h[0]);let v=r.statusCode??200,k;if(u.length)try{k=Buffer.concat(u).subarray(0,p).toString("utf-8");}catch{}return c(v>=400?"ERROR":"OK",{statusCode:v,headers:r.getHeaders?r.getHeaders():void 0,body:k}),y.apply(r,h)},api.context.with(i,()=>o());}}var De=x(()=>{W();});function ze(e,t){return async(n,r)=>{let o=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method??"GET")} ${String(n.path??"/")}`,s=K(n.request?.headers?.traceparent),{end:a,ctx:c}=api.context.with(s,()=>e.startHttpTrace(o,{method:String(n.method??"GET"),url:String(n.href??n.url??"/"),headers:n.request?.headers,requestBody:n.request?.body}));n._evalkitCtx=c;try{await api.context.with(c,r);let i=n.status??200,l;try{let d=n.body;d!=null&&(l=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes));}catch{}a(i>=400?"ERROR":"OK",{statusCode:i,body:l});}catch(i){throw a("ERROR",{statusCode:n.status??500}),i}}}var We=x(()=>{W();});function Ye(e,t){return async(n,r)=>{let o=n.req,s=o.url??"/",a=s;try{a=new URL(s).pathname;}catch{}let c=typeof t?.name=="function"?t.name(n):t?.name??`${String(o.method??"GET")} ${a}`,i=K(o.header("traceparent")),{end:l,ctx:d}=api.context.with(i,()=>e.startHttpTrace(c,{method:String(o.method??"GET"),url:s,headers:Object.fromEntries(o.raw?.headers??[])}));try{await api.context.with(d,r);let p=n.res?.status??200,u;try{if(n.res&&typeof n.res.clone=="function"){let m=await n.res.clone().text();m&&(u=m.slice(0,e.options.maxBodyBytes));}}catch{}l(p>=400?"ERROR":"OK",{statusCode:p,body:u});}catch(p){throw l("ERROR",{statusCode:500}),p}}}var Qe=x(()=>{W();});function Ze(e,t){return {name:"@evalkit/hapi",register(n){let r=new WeakMap;n.ext("onRequest",(o,s)=>{let a=typeof t?.name=="function"?t.name(o):t?.name??`${String(o.method?.toUpperCase()??"GET")} ${String(o.path??"/")}`,c=K(o.headers?.traceparent),{end:i,ctx:l}=api.context.with(c,()=>e.startHttpTrace(a,{method:String(o.method?.toUpperCase()??"GET"),url:String(o.url?.href??o.path??"/"),headers:o.headers}));return r.set(o,{end:i,ctx:l}),s.continue}),n.ext("onPreResponse",(o,s)=>{let a=r.get(o);if(a){let c=o.response?.output?.statusCode??o.response?.statusCode??200,i;try{let l=o.response?.source??o.response?.result;l!=null&&(i=(typeof l=="string"?l:JSON.stringify(l)).slice(0,e.options.maxBodyBytes));}catch{}a.end(c>=400?"ERROR":"OK",{statusCode:c,body:i}),r.delete(o);}return s.continue});}}}var tn=x(()=>{W();});exports.EvalKitInterceptor=void 0;var Zt=x(()=>{exports.EvalKitInterceptor=class{constructor(t){this.client=t;}intercept(t,n){let r=t.switchToHttp?.();if(!r)return n.handle();let o=r.getRequest(),s=r.getResponse(),a=`${String(o.method??"GET")} ${String(o.route?.path??o.path??o.url??"/")}`,{ctx:c,end:i}=this.client.startHttpTrace(a,{method:String(o.method??"GET"),url:String(o.originalUrl??o.url??"/"),headers:o.headers,requestBody:o.body}),l=this.client.options.maxBodyBytes,d=[],p=0,u=f=>{if(!(!f||p>=l))try{let g=Buffer.isBuffer(f)?f:typeof f=="string"?Buffer.from(f):null;g?.length&&(d.push(g),p+=g.length);}catch{}};if(s&&typeof s.write=="function"){let f=s.write.bind(s);s.write=function(g,...y){return u(g),f(g,...y)};}if(s&&typeof s.end=="function"){let f=s.end.bind(s);s.end=function(g,...y){return u(g),f(g,...y)};}let m=api.context.with(c,()=>n.handle());return {subscribe(f){return m.subscribe({next:g=>f.next?.(g),error:g=>{i("ERROR"),f.error?.(g);},complete:()=>{let g=s?.statusCode??200,y;if(d.length)try{y=Buffer.concat(d).subarray(0,l).toString("utf-8");}catch{}i(g>=400?"ERROR":"OK",{statusCode:g,body:y}),f.complete?.();}})},pipe(...f){return m.pipe(...f)}}}};});function Ao(e,t){let n=globalThis.Reflect;if(!n||typeof n.defineMetadata!="function")return;let r=typeof n.getOwnMetadataKeys=="function"?n.getOwnMetadataKeys:n.getMetadataKeys,o=typeof n.getOwnMetadata=="function"?n.getOwnMetadata:n.getMetadata;if(typeof r!="function"||typeof o!="function")return;let s=[];try{s=r.call(n,e)||[];}catch{return}for(let a of s)try{n.defineMetadata(a,o.call(n,a,e),t);}catch{}}function en(e,t,n){let r=n?.include??To,o=n?.captureIO??true,s=new Set,a=0,c=[...t.getProviders(),...t.getControllers()];for(let i of c){let l=i?.instance;if(!l||typeof l!="object")continue;let d=l.constructor?.name??"";if(!r.test(d))continue;let p=Object.getPrototypeOf(l);if(!(!p||p===Object.prototype||s.has(p))){s.add(p);for(let u of Object.getOwnPropertyNames(p)){if(Oo.has(u))continue;let m=Object.getOwnPropertyDescriptor(p,u);if(!m||typeof m.value!="function"||m.get||m.set||m.value.__evalkitTraced)continue;let f=m.value,g=e.traceFunction(`${d}.${u}`,f,void 0,o);Ao(f,g);try{Object.defineProperty(g,"name",{value:u,configurable:!0});}catch{}try{Object.defineProperty(g,"length",{value:f.length,configurable:!0});}catch{}g.__evalkitTraced=true,Object.defineProperty(p,u,{...m,value:g}),a++;}}}return a}var Oo,To,nn=x(()=>{Oo=new Set(["constructor","onModuleInit","onModuleDestroy","onApplicationBootstrap","onApplicationShutdown","beforeApplicationShutdown","configure","validate","authenticate","serializeUser","deserializeUser","canActivate","intercept","transform","catch","use"]),To=/(Service|Controller|Gateway|Resolver|Repository|UseCase|Handler)$/;});function te(e){return Io.some(t=>t.test(e))}function Ko(e,t,n){let r="",o="GET";if(typeof e=="string")r=e,o=(t?.method??"GET").toUpperCase();else if(e instanceof URL)r=e.href,o=(t?.method??"GET").toUpperCase();else {let a=e.hostname??e.host??"localhost",c=e.port?`:${e.port}`:"",i=e.path??"/";r=`${n}://${a}${c}${i}`,o=(e.method??t?.method??"GET").toUpperCase();}let s=r;try{s=new URL(r.startsWith("http")?r:`${n}://localhost${r}`).pathname;}catch{}return {url:r,method:o,pathname:s}}function sn(e){let t,n;try{let s=typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href)));t=s("http"),n=s("https");}catch{return}let r=[{mod:t,scheme:"http"},{mod:n,scheme:"https"}];for(let{mod:s,scheme:a}of r){let i=function(l,d,p){let u=typeof d=="function"?void 0:d,{url:m,method:f,pathname:g}=Ko(l,u,a);if(te(m)||!api.trace.getActiveSpan()?.isRecording())return c.call(s,l,d,p);let h={...typeof l=="object"&&!(l instanceof URL)?l.headers??{}:{},...u?.headers??{}},v=h["x-evalkit-span-id"];if(v){typeof l=="object"&&!(l instanceof URL)&&l.headers&&delete l.headers["x-evalkit-span-id"],u?.headers&&delete u.headers["x-evalkit-span-id"];let b=X.get(String(v));if(b){let _=O({...h});delete _["x-evalkit-span-id"],Object.keys(_).length&&b.setAttributes({"http.request.headers":JSON.stringify(_)});}return c.call(s,l,d,p)}let k=O(h),R=e.tracer.startSpan(`${f} ${g}`,{kind:api.SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":f,"http.url":m,...Object.keys(k).length?{"http.request.headers":JSON.stringify(k)}:{}}},api.context.active()),T=c.call(s,l,d,p),w=R.spanContext();return T.setHeader("traceparent",`00-${w.traceId}-${w.spanId}-01`),T.on("response",b=>{let _=b.statusCode??0;R.setAttributes({"http.status_code":_,...b.headers?{"http.response.headers":JSON.stringify(O(b.headers))}:{}}),R.setStatus({code:_>=400?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),R.end();}),T.on("error",b=>{R.setAttributes({"http.status_code":0,"error.message":b.message}),R.recordException(b instanceof Error?b:new Error(String(b))),R.setStatus({code:api.SpanStatusCode.ERROR,message:b.message}),R.end();}),T};let c=s.request;c.__evalkit||(i.__evalkit=true,Object.defineProperty(s,"request",{value:i,writable:true,configurable:true}));}}function an(e){let t;try{t=(typeof I<"u"?I:module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href))))("http");}catch{return}if(t.Server.prototype.emit.__evalkit_server)return;let n=t.Server.prototype.emit;function r(o,...s){if(o!=="request")return n.call(this,o,...s);let a=s[0],c=s[1],i=a.url??"/";if(te(i))return n.call(this,o,...s);if(api.trace.getActiveSpan()?.isRecording())return n.call(this,o,...s);let l=(a.method??"GET").toUpperCase(),d=i;try{d=new URL(i,"http://localhost").pathname;}catch{}let p=a.headers.traceparent,u=p?Mo(Array.isArray(p)?p[0]:p):api.context.active(),m=e.tracer.startSpan(`${l} ${d}`,{kind:api.SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":l,"http.url":i,"http.request.headers":JSON.stringify(O(a.headers))}},u),f=api.trace.setSpan(u,m),g=m.spanContext();c.setHeader("x-trace-id",g.traceId),c.setHeader("traceparent",`00-${g.traceId}-${g.spanId}-01`);let y=e.options.maxBodyBytes;if(!String(a.headers["content-type"]??"").toLowerCase().includes("multipart/form-data")){let _=[],A=0;a.on("data",q=>{try{if(q&&A<y){let ht=Buffer.isBuffer(q)?q:typeof q=="string"?Buffer.from(q):null;ht&&ht.length&&(_.push(ht),A+=ht.length);}}catch{}}),a.on("end",()=>{if(_.length)try{let q=Buffer.concat(_).subarray(0,y).toString("utf-8");q&&m.setAttribute("http.request.body",q);}catch{}});}let k=[],R=0,T=_=>{try{if(_&&typeof _!="function"&&R<y){let A=Buffer.isBuffer(_)?_:typeof _=="string"?Buffer.from(_):null;A&&A.length&&(k.push(A),R+=A.length);}}catch{}},w=c.write.bind(c),b=c.end.bind(c);return c.write=function(_,...A){return T(_),w(_,...A)},c.end=function(_,...A){return T(_),b(_,...A)},c.on("finish",()=>{m.setAttribute("http.status_code",c.statusCode);try{let _=c.getHeaders();_&&Object.keys(_).length&&m.setAttribute("http.response.headers",JSON.stringify(O(_)));}catch{}if(k.length)try{let _=Buffer.concat(k).subarray(0,y).toString("utf-8");_&&m.setAttribute("http.response.body",_);}catch{}m.setStatus({code:c.statusCode>=400?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),m.end();}),c.on("error",_=>{m.setAttribute("error.message",_.message),m.recordException(_ instanceof Error?_:new Error(String(_))),m.setStatus({code:api.SpanStatusCode.ERROR,message:_.message}),m.end();}),api.context.with(f,()=>n.call(this,o,...s))}r.__evalkit_server=true,t.Server.prototype.emit=r;}function Mo(e){let t=e.split("-");if(t.length<4)return api.context.active();let[,n,r,o]=t;if(!n||!r)return api.context.active();try{let s={traceId:n,spanId:r,isRemote:!0,traceFlags:parseInt(o??"01",16)};return api.trace.setSpanContext(api.context.active(),s)}catch{return api.context.active()}}function cn(){if(typeof globalThis.fetch!="function"||globalThis.fetch.__evalkit)return;let e=globalThis.fetch.bind(globalThis);globalThis.fetch=async function(n,r){let o=typeof n=="string"?n:n instanceof URL?n.href:n.url;if(te(o))return e(n,r);let s=api.trace.getActiveSpan();if(!s?.isRecording())return e(n,r);let a=(r?.method??"GET").toUpperCase(),c=o;try{c=new URL(o).pathname;}catch{}let i={};r?.headers&&new Headers(r.headers).forEach((g,y)=>{i[y]=g;});let l=O(i),d=s.spanContext(),p=`00-${d.traceId}-${d.spanId}-01`,u=new Headers(r?.headers);u.set("traceparent",p);let m={...r,headers:u};Object.keys(l).length&&s.addEvent("http.fetch.request",{"http.method":a,"http.url":o,"http.request.headers":JSON.stringify(l)});try{let f=await e(n,m),g={};return f.headers.forEach((y,h)=>{g[h]=y;}),s.addEvent("http.fetch.response",{"http.url":o,"http.status_code":f.status,"http.response.headers":JSON.stringify(O(g))}),f}catch(f){throw s.addEvent("http.fetch.error",{"http.url":o,"error.message":f?.message??String(f),"error.stack":f?.stack??""}),f}},globalThis.fetch.__evalkit=true;}var Io,ln=x(()=>{$t();Gt();Io=[/\/v1\/ingest/,/\/health(z)?$/,/169\.254\./,/metadata\.google/,/storage\.googleapis/];});function un(e){if(console.__evalkit)return;let t=console.log.bind(console),n=console.warn.bind(console),r=console.error.bind(console),o=a=>a.map(c=>{if(typeof c=="string")return c;if(c instanceof Error)return `${c.message}
|
|
15
|
+
${c.stack??""}`;try{return JSON.stringify(c)}catch{return String(c)}}).join(" ").slice(0,2e3),s=(a,c)=>{let i=api.trace.getActiveSpan();if(i?.isRecording())i.addEvent(`log.${a}`,{"log.level":a,"log.message":c});else {let l=e.tracer.startSpan(`log.${a}`,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":a,"log.message":c}},api.context.active());l.setStatus({code:a==="ERROR"?api.SpanStatusCode.ERROR:api.SpanStatusCode.OK}),l.end();}};console.log=(...a)=>{t(...a),s("INFO",o(a));},console.warn=(...a)=>{n(...a),s("WARN",o(a));},console.error=(...a)=>{r(...a),s("ERROR",o(a));},console.__evalkit=true;}var dn=x(()=>{});function fn(e,t,n){let r=api.trace.getActiveSpan();if(r?.isRecording())r.addEvent(t,{"error.message":n.message,"error.stack":n.stack??"","log.level":"ERROR","log.message":`${t}: ${n.message}`}),r.recordException(n),r.setStatus({code:api.SpanStatusCode.ERROR,message:n.message});else {let o=e.tracer.startSpan(t,{kind:api.SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":"ERROR","log.message":`${t}: ${n.message}`,"error.message":n.message,"error.stack":n.stack??""}},api.context.active());o.recordException(n),o.setStatus({code:api.SpanStatusCode.ERROR,message:n.message}),o.end();}}function gn(e){typeof process>"u"||(process.on("unhandledRejection",t=>{let n=t instanceof Error?t:new Error(String(t));fn(e,"error.unhandled_rejection",n);}),process.on("uncaughtException",t=>{fn(e,"error.uncaught_exception",t instanceof Error?t:new Error(String(t)));}));}var yn=x(()=>{});function Go(e){let t=Wt("mongoose");t&&bt(e,t);}function Lo(e){let t=Wt("axios");t&&st(e,t.default??t);}async function Ho(e){try{let n=E()("pg"),r=n.Client??n.default?.Client;if(r){at(e,r);return}}catch{}try{let t=await S("pg"),n=t.Client??t.default?.Client;n&&at(e,n);}catch{}}async function Uo(e){try{let t=E(),n=t("mysql2"),r=n.Connection??n.default?.Connection??t("mysql2/lib/connection");if(r){it(e,r);return}}catch{}try{let t=await S("mysql2"),n=t.Connection??t.default?.Connection;n&&it(e,n);}catch{}}async function Fo(e){try{let n=E()("ioredis"),r=n.default??n.Redis??n;if(r?.prototype){ot(e,r);return}}catch{}try{let t=await S("ioredis"),n=t.default??t.Redis??t;n?.prototype&&ot(e,n);}catch{}}async function Vo(e){try{let n=E()("openai"),o=(n.default??n.OpenAI??n)?.Chat?.Completions?.prototype;if(o){$(e,o);return}}catch{}try{let t=await S("openai"),r=(t.default??t.OpenAI??t)?.Chat?.Completions?.prototype;r&&$(e,r);}catch{}}async function Do(e){try{let n=E()("@anthropic-ai/sdk"),o=(n.default??n.Anthropic??n)?.Messages?.prototype;if(o){G(e,o);return}}catch{}try{let t=await S("@anthropic-ai/sdk"),r=(t.default??t.Anthropic??t)?.Messages?.prototype;r&&G(e,r);}catch{}}async function Jo(e){try{let n=E()("@aws-sdk/client-bedrock-runtime"),o=(n.BedrockRuntimeClient??n.default?.BedrockRuntimeClient)?.prototype;if(o){ct(e,o);return}}catch{}try{let t=await S("@aws-sdk/client-bedrock-runtime"),r=(t.BedrockRuntimeClient??t.default?.BedrockRuntimeClient)?.prototype;r&&ct(e,r);}catch{}}async function zo(e){try{let n=E()("@anthropic-ai/sdk"),o=(n.AnthropicVertex??n.default?.AnthropicVertex)?.Messages?.prototype;if(o){mt(e,o);return}}catch{}try{let t=await S("@anthropic-ai/sdk"),r=(t.AnthropicVertex??t.default?.AnthropicVertex)?.Messages?.prototype;r&&mt(e,r);}catch{}}async function Wo(e){try{let n=E()("@google-cloud/vertexai"),o=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o){ft(e,o);return}}catch{}try{let t=await S("@google-cloud/vertexai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&ft(e,r);}catch{}}async function Xo(e){try{let n=E()("cohere-ai"),o=(n.CohereClient??n.default?.CohereClient??n.default)?.prototype;if(o){lt(e,o);return}}catch{}try{let t=await S("cohere-ai"),r=(t.CohereClient??t.default?.CohereClient??t.default)?.prototype;r&<(e,r);}catch{}}async function Yo(e){try{let n=E()("@google/generative-ai"),o=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o){pt(e,o);return}}catch{}try{let t=await S("@google/generative-ai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&pt(e,r);}catch{}}async function Qo(e){try{let n=E()("@google/genai"),r=n.Models??n.default?.Models;if(r?.prototype){dt(e,r.prototype);return}}catch{}try{let t=await S("@google/genai"),n=t.Models??t.default?.Models;n?.prototype&&dt(e,n.prototype);}catch{}}async function Zo(e){try{let n=E()("groq-sdk"),o=(n.default??n.Groq??n)?.Chat?.Completions?.prototype;if(o){$(e,o,void 0,"groq");return}}catch{}try{let t=await S("groq-sdk"),r=(t.default??t.Groq??t)?.Chat?.Completions?.prototype;r&&$(e,r,void 0,"groq");}catch{}}async function ts(e){try{let{patchLangChain:t}=await Promise.resolve().then(()=>(Yt(),$e));await t(e);}catch{}}function hn(e){try{an(e);}catch{}try{sn(e);}catch{}cn(),un(e),gn(e),Go(e),Lo(e),Promise.all([Vo(e),Do(e),Jo(e),zo(e),Wo(e),Xo(e),Yo(e),Qo(e),Zo(e),ts(e),Ho(e),Uo(e),Fo(e)]).catch(()=>{});}var vn=x(()=>{Xt();qt();St();Ft();Qt();Vt();Dt();zt();jt();Ht();Ut();Bt();Lt();ln();dn();yn();});var ne={};ee(ne,{EvalKitClient:()=>exports.EvalKitClient,EvalKitInterceptor:()=>exports.EvalKitInterceptor,TraceMethod:()=>Dn,Traced:()=>Jn,createNestjsInterceptor:()=>$n,currentTraceId:()=>Yn,default:()=>exports.default,enableNestjsAutoTrace:()=>Wn,evaluate:()=>U,expressMiddleware:()=>Pn,fastifyPlugin:()=>qn,flush:()=>Ln,generateScenarios:()=>Qn,hapiPlugin:()=>Bn,honoMiddleware:()=>jn,init:()=>xn,koaMiddleware:()=>Nn,langchainHandler:()=>On,patchAnthropicClient:()=>Cn,patchAnthropicVertexClient:()=>Rn,patchAxiosClient:()=>In,patchBedrockClient:()=>kn,patchCohereClient:()=>bn,patchGoogleAIModel:()=>En,patchGoogleGenAIModels:()=>wn,patchMongooseClient:()=>Tn,patchMysql2Client:()=>Mn,patchOpenAIClient:()=>_n,patchPgClient:()=>Kn,patchRedisClient:()=>An,patchVertexGenerativeModel:()=>Sn,simulateUser:()=>Zn,startHttpTrace:()=>Hn,startSpan:()=>Un,startTrace:()=>Gn,traceFunction:()=>Fn,traceObject:()=>zn,traceTool:()=>Vn,withTrace:()=>Xn});function C(){if(!H)throw new Error("[evalkit] call evalkit.init() before using the SDK");return H}function xn(e){return H&&H.destroy(),H=new exports.EvalKitClient(e),hn(H),H}function _n(e,t){$(C(),e.chat.completions,t);}function Cn(e,t){G(C(),e.messages,t);}function kn(e){ct(C(),e);}function Rn(e){mt(C(),e.messages);}function Sn(e){ft(C(),e);}function bn(e){lt(C(),e);}function En(e){pt(C(),e);}function wn(e){dt(C(),e);}function On(){return Tt(C())}function Tn(e){bt(C(),e);}function An(e){ot(C(),e);}function In(e){st(C(),e);}function Kn(e){at(C(),e);}function Mn(e){it(C(),e);}function Pn(e){return Ve(C(),e)}function qn(e){return He(C(),e,rs)}function Nn(e){return ze(C(),e)}function jn(e){return Ye(C(),e)}function Bn(e){return Ze(C(),e)}function $n(){return new exports.EvalKitInterceptor(C())}function Gn(e,t){return C().startTrace(e,t)}async function Ln(){return C().flush()}function Hn(e,t,n){return C().startHttpTrace(e,t,n)}function Un(e,t,n){return C().startSpan(e,t,n)}function Fn(e,t,n,r=true){return C().traceFunction(e,t,n,r)}function Vn(e,t,n,r=true){return C().traceTool(e,t,n,r)}function Dn(e){return (t,n,r)=>{let o=r.value,s=e??`${t.constructor?.name??"unknown"}.${String(n)}`,a;return r.value=function(...c){return a||(a=C().traceFunction(s,o)),a.apply(this,c)},r}}function Jn(e){return t=>{let n=t.prototype,r=e?.prefix??t.name;for(let o of Object.getOwnPropertyNames(n)){if(o==="constructor")continue;let s=Object.getOwnPropertyDescriptor(n,o);if(!s||typeof s.value!="function")continue;let a=s.value,c=`${r}.${o}`,i=null;Object.defineProperty(n,o,{...s,value:function(...l){return i||(i=C().traceFunction(c,a)),i.apply(this,l)}});}return t}}function zn(e,t){let n=C(),r=t?.prefix,o=t?.captureIO??true;for(let s of Object.keys(e)){let a=e[s];if(typeof a=="function"&&!a.__evalkitTraced){let c=r?`${r}.${s}`:s,i=n.traceFunction(c,a,void 0,o);i.__evalkitTraced=true,e[s]=i;}}return e}async function Wn(e,t){let n,r=e;if(typeof r.getProviders=="function"&&typeof r.getControllers=="function")n=e;else if(typeof r.get=="function")try{let s=await import('@nestjs/core');s.DiscoveryService&&(n=r.get(s.DiscoveryService));}catch(o){console.warn("[evalkit] enableNestjsAutoTrace: could not resolve DiscoveryService:",o?.message);}return n?en(C(),n,t):0}function Xn(e,t){return api.context.with(e,t)}function Yn(){let e=api.trace.getActiveSpan();return e?.isRecording()?e.spanContext().traceId:void 0}function Qn(e){return se(C(),e)}function Zn(e){return ae(C(),e)}function rs(e){return K(e)}var H;exports.default=void 0;var re=x(()=>{vt();ie();Mt();W();qt();St();jt();Bt();Lt();Ht();Ut();Ft();Vt();Dt();zt();Yt();Qt();Ue();De();We();Qe();tn();Zt();nn();vn();Mt();Zt();vt();H=null;exports.default={init:xn,evaluate:U,generateScenarios:Qn,simulateUser:Zn,patchOpenAIClient:_n,patchAnthropicClient:Cn,patchBedrockClient:kn,patchAnthropicVertexClient:Rn,patchVertexGenerativeModel:Sn,patchCohereClient:bn,patchGoogleAIModel:En,patchGoogleGenAIModels:wn,langchainHandler:On,patchMongooseClient:Tn,patchRedisClient:An,patchAxiosClient:In,patchPgClient:Kn,patchMysql2Client:Mn,expressMiddleware:Pn,fastifyPlugin:qn,koaMiddleware:Nn,honoMiddleware:jn,hapiPlugin:Bn,createNestjsInterceptor:$n,startTrace:Gn,startHttpTrace:Hn,startSpan:Un,traceFunction:Fn,traceTool:Vn,traceObject:zn,TraceMethod:Dn,Traced:Jn,enableNestjsAutoTrace:Wn,withTrace:Xn,currentTraceId:Yn,flush:Ln};});re();exports.TraceMethod=Dn;exports.Traced=Jn;exports.createNestjsInterceptor=$n;exports.currentTraceId=Yn;exports.enableNestjsAutoTrace=Wn;exports.evaluate=U;exports.expressMiddleware=Pn;exports.fastifyPlugin=qn;exports.flush=Ln;exports.generateScenarios=Qn;exports.hapiPlugin=Bn;exports.honoMiddleware=jn;exports.init=xn;exports.koaMiddleware=Nn;exports.langchainHandler=On;exports.patchAnthropicClient=Cn;exports.patchAnthropicVertexClient=Rn;exports.patchAxiosClient=In;exports.patchBedrockClient=kn;exports.patchCohereClient=bn;exports.patchGoogleAIModel=En;exports.patchGoogleGenAIModels=wn;exports.patchMongooseClient=Tn;exports.patchMysql2Client=Mn;exports.patchOpenAIClient=_n;exports.patchPgClient=Kn;exports.patchRedisClient=An;exports.patchVertexGenerativeModel=Sn;exports.simulateUser=Zn;exports.startHttpTrace=Hn;exports.startSpan=Un;exports.startTrace=Gn;exports.traceFunction=Fn;exports.traceObject=zn;exports.traceTool=Vn;exports.withTrace=Xn;
|
package/dist/index.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {b,g,l,p,c,r,t,d,k,h,i,e,f,a,n,o,m,j as j$1}from'./chunk-S5ISUJPR.mjs';import {context,trace,SpanKind,SpanStatusCode,ROOT_CONTEXT}from'@opentelemetry/api';import {randomBytes}from'crypto';import {NodeTracerProvider}from'@opentelemetry/sdk-trace-node';import {BatchSpanProcessor}from'@opentelemetry/sdk-trace-base';import {Resource}from'@opentelemetry/resources';import {ATTR_SERVICE_NAME}from'@opentelemetry/semantic-conventions';import {createRequire}from'module';function
|
|
2
|
-
`),k,t.metrics);});}catch(k){l="ERROR",m=k?.message??String(k);}finally{d(l);}let v={scenarioId:a,name:o,status:l,turns:y,scores:h};return m&&(v.error=m),{result:v,traceId:p}}async function Yt(n,t){let e$1="sim_"+dt(8),r="run_"+dt(8),o=t.maxTurns??12,a=[],i=[];for(let c of t.scenarios){let{result:s,traceId:p}=await Xn(n,t,c,{simulationId:e$1,runId:r,maxTurns:o});a.push(s),i.push(p);}await n.flush();for(let c of i)e.delete(c),f.delete(c);return {simulationId:e$1,runId:r,results:a}}var Zt=b(()=>{g();ut();});var K,te=b(()=>{(function(n){n[n.SUCCESS=0]="SUCCESS",n[n.FAILED=1]="FAILED";})(K||(K={}));});var ee=b(()=>{te();});function kt(n){return n[0]*1e3+n[1]/1e6}function Qn(n){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[n]??"INTERNAL"}function Yn(n){return n===1?"OK":n===2?"ERROR":"UNSET"}function Zn(n){let t={};for(let[e,r]of Object.entries(n))e.startsWith("evalkit.")||e==="gen_ai.system"||r!=null&&(t[e]=r);return t}function re(n){return new Promise(t=>setTimeout(t,n))}var ne,mt,oe=b(()=>{ee();g();ne=3,mt=class{constructor(t){this.authFailures=0;this.disabled=false;this.url=`${t.baseUrl.replace(/\/$/,"")}/v1/ingest`,this.subscriptionKey=t.subscriptionKey,this.debug=t.debug??false;}export(t,e){if(this.disabled){e({code:K.FAILED});return}let r=t.map(a=>this.toEnvelope(a)),o={events:r};this.debug&&console.log(`[evalkit] sending ${r.length} span(s) \u2192 ${this.url}`),this.fetchWithRetry(this.url,{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":this.subscriptionKey},body:JSON.stringify(o)}).then(async a=>{if(!a.ok){let i=await a.text().catch(()=>"(no body)");a.status===401||a.status===403?(this.authFailures++,this.authFailures>=ne?(this.disabled=true,console.error(`[evalkit] export rejected ${a.status}: ${i} \u2014 disabling tracing after ${this.authFailures} consecutive auth failures; check your EvalKit subscription key.`)):this.debug&&console.warn(`[evalkit] export rejected ${a.status} (auth failure ${this.authFailures}/${ne})`)):console.error(`[evalkit] export failed ${a.status}: ${i}`),e({code:K.FAILED});return}if(this.authFailures=0,this.debug){let i=await a.json().catch(()=>({}));console.log(`[evalkit] exported ${r.length} span(s) \u2014 status: ${i.status}`);}e({code:K.SUCCESS});}).catch(a=>{console.error("[evalkit] export network error:",a),e({code:K.FAILED});});}async fetchWithRetry(t,e,r=3){let o=[200,600,1800],a;for(let i=0;i<=r;i++)try{let c=await fetch(t,e);if(c.ok||c.status>=400&&c.status<500)return c;if(i<r)this.debug&&console.warn(`[evalkit] HTTP ${c.status}, retry ${i+1}/${r}`),await re(o[i]??1800);else return c}catch(c){a=c,i<r&&(this.debug&&console.warn(`[evalkit] network error, retry ${i+1}/${r}:`,c),await re(o[i]??1800));}throw a}shutdown(){return Promise.resolve()}toEnvelope(t){let e$1=t.spanContext(),r=t.attributes,o=kt(t.startTime),a=kt(t.endTime),i=t.events.map(p=>({name:p.name,timestamp:new Date(kt(p.time)).toISOString(),attributes:p.attributes})),c={traceId:e$1.traceId,spanId:e$1.spanId,parentSpanId:t.parentSpanId,spanKind:Qn(t.kind),spanType:r["evalkit.span_type"]??"log",status:Yn(t.status.code),statusMessage:t.status.message,serviceName:t.resource.attributes["service.name"],operation:t.name,model:r["gen_ai.response.model"]??r["gen_ai.request.model"],provider:r["gen_ai.system"],prompt:r["evalkit.prompt"],completion:r["evalkit.completion"],tokensIn:Math.round(r["gen_ai.usage.input_tokens"]||0)||void 0,tokensOut:Math.round(r["gen_ai.usage.output_tokens"]||0)||void 0,latencyMs:Math.round(a-o),startTime:new Date(o).toISOString(),endTime:new Date(a).toISOString(),events:i.length>0?i:void 0,attributes:Zn(r),createdAt:new Date(o).toISOString(),environment:r["evalkit.environment"],appVersion:r["evalkit.app_version"],userId:r["evalkit.user_id"],sessionId:r["evalkit.session_id"],deviceId:r["evalkit.device_id"],sdkVersion:r["evalkit.sdk_version"]},s=e.get(e$1.traceId);return s&&(c.isSimulation=true,c.simulationId=s.simulationId,c.scenarioId=s.scenarioId,c.runId=s.runId),c}};});function L(n,t=sr){let e;try{e=JSON.stringify(n);}catch{}if(e===void 0)try{e=String(n);}catch{e="<unserializable>";}return e.length>t?e.slice(0,t)+"\u2026":e}var or,sr,U,St=b(()=>{oe();or="0.1.27",sr=4096;U=class{constructor(t){this.options={serviceName:"unknown",debug:false,maxExportBatchSize:512,scheduledDelayMillis:5e3,maxBodyBytes:10*1024*1024,baseUrl:"https://api.syntropylabs.ai",apiUrl:"https://api.syntropylabs.ai",environment:"",appVersion:"",...t};let e=new mt({baseUrl:this.options.baseUrl,subscriptionKey:this.options.subscriptionKey,debug:this.options.debug});this.provider=new NodeTracerProvider({resource:new Resource({[ATTR_SERVICE_NAME]:this.options.serviceName}),spanProcessors:[new BatchSpanProcessor(e,{maxExportBatchSize:this.options.maxExportBatchSize,scheduledDelayMillis:this.options.scheduledDelayMillis})]}),this.provider.register(),this.tracer=trace.getTracer("evalkit","0.1.0");}metaAttributes(){let t={"evalkit.sdk_version":or};return this.options.environment&&(t["evalkit.environment"]=this.options.environment),this.options.appVersion&&(t["evalkit.app_version"]=this.options.appVersion),this.options.deviceId&&(t["evalkit.device_id"]=this.options.deviceId),t}startTrace(t,e){let r=this.tracer.startSpan(t,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"log",...this.metaAttributes(),...e}},context.active()),o=trace.setSpan(context.active(),r);return {traceId:r.spanContext().traceId,ctx:o,end:(i="OK")=>{r.setStatus({code:i==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),r.end();}}}startHttpTrace(t,e,r){let o=this.tracer.startSpan(t,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":e.method,"http.url":e.url,...e.headers?{"http.request.headers":JSON.stringify(e.headers)}:{},...e.requestBody!==void 0?{"http.request.body":JSON.stringify(e.requestBody)}:{},...this.metaAttributes(),...r}},context.active()),a=trace.setSpan(context.active(),o);return {traceId:o.spanContext().traceId,ctx:a,end:(c="OK",s)=>{s?.statusCode!==void 0&&o.setAttribute("http.status_code",s.statusCode),s?.body!==void 0&&o.setAttribute("http.response.body",JSON.stringify(s.body)),s?.headers&&o.setAttribute("http.response.headers",JSON.stringify(s.headers)),o.setStatus({code:c==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),o.end();}}}startSpan(t,e,r){let o=this.tracer.startSpan(t,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"function_call",...this.metaAttributes(),...e}},r??context.active());return {ctx:trace.setSpan(context.active(),o),end:(i="OK",c)=>{c&&o.setAttributes(c),o.setStatus({code:i==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),o.end();}}}traceFunction(t,e,r,o=true){let a=this;return function(...i){let c={"evalkit.span_type":"function_call",...r};o&&i.length&&(c["function.args"]=L(i));let{ctx:s,end:p}=a.startSpan(t,c),d;try{d=context.with(s,()=>e.apply(this,i));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(s)?.recordException(l),p("ERROR",{"error.message":l.message}),u}return d&&typeof d.then=="function"?d.then(u=>(p("OK",o?{"function.result":L(u)}:void 0),u),u=>{let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(s)?.recordException(l),p("ERROR",{"error.message":l.message}),u}):(p("OK",o?{"function.result":L(d)}:void 0),d)}}traceTool(t,e,r,o=true){let a=this;return function(...i){let c={"evalkit.span_type":"tool_call","tool.name":t,"gen_ai.tool.name":t,...r};o&&i.length&&(c["tool.arguments"]=L(i.length===1?i[0]:i));let{ctx:s,end:p}=a.startSpan(t,c),d;try{d=context.with(s,()=>e.apply(this,i));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(s)?.recordException(l),p("ERROR",{"error.message":l.message}),u}return d&&typeof d.then=="function"?d.then(u=>(p("OK",o?{"tool.result":L(u)}:void 0),u),u=>{let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(s)?.recordException(l),p("ERROR",{"error.message":l.message}),u}):(p("OK",o?{"tool.result":L(d)}:void 0),d)}}async flush(){await this.provider.forceFlush();}async destroy(){await this.provider.shutdown();}};});function I(n){if(!n)return context.active();let t=n.split("-");return t.length===4&&t[0]==="00"&&t[1].length===32&&t[2].length===16?trace.setSpanContext(ROOT_CONTEXT,{traceId:t[1],spanId:t[2],traceFlags:parseInt(t[3],16),isRemote:true}):context.active()}var V=b(()=>{});function lr(n,t){let e="",r=0,o=0,a=false;function i(c){a||(a=true,c?(t.recordException(c),t.setStatus({code:SpanStatusCode.ERROR,message:c.message})):(t.setAttributes({"evalkit.completion":e,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:SpanStatusCode.OK})),t.end());}return new Proxy(n,{get(c,s,p){if(s===Symbol.asyncIterator)return function(){let u=c[Symbol.asyncIterator]();return {async next(){try{let l=await u.next();if(!l.done&&l.value){let m=l.value,f=m.choices?.[0]?.delta?.content;f&&(e+=f),m.usage&&(r=m.usage.prompt_tokens??0,o=m.usage.completion_tokens??0);}return l.done&&i(),l}catch(l){throw i(l instanceof Error?l:new Error(String(l))),l}},return(){return i(),u.return?.()??Promise.resolve({done:true,value:void 0})},throw(l){return i(l instanceof Error?l:new Error(String(l))),u.throw?.(l)??Promise.reject(l)},[Symbol.asyncIterator](){return this}}};let d=Reflect.get(c,s,p);return typeof d=="function"?d.bind(c):d}})}function q(n,t,e,r="openai"){if(t.create.__evalkit)return;let o=t.create;t.create=async function(...a){let i=a[0],c=e??context.active(),s=n.tracer.startSpan("chat.completions.create",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":r,"gen_ai.request.model":i.model??"unknown",...i.temperature!=null&&{"gen_ai.request.temperature":i.temperature},...i.max_tokens!=null&&{"gen_ai.request.max_tokens":i.max_tokens},...i.top_p!=null&&{"gen_ai.request.top_p":i.top_p},"evalkit.prompt":ur(i.messages??[])}},c),p=trace.setSpan(c,s);if(i?.stream){let m;try{m=await context.with(p,()=>o.apply(this,a));}catch(f){let g=f instanceof Error?f:new Error(String(f));throw s.recordException(g),s.setStatus({code:SpanStatusCode.ERROR,message:g.message}),s.end(),f}return lr(m,s)}let d;try{d=await context.with(p,()=>o.apply(this,a));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw s.recordException(f),s.setStatus({code:SpanStatusCode.ERROR,message:f.message}),s.end(),m}let u=d.choices?.[0],l=u?.message.content??"";return s.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.prompt_tokens??0,"gen_ai.usage.output_tokens":d.usage?.completion_tokens??0,"gen_ai.usage.total_tokens":d.usage?.total_tokens??0,"gen_ai.response.finish_reasons":u?.finish_reason?[u.finish_reason]:[],"evalkit.completion":l}),k(n,s,h(d)),s.setStatus({code:SpanStatusCode.OK}),s.end(),d},t.create.__evalkit=true;}function ur(n){return n.map(t=>`${t.role}: ${t.content??""}`).join(`
|
|
3
|
-
`)}var
|
|
4
|
-
`)}var
|
|
1
|
+
import {b,g,l,p,c,r,t,d,k,h,i,e,f,a,n,o,m,j as j$1}from'./chunk-S5ISUJPR.mjs';import {context,trace,SpanKind,SpanStatusCode,ROOT_CONTEXT}from'@opentelemetry/api';import {randomBytes}from'crypto';import {NodeTracerProvider}from'@opentelemetry/sdk-trace-node';import {BatchSpanProcessor}from'@opentelemetry/sdk-trace-base';import {Resource}from'@opentelemetry/resources';import {ATTR_SERVICE_NAME}from'@opentelemetry/semantic-conventions';import {createRequire}from'module';function Un(e,t){if(t.length===0)return {score:1,lcsLength:0};let n=e.length,r=t.length,o=Array.from({length:n+1},()=>new Array(r+1).fill(0));for(let i=1;i<=n;i++)for(let c=1;c<=r;c++)e[i-1]===t[c-1]?o[i][c]=o[i-1][c-1]+1:o[i][c]=Math.max(o[i-1][c],o[i][c-1]);let s=o[n][r];return {score:s/t.length,lcsLength:s}}function Hn(e,t){if(e.length===0&&t.length===0)return {score:1,precision:1,recall:1};if(e.length===0||t.length===0)return {score:0,precision:0,recall:0};let n=new Set(e),r=new Set(t),o=new Set([...n].filter(a=>r.has(a))),s=o.size/n.size,i=o.size/r.size;return {score:s+i===0?0:2*s*i/(s+i),precision:s,recall:i}}function Vn(e,t){if(t.length===0)return {score:1,called:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,called:r,total:t.length}}function Dn(e,t){if(t.length===0)return {score:1,matched:[],missing:[]};let n=e.toLowerCase(),r=t.filter(s=>n.includes(s.toLowerCase())),o=t.filter(s=>!n.includes(s.toLowerCase()));return {score:r.length/t.length,matched:r,missing:o}}function Fn(e,t){let n={},r=[];if(t.requiredTerms!==void 0&&t.requiredTerms.length>0){let s=e.toLowerCase(),i=t.requiredTerms.every(c=>s.includes(c.toLowerCase()));n.requiredTerms=i,r.push(i);}if(t.hasCitations!==void 0){let s=/\[[\d]+\]|\(\w[^)]{1,80}\d{4}\)|\bhttps?:\/\//.test(e);n.hasCitations=t.hasCitations?s:!s,r.push(n.hasCitations);}if(t.slideCount!==void 0){let s=/slide\s+\d+|section\s+\d+|##\s+\d+\./gi,c=(e.match(s)??[]).length===t.slideCount;n.slideCount=c,r.push(c);}return r.length===0?{score:1,checks:n}:{score:r.filter(Boolean).length/r.length,checks:n}}function Jn(e,t){if(e.length===0)return {score:1,relevant:0,total:0};let n=new Set(t),r=e.filter(o=>n.has(o)).length;return {score:r/e.length,relevant:r,total:e.length}}function zn(e,t){if(t.length===0)return {score:1,covered:0,total:0};let n=new Set(e),r=t.filter(o=>n.has(o)).length;return {score:r/t.length,covered:r,total:t.length}}function L(e){let t=new Set(e.metrics??["tool_trajectory","tool_f1","tool_correctness","response_match","constraint_compliance","contextual_precision","contextual_recall"]),n=(e.toolCalls??[]).map(a=>a.name),r=e.expectedTools??[],o={},s={};if(t.has("tool_trajectory")&&r.length>0){let a=Un(n,r);o.tool_trajectory=a.score,s.tool_trajectory={lcsLength:a.lcsLength,expectedCount:r.length};}if(t.has("tool_f1")&&(n.length>0||r.length>0)){let a=Hn(n,r);o.tool_f1=a.score,s.tool_f1={precision:a.precision,recall:a.recall};}if(t.has("tool_correctness")&&r.length>0){let a=Vn(n,r);o.tool_correctness=a.score,s.tool_correctness={called:a.called,total:a.total};}let i=e.constraints?.requiredTerms??[];if(t.has("response_match")&&i.length>0){let a=Dn(e.output,i);o.response_match=a.score,s.response_match={matched:a.matched,missing:a.missing};}if(t.has("constraint_compliance")&&e.constraints){let a=Fn(e.output,e.constraints);o.constraint_compliance=a.score,s.constraint_compliance={checks:a.checks};}if(t.has("contextual_precision")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let a=Jn(e.retrievedContext,e.expectedContext);o.contextual_precision=a.score,s.contextual_precision={relevant:a.relevant,total:a.total};}if(t.has("contextual_recall")&&e.retrievedContext!==void 0&&e.expectedContext!==void 0){let a=zn(e.retrievedContext,e.expectedContext);o.contextual_recall=a.score,s.contextual_recall={covered:a.covered,total:a.total};}let c={scores:o,details:s};try{let a=(Qt(),d(Yt)),p={"evalkit.span_type":"eval_result","evalkit.eval_type":"offline"};for(let[u,l]of Object.entries(o))p[`evalkit.metric.${u}`]=l;let{end:d$1}=a.startSpan("evaluation",p);d$1("OK");}catch{}return c}var ft=b(()=>{});function gt(e){return randomBytes(e).toString("hex")}function Zt(e){return typeof e=="function"?{name:e.name||"tool"}:typeof e=="string"||e&&typeof e=="object"?e:String(e)}async function te(e,t){let n=(t.apiUrl??process.env.EVALKIT_API_URL??e.options.apiUrl).replace(/\/$/,""),r={agentInstructions:t.agentInstructions,count:t.count??5};t.tools&&(r.tools=t.tools.map(Zt)),t.functionSchemas&&(r.functionSchemas=t.functionSchemas.map(Zt)),t.context!==void 0&&(r.context=t.context),t.rag&&(r.rag=t.rag),t.categories&&(r.categories=t.categories),t.model&&(r.model=t.model),t.provider&&(r.provider=t.provider),t.apiKey&&(r.apiKey=t.apiKey),t.temperature!==void 0&&(r.temperature=t.temperature);let o=await fetch(n+"/scenarios/generate",{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":e.options.subscriptionKey},body:JSON.stringify(r)});if(!o.ok){let i=await o.text().catch(()=>"");throw new Error(`generateScenarios failed ${o.status}: ${i}`)}return (await o.json()).scenarios??[]}function Yn(e){let t=e.turns??e.messages??[],n=[];for(let r of t)typeof r=="string"?n.push(r):r&&typeof r=="object"&&r.content&&(r.role??"user")==="user"&&n.push(String(r.content));return n.length===0&&e.starting_prompt&&n.push(String(e.starting_prompt)),n}function Qn(e,t,n,r){let o=Array.from(new Set([...e.constraints?.required_terms??[],...e.target_keywords??[]])),s={};o.length&&(s.requiredTerms=o),e.constraints?.has_citations!==void 0&&(s.hasCitations=e.constraints.has_citations);try{return L({output:t,toolCalls:n,expectedTools:e.expected_tools??[],constraints:s,metrics:r}).scores}catch{return {}}}async function Zn(e$1,t,n,r){let o=n.name??"scenario",s=n.scenario_id??"scn_"+gt(6),i="sess_"+gt(6),c=Yn(n).slice(0,r.maxTurns),a={...n.setup?.state??{},__safe_mode__:t.safeMode??true},{traceId:p,end:d,ctx:u}=e$1.startTrace(`scenario:${o}`,{"evalkit.session_id":i});e.set(p,{simulationId:r.simulationId,runId:r.runId,scenarioId:s});let l="OK",m,f$1=[],g=[],y=0,h={};try{await context.with(u,async()=>{for(let R=0;R<c.length;R++){let T={message:c[R],sessionId:i,state:a,turn:R+1},w=await t.entrypoint(T);w&&typeof w=="object"&&"text"in w?(f$1.push(w.text),w.toolCalls&&g.push(...w.toolCalls)):f$1.push(String(w)),y++;}let k=g.length?g:f.get(p)??[];h=Qn(n,f$1.join(`
|
|
2
|
+
`),k,t.metrics);});}catch(k){l="ERROR",m=k?.message??String(k);}finally{d(l);}let v={scenarioId:s,name:o,status:l,turns:y,scores:h};return m&&(v.error=m),{result:v,traceId:p}}async function ee(e$1,t){let n="sim_"+gt(8),r="run_"+gt(8),o=t.maxTurns??12,s=[],i=[];for(let c of t.scenarios){let{result:a,traceId:p}=await Zn(e$1,t,c,{simulationId:n,runId:r,maxTurns:o});s.push(a),i.push(p);}await e$1.flush();for(let c of i)e.delete(c),f.delete(c);return {simulationId:n,runId:r,results:s}}var ne=b(()=>{g();ft();});var K,re=b(()=>{(function(e){e[e.SUCCESS=0]="SUCCESS",e[e.FAILED=1]="FAILED";})(K||(K={}));});var oe=b(()=>{re();});function tr(e,t){let n=s=>{try{return JSON.stringify(s).length}catch{return 1/0}};if(n(e)<=U)return e;let r=s=>`\u2026[dropped ${s} bytes \u2014 exceeded trace span size limit]`,o=e.attributes;if(o)for(let s of ["http.response.body","http.request.body","gen_ai.response.body","gen_ai.request.body","response.body","request.body"]){let i=o[s];typeof i=="string"&&i.length>1024&&(o[s]=r(i.length));}if(n(e)<=U||(e.prompt&&e.prompt.length>1024&&(e.prompt=r(e.prompt.length)),e.completion&&e.completion.length>1024&&(e.completion=r(e.completion.length)),e.statusMessage&&e.statusMessage.length>4096&&(e.statusMessage=e.statusMessage.slice(0,4096)),n(e)<=U))return e;if(o)for(let[s,i]of Object.entries(o))typeof i=="string"&&i.length>512&&(o[s]=i.slice(0,512)+"\u2026");return n(e)<=U||(e.attributes={"trace.truncated":true},e.events=void 0,e.prompt=void 0,e.completion=void 0,n(e)<=U)?e:(t&&console.warn(`[evalkit] dropping oversized span "${e.operation}" (${n(e)}B > ${U}B)`),null)}function bt(e){return e[0]*1e3+e[1]/1e6}function er(e){return {0:"INTERNAL",1:"SERVER",2:"CLIENT",3:"PRODUCER",4:"CONSUMER"}[e]??"INTERNAL"}function nr(e){return e===1?"OK":e===2?"ERROR":"UNSET"}function rr(e){let t={};for(let[n,r]of Object.entries(e))n.startsWith("evalkit.")||n==="gen_ai.system"||r!=null&&(t[n]=r);return t}function ae(e){return new Promise(t=>setTimeout(t,e))}var se,U,yt,ie=b(()=>{oe();g();se=3,U=900*1024,yt=class{constructor(t){this.authFailures=0;this.disabled=false;this.url=`${t.baseUrl.replace(/\/$/,"")}/v1/ingest`,this.subscriptionKey=t.subscriptionKey,this.debug=t.debug??false;}export(t,n){if(this.disabled){n({code:K.FAILED});return}let r=t.map(s=>tr(this.toEnvelope(s),this.debug)).filter(s=>s!==null);if(r.length===0){n({code:K.SUCCESS});return}let o={events:r};this.debug&&console.log(`[evalkit] sending ${r.length} span(s) \u2192 ${this.url}`),this.fetchWithRetry(this.url,{method:"POST",headers:{"Content-Type":"application/json","X-Subscription-Key":this.subscriptionKey},body:JSON.stringify(o)}).then(async s=>{if(!s.ok){let i=await s.text().catch(()=>"(no body)");s.status===401||s.status===403?(this.authFailures++,this.authFailures>=se?(this.disabled=true,console.error(`[evalkit] export rejected ${s.status}: ${i} \u2014 disabling tracing after ${this.authFailures} consecutive auth failures; check your EvalKit subscription key.`)):this.debug&&console.warn(`[evalkit] export rejected ${s.status} (auth failure ${this.authFailures}/${se})`)):console.error(`[evalkit] export failed ${s.status}: ${i}`),n({code:K.FAILED});return}if(this.authFailures=0,this.debug){let i=await s.json().catch(()=>({}));console.log(`[evalkit] exported ${r.length} span(s) \u2014 status: ${i.status}`);}n({code:K.SUCCESS});}).catch(s=>{console.error("[evalkit] export network error:",s),n({code:K.FAILED});});}async fetchWithRetry(t,n,r=3){let o=[200,600,1800],s;for(let i=0;i<=r;i++)try{let c=await fetch(t,n);if(c.ok||c.status>=400&&c.status<500)return c;if(i<r)this.debug&&console.warn(`[evalkit] HTTP ${c.status}, retry ${i+1}/${r}`),await ae(o[i]??1800);else return c}catch(c){s=c,i<r&&(this.debug&&console.warn(`[evalkit] network error, retry ${i+1}/${r}:`,c),await ae(o[i]??1800));}throw s}shutdown(){return Promise.resolve()}toEnvelope(t){let n=t.spanContext(),r=t.attributes,o=bt(t.startTime),s=bt(t.endTime),i=t.events.map(p=>({name:p.name,timestamp:new Date(bt(p.time)).toISOString(),attributes:p.attributes})),c={traceId:n.traceId,spanId:n.spanId,parentSpanId:t.parentSpanId,spanKind:er(t.kind),spanType:r["evalkit.span_type"]??"log",status:nr(t.status.code),statusMessage:t.status.message,serviceName:t.resource.attributes["service.name"],operation:t.name,model:r["gen_ai.response.model"]??r["gen_ai.request.model"],provider:r["gen_ai.system"],prompt:r["evalkit.prompt"],completion:r["evalkit.completion"],tokensIn:Math.round(r["gen_ai.usage.input_tokens"]||0)||void 0,tokensOut:Math.round(r["gen_ai.usage.output_tokens"]||0)||void 0,latencyMs:Math.round(s-o),startTime:new Date(o).toISOString(),endTime:new Date(s).toISOString(),events:i.length>0?i:void 0,attributes:rr(r),createdAt:new Date(o).toISOString(),environment:r["evalkit.environment"],appVersion:r["evalkit.app_version"],userId:r["evalkit.user_id"],sessionId:r["evalkit.session_id"],deviceId:r["evalkit.device_id"],sdkVersion:r["evalkit.sdk_version"]},a=e.get(n.traceId);return a&&(c.isSimulation=true,c.simulationId=a.simulationId,c.scenarioId=a.scenarioId,c.runId=a.runId),c}};});function V(e,t=pr){let n;try{n=JSON.stringify(e);}catch{}if(n===void 0)try{n=String(e);}catch{n="<unserializable>";}return n.length>t?n.slice(0,t)+"\u2026":n}var cr,pr,D,wt=b(()=>{ie();cr="0.1.27",pr=4096;D=class{constructor(t){this.options={serviceName:"unknown",debug:false,maxExportBatchSize:512,scheduledDelayMillis:5e3,maxBodyBytes:10*1024*1024,baseUrl:"https://api.syntropylabs.ai",apiUrl:"https://api.syntropylabs.ai",environment:"",appVersion:"",...t};let n=new yt({baseUrl:this.options.baseUrl,subscriptionKey:this.options.subscriptionKey,debug:this.options.debug});this.provider=new NodeTracerProvider({resource:new Resource({[ATTR_SERVICE_NAME]:this.options.serviceName}),spanProcessors:[new BatchSpanProcessor(n,{maxExportBatchSize:this.options.maxExportBatchSize,scheduledDelayMillis:this.options.scheduledDelayMillis})]}),this.provider.register(),this.tracer=trace.getTracer("evalkit","0.1.0");}metaAttributes(){let t={"evalkit.sdk_version":cr};return this.options.environment&&(t["evalkit.environment"]=this.options.environment),this.options.appVersion&&(t["evalkit.app_version"]=this.options.appVersion),this.options.deviceId&&(t["evalkit.device_id"]=this.options.deviceId),t}startTrace(t,n){let r=this.tracer.startSpan(t,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"log",...this.metaAttributes(),...n}},context.active()),o=trace.setSpan(context.active(),r);return {traceId:r.spanContext().traceId,ctx:o,end:(i="OK")=>{r.setStatus({code:i==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),r.end();}}}startHttpTrace(t,n,r){let o=this.tracer.startSpan(t,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":n.method,"http.url":n.url,...n.headers?{"http.request.headers":JSON.stringify(n.headers)}:{},...n.requestBody!==void 0?{"http.request.body":JSON.stringify(n.requestBody)}:{},...this.metaAttributes(),...r}},context.active()),s=trace.setSpan(context.active(),o);return {traceId:o.spanContext().traceId,ctx:s,end:(c="OK",a)=>{a?.statusCode!==void 0&&o.setAttribute("http.status_code",a.statusCode),a?.body!==void 0&&o.setAttribute("http.response.body",JSON.stringify(a.body)),a?.headers&&o.setAttribute("http.response.headers",JSON.stringify(a.headers)),o.setStatus({code:c==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),o.end();}}}startSpan(t,n,r){let o=this.tracer.startSpan(t,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"function_call",...this.metaAttributes(),...n}},r??context.active());return {ctx:trace.setSpan(context.active(),o),end:(i="OK",c)=>{c&&o.setAttributes(c),o.setStatus({code:i==="OK"?SpanStatusCode.OK:SpanStatusCode.ERROR}),o.end();}}}traceFunction(t,n,r,o=true){let s=this;return function(...i){let c={"evalkit.span_type":"function_call",...r};o&&i.length&&(c["function.args"]=V(i));let{ctx:a,end:p}=s.startSpan(t,c),d;try{d=context.with(a,()=>n.apply(this,i));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(a)?.recordException(l),p("ERROR",{"error.message":l.message}),u}return d&&typeof d.then=="function"?d.then(u=>(p("OK",o?{"function.result":V(u)}:void 0),u),u=>{let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(a)?.recordException(l),p("ERROR",{"error.message":l.message}),u}):(p("OK",o?{"function.result":V(d)}:void 0),d)}}traceTool(t,n,r,o=true){let s=this;return function(...i){let c={"evalkit.span_type":"tool_call","tool.name":t,"gen_ai.tool.name":t,...r};o&&i.length&&(c["tool.arguments"]=V(i.length===1?i[0]:i));let{ctx:a,end:p}=s.startSpan(t,c),d;try{d=context.with(a,()=>n.apply(this,i));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(a)?.recordException(l),p("ERROR",{"error.message":l.message}),u}return d&&typeof d.then=="function"?d.then(u=>(p("OK",o?{"tool.result":V(u)}:void 0),u),u=>{let l=u instanceof Error?u:new Error(String(u));throw trace.getSpan(a)?.recordException(l),p("ERROR",{"error.message":l.message}),u}):(p("OK",o?{"tool.result":V(d)}:void 0),d)}}async flush(){await this.provider.forceFlush();}async destroy(){await this.provider.shutdown();}};});function I(e){if(!e)return context.active();let t=e.split("-");return t.length===4&&t[0]==="00"&&t[1].length===32&&t[2].length===16?trace.setSpanContext(ROOT_CONTEXT,{traceId:t[1],spanId:t[2],traceFlags:parseInt(t[3],16),isRemote:true}):context.active()}var F=b(()=>{});function fr(e,t){let n="",r=0,o=0,s=false;function i(c){s||(s=true,c?(t.recordException(c),t.setStatus({code:SpanStatusCode.ERROR,message:c.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(c,a,p){if(a===Symbol.asyncIterator)return function(){let u=c[Symbol.asyncIterator]();return {async next(){try{let l=await u.next();if(!l.done&&l.value){let m=l.value,f=m.choices?.[0]?.delta?.content;f&&(n+=f),m.usage&&(r=m.usage.prompt_tokens??0,o=m.usage.completion_tokens??0);}return l.done&&i(),l}catch(l){throw i(l instanceof Error?l:new Error(String(l))),l}},return(){return i(),u.return?.()??Promise.resolve({done:true,value:void 0})},throw(l){return i(l instanceof Error?l:new Error(String(l))),u.throw?.(l)??Promise.reject(l)},[Symbol.asyncIterator](){return this}}};let d=Reflect.get(c,a,p);return typeof d=="function"?d.bind(c):d}})}function j(e,t,n,r="openai"){if(t.create.__evalkit)return;let o=t.create;t.create=async function(...s){let i=s[0],c=n??context.active(),a=e.tracer.startSpan("chat.completions.create",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":r,"gen_ai.request.model":i.model??"unknown",...i.temperature!=null&&{"gen_ai.request.temperature":i.temperature},...i.max_tokens!=null&&{"gen_ai.request.max_tokens":i.max_tokens},...i.top_p!=null&&{"gen_ai.request.top_p":i.top_p},"evalkit.prompt":gr(i.messages??[])}},c),p=trace.setSpan(c,a);if(i?.stream){let m;try{m=await context.with(p,()=>o.apply(this,s));}catch(f){let g=f instanceof Error?f:new Error(String(f));throw a.recordException(g),a.setStatus({code:SpanStatusCode.ERROR,message:g.message}),a.end(),f}return fr(m,a)}let d;try{d=await context.with(p,()=>o.apply(this,s));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.recordException(f),a.setStatus({code:SpanStatusCode.ERROR,message:f.message}),a.end(),m}let u=d.choices?.[0],l=u?.message.content??"";return a.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.prompt_tokens??0,"gen_ai.usage.output_tokens":d.usage?.completion_tokens??0,"gen_ai.usage.total_tokens":d.usage?.total_tokens??0,"gen_ai.response.finish_reasons":u?.finish_reason?[u.finish_reason]:[],"evalkit.completion":l}),k(e,a,h(d)),a.setStatus({code:SpanStatusCode.OK}),a.end(),d},t.create.__evalkit=true;}function gr(e){return e.map(t=>`${t.role}: ${t.content??""}`).join(`
|
|
3
|
+
`)}var Tt=b(()=>{l();});function vr(e,t){let n="",r=0,o=0,s=false;function i(a){let p=a?.type;if(p==="content_block_delta"){let d=a.delta;d?.type==="text_delta"&&d.text&&(n+=d.text);}else p==="message_start"?r=a.message?.usage?.input_tokens??0:p==="message_delta"&&(o=a.usage?.output_tokens??0);}function c(a){s||(s=true,a?(t.recordException(a),t.setStatus({code:SpanStatusCode.ERROR,message:a.message})):(t.setAttributes({"evalkit.completion":n,"gen_ai.usage.input_tokens":r,"gen_ai.usage.output_tokens":o,"gen_ai.streaming":true}),t.setStatus({code:SpanStatusCode.OK})),t.end());}return new Proxy(e,{get(a,p,d){if(p===Symbol.asyncIterator)return function(){let l=a[Symbol.asyncIterator]();return {async next(){try{let m=await l.next();return !m.done&&m.value&&i(m.value),m.done&&c(),m}catch(m){throw c(m instanceof Error?m:new Error(String(m))),m}},return(){return c(),l.return?.()??Promise.resolve({done:true,value:void 0})},throw(m){return c(m instanceof Error?m:new Error(String(m))),l.throw?.(m)??Promise.reject(m)},[Symbol.asyncIterator](){return this}}};let u=Reflect.get(a,p,d);return typeof u=="function"?u.bind(a):u}})}function N(e,t,n){if(t.create.__evalkit)return;let r=t.create;t.create=async function(...o){let s=o[0],i$1=n??context.active(),c=xr(s.system,s.messages??[]),a=e.tracer.startSpan("messages.create",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"anthropic","gen_ai.request.model":s.model??"unknown",...s.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s.max_tokens!=null&&{"gen_ai.request.max_tokens":s.max_tokens},...s.top_p!=null&&{"gen_ai.request.top_p":s.top_p},"evalkit.prompt":c}},i$1),p=trace.setSpan(i$1,a);if(s?.stream){let l;try{l=await context.with(p,()=>r.apply(this,o));}catch(m){let f=m instanceof Error?m:new Error(String(m));throw a.recordException(f),a.setStatus({code:SpanStatusCode.ERROR,message:f.message}),a.end(),m}return vr(l,a)}let d;try{d=await context.with(p,()=>r.apply(this,o));}catch(l){let m=l instanceof Error?l:new Error(String(l));throw a.recordException(m),a.setStatus({code:SpanStatusCode.ERROR,message:m.message}),a.end(),l}let u=d.content.filter(l=>l.type==="text").map(l=>l.text??"").join("");return a.setAttributes({"gen_ai.response.model":d.model,"gen_ai.response.id":d.id,"gen_ai.usage.input_tokens":d.usage?.input_tokens??0,"gen_ai.usage.output_tokens":d.usage?.output_tokens??0,"gen_ai.response.finish_reasons":d.stop_reason?[d.stop_reason]:[],"evalkit.completion":u}),k(e,a,i(d.content)),a.setStatus({code:SpanStatusCode.OK}),a.end(),d},t.create.__evalkit=true;}function xr(e,t){let n=[];return e&&n.push(`system: ${e}`),n.push(...t.map(r=>`${r.role}: ${r.content}`)),n.join(`
|
|
4
|
+
`)}var ht=b(()=>{l();});function vt(e,t){let n=t.Query?.prototype;if(!n||n.__evalkit)return;let r=n.exec;n.exec=async function(){if(!trace.getActiveSpan()?.isRecording())return r.call(this);let s=this.op??"query",i=this.model?.collection?.name??this._collection?.collectionName??"unknown",c=e.tracer.startSpan(`${s} ${i}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mongodb","db.operation":s,"db.collection":i,"db.query":JSON.stringify(this._conditions??{})}},context.active());try{let a=await r.call(this);return c.setStatus({code:SpanStatusCode.OK}),c.end(),a}catch(a){let p=a instanceof Error?a:new Error(String(a));throw c.recordException(p),c.setStatus({code:SpanStatusCode.ERROR,message:p.message}),c.end(),a}},n.__evalkit=true;}var It=b(()=>{});function tt(e,t){let r=t?.prototype&&(typeof t.prototype.sendCommand=="function"||typeof t.prototype.call=="function")?t.prototype:Object.getPrototypeOf(t);if(!r||r.__evalkit_redis)return;let o=typeof r.sendCommand=="function"?"sendCommand":typeof r.call=="function"?"call":null;if(!o)return;let s=r[o];r[o]=async function(i,...c){if(!trace.getActiveSpan()?.isRecording())return s.call(this,i,...c);let p=Array.isArray(i)?i[0]:i?.name??i?.args?.[0]??"cmd",d=(typeof p=="string"?p:String(p)).toUpperCase(),u=e.tracer.startSpan(`redis ${d}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"redis","db.operation":d}},context.active());try{let l=await s.call(this,i,...c);return u.setStatus({code:SpanStatusCode.OK}),u.end(),l}catch(l){let m=l instanceof Error?l:new Error(String(l));throw u.recordException(m),u.setStatus({code:SpanStatusCode.ERROR,message:m.message}),u.end(),l}},r.__evalkit_redis=true;}var Kt=b(()=>{});function O(e){let t={};for(let[n,r]of Object.entries(e))Er.test(n)||r!==void 0&&(t[n]=Array.isArray(r)?r.join(", "):String(r));return t}var Er,Pt=b(()=>{Er=/^(authorization|cookie|set-cookie|x-api-key|api-key|x-auth-token|proxy-authorization|x-secret|x-access-token|token|password)$/i;});var J,Mt=b(()=>{J=new Map;});function et(e,t){if(!t.__evalkit_axios){if(t.__evalkit_axios=true,typeof t.create=="function"){let n=t.create.bind(t);t.create=function(...r){let o=n(...r);return et(e,o),o};}t.interceptors.request.use(n=>{let r=(n.baseURL?n.baseURL.replace(/\/$/,""):"")+(n.url??"");if(Ar.some(d=>d.test(r))||!trace.getActiveSpan()?.isRecording())return n;let s=n.url??"";try{s=new URL(r,n.baseURL??"http://localhost").pathname;}catch{}let i=(n.method??"get").toUpperCase(),c=O(n.headers??{}),a=e.tracer.startSpan(`${i} ${s}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":i,"http.url":r,...Object.keys(c).length?{"http.request.headers":JSON.stringify(c)}:{},...n.data!==void 0?{"http.request.body":typeof n.data=="string"?n.data.slice(0,e.options.maxBodyBytes):JSON.stringify(n.data).slice(0,e.options.maxBodyBytes)}:{}}},context.active()),p=a.spanContext();return n.headers=n.headers??{},n.headers.traceparent=`00-${p.traceId}-${p.spanId}-01`,n.headers["x-evalkit-span-id"]=p.spanId,J.set(p.spanId,a),n.__evalkitSpan=a,n.__evalkitSpanId=p.spanId,n}),t.interceptors.response.use(n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&J.delete(n.config.__evalkitSpanId),r){let o=O(n.headers??{}),s=n.data,i;s!=null&&(i=(typeof s=="string"?s:JSON.stringify(s)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":n.status,...Object.keys(o).length?{"http.response.headers":JSON.stringify(o)}:{},...i!==void 0?{"http.response.body":i}:{}}),r.setStatus({code:SpanStatusCode.OK}),r.end();}return n},n=>{let r=n.config?.__evalkitSpan;if(n.config?.__evalkitSpanId&&J.delete(n.config.__evalkitSpanId),r){let o=n.response?.status??0,s=O(n.response?.headers??{}),i=n.response?.data,c;i!=null&&(c=(typeof i=="string"?i:JSON.stringify(i)).slice(0,e.options.maxBodyBytes)),r.setAttributes({"http.status_code":o,"error.message":n.message,...Object.keys(s).length?{"http.response.headers":JSON.stringify(s)}:{},...c!==void 0?{"http.response.body":c}:{}}),r.recordException(n instanceof Error?n:new Error(String(n))),r.setStatus({code:SpanStatusCode.ERROR,message:n.message}),r.end();}throw n});}}var Ar,qt=b(()=>{Pt();Mt();Ar=[/\/v1\/ingest/,/\/health(z)?$/];});function nt(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!n||n.__evalkit_pg)return;let r=n.query;typeof r=="function"&&(n.query=function(...o){if(!trace.getActiveSpan()?.isRecording())return r.apply(this,o);let i=typeof o[0]=="string"?o[0]:o[0]?.text??o[0]?.name??"query",c=Array.isArray(o[1])?o[1]:o[0]?.values??void 0,p=i.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",u=i.match(/(?:FROM|INTO|UPDATE|JOIN)\s+"?(\w+)"?/i)?.[1]??"",l=u?`${p} ${u}`:`pg ${p}`,m=e.tracer.startSpan(l,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"postgresql","db.operation":p,"db.statement":i.slice(0,2048),...c!==void 0?{"db.params":JSON.stringify(c).slice(0,1024)}:{},...u?{"db.sql.table":u}:{}}},context.active()),f=o[o.length-1];if(typeof f=="function"){let y=f,h=o.slice(0,-1).concat([(v,k)=>{v?(m.recordException(v),m.setStatus({code:SpanStatusCode.ERROR,message:v.message}),m.setAttribute("error.message",v.message)):(m.setAttribute("db.rows_affected",k?.rowCount??0),m.setStatus({code:SpanStatusCode.OK})),m.end(),y(v,k);}]);return r.apply(this,h)}return r.apply(this,o).then(y=>(m.setAttribute("db.rows_affected",y?.rowCount??0),m.setStatus({code:SpanStatusCode.OK}),m.end(),y),y=>{let h=y instanceof Error?y:new Error(String(y));throw m.recordException(h),m.setStatus({code:SpanStatusCode.ERROR,message:h.message}),m.setAttribute("error.message",h.message),m.end(),y})},n.__evalkit_pg=true);}var jt=b(()=>{});function rt(e,t){let n=t?.prototype??Object.getPrototypeOf(t);if(!(!n||n.__evalkit_mysql2)){for(let r of ["query","execute"]){let o=n[r];typeof o=="function"&&(n[r]=function(...s){if(!trace.getActiveSpan()?.isRecording())return o.apply(this,s);let c=typeof s[0]=="string"?s[0]:s[0]?.sql??"query",a=Array.isArray(s[1])?s[1]:void 0,d=c.trim().match(/^(\w+)/)?.[1]?.toUpperCase()??"QUERY",l=c.match(/(?:FROM|INTO|UPDATE|JOIN)\s+`?(\w+)`?/i)?.[1]??"",m=l?`${d} ${l}`:`mysql ${d}`,f=e.tracer.startSpan(m,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"db_query","db.system":"mysql","db.operation":d,"db.statement":c.slice(0,2048),...a!==void 0?{"db.params":JSON.stringify(a).slice(0,1024)}:{},...l?{"db.sql.table":l}:{}}},context.active()),g=s[s.length-1];if(typeof g=="function"){let h=g,v=s.slice(0,-1).concat([(k,R,T)=>{k?(f.recordException(k),f.setStatus({code:SpanStatusCode.ERROR,message:k.message}),f.setAttribute("error.message",k.message)):(f.setAttribute("db.rows_affected",Array.isArray(R)?R.length:R?.affectedRows??0),f.setStatus({code:SpanStatusCode.OK})),f.end(),h(k,R,T);}]);return o.apply(this,v)}let y=o.apply(this,s);return y&&typeof y.then=="function"?y.then(([h,v])=>(f.setAttribute("db.rows_affected",Array.isArray(h)?h.length:h?.affectedRows??0),f.setStatus({code:SpanStatusCode.OK}),f.end(),[h,v]),h=>{let v=h instanceof Error?h:new Error(String(h));throw f.recordException(v),f.setStatus({code:SpanStatusCode.ERROR,message:v.message}),f.setAttribute("error.message",v.message),f.end(),h}):(f.end(),y)});}n.__evalkit_mysql2=true;}}var Nt=b(()=>{});function $r(e){if(!e||typeof e!="object")return false;let t=e.constructor?.name??"";return t==="ConverseCommand"||t==="ConverseStreamCommand"}function ot(e,t,n){if(t.send.__evalkit)return;let r=t.send;t.send=async function(...o){let s=o[0];if(!$r(s))return r.apply(this,o);let i=s.input,c=i?.modelId??"unknown",a=c.split(".")[0]??"bedrock",p=i?.system?.map(v=>v.text).join(`
|
|
5
5
|
`)??"",d=i?.messages?.map(v=>`${v.role}: ${v.content.map(k=>k.text??"").join("")}`)??[],u=[p?`system: ${p}`:"",...d].filter(Boolean).join(`
|
|
6
|
-
`),l=i?.inferenceConfig??{},m=context.active(),f=
|
|
7
|
-
`),
|
|
8
|
-
`);}let
|
|
9
|
-
`);if(
|
|
10
|
-
`)}function
|
|
11
|
-
`),d=context.active(),u=n.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-vertex","gen_ai.request.model":o,"evalkit.prompt":p}},d),l=trace.setSpan(d,u),m;try{m=await context.with(l,()=>r.apply(this,a));}catch(h){let v=h instanceof Error?h:new Error(String(h));throw u.recordException(v),u.setStatus({code:SpanStatusCode.ERROR,message:v.message}),u.end(),h}let f=m?.response,g=f?.candidates?.[0],y=g?.content?.parts?.map(h=>h.text??"").join("")??"";return u.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":f?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":f?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":f?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":g?.finishReason?[g.finishReason]:[],"evalkit.completion":y}),u.setStatus({code:SpanStatusCode.OK}),u.end(),m},t.generateContent.__evalkit=true;}var Gt=b(()=>{ft();});function Re(n,t={},e){function r(o,a,i){let c={...t,...a};o.addHook("onRequest",(s,p,d)=>{let u=s.routerPath??s.routeOptions?.url??s.url??"/",l=typeof c.name=="function"?c.name(s):c.name??`${String(s.method??"GET")} ${String(u)}`,m=s.headers?.traceparent,f=e?e(m):context.active(),{traceId:g,end:y,ctx:h}=context.with(f,()=>n.startHttpTrace(l,{method:String(s.method??"GET"),url:String(s.url??"/"),headers:s.headers,requestBody:void 0}));s._evalkitCtx=h,s._evalkitTraceId=g,s._evalkitEnd=y,s._evalkitEnded=false,context.with(h,d);}),o.addHook("preHandler",(s,p,d)=>{if(s._evalkitCtx&&s.body!==void 0){let u=trace.getActiveSpan();if(u?.isRecording())try{u.setAttribute("http.request.body",typeof s.body=="string"?s.body.slice(0,n.options.maxBodyBytes):JSON.stringify(s.body).slice(0,n.options.maxBodyBytes));}catch{}}context.with(s._evalkitCtx??context.active(),d);}),o.addHook("onSend",(s,p,d,u)=>{try{if(d!=null){let l=(typeof d=="string"?d:JSON.stringify(d)).slice(0,n.options.maxBodyBytes);s._evalkitRespBody=l;}}catch{}u(null,d);}),o.addHook("onResponse",(s,p,d)=>{if(typeof s._evalkitEnd=="function"&&!s._evalkitEnded){s._evalkitEnded=true;let u=p.statusCode??200;s._evalkitEnd(u>=400?"ERROR":"OK",{statusCode:u,body:s._evalkitRespBody});}d();}),o.addHook("onError",(s,p,d,u)=>{typeof s._evalkitEnd=="function"&&!s._evalkitEnded&&(s._evalkitEnded=true,s._evalkitEnd("ERROR",{statusCode:p.statusCode??500})),u();}),i();}return r[Symbol.for("skip-override")]=true,r}var Se=b(()=>{});function be(n,t){return (e,r,o)=>{let a=typeof t?.name=="function"?t.name(e):t?.name??`${String(e.method)} ${String(e.route?.path??e.path??e.url)}`,i=I(e.headers?.traceparent),{end:c,ctx:s,traceId:p}=context.with(i,()=>n.startHttpTrace(a,{method:String(e.method??"GET"),url:String(e.originalUrl??e.url??"/"),headers:e.headers,requestBody:e.body}));e._evalkitCtx=s,e._evalkitTraceId=p;let d=trace.getSpan(s)?.spanContext().spanId??"0000000000000000";r.setHeader?.("x-trace-id",p),r.setHeader?.("traceparent",`00-${p}-${d}-01`);let u=n.options.maxBodyBytes,l=[],m=0,f=h=>{if(!(!h||m>=u))try{let v=Buffer.isBuffer(h)?h:typeof h=="string"?Buffer.from(h):null;v?.length&&(l.push(v),m+=v.length);}catch{}},g=r.write.bind(r),y=r.end;r.write=function(h,...v){return f(h),g(h,...v)},r.end=function(...h){f(h[0]);let v=r.statusCode??200,k;if(l.length)try{k=Buffer.concat(l).subarray(0,u).toString("utf-8");}catch{}return c(v>=400?"ERROR":"OK",{statusCode:v,headers:r.getHeaders?r.getHeaders():void 0,body:k}),y.apply(r,h)},context.with(s,()=>o());}}var we=b(()=>{V();});function Te(n,t){return async(e,r)=>{let o=typeof t?.name=="function"?t.name(e):t?.name??`${String(e.method??"GET")} ${String(e.path??"/")}`,a=I(e.request?.headers?.traceparent),{end:i,ctx:c}=context.with(a,()=>n.startHttpTrace(o,{method:String(e.method??"GET"),url:String(e.href??e.url??"/"),headers:e.request?.headers,requestBody:e.request?.body}));e._evalkitCtx=c;try{await context.with(c,r);let s=e.status??200,p;try{let d=e.body;d!=null&&(p=(typeof d=="string"?d:JSON.stringify(d)).slice(0,n.options.maxBodyBytes));}catch{}i(s>=400?"ERROR":"OK",{statusCode:s,body:p});}catch(s){throw i("ERROR",{statusCode:e.status??500}),s}}}var Ae=b(()=>{V();});function Ke(n,t){return async(e,r)=>{let o=e.req,a=o.url??"/",i=a;try{i=new URL(a).pathname;}catch{}let c=typeof t?.name=="function"?t.name(e):t?.name??`${String(o.method??"GET")} ${i}`,s=I(o.header("traceparent")),{end:p,ctx:d}=context.with(s,()=>n.startHttpTrace(c,{method:String(o.method??"GET"),url:a,headers:Object.fromEntries(o.raw?.headers??[])}));try{await context.with(d,r);let u=e.res?.status??200,l;try{if(e.res&&typeof e.res.clone=="function"){let m=await e.res.clone().text();m&&(l=m.slice(0,n.options.maxBodyBytes));}}catch{}p(u>=400?"ERROR":"OK",{statusCode:u,body:l});}catch(u){throw p("ERROR",{statusCode:500}),u}}}var Pe=b(()=>{V();});function Me(n,t){return {name:"@evalkit/hapi",register(e){let r=new WeakMap;e.ext("onRequest",(o,a)=>{let i=typeof t?.name=="function"?t.name(o):t?.name??`${String(o.method?.toUpperCase()??"GET")} ${String(o.path??"/")}`,c=I(o.headers?.traceparent),{end:s,ctx:p}=context.with(c,()=>n.startHttpTrace(i,{method:String(o.method?.toUpperCase()??"GET"),url:String(o.url?.href??o.path??"/"),headers:o.headers}));return r.set(o,{end:s,ctx:p}),a.continue}),e.ext("onPreResponse",(o,a)=>{let i=r.get(o);if(i){let c=o.response?.output?.statusCode??o.response?.statusCode??200,s;try{let p=o.response?.source??o.response?.result;p!=null&&(s=(typeof p=="string"?p:JSON.stringify(p)).slice(0,n.options.maxBodyBytes));}catch{}i.end(c>=400?"ERROR":"OK",{statusCode:c,body:s}),r.delete(o);}return a.continue});}}}var qe=b(()=>{V();});var F,Ht=b(()=>{F=class{constructor(t){this.client=t;}intercept(t,e){let r=t.switchToHttp?.();if(!r)return e.handle();let o=r.getRequest(),a=r.getResponse(),i=`${String(o.method??"GET")} ${String(o.route?.path??o.path??o.url??"/")}`,{ctx:c,end:s}=this.client.startHttpTrace(i,{method:String(o.method??"GET"),url:String(o.originalUrl??o.url??"/"),headers:o.headers,requestBody:o.body}),p=this.client.options.maxBodyBytes,d=[],u=0,l=f=>{if(!(!f||u>=p))try{let g=Buffer.isBuffer(f)?f:typeof f=="string"?Buffer.from(f):null;g?.length&&(d.push(g),u+=g.length);}catch{}};if(a&&typeof a.write=="function"){let f=a.write.bind(a);a.write=function(g,...y){return l(g),f(g,...y)};}if(a&&typeof a.end=="function"){let f=a.end.bind(a);a.end=function(g,...y){return l(g),f(g,...y)};}let m=context.with(c,()=>e.handle());return {subscribe(f){return m.subscribe({next:g=>f.next?.(g),error:g=>{s("ERROR"),f.error?.(g);},complete:()=>{let g=a?.statusCode??200,y;if(d.length)try{y=Buffer.concat(d).subarray(0,p).toString("utf-8");}catch{}s(g>=400?"ERROR":"OK",{statusCode:g,body:y}),f.complete?.();}})},pipe(...f){return m.pipe(...f)}}}};});function Xr(n,t){let e=globalThis.Reflect;if(!e||typeof e.defineMetadata!="function")return;let r=typeof e.getOwnMetadataKeys=="function"?e.getOwnMetadataKeys:e.getMetadataKeys,o=typeof e.getOwnMetadata=="function"?e.getOwnMetadata:e.getMetadata;if(typeof r!="function"||typeof o!="function")return;let a=[];try{a=r.call(e,n)||[];}catch{return}for(let i of a)try{e.defineMetadata(i,o.call(e,i,n),t);}catch{}}function je(n,t,e){let r=e?.include??Wr,o=e?.captureIO??true,a=new Set,i=0,c=[...t.getProviders(),...t.getControllers()];for(let s of c){let p=s?.instance;if(!p||typeof p!="object")continue;let d=p.constructor?.name??"";if(!r.test(d))continue;let u=Object.getPrototypeOf(p);if(!(!u||u===Object.prototype||a.has(u))){a.add(u);for(let l of Object.getOwnPropertyNames(u)){if(zr.has(l))continue;let m=Object.getOwnPropertyDescriptor(u,l);if(!m||typeof m.value!="function"||m.get||m.set||m.value.__evalkitTraced)continue;let f=m.value,g=n.traceFunction(`${d}.${l}`,f,void 0,o);Xr(f,g);try{Object.defineProperty(g,"name",{value:l,configurable:!0});}catch{}try{Object.defineProperty(g,"length",{value:f.length,configurable:!0});}catch{}g.__evalkitTraced=true,Object.defineProperty(u,l,{...m,value:g}),i++;}}}return i}var zr,Wr,Ne=b(()=>{zr=new Set(["constructor","onModuleInit","onModuleDestroy","onApplicationBootstrap","onApplicationShutdown","beforeApplicationShutdown","configure","validate","authenticate","serializeUser","deserializeUser","canActivate","intercept","transform","catch","use"]),Wr=/(Service|Controller|Gateway|Resolver|Repository|UseCase|Handler)$/;});function Lt(n){return Qr.some(t=>t.test(n))}function Yr(n,t,e){let r="",o="GET";if(typeof n=="string")r=n,o=(t?.method??"GET").toUpperCase();else if(n instanceof URL)r=n.href,o=(t?.method??"GET").toUpperCase();else {let i=n.hostname??n.host??"localhost",c=n.port?`:${n.port}`:"",s=n.path??"/";r=`${e}://${i}${c}${s}`,o=(n.method??t?.method??"GET").toUpperCase();}let a=r;try{a=new URL(r.startsWith("http")?r:`${e}://localhost${r}`).pathname;}catch{}return {url:r,method:o,pathname:a}}function Ge(n){let t,e;try{let a$1=typeof a<"u"?a:createRequire(import.meta.url);t=a$1("http"),e=a$1("https");}catch{return}let r=[{mod:t,scheme:"http"},{mod:e,scheme:"https"}];for(let{mod:a,scheme:i}of r){let s=function(p,d,u){let l=typeof d=="function"?void 0:d,{url:m,method:f,pathname:g}=Yr(p,l,i);if(Lt(m)||!trace.getActiveSpan()?.isRecording())return c.call(a,p,d,u);let h={...typeof p=="object"&&!(p instanceof URL)?p.headers??{}:{},...l?.headers??{}},v=h["x-evalkit-span-id"];if(v){typeof p=="object"&&!(p instanceof URL)&&p.headers&&delete p.headers["x-evalkit-span-id"],l?.headers&&delete l.headers["x-evalkit-span-id"];let S=D.get(String(v));if(S){let x=T({...h});delete x["x-evalkit-span-id"],Object.keys(x).length&&S.setAttributes({"http.request.headers":JSON.stringify(x)});}return c.call(a,p,d,u)}let k=T(h),R=n.tracer.startSpan(`${f} ${g}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":f,"http.url":m,...Object.keys(k).length?{"http.request.headers":JSON.stringify(k)}:{}}},context.active()),A=c.call(a,p,d,u),O=R.spanContext();return A.setHeader("traceparent",`00-${O.traceId}-${O.spanId}-01`),A.on("response",S=>{let x=S.statusCode??0;R.setAttributes({"http.status_code":x,...S.headers?{"http.response.headers":JSON.stringify(T(S.headers))}:{}}),R.setStatus({code:x>=400?SpanStatusCode.ERROR:SpanStatusCode.OK}),R.end();}),A.on("error",S=>{R.setAttributes({"http.status_code":0,"error.message":S.message}),R.recordException(S instanceof Error?S:new Error(String(S))),R.setStatus({code:SpanStatusCode.ERROR,message:S.message}),R.end();}),A};let c=a.request;c.__evalkit||(s.__evalkit=true,Object.defineProperty(a,"request",{value:s,writable:true,configurable:true}));}}function He(n){let t;try{t=(typeof a<"u"?a:createRequire(import.meta.url))("http");}catch{return}if(t.Server.prototype.emit.__evalkit_server)return;let e=t.Server.prototype.emit;function r(o,...a){if(o!=="request")return e.call(this,o,...a);let i=a[0],c=a[1],s=i.url??"/";if(Lt(s))return e.call(this,o,...a);if(trace.getActiveSpan()?.isRecording())return e.call(this,o,...a);let p=(i.method??"GET").toUpperCase(),d=s;try{d=new URL(s,"http://localhost").pathname;}catch{}let u=i.headers.traceparent,l=u?Zr(Array.isArray(u)?u[0]:u):context.active(),m=n.tracer.startSpan(`${p} ${d}`,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":p,"http.url":s,"http.request.headers":JSON.stringify(T(i.headers))}},l),f=trace.setSpan(l,m),g=m.spanContext();c.setHeader("x-trace-id",g.traceId),c.setHeader("traceparent",`00-${g.traceId}-${g.spanId}-01`);let y=n.options.maxBodyBytes,h=[],v=0;i.on("data",x=>{try{if(x&&v<y){let E=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;E&&E.length&&(h.push(E),v+=E.length);}}catch{}}),i.on("end",()=>{if(h.length)try{let x=Buffer.concat(h).subarray(0,y).toString("utf-8");x&&m.setAttribute("http.request.body",x);}catch{}});let k=[],R=0,A=x=>{try{if(x&&typeof x!="function"&&R<y){let E=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;E&&E.length&&(k.push(E),R+=E.length);}}catch{}},O=c.write.bind(c),S=c.end.bind(c);return c.write=function(x,...E){return A(x),O(x,...E)},c.end=function(x,...E){return A(x),S(x,...E)},c.on("finish",()=>{m.setAttribute("http.status_code",c.statusCode);try{let x=c.getHeaders();x&&Object.keys(x).length&&m.setAttribute("http.response.headers",JSON.stringify(T(x)));}catch{}if(k.length)try{let x=Buffer.concat(k).subarray(0,y).toString("utf-8");x&&m.setAttribute("http.response.body",x);}catch{}m.setStatus({code:c.statusCode>=400?SpanStatusCode.ERROR:SpanStatusCode.OK}),m.end();}),c.on("error",x=>{m.setAttribute("error.message",x.message),m.recordException(x instanceof Error?x:new Error(String(x))),m.setStatus({code:SpanStatusCode.ERROR,message:x.message}),m.end();}),context.with(f,()=>e.call(this,o,...a))}r.__evalkit_server=true,t.Server.prototype.emit=r;}function Zr(n){let t=n.split("-");if(t.length<4)return context.active();let[,e,r,o]=t;if(!e||!r)return context.active();try{let a={traceId:e,spanId:r,isRemote:!0,traceFlags:parseInt(o??"01",16)};return trace.setSpanContext(context.active(),a)}catch{return context.active()}}function Le(){if(typeof globalThis.fetch!="function"||globalThis.fetch.__evalkit)return;let n=globalThis.fetch.bind(globalThis);globalThis.fetch=async function(e,r){let o=typeof e=="string"?e:e instanceof URL?e.href:e.url;if(Lt(o))return n(e,r);let a=trace.getActiveSpan();if(!a?.isRecording())return n(e,r);let i=(r?.method??"GET").toUpperCase(),c=o;try{c=new URL(o).pathname;}catch{}let s={};r?.headers&&new Headers(r.headers).forEach((g,y)=>{s[y]=g;});let p=T(s),d=a.spanContext(),u=`00-${d.traceId}-${d.spanId}-01`,l=new Headers(r?.headers);l.set("traceparent",u);let m={...r,headers:l};Object.keys(p).length&&a.addEvent("http.fetch.request",{"http.method":i,"http.url":o,"http.request.headers":JSON.stringify(p)});try{let f=await n(e,m),g={};return f.headers.forEach((y,h)=>{g[h]=y;}),a.addEvent("http.fetch.response",{"http.url":o,"http.status_code":f.status,"http.response.headers":JSON.stringify(T(g))}),f}catch(f){throw a.addEvent("http.fetch.error",{"http.url":o,"error.message":f?.message??String(f),"error.stack":f?.stack??""}),f}},globalThis.fetch.__evalkit=true;}var Qr,Ue=b(()=>{At();It();Qr=[/\/v1\/ingest/,/\/health(z)?$/,/169\.254\./,/metadata\.google/,/storage\.googleapis/];});function De(n){if(console.__evalkit)return;let t=console.log.bind(console),e=console.warn.bind(console),r=console.error.bind(console),o=i=>i.map(c=>{if(typeof c=="string")return c;if(c instanceof Error)return `${c.message}
|
|
12
|
-
${c.stack??""}`;try{return JSON.stringify(c)}catch{return String(c)}}).join(" ").slice(0,2e3),a=(i,c)=>{let s=trace.getActiveSpan();if(s?.isRecording())s.addEvent(`log.${i}`,{"log.level":i,"log.message":c});else {let p=n.tracer.startSpan(`log.${i}`,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":i,"log.message":c}},context.active());p.setStatus({code:i==="ERROR"?SpanStatusCode.ERROR:SpanStatusCode.OK}),p.end();}};console.log=(...i)=>{t(...i),a("INFO",o(i));},console.warn=(...i)=>{e(...i),a("WARN",o(i));},console.error=(...i)=>{r(...i),a("ERROR",o(i));},console.__evalkit=true;}var Fe=b(()=>{});function ze(n,t,e){let r=trace.getActiveSpan();if(r?.isRecording())r.addEvent(t,{"error.message":e.message,"error.stack":e.stack??"","log.level":"ERROR","log.message":`${t}: ${e.message}`}),r.recordException(e),r.setStatus({code:SpanStatusCode.ERROR,message:e.message});else {let o=n.tracer.startSpan(t,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":"ERROR","log.message":`${t}: ${e.message}`,"error.message":e.message,"error.stack":e.stack??""}},context.active());o.recordException(e),o.setStatus({code:SpanStatusCode.ERROR,message:e.message}),o.end();}}function We(n){typeof process>"u"||(process.on("unhandledRejection",t=>{let e=t instanceof Error?t:new Error(String(t));ze(n,"error.unhandled_rejection",e);}),process.on("uncaughtException",t=>{ze(n,"error.uncaught_exception",t instanceof Error?t:new Error(String(t)));}));}var Xe=b(()=>{});function ao(n$1){let t=n("mongoose");t&>(n$1,t);}function io(n$1){let t=n("axios");t&&Z(n$1,t.default??t);}async function co(n){try{let e=o()("pg"),r=e.Client??e.default?.Client;if(r){tt(n,r);return}}catch{}try{let t=await m("pg"),e=t.Client??t.default?.Client;e&&tt(n,e);}catch{}}async function po(n){try{let t=o(),e=t("mysql2"),r=e.Connection??e.default?.Connection??t("mysql2/lib/connection");if(r){et(n,r);return}}catch{}try{let t=await m("mysql2"),e=t.Connection??t.default?.Connection;e&&et(n,e);}catch{}}async function lo(n){try{let e=o()("ioredis"),r=e.default??e.Redis??e;if(r?.prototype){Y(n,r);return}}catch{}try{let t=await m("ioredis"),e=t.default??t.Redis??t;e?.prototype&&Y(n,e);}catch{}}async function uo(n){try{let e=o()("openai"),o$1=(e.default??e.OpenAI??e)?.Chat?.Completions?.prototype;if(o$1){q(n,o$1);return}}catch{}try{let t=await m("openai"),r=(t.default??t.OpenAI??t)?.Chat?.Completions?.prototype;r&&q(n,r);}catch{}}async function mo(n){try{let e=o()("@anthropic-ai/sdk"),o$1=(e.default??e.Anthropic??e)?.Messages?.prototype;if(o$1){j(n,o$1);return}}catch{}try{let t=await m("@anthropic-ai/sdk"),r=(t.default??t.Anthropic??t)?.Messages?.prototype;r&&j(n,r);}catch{}}async function fo(n){try{let e=o()("@aws-sdk/client-bedrock-runtime"),o$1=(e.BedrockRuntimeClient??e.default?.BedrockRuntimeClient)?.prototype;if(o$1){nt(n,o$1);return}}catch{}try{let t=await m("@aws-sdk/client-bedrock-runtime"),r=(t.BedrockRuntimeClient??t.default?.BedrockRuntimeClient)?.prototype;r&&nt(n,r);}catch{}}async function go(n){try{let e=o()("@anthropic-ai/sdk"),o$1=(e.AnthropicVertex??e.default?.AnthropicVertex)?.Messages?.prototype;if(o$1){it(n,o$1);return}}catch{}try{let t=await m("@anthropic-ai/sdk"),r=(t.AnthropicVertex??t.default?.AnthropicVertex)?.Messages?.prototype;r&&it(n,r);}catch{}}async function yo(n){try{let e=o()("@google-cloud/vertexai"),o$1=(e.GenerativeModel??e.default?.GenerativeModel)?.prototype;if(o$1){ct(n,o$1);return}}catch{}try{let t=await m("@google-cloud/vertexai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&ct(n,r);}catch{}}async function ho(n){try{let e=o()("cohere-ai"),o$1=(e.CohereClient??e.default?.CohereClient??e.default)?.prototype;if(o$1){rt(n,o$1);return}}catch{}try{let t=await m("cohere-ai"),r=(t.CohereClient??t.default?.CohereClient??t.default)?.prototype;r&&rt(n,r);}catch{}}async function vo(n){try{let e=o()("@google/generative-ai"),o$1=(e.GenerativeModel??e.default?.GenerativeModel)?.prototype;if(o$1){ot(n,o$1);return}}catch{}try{let t=await m("@google/generative-ai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&ot(n,r);}catch{}}async function xo(n){try{let e=o()("@google/genai"),r=e.Models??e.default?.Models;if(r?.prototype){at(n,r.prototype);return}}catch{}try{let t=await m("@google/genai"),e=t.Models??t.default?.Models;e?.prototype&&at(n,e.prototype);}catch{}}async function Co(n){try{let e=o()("groq-sdk"),o$1=(e.default??e.Groq??e)?.Chat?.Completions?.prototype;if(o$1){q(n,o$1,void 0,"groq");return}}catch{}try{let t=await m("groq-sdk"),r=(t.default??t.Groq??t)?.Chat?.Completions?.prototype;r&&q(n,r,void 0,"groq");}catch{}}async function _o(n){try{let{patchLangChain:t}=await import('./langchain-CL5EBCAT.mjs');await t(n);}catch{}}function Qe(n){try{He(n);}catch{}try{Ge(n);}catch{}Le(),De(n),We(n),ao(n),io(n),Promise.all([uo(n),mo(n),fo(n),go(n),yo(n),ho(n),vo(n),xo(n),Co(n),_o(n),co(n),po(n),lo(n)]).catch(()=>{});}var Ye=b(()=>{p();bt();ft();qt();Gt();jt();Nt();$t();Ot();Pt();Mt();Tt();Kt();Ue();Fe();Xe();});var zt={};c(zt,{EvalKitClient:()=>U,EvalKitInterceptor:()=>F,TraceMethod:()=>wn,Traced:()=>On,createNestjsInterceptor:()=>Cn,currentTraceId:()=>Kn,default:()=>Eo,enableNestjsAutoTrace:()=>An,evaluate:()=>G,expressMiddleware:()=>gn,fastifyPlugin:()=>yn,flush:()=>kn,generateScenarios:()=>Pn,hapiPlugin:()=>xn,honoMiddleware:()=>vn,init:()=>Ze,koaMiddleware:()=>hn,langchainHandler:()=>pn,patchAnthropicClient:()=>en,patchAnthropicVertexClient:()=>rn,patchAxiosClient:()=>dn,patchBedrockClient:()=>nn,patchCohereClient:()=>sn,patchGoogleAIModel:()=>an,patchGoogleGenAIModels:()=>cn,patchMongooseClient:()=>ln,patchMysql2Client:()=>fn,patchOpenAIClient:()=>tn,patchPgClient:()=>mn,patchRedisClient:()=>un,patchVertexGenerativeModel:()=>on,simulateUser:()=>Mn,startHttpTrace:()=>Rn,startSpan:()=>Sn,startTrace:()=>_n,traceFunction:()=>En,traceObject:()=>Tn,traceTool:()=>bn,withTrace:()=>In});function _(){if(!B)throw new Error("[evalkit] call evalkit.init() before using the SDK");return B}function Ze(n){return B&&B.destroy(),B=new U(n),Qe(B),B}function tn(n,t){q(_(),n.chat.completions,t);}function en(n,t){j(_(),n.messages,t);}function nn(n){nt(_(),n);}function rn(n){it(_(),n.messages);}function on(n){ct(_(),n);}function sn(n){rt(_(),n);}function an(n){ot(_(),n);}function cn(n){at(_(),n);}function pn(){return r(_())}function ln(n){gt(_(),n);}function un(n){Y(_(),n);}function dn(n){Z(_(),n);}function mn(n){tt(_(),n);}function fn(n){et(_(),n);}function gn(n){return be(_(),n)}function yn(n){return Re(_(),n,So)}function hn(n){return Te(_(),n)}function vn(n){return Ke(_(),n)}function xn(n){return Me(_(),n)}function Cn(){return new F(_())}function _n(n,t){return _().startTrace(n,t)}async function kn(){return _().flush()}function Rn(n,t,e){return _().startHttpTrace(n,t,e)}function Sn(n,t,e){return _().startSpan(n,t,e)}function En(n,t,e,r=true){return _().traceFunction(n,t,e,r)}function bn(n,t,e,r=true){return _().traceTool(n,t,e,r)}function wn(n){return (t,e,r)=>{let o=r.value,a=n??`${t.constructor?.name??"unknown"}.${String(e)}`,i;return r.value=function(...c){return i||(i=_().traceFunction(a,o)),i.apply(this,c)},r}}function On(n){return t=>{let e=t.prototype,r=n?.prefix??t.name;for(let o of Object.getOwnPropertyNames(e)){if(o==="constructor")continue;let a=Object.getOwnPropertyDescriptor(e,o);if(!a||typeof a.value!="function")continue;let i=a.value,c=`${r}.${o}`,s=null;Object.defineProperty(e,o,{...a,value:function(...p){return s||(s=_().traceFunction(c,i)),s.apply(this,p)}});}return t}}function Tn(n,t){let e=_(),r=t?.prefix,o=t?.captureIO??true;for(let a of Object.keys(n)){let i=n[a];if(typeof i=="function"&&!i.__evalkitTraced){let c=r?`${r}.${a}`:a,s=e.traceFunction(c,i,void 0,o);s.__evalkitTraced=true,n[a]=s;}}return n}async function An(n,t){let e,r=n;if(typeof r.getProviders=="function"&&typeof r.getControllers=="function")e=n;else if(typeof r.get=="function")try{let a=await import('@nestjs/core');a.DiscoveryService&&(e=r.get(a.DiscoveryService));}catch(o){console.warn("[evalkit] enableNestjsAutoTrace: could not resolve DiscoveryService:",o?.message);}return e?je(_(),e,t):0}function In(n,t){return context.with(n,t)}function Kn(){let n=trace.getActiveSpan();return n?.isRecording()?n.spanContext().traceId:void 0}function Pn(n){return Qt(_(),n)}function Mn(n){return Yt(_(),n)}function So(n){return I(n)}var B,Eo,Wt=b(()=>{ut();Zt();St();V();bt();ft();Ot();Tt();Kt();Pt();Mt();qt();jt();Nt();$t();t();Gt();Se();we();Ae();Pe();qe();Ht();Ne();Ye();St();Ht();ut();B=null;Eo={init:Ze,evaluate:G,generateScenarios:Pn,simulateUser:Mn,patchOpenAIClient:tn,patchAnthropicClient:en,patchBedrockClient:nn,patchAnthropicVertexClient:rn,patchVertexGenerativeModel:on,patchCohereClient:sn,patchGoogleAIModel:an,patchGoogleGenAIModels:cn,langchainHandler:pn,patchMongooseClient:ln,patchRedisClient:un,patchAxiosClient:dn,patchPgClient:mn,patchMysql2Client:fn,expressMiddleware:gn,fastifyPlugin:yn,koaMiddleware:hn,honoMiddleware:vn,hapiPlugin:xn,createNestjsInterceptor:Cn,startTrace:_n,startHttpTrace:Rn,startSpan:Sn,traceFunction:En,traceTool:bn,traceObject:Tn,TraceMethod:wn,Traced:On,enableNestjsAutoTrace:An,withTrace:In,currentTraceId:Kn,flush:kn};});Wt();export{U as EvalKitClient,F as EvalKitInterceptor,wn as TraceMethod,On as Traced,Cn as createNestjsInterceptor,Kn as currentTraceId,Eo as default,An as enableNestjsAutoTrace,G as evaluate,gn as expressMiddleware,yn as fastifyPlugin,kn as flush,Pn as generateScenarios,xn as hapiPlugin,vn as honoMiddleware,Ze as init,hn as koaMiddleware,pn as langchainHandler,en as patchAnthropicClient,rn as patchAnthropicVertexClient,dn as patchAxiosClient,nn as patchBedrockClient,sn as patchCohereClient,an as patchGoogleAIModel,cn as patchGoogleGenAIModels,ln as patchMongooseClient,fn as patchMysql2Client,tn as patchOpenAIClient,mn as patchPgClient,un as patchRedisClient,on as patchVertexGenerativeModel,Mn as simulateUser,Rn as startHttpTrace,Sn as startSpan,_n as startTrace,En as traceFunction,Tn as traceObject,bn as traceTool,In as withTrace};
|
|
6
|
+
`),l=i?.inferenceConfig??{},m=context.active(),f=e.tracer.startSpan("converse",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":a,"gen_ai.request.model":c,...l.temperature!=null&&{"gen_ai.request.temperature":l.temperature},...l.maxTokens!=null&&{"gen_ai.request.max_tokens":l.maxTokens},...l.topP!=null&&{"gen_ai.request.top_p":l.topP},"evalkit.prompt":u}},m),g=trace.setSpan(m,f),y;try{y=await context.with(g,()=>r.apply(this,o));}catch(v){let k=v instanceof Error?v:new Error(String(v));throw f.recordException(k),f.setStatus({code:SpanStatusCode.ERROR,message:k.message}),f.end(),v}let h=y.output?.message?.content?.map(v=>v.text??"").join("")??"";return f.setAttributes({"gen_ai.response.model":c,"gen_ai.usage.input_tokens":y.usage?.inputTokens??0,"gen_ai.usage.output_tokens":y.usage?.outputTokens??0,"gen_ai.usage.total_tokens":y.usage?.totalTokens??0,"gen_ai.response.finish_reasons":y.stopReason?[y.stopReason]:[],"evalkit.completion":h}),f.setStatus({code:SpanStatusCode.OK}),f.end(),y},t.send.__evalkit=true;}var Bt=b(()=>{});function st(e,t,n){if(t.chat.__evalkit)return;let r=t.chat;t.chat=async function(...o){let s=o[0];if(s?.stream)return r.apply(this,o);let i=s?.chatHistory?.map(l=>`${l.role}: ${l.message??""}`)??[],c=[s?.preamble?`system: ${s.preamble}`:"",...i,`user: ${s?.message??""}`].filter(Boolean).join(`
|
|
7
|
+
`),a=context.active(),p=e.tracer.startSpan("chat",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"cohere","gen_ai.request.model":s?.model??"unknown",...s?.temperature!=null&&{"gen_ai.request.temperature":s.temperature},...s?.maxTokens!=null&&{"gen_ai.request.max_tokens":s.maxTokens},"evalkit.prompt":c}},a),d=trace.setSpan(a,p),u;try{u=await context.with(d,()=>r.apply(this,o));}catch(l){let m=l instanceof Error?l:new Error(String(l));throw p.recordException(m),p.setStatus({code:SpanStatusCode.ERROR,message:m.message}),p.end(),l}return p.setAttributes({"gen_ai.response.model":s?.model??"unknown","gen_ai.response.id":u.generationId??"","gen_ai.usage.input_tokens":u.meta?.tokens?.inputTokens??0,"gen_ai.usage.output_tokens":u.meta?.tokens?.outputTokens??0,"gen_ai.response.finish_reasons":u.finishReason?[u.finishReason]:[],"evalkit.completion":u.text??""}),p.setStatus({code:SpanStatusCode.OK}),p.end(),u},t.chat.__evalkit=true;}var $t=b(()=>{});function at(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let i=s[0],c="";if(typeof i=="string")c=`user: ${i}`;else {let g=i,y=g?.systemInstruction?.parts?.map(v=>v.text??"").join("")??"",h=g?.contents?.map(v=>`${v.role??"user"}: ${v.parts.map(k=>k.text??"").join("")}`)??[];c=[y?`system: ${y}`:"",...h].filter(Boolean).join(`
|
|
8
|
+
`);}let a=context.active(),p=e.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-ai","gen_ai.request.model":o,"evalkit.prompt":c}},a),d=trace.setSpan(a,p),u;try{u=await context.with(d,()=>r.apply(this,s));}catch(g){let y=g instanceof Error?g:new Error(String(g));throw p.recordException(y),p.setStatus({code:SpanStatusCode.ERROR,message:y.message}),p.end(),g}let l=u?.response,m=l?.candidates?.[0],f=m?.content?.parts?.map(g=>g.text??"").join("")??"";return p.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":l?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":l?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":l?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":m?.finishReason?[m.finishReason]:[],"evalkit.completion":f}),p.setStatus({code:SpanStatusCode.OK}),p.end(),u},t.generateContent.__evalkit=true;}var Gt=b(()=>{});function Ce(e){return e?.text??""}function Vr(e){if(typeof e=="string")return e;if(Array.isArray(e))return e.map(t=>{if(typeof t=="string")return t;let n=t,r=n.role??"user",o=(n.parts??[]).map(Ce).join("");return o?`${r}: ${o}`:""}).filter(Boolean).join(`
|
|
9
|
+
`);if(e&&typeof e=="object"){let t=e;if(t.parts)return (t.parts??[]).map(Ce).join("")}return e!=null?String(e):""}function Dr(e){let t=e?.systemInstruction;return t?typeof t=="string"?t:Array.isArray(t?.parts)?t.parts.map(n=>n?.text??"").join(""):typeof t?.text=="string"?t.text:"":""}function _e(e){let t=Dr(e?.config),n=Vr(e?.contents);return [t?`system: ${t}`:"",n].filter(Boolean).join(`
|
|
10
|
+
`)}function ke(e){let t=[];for(let n of e?.candidates??[])for(let r of n.content?.parts??[])r.text&&t.push(r.text);return t.length?t.join(""):e?.text??""}function Re(e,t,n){Lt&&k(Lt,t,j$1(e));}function ct(e,t,n){if(Lt=e,t.generateContent&&!t.generateContent.__evalkit){let r=t.generateContent;t.generateContent=async function(...o){let s=o[0]??{},i=s.model??"unknown",c=context.active(),a=e.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":i,"evalkit.prompt":_e(s)}},c),p=trace.setSpan(c,a),d;try{d=await context.with(p,()=>r.apply(this,o));}catch(u){let l=u instanceof Error?u:new Error(String(u));throw a.recordException(l),a.setStatus({code:SpanStatusCode.ERROR,message:l.message}),a.end(),u}a.setAttributes({"gen_ai.response.model":i,"gen_ai.usage.input_tokens":d?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":d?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":d?.usageMetadata?.totalTokenCount??0,"evalkit.completion":ke(d)});try{Re(d,a,a.spanContext().traceId);}catch{}return a.setStatus({code:SpanStatusCode.OK}),a.end(),d},t.generateContent.__evalkit=true;}if(t.generateContentStream&&!t.generateContentStream.__evalkit){let r=t.generateContentStream;t.generateContentStream=async function(...o){let s=o[0]??{},i=s.model??"unknown",c=context.active(),a=e.tracer.startSpan("generateContentStream",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-genai","gen_ai.request.model":i,"gen_ai.streaming":true,"evalkit.prompt":_e(s)}},c),p=trace.setSpan(c,a),d;try{d=await context.with(p,()=>r.apply(this,o));}catch(l){let m=l instanceof Error?l:new Error(String(l));throw a.recordException(m),a.setStatus({code:SpanStatusCode.ERROR,message:m.message}),a.end(),l}async function*u(){let l=[],m=0,f=0;try{for await(let g of d){try{let y=ke(g);y&&l.push(y),g?.usageMetadata&&(m=g.usageMetadata.promptTokenCount??m,f=g.usageMetadata.candidatesTokenCount??f),Re(g,a,a.spanContext().traceId);}catch{}yield g;}a.setAttributes({"gen_ai.response.model":i,"gen_ai.usage.input_tokens":m,"gen_ai.usage.output_tokens":f,"evalkit.completion":l.join("")}),a.setStatus({code:SpanStatusCode.OK});}catch(g){let y=g instanceof Error?g:new Error(String(g));throw a.recordException(y),a.setStatus({code:SpanStatusCode.ERROR,message:y.message}),g}finally{a.end();}}return u()},t.generateContentStream.__evalkit=true;}}var Lt,Ut=b(()=>{l();Lt=null;});function pt(e,t,n){N(e,t,n);}function lt(e,t,n){if(t.generateContent.__evalkit)return;let r=t.generateContent,o=t.model??"unknown";t.generateContent=async function(...s){let i=s[0],c=i?.systemInstruction?.parts?.map(h=>h.text??"").join("")??"",a=i?.contents?.map(h=>`${h.role??"user"}: ${h.parts.map(v=>v.text??"").join("")}`)??[],p=[c?`system: ${c}`:"",...a].filter(Boolean).join(`
|
|
11
|
+
`),d=context.active(),u=e.tracer.startSpan("generateContent",{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"llm_call","gen_ai.system":"google-vertex","gen_ai.request.model":o,"evalkit.prompt":p}},d),l=trace.setSpan(d,u),m;try{m=await context.with(l,()=>r.apply(this,s));}catch(h){let v=h instanceof Error?h:new Error(String(h));throw u.recordException(v),u.setStatus({code:SpanStatusCode.ERROR,message:v.message}),u.end(),h}let f=m?.response,g=f?.candidates?.[0],y=g?.content?.parts?.map(h=>h.text??"").join("")??"";return u.setAttributes({"gen_ai.response.model":o,"gen_ai.usage.input_tokens":f?.usageMetadata?.promptTokenCount??0,"gen_ai.usage.output_tokens":f?.usageMetadata?.candidatesTokenCount??0,"gen_ai.usage.total_tokens":f?.usageMetadata?.totalTokenCount??0,"gen_ai.response.finish_reasons":g?.finishReason?[g.finishReason]:[],"evalkit.completion":y}),u.setStatus({code:SpanStatusCode.OK}),u.end(),m},t.generateContent.__evalkit=true;}var Ht=b(()=>{ht();});function Ee(e,t={},n){function r(o,s,i){let c={...t,...s};o.addHook("onRequest",(a,p,d)=>{let u=a.routerPath??a.routeOptions?.url??a.url??"/",l=typeof c.name=="function"?c.name(a):c.name??`${String(a.method??"GET")} ${String(u)}`,m=a.headers?.traceparent,f=n?n(m):context.active(),{traceId:g,end:y,ctx:h}=context.with(f,()=>e.startHttpTrace(l,{method:String(a.method??"GET"),url:String(a.url??"/"),headers:a.headers,requestBody:void 0}));a._evalkitCtx=h,a._evalkitTraceId=g,a._evalkitEnd=y,a._evalkitEnded=false,context.with(h,d);}),o.addHook("preHandler",(a,p,d)=>{if(a._evalkitCtx&&a.body!==void 0){let u=trace.getActiveSpan();if(u?.isRecording())try{u.setAttribute("http.request.body",typeof a.body=="string"?a.body.slice(0,e.options.maxBodyBytes):JSON.stringify(a.body).slice(0,e.options.maxBodyBytes));}catch{}}context.with(a._evalkitCtx??context.active(),d);}),o.addHook("onSend",(a,p,d,u)=>{try{if(d!=null){let l=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes);a._evalkitRespBody=l;}}catch{}u(null,d);}),o.addHook("onResponse",(a,p,d)=>{if(typeof a._evalkitEnd=="function"&&!a._evalkitEnded){a._evalkitEnded=true;let u=p.statusCode??200;a._evalkitEnd(u>=400?"ERROR":"OK",{statusCode:u,body:a._evalkitRespBody});}d();}),o.addHook("onError",(a,p,d,u)=>{typeof a._evalkitEnd=="function"&&!a._evalkitEnded&&(a._evalkitEnded=true,a._evalkitEnd("ERROR",{statusCode:p.statusCode??500})),u();}),i();}return r[Symbol.for("skip-override")]=true,r}var we=b(()=>{});function Te(e,t){return (n,r,o)=>{let s=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method)} ${String(n.route?.path??n.path??n.url)}`,i=I(n.headers?.traceparent),{end:c,ctx:a,traceId:p}=context.with(i,()=>e.startHttpTrace(s,{method:String(n.method??"GET"),url:String(n.originalUrl??n.url??"/"),headers:n.headers,requestBody:n.body}));n._evalkitCtx=a,n._evalkitTraceId=p;let d=trace.getSpan(a)?.spanContext().spanId??"0000000000000000";r.setHeader?.("x-trace-id",p),r.setHeader?.("traceparent",`00-${p}-${d}-01`);let u=e.options.maxBodyBytes,l=[],m=0,f=h=>{if(!(!h||m>=u))try{let v=Buffer.isBuffer(h)?h:typeof h=="string"?Buffer.from(h):null;v?.length&&(l.push(v),m+=v.length);}catch{}},g=r.write.bind(r),y=r.end;r.write=function(h,...v){return f(h),g(h,...v)},r.end=function(...h){f(h[0]);let v=r.statusCode??200,k;if(l.length)try{k=Buffer.concat(l).subarray(0,u).toString("utf-8");}catch{}return c(v>=400?"ERROR":"OK",{statusCode:v,headers:r.getHeaders?r.getHeaders():void 0,body:k}),y.apply(r,h)},context.with(a,()=>o());}}var Ae=b(()=>{F();});function Ke(e,t){return async(n,r)=>{let o=typeof t?.name=="function"?t.name(n):t?.name??`${String(n.method??"GET")} ${String(n.path??"/")}`,s=I(n.request?.headers?.traceparent),{end:i,ctx:c}=context.with(s,()=>e.startHttpTrace(o,{method:String(n.method??"GET"),url:String(n.href??n.url??"/"),headers:n.request?.headers,requestBody:n.request?.body}));n._evalkitCtx=c;try{await context.with(c,r);let a=n.status??200,p;try{let d=n.body;d!=null&&(p=(typeof d=="string"?d:JSON.stringify(d)).slice(0,e.options.maxBodyBytes));}catch{}i(a>=400?"ERROR":"OK",{statusCode:a,body:p});}catch(a){throw i("ERROR",{statusCode:n.status??500}),a}}}var Pe=b(()=>{F();});function qe(e,t){return async(n,r)=>{let o=n.req,s=o.url??"/",i=s;try{i=new URL(s).pathname;}catch{}let c=typeof t?.name=="function"?t.name(n):t?.name??`${String(o.method??"GET")} ${i}`,a=I(o.header("traceparent")),{end:p,ctx:d}=context.with(a,()=>e.startHttpTrace(c,{method:String(o.method??"GET"),url:s,headers:Object.fromEntries(o.raw?.headers??[])}));try{await context.with(d,r);let u=n.res?.status??200,l;try{if(n.res&&typeof n.res.clone=="function"){let m=await n.res.clone().text();m&&(l=m.slice(0,e.options.maxBodyBytes));}}catch{}p(u>=400?"ERROR":"OK",{statusCode:u,body:l});}catch(u){throw p("ERROR",{statusCode:500}),u}}}var je=b(()=>{F();});function Ne(e,t){return {name:"@evalkit/hapi",register(n){let r=new WeakMap;n.ext("onRequest",(o,s)=>{let i=typeof t?.name=="function"?t.name(o):t?.name??`${String(o.method?.toUpperCase()??"GET")} ${String(o.path??"/")}`,c=I(o.headers?.traceparent),{end:a,ctx:p}=context.with(c,()=>e.startHttpTrace(i,{method:String(o.method?.toUpperCase()??"GET"),url:String(o.url?.href??o.path??"/"),headers:o.headers}));return r.set(o,{end:a,ctx:p}),s.continue}),n.ext("onPreResponse",(o,s)=>{let i=r.get(o);if(i){let c=o.response?.output?.statusCode??o.response?.statusCode??200,a;try{let p=o.response?.source??o.response?.result;p!=null&&(a=(typeof p=="string"?p:JSON.stringify(p)).slice(0,e.options.maxBodyBytes));}catch{}i.end(c>=400?"ERROR":"OK",{statusCode:c,body:a}),r.delete(o);}return s.continue});}}}var Be=b(()=>{F();});var z,Vt=b(()=>{z=class{constructor(t){this.client=t;}intercept(t,n){let r=t.switchToHttp?.();if(!r)return n.handle();let o=r.getRequest(),s=r.getResponse(),i=`${String(o.method??"GET")} ${String(o.route?.path??o.path??o.url??"/")}`,{ctx:c,end:a}=this.client.startHttpTrace(i,{method:String(o.method??"GET"),url:String(o.originalUrl??o.url??"/"),headers:o.headers,requestBody:o.body}),p=this.client.options.maxBodyBytes,d=[],u=0,l=f=>{if(!(!f||u>=p))try{let g=Buffer.isBuffer(f)?f:typeof f=="string"?Buffer.from(f):null;g?.length&&(d.push(g),u+=g.length);}catch{}};if(s&&typeof s.write=="function"){let f=s.write.bind(s);s.write=function(g,...y){return l(g),f(g,...y)};}if(s&&typeof s.end=="function"){let f=s.end.bind(s);s.end=function(g,...y){return l(g),f(g,...y)};}let m=context.with(c,()=>n.handle());return {subscribe(f){return m.subscribe({next:g=>f.next?.(g),error:g=>{a("ERROR"),f.error?.(g);},complete:()=>{let g=s?.statusCode??200,y;if(d.length)try{y=Buffer.concat(d).subarray(0,p).toString("utf-8");}catch{}a(g>=400?"ERROR":"OK",{statusCode:g,body:y}),f.complete?.();}})},pipe(...f){return m.pipe(...f)}}}};});function to(e,t){let n=globalThis.Reflect;if(!n||typeof n.defineMetadata!="function")return;let r=typeof n.getOwnMetadataKeys=="function"?n.getOwnMetadataKeys:n.getMetadataKeys,o=typeof n.getOwnMetadata=="function"?n.getOwnMetadata:n.getMetadata;if(typeof r!="function"||typeof o!="function")return;let s=[];try{s=r.call(n,e)||[];}catch{return}for(let i of s)try{n.defineMetadata(i,o.call(n,i,e),t);}catch{}}function $e(e,t,n){let r=n?.include??Zr,o=n?.captureIO??true,s=new Set,i=0,c=[...t.getProviders(),...t.getControllers()];for(let a of c){let p=a?.instance;if(!p||typeof p!="object")continue;let d=p.constructor?.name??"";if(!r.test(d))continue;let u=Object.getPrototypeOf(p);if(!(!u||u===Object.prototype||s.has(u))){s.add(u);for(let l of Object.getOwnPropertyNames(u)){if(Qr.has(l))continue;let m=Object.getOwnPropertyDescriptor(u,l);if(!m||typeof m.value!="function"||m.get||m.set||m.value.__evalkitTraced)continue;let f=m.value,g=e.traceFunction(`${d}.${l}`,f,void 0,o);to(f,g);try{Object.defineProperty(g,"name",{value:l,configurable:!0});}catch{}try{Object.defineProperty(g,"length",{value:f.length,configurable:!0});}catch{}g.__evalkitTraced=true,Object.defineProperty(u,l,{...m,value:g}),i++;}}}return i}var Qr,Zr,Ge=b(()=>{Qr=new Set(["constructor","onModuleInit","onModuleDestroy","onApplicationBootstrap","onApplicationShutdown","beforeApplicationShutdown","configure","validate","authenticate","serializeUser","deserializeUser","canActivate","intercept","transform","catch","use"]),Zr=/(Service|Controller|Gateway|Resolver|Repository|UseCase|Handler)$/;});function Dt(e){return eo.some(t=>t.test(e))}function no(e,t,n){let r="",o="GET";if(typeof e=="string")r=e,o=(t?.method??"GET").toUpperCase();else if(e instanceof URL)r=e.href,o=(t?.method??"GET").toUpperCase();else {let i=e.hostname??e.host??"localhost",c=e.port?`:${e.port}`:"",a=e.path??"/";r=`${n}://${i}${c}${a}`,o=(e.method??t?.method??"GET").toUpperCase();}let s=r;try{s=new URL(r.startsWith("http")?r:`${n}://localhost${r}`).pathname;}catch{}return {url:r,method:o,pathname:s}}function He(e){let t,n;try{let s=typeof a<"u"?a:createRequire(import.meta.url);t=s("http"),n=s("https");}catch{return}let r=[{mod:t,scheme:"http"},{mod:n,scheme:"https"}];for(let{mod:s,scheme:i}of r){let a=function(p,d,u){let l=typeof d=="function"?void 0:d,{url:m,method:f,pathname:g}=no(p,l,i);if(Dt(m)||!trace.getActiveSpan()?.isRecording())return c.call(s,p,d,u);let h={...typeof p=="object"&&!(p instanceof URL)?p.headers??{}:{},...l?.headers??{}},v=h["x-evalkit-span-id"];if(v){typeof p=="object"&&!(p instanceof URL)&&p.headers&&delete p.headers["x-evalkit-span-id"],l?.headers&&delete l.headers["x-evalkit-span-id"];let S=J.get(String(v));if(S){let x=O({...h});delete x["x-evalkit-span-id"],Object.keys(x).length&&S.setAttributes({"http.request.headers":JSON.stringify(x)});}return c.call(s,p,d,u)}let k=O(h),R=e.tracer.startSpan(`${f} ${g}`,{kind:SpanKind.CLIENT,attributes:{"evalkit.span_type":"http_call","http.method":f,"http.url":m,...Object.keys(k).length?{"http.request.headers":JSON.stringify(k)}:{}}},context.active()),T=c.call(s,p,d,u),w=R.spanContext();return T.setHeader("traceparent",`00-${w.traceId}-${w.spanId}-01`),T.on("response",S=>{let x=S.statusCode??0;R.setAttributes({"http.status_code":x,...S.headers?{"http.response.headers":JSON.stringify(O(S.headers))}:{}}),R.setStatus({code:x>=400?SpanStatusCode.ERROR:SpanStatusCode.OK}),R.end();}),T.on("error",S=>{R.setAttributes({"http.status_code":0,"error.message":S.message}),R.recordException(S instanceof Error?S:new Error(String(S))),R.setStatus({code:SpanStatusCode.ERROR,message:S.message}),R.end();}),T};let c=s.request;c.__evalkit||(a.__evalkit=true,Object.defineProperty(s,"request",{value:a,writable:true,configurable:true}));}}function Ve(e){let t;try{t=(typeof a<"u"?a:createRequire(import.meta.url))("http");}catch{return}if(t.Server.prototype.emit.__evalkit_server)return;let n=t.Server.prototype.emit;function r(o,...s){if(o!=="request")return n.call(this,o,...s);let i=s[0],c=s[1],a=i.url??"/";if(Dt(a))return n.call(this,o,...s);if(trace.getActiveSpan()?.isRecording())return n.call(this,o,...s);let p=(i.method??"GET").toUpperCase(),d=a;try{d=new URL(a,"http://localhost").pathname;}catch{}let u=i.headers.traceparent,l=u?ro(Array.isArray(u)?u[0]:u):context.active(),m=e.tracer.startSpan(`${p} ${d}`,{kind:SpanKind.SERVER,attributes:{"evalkit.span_type":"http_call","http.method":p,"http.url":a,"http.request.headers":JSON.stringify(O(i.headers))}},l),f=trace.setSpan(l,m),g=m.spanContext();c.setHeader("x-trace-id",g.traceId),c.setHeader("traceparent",`00-${g.traceId}-${g.spanId}-01`);let y=e.options.maxBodyBytes;if(!String(i.headers["content-type"]??"").toLowerCase().includes("multipart/form-data")){let x=[],A=0;i.on("data",P=>{try{if(P&&A<y){let mt=Buffer.isBuffer(P)?P:typeof P=="string"?Buffer.from(P):null;mt&&mt.length&&(x.push(mt),A+=mt.length);}}catch{}}),i.on("end",()=>{if(x.length)try{let P=Buffer.concat(x).subarray(0,y).toString("utf-8");P&&m.setAttribute("http.request.body",P);}catch{}});}let k=[],R=0,T=x=>{try{if(x&&typeof x!="function"&&R<y){let A=Buffer.isBuffer(x)?x:typeof x=="string"?Buffer.from(x):null;A&&A.length&&(k.push(A),R+=A.length);}}catch{}},w=c.write.bind(c),S=c.end.bind(c);return c.write=function(x,...A){return T(x),w(x,...A)},c.end=function(x,...A){return T(x),S(x,...A)},c.on("finish",()=>{m.setAttribute("http.status_code",c.statusCode);try{let x=c.getHeaders();x&&Object.keys(x).length&&m.setAttribute("http.response.headers",JSON.stringify(O(x)));}catch{}if(k.length)try{let x=Buffer.concat(k).subarray(0,y).toString("utf-8");x&&m.setAttribute("http.response.body",x);}catch{}m.setStatus({code:c.statusCode>=400?SpanStatusCode.ERROR:SpanStatusCode.OK}),m.end();}),c.on("error",x=>{m.setAttribute("error.message",x.message),m.recordException(x instanceof Error?x:new Error(String(x))),m.setStatus({code:SpanStatusCode.ERROR,message:x.message}),m.end();}),context.with(f,()=>n.call(this,o,...s))}r.__evalkit_server=true,t.Server.prototype.emit=r;}function ro(e){let t=e.split("-");if(t.length<4)return context.active();let[,n,r,o]=t;if(!n||!r)return context.active();try{let s={traceId:n,spanId:r,isRemote:!0,traceFlags:parseInt(o??"01",16)};return trace.setSpanContext(context.active(),s)}catch{return context.active()}}function De(){if(typeof globalThis.fetch!="function"||globalThis.fetch.__evalkit)return;let e=globalThis.fetch.bind(globalThis);globalThis.fetch=async function(n,r){let o=typeof n=="string"?n:n instanceof URL?n.href:n.url;if(Dt(o))return e(n,r);let s=trace.getActiveSpan();if(!s?.isRecording())return e(n,r);let i=(r?.method??"GET").toUpperCase(),c=o;try{c=new URL(o).pathname;}catch{}let a={};r?.headers&&new Headers(r.headers).forEach((g,y)=>{a[y]=g;});let p=O(a),d=s.spanContext(),u=`00-${d.traceId}-${d.spanId}-01`,l=new Headers(r?.headers);l.set("traceparent",u);let m={...r,headers:l};Object.keys(p).length&&s.addEvent("http.fetch.request",{"http.method":i,"http.url":o,"http.request.headers":JSON.stringify(p)});try{let f=await e(n,m),g={};return f.headers.forEach((y,h)=>{g[h]=y;}),s.addEvent("http.fetch.response",{"http.url":o,"http.status_code":f.status,"http.response.headers":JSON.stringify(O(g))}),f}catch(f){throw s.addEvent("http.fetch.error",{"http.url":o,"error.message":f?.message??String(f),"error.stack":f?.stack??""}),f}},globalThis.fetch.__evalkit=true;}var eo,Fe=b(()=>{Pt();Mt();eo=[/\/v1\/ingest/,/\/health(z)?$/,/169\.254\./,/metadata\.google/,/storage\.googleapis/];});function ze(e){if(console.__evalkit)return;let t=console.log.bind(console),n=console.warn.bind(console),r=console.error.bind(console),o=i=>i.map(c=>{if(typeof c=="string")return c;if(c instanceof Error)return `${c.message}
|
|
12
|
+
${c.stack??""}`;try{return JSON.stringify(c)}catch{return String(c)}}).join(" ").slice(0,2e3),s=(i,c)=>{let a=trace.getActiveSpan();if(a?.isRecording())a.addEvent(`log.${i}`,{"log.level":i,"log.message":c});else {let p=e.tracer.startSpan(`log.${i}`,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":i,"log.message":c}},context.active());p.setStatus({code:i==="ERROR"?SpanStatusCode.ERROR:SpanStatusCode.OK}),p.end();}};console.log=(...i)=>{t(...i),s("INFO",o(i));},console.warn=(...i)=>{n(...i),s("WARN",o(i));},console.error=(...i)=>{r(...i),s("ERROR",o(i));},console.__evalkit=true;}var We=b(()=>{});function Ye(e,t,n){let r=trace.getActiveSpan();if(r?.isRecording())r.addEvent(t,{"error.message":n.message,"error.stack":n.stack??"","log.level":"ERROR","log.message":`${t}: ${n.message}`}),r.recordException(n),r.setStatus({code:SpanStatusCode.ERROR,message:n.message});else {let o=e.tracer.startSpan(t,{kind:SpanKind.INTERNAL,attributes:{"evalkit.span_type":"log","log.level":"ERROR","log.message":`${t}: ${n.message}`,"error.message":n.message,"error.stack":n.stack??""}},context.active());o.recordException(n),o.setStatus({code:SpanStatusCode.ERROR,message:n.message}),o.end();}}function Qe(e){typeof process>"u"||(process.on("unhandledRejection",t=>{let n=t instanceof Error?t:new Error(String(t));Ye(e,"error.unhandled_rejection",n);}),process.on("uncaughtException",t=>{Ye(e,"error.uncaught_exception",t instanceof Error?t:new Error(String(t)));}));}var Ze=b(()=>{});function lo(e){let t=n("mongoose");t&&vt(e,t);}function uo(e){let t=n("axios");t&&et(e,t.default??t);}async function mo(e){try{let n=o()("pg"),r=n.Client??n.default?.Client;if(r){nt(e,r);return}}catch{}try{let t=await m("pg"),n=t.Client??t.default?.Client;n&&nt(e,n);}catch{}}async function fo(e){try{let t=o(),n=t("mysql2"),r=n.Connection??n.default?.Connection??t("mysql2/lib/connection");if(r){rt(e,r);return}}catch{}try{let t=await m("mysql2"),n=t.Connection??t.default?.Connection;n&&rt(e,n);}catch{}}async function go(e){try{let n=o()("ioredis"),r=n.default??n.Redis??n;if(r?.prototype){tt(e,r);return}}catch{}try{let t=await m("ioredis"),n=t.default??t.Redis??t;n?.prototype&&tt(e,n);}catch{}}async function yo(e){try{let n=o()("openai"),o$1=(n.default??n.OpenAI??n)?.Chat?.Completions?.prototype;if(o$1){j(e,o$1);return}}catch{}try{let t=await m("openai"),r=(t.default??t.OpenAI??t)?.Chat?.Completions?.prototype;r&&j(e,r);}catch{}}async function ho(e){try{let n=o()("@anthropic-ai/sdk"),o$1=(n.default??n.Anthropic??n)?.Messages?.prototype;if(o$1){N(e,o$1);return}}catch{}try{let t=await m("@anthropic-ai/sdk"),r=(t.default??t.Anthropic??t)?.Messages?.prototype;r&&N(e,r);}catch{}}async function vo(e){try{let n=o()("@aws-sdk/client-bedrock-runtime"),o$1=(n.BedrockRuntimeClient??n.default?.BedrockRuntimeClient)?.prototype;if(o$1){ot(e,o$1);return}}catch{}try{let t=await m("@aws-sdk/client-bedrock-runtime"),r=(t.BedrockRuntimeClient??t.default?.BedrockRuntimeClient)?.prototype;r&&ot(e,r);}catch{}}async function xo(e){try{let n=o()("@anthropic-ai/sdk"),o$1=(n.AnthropicVertex??n.default?.AnthropicVertex)?.Messages?.prototype;if(o$1){pt(e,o$1);return}}catch{}try{let t=await m("@anthropic-ai/sdk"),r=(t.AnthropicVertex??t.default?.AnthropicVertex)?.Messages?.prototype;r&&pt(e,r);}catch{}}async function Co(e){try{let n=o()("@google-cloud/vertexai"),o$1=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o$1){lt(e,o$1);return}}catch{}try{let t=await m("@google-cloud/vertexai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&<(e,r);}catch{}}async function _o(e){try{let n=o()("cohere-ai"),o$1=(n.CohereClient??n.default?.CohereClient??n.default)?.prototype;if(o$1){st(e,o$1);return}}catch{}try{let t=await m("cohere-ai"),r=(t.CohereClient??t.default?.CohereClient??t.default)?.prototype;r&&st(e,r);}catch{}}async function ko(e){try{let n=o()("@google/generative-ai"),o$1=(n.GenerativeModel??n.default?.GenerativeModel)?.prototype;if(o$1){at(e,o$1);return}}catch{}try{let t=await m("@google/generative-ai"),r=(t.GenerativeModel??t.default?.GenerativeModel)?.prototype;r&&at(e,r);}catch{}}async function Ro(e){try{let n=o()("@google/genai"),r=n.Models??n.default?.Models;if(r?.prototype){ct(e,r.prototype);return}}catch{}try{let t=await m("@google/genai"),n=t.Models??t.default?.Models;n?.prototype&&ct(e,n.prototype);}catch{}}async function So(e){try{let n=o()("groq-sdk"),o$1=(n.default??n.Groq??n)?.Chat?.Completions?.prototype;if(o$1){j(e,o$1,void 0,"groq");return}}catch{}try{let t=await m("groq-sdk"),r=(t.default??t.Groq??t)?.Chat?.Completions?.prototype;r&&j(e,r,void 0,"groq");}catch{}}async function bo(e){try{let{patchLangChain:t}=await import('./langchain-CL5EBCAT.mjs');await t(e);}catch{}}function tn(e){try{Ve(e);}catch{}try{He(e);}catch{}De(),ze(e),Qe(e),lo(e),uo(e),Promise.all([yo(e),ho(e),vo(e),xo(e),Co(e),_o(e),ko(e),Ro(e),So(e),bo(e),mo(e),fo(e),go(e)]).catch(()=>{});}var en=b(()=>{p();Tt();ht();Bt();Ht();$t();Gt();Ut();It();jt();Nt();Kt();qt();Fe();We();Ze();});var Yt={};c(Yt,{EvalKitClient:()=>D,EvalKitInterceptor:()=>z,TraceMethod:()=>An,Traced:()=>In,createNestjsInterceptor:()=>Rn,currentTraceId:()=>qn,default:()=>To,enableNestjsAutoTrace:()=>Pn,evaluate:()=>L,expressMiddleware:()=>vn,fastifyPlugin:()=>xn,flush:()=>bn,generateScenarios:()=>jn,hapiPlugin:()=>kn,honoMiddleware:()=>_n,init:()=>nn,koaMiddleware:()=>Cn,langchainHandler:()=>dn,patchAnthropicClient:()=>on,patchAnthropicVertexClient:()=>an,patchAxiosClient:()=>gn,patchBedrockClient:()=>sn,patchCohereClient:()=>pn,patchGoogleAIModel:()=>ln,patchGoogleGenAIModels:()=>un,patchMongooseClient:()=>mn,patchMysql2Client:()=>hn,patchOpenAIClient:()=>rn,patchPgClient:()=>yn,patchRedisClient:()=>fn,patchVertexGenerativeModel:()=>cn,simulateUser:()=>Nn,startHttpTrace:()=>En,startSpan:()=>wn,startTrace:()=>Sn,traceFunction:()=>On,traceObject:()=>Kn,traceTool:()=>Tn,withTrace:()=>Mn});function _(){if(!$)throw new Error("[evalkit] call evalkit.init() before using the SDK");return $}function nn(e){return $&&$.destroy(),$=new D(e),tn($),$}function rn(e,t){j(_(),e.chat.completions,t);}function on(e,t){N(_(),e.messages,t);}function sn(e){ot(_(),e);}function an(e){pt(_(),e.messages);}function cn(e){lt(_(),e);}function pn(e){st(_(),e);}function ln(e){at(_(),e);}function un(e){ct(_(),e);}function dn(){return r(_())}function mn(e){vt(_(),e);}function fn(e){tt(_(),e);}function gn(e){et(_(),e);}function yn(e){nt(_(),e);}function hn(e){rt(_(),e);}function vn(e){return Te(_(),e)}function xn(e){return Ee(_(),e,Oo)}function Cn(e){return Ke(_(),e)}function _n(e){return qe(_(),e)}function kn(e){return Ne(_(),e)}function Rn(){return new z(_())}function Sn(e,t){return _().startTrace(e,t)}async function bn(){return _().flush()}function En(e,t,n){return _().startHttpTrace(e,t,n)}function wn(e,t,n){return _().startSpan(e,t,n)}function On(e,t,n,r=true){return _().traceFunction(e,t,n,r)}function Tn(e,t,n,r=true){return _().traceTool(e,t,n,r)}function An(e){return (t,n,r)=>{let o=r.value,s=e??`${t.constructor?.name??"unknown"}.${String(n)}`,i;return r.value=function(...c){return i||(i=_().traceFunction(s,o)),i.apply(this,c)},r}}function In(e){return t=>{let n=t.prototype,r=e?.prefix??t.name;for(let o of Object.getOwnPropertyNames(n)){if(o==="constructor")continue;let s=Object.getOwnPropertyDescriptor(n,o);if(!s||typeof s.value!="function")continue;let i=s.value,c=`${r}.${o}`,a=null;Object.defineProperty(n,o,{...s,value:function(...p){return a||(a=_().traceFunction(c,i)),a.apply(this,p)}});}return t}}function Kn(e,t){let n=_(),r=t?.prefix,o=t?.captureIO??true;for(let s of Object.keys(e)){let i=e[s];if(typeof i=="function"&&!i.__evalkitTraced){let c=r?`${r}.${s}`:s,a=n.traceFunction(c,i,void 0,o);a.__evalkitTraced=true,e[s]=a;}}return e}async function Pn(e,t){let n,r=e;if(typeof r.getProviders=="function"&&typeof r.getControllers=="function")n=e;else if(typeof r.get=="function")try{let s=await import('@nestjs/core');s.DiscoveryService&&(n=r.get(s.DiscoveryService));}catch(o){console.warn("[evalkit] enableNestjsAutoTrace: could not resolve DiscoveryService:",o?.message);}return n?$e(_(),n,t):0}function Mn(e,t){return context.with(e,t)}function qn(){let e=trace.getActiveSpan();return e?.isRecording()?e.spanContext().traceId:void 0}function jn(e){return te(_(),e)}function Nn(e){return ee(_(),e)}function Oo(e){return I(e)}var $,To,Qt=b(()=>{ft();ne();wt();F();Tt();ht();It();Kt();qt();jt();Nt();Bt();$t();Gt();Ut();t();Ht();we();Ae();Pe();je();Be();Vt();Ge();en();wt();Vt();ft();$=null;To={init:nn,evaluate:L,generateScenarios:jn,simulateUser:Nn,patchOpenAIClient:rn,patchAnthropicClient:on,patchBedrockClient:sn,patchAnthropicVertexClient:an,patchVertexGenerativeModel:cn,patchCohereClient:pn,patchGoogleAIModel:ln,patchGoogleGenAIModels:un,langchainHandler:dn,patchMongooseClient:mn,patchRedisClient:fn,patchAxiosClient:gn,patchPgClient:yn,patchMysql2Client:hn,expressMiddleware:vn,fastifyPlugin:xn,koaMiddleware:Cn,honoMiddleware:_n,hapiPlugin:kn,createNestjsInterceptor:Rn,startTrace:Sn,startHttpTrace:En,startSpan:wn,traceFunction:On,traceTool:Tn,traceObject:Kn,TraceMethod:An,Traced:In,enableNestjsAutoTrace:Pn,withTrace:Mn,currentTraceId:qn,flush:bn};});Qt();export{D as EvalKitClient,z as EvalKitInterceptor,An as TraceMethod,In as Traced,Rn as createNestjsInterceptor,qn as currentTraceId,To as default,Pn as enableNestjsAutoTrace,L as evaluate,vn as expressMiddleware,xn as fastifyPlugin,bn as flush,jn as generateScenarios,kn as hapiPlugin,_n as honoMiddleware,nn as init,Cn as koaMiddleware,dn as langchainHandler,on as patchAnthropicClient,an as patchAnthropicVertexClient,gn as patchAxiosClient,sn as patchBedrockClient,pn as patchCohereClient,ln as patchGoogleAIModel,un as patchGoogleGenAIModels,mn as patchMongooseClient,hn as patchMysql2Client,rn as patchOpenAIClient,yn as patchPgClient,fn as patchRedisClient,cn as patchVertexGenerativeModel,Nn as simulateUser,En as startHttpTrace,wn as startSpan,Sn as startTrace,On as traceFunction,Kn as traceObject,Tn as traceTool,Mn as withTrace};
|
package/package.json
CHANGED