@lelemondev/sdk 0.9.6 → 0.9.8
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/README.md +102 -1
- package/dist/anthropic.d.mts +2 -2
- package/dist/anthropic.d.ts +2 -2
- package/dist/anthropic.js +2 -2
- package/dist/anthropic.mjs +2 -2
- package/dist/bedrock.d.mts +2 -2
- package/dist/bedrock.d.ts +2 -2
- package/dist/bedrock.js +2 -2
- package/dist/bedrock.mjs +2 -2
- package/dist/{capture-ChybLulj.d.mts → capture-CiUL-4hv.d.mts} +82 -9
- package/dist/{capture-ChybLulj.d.ts → capture-CiUL-4hv.d.ts} +82 -9
- package/dist/gemini.d.mts +2 -2
- package/dist/gemini.d.ts +2 -2
- package/dist/gemini.js +2 -2
- package/dist/gemini.mjs +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/dist/openai.d.mts +2 -2
- package/dist/openai.d.ts +2 -2
- package/dist/openai.js +2 -2
- package/dist/openai.mjs +2 -2
- package/dist/openrouter.d.mts +2 -2
- package/dist/openrouter.d.ts +2 -2
- package/dist/openrouter.js +2 -2
- package/dist/openrouter.mjs +2 -2
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { O as ObserveOptions } from './capture-
|
|
2
|
-
export { C as CaptureSpanOptions, L as LelemonConfig, P as ProviderName, b as SDKTelemetry, S as ServiceConfig, h as SpanOptions, d as SpanType, T as TraceContext, e as TraceOptions, c as captureSpan, f as flush, g as getTraceContext, i as init, a as isEnabled, s as span, t as trace } from './capture-
|
|
1
|
+
import { O as ObserveOptions } from './capture-CiUL-4hv.js';
|
|
2
|
+
export { C as CaptureSpanOptions, L as LelemonConfig, P as ProviderName, b as SDKTelemetry, S as ServiceConfig, h as SpanOptions, d as SpanType, T as TraceContext, e as TraceOptions, c as captureSpan, f as flush, g as getTraceContext, i as init, a as isEnabled, s as span, t as trace } from './capture-CiUL-4hv.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Observe Function
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
'use strict';var async_hooks=require('async_hooks');/* @lelemondev/sdk - LLM Observability */
|
|
2
|
-
var Ue=Object.defineProperty;var qe=(e,n,t)=>n in e?Ue(e,n,{enumerable:true,configurable:true,writable:true,value:t}):e[n]=t;var X=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,t)=>(typeof require<"u"?require:n)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Ne=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var P=(e,n,t)=>qe(e,typeof n!="symbol"?n+"":n,t);var se=Ne((dt,Fe)=>{Fe.exports={name:"@lelemondev/sdk",version:"0.9.6",description:"Automatic LLM observability. Wrap your client, everything is traced.",author:"Lelemon <info@lelemon.dev>",license:"MIT",repository:{type:"git",url:"git+https://github.com/lelemondev/lelemondev-sdk.git"},homepage:"https://lelemon.dev",bugs:{url:"https://github.com/lelemondev/lelemondev-sdk/issues"},keywords:["llm","observability","tracing","openai","anthropic","nextjs","lambda","express","hono","claude","gpt","ai","monitoring","serverless"],main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./openai":{types:"./dist/openai.d.ts",import:"./dist/openai.mjs",require:"./dist/openai.js"},"./anthropic":{types:"./dist/anthropic.d.ts",import:"./dist/anthropic.mjs",require:"./dist/anthropic.js"},"./bedrock":{types:"./dist/bedrock.d.ts",import:"./dist/bedrock.mjs",require:"./dist/bedrock.js"},"./gemini":{types:"./dist/gemini.d.ts",import:"./dist/gemini.mjs",require:"./dist/gemini.js"},"./openrouter":{types:"./dist/openrouter.d.ts",import:"./dist/openrouter.mjs",require:"./dist/openrouter.js"},"./next":{types:"./dist/next.d.ts",import:"./dist/next.mjs",require:"./dist/next.js"},"./lambda":{types:"./dist/lambda.d.ts",import:"./dist/lambda.mjs",require:"./dist/lambda.js"},"./express":{types:"./dist/express.d.ts",import:"./dist/express.mjs",require:"./dist/express.js"},"./hono":{types:"./dist/hono.d.ts",import:"./dist/hono.mjs",require:"./dist/hono.js"},"./integrations":{types:"./dist/integrations.d.ts",import:"./dist/integrations.mjs",require:"./dist/integrations.js"},"./package.json":"./package.json"},typesVersions:{"*":{openai:["./dist/openai.d.ts"],anthropic:["./dist/anthropic.d.ts"],bedrock:["./dist/bedrock.d.ts"],gemini:["./dist/gemini.d.ts"],openrouter:["./dist/openrouter.d.ts"],next:["./dist/next.d.ts"],lambda:["./dist/lambda.d.ts"],express:["./dist/express.d.ts"],hono:["./dist/hono.d.ts"],integrations:["./dist/integrations.d.ts"],"*":["./dist/index.d.ts"]}},files:["dist/**/*.js","dist/**/*.mjs","dist/**/*.d.ts","dist/**/*.d.mts","README.md"],sideEffects:false,engines:{node:">=18.0.0"},scripts:{build:"tsup",dev:"tsup --watch",docs:"typedoc && node scripts/generate-llms-txt.mjs",prepublishOnly:"npm run build",lint:"eslint src/",test:"vitest","test:run":"vitest run","test:coverage":"vitest run --coverage","test:e2e":"vitest run tests/e2e",typecheck:"tsc --noEmit"},devDependencies:{"@aws-sdk/client-bedrock-runtime":"^3.962.0","@google/generative-ai":"^0.24.1","@types/node":"^20.0.0","@vitest/coverage-v8":"^2.0.0",dotenv:"^17.2.3",openai:"^6.15.0",tsup:"^8.5.1",typedoc:"^0.28.15",typescript:"^5.9.3",vitest:"^2.0.0"}};});var Q=false;function Z(e){Q=e;}function S(){return Q?true:$e("LELEMON_DEBUG")==="true"}var b="[Lelemon]";function w(e,n){S()&&K("debug",e,n);}function $(e,n){S()&&K("info",e,n);}function B(e,n){K("warn",e,n);}function L(e,n,t,o){S()&&console.log(`${b} Captured trace: provider=${e} model=${n} duration=${t}ms status=${o}`);}function G(e,n){console.error(`${b} Failed to capture trace: provider=${e} error=${n.message}`);}function _(e){S()&&console.log(`${b} Wrapped client: provider=${e}`);}function ee(e,n){S()&&console.log(`${b} Sending batch: count=${e} endpoint=${n}`);}function ne(e,n){S()&&console.log(`${b} Batch sent successfully: count=${e} duration=${n}ms`);}function te(e,n){let t=n instanceof Error?n.message:String(n);console.error(`${b} Batch send failed: count=${e} error=${t}`);}function re(e,n,t){S()&&console.log(`${b} Request: ${e} ${n} (${t} bytes)`);}function oe(e,n){S()&&console.log(`${b} Response: status=${e} duration=${n}ms`);}function K(e,n,t){let o=e==="error"?console.error:e==="warn"?console.warn:console.log;t!==void 0?o(`${b} ${n}`,t):o(`${b} ${n}`);}function $e(e){if(typeof process<"u"&&process.env)return process.env[e]}var Le=10,Ke=1e3,Je=1e4,j=class{constructor(n){P(this,"config");P(this,"queue",[]);P(this,"flushPromise",null);P(this,"flushTimer",null);this.config={apiKey:n.apiKey,endpoint:n.endpoint,debug:n.debug,disabled:n.disabled,batchSize:n.batchSize??Le,flushIntervalMs:n.flushIntervalMs??Ke,requestTimeoutMs:n.requestTimeoutMs??Je};}isEnabled(){return !this.config.disabled&&!!this.config.apiKey}enqueue(n){this.config.disabled||(this.queue.push(n),this.queue.length>=this.config.batchSize?this.flush():this.scheduleFlush());}async flush(){if(this.flushPromise)return this.flushPromise;if(this.queue.length===0)return;this.cancelScheduledFlush();let n=this.queue;return this.queue=[],this.flushPromise=this.sendBatch(n).finally(()=>{this.flushPromise=null;}),this.flushPromise}getPendingCount(){return this.queue.length}scheduleFlush(){this.flushTimer===null&&(this.flushTimer=setTimeout(()=>{this.flushTimer=null,this.flush();},this.config.flushIntervalMs));}cancelScheduledFlush(){this.flushTimer!==null&&(clearTimeout(this.flushTimer),this.flushTimer=null);}async sendBatch(n){if(n.length===0)return;let t=Date.now();ee(n.length,`${this.config.endpoint}/api/v1/ingest`);try{await this.request("POST","/api/v1/ingest",{events:n}),ne(n.length,Date.now()-t);}catch(o){te(n.length,o);}}async request(n,t,o){let r=`${this.config.endpoint}${t}`,s=new AbortController,a=o?JSON.stringify(o):void 0;re(n,r,a?.length??0);let u=setTimeout(()=>{s.abort();},this.config.requestTimeoutMs),c=Date.now();try{let i=await fetch(r,{method:n,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`},body:a,signal:s.signal});if(clearTimeout(u),oe(i.status,Date.now()-c),!i.ok){let l=await i.text().catch(()=>"Unknown error");throw new Error(`HTTP ${i.status}: ${l}`)}let d=await i.text();return d?JSON.parse(d):{}}catch(i){throw clearTimeout(u),i instanceof Error&&i.name==="AbortError"?new Error(`Request timeout after ${this.config.requestTimeoutMs}ms`):i}}};var ze="@lelemondev/sdk",Ve="nodejs";function He(){return typeof process<"u"&&process.versions?.node?{name:"nodejs",version:process.versions.node}:typeof Deno<"u"?{name:"deno",version:Deno.version?.deno??"unknown"}:typeof Bun<"u"?{name:"bun",version:Bun.version??"unknown"}:typeof window<"u"&&typeof navigator<"u"?{name:"browser",version:navigator.userAgent}:null}function We(){if(typeof process<"u"&&process.platform){let e=process.platform;switch(e){case "darwin":return "darwin";case "win32":return "windows";case "linux":return "linux";default:return e}}if(typeof navigator<"u"){let e=navigator.userAgent.toLowerCase();if(e.includes("mac"))return "darwin";if(e.includes("win"))return "windows";if(e.includes("linux"))return "linux"}return null}function Ye(){try{if(typeof X<"u")return se().version??"unknown"}catch{}return "unknown"}var E=null;function ie(e){if(!E){let t=He(),o=We();E={"telemetry.sdk.name":ze,"telemetry.sdk.version":Ye(),"telemetry.sdk.language":Ve},t&&(E["process.runtime.name"]=t.name,E["process.runtime.version"]=t.version),o&&(E["os.type"]=o);}let n={...E};return e?.name&&(n["service.name"]=e.name),e?.version&&(n["service.version"]=e.version),e?.environment&&(n["deployment.environment"]=e.environment),n}var F={},R=null,J=null,ue="https://api.lelemon.dev";function Qe(e={}){F=e,e.debug&&Z(true),J=ie(e.service),$("Initializing SDK",{endpoint:e.endpoint??ue,debug:e.debug??false,disabled:e.disabled??false,telemetry:J}),R=le(e),R.isEnabled()?$("SDK initialized - tracing enabled"):w("SDK initialized - tracing disabled (no API key or explicitly disabled)");}function ce(){return F}function U(){return J}function Ze(){return T().isEnabled()}function T(){return R||(R=le(F)),R}async function en(){R&&await R.flush();}function le(e){let n=e.apiKey??nn("LELEMON_API_KEY");return !n&&!e.disabled&&B("No API key provided. Set apiKey in init() or LELEMON_API_KEY env var. Tracing disabled."),new j({apiKey:n??"",endpoint:e.endpoint??ue,debug:e.debug??false,disabled:e.disabled??!n,batchSize:e.batchSize,flushIntervalMs:e.flushIntervalMs,requestTimeoutMs:e.requestTimeoutMs})}function nn(e){if(typeof process<"u"&&process.env)return process.env[e]}var z=Symbol.for("@lelemondev/sdk:globalContext");function pe(){let e=globalThis;return e[z]||(e[z]={context:{}}),e[z]}function me(e){pe().context=e,w("Global context updated",e);}function D(){return pe().context}function f(e){try{let n=T();if(!n.isEnabled()){w("Transport disabled, skipping trace capture");return}let t=D(),o=C(),r=M(),s=U(),a={provider:e.provider,model:e.model,input:H(e.input),rawResponse:e.rawResponse?A(e.rawResponse,0):void 0,durationMs:e.durationMs,status:e.status,streaming:e.streaming,firstTokenMs:e.firstTokenMs,sessionId:t.sessionId,userId:t.userId,traceId:o?.traceId,spanId:r,parentSpanId:o?.currentSpanId,metadata:{...t.metadata,...e.metadata,...o?{_traceName:o.name}:{},...s?{_telemetry:s}:{}},tags:t.tags,spanType:e.spanType,name:e.name};return L(e.provider,e.model,e.durationMs,e.status),n.enqueue(a),r}catch(n){G(e.provider,n instanceof Error?n:new Error(String(n)));return}}function m(e){try{let n=T();if(!n.isEnabled()){w("Transport disabled, skipping error capture");return}let t=D(),o=C(),r=U(),s={provider:e.provider,model:e.model,input:H(e.input),durationMs:e.durationMs,status:"error",errorMessage:e.error.message,streaming:e.streaming,sessionId:t.sessionId,userId:t.userId,traceId:o?.traceId,spanId:M(),parentSpanId:o?.currentSpanId,metadata:{...t.metadata,...e.metadata,...o?{_traceName:o.name}:{},...r?{_telemetry:r}:{}},tags:t.tags};L(e.provider,e.model,e.durationMs,"error"),w("Error details",{message:e.error.message,stack:e.error.stack}),n.enqueue(s);}catch(n){G(e.provider,n instanceof Error?n:new Error(String(n)));}}function V(e){try{let n=T();if(!n.isEnabled()){w("Transport disabled, skipping span capture");return}let t=D(),o=C(),r=e.metadata?._traceId,s=e.metadata?._parentSpanId,a=U(),u={...t.metadata,...e.metadata,...a?{_telemetry:a}:{}};delete u._traceId,delete u._parentSpanId;let c={spanType:e.type,name:e.name,provider:"unknown",model:e.name,input:H(e.input),output:A(e.output,0),durationMs:e.durationMs,status:e.status||"success",errorMessage:e.errorMessage,streaming:!1,sessionId:t.sessionId,userId:t.userId,traceId:r??o?.traceId,spanId:M(),parentSpanId:s??o?.currentSpanId,toolCallId:e.toolCallId,metadata:u,tags:t.tags};w(`Span captured: ${e.type}/${e.name}`,{durationMs:e.durationMs}),n.enqueue(c);}catch(n){G("unknown",n instanceof Error?n:new Error(String(n)));}}var de=1e5,tn=["api_key","apikey","password","secret","authorization"],rn=["access_token","auth_token","bearer_token","refresh_token","id_token","session_token"],on=["inputtokens","outputtokens","totaltokens","prompttokens","completiontokens","cachereadtokens","cachewritetokens","cachereadinputtokens","cachewriteinputtokens","reasoningtokens"];function sn(e){let n=e.toLowerCase();return on.includes(n)?false:!!(tn.some(t=>n.includes(t))||rn.some(t=>n.includes(t)))}function H(e){return A(e,0)}function A(e,n){if(n>10)return "[max depth exceeded]";if(e==null)return e;if(typeof e=="string")return e.length>de?e.slice(0,de)+"...[truncated]":e;if(typeof e=="number"||typeof e=="boolean")return e;if(Array.isArray(e))return e.map(t=>A(t,n+1));if(typeof e=="object"){let t={};for(let[o,r]of Object.entries(e))sn(o)?t[o]="[REDACTED]":t[o]=A(r,n+1);return t}return String(e)}var W=Symbol.for("@lelemondev/sdk:traceStorage");function un(){let e=globalThis;return e[W]||(e[W]=new async_hooks.AsyncLocalStorage),e[W]}var fe=un();function M(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function C(){return fe.getStore()}function k(e,n){let t=C();if(t)for(let o of e)t.pendingToolCalls.set(o,n),w(`Registered tool call ${o} \u2192 LLM span ${n}`);}function cn(e){let n=C();if(n)return e&&n.pendingToolCalls.has(e)?n.pendingToolCalls.get(e):n.currentSpanId}function ln(e){let n=C();n&&n.pendingToolCalls.delete(e);}async function dn(e,n){let t=typeof e=="string"?{name:e}:e,o=C(),r=o?.traceId??M(),s=M(),a={traceId:r,rootSpanId:s,currentSpanId:s,parentSpanId:o?.currentSpanId,name:t.name,startTime:Date.now(),input:t.input,metadata:t.metadata,tags:t.tags,pendingToolCalls:new Map};return fe.run(a,async()=>{let u,c;try{return u=await n(),u}catch(i){throw c=i instanceof Error?i:new Error(String(i)),i}finally{pn(a,c?void 0:u,c);}})}function pn(e,n,t){let o=T();if(!o.isEnabled()){w("Transport disabled, skipping root span");return}let r=D(),s=Date.now()-e.startTime,a=t?null:n,u={spanType:"agent",name:e.name,provider:"agent",model:e.name,traceId:e.traceId,spanId:e.rootSpanId,parentSpanId:e.parentSpanId,input:e.input,output:a,inputTokens:0,outputTokens:0,durationMs:s,status:t?"error":"success",errorMessage:t?.message,streaming:false,sessionId:r.sessionId,userId:r.userId,metadata:{...r.metadata,...e.metadata},tags:e.tags??r.tags};w(`Sending root span: ${e.name}`,{durationMs:s,hasError:!!t}),o.enqueue(u);}function mn(e){let n=C();if(!n){process.env.NODE_ENV!=="production"&&console.warn("[Lelemon] span() called outside of trace() - span will not be captured");return}let t=cn(e.toolCallId);V({type:e.type,name:e.name,input:e.input,output:e.output,durationMs:e.durationMs??0,status:e.status??"success",errorMessage:e.errorMessage,toolCallId:e.toolCallId,metadata:{...e.metadata,_traceId:n.traceId,_parentSpanId:t}}),e.toolCallId&&ln(e.toolCallId);}var h="openai";function ge(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="OpenAI")return true;let t=e;return !!(t.chat&&t.completions)||!!t.responses}function we(e){return async function(...t){let o=Date.now(),r=t[0]||{},s=r.stream===true;try{let a=await e(...t);if(s&&ke(a))return fn(a,r,o);let u=Date.now()-o,c=a,i=f({provider:h,model:r.model||c.model||"unknown",input:r.messages,rawResponse:a,durationMs:u,status:"success",streaming:!1});if(i){let d=Ce(c);d.length>0&&k(d,i);}return a}catch(a){let u=Date.now()-o;throw m({provider:h,model:r.model||"unknown",input:r.messages,error:a instanceof Error?a:new Error(String(a)),durationMs:u,streaming:s}),a}}}function ke(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}async function*fn(e,n,t){let o={choices:[{message:{content:"",tool_calls:[]},finish_reason:""}],usage:{prompt_tokens:0,completion_tokens:0}},r=null,s,a=false,u=new Map;try{for await(let c of e){let i=c,d=i?.choices?.[0]?.delta?.content;d&&(a||(a=!0,s=Date.now()-t),o.choices[0].message.content+=d);let l=i?.choices?.[0]?.delta?.tool_calls;if(l)for(let g of l){u.has(g.index)||u.set(g.index,{id:"",function:{name:"",arguments:""}});let N=u.get(g.index);g.id&&(N.id=g.id),g.function?.name&&(N.function.name=g.function.name),g.function?.arguments&&(N.function.arguments+=g.function.arguments);}let p=i?.choices?.[0]?.finish_reason;p&&(o.choices[0].finish_reason=p),i?.usage&&(o.usage=i.usage),yield c;}}catch(c){throw r=c instanceof Error?c:new Error(String(c)),c}finally{let c=Date.now()-t;if(u.size>0&&(o.choices[0].message.tool_calls=Array.from(u.entries()).sort((i,d)=>i[0]-d[0]).map(([,i])=>i)),r)m({provider:h,model:n.model||"unknown",input:n.messages,error:r,durationMs:c,streaming:true});else {let i=f({provider:h,model:n.model||"unknown",input:n.messages,rawResponse:o,durationMs:c,status:"success",streaming:true,firstTokenMs:s});if(i){let d=Ce(o);d.length>0&&k(d,i);}}}}function ye(e){return async function(...t){let o=Date.now(),r=t[0]||{},s=r.stream===true;try{let a=await e(...t);if(s&&ke(a))return gn(a,r,o);let u=Date.now()-o;return f({provider:h,model:r.model||"unknown",input:{instructions:r.instructions,input:r.input},rawResponse:a,durationMs:u,status:"success",streaming:!1}),a}catch(a){let u=Date.now()-o;throw m({provider:h,model:r.model||"unknown",input:{instructions:r.instructions,input:r.input},error:a instanceof Error?a:new Error(String(a)),durationMs:u,streaming:s}),a}}}async function*gn(e,n,t){let o=[],r=null,s=null;try{for await(let a of e){o.push(a);let u=a;u.type==="response.done"&&u.response&&(r=u.response),yield a;}}catch(a){throw s=a instanceof Error?a:new Error(String(a)),a}finally{let a=Date.now()-t;s?m({provider:h,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},error:s,durationMs:a,streaming:true}):f({provider:h,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},rawResponse:r||{streamEvents:o},durationMs:a,status:"success",streaming:true});}}function he(e){return async function(...t){let o=Date.now(),r=t[0]||{};try{let s=await e(...t),a=Date.now()-o;return f({provider:h,model:r.model||"unknown",input:r.prompt,rawResponse:s,durationMs:a,status:"success",streaming:!1}),s}catch(s){let a=Date.now()-o;throw m({provider:h,model:r.model||"unknown",input:r.prompt,error:s instanceof Error?s:new Error(String(s)),durationMs:a,streaming:false}),s}}}function be(e){return async function(...t){let o=Date.now(),r=t[0]||{};try{let s=await e(...t),a=Date.now()-o;return f({provider:h,model:r.model||"unknown",input:r.input,rawResponse:s,durationMs:a,status:"success",streaming:!1,spanType:"embedding"}),s}catch(s){let a=Date.now()-o;throw m({provider:h,model:r.model||"unknown",input:r.input,error:s instanceof Error?s:new Error(String(s)),durationMs:a,streaming:false}),s}}}function Ce(e){let n=[],t=e.choices?.[0]?.message?.tool_calls;if(Array.isArray(t))for(let o of t)o.id&&n.push(o.id);return n}var x="anthropic";function ve(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="Anthropic")return true;let t=e;return !!(t.messages&&typeof t.messages=="object")}function Se(e){return async function(...t){let o=Date.now(),r=t[0]||{},s=r.stream===true;try{let a=await e(...t);if(s&&kn(a))return hn(a,r,o);let u=Date.now()-o,c=a,i=f({provider:x,model:r.model||c.model||"unknown",input:{system:r.system,messages:r.messages},rawResponse:a,durationMs:u,status:"success",streaming:!1});if(i&&c.content){let d=Y(c.content);d.length>0&&k(d,i);}return a}catch(a){let u=Date.now()-o;throw m({provider:x,model:r.model||"unknown",input:{system:r.system,messages:r.messages},error:a instanceof Error?a:new Error(String(a)),durationMs:u,streaming:s}),a}}}function Ie(e){return function(...t){let o=Date.now(),r=t[0]||{};try{let s=e(...t);return s&&typeof s=="object"?yn(s,r,o):s}catch(s){let a=Date.now()-o;throw m({provider:x,model:r.model||"unknown",input:{system:r.system,messages:r.messages},error:s instanceof Error?s:new Error(String(s)),durationMs:a,streaming:true}),s}}}function kn(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}function yn(e,n,t){let o=e;if(!o[Symbol.asyncIterator])return e;let r={content:[],usage:{input_tokens:0,output_tokens:0}},s=false,a,u=false,c=null,i=[],d=async function*(){try{for await(let l of o){if(l.type==="message_start"&&l.message&&(r.model=l.message.model,r.id=l.message.id,r.role=l.message.role,l.message.usage&&(r.usage={...l.message.usage})),l.type==="content_block_start"&&l.content_block&&(c=l.index??i.length,i[c]={...l.content_block},l.content_block.type==="text"&&(i[c].text=""),l.content_block.type==="thinking"&&(i[c].thinking="")),l.type==="content_block_delta"&&l.delta&&c!==null){let p=i[c];p&&(l.delta.text&&(u||(u=!0,a=Date.now()-t),p.type==="thinking"?p.thinking=(p.thinking||"")+l.delta.text:p.type==="text"&&(p.text=(p.text||"")+l.delta.text)),l.delta.partial_json&&p.type==="tool_use"&&(p._inputJson=(p._inputJson||"")+l.delta.partial_json));}if(l.type==="content_block_stop"&&c!==null){let p=i[c];if(p&&p.type==="tool_use"){let g=p._inputJson;if(g){try{p.input=JSON.parse(g);}catch{}delete p._inputJson;}}c=null;}l.type==="message_delta"&&(l.usage?.output_tokens&&(r.usage.output_tokens=l.usage.output_tokens),l.delta?.stop_reason&&(r.stop_reason=l.delta.stop_reason)),yield l;}}catch(l){if(!s){s=true;let p=Date.now()-t;m({provider:x,model:r.model||n.model||"unknown",input:{system:n.system,messages:n.messages},error:l instanceof Error?l:new Error(String(l)),durationMs:p,streaming:true});}throw l}finally{if(!s){s=true;let l=Date.now()-t;r.content=i.filter(Boolean);let p=f({provider:x,model:r.model||n.model||"unknown",input:{system:n.system,messages:n.messages},rawResponse:r,durationMs:l,status:"success",streaming:true,firstTokenMs:a});if(p&&r.content){let g=Y(r.content);g.length>0&&k(g,p);}}}};return new Proxy(e,{get(l,p,g){return p===Symbol.asyncIterator?()=>d()[Symbol.asyncIterator]():Reflect.get(l,p,g)}})}async function*hn(e,n,t){let o={content:[],usage:{input_tokens:0,output_tokens:0}},r=null,s,a=false,u=null,c=[];try{for await(let i of e){if(i.type==="message_start"&&i.message&&(o.model=i.message.model,o.id=i.message.id,o.role=i.message.role,i.message.usage&&(o.usage={...i.message.usage})),i.type==="content_block_start"&&i.content_block&&(u=i.index??c.length,c[u]={...i.content_block},i.content_block.type==="text"&&(c[u].text=""),i.content_block.type==="thinking"&&(c[u].thinking="")),i.type==="content_block_delta"&&i.delta&&u!==null){let d=c[u];d&&(i.delta.text&&(a||(a=!0,s=Date.now()-t),d.type==="thinking"?d.thinking=(d.thinking||"")+i.delta.text:d.type==="text"&&(d.text=(d.text||"")+i.delta.text)),i.delta.partial_json&&d.type==="tool_use"&&(d._inputJson=(d._inputJson||"")+i.delta.partial_json));}if(i.type==="content_block_stop"&&u!==null){let d=c[u];if(d&&d.type==="tool_use"){let l=d._inputJson;if(l){try{d.input=JSON.parse(l);}catch{}delete d._inputJson;}}u=null;}i.type==="message_delta"&&(i.usage?.output_tokens&&(o.usage.output_tokens=i.usage.output_tokens),i.delta?.stop_reason&&(o.stop_reason=i.delta.stop_reason)),yield i;}}catch(i){throw r=i instanceof Error?i:new Error(String(i)),i}finally{let i=Date.now()-t;if(o.content=c.filter(Boolean),r)m({provider:x,model:o.model||n.model||"unknown",input:{system:n.system,messages:n.messages},error:r,durationMs:i,streaming:true});else {let d=f({provider:x,model:o.model||n.model||"unknown",input:{system:n.system,messages:n.messages},rawResponse:o,durationMs:i,status:"success",streaming:true,firstTokenMs:s});if(d&&o.content){let l=Y(o.content);l.length>0&&k(l,d);}}}}function Y(e){let n=[];for(let t of e)t.type==="tool_use"&&t.id&&n.push(t.id);return n}var v="bedrock";function Re(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="BedrockRuntimeClient")return true;let t=e;return typeof t.send!="function"||!t.config||typeof t.config!="object"?false:"region"in t.config}function Te(e){let n=e;return new Proxy(n,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="send"&&typeof s=="function"?Cn(s.bind(t)):s}})}function Cn(e){return async function(t){switch(t.constructor?.name||""){case "ConverseCommand":return vn(e,t);case "ConverseStreamCommand":return Sn(e,t);case "InvokeModelCommand":return Rn(e,t);case "InvokeModelWithResponseStreamCommand":return Tn(e,t);default:return e(t)}}}async function vn(e,n){let t=Date.now(),o=n.input;try{let r=await e(n),s=Date.now()-t,a=f({provider:v,model:o.modelId||"unknown",input:{system:o.system,messages:o.messages},rawResponse:xe(r),durationMs:s,status:"success",streaming:!1});if(a){let u=_e(r);u.length>0&&k(u,a);}return r}catch(r){throw m({provider:v,model:o.modelId||"unknown",input:{system:o.system,messages:o.messages},error:r instanceof Error?r:new Error(String(r)),durationMs:Date.now()-t,streaming:false}),r}}async function Sn(e,n){let t=Date.now(),o=n.input;try{let r=await e(n);return r.stream?{...r,stream:In(r.stream,o,t)}:r}catch(r){throw m({provider:v,model:o.modelId||"unknown",input:{system:o.system,messages:o.messages},error:r instanceof Error?r:new Error(String(r)),durationMs:Date.now()-t,streaming:true}),r}}async function*In(e,n,t){let o={output:{message:{role:"assistant",content:[]}},usage:{inputTokens:0,outputTokens:0}},r=null,s,a=false,u=new Map,c=new Map;try{for await(let i of e){if(i.contentBlockStart){let d=i.contentBlockStart.contentBlockIndex;if(i.contentBlockStart.start?.toolUse){let l=i.contentBlockStart.start.toolUse;u.set(d,{toolUse:{toolUseId:l.toolUseId,name:l.name,input:{}}}),c.set(d,"");}else u.set(d,{text:""});}if(i.contentBlockDelta){let d=i.contentBlockDelta.contentBlockIndex,l=u.get(d);if(l&&i.contentBlockDelta.delta?.text&&(a||(a=!0,s=Date.now()-t),l.text=(l.text||"")+i.contentBlockDelta.delta.text),l?.toolUse&&i.contentBlockDelta.delta?.toolUse?.input){let p=c.get(d)||"";c.set(d,p+i.contentBlockDelta.delta.toolUse.input);}}if(i.contentBlockStop){let d=i.contentBlockStop.contentBlockIndex,l=u.get(d),p=c.get(d);if(l?.toolUse&&p)try{l.toolUse.input=JSON.parse(p);}catch{}}i.messageStop?.stopReason&&(o.stopReason=i.messageStop.stopReason),i.metadata?.usage&&(o.usage={inputTokens:i.metadata.usage.inputTokens||0,outputTokens:i.metadata.usage.outputTokens||0}),yield i;}}catch(i){throw r=i instanceof Error?i:new Error(String(i)),i}finally{let i=Date.now()-t,d=Array.from(u.entries()).sort((l,p)=>l[0]-p[0]).map(([,l])=>l);if(o.output.message.content=d,r)m({provider:v,model:n.modelId||"unknown",input:{system:n.system,messages:n.messages},error:r,durationMs:i,streaming:true});else {let l=f({provider:v,model:n.modelId||"unknown",input:{system:n.system,messages:n.messages},rawResponse:xe(o),durationMs:i,status:"success",streaming:true,firstTokenMs:s});if(l){let p=_e(o);p.length>0&&k(p,l);}}}}async function Rn(e,n){let t=Date.now(),o=n.input;try{let r=await e(n),s=Date.now()-t,a=_n(r.body);return f({provider:v,model:o.modelId||"unknown",input:O(o.body),rawResponse:a,durationMs:s,status:"success",streaming:!1}),r}catch(r){throw m({provider:v,model:o.modelId||"unknown",input:O(o.body),error:r instanceof Error?r:new Error(String(r)),durationMs:Date.now()-t,streaming:false}),r}}async function Tn(e,n){let t=Date.now(),o=n.input;try{let r=await e(n);return r.body?{...r,body:xn(r.body,o,t)}:r}catch(r){throw m({provider:v,model:o.modelId||"unknown",input:O(o.body),error:r instanceof Error?r:new Error(String(r)),durationMs:Date.now()-t,streaming:true}),r}}async function*xn(e,n,t){let o=[],r=null;try{for await(let s of e){if(s.chunk?.bytes){let a=En(s.chunk.bytes);a&&o.push(a);}yield s;}}catch(s){throw r=s instanceof Error?s:new Error(String(s)),s}finally{let s=Date.now()-t;r?m({provider:v,model:n.modelId||"unknown",input:O(n.body),error:r,durationMs:s,streaming:true}):f({provider:v,model:n.modelId||"unknown",input:O(n.body),rawResponse:{streamEvents:o},durationMs:s,status:"success",streaming:true});}}function xe(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function _e(e){let n=[],t=e.output?.message?.content;if(Array.isArray(t))for(let o of t)o.toolUse?.toolUseId&&n.push(o.toolUse.toolUseId);return n}function O(e){try{let n=typeof e=="string"?e:new TextDecoder().decode(e);return JSON.parse(n)}catch{return e}}function _n(e){try{let n=new TextDecoder().decode(e);return JSON.parse(n)}catch{return null}}function En(e){try{let n=new TextDecoder().decode(e);return JSON.parse(n)}catch{return null}}var I="gemini";function Ee(e){if(!e||typeof e!="object")return false;let n=e.constructor?.name;if(n==="GoogleGenerativeAI"||n==="GoogleGenAI")return true;let t=e;return !!(typeof t.getGenerativeModel=="function"||t.models&&typeof t.models.generate=="function")}function Me(e){let n=e;return new Proxy(n,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="getGenerativeModel"&&typeof s=="function"?Pn(s.bind(t)):s}})}function Pn(e){return function(t){let o=e(t);return An(o,t.model)}}function An(e,n){return new Proxy(e,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="generateContent"&&typeof s=="function"?Dn(s.bind(t),n):o==="generateContentStream"&&typeof s=="function"?On(s.bind(t),n):o==="startChat"&&typeof s=="function"?Bn(s.bind(t),n):s}})}function Dn(e,n){return async function(o){let r=Date.now(),s=Ae(o);try{let a=await e(o),u=Date.now()-r,c=De(a.response),i=f({provider:I,model:n,input:s,rawResponse:c,durationMs:u,status:"success",streaming:!1});if(i){let d=Oe(a.response);d.length>0&&k(d,i);}return a}catch(a){throw m({provider:I,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-r,streaming:false}),a}}}function On(e,n){return async function(o){let r=Date.now(),s=Ae(o);try{let a=await e(o),u=Pe(a.stream,n,s,r);return {...a,stream:u}}catch(a){throw m({provider:I,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-r,streaming:true}),a}}}async function*Pe(e,n,t,o){let r={candidates:[{content:{parts:[]}}]},s=null,a,u=false;try{for await(let c of e){try{let i=c.text();if(i){u||(u=!0,a=Date.now()-o);let d=r.candidates[0].content?.parts||[],l=d[d.length-1];l?.text!==void 0?l.text+=i:d.push({text:i});}}catch{}if(c.candidates?.[0]?.content?.parts)for(let i of c.candidates[0].content.parts)i.functionCall&&r.candidates[0].content?.parts?.push(i);c.usageMetadata&&(r.usageMetadata=c.usageMetadata),c.candidates?.[0]?.finishReason&&(r.candidates[0].finishReason=c.candidates[0].finishReason),yield c;}}catch(c){throw s=c instanceof Error?c:new Error(String(c)),c}finally{let c=Date.now()-o;if(s)m({provider:I,model:n,input:t,error:s,durationMs:c,streaming:true});else {let i=f({provider:I,model:n,input:t,rawResponse:r,durationMs:c,status:"success",streaming:true,firstTokenMs:a});if(i){let d=qn(r.candidates);d.length>0&&k(d,i);}}}}function Bn(e,n){return function(o){let r=e(o);return Gn(r,n)}}function Gn(e,n){return new Proxy(e,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="sendMessage"&&typeof s=="function"?jn(s.bind(t),n):o==="sendMessageStream"&&typeof s=="function"?Un(s.bind(t),n):s}})}function jn(e,n){return async function(o){let r=Date.now(),s=o;try{let a=await e(o),u=Date.now()-r,c=De(a.response),i=f({provider:I,model:n,input:s,rawResponse:c,durationMs:u,status:"success",streaming:!1});if(i){let d=Oe(a.response);d.length>0&&k(d,i);}return a}catch(a){throw m({provider:I,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-r,streaming:false}),a}}}function Un(e,n){return async function(o){let r=Date.now(),s=o;try{let a=await e(o),u=Pe(a.stream,n,s,r);return {...a,stream:u}}catch(a){throw m({provider:I,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-r,streaming:true}),a}}}function Ae(e){return typeof e=="string"?e:e.contents?e.contents:e}function De(e){return {candidates:e.candidates,usageMetadata:e.usageMetadata}}function Oe(e){let n=[],t=e.candidates?.[0]?.content?.parts;return t&&t.forEach((o,r)=>{o.functionCall?.name&&n.push(`gemini-fc-${o.functionCall.name}-${r}`);}),n}function qn(e){let n=[],t=e?.[0]?.content?.parts;return t&&t.forEach((o,r)=>{o.functionCall?.name&&n.push(`gemini-fc-${o.functionCall.name}-${r}`);}),n}var $n="openrouter.ai",q="openrouter";function Be(e){if(!e||typeof e!="object")return false;let n=e;return n.chat?.completions?.create?(n.baseURL||"").includes($n):false}function Ge(e){let n=e;return new Proxy(n,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="chat"&&s&&typeof s=="object"?Ln(s):s}})}function Ln(e){return e&&new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="completions"&&r&&typeof r=="object"?Kn(r):r}})}function Kn(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?Jn(r.bind(n)):r}})}function Jn(e){return async function(...t){let o=Date.now(),r=t[0]||{},s=r.stream===true;try{let a=await e(...t);if(s&&Fn(a))return zn(a,r,o);let u=Date.now()-o,c=a;return f({provider:q,model:r.model||c.model||"unknown",input:r.messages,rawResponse:a,durationMs:u,status:"success",streaming:!1}),a}catch(a){let u=Date.now()-o;throw m({provider:q,model:r.model||"unknown",input:r.messages,error:a instanceof Error?a:new Error(String(a)),durationMs:u,streaming:s}),a}}}function Fn(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}async function*zn(e,n,t){let o={choices:[{message:{content:"",role:"assistant"},finish_reason:""}],usage:{prompt_tokens:0,completion_tokens:0}},r=null,s,a=false;try{for await(let u of e){let c=u;!o.id&&c.id&&(o.id=c.id);let i=c.choices?.[0]?.delta?.content;i&&(a||(a=!0,s=Date.now()-t),o.choices[0].message.content+=i);let d=c.choices?.[0]?.finish_reason;d&&(o.choices[0].finish_reason=d),c.usage&&(o.usage=c.usage),yield u;}}catch(u){throw r=u instanceof Error?u:new Error(String(u)),u}finally{let u=Date.now()-t;r?m({provider:q,model:n.model||"unknown",input:n.messages,error:r,durationMs:u,streaming:true}):f({provider:q,model:n.model||"unknown",input:n.messages,rawResponse:o,durationMs:u,status:"success",streaming:true,firstTokenMs:s});}}function je(e,n){return n&&me(n),ce().disabled?(w("Tracing disabled, returning unwrapped client"),e):Be(e)?(_("openrouter"),Ge(e)):ge(e)?(_("openai"),Hn(e)):ve(e)?(_("anthropic"),et(e)):Re(e)?(_("bedrock"),Te(e)):Ee(e)?(_("gemini"),Me(e)):(B("Unknown client type. Tracing not enabled. Supported: OpenAI, OpenRouter, Anthropic, Bedrock, Gemini"),e)}function Hn(e){let n=e;return new Proxy(n,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="chat"&&s&&typeof s=="object"?Wn(s):o==="responses"&&s&&typeof s=="object"?Xn(s):o==="completions"&&s&&typeof s=="object"?Qn(s):o==="embeddings"&&s&&typeof s=="object"?Zn(s):s}})}function Wn(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="completions"&&r&&typeof r=="object"?Yn(r):r}})}function Yn(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?we(r.bind(n)):r}})}function Xn(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?ye(r.bind(n)):r}})}function Qn(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?he(r.bind(n)):r}})}function Zn(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?be(r.bind(n)):r}})}function et(e){let n=e;return new Proxy(n,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="messages"&&s&&typeof s=="object"?nt(s):s}})}function nt(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?Se(r.bind(n)):t==="stream"&&typeof r=="function"?Ie(r.bind(n)):r}})}function tt(e){return function(t,o){return je(t,{...e,...o})}}
|
|
3
|
-
exports.captureSpan=
|
|
2
|
+
var qe=Object.defineProperty;var $e=(e,n,t)=>n in e?qe(e,n,{enumerable:true,configurable:true,writable:true,value:t}):e[n]=t;var Z=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,t)=>(typeof require<"u"?require:n)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Le=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var A=(e,n,t)=>$e(e,typeof n!="symbol"?n+"":n,t);var ae=Le((wt,Ve)=>{Ve.exports={name:"@lelemondev/sdk",version:"0.9.8",description:"Automatic LLM observability. Wrap your client, everything is traced.",author:"Lelemon <info@lelemon.dev>",license:"MIT",repository:{type:"git",url:"git+https://github.com/lelemondev/lelemondev-sdk.git"},homepage:"https://lelemon.dev",bugs:{url:"https://github.com/lelemondev/lelemondev-sdk/issues"},keywords:["llm","observability","tracing","openai","anthropic","nextjs","lambda","express","hono","claude","gpt","ai","monitoring","serverless"],main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./openai":{types:"./dist/openai.d.ts",import:"./dist/openai.mjs",require:"./dist/openai.js"},"./anthropic":{types:"./dist/anthropic.d.ts",import:"./dist/anthropic.mjs",require:"./dist/anthropic.js"},"./bedrock":{types:"./dist/bedrock.d.ts",import:"./dist/bedrock.mjs",require:"./dist/bedrock.js"},"./gemini":{types:"./dist/gemini.d.ts",import:"./dist/gemini.mjs",require:"./dist/gemini.js"},"./openrouter":{types:"./dist/openrouter.d.ts",import:"./dist/openrouter.mjs",require:"./dist/openrouter.js"},"./next":{types:"./dist/next.d.ts",import:"./dist/next.mjs",require:"./dist/next.js"},"./lambda":{types:"./dist/lambda.d.ts",import:"./dist/lambda.mjs",require:"./dist/lambda.js"},"./express":{types:"./dist/express.d.ts",import:"./dist/express.mjs",require:"./dist/express.js"},"./hono":{types:"./dist/hono.d.ts",import:"./dist/hono.mjs",require:"./dist/hono.js"},"./integrations":{types:"./dist/integrations.d.ts",import:"./dist/integrations.mjs",require:"./dist/integrations.js"},"./package.json":"./package.json"},typesVersions:{"*":{openai:["./dist/openai.d.ts"],anthropic:["./dist/anthropic.d.ts"],bedrock:["./dist/bedrock.d.ts"],gemini:["./dist/gemini.d.ts"],openrouter:["./dist/openrouter.d.ts"],next:["./dist/next.d.ts"],lambda:["./dist/lambda.d.ts"],express:["./dist/express.d.ts"],hono:["./dist/hono.d.ts"],integrations:["./dist/integrations.d.ts"],"*":["./dist/index.d.ts"]}},files:["dist/**/*.js","dist/**/*.mjs","dist/**/*.d.ts","dist/**/*.d.mts","README.md"],sideEffects:false,engines:{node:">=18.0.0"},scripts:{build:"tsup",dev:"tsup --watch",docs:"typedoc && node scripts/generate-llms-txt.mjs",prepublishOnly:"npm run build",lint:"eslint src/",test:"vitest","test:run":"vitest run","test:coverage":"vitest run --coverage","test:e2e":"vitest run tests/e2e",typecheck:"tsc --noEmit"},devDependencies:{"@aws-sdk/client-bedrock-runtime":"^3.962.0","@google/generative-ai":"^0.24.1","@types/node":"^20.0.0","@vitest/coverage-v8":"^2.0.0",dotenv:"^17.2.3",openai:"^6.15.0",tsup:"^8.5.1",typedoc:"^0.28.15",typescript:"^5.9.3",vitest:"^2.0.0"}};});var Q=false;function ee(e){Q=e;}function I(){return Q?true:Ke("LELEMON_DEBUG")==="true"}var b="[Lelemon]";function w(e,n){I()&&J("debug",e,n);}function L(e,n){I()&&J("info",e,n);}function B(e,n){J("warn",e,n);}function K(e,n,t,r){I()&&console.log(`${b} Captured trace: provider=${e} model=${n} duration=${t}ms status=${r}`);}function j(e,n){console.error(`${b} Failed to capture trace: provider=${e} error=${n.message}`);}function _(e){I()&&console.log(`${b} Wrapped client: provider=${e}`);}function ne(e,n){I()&&console.log(`${b} Sending batch: count=${e} endpoint=${n}`);}function te(e,n){I()&&console.log(`${b} Batch sent successfully: count=${e} duration=${n}ms`);}function re(e,n){let t=n instanceof Error?n.message:String(n);console.error(`${b} Batch send failed: count=${e} error=${t}`);}function oe(e,n,t){I()&&console.log(`${b} Request: ${e} ${n} (${t} bytes)`);}function se(e,n){I()&&console.log(`${b} Response: status=${e} duration=${n}ms`);}function J(e,n,t){let r=e==="error"?console.error:e==="warn"?console.warn:console.log;t!==void 0?r(`${b} ${n}`,t):r(`${b} ${n}`);}function Ke(e){if(typeof process<"u"&&process.env)return process.env[e]}var Je=10,Fe=1e3,ze=1e4,G=class{constructor(n){A(this,"config");A(this,"queue",[]);A(this,"flushPromise",null);A(this,"flushTimer",null);this.config={apiKey:n.apiKey,endpoint:n.endpoint,debug:n.debug,disabled:n.disabled,batchSize:n.batchSize??Je,flushIntervalMs:n.flushIntervalMs??Fe,requestTimeoutMs:n.requestTimeoutMs??ze};}isEnabled(){return !this.config.disabled&&!!this.config.apiKey}enqueue(n){this.config.disabled||(this.queue.push(n),this.queue.length>=this.config.batchSize?this.flush():this.scheduleFlush());}async flush(){if(this.flushPromise)return this.flushPromise;if(this.queue.length===0)return;this.cancelScheduledFlush();let n=this.queue;return this.queue=[],this.flushPromise=this.sendBatch(n).finally(()=>{this.flushPromise=null;}),this.flushPromise}getPendingCount(){return this.queue.length}scheduleFlush(){this.flushTimer===null&&(this.flushTimer=setTimeout(()=>{this.flushTimer=null,this.flush();},this.config.flushIntervalMs));}cancelScheduledFlush(){this.flushTimer!==null&&(clearTimeout(this.flushTimer),this.flushTimer=null);}async sendBatch(n){if(n.length===0)return;let t=Date.now();ne(n.length,`${this.config.endpoint}/api/v1/ingest`);try{await this.request("POST","/api/v1/ingest",{events:n}),te(n.length,Date.now()-t);}catch(r){re(n.length,r);}}async request(n,t,r){let o=`${this.config.endpoint}${t}`,s=new AbortController,a=r?JSON.stringify(r):void 0;oe(n,o,a?.length??0);let u=setTimeout(()=>{s.abort();},this.config.requestTimeoutMs),c=Date.now();try{let i=await fetch(o,{method:n,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`},body:a,signal:s.signal});if(clearTimeout(u),se(i.status,Date.now()-c),!i.ok){let l=await i.text().catch(()=>"Unknown error");throw new Error(`HTTP ${i.status}: ${l}`)}let d=await i.text();return d?JSON.parse(d):{}}catch(i){throw clearTimeout(u),i instanceof Error&&i.name==="AbortError"?new Error(`Request timeout after ${this.config.requestTimeoutMs}ms`):i}}};var He="@lelemondev/sdk",We="nodejs";function Ye(){return typeof process<"u"&&process.versions?.node?{name:"nodejs",version:process.versions.node}:typeof Deno<"u"?{name:"deno",version:Deno.version?.deno??"unknown"}:typeof Bun<"u"?{name:"bun",version:Bun.version??"unknown"}:typeof window<"u"&&typeof navigator<"u"?{name:"browser",version:navigator.userAgent}:null}function Xe(){if(typeof process<"u"&&process.platform){let e=process.platform;switch(e){case "darwin":return "darwin";case "win32":return "windows";case "linux":return "linux";default:return e}}if(typeof navigator<"u"){let e=navigator.userAgent.toLowerCase();if(e.includes("mac"))return "darwin";if(e.includes("win"))return "windows";if(e.includes("linux"))return "linux"}return null}function Ze(){try{if(typeof Z<"u")return ae().version??"unknown"}catch{}return "unknown"}var E=null;function ue(e){if(!E){let t=Ye(),r=Xe();E={"telemetry.sdk.name":He,"telemetry.sdk.version":Ze(),"telemetry.sdk.language":We},t&&(E["process.runtime.name"]=t.name,E["process.runtime.version"]=t.version),r&&(E["os.type"]=r);}let n={...E};return e?.name&&(n["service.name"]=e.name),e?.version&&(n["service.version"]=e.version),e?.environment&&(n["deployment.environment"]=e.environment),n}var z={},T=null,F=null,ce="https://api.lelemon.dev";function en(e={}){z=e,e.debug&&ee(true),F=ue(e.service),L("Initializing SDK",{endpoint:e.endpoint??ce,debug:e.debug??false,disabled:e.disabled??false,telemetry:F}),T=le(e),T.isEnabled()?L("SDK initialized - tracing enabled"):w("SDK initialized - tracing disabled (no API key or explicitly disabled)");}function U(){return z}function N(){return F}function nn(){return R().isEnabled()}function R(){return T||(T=le(z)),T}async function tn(){T&&await T.flush();}function le(e){let n=e.apiKey??rn("LELEMON_API_KEY");return !n&&!e.disabled&&B("No API key provided. Set apiKey in init() or LELEMON_API_KEY env var. Tracing disabled."),new G({apiKey:n??"",endpoint:e.endpoint??ce,debug:e.debug??false,disabled:e.disabled??!n,batchSize:e.batchSize,flushIntervalMs:e.flushIntervalMs,requestTimeoutMs:e.requestTimeoutMs})}function rn(e){if(typeof process<"u"&&process.env)return process.env[e]}var V=Symbol.for("@lelemondev/sdk:globalContext");function fe(){let e=globalThis;return e[V]||(e[V]={context:{}}),e[V]}function me(e){fe().context=e,w("Global context updated",e);}function D(){return fe().context}function m(e){try{let n=R();if(!n.isEnabled()){w("Transport disabled, skipping trace capture");return}let t=D(),r=C(),o=M(),s=N(),a={provider:e.provider,model:e.model,input:W(e.input),rawResponse:e.rawResponse?P(e.rawResponse,0):void 0,durationMs:e.durationMs,status:e.status,streaming:e.streaming,firstTokenMs:e.firstTokenMs,sessionId:r?.sessionId??t.sessionId,userId:r?.userId??t.userId,traceId:r?.traceId,spanId:o,parentSpanId:r?.currentSpanId,metadata:{...t.metadata,...e.metadata,...r?{_traceName:r.name}:{},...s?{_telemetry:s}:{}},tags:t.tags,spanType:e.spanType,name:e.name};return K(e.provider,e.model,e.durationMs,e.status),n.enqueue(a),o}catch(n){j(e.provider,n instanceof Error?n:new Error(String(n)));return}}function f(e){try{let n=R();if(!n.isEnabled()){w("Transport disabled, skipping error capture");return}let t=D(),r=C(),o=N(),s={provider:e.provider,model:e.model,input:W(e.input),durationMs:e.durationMs,status:"error",errorMessage:e.error.message,streaming:e.streaming,sessionId:r?.sessionId??t.sessionId,userId:r?.userId??t.userId,traceId:r?.traceId,spanId:M(),parentSpanId:r?.currentSpanId,metadata:{...t.metadata,...e.metadata,...r?{_traceName:r.name}:{},...o?{_telemetry:o}:{}},tags:t.tags};K(e.provider,e.model,e.durationMs,"error"),w("Error details",{message:e.error.message,stack:e.error.stack}),n.enqueue(s);}catch(n){j(e.provider,n instanceof Error?n:new Error(String(n)));}}function H(e){try{let n=R();if(!n.isEnabled()){w("Transport disabled, skipping span capture");return}let t=D(),r=C(),o=e.metadata?._traceId,s=e.metadata?._parentSpanId,a=N(),u={...t.metadata,...e.metadata,...a?{_telemetry:a}:{}};delete u._traceId,delete u._parentSpanId;let c={spanType:e.type,name:e.name,provider:"unknown",model:e.name,input:W(e.input),output:P(e.output,0),durationMs:e.durationMs,status:e.status||"success",errorMessage:e.errorMessage,streaming:!1,sessionId:r?.sessionId??t.sessionId,userId:r?.userId??t.userId,traceId:o??r?.traceId,spanId:M(),parentSpanId:s??r?.currentSpanId,toolCallId:e.toolCallId,metadata:u,tags:t.tags};w(`Span captured: ${e.type}/${e.name}`,{durationMs:e.durationMs}),n.enqueue(c);}catch(n){j("unknown",n instanceof Error?n:new Error(String(n)));}}var de=1e5,on=["api_key","apikey","password","secret","authorization"],sn=["access_token","auth_token","bearer_token","refresh_token","id_token","session_token"],an=["inputtokens","outputtokens","totaltokens","prompttokens","completiontokens","cachereadtokens","cachewritetokens","cachereadinputtokens","cachewriteinputtokens","reasoningtokens"],pe={emails:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,phones:/\b\d{9,}\b/g};function ge(){return U().redaction??{}}function un(e){let n=e.toLowerCase();return an.includes(n)?false:!!(on.some(r=>n.includes(r))||sn.some(r=>n.includes(r))||(ge().keys??[]).some(r=>n.includes(r.toLowerCase())))}function cn(e){let n=ge(),t=e;for(let r of n.patterns??[])r.lastIndex=0,t=t.replace(r,"[REDACTED]");return n.emails&&(t=t.replace(pe.emails,"[EMAIL]")),n.phones&&(t=t.replace(pe.phones,"[PHONE]")),t}function W(e){return P(e,0)}function P(e,n){if(n>10)return "[max depth exceeded]";if(e==null)return e;if(typeof e=="string"){let t=cn(e);return t.length>de&&(t=t.slice(0,de)+"...[truncated]"),t}if(typeof e=="number"||typeof e=="boolean")return e;if(Array.isArray(e))return e.map(t=>P(t,n+1));if(typeof e=="object"){let t={};for(let[r,o]of Object.entries(e))un(r)?t[r]="[REDACTED]":t[r]=P(o,n+1);return t}return String(e)}var Y=Symbol.for("@lelemondev/sdk:traceStorage");function dn(){let e=globalThis;return e[Y]||(e[Y]=new async_hooks.AsyncLocalStorage),e[Y]}var we=dn();function M(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function C(){return we.getStore()}function k(e,n){let t=C();if(t)for(let r of e)t.pendingToolCalls.set(r,n),w(`Registered tool call ${r} \u2192 LLM span ${n}`);}function pn(e){let n=C();if(n)return e&&n.pendingToolCalls.has(e)?n.pendingToolCalls.get(e):n.currentSpanId}function fn(e){let n=C();n&&n.pendingToolCalls.delete(e);}async function mn(e,n){let t=typeof e=="string"?{name:e}:e,r=C(),o=r?.traceId??M(),s=M(),a={traceId:o,rootSpanId:s,currentSpanId:s,parentSpanId:r?.currentSpanId,name:t.name,startTime:Date.now(),input:t.input,metadata:t.metadata,tags:t.tags,outputKey:t.outputKey,outputTransform:t.outputTransform,sessionId:t.sessionId,userId:t.userId,pendingToolCalls:new Map};return we.run(a,async()=>{let u,c;try{return u=await n(),u}catch(i){throw c=i instanceof Error?i:new Error(String(i)),i}finally{kn(a,c?void 0:u,c);}})}var gn=["text","content","message","output","response","result","answer"];function wn(e,n,t){if(t)try{return t(e)}catch{return e}if(n===false)return e;if(typeof n=="string"&&e&&typeof e=="object"){let o=e;return n in o?o[n]:e}if(e==null||typeof e!="object"||Array.isArray(e))return e;let r=e;for(let o of gn)if(o in r&&typeof r[o]=="string")return r[o];return e}function kn(e,n,t){let r=R();if(!r.isEnabled()){w("Transport disabled, skipping root span");return}let o=D(),s=Date.now()-e.startTime,a=t?null:wn(n,e.outputKey,e.outputTransform),u={spanType:"agent",name:e.name,provider:"agent",model:e.name,traceId:e.traceId,spanId:e.rootSpanId,parentSpanId:e.parentSpanId,input:e.input,output:a,inputTokens:0,outputTokens:0,durationMs:s,status:t?"error":"success",errorMessage:t?.message,streaming:false,sessionId:e.sessionId??o.sessionId,userId:e.userId??o.userId,metadata:{...o.metadata,...e.metadata},tags:e.tags??o.tags};w(`Sending root span: ${e.name}`,{durationMs:s,hasError:!!t}),r.enqueue(u);}function yn(e){let n=C();if(!n){process.env.NODE_ENV!=="production"&&console.warn("[Lelemon] span() called outside of trace() - span will not be captured");return}let t=pn(e.toolCallId);H({type:e.type,name:e.name,input:e.input,output:e.output,durationMs:e.durationMs??0,status:e.status??"success",errorMessage:e.errorMessage,toolCallId:e.toolCallId,metadata:{...e.metadata,_traceId:n.traceId,_parentSpanId:t}}),e.toolCallId&&fn(e.toolCallId);}var h="openai";function ke(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="OpenAI")return true;let t=e;return !!(t.chat&&t.completions)||!!t.responses}function ye(e){return async function(...t){let r=Date.now(),o=t[0]||{},s=o.stream===true;try{let a=await e(...t);if(s&&he(a))return hn(a,o,r);let u=Date.now()-r,c=a,i=m({provider:h,model:o.model||c.model||"unknown",input:o.messages,rawResponse:a,durationMs:u,status:"success",streaming:!1});if(i){let d=Ie(c);d.length>0&&k(d,i);}return a}catch(a){let u=Date.now()-r;throw f({provider:h,model:o.model||"unknown",input:o.messages,error:a instanceof Error?a:new Error(String(a)),durationMs:u,streaming:s}),a}}}function he(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}async function*hn(e,n,t){let r={choices:[{message:{content:"",tool_calls:[]},finish_reason:""}],usage:{prompt_tokens:0,completion_tokens:0}},o=null,s,a=false,u=new Map;try{for await(let c of e){let i=c,d=i?.choices?.[0]?.delta?.content;d&&(a||(a=!0,s=Date.now()-t),r.choices[0].message.content+=d);let l=i?.choices?.[0]?.delta?.tool_calls;if(l)for(let g of l){u.has(g.index)||u.set(g.index,{id:"",function:{name:"",arguments:""}});let $=u.get(g.index);g.id&&($.id=g.id),g.function?.name&&($.function.name=g.function.name),g.function?.arguments&&($.function.arguments+=g.function.arguments);}let p=i?.choices?.[0]?.finish_reason;p&&(r.choices[0].finish_reason=p),i?.usage&&(r.usage=i.usage),yield c;}}catch(c){throw o=c instanceof Error?c:new Error(String(c)),c}finally{let c=Date.now()-t;if(u.size>0&&(r.choices[0].message.tool_calls=Array.from(u.entries()).sort((i,d)=>i[0]-d[0]).map(([,i])=>i)),o)f({provider:h,model:n.model||"unknown",input:n.messages,error:o,durationMs:c,streaming:true});else {let i=m({provider:h,model:n.model||"unknown",input:n.messages,rawResponse:r,durationMs:c,status:"success",streaming:true,firstTokenMs:s});if(i){let d=Ie(r);d.length>0&&k(d,i);}}}}function be(e){return async function(...t){let r=Date.now(),o=t[0]||{},s=o.stream===true;try{let a=await e(...t);if(s&&he(a))return bn(a,o,r);let u=Date.now()-r;return m({provider:h,model:o.model||"unknown",input:{instructions:o.instructions,input:o.input},rawResponse:a,durationMs:u,status:"success",streaming:!1}),a}catch(a){let u=Date.now()-r;throw f({provider:h,model:o.model||"unknown",input:{instructions:o.instructions,input:o.input},error:a instanceof Error?a:new Error(String(a)),durationMs:u,streaming:s}),a}}}async function*bn(e,n,t){let r=[],o=null,s=null;try{for await(let a of e){r.push(a);let u=a;u.type==="response.done"&&u.response&&(o=u.response),yield a;}}catch(a){throw s=a instanceof Error?a:new Error(String(a)),a}finally{let a=Date.now()-t;s?f({provider:h,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},error:s,durationMs:a,streaming:true}):m({provider:h,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},rawResponse:o||{streamEvents:r},durationMs:a,status:"success",streaming:true});}}function Ce(e){return async function(...t){let r=Date.now(),o=t[0]||{};try{let s=await e(...t),a=Date.now()-r;return m({provider:h,model:o.model||"unknown",input:o.prompt,rawResponse:s,durationMs:a,status:"success",streaming:!1}),s}catch(s){let a=Date.now()-r;throw f({provider:h,model:o.model||"unknown",input:o.prompt,error:s instanceof Error?s:new Error(String(s)),durationMs:a,streaming:false}),s}}}function ve(e){return async function(...t){let r=Date.now(),o=t[0]||{};try{let s=await e(...t),a=Date.now()-r;return m({provider:h,model:o.model||"unknown",input:o.input,rawResponse:s,durationMs:a,status:"success",streaming:!1,spanType:"embedding"}),s}catch(s){let a=Date.now()-r;throw f({provider:h,model:o.model||"unknown",input:o.input,error:s instanceof Error?s:new Error(String(s)),durationMs:a,streaming:false}),s}}}function Ie(e){let n=[],t=e.choices?.[0]?.message?.tool_calls;if(Array.isArray(t))for(let r of t)r.id&&n.push(r.id);return n}var x="anthropic";function Se(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="Anthropic")return true;let t=e;return !!(t.messages&&typeof t.messages=="object")}function Te(e){return async function(...t){let r=Date.now(),o=t[0]||{},s=o.stream===true;try{let a=await e(...t);if(s&&vn(a))return Sn(a,o,r);let u=Date.now()-r,c=a,i=m({provider:x,model:o.model||c.model||"unknown",input:{system:o.system,messages:o.messages},rawResponse:a,durationMs:u,status:"success",streaming:!1});if(i&&c.content){let d=X(c.content);d.length>0&&k(d,i);}return a}catch(a){let u=Date.now()-r;throw f({provider:x,model:o.model||"unknown",input:{system:o.system,messages:o.messages},error:a instanceof Error?a:new Error(String(a)),durationMs:u,streaming:s}),a}}}function Re(e){return function(...t){let r=Date.now(),o=t[0]||{};try{let s=e(...t);return s&&typeof s=="object"?In(s,o,r):s}catch(s){let a=Date.now()-r;throw f({provider:x,model:o.model||"unknown",input:{system:o.system,messages:o.messages},error:s instanceof Error?s:new Error(String(s)),durationMs:a,streaming:true}),s}}}function vn(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}function In(e,n,t){let r=e;if(!r[Symbol.asyncIterator])return e;let o={content:[],usage:{input_tokens:0,output_tokens:0}},s=false,a,u=false,c=null,i=[],d=async function*(){try{for await(let l of r){if(l.type==="message_start"&&l.message&&(o.model=l.message.model,o.id=l.message.id,o.role=l.message.role,l.message.usage&&(o.usage={...l.message.usage})),l.type==="content_block_start"&&l.content_block&&(c=l.index??i.length,i[c]={...l.content_block},l.content_block.type==="text"&&(i[c].text=""),l.content_block.type==="thinking"&&(i[c].thinking="")),l.type==="content_block_delta"&&l.delta&&c!==null){let p=i[c];p&&(l.delta.text&&(u||(u=!0,a=Date.now()-t),p.type==="thinking"?p.thinking=(p.thinking||"")+l.delta.text:p.type==="text"&&(p.text=(p.text||"")+l.delta.text)),l.delta.partial_json&&p.type==="tool_use"&&(p._inputJson=(p._inputJson||"")+l.delta.partial_json));}if(l.type==="content_block_stop"&&c!==null){let p=i[c];if(p&&p.type==="tool_use"){let g=p._inputJson;if(g){try{p.input=JSON.parse(g);}catch{}delete p._inputJson;}}c=null;}l.type==="message_delta"&&(l.usage?.output_tokens&&(o.usage.output_tokens=l.usage.output_tokens),l.delta?.stop_reason&&(o.stop_reason=l.delta.stop_reason)),yield l;}}catch(l){if(!s){s=true;let p=Date.now()-t;f({provider:x,model:o.model||n.model||"unknown",input:{system:n.system,messages:n.messages},error:l instanceof Error?l:new Error(String(l)),durationMs:p,streaming:true});}throw l}finally{if(!s){s=true;let l=Date.now()-t;o.content=i.filter(Boolean);let p=m({provider:x,model:o.model||n.model||"unknown",input:{system:n.system,messages:n.messages},rawResponse:o,durationMs:l,status:"success",streaming:true,firstTokenMs:a});if(p&&o.content){let g=X(o.content);g.length>0&&k(g,p);}}}};return new Proxy(e,{get(l,p,g){return p===Symbol.asyncIterator?()=>d()[Symbol.asyncIterator]():Reflect.get(l,p,g)}})}async function*Sn(e,n,t){let r={content:[],usage:{input_tokens:0,output_tokens:0}},o=null,s,a=false,u=null,c=[];try{for await(let i of e){if(i.type==="message_start"&&i.message&&(r.model=i.message.model,r.id=i.message.id,r.role=i.message.role,i.message.usage&&(r.usage={...i.message.usage})),i.type==="content_block_start"&&i.content_block&&(u=i.index??c.length,c[u]={...i.content_block},i.content_block.type==="text"&&(c[u].text=""),i.content_block.type==="thinking"&&(c[u].thinking="")),i.type==="content_block_delta"&&i.delta&&u!==null){let d=c[u];d&&(i.delta.text&&(a||(a=!0,s=Date.now()-t),d.type==="thinking"?d.thinking=(d.thinking||"")+i.delta.text:d.type==="text"&&(d.text=(d.text||"")+i.delta.text)),i.delta.partial_json&&d.type==="tool_use"&&(d._inputJson=(d._inputJson||"")+i.delta.partial_json));}if(i.type==="content_block_stop"&&u!==null){let d=c[u];if(d&&d.type==="tool_use"){let l=d._inputJson;if(l){try{d.input=JSON.parse(l);}catch{}delete d._inputJson;}}u=null;}i.type==="message_delta"&&(i.usage?.output_tokens&&(r.usage.output_tokens=i.usage.output_tokens),i.delta?.stop_reason&&(r.stop_reason=i.delta.stop_reason)),yield i;}}catch(i){throw o=i instanceof Error?i:new Error(String(i)),i}finally{let i=Date.now()-t;if(r.content=c.filter(Boolean),o)f({provider:x,model:r.model||n.model||"unknown",input:{system:n.system,messages:n.messages},error:o,durationMs:i,streaming:true});else {let d=m({provider:x,model:r.model||n.model||"unknown",input:{system:n.system,messages:n.messages},rawResponse:r,durationMs:i,status:"success",streaming:true,firstTokenMs:s});if(d&&r.content){let l=X(r.content);l.length>0&&k(l,d);}}}}function X(e){let n=[];for(let t of e)t.type==="tool_use"&&t.id&&n.push(t.id);return n}var v="bedrock";function xe(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="BedrockRuntimeClient")return true;let t=e;return typeof t.send!="function"||!t.config||typeof t.config!="object"?false:"region"in t.config}function _e(e){let n=e;return new Proxy(n,{get(t,r,o){let s=Reflect.get(t,r,o);return r==="send"&&typeof s=="function"?Rn(s.bind(t)):s}})}function Rn(e){return async function(t){switch(t.constructor?.name||""){case "ConverseCommand":return xn(e,t);case "ConverseStreamCommand":return _n(e,t);case "InvokeModelCommand":return Mn(e,t);case "InvokeModelWithResponseStreamCommand":return An(e,t);default:return e(t)}}}async function xn(e,n){let t=Date.now(),r=n.input;try{let o=await e(n),s=Date.now()-t,a=m({provider:v,model:r.modelId||"unknown",input:{system:r.system,messages:r.messages},rawResponse:Ee(o),durationMs:s,status:"success",streaming:!1});if(a){let u=Me(o);u.length>0&&k(u,a);}return o}catch(o){throw f({provider:v,model:r.modelId||"unknown",input:{system:r.system,messages:r.messages},error:o instanceof Error?o:new Error(String(o)),durationMs:Date.now()-t,streaming:false}),o}}async function _n(e,n){let t=Date.now(),r=n.input;try{let o=await e(n);return o.stream?{...o,stream:En(o.stream,r,t)}:o}catch(o){throw f({provider:v,model:r.modelId||"unknown",input:{system:r.system,messages:r.messages},error:o instanceof Error?o:new Error(String(o)),durationMs:Date.now()-t,streaming:true}),o}}async function*En(e,n,t){let r={output:{message:{role:"assistant",content:[]}},usage:{inputTokens:0,outputTokens:0}},o=null,s,a=false,u=new Map,c=new Map;try{for await(let i of e){if(i.contentBlockStart){let d=i.contentBlockStart.contentBlockIndex;if(i.contentBlockStart.start?.toolUse){let l=i.contentBlockStart.start.toolUse;u.set(d,{toolUse:{toolUseId:l.toolUseId,name:l.name,input:{}}}),c.set(d,"");}else u.set(d,{text:""});}if(i.contentBlockDelta){let d=i.contentBlockDelta.contentBlockIndex,l=u.get(d);if(l&&i.contentBlockDelta.delta?.text&&(a||(a=!0,s=Date.now()-t),l.text=(l.text||"")+i.contentBlockDelta.delta.text),l?.toolUse&&i.contentBlockDelta.delta?.toolUse?.input){let p=c.get(d)||"";c.set(d,p+i.contentBlockDelta.delta.toolUse.input);}}if(i.contentBlockStop){let d=i.contentBlockStop.contentBlockIndex,l=u.get(d),p=c.get(d);if(l?.toolUse&&p)try{l.toolUse.input=JSON.parse(p);}catch{}}i.messageStop?.stopReason&&(r.stopReason=i.messageStop.stopReason),i.metadata?.usage&&(r.usage={inputTokens:i.metadata.usage.inputTokens||0,outputTokens:i.metadata.usage.outputTokens||0}),yield i;}}catch(i){throw o=i instanceof Error?i:new Error(String(i)),i}finally{let i=Date.now()-t,d=Array.from(u.entries()).sort((l,p)=>l[0]-p[0]).map(([,l])=>l);if(r.output.message.content=d,o)f({provider:v,model:n.modelId||"unknown",input:{system:n.system,messages:n.messages},error:o,durationMs:i,streaming:true});else {let l=m({provider:v,model:n.modelId||"unknown",input:{system:n.system,messages:n.messages},rawResponse:Ee(r),durationMs:i,status:"success",streaming:true,firstTokenMs:s});if(l){let p=Me(r);p.length>0&&k(p,l);}}}}async function Mn(e,n){let t=Date.now(),r=n.input;try{let o=await e(n),s=Date.now()-t,a=Dn(o.body);return m({provider:v,model:r.modelId||"unknown",input:O(r.body),rawResponse:a,durationMs:s,status:"success",streaming:!1}),o}catch(o){throw f({provider:v,model:r.modelId||"unknown",input:O(r.body),error:o instanceof Error?o:new Error(String(o)),durationMs:Date.now()-t,streaming:false}),o}}async function An(e,n){let t=Date.now(),r=n.input;try{let o=await e(n);return o.body?{...o,body:Pn(o.body,r,t)}:o}catch(o){throw f({provider:v,model:r.modelId||"unknown",input:O(r.body),error:o instanceof Error?o:new Error(String(o)),durationMs:Date.now()-t,streaming:true}),o}}async function*Pn(e,n,t){let r=[],o=null;try{for await(let s of e){if(s.chunk?.bytes){let a=On(s.chunk.bytes);a&&r.push(a);}yield s;}}catch(s){throw o=s instanceof Error?s:new Error(String(s)),s}finally{let s=Date.now()-t;o?f({provider:v,model:n.modelId||"unknown",input:O(n.body),error:o,durationMs:s,streaming:true}):m({provider:v,model:n.modelId||"unknown",input:O(n.body),rawResponse:{streamEvents:r},durationMs:s,status:"success",streaming:true});}}function Ee(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Me(e){let n=[],t=e.output?.message?.content;if(Array.isArray(t))for(let r of t)r.toolUse?.toolUseId&&n.push(r.toolUse.toolUseId);return n}function O(e){try{let n=typeof e=="string"?e:new TextDecoder().decode(e);return JSON.parse(n)}catch{return e}}function Dn(e){try{let n=new TextDecoder().decode(e);return JSON.parse(n)}catch{return null}}function On(e){try{let n=new TextDecoder().decode(e);return JSON.parse(n)}catch{return null}}var S="gemini";function Ae(e){if(!e||typeof e!="object")return false;let n=e.constructor?.name;if(n==="GoogleGenerativeAI"||n==="GoogleGenAI")return true;let t=e;return !!(typeof t.getGenerativeModel=="function"||t.models&&typeof t.models.generate=="function")}function Pe(e){let n=e;return new Proxy(n,{get(t,r,o){let s=Reflect.get(t,r,o);return r==="getGenerativeModel"&&typeof s=="function"?jn(s.bind(t)):s}})}function jn(e){return function(t){let r=e(t);return Gn(r,t.model)}}function Gn(e,n){return new Proxy(e,{get(t,r,o){let s=Reflect.get(t,r,o);return r==="generateContent"&&typeof s=="function"?Un(s.bind(t),n):r==="generateContentStream"&&typeof s=="function"?Nn(s.bind(t),n):r==="startChat"&&typeof s=="function"?qn(s.bind(t),n):s}})}function Un(e,n){return async function(r){let o=Date.now(),s=Oe(r);try{let a=await e(r),u=Date.now()-o,c=Be(a.response),i=m({provider:S,model:n,input:s,rawResponse:c,durationMs:u,status:"success",streaming:!1});if(i){let d=je(a.response);d.length>0&&k(d,i);}return a}catch(a){throw f({provider:S,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-o,streaming:false}),a}}}function Nn(e,n){return async function(r){let o=Date.now(),s=Oe(r);try{let a=await e(r),u=De(a.stream,n,s,o);return {...a,stream:u}}catch(a){throw f({provider:S,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-o,streaming:true}),a}}}async function*De(e,n,t,r){let o={candidates:[{content:{parts:[]}}]},s=null,a,u=false;try{for await(let c of e){try{let i=c.text();if(i){u||(u=!0,a=Date.now()-r);let d=o.candidates[0].content?.parts||[],l=d[d.length-1];l?.text!==void 0?l.text+=i:d.push({text:i});}}catch{}if(c.candidates?.[0]?.content?.parts)for(let i of c.candidates[0].content.parts)i.functionCall&&o.candidates[0].content?.parts?.push(i);c.usageMetadata&&(o.usageMetadata=c.usageMetadata),c.candidates?.[0]?.finishReason&&(o.candidates[0].finishReason=c.candidates[0].finishReason),yield c;}}catch(c){throw s=c instanceof Error?c:new Error(String(c)),c}finally{let c=Date.now()-r;if(s)f({provider:S,model:n,input:t,error:s,durationMs:c,streaming:true});else {let i=m({provider:S,model:n,input:t,rawResponse:o,durationMs:c,status:"success",streaming:true,firstTokenMs:a});if(i){let d=Jn(o.candidates);d.length>0&&k(d,i);}}}}function qn(e,n){return function(r){let o=e(r);return $n(o,n)}}function $n(e,n){return new Proxy(e,{get(t,r,o){let s=Reflect.get(t,r,o);return r==="sendMessage"&&typeof s=="function"?Ln(s.bind(t),n):r==="sendMessageStream"&&typeof s=="function"?Kn(s.bind(t),n):s}})}function Ln(e,n){return async function(r){let o=Date.now(),s=r;try{let a=await e(r),u=Date.now()-o,c=Be(a.response),i=m({provider:S,model:n,input:s,rawResponse:c,durationMs:u,status:"success",streaming:!1});if(i){let d=je(a.response);d.length>0&&k(d,i);}return a}catch(a){throw f({provider:S,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-o,streaming:false}),a}}}function Kn(e,n){return async function(r){let o=Date.now(),s=r;try{let a=await e(r),u=De(a.stream,n,s,o);return {...a,stream:u}}catch(a){throw f({provider:S,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-o,streaming:true}),a}}}function Oe(e){return typeof e=="string"?e:e.contents?e.contents:e}function Be(e){return {candidates:e.candidates,usageMetadata:e.usageMetadata}}function je(e){let n=[],t=e.candidates?.[0]?.content?.parts;return t&&t.forEach((r,o)=>{r.functionCall?.name&&n.push(`gemini-fc-${r.functionCall.name}-${o}`);}),n}function Jn(e){let n=[],t=e?.[0]?.content?.parts;return t&&t.forEach((r,o)=>{r.functionCall?.name&&n.push(`gemini-fc-${r.functionCall.name}-${o}`);}),n}var zn="openrouter.ai",q="openrouter";function Ge(e){if(!e||typeof e!="object")return false;let n=e;return n.chat?.completions?.create?(n.baseURL||"").includes(zn):false}function Ue(e){let n=e;return new Proxy(n,{get(t,r,o){let s=Reflect.get(t,r,o);return r==="chat"&&s&&typeof s=="object"?Vn(s):s}})}function Vn(e){return e&&new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="completions"&&o&&typeof o=="object"?Hn(o):o}})}function Hn(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?Wn(o.bind(n)):o}})}function Wn(e){return async function(...t){let r=Date.now(),o=t[0]||{},s=o.stream===true;try{let a=await e(...t);if(s&&Yn(a))return Xn(a,o,r);let u=Date.now()-r,c=a;return m({provider:q,model:o.model||c.model||"unknown",input:o.messages,rawResponse:a,durationMs:u,status:"success",streaming:!1}),a}catch(a){let u=Date.now()-r;throw f({provider:q,model:o.model||"unknown",input:o.messages,error:a instanceof Error?a:new Error(String(a)),durationMs:u,streaming:s}),a}}}function Yn(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}async function*Xn(e,n,t){let r={choices:[{message:{content:"",role:"assistant"},finish_reason:""}],usage:{prompt_tokens:0,completion_tokens:0}},o=null,s,a=false;try{for await(let u of e){let c=u;!r.id&&c.id&&(r.id=c.id);let i=c.choices?.[0]?.delta?.content;i&&(a||(a=!0,s=Date.now()-t),r.choices[0].message.content+=i);let d=c.choices?.[0]?.finish_reason;d&&(r.choices[0].finish_reason=d),c.usage&&(r.usage=c.usage),yield u;}}catch(u){throw o=u instanceof Error?u:new Error(String(u)),u}finally{let u=Date.now()-t;o?f({provider:q,model:n.model||"unknown",input:n.messages,error:o,durationMs:u,streaming:true}):m({provider:q,model:n.model||"unknown",input:n.messages,rawResponse:r,durationMs:u,status:"success",streaming:true,firstTokenMs:s});}}function Ne(e,n){return n&&me(n),U().disabled?(w("Tracing disabled, returning unwrapped client"),e):Ge(e)?(_("openrouter"),Ue(e)):ke(e)?(_("openai"),Qn(e)):Se(e)?(_("anthropic"),st(e)):xe(e)?(_("bedrock"),_e(e)):Ae(e)?(_("gemini"),Pe(e)):(B("Unknown client type. Tracing not enabled. Supported: OpenAI, OpenRouter, Anthropic, Bedrock, Gemini"),e)}function Qn(e){let n=e;return new Proxy(n,{get(t,r,o){let s=Reflect.get(t,r,o);return r==="chat"&&s&&typeof s=="object"?et(s):r==="responses"&&s&&typeof s=="object"?tt(s):r==="completions"&&s&&typeof s=="object"?rt(s):r==="embeddings"&&s&&typeof s=="object"?ot(s):s}})}function et(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="completions"&&o&&typeof o=="object"?nt(o):o}})}function nt(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?ye(o.bind(n)):o}})}function tt(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?be(o.bind(n)):o}})}function rt(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?Ce(o.bind(n)):o}})}function ot(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?ve(o.bind(n)):o}})}function st(e){let n=e;return new Proxy(n,{get(t,r,o){let s=Reflect.get(t,r,o);return r==="messages"&&s&&typeof s=="object"?at(s):s}})}function at(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?Te(o.bind(n)):t==="stream"&&typeof o=="function"?Re(o.bind(n)):o}})}function it(e){return function(t,r){return Ne(t,{...e,...r})}}
|
|
3
|
+
exports.captureSpan=H;exports.createObserve=it;exports.flush=tn;exports.getTraceContext=C;exports.init=en;exports.isEnabled=nn;exports.observe=Ne;exports.span=yn;exports.trace=mn;//# sourceMappingURL=index.js.map
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import {AsyncLocalStorage}from'async_hooks';/* @lelemondev/sdk - LLM Observability */
|
|
2
|
-
var je=Object.defineProperty;var Ue=(e,n,t)=>n in e?je(e,n,{enumerable:true,configurable:true,writable:true,value:t}):e[n]=t;var Y=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,t)=>(typeof require<"u"?require:n)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var qe=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var M=(e,n,t)=>Ue(e,typeof n!="symbol"?n+"":n,t);var oe=qe((ut,Je)=>{Je.exports={name:"@lelemondev/sdk",version:"0.9.6",description:"Automatic LLM observability. Wrap your client, everything is traced.",author:"Lelemon <info@lelemon.dev>",license:"MIT",repository:{type:"git",url:"git+https://github.com/lelemondev/lelemondev-sdk.git"},homepage:"https://lelemon.dev",bugs:{url:"https://github.com/lelemondev/lelemondev-sdk/issues"},keywords:["llm","observability","tracing","openai","anthropic","nextjs","lambda","express","hono","claude","gpt","ai","monitoring","serverless"],main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./openai":{types:"./dist/openai.d.ts",import:"./dist/openai.mjs",require:"./dist/openai.js"},"./anthropic":{types:"./dist/anthropic.d.ts",import:"./dist/anthropic.mjs",require:"./dist/anthropic.js"},"./bedrock":{types:"./dist/bedrock.d.ts",import:"./dist/bedrock.mjs",require:"./dist/bedrock.js"},"./gemini":{types:"./dist/gemini.d.ts",import:"./dist/gemini.mjs",require:"./dist/gemini.js"},"./openrouter":{types:"./dist/openrouter.d.ts",import:"./dist/openrouter.mjs",require:"./dist/openrouter.js"},"./next":{types:"./dist/next.d.ts",import:"./dist/next.mjs",require:"./dist/next.js"},"./lambda":{types:"./dist/lambda.d.ts",import:"./dist/lambda.mjs",require:"./dist/lambda.js"},"./express":{types:"./dist/express.d.ts",import:"./dist/express.mjs",require:"./dist/express.js"},"./hono":{types:"./dist/hono.d.ts",import:"./dist/hono.mjs",require:"./dist/hono.js"},"./integrations":{types:"./dist/integrations.d.ts",import:"./dist/integrations.mjs",require:"./dist/integrations.js"},"./package.json":"./package.json"},typesVersions:{"*":{openai:["./dist/openai.d.ts"],anthropic:["./dist/anthropic.d.ts"],bedrock:["./dist/bedrock.d.ts"],gemini:["./dist/gemini.d.ts"],openrouter:["./dist/openrouter.d.ts"],next:["./dist/next.d.ts"],lambda:["./dist/lambda.d.ts"],express:["./dist/express.d.ts"],hono:["./dist/hono.d.ts"],integrations:["./dist/integrations.d.ts"],"*":["./dist/index.d.ts"]}},files:["dist/**/*.js","dist/**/*.mjs","dist/**/*.d.ts","dist/**/*.d.mts","README.md"],sideEffects:false,engines:{node:">=18.0.0"},scripts:{build:"tsup",dev:"tsup --watch",docs:"typedoc && node scripts/generate-llms-txt.mjs",prepublishOnly:"npm run build",lint:"eslint src/",test:"vitest","test:run":"vitest run","test:coverage":"vitest run --coverage","test:e2e":"vitest run tests/e2e",typecheck:"tsc --noEmit"},devDependencies:{"@aws-sdk/client-bedrock-runtime":"^3.962.0","@google/generative-ai":"^0.24.1","@types/node":"^20.0.0","@vitest/coverage-v8":"^2.0.0",dotenv:"^17.2.3",openai:"^6.15.0",tsup:"^8.5.1",typedoc:"^0.28.15",typescript:"^5.9.3",vitest:"^2.0.0"}};});var X=false;function Q(e){X=e;}function v(){return X?true:Ne("LELEMON_DEBUG")==="true"}var h="[Lelemon]";function w(e,n){v()&&L("debug",e,n);}function N(e,n){v()&&L("info",e,n);}function O(e,n){L("warn",e,n);}function $(e,n,t,o){v()&&console.log(`${h} Captured trace: provider=${e} model=${n} duration=${t}ms status=${o}`);}function B(e,n){console.error(`${h} Failed to capture trace: provider=${e} error=${n.message}`);}function x(e){v()&&console.log(`${h} Wrapped client: provider=${e}`);}function Z(e,n){v()&&console.log(`${h} Sending batch: count=${e} endpoint=${n}`);}function ee(e,n){v()&&console.log(`${h} Batch sent successfully: count=${e} duration=${n}ms`);}function ne(e,n){let t=n instanceof Error?n.message:String(n);console.error(`${h} Batch send failed: count=${e} error=${t}`);}function te(e,n,t){v()&&console.log(`${h} Request: ${e} ${n} (${t} bytes)`);}function re(e,n){v()&&console.log(`${h} Response: status=${e} duration=${n}ms`);}function L(e,n,t){let o=e==="error"?console.error:e==="warn"?console.warn:console.log;t!==void 0?o(`${h} ${n}`,t):o(`${h} ${n}`);}function Ne(e){if(typeof process<"u"&&process.env)return process.env[e]}var $e=10,Le=1e3,Ke=1e4,G=class{constructor(n){M(this,"config");M(this,"queue",[]);M(this,"flushPromise",null);M(this,"flushTimer",null);this.config={apiKey:n.apiKey,endpoint:n.endpoint,debug:n.debug,disabled:n.disabled,batchSize:n.batchSize??$e,flushIntervalMs:n.flushIntervalMs??Le,requestTimeoutMs:n.requestTimeoutMs??Ke};}isEnabled(){return !this.config.disabled&&!!this.config.apiKey}enqueue(n){this.config.disabled||(this.queue.push(n),this.queue.length>=this.config.batchSize?this.flush():this.scheduleFlush());}async flush(){if(this.flushPromise)return this.flushPromise;if(this.queue.length===0)return;this.cancelScheduledFlush();let n=this.queue;return this.queue=[],this.flushPromise=this.sendBatch(n).finally(()=>{this.flushPromise=null;}),this.flushPromise}getPendingCount(){return this.queue.length}scheduleFlush(){this.flushTimer===null&&(this.flushTimer=setTimeout(()=>{this.flushTimer=null,this.flush();},this.config.flushIntervalMs));}cancelScheduledFlush(){this.flushTimer!==null&&(clearTimeout(this.flushTimer),this.flushTimer=null);}async sendBatch(n){if(n.length===0)return;let t=Date.now();Z(n.length,`${this.config.endpoint}/api/v1/ingest`);try{await this.request("POST","/api/v1/ingest",{events:n}),ee(n.length,Date.now()-t);}catch(o){ne(n.length,o);}}async request(n,t,o){let r=`${this.config.endpoint}${t}`,s=new AbortController,a=o?JSON.stringify(o):void 0;te(n,r,a?.length??0);let u=setTimeout(()=>{s.abort();},this.config.requestTimeoutMs),c=Date.now();try{let i=await fetch(r,{method:n,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`},body:a,signal:s.signal});if(clearTimeout(u),re(i.status,Date.now()-c),!i.ok){let l=await i.text().catch(()=>"Unknown error");throw new Error(`HTTP ${i.status}: ${l}`)}let d=await i.text();return d?JSON.parse(d):{}}catch(i){throw clearTimeout(u),i instanceof Error&&i.name==="AbortError"?new Error(`Request timeout after ${this.config.requestTimeoutMs}ms`):i}}};var Fe="@lelemondev/sdk",ze="nodejs";function Ve(){return typeof process<"u"&&process.versions?.node?{name:"nodejs",version:process.versions.node}:typeof Deno<"u"?{name:"deno",version:Deno.version?.deno??"unknown"}:typeof Bun<"u"?{name:"bun",version:Bun.version??"unknown"}:typeof window<"u"&&typeof navigator<"u"?{name:"browser",version:navigator.userAgent}:null}function He(){if(typeof process<"u"&&process.platform){let e=process.platform;switch(e){case "darwin":return "darwin";case "win32":return "windows";case "linux":return "linux";default:return e}}if(typeof navigator<"u"){let e=navigator.userAgent.toLowerCase();if(e.includes("mac"))return "darwin";if(e.includes("win"))return "windows";if(e.includes("linux"))return "linux"}return null}function We(){try{if(typeof Y<"u")return oe().version??"unknown"}catch{}return "unknown"}var _=null;function ae(e){if(!_){let t=Ve(),o=He();_={"telemetry.sdk.name":Fe,"telemetry.sdk.version":We(),"telemetry.sdk.language":ze},t&&(_["process.runtime.name"]=t.name,_["process.runtime.version"]=t.version),o&&(_["os.type"]=o);}let n={..._};return e?.name&&(n["service.name"]=e.name),e?.version&&(n["service.version"]=e.version),e?.environment&&(n["deployment.environment"]=e.environment),n}var J={},I=null,K=null,ie="https://api.lelemon.dev";function Xe(e={}){J=e,e.debug&&Q(true),K=ae(e.service),N("Initializing SDK",{endpoint:e.endpoint??ie,debug:e.debug??false,disabled:e.disabled??false,telemetry:K}),I=ce(e),I.isEnabled()?N("SDK initialized - tracing enabled"):w("SDK initialized - tracing disabled (no API key or explicitly disabled)");}function ue(){return J}function j(){return K}function Qe(){return R().isEnabled()}function R(){return I||(I=ce(J)),I}async function Ze(){I&&await I.flush();}function ce(e){let n=e.apiKey??en("LELEMON_API_KEY");return !n&&!e.disabled&&O("No API key provided. Set apiKey in init() or LELEMON_API_KEY env var. Tracing disabled."),new G({apiKey:n??"",endpoint:e.endpoint??ie,debug:e.debug??false,disabled:e.disabled??!n,batchSize:e.batchSize,flushIntervalMs:e.flushIntervalMs,requestTimeoutMs:e.requestTimeoutMs})}function en(e){if(typeof process<"u"&&process.env)return process.env[e]}var F=Symbol.for("@lelemondev/sdk:globalContext");function de(){let e=globalThis;return e[F]||(e[F]={context:{}}),e[F]}function pe(e){de().context=e,w("Global context updated",e);}function A(){return de().context}function f(e){try{let n=R();if(!n.isEnabled()){w("Transport disabled, skipping trace capture");return}let t=A(),o=b(),r=E(),s=j(),a={provider:e.provider,model:e.model,input:V(e.input),rawResponse:e.rawResponse?P(e.rawResponse,0):void 0,durationMs:e.durationMs,status:e.status,streaming:e.streaming,firstTokenMs:e.firstTokenMs,sessionId:t.sessionId,userId:t.userId,traceId:o?.traceId,spanId:r,parentSpanId:o?.currentSpanId,metadata:{...t.metadata,...e.metadata,...o?{_traceName:o.name}:{},...s?{_telemetry:s}:{}},tags:t.tags,spanType:e.spanType,name:e.name};return $(e.provider,e.model,e.durationMs,e.status),n.enqueue(a),r}catch(n){B(e.provider,n instanceof Error?n:new Error(String(n)));return}}function m(e){try{let n=R();if(!n.isEnabled()){w("Transport disabled, skipping error capture");return}let t=A(),o=b(),r=j(),s={provider:e.provider,model:e.model,input:V(e.input),durationMs:e.durationMs,status:"error",errorMessage:e.error.message,streaming:e.streaming,sessionId:t.sessionId,userId:t.userId,traceId:o?.traceId,spanId:E(),parentSpanId:o?.currentSpanId,metadata:{...t.metadata,...e.metadata,...o?{_traceName:o.name}:{},...r?{_telemetry:r}:{}},tags:t.tags};$(e.provider,e.model,e.durationMs,"error"),w("Error details",{message:e.error.message,stack:e.error.stack}),n.enqueue(s);}catch(n){B(e.provider,n instanceof Error?n:new Error(String(n)));}}function z(e){try{let n=R();if(!n.isEnabled()){w("Transport disabled, skipping span capture");return}let t=A(),o=b(),r=e.metadata?._traceId,s=e.metadata?._parentSpanId,a=j(),u={...t.metadata,...e.metadata,...a?{_telemetry:a}:{}};delete u._traceId,delete u._parentSpanId;let c={spanType:e.type,name:e.name,provider:"unknown",model:e.name,input:V(e.input),output:P(e.output,0),durationMs:e.durationMs,status:e.status||"success",errorMessage:e.errorMessage,streaming:!1,sessionId:t.sessionId,userId:t.userId,traceId:r??o?.traceId,spanId:E(),parentSpanId:s??o?.currentSpanId,toolCallId:e.toolCallId,metadata:u,tags:t.tags};w(`Span captured: ${e.type}/${e.name}`,{durationMs:e.durationMs}),n.enqueue(c);}catch(n){B("unknown",n instanceof Error?n:new Error(String(n)));}}var le=1e5,nn=["api_key","apikey","password","secret","authorization"],tn=["access_token","auth_token","bearer_token","refresh_token","id_token","session_token"],rn=["inputtokens","outputtokens","totaltokens","prompttokens","completiontokens","cachereadtokens","cachewritetokens","cachereadinputtokens","cachewriteinputtokens","reasoningtokens"];function on(e){let n=e.toLowerCase();return rn.includes(n)?false:!!(nn.some(t=>n.includes(t))||tn.some(t=>n.includes(t)))}function V(e){return P(e,0)}function P(e,n){if(n>10)return "[max depth exceeded]";if(e==null)return e;if(typeof e=="string")return e.length>le?e.slice(0,le)+"...[truncated]":e;if(typeof e=="number"||typeof e=="boolean")return e;if(Array.isArray(e))return e.map(t=>P(t,n+1));if(typeof e=="object"){let t={};for(let[o,r]of Object.entries(e))on(o)?t[o]="[REDACTED]":t[o]=P(r,n+1);return t}return String(e)}var H=Symbol.for("@lelemondev/sdk:traceStorage");function an(){let e=globalThis;return e[H]||(e[H]=new AsyncLocalStorage),e[H]}var me=an();function E(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function b(){return me.getStore()}function k(e,n){let t=b();if(t)for(let o of e)t.pendingToolCalls.set(o,n),w(`Registered tool call ${o} \u2192 LLM span ${n}`);}function un(e){let n=b();if(n)return e&&n.pendingToolCalls.has(e)?n.pendingToolCalls.get(e):n.currentSpanId}function cn(e){let n=b();n&&n.pendingToolCalls.delete(e);}async function ln(e,n){let t=typeof e=="string"?{name:e}:e,o=b(),r=o?.traceId??E(),s=E(),a={traceId:r,rootSpanId:s,currentSpanId:s,parentSpanId:o?.currentSpanId,name:t.name,startTime:Date.now(),input:t.input,metadata:t.metadata,tags:t.tags,pendingToolCalls:new Map};return me.run(a,async()=>{let u,c;try{return u=await n(),u}catch(i){throw c=i instanceof Error?i:new Error(String(i)),i}finally{dn(a,c?void 0:u,c);}})}function dn(e,n,t){let o=R();if(!o.isEnabled()){w("Transport disabled, skipping root span");return}let r=A(),s=Date.now()-e.startTime,a=t?null:n,u={spanType:"agent",name:e.name,provider:"agent",model:e.name,traceId:e.traceId,spanId:e.rootSpanId,parentSpanId:e.parentSpanId,input:e.input,output:a,inputTokens:0,outputTokens:0,durationMs:s,status:t?"error":"success",errorMessage:t?.message,streaming:false,sessionId:r.sessionId,userId:r.userId,metadata:{...r.metadata,...e.metadata},tags:e.tags??r.tags};w(`Sending root span: ${e.name}`,{durationMs:s,hasError:!!t}),o.enqueue(u);}function pn(e){let n=b();if(!n){process.env.NODE_ENV!=="production"&&console.warn("[Lelemon] span() called outside of trace() - span will not be captured");return}let t=un(e.toolCallId);z({type:e.type,name:e.name,input:e.input,output:e.output,durationMs:e.durationMs??0,status:e.status??"success",errorMessage:e.errorMessage,toolCallId:e.toolCallId,metadata:{...e.metadata,_traceId:n.traceId,_parentSpanId:t}}),e.toolCallId&&cn(e.toolCallId);}var y="openai";function fe(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="OpenAI")return true;let t=e;return !!(t.chat&&t.completions)||!!t.responses}function ge(e){return async function(...t){let o=Date.now(),r=t[0]||{},s=r.stream===true;try{let a=await e(...t);if(s&&we(a))return mn(a,r,o);let u=Date.now()-o,c=a,i=f({provider:y,model:r.model||c.model||"unknown",input:r.messages,rawResponse:a,durationMs:u,status:"success",streaming:!1});if(i){let d=be(c);d.length>0&&k(d,i);}return a}catch(a){let u=Date.now()-o;throw m({provider:y,model:r.model||"unknown",input:r.messages,error:a instanceof Error?a:new Error(String(a)),durationMs:u,streaming:s}),a}}}function we(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}async function*mn(e,n,t){let o={choices:[{message:{content:"",tool_calls:[]},finish_reason:""}],usage:{prompt_tokens:0,completion_tokens:0}},r=null,s,a=false,u=new Map;try{for await(let c of e){let i=c,d=i?.choices?.[0]?.delta?.content;d&&(a||(a=!0,s=Date.now()-t),o.choices[0].message.content+=d);let l=i?.choices?.[0]?.delta?.tool_calls;if(l)for(let g of l){u.has(g.index)||u.set(g.index,{id:"",function:{name:"",arguments:""}});let q=u.get(g.index);g.id&&(q.id=g.id),g.function?.name&&(q.function.name=g.function.name),g.function?.arguments&&(q.function.arguments+=g.function.arguments);}let p=i?.choices?.[0]?.finish_reason;p&&(o.choices[0].finish_reason=p),i?.usage&&(o.usage=i.usage),yield c;}}catch(c){throw r=c instanceof Error?c:new Error(String(c)),c}finally{let c=Date.now()-t;if(u.size>0&&(o.choices[0].message.tool_calls=Array.from(u.entries()).sort((i,d)=>i[0]-d[0]).map(([,i])=>i)),r)m({provider:y,model:n.model||"unknown",input:n.messages,error:r,durationMs:c,streaming:true});else {let i=f({provider:y,model:n.model||"unknown",input:n.messages,rawResponse:o,durationMs:c,status:"success",streaming:true,firstTokenMs:s});if(i){let d=be(o);d.length>0&&k(d,i);}}}}function ke(e){return async function(...t){let o=Date.now(),r=t[0]||{},s=r.stream===true;try{let a=await e(...t);if(s&&we(a))return fn(a,r,o);let u=Date.now()-o;return f({provider:y,model:r.model||"unknown",input:{instructions:r.instructions,input:r.input},rawResponse:a,durationMs:u,status:"success",streaming:!1}),a}catch(a){let u=Date.now()-o;throw m({provider:y,model:r.model||"unknown",input:{instructions:r.instructions,input:r.input},error:a instanceof Error?a:new Error(String(a)),durationMs:u,streaming:s}),a}}}async function*fn(e,n,t){let o=[],r=null,s=null;try{for await(let a of e){o.push(a);let u=a;u.type==="response.done"&&u.response&&(r=u.response),yield a;}}catch(a){throw s=a instanceof Error?a:new Error(String(a)),a}finally{let a=Date.now()-t;s?m({provider:y,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},error:s,durationMs:a,streaming:true}):f({provider:y,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},rawResponse:r||{streamEvents:o},durationMs:a,status:"success",streaming:true});}}function ye(e){return async function(...t){let o=Date.now(),r=t[0]||{};try{let s=await e(...t),a=Date.now()-o;return f({provider:y,model:r.model||"unknown",input:r.prompt,rawResponse:s,durationMs:a,status:"success",streaming:!1}),s}catch(s){let a=Date.now()-o;throw m({provider:y,model:r.model||"unknown",input:r.prompt,error:s instanceof Error?s:new Error(String(s)),durationMs:a,streaming:false}),s}}}function he(e){return async function(...t){let o=Date.now(),r=t[0]||{};try{let s=await e(...t),a=Date.now()-o;return f({provider:y,model:r.model||"unknown",input:r.input,rawResponse:s,durationMs:a,status:"success",streaming:!1,spanType:"embedding"}),s}catch(s){let a=Date.now()-o;throw m({provider:y,model:r.model||"unknown",input:r.input,error:s instanceof Error?s:new Error(String(s)),durationMs:a,streaming:false}),s}}}function be(e){let n=[],t=e.choices?.[0]?.message?.tool_calls;if(Array.isArray(t))for(let o of t)o.id&&n.push(o.id);return n}var T="anthropic";function Ce(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="Anthropic")return true;let t=e;return !!(t.messages&&typeof t.messages=="object")}function ve(e){return async function(...t){let o=Date.now(),r=t[0]||{},s=r.stream===true;try{let a=await e(...t);if(s&&wn(a))return yn(a,r,o);let u=Date.now()-o,c=a,i=f({provider:T,model:r.model||c.model||"unknown",input:{system:r.system,messages:r.messages},rawResponse:a,durationMs:u,status:"success",streaming:!1});if(i&&c.content){let d=W(c.content);d.length>0&&k(d,i);}return a}catch(a){let u=Date.now()-o;throw m({provider:T,model:r.model||"unknown",input:{system:r.system,messages:r.messages},error:a instanceof Error?a:new Error(String(a)),durationMs:u,streaming:s}),a}}}function Se(e){return function(...t){let o=Date.now(),r=t[0]||{};try{let s=e(...t);return s&&typeof s=="object"?kn(s,r,o):s}catch(s){let a=Date.now()-o;throw m({provider:T,model:r.model||"unknown",input:{system:r.system,messages:r.messages},error:s instanceof Error?s:new Error(String(s)),durationMs:a,streaming:true}),s}}}function wn(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}function kn(e,n,t){let o=e;if(!o[Symbol.asyncIterator])return e;let r={content:[],usage:{input_tokens:0,output_tokens:0}},s=false,a,u=false,c=null,i=[],d=async function*(){try{for await(let l of o){if(l.type==="message_start"&&l.message&&(r.model=l.message.model,r.id=l.message.id,r.role=l.message.role,l.message.usage&&(r.usage={...l.message.usage})),l.type==="content_block_start"&&l.content_block&&(c=l.index??i.length,i[c]={...l.content_block},l.content_block.type==="text"&&(i[c].text=""),l.content_block.type==="thinking"&&(i[c].thinking="")),l.type==="content_block_delta"&&l.delta&&c!==null){let p=i[c];p&&(l.delta.text&&(u||(u=!0,a=Date.now()-t),p.type==="thinking"?p.thinking=(p.thinking||"")+l.delta.text:p.type==="text"&&(p.text=(p.text||"")+l.delta.text)),l.delta.partial_json&&p.type==="tool_use"&&(p._inputJson=(p._inputJson||"")+l.delta.partial_json));}if(l.type==="content_block_stop"&&c!==null){let p=i[c];if(p&&p.type==="tool_use"){let g=p._inputJson;if(g){try{p.input=JSON.parse(g);}catch{}delete p._inputJson;}}c=null;}l.type==="message_delta"&&(l.usage?.output_tokens&&(r.usage.output_tokens=l.usage.output_tokens),l.delta?.stop_reason&&(r.stop_reason=l.delta.stop_reason)),yield l;}}catch(l){if(!s){s=true;let p=Date.now()-t;m({provider:T,model:r.model||n.model||"unknown",input:{system:n.system,messages:n.messages},error:l instanceof Error?l:new Error(String(l)),durationMs:p,streaming:true});}throw l}finally{if(!s){s=true;let l=Date.now()-t;r.content=i.filter(Boolean);let p=f({provider:T,model:r.model||n.model||"unknown",input:{system:n.system,messages:n.messages},rawResponse:r,durationMs:l,status:"success",streaming:true,firstTokenMs:a});if(p&&r.content){let g=W(r.content);g.length>0&&k(g,p);}}}};return new Proxy(e,{get(l,p,g){return p===Symbol.asyncIterator?()=>d()[Symbol.asyncIterator]():Reflect.get(l,p,g)}})}async function*yn(e,n,t){let o={content:[],usage:{input_tokens:0,output_tokens:0}},r=null,s,a=false,u=null,c=[];try{for await(let i of e){if(i.type==="message_start"&&i.message&&(o.model=i.message.model,o.id=i.message.id,o.role=i.message.role,i.message.usage&&(o.usage={...i.message.usage})),i.type==="content_block_start"&&i.content_block&&(u=i.index??c.length,c[u]={...i.content_block},i.content_block.type==="text"&&(c[u].text=""),i.content_block.type==="thinking"&&(c[u].thinking="")),i.type==="content_block_delta"&&i.delta&&u!==null){let d=c[u];d&&(i.delta.text&&(a||(a=!0,s=Date.now()-t),d.type==="thinking"?d.thinking=(d.thinking||"")+i.delta.text:d.type==="text"&&(d.text=(d.text||"")+i.delta.text)),i.delta.partial_json&&d.type==="tool_use"&&(d._inputJson=(d._inputJson||"")+i.delta.partial_json));}if(i.type==="content_block_stop"&&u!==null){let d=c[u];if(d&&d.type==="tool_use"){let l=d._inputJson;if(l){try{d.input=JSON.parse(l);}catch{}delete d._inputJson;}}u=null;}i.type==="message_delta"&&(i.usage?.output_tokens&&(o.usage.output_tokens=i.usage.output_tokens),i.delta?.stop_reason&&(o.stop_reason=i.delta.stop_reason)),yield i;}}catch(i){throw r=i instanceof Error?i:new Error(String(i)),i}finally{let i=Date.now()-t;if(o.content=c.filter(Boolean),r)m({provider:T,model:o.model||n.model||"unknown",input:{system:n.system,messages:n.messages},error:r,durationMs:i,streaming:true});else {let d=f({provider:T,model:o.model||n.model||"unknown",input:{system:n.system,messages:n.messages},rawResponse:o,durationMs:i,status:"success",streaming:true,firstTokenMs:s});if(d&&o.content){let l=W(o.content);l.length>0&&k(l,d);}}}}function W(e){let n=[];for(let t of e)t.type==="tool_use"&&t.id&&n.push(t.id);return n}var C="bedrock";function Ie(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="BedrockRuntimeClient")return true;let t=e;return typeof t.send!="function"||!t.config||typeof t.config!="object"?false:"region"in t.config}function Re(e){let n=e;return new Proxy(n,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="send"&&typeof s=="function"?bn(s.bind(t)):s}})}function bn(e){return async function(t){switch(t.constructor?.name||""){case "ConverseCommand":return Cn(e,t);case "ConverseStreamCommand":return vn(e,t);case "InvokeModelCommand":return In(e,t);case "InvokeModelWithResponseStreamCommand":return Rn(e,t);default:return e(t)}}}async function Cn(e,n){let t=Date.now(),o=n.input;try{let r=await e(n),s=Date.now()-t,a=f({provider:C,model:o.modelId||"unknown",input:{system:o.system,messages:o.messages},rawResponse:Te(r),durationMs:s,status:"success",streaming:!1});if(a){let u=xe(r);u.length>0&&k(u,a);}return r}catch(r){throw m({provider:C,model:o.modelId||"unknown",input:{system:o.system,messages:o.messages},error:r instanceof Error?r:new Error(String(r)),durationMs:Date.now()-t,streaming:false}),r}}async function vn(e,n){let t=Date.now(),o=n.input;try{let r=await e(n);return r.stream?{...r,stream:Sn(r.stream,o,t)}:r}catch(r){throw m({provider:C,model:o.modelId||"unknown",input:{system:o.system,messages:o.messages},error:r instanceof Error?r:new Error(String(r)),durationMs:Date.now()-t,streaming:true}),r}}async function*Sn(e,n,t){let o={output:{message:{role:"assistant",content:[]}},usage:{inputTokens:0,outputTokens:0}},r=null,s,a=false,u=new Map,c=new Map;try{for await(let i of e){if(i.contentBlockStart){let d=i.contentBlockStart.contentBlockIndex;if(i.contentBlockStart.start?.toolUse){let l=i.contentBlockStart.start.toolUse;u.set(d,{toolUse:{toolUseId:l.toolUseId,name:l.name,input:{}}}),c.set(d,"");}else u.set(d,{text:""});}if(i.contentBlockDelta){let d=i.contentBlockDelta.contentBlockIndex,l=u.get(d);if(l&&i.contentBlockDelta.delta?.text&&(a||(a=!0,s=Date.now()-t),l.text=(l.text||"")+i.contentBlockDelta.delta.text),l?.toolUse&&i.contentBlockDelta.delta?.toolUse?.input){let p=c.get(d)||"";c.set(d,p+i.contentBlockDelta.delta.toolUse.input);}}if(i.contentBlockStop){let d=i.contentBlockStop.contentBlockIndex,l=u.get(d),p=c.get(d);if(l?.toolUse&&p)try{l.toolUse.input=JSON.parse(p);}catch{}}i.messageStop?.stopReason&&(o.stopReason=i.messageStop.stopReason),i.metadata?.usage&&(o.usage={inputTokens:i.metadata.usage.inputTokens||0,outputTokens:i.metadata.usage.outputTokens||0}),yield i;}}catch(i){throw r=i instanceof Error?i:new Error(String(i)),i}finally{let i=Date.now()-t,d=Array.from(u.entries()).sort((l,p)=>l[0]-p[0]).map(([,l])=>l);if(o.output.message.content=d,r)m({provider:C,model:n.modelId||"unknown",input:{system:n.system,messages:n.messages},error:r,durationMs:i,streaming:true});else {let l=f({provider:C,model:n.modelId||"unknown",input:{system:n.system,messages:n.messages},rawResponse:Te(o),durationMs:i,status:"success",streaming:true,firstTokenMs:s});if(l){let p=xe(o);p.length>0&&k(p,l);}}}}async function In(e,n){let t=Date.now(),o=n.input;try{let r=await e(n),s=Date.now()-t,a=xn(r.body);return f({provider:C,model:o.modelId||"unknown",input:D(o.body),rawResponse:a,durationMs:s,status:"success",streaming:!1}),r}catch(r){throw m({provider:C,model:o.modelId||"unknown",input:D(o.body),error:r instanceof Error?r:new Error(String(r)),durationMs:Date.now()-t,streaming:false}),r}}async function Rn(e,n){let t=Date.now(),o=n.input;try{let r=await e(n);return r.body?{...r,body:Tn(r.body,o,t)}:r}catch(r){throw m({provider:C,model:o.modelId||"unknown",input:D(o.body),error:r instanceof Error?r:new Error(String(r)),durationMs:Date.now()-t,streaming:true}),r}}async function*Tn(e,n,t){let o=[],r=null;try{for await(let s of e){if(s.chunk?.bytes){let a=_n(s.chunk.bytes);a&&o.push(a);}yield s;}}catch(s){throw r=s instanceof Error?s:new Error(String(s)),s}finally{let s=Date.now()-t;r?m({provider:C,model:n.modelId||"unknown",input:D(n.body),error:r,durationMs:s,streaming:true}):f({provider:C,model:n.modelId||"unknown",input:D(n.body),rawResponse:{streamEvents:o},durationMs:s,status:"success",streaming:true});}}function Te(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function xe(e){let n=[],t=e.output?.message?.content;if(Array.isArray(t))for(let o of t)o.toolUse?.toolUseId&&n.push(o.toolUse.toolUseId);return n}function D(e){try{let n=typeof e=="string"?e:new TextDecoder().decode(e);return JSON.parse(n)}catch{return e}}function xn(e){try{let n=new TextDecoder().decode(e);return JSON.parse(n)}catch{return null}}function _n(e){try{let n=new TextDecoder().decode(e);return JSON.parse(n)}catch{return null}}var S="gemini";function _e(e){if(!e||typeof e!="object")return false;let n=e.constructor?.name;if(n==="GoogleGenerativeAI"||n==="GoogleGenAI")return true;let t=e;return !!(typeof t.getGenerativeModel=="function"||t.models&&typeof t.models.generate=="function")}function Ee(e){let n=e;return new Proxy(n,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="getGenerativeModel"&&typeof s=="function"?Mn(s.bind(t)):s}})}function Mn(e){return function(t){let o=e(t);return Pn(o,t.model)}}function Pn(e,n){return new Proxy(e,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="generateContent"&&typeof s=="function"?An(s.bind(t),n):o==="generateContentStream"&&typeof s=="function"?Dn(s.bind(t),n):o==="startChat"&&typeof s=="function"?On(s.bind(t),n):s}})}function An(e,n){return async function(o){let r=Date.now(),s=Pe(o);try{let a=await e(o),u=Date.now()-r,c=Ae(a.response),i=f({provider:S,model:n,input:s,rawResponse:c,durationMs:u,status:"success",streaming:!1});if(i){let d=De(a.response);d.length>0&&k(d,i);}return a}catch(a){throw m({provider:S,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-r,streaming:false}),a}}}function Dn(e,n){return async function(o){let r=Date.now(),s=Pe(o);try{let a=await e(o),u=Me(a.stream,n,s,r);return {...a,stream:u}}catch(a){throw m({provider:S,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-r,streaming:true}),a}}}async function*Me(e,n,t,o){let r={candidates:[{content:{parts:[]}}]},s=null,a,u=false;try{for await(let c of e){try{let i=c.text();if(i){u||(u=!0,a=Date.now()-o);let d=r.candidates[0].content?.parts||[],l=d[d.length-1];l?.text!==void 0?l.text+=i:d.push({text:i});}}catch{}if(c.candidates?.[0]?.content?.parts)for(let i of c.candidates[0].content.parts)i.functionCall&&r.candidates[0].content?.parts?.push(i);c.usageMetadata&&(r.usageMetadata=c.usageMetadata),c.candidates?.[0]?.finishReason&&(r.candidates[0].finishReason=c.candidates[0].finishReason),yield c;}}catch(c){throw s=c instanceof Error?c:new Error(String(c)),c}finally{let c=Date.now()-o;if(s)m({provider:S,model:n,input:t,error:s,durationMs:c,streaming:true});else {let i=f({provider:S,model:n,input:t,rawResponse:r,durationMs:c,status:"success",streaming:true,firstTokenMs:a});if(i){let d=Un(r.candidates);d.length>0&&k(d,i);}}}}function On(e,n){return function(o){let r=e(o);return Bn(r,n)}}function Bn(e,n){return new Proxy(e,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="sendMessage"&&typeof s=="function"?Gn(s.bind(t),n):o==="sendMessageStream"&&typeof s=="function"?jn(s.bind(t),n):s}})}function Gn(e,n){return async function(o){let r=Date.now(),s=o;try{let a=await e(o),u=Date.now()-r,c=Ae(a.response),i=f({provider:S,model:n,input:s,rawResponse:c,durationMs:u,status:"success",streaming:!1});if(i){let d=De(a.response);d.length>0&&k(d,i);}return a}catch(a){throw m({provider:S,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-r,streaming:false}),a}}}function jn(e,n){return async function(o){let r=Date.now(),s=o;try{let a=await e(o),u=Me(a.stream,n,s,r);return {...a,stream:u}}catch(a){throw m({provider:S,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-r,streaming:true}),a}}}function Pe(e){return typeof e=="string"?e:e.contents?e.contents:e}function Ae(e){return {candidates:e.candidates,usageMetadata:e.usageMetadata}}function De(e){let n=[],t=e.candidates?.[0]?.content?.parts;return t&&t.forEach((o,r)=>{o.functionCall?.name&&n.push(`gemini-fc-${o.functionCall.name}-${r}`);}),n}function Un(e){let n=[],t=e?.[0]?.content?.parts;return t&&t.forEach((o,r)=>{o.functionCall?.name&&n.push(`gemini-fc-${o.functionCall.name}-${r}`);}),n}var Nn="openrouter.ai",U="openrouter";function Oe(e){if(!e||typeof e!="object")return false;let n=e;return n.chat?.completions?.create?(n.baseURL||"").includes(Nn):false}function Be(e){let n=e;return new Proxy(n,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="chat"&&s&&typeof s=="object"?$n(s):s}})}function $n(e){return e&&new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="completions"&&r&&typeof r=="object"?Ln(r):r}})}function Ln(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?Kn(r.bind(n)):r}})}function Kn(e){return async function(...t){let o=Date.now(),r=t[0]||{},s=r.stream===true;try{let a=await e(...t);if(s&&Jn(a))return Fn(a,r,o);let u=Date.now()-o,c=a;return f({provider:U,model:r.model||c.model||"unknown",input:r.messages,rawResponse:a,durationMs:u,status:"success",streaming:!1}),a}catch(a){let u=Date.now()-o;throw m({provider:U,model:r.model||"unknown",input:r.messages,error:a instanceof Error?a:new Error(String(a)),durationMs:u,streaming:s}),a}}}function Jn(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}async function*Fn(e,n,t){let o={choices:[{message:{content:"",role:"assistant"},finish_reason:""}],usage:{prompt_tokens:0,completion_tokens:0}},r=null,s,a=false;try{for await(let u of e){let c=u;!o.id&&c.id&&(o.id=c.id);let i=c.choices?.[0]?.delta?.content;i&&(a||(a=!0,s=Date.now()-t),o.choices[0].message.content+=i);let d=c.choices?.[0]?.finish_reason;d&&(o.choices[0].finish_reason=d),c.usage&&(o.usage=c.usage),yield u;}}catch(u){throw r=u instanceof Error?u:new Error(String(u)),u}finally{let u=Date.now()-t;r?m({provider:U,model:n.model||"unknown",input:n.messages,error:r,durationMs:u,streaming:true}):f({provider:U,model:n.model||"unknown",input:n.messages,rawResponse:o,durationMs:u,status:"success",streaming:true,firstTokenMs:s});}}function Ge(e,n){return n&&pe(n),ue().disabled?(w("Tracing disabled, returning unwrapped client"),e):Oe(e)?(x("openrouter"),Be(e)):fe(e)?(x("openai"),Vn(e)):Ce(e)?(x("anthropic"),Zn(e)):Ie(e)?(x("bedrock"),Re(e)):_e(e)?(x("gemini"),Ee(e)):(O("Unknown client type. Tracing not enabled. Supported: OpenAI, OpenRouter, Anthropic, Bedrock, Gemini"),e)}function Vn(e){let n=e;return new Proxy(n,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="chat"&&s&&typeof s=="object"?Hn(s):o==="responses"&&s&&typeof s=="object"?Yn(s):o==="completions"&&s&&typeof s=="object"?Xn(s):o==="embeddings"&&s&&typeof s=="object"?Qn(s):s}})}function Hn(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="completions"&&r&&typeof r=="object"?Wn(r):r}})}function Wn(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?ge(r.bind(n)):r}})}function Yn(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?ke(r.bind(n)):r}})}function Xn(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?ye(r.bind(n)):r}})}function Qn(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?he(r.bind(n)):r}})}function Zn(e){let n=e;return new Proxy(n,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="messages"&&s&&typeof s=="object"?et(s):s}})}function et(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?ve(r.bind(n)):t==="stream"&&typeof r=="function"?Se(r.bind(n)):r}})}function nt(e){return function(t,o){return Ge(t,{...e,...o})}}
|
|
3
|
-
export{
|
|
2
|
+
var Ne=Object.defineProperty;var qe=(e,n,t)=>n in e?Ne(e,n,{enumerable:true,configurable:true,writable:true,value:t}):e[n]=t;var X=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,t)=>(typeof require<"u"?require:n)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var $e=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var M=(e,n,t)=>qe(e,typeof n!="symbol"?n+"":n,t);var se=$e((ft,ze)=>{ze.exports={name:"@lelemondev/sdk",version:"0.9.8",description:"Automatic LLM observability. Wrap your client, everything is traced.",author:"Lelemon <info@lelemon.dev>",license:"MIT",repository:{type:"git",url:"git+https://github.com/lelemondev/lelemondev-sdk.git"},homepage:"https://lelemon.dev",bugs:{url:"https://github.com/lelemondev/lelemondev-sdk/issues"},keywords:["llm","observability","tracing","openai","anthropic","nextjs","lambda","express","hono","claude","gpt","ai","monitoring","serverless"],main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./openai":{types:"./dist/openai.d.ts",import:"./dist/openai.mjs",require:"./dist/openai.js"},"./anthropic":{types:"./dist/anthropic.d.ts",import:"./dist/anthropic.mjs",require:"./dist/anthropic.js"},"./bedrock":{types:"./dist/bedrock.d.ts",import:"./dist/bedrock.mjs",require:"./dist/bedrock.js"},"./gemini":{types:"./dist/gemini.d.ts",import:"./dist/gemini.mjs",require:"./dist/gemini.js"},"./openrouter":{types:"./dist/openrouter.d.ts",import:"./dist/openrouter.mjs",require:"./dist/openrouter.js"},"./next":{types:"./dist/next.d.ts",import:"./dist/next.mjs",require:"./dist/next.js"},"./lambda":{types:"./dist/lambda.d.ts",import:"./dist/lambda.mjs",require:"./dist/lambda.js"},"./express":{types:"./dist/express.d.ts",import:"./dist/express.mjs",require:"./dist/express.js"},"./hono":{types:"./dist/hono.d.ts",import:"./dist/hono.mjs",require:"./dist/hono.js"},"./integrations":{types:"./dist/integrations.d.ts",import:"./dist/integrations.mjs",require:"./dist/integrations.js"},"./package.json":"./package.json"},typesVersions:{"*":{openai:["./dist/openai.d.ts"],anthropic:["./dist/anthropic.d.ts"],bedrock:["./dist/bedrock.d.ts"],gemini:["./dist/gemini.d.ts"],openrouter:["./dist/openrouter.d.ts"],next:["./dist/next.d.ts"],lambda:["./dist/lambda.d.ts"],express:["./dist/express.d.ts"],hono:["./dist/hono.d.ts"],integrations:["./dist/integrations.d.ts"],"*":["./dist/index.d.ts"]}},files:["dist/**/*.js","dist/**/*.mjs","dist/**/*.d.ts","dist/**/*.d.mts","README.md"],sideEffects:false,engines:{node:">=18.0.0"},scripts:{build:"tsup",dev:"tsup --watch",docs:"typedoc && node scripts/generate-llms-txt.mjs",prepublishOnly:"npm run build",lint:"eslint src/",test:"vitest","test:run":"vitest run","test:coverage":"vitest run --coverage","test:e2e":"vitest run tests/e2e",typecheck:"tsc --noEmit"},devDependencies:{"@aws-sdk/client-bedrock-runtime":"^3.962.0","@google/generative-ai":"^0.24.1","@types/node":"^20.0.0","@vitest/coverage-v8":"^2.0.0",dotenv:"^17.2.3",openai:"^6.15.0",tsup:"^8.5.1",typedoc:"^0.28.15",typescript:"^5.9.3",vitest:"^2.0.0"}};});var Z=false;function Q(e){Z=e;}function v(){return Z?true:Le("LELEMON_DEBUG")==="true"}var h="[Lelemon]";function w(e,n){v()&&K("debug",e,n);}function $(e,n){v()&&K("info",e,n);}function O(e,n){K("warn",e,n);}function L(e,n,t,r){v()&&console.log(`${h} Captured trace: provider=${e} model=${n} duration=${t}ms status=${r}`);}function B(e,n){console.error(`${h} Failed to capture trace: provider=${e} error=${n.message}`);}function x(e){v()&&console.log(`${h} Wrapped client: provider=${e}`);}function ee(e,n){v()&&console.log(`${h} Sending batch: count=${e} endpoint=${n}`);}function ne(e,n){v()&&console.log(`${h} Batch sent successfully: count=${e} duration=${n}ms`);}function te(e,n){let t=n instanceof Error?n.message:String(n);console.error(`${h} Batch send failed: count=${e} error=${t}`);}function re(e,n,t){v()&&console.log(`${h} Request: ${e} ${n} (${t} bytes)`);}function oe(e,n){v()&&console.log(`${h} Response: status=${e} duration=${n}ms`);}function K(e,n,t){let r=e==="error"?console.error:e==="warn"?console.warn:console.log;t!==void 0?r(`${h} ${n}`,t):r(`${h} ${n}`);}function Le(e){if(typeof process<"u"&&process.env)return process.env[e]}var Ke=10,Je=1e3,Fe=1e4,j=class{constructor(n){M(this,"config");M(this,"queue",[]);M(this,"flushPromise",null);M(this,"flushTimer",null);this.config={apiKey:n.apiKey,endpoint:n.endpoint,debug:n.debug,disabled:n.disabled,batchSize:n.batchSize??Ke,flushIntervalMs:n.flushIntervalMs??Je,requestTimeoutMs:n.requestTimeoutMs??Fe};}isEnabled(){return !this.config.disabled&&!!this.config.apiKey}enqueue(n){this.config.disabled||(this.queue.push(n),this.queue.length>=this.config.batchSize?this.flush():this.scheduleFlush());}async flush(){if(this.flushPromise)return this.flushPromise;if(this.queue.length===0)return;this.cancelScheduledFlush();let n=this.queue;return this.queue=[],this.flushPromise=this.sendBatch(n).finally(()=>{this.flushPromise=null;}),this.flushPromise}getPendingCount(){return this.queue.length}scheduleFlush(){this.flushTimer===null&&(this.flushTimer=setTimeout(()=>{this.flushTimer=null,this.flush();},this.config.flushIntervalMs));}cancelScheduledFlush(){this.flushTimer!==null&&(clearTimeout(this.flushTimer),this.flushTimer=null);}async sendBatch(n){if(n.length===0)return;let t=Date.now();ee(n.length,`${this.config.endpoint}/api/v1/ingest`);try{await this.request("POST","/api/v1/ingest",{events:n}),ne(n.length,Date.now()-t);}catch(r){te(n.length,r);}}async request(n,t,r){let o=`${this.config.endpoint}${t}`,s=new AbortController,a=r?JSON.stringify(r):void 0;re(n,o,a?.length??0);let u=setTimeout(()=>{s.abort();},this.config.requestTimeoutMs),c=Date.now();try{let i=await fetch(o,{method:n,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`},body:a,signal:s.signal});if(clearTimeout(u),oe(i.status,Date.now()-c),!i.ok){let l=await i.text().catch(()=>"Unknown error");throw new Error(`HTTP ${i.status}: ${l}`)}let d=await i.text();return d?JSON.parse(d):{}}catch(i){throw clearTimeout(u),i instanceof Error&&i.name==="AbortError"?new Error(`Request timeout after ${this.config.requestTimeoutMs}ms`):i}}};var Ve="@lelemondev/sdk",He="nodejs";function We(){return typeof process<"u"&&process.versions?.node?{name:"nodejs",version:process.versions.node}:typeof Deno<"u"?{name:"deno",version:Deno.version?.deno??"unknown"}:typeof Bun<"u"?{name:"bun",version:Bun.version??"unknown"}:typeof window<"u"&&typeof navigator<"u"?{name:"browser",version:navigator.userAgent}:null}function Ye(){if(typeof process<"u"&&process.platform){let e=process.platform;switch(e){case "darwin":return "darwin";case "win32":return "windows";case "linux":return "linux";default:return e}}if(typeof navigator<"u"){let e=navigator.userAgent.toLowerCase();if(e.includes("mac"))return "darwin";if(e.includes("win"))return "windows";if(e.includes("linux"))return "linux"}return null}function Xe(){try{if(typeof X<"u")return se().version??"unknown"}catch{}return "unknown"}var _=null;function ie(e){if(!_){let t=We(),r=Ye();_={"telemetry.sdk.name":Ve,"telemetry.sdk.version":Xe(),"telemetry.sdk.language":He},t&&(_["process.runtime.name"]=t.name,_["process.runtime.version"]=t.version),r&&(_["os.type"]=r);}let n={..._};return e?.name&&(n["service.name"]=e.name),e?.version&&(n["service.version"]=e.version),e?.environment&&(n["deployment.environment"]=e.environment),n}var F={},S=null,J=null,ue="https://api.lelemon.dev";function Qe(e={}){F=e,e.debug&&Q(true),J=ie(e.service),$("Initializing SDK",{endpoint:e.endpoint??ue,debug:e.debug??false,disabled:e.disabled??false,telemetry:J}),S=ce(e),S.isEnabled()?$("SDK initialized - tracing enabled"):w("SDK initialized - tracing disabled (no API key or explicitly disabled)");}function G(){return F}function U(){return J}function en(){return T().isEnabled()}function T(){return S||(S=ce(F)),S}async function nn(){S&&await S.flush();}function ce(e){let n=e.apiKey??tn("LELEMON_API_KEY");return !n&&!e.disabled&&O("No API key provided. Set apiKey in init() or LELEMON_API_KEY env var. Tracing disabled."),new j({apiKey:n??"",endpoint:e.endpoint??ue,debug:e.debug??false,disabled:e.disabled??!n,batchSize:e.batchSize,flushIntervalMs:e.flushIntervalMs,requestTimeoutMs:e.requestTimeoutMs})}function tn(e){if(typeof process<"u"&&process.env)return process.env[e]}var z=Symbol.for("@lelemondev/sdk:globalContext");function pe(){let e=globalThis;return e[z]||(e[z]={context:{}}),e[z]}function fe(e){pe().context=e,w("Global context updated",e);}function P(){return pe().context}function m(e){try{let n=T();if(!n.isEnabled()){w("Transport disabled, skipping trace capture");return}let t=P(),r=b(),o=E(),s=U(),a={provider:e.provider,model:e.model,input:H(e.input),rawResponse:e.rawResponse?A(e.rawResponse,0):void 0,durationMs:e.durationMs,status:e.status,streaming:e.streaming,firstTokenMs:e.firstTokenMs,sessionId:r?.sessionId??t.sessionId,userId:r?.userId??t.userId,traceId:r?.traceId,spanId:o,parentSpanId:r?.currentSpanId,metadata:{...t.metadata,...e.metadata,...r?{_traceName:r.name}:{},...s?{_telemetry:s}:{}},tags:t.tags,spanType:e.spanType,name:e.name};return L(e.provider,e.model,e.durationMs,e.status),n.enqueue(a),o}catch(n){B(e.provider,n instanceof Error?n:new Error(String(n)));return}}function f(e){try{let n=T();if(!n.isEnabled()){w("Transport disabled, skipping error capture");return}let t=P(),r=b(),o=U(),s={provider:e.provider,model:e.model,input:H(e.input),durationMs:e.durationMs,status:"error",errorMessage:e.error.message,streaming:e.streaming,sessionId:r?.sessionId??t.sessionId,userId:r?.userId??t.userId,traceId:r?.traceId,spanId:E(),parentSpanId:r?.currentSpanId,metadata:{...t.metadata,...e.metadata,...r?{_traceName:r.name}:{},...o?{_telemetry:o}:{}},tags:t.tags};L(e.provider,e.model,e.durationMs,"error"),w("Error details",{message:e.error.message,stack:e.error.stack}),n.enqueue(s);}catch(n){B(e.provider,n instanceof Error?n:new Error(String(n)));}}function V(e){try{let n=T();if(!n.isEnabled()){w("Transport disabled, skipping span capture");return}let t=P(),r=b(),o=e.metadata?._traceId,s=e.metadata?._parentSpanId,a=U(),u={...t.metadata,...e.metadata,...a?{_telemetry:a}:{}};delete u._traceId,delete u._parentSpanId;let c={spanType:e.type,name:e.name,provider:"unknown",model:e.name,input:H(e.input),output:A(e.output,0),durationMs:e.durationMs,status:e.status||"success",errorMessage:e.errorMessage,streaming:!1,sessionId:r?.sessionId??t.sessionId,userId:r?.userId??t.userId,traceId:o??r?.traceId,spanId:E(),parentSpanId:s??r?.currentSpanId,toolCallId:e.toolCallId,metadata:u,tags:t.tags};w(`Span captured: ${e.type}/${e.name}`,{durationMs:e.durationMs}),n.enqueue(c);}catch(n){B("unknown",n instanceof Error?n:new Error(String(n)));}}var le=1e5,rn=["api_key","apikey","password","secret","authorization"],on=["access_token","auth_token","bearer_token","refresh_token","id_token","session_token"],sn=["inputtokens","outputtokens","totaltokens","prompttokens","completiontokens","cachereadtokens","cachewritetokens","cachereadinputtokens","cachewriteinputtokens","reasoningtokens"],de={emails:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,phones:/\b\d{9,}\b/g};function me(){return G().redaction??{}}function an(e){let n=e.toLowerCase();return sn.includes(n)?false:!!(rn.some(r=>n.includes(r))||on.some(r=>n.includes(r))||(me().keys??[]).some(r=>n.includes(r.toLowerCase())))}function un(e){let n=me(),t=e;for(let r of n.patterns??[])r.lastIndex=0,t=t.replace(r,"[REDACTED]");return n.emails&&(t=t.replace(de.emails,"[EMAIL]")),n.phones&&(t=t.replace(de.phones,"[PHONE]")),t}function H(e){return A(e,0)}function A(e,n){if(n>10)return "[max depth exceeded]";if(e==null)return e;if(typeof e=="string"){let t=un(e);return t.length>le&&(t=t.slice(0,le)+"...[truncated]"),t}if(typeof e=="number"||typeof e=="boolean")return e;if(Array.isArray(e))return e.map(t=>A(t,n+1));if(typeof e=="object"){let t={};for(let[r,o]of Object.entries(e))an(r)?t[r]="[REDACTED]":t[r]=A(o,n+1);return t}return String(e)}var W=Symbol.for("@lelemondev/sdk:traceStorage");function ln(){let e=globalThis;return e[W]||(e[W]=new AsyncLocalStorage),e[W]}var ge=ln();function E(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function b(){return ge.getStore()}function k(e,n){let t=b();if(t)for(let r of e)t.pendingToolCalls.set(r,n),w(`Registered tool call ${r} \u2192 LLM span ${n}`);}function dn(e){let n=b();if(n)return e&&n.pendingToolCalls.has(e)?n.pendingToolCalls.get(e):n.currentSpanId}function pn(e){let n=b();n&&n.pendingToolCalls.delete(e);}async function fn(e,n){let t=typeof e=="string"?{name:e}:e,r=b(),o=r?.traceId??E(),s=E(),a={traceId:o,rootSpanId:s,currentSpanId:s,parentSpanId:r?.currentSpanId,name:t.name,startTime:Date.now(),input:t.input,metadata:t.metadata,tags:t.tags,outputKey:t.outputKey,outputTransform:t.outputTransform,sessionId:t.sessionId,userId:t.userId,pendingToolCalls:new Map};return ge.run(a,async()=>{let u,c;try{return u=await n(),u}catch(i){throw c=i instanceof Error?i:new Error(String(i)),i}finally{wn(a,c?void 0:u,c);}})}var mn=["text","content","message","output","response","result","answer"];function gn(e,n,t){if(t)try{return t(e)}catch{return e}if(n===false)return e;if(typeof n=="string"&&e&&typeof e=="object"){let o=e;return n in o?o[n]:e}if(e==null||typeof e!="object"||Array.isArray(e))return e;let r=e;for(let o of mn)if(o in r&&typeof r[o]=="string")return r[o];return e}function wn(e,n,t){let r=T();if(!r.isEnabled()){w("Transport disabled, skipping root span");return}let o=P(),s=Date.now()-e.startTime,a=t?null:gn(n,e.outputKey,e.outputTransform),u={spanType:"agent",name:e.name,provider:"agent",model:e.name,traceId:e.traceId,spanId:e.rootSpanId,parentSpanId:e.parentSpanId,input:e.input,output:a,inputTokens:0,outputTokens:0,durationMs:s,status:t?"error":"success",errorMessage:t?.message,streaming:false,sessionId:e.sessionId??o.sessionId,userId:e.userId??o.userId,metadata:{...o.metadata,...e.metadata},tags:e.tags??o.tags};w(`Sending root span: ${e.name}`,{durationMs:s,hasError:!!t}),r.enqueue(u);}function kn(e){let n=b();if(!n){process.env.NODE_ENV!=="production"&&console.warn("[Lelemon] span() called outside of trace() - span will not be captured");return}let t=dn(e.toolCallId);V({type:e.type,name:e.name,input:e.input,output:e.output,durationMs:e.durationMs??0,status:e.status??"success",errorMessage:e.errorMessage,toolCallId:e.toolCallId,metadata:{...e.metadata,_traceId:n.traceId,_parentSpanId:t}}),e.toolCallId&&pn(e.toolCallId);}var y="openai";function we(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="OpenAI")return true;let t=e;return !!(t.chat&&t.completions)||!!t.responses}function ke(e){return async function(...t){let r=Date.now(),o=t[0]||{},s=o.stream===true;try{let a=await e(...t);if(s&&ye(a))return yn(a,o,r);let u=Date.now()-r,c=a,i=m({provider:y,model:o.model||c.model||"unknown",input:o.messages,rawResponse:a,durationMs:u,status:"success",streaming:!1});if(i){let d=ve(c);d.length>0&&k(d,i);}return a}catch(a){let u=Date.now()-r;throw f({provider:y,model:o.model||"unknown",input:o.messages,error:a instanceof Error?a:new Error(String(a)),durationMs:u,streaming:s}),a}}}function ye(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}async function*yn(e,n,t){let r={choices:[{message:{content:"",tool_calls:[]},finish_reason:""}],usage:{prompt_tokens:0,completion_tokens:0}},o=null,s,a=false,u=new Map;try{for await(let c of e){let i=c,d=i?.choices?.[0]?.delta?.content;d&&(a||(a=!0,s=Date.now()-t),r.choices[0].message.content+=d);let l=i?.choices?.[0]?.delta?.tool_calls;if(l)for(let g of l){u.has(g.index)||u.set(g.index,{id:"",function:{name:"",arguments:""}});let q=u.get(g.index);g.id&&(q.id=g.id),g.function?.name&&(q.function.name=g.function.name),g.function?.arguments&&(q.function.arguments+=g.function.arguments);}let p=i?.choices?.[0]?.finish_reason;p&&(r.choices[0].finish_reason=p),i?.usage&&(r.usage=i.usage),yield c;}}catch(c){throw o=c instanceof Error?c:new Error(String(c)),c}finally{let c=Date.now()-t;if(u.size>0&&(r.choices[0].message.tool_calls=Array.from(u.entries()).sort((i,d)=>i[0]-d[0]).map(([,i])=>i)),o)f({provider:y,model:n.model||"unknown",input:n.messages,error:o,durationMs:c,streaming:true});else {let i=m({provider:y,model:n.model||"unknown",input:n.messages,rawResponse:r,durationMs:c,status:"success",streaming:true,firstTokenMs:s});if(i){let d=ve(r);d.length>0&&k(d,i);}}}}function he(e){return async function(...t){let r=Date.now(),o=t[0]||{},s=o.stream===true;try{let a=await e(...t);if(s&&ye(a))return hn(a,o,r);let u=Date.now()-r;return m({provider:y,model:o.model||"unknown",input:{instructions:o.instructions,input:o.input},rawResponse:a,durationMs:u,status:"success",streaming:!1}),a}catch(a){let u=Date.now()-r;throw f({provider:y,model:o.model||"unknown",input:{instructions:o.instructions,input:o.input},error:a instanceof Error?a:new Error(String(a)),durationMs:u,streaming:s}),a}}}async function*hn(e,n,t){let r=[],o=null,s=null;try{for await(let a of e){r.push(a);let u=a;u.type==="response.done"&&u.response&&(o=u.response),yield a;}}catch(a){throw s=a instanceof Error?a:new Error(String(a)),a}finally{let a=Date.now()-t;s?f({provider:y,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},error:s,durationMs:a,streaming:true}):m({provider:y,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},rawResponse:o||{streamEvents:r},durationMs:a,status:"success",streaming:true});}}function be(e){return async function(...t){let r=Date.now(),o=t[0]||{};try{let s=await e(...t),a=Date.now()-r;return m({provider:y,model:o.model||"unknown",input:o.prompt,rawResponse:s,durationMs:a,status:"success",streaming:!1}),s}catch(s){let a=Date.now()-r;throw f({provider:y,model:o.model||"unknown",input:o.prompt,error:s instanceof Error?s:new Error(String(s)),durationMs:a,streaming:false}),s}}}function Ce(e){return async function(...t){let r=Date.now(),o=t[0]||{};try{let s=await e(...t),a=Date.now()-r;return m({provider:y,model:o.model||"unknown",input:o.input,rawResponse:s,durationMs:a,status:"success",streaming:!1,spanType:"embedding"}),s}catch(s){let a=Date.now()-r;throw f({provider:y,model:o.model||"unknown",input:o.input,error:s instanceof Error?s:new Error(String(s)),durationMs:a,streaming:false}),s}}}function ve(e){let n=[],t=e.choices?.[0]?.message?.tool_calls;if(Array.isArray(t))for(let r of t)r.id&&n.push(r.id);return n}var R="anthropic";function Ie(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="Anthropic")return true;let t=e;return !!(t.messages&&typeof t.messages=="object")}function Se(e){return async function(...t){let r=Date.now(),o=t[0]||{},s=o.stream===true;try{let a=await e(...t);if(s&&Cn(a))return In(a,o,r);let u=Date.now()-r,c=a,i=m({provider:R,model:o.model||c.model||"unknown",input:{system:o.system,messages:o.messages},rawResponse:a,durationMs:u,status:"success",streaming:!1});if(i&&c.content){let d=Y(c.content);d.length>0&&k(d,i);}return a}catch(a){let u=Date.now()-r;throw f({provider:R,model:o.model||"unknown",input:{system:o.system,messages:o.messages},error:a instanceof Error?a:new Error(String(a)),durationMs:u,streaming:s}),a}}}function Te(e){return function(...t){let r=Date.now(),o=t[0]||{};try{let s=e(...t);return s&&typeof s=="object"?vn(s,o,r):s}catch(s){let a=Date.now()-r;throw f({provider:R,model:o.model||"unknown",input:{system:o.system,messages:o.messages},error:s instanceof Error?s:new Error(String(s)),durationMs:a,streaming:true}),s}}}function Cn(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}function vn(e,n,t){let r=e;if(!r[Symbol.asyncIterator])return e;let o={content:[],usage:{input_tokens:0,output_tokens:0}},s=false,a,u=false,c=null,i=[],d=async function*(){try{for await(let l of r){if(l.type==="message_start"&&l.message&&(o.model=l.message.model,o.id=l.message.id,o.role=l.message.role,l.message.usage&&(o.usage={...l.message.usage})),l.type==="content_block_start"&&l.content_block&&(c=l.index??i.length,i[c]={...l.content_block},l.content_block.type==="text"&&(i[c].text=""),l.content_block.type==="thinking"&&(i[c].thinking="")),l.type==="content_block_delta"&&l.delta&&c!==null){let p=i[c];p&&(l.delta.text&&(u||(u=!0,a=Date.now()-t),p.type==="thinking"?p.thinking=(p.thinking||"")+l.delta.text:p.type==="text"&&(p.text=(p.text||"")+l.delta.text)),l.delta.partial_json&&p.type==="tool_use"&&(p._inputJson=(p._inputJson||"")+l.delta.partial_json));}if(l.type==="content_block_stop"&&c!==null){let p=i[c];if(p&&p.type==="tool_use"){let g=p._inputJson;if(g){try{p.input=JSON.parse(g);}catch{}delete p._inputJson;}}c=null;}l.type==="message_delta"&&(l.usage?.output_tokens&&(o.usage.output_tokens=l.usage.output_tokens),l.delta?.stop_reason&&(o.stop_reason=l.delta.stop_reason)),yield l;}}catch(l){if(!s){s=true;let p=Date.now()-t;f({provider:R,model:o.model||n.model||"unknown",input:{system:n.system,messages:n.messages},error:l instanceof Error?l:new Error(String(l)),durationMs:p,streaming:true});}throw l}finally{if(!s){s=true;let l=Date.now()-t;o.content=i.filter(Boolean);let p=m({provider:R,model:o.model||n.model||"unknown",input:{system:n.system,messages:n.messages},rawResponse:o,durationMs:l,status:"success",streaming:true,firstTokenMs:a});if(p&&o.content){let g=Y(o.content);g.length>0&&k(g,p);}}}};return new Proxy(e,{get(l,p,g){return p===Symbol.asyncIterator?()=>d()[Symbol.asyncIterator]():Reflect.get(l,p,g)}})}async function*In(e,n,t){let r={content:[],usage:{input_tokens:0,output_tokens:0}},o=null,s,a=false,u=null,c=[];try{for await(let i of e){if(i.type==="message_start"&&i.message&&(r.model=i.message.model,r.id=i.message.id,r.role=i.message.role,i.message.usage&&(r.usage={...i.message.usage})),i.type==="content_block_start"&&i.content_block&&(u=i.index??c.length,c[u]={...i.content_block},i.content_block.type==="text"&&(c[u].text=""),i.content_block.type==="thinking"&&(c[u].thinking="")),i.type==="content_block_delta"&&i.delta&&u!==null){let d=c[u];d&&(i.delta.text&&(a||(a=!0,s=Date.now()-t),d.type==="thinking"?d.thinking=(d.thinking||"")+i.delta.text:d.type==="text"&&(d.text=(d.text||"")+i.delta.text)),i.delta.partial_json&&d.type==="tool_use"&&(d._inputJson=(d._inputJson||"")+i.delta.partial_json));}if(i.type==="content_block_stop"&&u!==null){let d=c[u];if(d&&d.type==="tool_use"){let l=d._inputJson;if(l){try{d.input=JSON.parse(l);}catch{}delete d._inputJson;}}u=null;}i.type==="message_delta"&&(i.usage?.output_tokens&&(r.usage.output_tokens=i.usage.output_tokens),i.delta?.stop_reason&&(r.stop_reason=i.delta.stop_reason)),yield i;}}catch(i){throw o=i instanceof Error?i:new Error(String(i)),i}finally{let i=Date.now()-t;if(r.content=c.filter(Boolean),o)f({provider:R,model:r.model||n.model||"unknown",input:{system:n.system,messages:n.messages},error:o,durationMs:i,streaming:true});else {let d=m({provider:R,model:r.model||n.model||"unknown",input:{system:n.system,messages:n.messages},rawResponse:r,durationMs:i,status:"success",streaming:true,firstTokenMs:s});if(d&&r.content){let l=Y(r.content);l.length>0&&k(l,d);}}}}function Y(e){let n=[];for(let t of e)t.type==="tool_use"&&t.id&&n.push(t.id);return n}var C="bedrock";function Re(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="BedrockRuntimeClient")return true;let t=e;return typeof t.send!="function"||!t.config||typeof t.config!="object"?false:"region"in t.config}function xe(e){let n=e;return new Proxy(n,{get(t,r,o){let s=Reflect.get(t,r,o);return r==="send"&&typeof s=="function"?Tn(s.bind(t)):s}})}function Tn(e){return async function(t){switch(t.constructor?.name||""){case "ConverseCommand":return Rn(e,t);case "ConverseStreamCommand":return xn(e,t);case "InvokeModelCommand":return En(e,t);case "InvokeModelWithResponseStreamCommand":return Mn(e,t);default:return e(t)}}}async function Rn(e,n){let t=Date.now(),r=n.input;try{let o=await e(n),s=Date.now()-t,a=m({provider:C,model:r.modelId||"unknown",input:{system:r.system,messages:r.messages},rawResponse:_e(o),durationMs:s,status:"success",streaming:!1});if(a){let u=Ee(o);u.length>0&&k(u,a);}return o}catch(o){throw f({provider:C,model:r.modelId||"unknown",input:{system:r.system,messages:r.messages},error:o instanceof Error?o:new Error(String(o)),durationMs:Date.now()-t,streaming:false}),o}}async function xn(e,n){let t=Date.now(),r=n.input;try{let o=await e(n);return o.stream?{...o,stream:_n(o.stream,r,t)}:o}catch(o){throw f({provider:C,model:r.modelId||"unknown",input:{system:r.system,messages:r.messages},error:o instanceof Error?o:new Error(String(o)),durationMs:Date.now()-t,streaming:true}),o}}async function*_n(e,n,t){let r={output:{message:{role:"assistant",content:[]}},usage:{inputTokens:0,outputTokens:0}},o=null,s,a=false,u=new Map,c=new Map;try{for await(let i of e){if(i.contentBlockStart){let d=i.contentBlockStart.contentBlockIndex;if(i.contentBlockStart.start?.toolUse){let l=i.contentBlockStart.start.toolUse;u.set(d,{toolUse:{toolUseId:l.toolUseId,name:l.name,input:{}}}),c.set(d,"");}else u.set(d,{text:""});}if(i.contentBlockDelta){let d=i.contentBlockDelta.contentBlockIndex,l=u.get(d);if(l&&i.contentBlockDelta.delta?.text&&(a||(a=!0,s=Date.now()-t),l.text=(l.text||"")+i.contentBlockDelta.delta.text),l?.toolUse&&i.contentBlockDelta.delta?.toolUse?.input){let p=c.get(d)||"";c.set(d,p+i.contentBlockDelta.delta.toolUse.input);}}if(i.contentBlockStop){let d=i.contentBlockStop.contentBlockIndex,l=u.get(d),p=c.get(d);if(l?.toolUse&&p)try{l.toolUse.input=JSON.parse(p);}catch{}}i.messageStop?.stopReason&&(r.stopReason=i.messageStop.stopReason),i.metadata?.usage&&(r.usage={inputTokens:i.metadata.usage.inputTokens||0,outputTokens:i.metadata.usage.outputTokens||0}),yield i;}}catch(i){throw o=i instanceof Error?i:new Error(String(i)),i}finally{let i=Date.now()-t,d=Array.from(u.entries()).sort((l,p)=>l[0]-p[0]).map(([,l])=>l);if(r.output.message.content=d,o)f({provider:C,model:n.modelId||"unknown",input:{system:n.system,messages:n.messages},error:o,durationMs:i,streaming:true});else {let l=m({provider:C,model:n.modelId||"unknown",input:{system:n.system,messages:n.messages},rawResponse:_e(r),durationMs:i,status:"success",streaming:true,firstTokenMs:s});if(l){let p=Ee(r);p.length>0&&k(p,l);}}}}async function En(e,n){let t=Date.now(),r=n.input;try{let o=await e(n),s=Date.now()-t,a=Pn(o.body);return m({provider:C,model:r.modelId||"unknown",input:D(r.body),rawResponse:a,durationMs:s,status:"success",streaming:!1}),o}catch(o){throw f({provider:C,model:r.modelId||"unknown",input:D(r.body),error:o instanceof Error?o:new Error(String(o)),durationMs:Date.now()-t,streaming:false}),o}}async function Mn(e,n){let t=Date.now(),r=n.input;try{let o=await e(n);return o.body?{...o,body:An(o.body,r,t)}:o}catch(o){throw f({provider:C,model:r.modelId||"unknown",input:D(r.body),error:o instanceof Error?o:new Error(String(o)),durationMs:Date.now()-t,streaming:true}),o}}async function*An(e,n,t){let r=[],o=null;try{for await(let s of e){if(s.chunk?.bytes){let a=Dn(s.chunk.bytes);a&&r.push(a);}yield s;}}catch(s){throw o=s instanceof Error?s:new Error(String(s)),s}finally{let s=Date.now()-t;o?f({provider:C,model:n.modelId||"unknown",input:D(n.body),error:o,durationMs:s,streaming:true}):m({provider:C,model:n.modelId||"unknown",input:D(n.body),rawResponse:{streamEvents:r},durationMs:s,status:"success",streaming:true});}}function _e(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Ee(e){let n=[],t=e.output?.message?.content;if(Array.isArray(t))for(let r of t)r.toolUse?.toolUseId&&n.push(r.toolUse.toolUseId);return n}function D(e){try{let n=typeof e=="string"?e:new TextDecoder().decode(e);return JSON.parse(n)}catch{return e}}function Pn(e){try{let n=new TextDecoder().decode(e);return JSON.parse(n)}catch{return null}}function Dn(e){try{let n=new TextDecoder().decode(e);return JSON.parse(n)}catch{return null}}var I="gemini";function Me(e){if(!e||typeof e!="object")return false;let n=e.constructor?.name;if(n==="GoogleGenerativeAI"||n==="GoogleGenAI")return true;let t=e;return !!(typeof t.getGenerativeModel=="function"||t.models&&typeof t.models.generate=="function")}function Ae(e){let n=e;return new Proxy(n,{get(t,r,o){let s=Reflect.get(t,r,o);return r==="getGenerativeModel"&&typeof s=="function"?Bn(s.bind(t)):s}})}function Bn(e){return function(t){let r=e(t);return jn(r,t.model)}}function jn(e,n){return new Proxy(e,{get(t,r,o){let s=Reflect.get(t,r,o);return r==="generateContent"&&typeof s=="function"?Gn(s.bind(t),n):r==="generateContentStream"&&typeof s=="function"?Un(s.bind(t),n):r==="startChat"&&typeof s=="function"?Nn(s.bind(t),n):s}})}function Gn(e,n){return async function(r){let o=Date.now(),s=De(r);try{let a=await e(r),u=Date.now()-o,c=Oe(a.response),i=m({provider:I,model:n,input:s,rawResponse:c,durationMs:u,status:"success",streaming:!1});if(i){let d=Be(a.response);d.length>0&&k(d,i);}return a}catch(a){throw f({provider:I,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-o,streaming:false}),a}}}function Un(e,n){return async function(r){let o=Date.now(),s=De(r);try{let a=await e(r),u=Pe(a.stream,n,s,o);return {...a,stream:u}}catch(a){throw f({provider:I,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-o,streaming:true}),a}}}async function*Pe(e,n,t,r){let o={candidates:[{content:{parts:[]}}]},s=null,a,u=false;try{for await(let c of e){try{let i=c.text();if(i){u||(u=!0,a=Date.now()-r);let d=o.candidates[0].content?.parts||[],l=d[d.length-1];l?.text!==void 0?l.text+=i:d.push({text:i});}}catch{}if(c.candidates?.[0]?.content?.parts)for(let i of c.candidates[0].content.parts)i.functionCall&&o.candidates[0].content?.parts?.push(i);c.usageMetadata&&(o.usageMetadata=c.usageMetadata),c.candidates?.[0]?.finishReason&&(o.candidates[0].finishReason=c.candidates[0].finishReason),yield c;}}catch(c){throw s=c instanceof Error?c:new Error(String(c)),c}finally{let c=Date.now()-r;if(s)f({provider:I,model:n,input:t,error:s,durationMs:c,streaming:true});else {let i=m({provider:I,model:n,input:t,rawResponse:o,durationMs:c,status:"success",streaming:true,firstTokenMs:a});if(i){let d=Kn(o.candidates);d.length>0&&k(d,i);}}}}function Nn(e,n){return function(r){let o=e(r);return qn(o,n)}}function qn(e,n){return new Proxy(e,{get(t,r,o){let s=Reflect.get(t,r,o);return r==="sendMessage"&&typeof s=="function"?$n(s.bind(t),n):r==="sendMessageStream"&&typeof s=="function"?Ln(s.bind(t),n):s}})}function $n(e,n){return async function(r){let o=Date.now(),s=r;try{let a=await e(r),u=Date.now()-o,c=Oe(a.response),i=m({provider:I,model:n,input:s,rawResponse:c,durationMs:u,status:"success",streaming:!1});if(i){let d=Be(a.response);d.length>0&&k(d,i);}return a}catch(a){throw f({provider:I,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-o,streaming:false}),a}}}function Ln(e,n){return async function(r){let o=Date.now(),s=r;try{let a=await e(r),u=Pe(a.stream,n,s,o);return {...a,stream:u}}catch(a){throw f({provider:I,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-o,streaming:true}),a}}}function De(e){return typeof e=="string"?e:e.contents?e.contents:e}function Oe(e){return {candidates:e.candidates,usageMetadata:e.usageMetadata}}function Be(e){let n=[],t=e.candidates?.[0]?.content?.parts;return t&&t.forEach((r,o)=>{r.functionCall?.name&&n.push(`gemini-fc-${r.functionCall.name}-${o}`);}),n}function Kn(e){let n=[],t=e?.[0]?.content?.parts;return t&&t.forEach((r,o)=>{r.functionCall?.name&&n.push(`gemini-fc-${r.functionCall.name}-${o}`);}),n}var Fn="openrouter.ai",N="openrouter";function je(e){if(!e||typeof e!="object")return false;let n=e;return n.chat?.completions?.create?(n.baseURL||"").includes(Fn):false}function Ge(e){let n=e;return new Proxy(n,{get(t,r,o){let s=Reflect.get(t,r,o);return r==="chat"&&s&&typeof s=="object"?zn(s):s}})}function zn(e){return e&&new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="completions"&&o&&typeof o=="object"?Vn(o):o}})}function Vn(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?Hn(o.bind(n)):o}})}function Hn(e){return async function(...t){let r=Date.now(),o=t[0]||{},s=o.stream===true;try{let a=await e(...t);if(s&&Wn(a))return Yn(a,o,r);let u=Date.now()-r,c=a;return m({provider:N,model:o.model||c.model||"unknown",input:o.messages,rawResponse:a,durationMs:u,status:"success",streaming:!1}),a}catch(a){let u=Date.now()-r;throw f({provider:N,model:o.model||"unknown",input:o.messages,error:a instanceof Error?a:new Error(String(a)),durationMs:u,streaming:s}),a}}}function Wn(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}async function*Yn(e,n,t){let r={choices:[{message:{content:"",role:"assistant"},finish_reason:""}],usage:{prompt_tokens:0,completion_tokens:0}},o=null,s,a=false;try{for await(let u of e){let c=u;!r.id&&c.id&&(r.id=c.id);let i=c.choices?.[0]?.delta?.content;i&&(a||(a=!0,s=Date.now()-t),r.choices[0].message.content+=i);let d=c.choices?.[0]?.finish_reason;d&&(r.choices[0].finish_reason=d),c.usage&&(r.usage=c.usage),yield u;}}catch(u){throw o=u instanceof Error?u:new Error(String(u)),u}finally{let u=Date.now()-t;o?f({provider:N,model:n.model||"unknown",input:n.messages,error:o,durationMs:u,streaming:true}):m({provider:N,model:n.model||"unknown",input:n.messages,rawResponse:r,durationMs:u,status:"success",streaming:true,firstTokenMs:s});}}function Ue(e,n){return n&&fe(n),G().disabled?(w("Tracing disabled, returning unwrapped client"),e):je(e)?(x("openrouter"),Ge(e)):we(e)?(x("openai"),Zn(e)):Ie(e)?(x("anthropic"),ot(e)):Re(e)?(x("bedrock"),xe(e)):Me(e)?(x("gemini"),Ae(e)):(O("Unknown client type. Tracing not enabled. Supported: OpenAI, OpenRouter, Anthropic, Bedrock, Gemini"),e)}function Zn(e){let n=e;return new Proxy(n,{get(t,r,o){let s=Reflect.get(t,r,o);return r==="chat"&&s&&typeof s=="object"?Qn(s):r==="responses"&&s&&typeof s=="object"?nt(s):r==="completions"&&s&&typeof s=="object"?tt(s):r==="embeddings"&&s&&typeof s=="object"?rt(s):s}})}function Qn(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="completions"&&o&&typeof o=="object"?et(o):o}})}function et(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?ke(o.bind(n)):o}})}function nt(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?he(o.bind(n)):o}})}function tt(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?be(o.bind(n)):o}})}function rt(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?Ce(o.bind(n)):o}})}function ot(e){let n=e;return new Proxy(n,{get(t,r,o){let s=Reflect.get(t,r,o);return r==="messages"&&s&&typeof s=="object"?st(s):s}})}function st(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?Se(o.bind(n)):t==="stream"&&typeof o=="function"?Te(o.bind(n)):o}})}function at(e){return function(t,r){return Ue(t,{...e,...r})}}
|
|
3
|
+
export{V as captureSpan,at as createObserve,nn as flush,b as getTraceContext,Qe as init,en as isEnabled,Ue as observe,kn as span,fn as trace};//# sourceMappingURL=index.mjs.map
|
|
4
4
|
//# sourceMappingURL=index.mjs.map
|
package/dist/openai.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { O as ObserveOptions } from './capture-
|
|
2
|
-
export { C as CaptureSpanOptions, L as LelemonConfig, h as SpanOptions, d as SpanType, T as TraceContext, e as TraceOptions, c as captureSpan, f as flush, g as getTraceContext, i as init, a as isEnabled, s as span, t as trace } from './capture-
|
|
1
|
+
import { O as ObserveOptions } from './capture-CiUL-4hv.mjs';
|
|
2
|
+
export { C as CaptureSpanOptions, L as LelemonConfig, h as SpanOptions, d as SpanType, T as TraceContext, e as TraceOptions, c as captureSpan, f as flush, g as getTraceContext, i as init, a as isEnabled, s as span, t as trace } from './capture-CiUL-4hv.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* OpenAI Provider Entry Point
|
package/dist/openai.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { O as ObserveOptions } from './capture-
|
|
2
|
-
export { C as CaptureSpanOptions, L as LelemonConfig, h as SpanOptions, d as SpanType, T as TraceContext, e as TraceOptions, c as captureSpan, f as flush, g as getTraceContext, i as init, a as isEnabled, s as span, t as trace } from './capture-
|
|
1
|
+
import { O as ObserveOptions } from './capture-CiUL-4hv.js';
|
|
2
|
+
export { C as CaptureSpanOptions, L as LelemonConfig, h as SpanOptions, d as SpanType, T as TraceContext, e as TraceOptions, c as captureSpan, f as flush, g as getTraceContext, i as init, a as isEnabled, s as span, t as trace } from './capture-CiUL-4hv.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* OpenAI Provider Entry Point
|
package/dist/openai.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
'use strict';var async_hooks=require('async_hooks');/* @lelemondev/sdk - LLM Observability */
|
|
2
|
-
var we=Object.defineProperty;var be=(e,n,t)=>n in e?we(e,n,{enumerable:true,configurable:true,writable:true,value:t}):e[n]=t;var G=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,t)=>(typeof require<"u"?require:n)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var ye=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var I=(e,n,t)=>be(e,typeof n!="symbol"?n+"":n,t);var Z=ye((cn,Ce)=>{Ce.exports={name:"@lelemondev/sdk",version:"0.9.6",description:"Automatic LLM observability. Wrap your client, everything is traced.",author:"Lelemon <info@lelemon.dev>",license:"MIT",repository:{type:"git",url:"git+https://github.com/lelemondev/lelemondev-sdk.git"},homepage:"https://lelemon.dev",bugs:{url:"https://github.com/lelemondev/lelemondev-sdk/issues"},keywords:["llm","observability","tracing","openai","anthropic","nextjs","lambda","express","hono","claude","gpt","ai","monitoring","serverless"],main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./openai":{types:"./dist/openai.d.ts",import:"./dist/openai.mjs",require:"./dist/openai.js"},"./anthropic":{types:"./dist/anthropic.d.ts",import:"./dist/anthropic.mjs",require:"./dist/anthropic.js"},"./bedrock":{types:"./dist/bedrock.d.ts",import:"./dist/bedrock.mjs",require:"./dist/bedrock.js"},"./gemini":{types:"./dist/gemini.d.ts",import:"./dist/gemini.mjs",require:"./dist/gemini.js"},"./openrouter":{types:"./dist/openrouter.d.ts",import:"./dist/openrouter.mjs",require:"./dist/openrouter.js"},"./next":{types:"./dist/next.d.ts",import:"./dist/next.mjs",require:"./dist/next.js"},"./lambda":{types:"./dist/lambda.d.ts",import:"./dist/lambda.mjs",require:"./dist/lambda.js"},"./express":{types:"./dist/express.d.ts",import:"./dist/express.mjs",require:"./dist/express.js"},"./hono":{types:"./dist/hono.d.ts",import:"./dist/hono.mjs",require:"./dist/hono.js"},"./integrations":{types:"./dist/integrations.d.ts",import:"./dist/integrations.mjs",require:"./dist/integrations.js"},"./package.json":"./package.json"},typesVersions:{"*":{openai:["./dist/openai.d.ts"],anthropic:["./dist/anthropic.d.ts"],bedrock:["./dist/bedrock.d.ts"],gemini:["./dist/gemini.d.ts"],openrouter:["./dist/openrouter.d.ts"],next:["./dist/next.d.ts"],lambda:["./dist/lambda.d.ts"],express:["./dist/express.d.ts"],hono:["./dist/hono.d.ts"],integrations:["./dist/integrations.d.ts"],"*":["./dist/index.d.ts"]}},files:["dist/**/*.js","dist/**/*.mjs","dist/**/*.d.ts","dist/**/*.d.mts","README.md"],sideEffects:false,engines:{node:">=18.0.0"},scripts:{build:"tsup",dev:"tsup --watch",docs:"typedoc && node scripts/generate-llms-txt.mjs",prepublishOnly:"npm run build",lint:"eslint src/",test:"vitest","test:run":"vitest run","test:coverage":"vitest run --coverage","test:e2e":"vitest run tests/e2e",typecheck:"tsc --noEmit"},devDependencies:{"@aws-sdk/client-bedrock-runtime":"^3.962.0","@google/generative-ai":"^0.24.1","@types/node":"^20.0.0","@vitest/coverage-v8":"^2.0.0",dotenv:"^17.2.3",openai:"^6.15.0",tsup:"^8.5.1",typedoc:"^0.28.15",typescript:"^5.9.3",vitest:"^2.0.0"}};});var V=false;function B(e){V=e;}function w(){return V?true:he("LELEMON_DEBUG")==="true"}var m="[Lelemon]";function d(e,n){w()&&q("debug",e,n);}function D(e,n){w()&&q("info",e,n);}function R(e,n){q("warn",e,n);}function P(e,n,t,r){w()&&console.log(`${m} Captured trace: provider=${e} model=${n} duration=${t}ms status=${r}`);}function _(e,n){console.error(`${m} Failed to capture trace: provider=${e} error=${n.message}`);}function H(e){w()&&console.log(`${m} Wrapped client: provider=${e}`);}function W(e,n){w()&&console.log(`${m} Sending batch: count=${e} endpoint=${n}`);}function Y(e,n){w()&&console.log(`${m} Batch sent successfully: count=${e} duration=${n}ms`);}function X(e,n){let t=n instanceof Error?n.message:String(n);console.error(`${m} Batch send failed: count=${e} error=${t}`);}function J(e,n,t){w()&&console.log(`${m} Request: ${e} ${n} (${t} bytes)`);}function Q(e,n){w()&&console.log(`${m} Response: status=${e} duration=${n}ms`);}function q(e,n,t){let r=e==="error"?console.error:e==="warn"?console.warn:console.log;t!==void 0?r(`${m} ${n}`,t):r(`${m} ${n}`);}function he(e){if(typeof process<"u"&&process.env)return process.env[e]}var ke=10,Te=1e3,ve=1e4,A=class{constructor(n){I(this,"config");I(this,"queue",[]);I(this,"flushPromise",null);I(this,"flushTimer",null);this.config={apiKey:n.apiKey,endpoint:n.endpoint,debug:n.debug,disabled:n.disabled,batchSize:n.batchSize??ke,flushIntervalMs:n.flushIntervalMs??Te,requestTimeoutMs:n.requestTimeoutMs??ve};}isEnabled(){return !this.config.disabled&&!!this.config.apiKey}enqueue(n){this.config.disabled||(this.queue.push(n),this.queue.length>=this.config.batchSize?this.flush():this.scheduleFlush());}async flush(){if(this.flushPromise)return this.flushPromise;if(this.queue.length===0)return;this.cancelScheduledFlush();let n=this.queue;return this.queue=[],this.flushPromise=this.sendBatch(n).finally(()=>{this.flushPromise=null;}),this.flushPromise}getPendingCount(){return this.queue.length}scheduleFlush(){this.flushTimer===null&&(this.flushTimer=setTimeout(()=>{this.flushTimer=null,this.flush();},this.config.flushIntervalMs));}cancelScheduledFlush(){this.flushTimer!==null&&(clearTimeout(this.flushTimer),this.flushTimer=null);}async sendBatch(n){if(n.length===0)return;let t=Date.now();W(n.length,`${this.config.endpoint}/api/v1/ingest`);try{await this.request("POST","/api/v1/ingest",{events:n}),Y(n.length,Date.now()-t);}catch(r){X(n.length,r);}}async request(n,t,r){let o=`${this.config.endpoint}${t}`,s=new AbortController,i=r?JSON.stringify(r):void 0;J(n,o,i?.length??0);let a=setTimeout(()=>{s.abort();},this.config.requestTimeoutMs),c=Date.now();try{let u=await fetch(o,{method:n,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`},body:i,signal:s.signal});if(clearTimeout(a),Q(u.status,Date.now()-c),!u.ok){let E=await u.text().catch(()=>"Unknown error");throw new Error(`HTTP ${u.status}: ${E}`)}let l=await u.text();return l?JSON.parse(l):{}}catch(u){throw clearTimeout(a),u instanceof Error&&u.name==="AbortError"?new Error(`Request timeout after ${this.config.requestTimeoutMs}ms`):u}}};var Ie="@lelemondev/sdk",xe="nodejs";function Se(){return typeof process<"u"&&process.versions?.node?{name:"nodejs",version:process.versions.node}:typeof Deno<"u"?{name:"deno",version:Deno.version?.deno??"unknown"}:typeof Bun<"u"?{name:"bun",version:Bun.version??"unknown"}:typeof window<"u"&&typeof navigator<"u"?{name:"browser",version:navigator.userAgent}:null}function Ee(){if(typeof process<"u"&&process.platform){let e=process.platform;switch(e){case "darwin":return "darwin";case "win32":return "windows";case "linux":return "linux";default:return e}}if(typeof navigator<"u"){let e=navigator.userAgent.toLowerCase();if(e.includes("mac"))return "darwin";if(e.includes("win"))return "windows";if(e.includes("linux"))return "linux"}return null}function Re(){try{if(typeof G<"u")return Z().version??"unknown"}catch{}return "unknown"}var v=null;function ne(e){if(!v){let t=Se(),r=Ee();v={"telemetry.sdk.name":Ie,"telemetry.sdk.version":Re(),"telemetry.sdk.language":xe},t&&(v["process.runtime.name"]=t.name,v["process.runtime.version"]=t.version),r&&(v["os.type"]=r);}let n={...v};return e?.name&&(n["service.name"]=e.name),e?.version&&(n["service.version"]=e.version),e?.environment&&(n["deployment.environment"]=e.environment),n}var $={},y=null,j=null,te="https://api.lelemon.dev";function Ae(e={}){$=e,e.debug&&B(true),j=ne(e.service),D("Initializing SDK",{endpoint:e.endpoint??te,debug:e.debug??false,disabled:e.disabled??false,telemetry:j}),y=oe(e),y.isEnabled()?D("SDK initialized - tracing enabled"):d("SDK initialized - tracing disabled (no API key or explicitly disabled)");}function re(){return $}function O(){return j}function Oe(){return h().isEnabled()}function h(){return y||(y=oe($)),y}async function Me(){y&&await y.flush();}function oe(e){let n=e.apiKey??De("LELEMON_API_KEY");return !n&&!e.disabled&&R("No API key provided. Set apiKey in init() or LELEMON_API_KEY env var. Tracing disabled."),new A({apiKey:n??"",endpoint:e.endpoint??te,debug:e.debug??false,disabled:e.disabled??!n,batchSize:e.batchSize,flushIntervalMs:e.flushIntervalMs,requestTimeoutMs:e.requestTimeoutMs})}function De(e){if(typeof process<"u"&&process.env)return process.env[e]}var N=Symbol.for("@lelemondev/sdk:globalContext");function ie(){let e=globalThis;return e[N]||(e[N]={context:{}}),e[N]}function ae(e){ie().context=e,d("Global context updated",e);}function S(){return ie().context}function k(e){try{let n=h();if(!n.isEnabled()){d("Transport disabled, skipping trace capture");return}let t=S(),r=f(),o=C(),s=O(),i={provider:e.provider,model:e.model,input:L(e.input),rawResponse:e.rawResponse?x(e.rawResponse,0):void 0,durationMs:e.durationMs,status:e.status,streaming:e.streaming,firstTokenMs:e.firstTokenMs,sessionId:t.sessionId,userId:t.userId,traceId:r?.traceId,spanId:o,parentSpanId:r?.currentSpanId,metadata:{...t.metadata,...e.metadata,...r?{_traceName:r.name}:{},...s?{_telemetry:s}:{}},tags:t.tags,spanType:e.spanType,name:e.name};return P(e.provider,e.model,e.durationMs,e.status),n.enqueue(i),o}catch(n){_(e.provider,n instanceof Error?n:new Error(String(n)));return}}function T(e){try{let n=h();if(!n.isEnabled()){d("Transport disabled, skipping error capture");return}let t=S(),r=f(),o=O(),s={provider:e.provider,model:e.model,input:L(e.input),durationMs:e.durationMs,status:"error",errorMessage:e.error.message,streaming:e.streaming,sessionId:t.sessionId,userId:t.userId,traceId:r?.traceId,spanId:C(),parentSpanId:r?.currentSpanId,metadata:{...t.metadata,...e.metadata,...r?{_traceName:r.name}:{},...o?{_telemetry:o}:{}},tags:t.tags};P(e.provider,e.model,e.durationMs,"error"),d("Error details",{message:e.error.message,stack:e.error.stack}),n.enqueue(s);}catch(n){_(e.provider,n instanceof Error?n:new Error(String(n)));}}function K(e){try{let n=h();if(!n.isEnabled()){d("Transport disabled, skipping span capture");return}let t=S(),r=f(),o=e.metadata?._traceId,s=e.metadata?._parentSpanId,i=O(),a={...t.metadata,...e.metadata,...i?{_telemetry:i}:{}};delete a._traceId,delete a._parentSpanId;let c={spanType:e.type,name:e.name,provider:"unknown",model:e.name,input:L(e.input),output:x(e.output,0),durationMs:e.durationMs,status:e.status||"success",errorMessage:e.errorMessage,streaming:!1,sessionId:t.sessionId,userId:t.userId,traceId:o??r?.traceId,spanId:C(),parentSpanId:s??r?.currentSpanId,toolCallId:e.toolCallId,metadata:a,tags:t.tags};d(`Span captured: ${e.type}/${e.name}`,{durationMs:e.durationMs}),n.enqueue(c);}catch(n){_("unknown",n instanceof Error?n:new Error(String(n)));}}var se=1e5,Pe=["api_key","apikey","password","secret","authorization"],qe=["access_token","auth_token","bearer_token","refresh_token","id_token","session_token"],je=["inputtokens","outputtokens","totaltokens","prompttokens","completiontokens","cachereadtokens","cachewritetokens","cachereadinputtokens","cachewriteinputtokens","reasoningtokens"];function $e(e){let n=e.toLowerCase();return je.includes(n)?false:!!(Pe.some(t=>n.includes(t))||qe.some(t=>n.includes(t)))}function L(e){return x(e,0)}function x(e,n){if(n>10)return "[max depth exceeded]";if(e==null)return e;if(typeof e=="string")return e.length>se?e.slice(0,se)+"...[truncated]":e;if(typeof e=="number"||typeof e=="boolean")return e;if(Array.isArray(e))return e.map(t=>x(t,n+1));if(typeof e=="object"){let t={};for(let[r,o]of Object.entries(e))$e(r)?t[r]="[REDACTED]":t[r]=x(o,n+1);return t}return String(e)}var F=Symbol.for("@lelemondev/sdk:traceStorage");function Ke(){let e=globalThis;return e[F]||(e[F]=new async_hooks.AsyncLocalStorage),e[F]}var ue=Ke();function C(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function f(){return ue.getStore()}function z(e,n){let t=f();if(t)for(let r of e)t.pendingToolCalls.set(r,n),d(`Registered tool call ${r} \u2192 LLM span ${n}`);}function Le(e){let n=f();if(n)return e&&n.pendingToolCalls.has(e)?n.pendingToolCalls.get(e):n.currentSpanId}function Fe(e){let n=f();n&&n.pendingToolCalls.delete(e);}async function ze(e,n){let t=typeof e=="string"?{name:e}:e,r=f(),o=r?.traceId??C(),s=C(),i={traceId:o,rootSpanId:s,currentSpanId:s,parentSpanId:r?.currentSpanId,name:t.name,startTime:Date.now(),input:t.input,metadata:t.metadata,tags:t.tags,pendingToolCalls:new Map};return ue.run(i,async()=>{let a,c;try{return a=await n(),a}catch(u){throw c=u instanceof Error?u:new Error(String(u)),u}finally{Ue(i,c?void 0:a,c);}})}function Ue(e,n,t){let r=h();if(!r.isEnabled()){d("Transport disabled, skipping root span");return}let o=S(),s=Date.now()-e.startTime,i=t?null:n,a={spanType:"agent",name:e.name,provider:"agent",model:e.name,traceId:e.traceId,spanId:e.rootSpanId,parentSpanId:e.parentSpanId,input:e.input,output:i,inputTokens:0,outputTokens:0,durationMs:s,status:t?"error":"success",errorMessage:t?.message,streaming:false,sessionId:o.sessionId,userId:o.userId,metadata:{...o.metadata,...e.metadata},tags:e.tags??o.tags};d(`Sending root span: ${e.name}`,{durationMs:s,hasError:!!t}),r.enqueue(a);}function Ge(e){let n=f();if(!n){process.env.NODE_ENV!=="production"&&console.warn("[Lelemon] span() called outside of trace() - span will not be captured");return}let t=Le(e.toolCallId);K({type:e.type,name:e.name,input:e.input,output:e.output,durationMs:e.durationMs??0,status:e.status??"success",errorMessage:e.errorMessage,toolCallId:e.toolCallId,metadata:{...e.metadata,_traceId:n.traceId,_parentSpanId:t}}),e.toolCallId&&Fe(e.toolCallId);}var p="openai";function ce(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="OpenAI")return true;let t=e;return !!(t.chat&&t.completions)||!!t.responses}function de(e){return async function(...t){let r=Date.now(),o=t[0]||{},s=o.stream===true;try{let i=await e(...t);if(s&&le(i))return Ve(i,o,r);let a=Date.now()-r,c=i,u=k({provider:p,model:o.model||c.model||"unknown",input:o.messages,rawResponse:i,durationMs:a,status:"success",streaming:!1});if(u){let l=ge(c);l.length>0&&z(l,u);}return i}catch(i){let a=Date.now()-r;throw T({provider:p,model:o.model||"unknown",input:o.messages,error:i instanceof Error?i:new Error(String(i)),durationMs:a,streaming:s}),i}}}function le(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}async function*Ve(e,n,t){let r={choices:[{message:{content:"",tool_calls:[]},finish_reason:""}],usage:{prompt_tokens:0,completion_tokens:0}},o=null,s,i=false,a=new Map;try{for await(let c of e){let u=c,l=u?.choices?.[0]?.delta?.content;l&&(i||(i=!0,s=Date.now()-t),r.choices[0].message.content+=l);let E=u?.choices?.[0]?.delta?.tool_calls;if(E)for(let g of E){a.has(g.index)||a.set(g.index,{id:"",function:{name:"",arguments:""}});let M=a.get(g.index);g.id&&(M.id=g.id),g.function?.name&&(M.function.name=g.function.name),g.function?.arguments&&(M.function.arguments+=g.function.arguments);}let U=u?.choices?.[0]?.finish_reason;U&&(r.choices[0].finish_reason=U),u?.usage&&(r.usage=u.usage),yield c;}}catch(c){throw o=c instanceof Error?c:new Error(String(c)),c}finally{let c=Date.now()-t;if(a.size>0&&(r.choices[0].message.tool_calls=Array.from(a.entries()).sort((u,l)=>u[0]-l[0]).map(([,u])=>u)),o)T({provider:p,model:n.model||"unknown",input:n.messages,error:o,durationMs:c,streaming:true});else {let u=k({provider:p,model:n.model||"unknown",input:n.messages,rawResponse:r,durationMs:c,status:"success",streaming:true,firstTokenMs:s});if(u){let l=ge(r);l.length>0&&z(l,u);}}}}function pe(e){return async function(...t){let r=Date.now(),o=t[0]||{},s=o.stream===true;try{let i=await e(...t);if(s&&le(i))return Be(i,o,r);let a=Date.now()-r;return k({provider:p,model:o.model||"unknown",input:{instructions:o.instructions,input:o.input},rawResponse:i,durationMs:a,status:"success",streaming:!1}),i}catch(i){let a=Date.now()-r;throw T({provider:p,model:o.model||"unknown",input:{instructions:o.instructions,input:o.input},error:i instanceof Error?i:new Error(String(i)),durationMs:a,streaming:s}),i}}}async function*Be(e,n,t){let r=[],o=null,s=null;try{for await(let i of e){r.push(i);let a=i;a.type==="response.done"&&a.response&&(o=a.response),yield i;}}catch(i){throw s=i instanceof Error?i:new Error(String(i)),i}finally{let i=Date.now()-t;s?T({provider:p,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},error:s,durationMs:i,streaming:true}):k({provider:p,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},rawResponse:o||{streamEvents:r},durationMs:i,status:"success",streaming:true});}}function me(e){return async function(...t){let r=Date.now(),o=t[0]||{};try{let s=await e(...t),i=Date.now()-r;return k({provider:p,model:o.model||"unknown",input:o.prompt,rawResponse:s,durationMs:i,status:"success",streaming:!1}),s}catch(s){let i=Date.now()-r;throw T({provider:p,model:o.model||"unknown",input:o.prompt,error:s instanceof Error?s:new Error(String(s)),durationMs:i,streaming:false}),s}}}function fe(e){return async function(...t){let r=Date.now(),o=t[0]||{};try{let s=await e(...t),i=Date.now()-r;return k({provider:p,model:o.model||"unknown",input:o.input,rawResponse:s,durationMs:i,status:"success",streaming:!1,spanType:"embedding"}),s}catch(s){let i=Date.now()-r;throw T({provider:p,model:o.model||"unknown",input:o.input,error:s instanceof Error?s:new Error(String(s)),durationMs:i,streaming:false}),s}}}function ge(e){let n=[],t=e.choices?.[0]?.message?.tool_calls;if(Array.isArray(t))for(let r of t)r.id&&n.push(r.id);return n}function jn(e,n){return n&&ae(n),re().disabled?(d("Tracing disabled, returning unwrapped client"),e):ce(e)?(H("openai"),We(e)):(R("Client is not an OpenAI client. Use @lelemondev/sdk/openai only with OpenAI SDK."),e)}function We(e){let n=e;return new Proxy(n,{get(t,r,o){let s=Reflect.get(t,r,o);return r==="chat"&&s&&typeof s=="object"?Ye(s):r==="responses"&&s&&typeof s=="object"?Je(s):r==="completions"&&s&&typeof s=="object"?Qe(s):r==="embeddings"&&s&&typeof s=="object"?Ze(s):s}})}function Ye(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="completions"&&o&&typeof o=="object"?Xe(o):o}})}function Xe(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?de(o.bind(n)):o}})}function Je(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?pe(o.bind(n)):o}})}function Qe(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?me(o.bind(n)):o}})}function Ze(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?fe(o.bind(n)):o}})}
|
|
3
|
-
exports.captureSpan=
|
|
2
|
+
var be=Object.defineProperty;var he=(e,n,t)=>n in e?be(e,n,{enumerable:true,configurable:true,writable:true,value:t}):e[n]=t;var B=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,t)=>(typeof require<"u"?require:n)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var ke=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var I=(e,n,t)=>he(e,typeof n!="symbol"?n+"":n,t);var ee=ke((mn,Se)=>{Se.exports={name:"@lelemondev/sdk",version:"0.9.8",description:"Automatic LLM observability. Wrap your client, everything is traced.",author:"Lelemon <info@lelemon.dev>",license:"MIT",repository:{type:"git",url:"git+https://github.com/lelemondev/lelemondev-sdk.git"},homepage:"https://lelemon.dev",bugs:{url:"https://github.com/lelemondev/lelemondev-sdk/issues"},keywords:["llm","observability","tracing","openai","anthropic","nextjs","lambda","express","hono","claude","gpt","ai","monitoring","serverless"],main:"./dist/index.js",module:"./dist/index.mjs",types:"./dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./openai":{types:"./dist/openai.d.ts",import:"./dist/openai.mjs",require:"./dist/openai.js"},"./anthropic":{types:"./dist/anthropic.d.ts",import:"./dist/anthropic.mjs",require:"./dist/anthropic.js"},"./bedrock":{types:"./dist/bedrock.d.ts",import:"./dist/bedrock.mjs",require:"./dist/bedrock.js"},"./gemini":{types:"./dist/gemini.d.ts",import:"./dist/gemini.mjs",require:"./dist/gemini.js"},"./openrouter":{types:"./dist/openrouter.d.ts",import:"./dist/openrouter.mjs",require:"./dist/openrouter.js"},"./next":{types:"./dist/next.d.ts",import:"./dist/next.mjs",require:"./dist/next.js"},"./lambda":{types:"./dist/lambda.d.ts",import:"./dist/lambda.mjs",require:"./dist/lambda.js"},"./express":{types:"./dist/express.d.ts",import:"./dist/express.mjs",require:"./dist/express.js"},"./hono":{types:"./dist/hono.d.ts",import:"./dist/hono.mjs",require:"./dist/hono.js"},"./integrations":{types:"./dist/integrations.d.ts",import:"./dist/integrations.mjs",require:"./dist/integrations.js"},"./package.json":"./package.json"},typesVersions:{"*":{openai:["./dist/openai.d.ts"],anthropic:["./dist/anthropic.d.ts"],bedrock:["./dist/bedrock.d.ts"],gemini:["./dist/gemini.d.ts"],openrouter:["./dist/openrouter.d.ts"],next:["./dist/next.d.ts"],lambda:["./dist/lambda.d.ts"],express:["./dist/express.d.ts"],hono:["./dist/hono.d.ts"],integrations:["./dist/integrations.d.ts"],"*":["./dist/index.d.ts"]}},files:["dist/**/*.js","dist/**/*.mjs","dist/**/*.d.ts","dist/**/*.d.mts","README.md"],sideEffects:false,engines:{node:">=18.0.0"},scripts:{build:"tsup",dev:"tsup --watch",docs:"typedoc && node scripts/generate-llms-txt.mjs",prepublishOnly:"npm run build",lint:"eslint src/",test:"vitest","test:run":"vitest run","test:coverage":"vitest run --coverage","test:e2e":"vitest run tests/e2e",typecheck:"tsc --noEmit"},devDependencies:{"@aws-sdk/client-bedrock-runtime":"^3.962.0","@google/generative-ai":"^0.24.1","@types/node":"^20.0.0","@vitest/coverage-v8":"^2.0.0",dotenv:"^17.2.3",openai:"^6.15.0",tsup:"^8.5.1",typedoc:"^0.28.15",typescript:"^5.9.3",vitest:"^2.0.0"}};});var V=false;function H(e){V=e;}function w(){return V?true:Te("LELEMON_DEBUG")==="true"}var f="[Lelemon]";function d(e,n){w()&&j("debug",e,n);}function P(e,n){w()&&j("info",e,n);}function R(e,n){j("warn",e,n);}function q(e,n,t,r){w()&&console.log(`${f} Captured trace: provider=${e} model=${n} duration=${t}ms status=${r}`);}function _(e,n){console.error(`${f} Failed to capture trace: provider=${e} error=${n.message}`);}function W(e){w()&&console.log(`${f} Wrapped client: provider=${e}`);}function Y(e,n){w()&&console.log(`${f} Sending batch: count=${e} endpoint=${n}`);}function X(e,n){w()&&console.log(`${f} Batch sent successfully: count=${e} duration=${n}ms`);}function Z(e,n){let t=n instanceof Error?n.message:String(n);console.error(`${f} Batch send failed: count=${e} error=${t}`);}function J(e,n,t){w()&&console.log(`${f} Request: ${e} ${n} (${t} bytes)`);}function Q(e,n){w()&&console.log(`${f} Response: status=${e} duration=${n}ms`);}function j(e,n,t){let r=e==="error"?console.error:e==="warn"?console.warn:console.log;t!==void 0?r(`${f} ${n}`,t):r(`${f} ${n}`);}function Te(e){if(typeof process<"u"&&process.env)return process.env[e]}var Ce=10,ve=1e3,Ie=1e4,A=class{constructor(n){I(this,"config");I(this,"queue",[]);I(this,"flushPromise",null);I(this,"flushTimer",null);this.config={apiKey:n.apiKey,endpoint:n.endpoint,debug:n.debug,disabled:n.disabled,batchSize:n.batchSize??Ce,flushIntervalMs:n.flushIntervalMs??ve,requestTimeoutMs:n.requestTimeoutMs??Ie};}isEnabled(){return !this.config.disabled&&!!this.config.apiKey}enqueue(n){this.config.disabled||(this.queue.push(n),this.queue.length>=this.config.batchSize?this.flush():this.scheduleFlush());}async flush(){if(this.flushPromise)return this.flushPromise;if(this.queue.length===0)return;this.cancelScheduledFlush();let n=this.queue;return this.queue=[],this.flushPromise=this.sendBatch(n).finally(()=>{this.flushPromise=null;}),this.flushPromise}getPendingCount(){return this.queue.length}scheduleFlush(){this.flushTimer===null&&(this.flushTimer=setTimeout(()=>{this.flushTimer=null,this.flush();},this.config.flushIntervalMs));}cancelScheduledFlush(){this.flushTimer!==null&&(clearTimeout(this.flushTimer),this.flushTimer=null);}async sendBatch(n){if(n.length===0)return;let t=Date.now();Y(n.length,`${this.config.endpoint}/api/v1/ingest`);try{await this.request("POST","/api/v1/ingest",{events:n}),X(n.length,Date.now()-t);}catch(r){Z(n.length,r);}}async request(n,t,r){let o=`${this.config.endpoint}${t}`,s=new AbortController,i=r?JSON.stringify(r):void 0;J(n,o,i?.length??0);let a=setTimeout(()=>{s.abort();},this.config.requestTimeoutMs),c=Date.now();try{let u=await fetch(o,{method:n,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`},body:i,signal:s.signal});if(clearTimeout(a),Q(u.status,Date.now()-c),!u.ok){let E=await u.text().catch(()=>"Unknown error");throw new Error(`HTTP ${u.status}: ${E}`)}let l=await u.text();return l?JSON.parse(l):{}}catch(u){throw clearTimeout(a),u instanceof Error&&u.name==="AbortError"?new Error(`Request timeout after ${this.config.requestTimeoutMs}ms`):u}}};var xe="@lelemondev/sdk",Ee="nodejs";function Re(){return typeof process<"u"&&process.versions?.node?{name:"nodejs",version:process.versions.node}:typeof Deno<"u"?{name:"deno",version:Deno.version?.deno??"unknown"}:typeof Bun<"u"?{name:"bun",version:Bun.version??"unknown"}:typeof window<"u"&&typeof navigator<"u"?{name:"browser",version:navigator.userAgent}:null}function _e(){if(typeof process<"u"&&process.platform){let e=process.platform;switch(e){case "darwin":return "darwin";case "win32":return "windows";case "linux":return "linux";default:return e}}if(typeof navigator<"u"){let e=navigator.userAgent.toLowerCase();if(e.includes("mac"))return "darwin";if(e.includes("win"))return "windows";if(e.includes("linux"))return "linux"}return null}function Ae(){try{if(typeof B<"u")return ee().version??"unknown"}catch{}return "unknown"}var C=null;function te(e){if(!C){let t=Re(),r=_e();C={"telemetry.sdk.name":xe,"telemetry.sdk.version":Ae(),"telemetry.sdk.language":Ee},t&&(C["process.runtime.name"]=t.name,C["process.runtime.version"]=t.version),r&&(C["os.type"]=r);}let n={...C};return e?.name&&(n["service.name"]=e.name),e?.version&&(n["service.version"]=e.version),e?.environment&&(n["deployment.environment"]=e.environment),n}var N={},b=null,$=null,re="https://api.lelemon.dev";function Me(e={}){N=e,e.debug&&H(true),$=te(e.service),P("Initializing SDK",{endpoint:e.endpoint??re,debug:e.debug??false,disabled:e.disabled??false,telemetry:$}),b=oe(e),b.isEnabled()?P("SDK initialized - tracing enabled"):d("SDK initialized - tracing disabled (no API key or explicitly disabled)");}function O(){return N}function M(){return $}function De(){return h().isEnabled()}function h(){return b||(b=oe(N)),b}async function Pe(){b&&await b.flush();}function oe(e){let n=e.apiKey??qe("LELEMON_API_KEY");return !n&&!e.disabled&&R("No API key provided. Set apiKey in init() or LELEMON_API_KEY env var. Tracing disabled."),new A({apiKey:n??"",endpoint:e.endpoint??re,debug:e.debug??false,disabled:e.disabled??!n,batchSize:e.batchSize,flushIntervalMs:e.flushIntervalMs,requestTimeoutMs:e.requestTimeoutMs})}function qe(e){if(typeof process<"u"&&process.env)return process.env[e]}var K=Symbol.for("@lelemondev/sdk:globalContext");function ae(){let e=globalThis;return e[K]||(e[K]={context:{}}),e[K]}function ue(e){ae().context=e,d("Global context updated",e);}function x(){return ae().context}function k(e){try{let n=h();if(!n.isEnabled()){d("Transport disabled, skipping trace capture");return}let t=x(),r=m(),o=v(),s=M(),i={provider:e.provider,model:e.model,input:z(e.input),rawResponse:e.rawResponse?S(e.rawResponse,0):void 0,durationMs:e.durationMs,status:e.status,streaming:e.streaming,firstTokenMs:e.firstTokenMs,sessionId:r?.sessionId??t.sessionId,userId:r?.userId??t.userId,traceId:r?.traceId,spanId:o,parentSpanId:r?.currentSpanId,metadata:{...t.metadata,...e.metadata,...r?{_traceName:r.name}:{},...s?{_telemetry:s}:{}},tags:t.tags,spanType:e.spanType,name:e.name};return q(e.provider,e.model,e.durationMs,e.status),n.enqueue(i),o}catch(n){_(e.provider,n instanceof Error?n:new Error(String(n)));return}}function T(e){try{let n=h();if(!n.isEnabled()){d("Transport disabled, skipping error capture");return}let t=x(),r=m(),o=M(),s={provider:e.provider,model:e.model,input:z(e.input),durationMs:e.durationMs,status:"error",errorMessage:e.error.message,streaming:e.streaming,sessionId:r?.sessionId??t.sessionId,userId:r?.userId??t.userId,traceId:r?.traceId,spanId:v(),parentSpanId:r?.currentSpanId,metadata:{...t.metadata,...e.metadata,...r?{_traceName:r.name}:{},...o?{_telemetry:o}:{}},tags:t.tags};q(e.provider,e.model,e.durationMs,"error"),d("Error details",{message:e.error.message,stack:e.error.stack}),n.enqueue(s);}catch(n){_(e.provider,n instanceof Error?n:new Error(String(n)));}}function L(e){try{let n=h();if(!n.isEnabled()){d("Transport disabled, skipping span capture");return}let t=x(),r=m(),o=e.metadata?._traceId,s=e.metadata?._parentSpanId,i=M(),a={...t.metadata,...e.metadata,...i?{_telemetry:i}:{}};delete a._traceId,delete a._parentSpanId;let c={spanType:e.type,name:e.name,provider:"unknown",model:e.name,input:z(e.input),output:S(e.output,0),durationMs:e.durationMs,status:e.status||"success",errorMessage:e.errorMessage,streaming:!1,sessionId:r?.sessionId??t.sessionId,userId:r?.userId??t.userId,traceId:o??r?.traceId,spanId:v(),parentSpanId:s??r?.currentSpanId,toolCallId:e.toolCallId,metadata:a,tags:t.tags};d(`Span captured: ${e.type}/${e.name}`,{durationMs:e.durationMs}),n.enqueue(c);}catch(n){_("unknown",n instanceof Error?n:new Error(String(n)));}}var se=1e5,je=["api_key","apikey","password","secret","authorization"],$e=["access_token","auth_token","bearer_token","refresh_token","id_token","session_token"],Ne=["inputtokens","outputtokens","totaltokens","prompttokens","completiontokens","cachereadtokens","cachewritetokens","cachereadinputtokens","cachewriteinputtokens","reasoningtokens"],ie={emails:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,phones:/\b\d{9,}\b/g};function ce(){return O().redaction??{}}function Ke(e){let n=e.toLowerCase();return Ne.includes(n)?false:!!(je.some(r=>n.includes(r))||$e.some(r=>n.includes(r))||(ce().keys??[]).some(r=>n.includes(r.toLowerCase())))}function Le(e){let n=ce(),t=e;for(let r of n.patterns??[])r.lastIndex=0,t=t.replace(r,"[REDACTED]");return n.emails&&(t=t.replace(ie.emails,"[EMAIL]")),n.phones&&(t=t.replace(ie.phones,"[PHONE]")),t}function z(e){return S(e,0)}function S(e,n){if(n>10)return "[max depth exceeded]";if(e==null)return e;if(typeof e=="string"){let t=Le(e);return t.length>se&&(t=t.slice(0,se)+"...[truncated]"),t}if(typeof e=="number"||typeof e=="boolean")return e;if(Array.isArray(e))return e.map(t=>S(t,n+1));if(typeof e=="object"){let t={};for(let[r,o]of Object.entries(e))Ke(r)?t[r]="[REDACTED]":t[r]=S(o,n+1);return t}return String(e)}var F=Symbol.for("@lelemondev/sdk:traceStorage");function Fe(){let e=globalThis;return e[F]||(e[F]=new async_hooks.AsyncLocalStorage),e[F]}var de=Fe();function v(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function m(){return de.getStore()}function U(e,n){let t=m();if(t)for(let r of e)t.pendingToolCalls.set(r,n),d(`Registered tool call ${r} \u2192 LLM span ${n}`);}function Ue(e){let n=m();if(n)return e&&n.pendingToolCalls.has(e)?n.pendingToolCalls.get(e):n.currentSpanId}function Ge(e){let n=m();n&&n.pendingToolCalls.delete(e);}async function Be(e,n){let t=typeof e=="string"?{name:e}:e,r=m(),o=r?.traceId??v(),s=v(),i={traceId:o,rootSpanId:s,currentSpanId:s,parentSpanId:r?.currentSpanId,name:t.name,startTime:Date.now(),input:t.input,metadata:t.metadata,tags:t.tags,outputKey:t.outputKey,outputTransform:t.outputTransform,sessionId:t.sessionId,userId:t.userId,pendingToolCalls:new Map};return de.run(i,async()=>{let a,c;try{return a=await n(),a}catch(u){throw c=u instanceof Error?u:new Error(String(u)),u}finally{We(i,c?void 0:a,c);}})}var Ve=["text","content","message","output","response","result","answer"];function He(e,n,t){if(t)try{return t(e)}catch{return e}if(n===false)return e;if(typeof n=="string"&&e&&typeof e=="object"){let o=e;return n in o?o[n]:e}if(e==null||typeof e!="object"||Array.isArray(e))return e;let r=e;for(let o of Ve)if(o in r&&typeof r[o]=="string")return r[o];return e}function We(e,n,t){let r=h();if(!r.isEnabled()){d("Transport disabled, skipping root span");return}let o=x(),s=Date.now()-e.startTime,i=t?null:He(n,e.outputKey,e.outputTransform),a={spanType:"agent",name:e.name,provider:"agent",model:e.name,traceId:e.traceId,spanId:e.rootSpanId,parentSpanId:e.parentSpanId,input:e.input,output:i,inputTokens:0,outputTokens:0,durationMs:s,status:t?"error":"success",errorMessage:t?.message,streaming:false,sessionId:e.sessionId??o.sessionId,userId:e.userId??o.userId,metadata:{...o.metadata,...e.metadata},tags:e.tags??o.tags};d(`Sending root span: ${e.name}`,{durationMs:s,hasError:!!t}),r.enqueue(a);}function Ye(e){let n=m();if(!n){process.env.NODE_ENV!=="production"&&console.warn("[Lelemon] span() called outside of trace() - span will not be captured");return}let t=Ue(e.toolCallId);L({type:e.type,name:e.name,input:e.input,output:e.output,durationMs:e.durationMs??0,status:e.status??"success",errorMessage:e.errorMessage,toolCallId:e.toolCallId,metadata:{...e.metadata,_traceId:n.traceId,_parentSpanId:t}}),e.toolCallId&&Ge(e.toolCallId);}var p="openai";function le(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="OpenAI")return true;let t=e;return !!(t.chat&&t.completions)||!!t.responses}function pe(e){return async function(...t){let r=Date.now(),o=t[0]||{},s=o.stream===true;try{let i=await e(...t);if(s&&fe(i))return Xe(i,o,r);let a=Date.now()-r,c=i,u=k({provider:p,model:o.model||c.model||"unknown",input:o.messages,rawResponse:i,durationMs:a,status:"success",streaming:!1});if(u){let l=ye(c);l.length>0&&U(l,u);}return i}catch(i){let a=Date.now()-r;throw T({provider:p,model:o.model||"unknown",input:o.messages,error:i instanceof Error?i:new Error(String(i)),durationMs:a,streaming:s}),i}}}function fe(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}async function*Xe(e,n,t){let r={choices:[{message:{content:"",tool_calls:[]},finish_reason:""}],usage:{prompt_tokens:0,completion_tokens:0}},o=null,s,i=false,a=new Map;try{for await(let c of e){let u=c,l=u?.choices?.[0]?.delta?.content;l&&(i||(i=!0,s=Date.now()-t),r.choices[0].message.content+=l);let E=u?.choices?.[0]?.delta?.tool_calls;if(E)for(let g of E){a.has(g.index)||a.set(g.index,{id:"",function:{name:"",arguments:""}});let D=a.get(g.index);g.id&&(D.id=g.id),g.function?.name&&(D.function.name=g.function.name),g.function?.arguments&&(D.function.arguments+=g.function.arguments);}let G=u?.choices?.[0]?.finish_reason;G&&(r.choices[0].finish_reason=G),u?.usage&&(r.usage=u.usage),yield c;}}catch(c){throw o=c instanceof Error?c:new Error(String(c)),c}finally{let c=Date.now()-t;if(a.size>0&&(r.choices[0].message.tool_calls=Array.from(a.entries()).sort((u,l)=>u[0]-l[0]).map(([,u])=>u)),o)T({provider:p,model:n.model||"unknown",input:n.messages,error:o,durationMs:c,streaming:true});else {let u=k({provider:p,model:n.model||"unknown",input:n.messages,rawResponse:r,durationMs:c,status:"success",streaming:true,firstTokenMs:s});if(u){let l=ye(r);l.length>0&&U(l,u);}}}}function me(e){return async function(...t){let r=Date.now(),o=t[0]||{},s=o.stream===true;try{let i=await e(...t);if(s&&fe(i))return Ze(i,o,r);let a=Date.now()-r;return k({provider:p,model:o.model||"unknown",input:{instructions:o.instructions,input:o.input},rawResponse:i,durationMs:a,status:"success",streaming:!1}),i}catch(i){let a=Date.now()-r;throw T({provider:p,model:o.model||"unknown",input:{instructions:o.instructions,input:o.input},error:i instanceof Error?i:new Error(String(i)),durationMs:a,streaming:s}),i}}}async function*Ze(e,n,t){let r=[],o=null,s=null;try{for await(let i of e){r.push(i);let a=i;a.type==="response.done"&&a.response&&(o=a.response),yield i;}}catch(i){throw s=i instanceof Error?i:new Error(String(i)),i}finally{let i=Date.now()-t;s?T({provider:p,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},error:s,durationMs:i,streaming:true}):k({provider:p,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},rawResponse:o||{streamEvents:r},durationMs:i,status:"success",streaming:true});}}function ge(e){return async function(...t){let r=Date.now(),o=t[0]||{};try{let s=await e(...t),i=Date.now()-r;return k({provider:p,model:o.model||"unknown",input:o.prompt,rawResponse:s,durationMs:i,status:"success",streaming:!1}),s}catch(s){let i=Date.now()-r;throw T({provider:p,model:o.model||"unknown",input:o.prompt,error:s instanceof Error?s:new Error(String(s)),durationMs:i,streaming:false}),s}}}function we(e){return async function(...t){let r=Date.now(),o=t[0]||{};try{let s=await e(...t),i=Date.now()-r;return k({provider:p,model:o.model||"unknown",input:o.input,rawResponse:s,durationMs:i,status:"success",streaming:!1,spanType:"embedding"}),s}catch(s){let i=Date.now()-r;throw T({provider:p,model:o.model||"unknown",input:o.input,error:s instanceof Error?s:new Error(String(s)),durationMs:i,streaming:false}),s}}}function ye(e){let n=[],t=e.choices?.[0]?.message?.tool_calls;if(Array.isArray(t))for(let r of t)r.id&&n.push(r.id);return n}function zn(e,n){return n&&ue(n),O().disabled?(d("Tracing disabled, returning unwrapped client"),e):le(e)?(W("openai"),Qe(e)):(R("Client is not an OpenAI client. Use @lelemondev/sdk/openai only with OpenAI SDK."),e)}function Qe(e){let n=e;return new Proxy(n,{get(t,r,o){let s=Reflect.get(t,r,o);return r==="chat"&&s&&typeof s=="object"?en(s):r==="responses"&&s&&typeof s=="object"?tn(s):r==="completions"&&s&&typeof s=="object"?rn(s):r==="embeddings"&&s&&typeof s=="object"?on(s):s}})}function en(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="completions"&&o&&typeof o=="object"?nn(o):o}})}function nn(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?pe(o.bind(n)):o}})}function tn(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?me(o.bind(n)):o}})}function rn(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?ge(o.bind(n)):o}})}function on(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="create"&&typeof o=="function"?we(o.bind(n)):o}})}
|
|
3
|
+
exports.captureSpan=L;exports.flush=Pe;exports.getTraceContext=m;exports.init=Me;exports.isEnabled=De;exports.observe=zn;exports.span=Ye;exports.trace=Be;//# sourceMappingURL=openai.js.map
|
|
4
4
|
//# sourceMappingURL=openai.js.map
|