@lelemondev/sdk 0.10.0 → 0.10.1
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 +170 -4
- 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 +1 -1
- package/dist/bedrock.mjs +1 -1
- package/dist/{capture-CiUL-4hv.d.mts → capture-DOj4Z9MB.d.mts} +16 -1
- package/dist/{capture-CiUL-4hv.d.ts → capture-DOj4Z9MB.d.ts} +16 -1
- package/dist/gemini.d.mts +2 -2
- package/dist/gemini.d.ts +2 -2
- package/dist/gemini.js +1 -1
- package/dist/gemini.mjs +1 -1
- package/dist/google-genai.d.mts +2 -2
- package/dist/google-genai.d.ts +2 -2
- package/dist/google-genai.js +1 -1
- package/dist/google-genai.mjs +1 -1
- 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 +1 -1
- package/dist/openai.mjs +1 -1
- 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.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import {AsyncLocalStorage}from'async_hooks';/* @lelemondev/sdk - LLM Observability */
|
|
2
|
-
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 Ve=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var se=Ve((xt,Ze)=>{Ze.exports={name:"@lelemondev/sdk",version:"0.10.0",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"},"./google-genai":{types:"./dist/google-genai.d.ts",import:"./dist/google-genai.mjs",require:"./dist/google-genai.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"],"google-genai":["./dist/google-genai.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/genai":"^1.0.0","@google/generative-ai":"^0.24.1","@anthropic-ai/sdk":"^0.82.0","@types/node":"^22.0.0","@vitest/coverage-v8":"^4.0.0",dotenv:"^17.2.3",openai:"^6.15.0",tsup:"^8.5.1",vite:"^6.0.0",typedoc:"^0.28.18",typescript:"^6.0.0",vitest:"^4.0.0"}};});var Z=false;function Q(e){Z=e;}function v(){return Z?true:He("LELEMON_DEBUG")==="true"}var h="[Lelemon]";function k(e,n){v()&&K("debug",e,n);}function $(e,n){v()&&K("info",e,n);}function G(e,n){K("warn",e,n);}function L(e,n,t,o){v()&&console.log(`${h} Captured trace: provider=${e} model=${n} duration=${t}ms status=${o}`);}function O(e,n){console.error(`${h} Failed to capture trace: provider=${e} error=${n.message}`);}function R(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 o=e==="error"?console.error:e==="warn"?console.warn:console.log;t!==void 0?o(`${h} ${n}`,t):o(`${h} ${n}`);}function He(e){if(typeof process<"u"&&process.env)return process.env[e]}var We=10,Ye=1e3,Xe=1e4,N=class{config;queue=[];flushPromise=null;flushTimer=null;constructor(n){this.config={apiKey:n.apiKey,endpoint:n.endpoint,debug:n.debug,disabled:n.disabled,batchSize:n.batchSize??We,flushIntervalMs:n.flushIntervalMs??Ye,requestTimeoutMs:n.requestTimeoutMs??Xe};}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 c=setTimeout(()=>{s.abort();},this.config.requestTimeoutMs),u=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(c),oe(i.status,Date.now()-u),!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(c),i instanceof Error&&i.name==="AbortError"?new Error(`Request timeout after ${this.config.requestTimeoutMs}ms`):i}}};var Qe="@lelemondev/sdk",en="nodejs";function nn(){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 tn(){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 rn(){try{if(typeof X<"u")return se().version??"unknown"}catch{}return "unknown"}var E=null;function ie(e){if(!E){let t=nn(),o=tn();E={"telemetry.sdk.name":Qe,"telemetry.sdk.version":rn(),"telemetry.sdk.language":en},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={},T=null,J=null,ue="https://api.lelemon.dev";function sn(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}),T=ce(e),T.isEnabled()?$("SDK initialized - tracing enabled"):k("SDK initialized - tracing disabled (no API key or explicitly disabled)");}function j(){return F}function B(){return J}function an(){return x().isEnabled()}function x(){return T||(T=ce(F)),T}async function un(){T&&await T.flush();}function ce(e){let n=e.apiKey??cn("LELEMON_API_KEY");return !n&&!e.disabled&&G("No API key provided. Set apiKey in init() or LELEMON_API_KEY env var. Tracing disabled."),new N({apiKey:n??"",endpoint:e.endpoint??ue,debug:e.debug??false,disabled:e.disabled??!n,batchSize:e.batchSize,flushIntervalMs:e.flushIntervalMs,requestTimeoutMs:e.requestTimeoutMs})}function cn(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,k("Global context updated",e);}function A(){return pe().context}function m(e){try{let n=x();if(!n.isEnabled()){k("Transport disabled, skipping trace capture");return}let t=A(),o=C(),r=_(),s=B(),a={provider:e.provider,model:e.model,input:H(e.input),rawResponse:e.rawResponse?P(e.rawResponse,0):void 0,durationMs:e.durationMs,status:e.status,streaming:e.streaming,firstTokenMs:e.firstTokenMs,sessionId:o?.sessionId??t.sessionId,userId:o?.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){O(e.provider,n instanceof Error?n:new Error(String(n)));return}}function f(e){try{let n=x();if(!n.isEnabled()){k("Transport disabled, skipping error capture");return}let t=A(),o=C(),r=B(),s={provider:e.provider,model:e.model,input:H(e.input),durationMs:e.durationMs,status:"error",errorMessage:e.error.message,streaming:e.streaming,sessionId:o?.sessionId??t.sessionId,userId:o?.userId??t.userId,traceId:o?.traceId,spanId:_(),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"),k("Error details",{message:e.error.message,stack:e.error.stack}),n.enqueue(s);}catch(n){O(e.provider,n instanceof Error?n:new Error(String(n)));}}function V(e){try{let n=x();if(!n.isEnabled()){k("Transport disabled, skipping span capture");return}let t=A(),o=C(),r=e.metadata?._traceId,s=e.metadata?._parentSpanId,a=B(),c={...t.metadata,...e.metadata,...a?{_telemetry:a}:{}};delete c._traceId,delete c._parentSpanId;let u={spanType:e.type,name:e.name,provider:"unknown",model:e.name,input:H(e.input),output:P(e.output,0),durationMs:e.durationMs,status:e.status||"success",errorMessage:e.errorMessage,streaming:!1,sessionId:o?.sessionId??t.sessionId,userId:o?.userId??t.userId,traceId:r??o?.traceId,spanId:_(),parentSpanId:s??o?.currentSpanId,toolCallId:e.toolCallId,metadata:c,tags:t.tags};k(`Span captured: ${e.type}/${e.name}`,{durationMs:e.durationMs}),n.enqueue(u);}catch(n){O("unknown",n instanceof Error?n:new Error(String(n)));}}var de=1e5,dn=["api_key","apikey","password","secret","authorization"],ln=["access_token","auth_token","bearer_token","refresh_token","id_token","session_token"],pn=["inputtokens","outputtokens","totaltokens","prompttokens","completiontokens","cachereadtokens","cachewritetokens","cachereadinputtokens","cachewriteinputtokens","reasoningtokens"],le={emails:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,phones:/\b\d{9,}\b/g};function me(){return j().redaction??{}}function fn(e){let n=e.toLowerCase();return pn.includes(n)?false:!!(dn.some(o=>n.includes(o))||ln.some(o=>n.includes(o))||(me().keys??[]).some(o=>n.includes(o.toLowerCase())))}function mn(e){let n=me(),t=e;for(let o of n.patterns??[])o.lastIndex=0,t=t.replace(o,"[REDACTED]");return n.emails&&(t=t.replace(le.emails,"[EMAIL]")),n.phones&&(t=t.replace(le.phones,"[PHONE]")),t}function H(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=mn(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[o,r]of Object.entries(e))fn(o)?t[o]="[REDACTED]":t[o]=P(r,n+1);return t}return String(e)}var W=Symbol.for("@lelemondev/sdk:traceStorage");function wn(){let e=globalThis;return e[W]||(e[W]=new AsyncLocalStorage),e[W]}var ge=wn();function _(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function C(){return ge.getStore()}function g(e,n){let t=C();if(t)for(let o of e)t.pendingToolCalls.set(o,n),k(`Registered tool call ${o} \u2192 LLM span ${n}`);}function kn(e){let n=C();if(n)return e&&n.pendingToolCalls.has(e)?n.pendingToolCalls.get(e):n.currentSpanId}function yn(e){let n=C();n&&n.pendingToolCalls.delete(e);}async function hn(e,n){let t=typeof e=="string"?{name:e}:e,o=C(),r=o?.traceId??_(),s=_(),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,outputKey:t.outputKey,outputTransform:t.outputTransform,sessionId:t.sessionId,userId:t.userId,pendingToolCalls:new Map};return ge.run(a,async()=>{let c,u;try{return c=await n(),c}catch(i){throw u=i instanceof Error?i:new Error(String(i)),i}finally{vn(a,u?void 0:c,u);}})}var Cn=["text","content","message","output","response","result","answer"];function bn(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 r=e;return n in r?r[n]:e}if(e==null||typeof e!="object"||Array.isArray(e))return e;let o=e;for(let r of Cn)if(r in o&&typeof o[r]=="string")return o[r];return e}function vn(e,n,t){let o=x();if(!o.isEnabled()){k("Transport disabled, skipping root span");return}let r=A(),s=Date.now()-e.startTime,a=t?null:bn(n,e.outputKey,e.outputTransform),c={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??r.sessionId,userId:e.userId??r.userId,metadata:{...r.metadata,...e.metadata},tags:e.tags??r.tags};k(`Sending root span: ${e.name}`,{durationMs:s,hasError:!!t}),o.enqueue(c);}function In(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=kn(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&&yn(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 o=Date.now(),r=t[0]||{},s=r.stream===true;try{let a=await e(...t);if(s&&ye(a))return Sn(a,r,o);let c=Date.now()-o,u=a,i=m({provider:y,model:r.model||u.model||"unknown",input:r.messages,rawResponse:a,durationMs:c,status:"success",streaming:!1});if(i){let d=ve(u);d.length>0&&g(d,i);}return a}catch(a){let c=Date.now()-o;throw f({provider:y,model:r.model||"unknown",input:r.messages,error:a instanceof Error?a:new Error(String(a)),durationMs:c,streaming:s}),a}}}function ye(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}async function*Sn(e,n,t){let o={choices:[{message:{content:"",tool_calls:[]},finish_reason:""}],usage:{prompt_tokens:0,completion_tokens:0}},r=null,s,a=false,c=new Map;try{for await(let u of e){let i=u,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 w of l){c.has(w.index)||c.set(w.index,{id:"",function:{name:"",arguments:""}});let q=c.get(w.index);w.id&&(q.id=w.id),w.function?.name&&(q.function.name=w.function.name),w.function?.arguments&&(q.function.arguments+=w.function.arguments);}let p=i?.choices?.[0]?.finish_reason;p&&(o.choices[0].finish_reason=p),i?.usage&&(o.usage=i.usage),yield u;}}catch(u){throw r=u instanceof Error?u:new Error(String(u)),u}finally{let u=Date.now()-t;if(c.size>0&&(o.choices[0].message.tool_calls=Array.from(c.entries()).sort((i,d)=>i[0]-d[0]).map(([,i])=>i)),r)f({provider:y,model:n.model||"unknown",input:n.messages,error:r,durationMs:u,streaming:true});else {let i=m({provider:y,model:n.model||"unknown",input:n.messages,rawResponse:o,durationMs:u,status:"success",streaming:true,firstTokenMs:s});if(i){let d=ve(o);d.length>0&&g(d,i);}}}}function he(e){return async function(...t){let o=Date.now(),r=t[0]||{},s=r.stream===true;try{let a=await e(...t);if(s&&ye(a))return Rn(a,r,o);let c=Date.now()-o;return m({provider:y,model:r.model||"unknown",input:{instructions:r.instructions,input:r.input},rawResponse:a,durationMs:c,status:"success",streaming:!1}),a}catch(a){let c=Date.now()-o;throw f({provider:y,model:r.model||"unknown",input:{instructions:r.instructions,input:r.input},error:a instanceof Error?a:new Error(String(a)),durationMs:c,streaming:s}),a}}}async function*Rn(e,n,t){let o=[],r=null,s=null;try{for await(let a of e){o.push(a);let c=a;c.type==="response.done"&&c.response&&(r=c.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:r||{streamEvents:o},durationMs:a,status:"success",streaming:true});}}function Ce(e){return async function(...t){let o=Date.now(),r=t[0]||{};try{let s=await e(...t),a=Date.now()-o;return m({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 f({provider:y,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 m({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 f({provider:y,model:r.model||"unknown",input:r.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 o of t)o.id&&n.push(o.id);return n}var M="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 o=Date.now(),r=t[0]||{},s=r.stream===true;try{let a=await e(...t);if(s&&xn(a))return En(a,r,o);let c=Date.now()-o,u=a,i=m({provider:M,model:r.model||u.model||"unknown",input:{system:r.system,messages:r.messages},rawResponse:a,durationMs:c,status:"success",streaming:!1});if(i&&u.content){let d=Y(u.content);d.length>0&&g(d,i);}return a}catch(a){let c=Date.now()-o;throw f({provider:M,model:r.model||"unknown",input:{system:r.system,messages:r.messages},error:a instanceof Error?a:new Error(String(a)),durationMs:c,streaming:s}),a}}}function Re(e){return function(...t){let o=Date.now(),r=t[0]||{};try{let s=e(...t);return s&&typeof s=="object"?Mn(s,r,o):s}catch(s){let a=Date.now()-o;throw f({provider:M,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 xn(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}function Mn(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,c=false,u=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&&(u=l.index??i.length,i[u]={...l.content_block},l.content_block.type==="text"&&(i[u].text=""),l.content_block.type==="thinking"&&(i[u].thinking="")),l.type==="content_block_delta"&&l.delta&&u!==null){let p=i[u];p&&(l.delta.text&&(c||(c=!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"&&u!==null){let p=i[u];if(p&&p.type==="tool_use"){let w=p._inputJson;if(w){try{p.input=JSON.parse(w);}catch{}delete p._inputJson;}}u=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;f({provider:M,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=m({provider:M,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 w=Y(r.content);w.length>0&&g(w,p);}}}};return new Proxy(e,{get(l,p,w){return p===Symbol.asyncIterator?()=>d()[Symbol.asyncIterator]():Reflect.get(l,p,w)}})}async function*En(e,n,t){let o={content:[],usage:{input_tokens:0,output_tokens:0}},r=null,s,a=false,c=null,u=[];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&&(c=i.index??u.length,u[c]={...i.content_block},i.content_block.type==="text"&&(u[c].text=""),i.content_block.type==="thinking"&&(u[c].thinking="")),i.type==="content_block_delta"&&i.delta&&c!==null){let d=u[c];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"&&c!==null){let d=u[c];if(d&&d.type==="tool_use"){let l=d._inputJson;if(l){try{d.input=JSON.parse(l);}catch{}delete d._inputJson;}}c=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=u.filter(Boolean),r)f({provider:M,model:o.model||n.model||"unknown",input:{system:n.system,messages:n.messages},error:r,durationMs:i,streaming:true});else {let d=m({provider:M,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&&g(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 b="bedrock";function Te(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,o,r){let s=Reflect.get(t,o,r);return o==="send"&&typeof s=="function"?Pn(s.bind(t)):s}})}function Pn(e){return async function(t){switch(t.constructor?.name||""){case "ConverseCommand":return An(e,t);case "ConverseStreamCommand":return Dn(e,t);case "InvokeModelCommand":return On(e,t);case "InvokeModelWithResponseStreamCommand":return Nn(e,t);default:return e(t)}}}async function An(e,n){let t=Date.now(),o=n.input;try{let r=await e(n),s=Date.now()-t,a=m({provider:b,model:o.modelId||"unknown",input:{system:o.system,messages:o.messages},rawResponse:Me(r),durationMs:s,status:"success",streaming:!1});if(a){let c=Ee(r);c.length>0&&g(c,a);}return r}catch(r){throw f({provider:b,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 Dn(e,n){let t=Date.now(),o=n.input;try{let r=await e(n);return r.stream?{...r,stream:Gn(r.stream,o,t)}:r}catch(r){throw f({provider:b,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*Gn(e,n,t){let o={output:{message:{role:"assistant",content:[]}},usage:{inputTokens:0,outputTokens:0}},r=null,s,a=false,c=new Map,u=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;c.set(d,{toolUse:{toolUseId:l.toolUseId,name:l.name,input:{}}}),u.set(d,"");}else c.set(d,{text:""});}if(i.contentBlockDelta){let d=i.contentBlockDelta.contentBlockIndex,l=c.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=u.get(d)||"";u.set(d,p+i.contentBlockDelta.delta.toolUse.input);}}if(i.contentBlockStop){let d=i.contentBlockStop.contentBlockIndex,l=c.get(d),p=u.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(c.entries()).sort((l,p)=>l[0]-p[0]).map(([,l])=>l);if(o.output.message.content=d,r)f({provider:b,model:n.modelId||"unknown",input:{system:n.system,messages:n.messages},error:r,durationMs:i,streaming:true});else {let l=m({provider:b,model:n.modelId||"unknown",input:{system:n.system,messages:n.messages},rawResponse:Me(o),durationMs:i,status:"success",streaming:true,firstTokenMs:s});if(l){let p=Ee(o);p.length>0&&g(p,l);}}}}async function On(e,n){let t=Date.now(),o=n.input;try{let r=await e(n),s=Date.now()-t,a=Bn(r.body);return m({provider:b,model:o.modelId||"unknown",input:D(o.body),rawResponse:a,durationMs:s,status:"success",streaming:!1}),r}catch(r){throw f({provider:b,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 Nn(e,n){let t=Date.now(),o=n.input;try{let r=await e(n);return r.body?{...r,body:jn(r.body,o,t)}:r}catch(r){throw f({provider:b,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*jn(e,n,t){let o=[],r=null;try{for await(let s of e){if(s.chunk?.bytes){let a=Un(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?f({provider:b,model:n.modelId||"unknown",input:D(n.body),error:r,durationMs:s,streaming:true}):m({provider:b,model:n.modelId||"unknown",input:D(n.body),rawResponse:{streamEvents:o},durationMs:s,status:"success",streaming:true});}}function Me(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 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 Bn(e){try{let n=new TextDecoder().decode(e);return JSON.parse(n)}catch{return null}}function Un(e){try{let n=new TextDecoder().decode(e);return JSON.parse(n)}catch{return null}}var I="gemini";function _e(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="GoogleGenAI")return true;let t=e;return !!(t.models&&typeof t.models=="object"&&typeof t.models.generateContent=="function"&&t.chats&&typeof t.chats=="object")}function Pe(e){let n=e;return new Proxy(n,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="models"&&s&&typeof s=="object"?$n(s):o==="chats"&&s&&typeof s=="object"?Jn(s):s}})}function $n(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="generateContent"&&typeof r=="function"?Ln(r.bind(n)):t==="generateContentStream"&&typeof r=="function"?Kn(r.bind(n)):r}})}function Ln(e){return async function(t){let o=Date.now(),r=t.model,s=De(t);try{let a=await e(t),c=Date.now()-o,u=Ge(a),i=m({provider:I,model:r,input:s,rawResponse:u,durationMs:c,status:"success",streaming:!1});if(i){let d=Oe(a);d.length>0&&g(d,i);}return a}catch(a){throw f({provider:I,model:r,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-o,streaming:false}),a}}}function Kn(e){return async function(t){let o=Date.now(),r=t.model,s=De(t);try{let a=await e(t);return Ae(a,r,s,o)}catch(a){throw f({provider:I,model:r,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-o,streaming:true}),a}}}async function*Ae(e,n,t,o){let r={candidates:[{content:{parts:[]}}]},s=null,a,c=false;try{for await(let u of e){let i=u.text;if(i){c||(c=!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});}if(u.candidates?.[0]?.content?.parts)for(let d of u.candidates[0].content.parts)d.functionCall&&r.candidates[0].content?.parts?.push(d);u.usageMetadata&&(r.usageMetadata=u.usageMetadata),u.candidates?.[0]?.finishReason&&(r.candidates[0].finishReason=u.candidates[0].finishReason),yield u;}}catch(u){throw s=u instanceof Error?u:new Error(String(u)),u}finally{let u=Date.now()-o;if(s)f({provider:I,model:n,input:t,error:s,durationMs:u,streaming:true});else {let i=m({provider:I,model:n,input:t,rawResponse:r,durationMs:u,status:"success",streaming:true,firstTokenMs:a});if(i){let d=Wn(r.candidates);d.length>0&&g(d,i);}}}}function Jn(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?Fn(r.bind(n)):r}})}function Fn(e){return function(t){let o=e(t);return zn(o,t.model)}}function zn(e,n){return new Proxy(e,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="sendMessage"&&typeof s=="function"?Vn(s.bind(t),n):o==="sendMessageStream"&&typeof s=="function"?Hn(s.bind(t),n):s}})}function Vn(e,n){return async function(o){let r=Date.now(),s=o.message;try{let a=await e(o),c=Date.now()-r,u=Ge(a),i=m({provider:I,model:n,input:s,rawResponse:u,durationMs:c,status:"success",streaming:!1});if(i){let d=Oe(a);d.length>0&&g(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()-r,streaming:false}),a}}}function Hn(e,n){return async function(o){let r=Date.now(),s=o.message;try{let a=await e(o);return Ae(a,n,s,r)}catch(a){throw f({provider:I,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-r,streaming:true}),a}}}function De(e){return e.contents}function Ge(e){return {candidates:e.candidates,usageMetadata:e.usageMetadata,modelVersion:e.modelVersion}}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 Wn(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 S="gemini";function Ne(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="GenerativeModel")return true;let t=e;return typeof t.generateContent=="function"&&typeof t.generateContentStream=="function"&&typeof t.model=="string"}function je(e){return !e||typeof e!="object"?false:!!(e.constructor?.name==="GoogleGenerativeAI"||typeof e.getGenerativeModel=="function"||Ne(e))}function Be(e){if(Ne(e)){let t=e;return Ue(t,t.model)}let n=e;return new Proxy(n,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="getGenerativeModel"&&typeof s=="function"?Xn(s.bind(t)):s}})}function Xn(e){return function(t){let o=e(t);return Ue(o,t.model)}}function Ue(e,n){return new Proxy(e,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="generateContent"&&typeof s=="function"?Zn(s.bind(t),n):o==="generateContentStream"&&typeof s=="function"?Qn(s.bind(t),n):o==="startChat"&&typeof s=="function"?et(s.bind(t),n):s}})}function Zn(e,n){return async function(o){let r=Date.now(),s=$e(o);try{let a=await e(o),c=Date.now()-r,u=Le(a.response),i=m({provider:S,model:n,input:s,rawResponse:u,durationMs:c,status:"success",streaming:!1});if(i){let d=Ke(a.response);d.length>0&&g(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()-r,streaming:false}),a}}}function Qn(e,n){return async function(o){let r=Date.now(),s=$e(o);try{let a=await e(o),c=qe(a.stream,n,s,r);return {...a,stream:c}}catch(a){throw f({provider:S,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-r,streaming:true}),a}}}async function*qe(e,n,t,o){let r={candidates:[{content:{parts:[]}}]},s=null,a,c=false;try{for await(let u of e){try{let i=u.text();if(i){c||(c=!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(u.candidates?.[0]?.content?.parts)for(let i of u.candidates[0].content.parts)i.functionCall&&r.candidates[0].content?.parts?.push(i);u.usageMetadata&&(r.usageMetadata=u.usageMetadata),u.candidates?.[0]?.finishReason&&(r.candidates[0].finishReason=u.candidates[0].finishReason),yield u;}}catch(u){throw s=u instanceof Error?u:new Error(String(u)),u}finally{let u=Date.now()-o;if(s)f({provider:S,model:n,input:t,error:s,durationMs:u,streaming:true});else {let i=m({provider:S,model:n,input:t,rawResponse:r,durationMs:u,status:"success",streaming:true,firstTokenMs:a});if(i){let d=ot(r.candidates);d.length>0&&g(d,i);}}}}function et(e,n){return function(o){let r=e(o);return nt(r,n)}}function nt(e,n){return new Proxy(e,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="sendMessage"&&typeof s=="function"?tt(s.bind(t),n):o==="sendMessageStream"&&typeof s=="function"?rt(s.bind(t),n):s}})}function tt(e,n){return async function(o){let r=Date.now(),s=o;try{let a=await e(o),c=Date.now()-r,u=Le(a.response),i=m({provider:S,model:n,input:s,rawResponse:u,durationMs:c,status:"success",streaming:!1});if(i){let d=Ke(a.response);d.length>0&&g(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()-r,streaming:false}),a}}}function rt(e,n){return async function(o){let r=Date.now(),s=o;try{let a=await e(o),c=qe(a.stream,n,s,r);return {...a,stream:c}}catch(a){throw f({provider:S,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-r,streaming:true}),a}}}function $e(e){return typeof e=="string"?e:e.contents?e.contents:e}function Le(e){return {candidates:e.candidates,usageMetadata:e.usageMetadata}}function Ke(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 ot(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 at="openrouter.ai",U="openrouter";function Je(e){if(!e||typeof e!="object")return false;let n=e;return n.chat?.completions?.create?(n.baseURL||"").includes(at):false}function Fe(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"?it(s):s}})}function it(e){return e&&new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="completions"&&r&&typeof r=="object"?ut(r):r}})}function ut(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?ct(r.bind(n)):r}})}function ct(e){return async function(...t){let o=Date.now(),r=t[0]||{},s=r.stream===true;try{let a=await e(...t);if(s&&dt(a))return lt(a,r,o);let c=Date.now()-o,u=a;return m({provider:U,model:r.model||u.model||"unknown",input:r.messages,rawResponse:a,durationMs:c,status:"success",streaming:!1}),a}catch(a){let c=Date.now()-o;throw f({provider:U,model:r.model||"unknown",input:r.messages,error:a instanceof Error?a:new Error(String(a)),durationMs:c,streaming:s}),a}}}function dt(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}async function*lt(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 c of e){let u=c;!o.id&&u.id&&(o.id=u.id);let i=u.choices?.[0]?.delta?.content;i&&(a||(a=!0,s=Date.now()-t),o.choices[0].message.content+=i);let d=u.choices?.[0]?.finish_reason;d&&(o.choices[0].finish_reason=d),u.usage&&(o.usage=u.usage),yield c;}}catch(c){throw r=c instanceof Error?c:new Error(String(c)),c}finally{let c=Date.now()-t;r?f({provider:U,model:n.model||"unknown",input:n.messages,error:r,durationMs:c,streaming:true}):m({provider:U,model:n.model||"unknown",input:n.messages,rawResponse:o,durationMs:c,status:"success",streaming:true,firstTokenMs:s});}}function ze(e,n){return n&&fe(n),j().disabled?(k("Tracing disabled, returning unwrapped client"),e):Je(e)?(R("openrouter"),Fe(e)):we(e)?(R("openai"),ft(e)):Ie(e)?(R("anthropic"),ht(e)):Te(e)?(R("bedrock"),xe(e)):_e(e)?(R("gemini"),Pe(e)):je(e)?(R("gemini"),Be(e)):(G("Unknown client type. Tracing not enabled. Supported: OpenAI, OpenRouter, Anthropic, Bedrock, Gemini"),e)}function ft(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"?mt(s):o==="responses"&&s&&typeof s=="object"?wt(s):o==="completions"&&s&&typeof s=="object"?kt(s):o==="embeddings"&&s&&typeof s=="object"?yt(s):s}})}function mt(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="completions"&&r&&typeof r=="object"?gt(r):r}})}function gt(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 wt(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 kt(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?Ce(r.bind(n)):r}})}function yt(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 ht(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"?Ct(s):s}})}function Ct(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"?Re(r.bind(n)):r}})}function bt(e){return function(t,o){return ze(t,{...e,...o})}}
|
|
3
|
-
export{V as captureSpan,bt as createObserve,un as flush,C as getTraceContext,sn as init,an as isEnabled,ze as observe,
|
|
2
|
+
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 Ve=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var se=Ve((xt,Ze)=>{Ze.exports={name:"@lelemondev/sdk",version:"0.10.1",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"},"./google-genai":{types:"./dist/google-genai.d.ts",import:"./dist/google-genai.mjs",require:"./dist/google-genai.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"],"google-genai":["./dist/google-genai.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/genai":"^1.0.0","@google/generative-ai":"^0.24.1","@anthropic-ai/sdk":"^0.82.0","@types/node":"^22.0.0","@vitest/coverage-v8":"^4.0.0",dotenv:"^17.2.3",openai:"^6.15.0",tsup:"^8.5.1",vite:"^6.0.0",typedoc:"^0.28.18",typescript:"^6.0.0",vitest:"^4.0.0"}};});var Z=false;function Q(e){Z=e;}function v(){return Z?true:He("LELEMON_DEBUG")==="true"}var h="[Lelemon]";function y(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,o){v()&&console.log(`${h} Captured trace: provider=${e} model=${n} duration=${t}ms status=${o}`);}function G(e,n){console.error(`${h} Failed to capture trace: provider=${e} error=${n.message}`);}function R(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 o=e==="error"?console.error:e==="warn"?console.warn:console.log;t!==void 0?o(`${h} ${n}`,t):o(`${h} ${n}`);}function He(e){if(typeof process<"u"&&process.env)return process.env[e]}var We=10,Ye=1e3,Xe=1e4,N=class{config;queue=[];flushPromise=null;flushTimer=null;constructor(n){this.config={apiKey:n.apiKey,endpoint:n.endpoint,debug:n.debug,disabled:n.disabled,batchSize:n.batchSize??We,flushIntervalMs:n.flushIntervalMs??Ye,requestTimeoutMs:n.requestTimeoutMs??Xe};}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 c=setTimeout(()=>{s.abort();},this.config.requestTimeoutMs),u=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(c),oe(i.status,Date.now()-u),!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(c),i instanceof Error&&i.name==="AbortError"?new Error(`Request timeout after ${this.config.requestTimeoutMs}ms`):i}}};var Qe="@lelemondev/sdk",en="nodejs";function nn(){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 tn(){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 rn(){try{if(typeof X<"u")return se().version??"unknown"}catch{}return "unknown"}var E=null;function ie(e){if(!E){let t=nn(),o=tn();E={"telemetry.sdk.name":Qe,"telemetry.sdk.version":rn(),"telemetry.sdk.language":en},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={},T=null,J=null,ue="https://api.lelemon.dev";function sn(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}),T=ce(e),T.isEnabled()?$("SDK initialized - tracing enabled"):y("SDK initialized - tracing disabled (no API key or explicitly disabled)");}function j(){return F}function B(){return J}function an(){return x().isEnabled()}function x(){return T||(T=ce(F)),T}async function un(){T&&await T.flush();}function ce(e){let n=e.apiKey??cn("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 N({apiKey:n??"",endpoint:e.endpoint??ue,debug:e.debug??false,disabled:e.disabled??!n,batchSize:e.batchSize,flushIntervalMs:e.flushIntervalMs,requestTimeoutMs:e.requestTimeoutMs})}function cn(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,y("Global context updated",e);}function A(){return pe().context}function m(e){try{let n=x();if(!n.isEnabled()){y("Transport disabled, skipping trace capture");return}let t=A(),o=C(),r=_(),s=B(),a={provider:e.provider,model:e.model,input:H(e.input),rawResponse:e.rawResponse?P(e.rawResponse,0):void 0,durationMs:e.durationMs,status:e.status,streaming:e.streaming,firstTokenMs:e.firstTokenMs,sessionId:o?.sessionId??t.sessionId,userId:o?.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 f(e){try{let n=x();if(!n.isEnabled()){y("Transport disabled, skipping error capture");return}let t=A(),o=C(),r=B(),s={provider:e.provider,model:e.model,input:H(e.input),durationMs:e.durationMs,status:"error",errorMessage:e.error.message,streaming:e.streaming,sessionId:o?.sessionId??t.sessionId,userId:o?.userId??t.userId,traceId:o?.traceId,spanId:_(),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"),y("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=x();if(!n.isEnabled()){y("Transport disabled, skipping span capture");return}let t=A(),o=C(),r=e.metadata?._traceId,s=e.metadata?._parentSpanId,a=B(),c={...t.metadata,...e.metadata,...a?{_telemetry:a}:{}};delete c._traceId,delete c._parentSpanId;let u={spanType:e.type,name:e.name,provider:"unknown",model:e.name,input:H(e.input),output:P(e.output,0),durationMs:e.durationMs,status:e.status||"success",errorMessage:e.errorMessage,streaming:!1,sessionId:o?.sessionId??t.sessionId,userId:o?.userId??t.userId,traceId:r??o?.traceId,spanId:_(),parentSpanId:s??o?.currentSpanId,toolCallId:e.toolCallId,metadata:c,tags:t.tags};y(`Span captured: ${e.type}/${e.name}`,{durationMs:e.durationMs}),n.enqueue(u);}catch(n){G("unknown",n instanceof Error?n:new Error(String(n)));}}var de=1e5,dn=["api_key","apikey","password","secret","authorization"],ln=["access_token","auth_token","bearer_token","refresh_token","id_token","session_token"],pn=["inputtokens","outputtokens","totaltokens","prompttokens","completiontokens","cachereadtokens","cachewritetokens","cachereadinputtokens","cachewriteinputtokens","reasoningtokens"],le={emails:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,phones:/\b\d{9,}\b/g};function me(){return j().redaction??{}}function fn(e){let n=e.toLowerCase();return pn.includes(n)?false:!!(dn.some(o=>n.includes(o))||ln.some(o=>n.includes(o))||(me().keys??[]).some(o=>n.includes(o.toLowerCase())))}function mn(e){let n=me(),t=e;for(let o of n.patterns??[])o.lastIndex=0,t=t.replace(o,"[REDACTED]");return n.emails&&(t=t.replace(le.emails,"[EMAIL]")),n.phones&&(t=t.replace(le.phones,"[PHONE]")),t}function H(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=mn(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[o,r]of Object.entries(e))fn(o)?t[o]="[REDACTED]":t[o]=P(r,n+1);return t}return String(e)}var W=Symbol.for("@lelemondev/sdk:traceStorage");function wn(){let e=globalThis;return e[W]||(e[W]=new AsyncLocalStorage),e[W]}var ge=wn();function _(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function C(){return ge.getStore()}function g(e,n){let t=C();if(t)for(let o of e)t.pendingToolCalls.set(o,n),y(`Registered tool call ${o} \u2192 LLM span ${n}`);}function yn(e){let n=C();if(n)return e&&n.pendingToolCalls.has(e)?n.pendingToolCalls.get(e):n.currentSpanId}function kn(e){let n=C();n&&n.pendingToolCalls.delete(e);}async function hn(e,n){let t=typeof e=="string"?{name:e}:e,o=C(),r=o?.traceId??_(),s=_(),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,outputKey:t.outputKey,outputTransform:t.outputTransform,sessionId:t.sessionId,userId:t.userId,style:t.style,pendingToolCalls:new Map};return ge.run(a,async()=>{let c,u;try{return c=await n(),c}catch(i){throw u=i instanceof Error?i:new Error(String(i)),i}finally{vn(a,u?void 0:c,u);}})}var Cn=["text","content","message","output","response","result","answer"];function bn(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 r=e;return n in r?r[n]:e}if(e==null||typeof e!="object"||Array.isArray(e))return e;let o=e;for(let r of Cn)if(r in o&&typeof o[r]=="string")return o[r];return e}function vn(e,n,t){let o=x();if(!o.isEnabled()){y("Transport disabled, skipping root span");return}let r=A(),s=Date.now()-e.startTime,a=t?null:bn(n,e.outputKey,e.outputTransform),c={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??r.sessionId,userId:e.userId??r.userId,metadata:{...r.metadata,...e.metadata,...e.style?{_style:e.style}:{}},tags:e.tags??r.tags};y(`Sending root span: ${e.name}`,{durationMs:s,hasError:!!t}),o.enqueue(c);}function Sn(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=yn(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.style?{_style:e.style}:{}}}),e.toolCallId&&kn(e.toolCallId);}var k="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 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 In(a,r,o);let c=Date.now()-o,u=a,i=m({provider:k,model:r.model||u.model||"unknown",input:r.messages,rawResponse:a,durationMs:c,status:"success",streaming:!1});if(i){let d=ve(u);d.length>0&&g(d,i);}return a}catch(a){let c=Date.now()-o;throw f({provider:k,model:r.model||"unknown",input:r.messages,error:a instanceof Error?a:new Error(String(a)),durationMs:c,streaming:s}),a}}}function ke(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}async function*In(e,n,t){let o={choices:[{message:{content:"",tool_calls:[]},finish_reason:""}],usage:{prompt_tokens:0,completion_tokens:0}},r=null,s,a=false,c=new Map;try{for await(let u of e){let i=u,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 w of l){c.has(w.index)||c.set(w.index,{id:"",function:{name:"",arguments:""}});let q=c.get(w.index);w.id&&(q.id=w.id),w.function?.name&&(q.function.name=w.function.name),w.function?.arguments&&(q.function.arguments+=w.function.arguments);}let p=i?.choices?.[0]?.finish_reason;p&&(o.choices[0].finish_reason=p),i?.usage&&(o.usage=i.usage),yield u;}}catch(u){throw r=u instanceof Error?u:new Error(String(u)),u}finally{let u=Date.now()-t;if(c.size>0&&(o.choices[0].message.tool_calls=Array.from(c.entries()).sort((i,d)=>i[0]-d[0]).map(([,i])=>i)),r)f({provider:k,model:n.model||"unknown",input:n.messages,error:r,durationMs:u,streaming:true});else {let i=m({provider:k,model:n.model||"unknown",input:n.messages,rawResponse:o,durationMs:u,status:"success",streaming:true,firstTokenMs:s});if(i){let d=ve(o);d.length>0&&g(d,i);}}}}function he(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 Rn(a,r,o);let c=Date.now()-o;return m({provider:k,model:r.model||"unknown",input:{instructions:r.instructions,input:r.input},rawResponse:a,durationMs:c,status:"success",streaming:!1}),a}catch(a){let c=Date.now()-o;throw f({provider:k,model:r.model||"unknown",input:{instructions:r.instructions,input:r.input},error:a instanceof Error?a:new Error(String(a)),durationMs:c,streaming:s}),a}}}async function*Rn(e,n,t){let o=[],r=null,s=null;try{for await(let a of e){o.push(a);let c=a;c.type==="response.done"&&c.response&&(r=c.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:k,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},error:s,durationMs:a,streaming:true}):m({provider:k,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},rawResponse:r||{streamEvents:o},durationMs:a,status:"success",streaming:true});}}function Ce(e){return async function(...t){let o=Date.now(),r=t[0]||{};try{let s=await e(...t),a=Date.now()-o;return m({provider:k,model:r.model||"unknown",input:r.prompt,rawResponse:s,durationMs:a,status:"success",streaming:!1}),s}catch(s){let a=Date.now()-o;throw f({provider:k,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 m({provider:k,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 f({provider:k,model:r.model||"unknown",input:r.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 o of t)o.id&&n.push(o.id);return n}var M="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 Ie(e){return async function(...t){let o=Date.now(),r=t[0]||{},s=r.stream===true;try{let a=await e(...t);if(s&&xn(a))return En(a,r,o);let c=Date.now()-o,u=a,i=m({provider:M,model:r.model||u.model||"unknown",input:{system:r.system,messages:r.messages},rawResponse:a,durationMs:c,status:"success",streaming:!1});if(i&&u.content){let d=Y(u.content);d.length>0&&g(d,i);}return a}catch(a){let c=Date.now()-o;throw f({provider:M,model:r.model||"unknown",input:{system:r.system,messages:r.messages},error:a instanceof Error?a:new Error(String(a)),durationMs:c,streaming:s}),a}}}function Re(e){return function(...t){let o=Date.now(),r=t[0]||{};try{let s=e(...t);return s&&typeof s=="object"?Mn(s,r,o):s}catch(s){let a=Date.now()-o;throw f({provider:M,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 xn(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}function Mn(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,c=false,u=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&&(u=l.index??i.length,i[u]={...l.content_block},l.content_block.type==="text"&&(i[u].text=""),l.content_block.type==="thinking"&&(i[u].thinking="")),l.type==="content_block_delta"&&l.delta&&u!==null){let p=i[u];p&&(l.delta.text&&(c||(c=!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"&&u!==null){let p=i[u];if(p&&p.type==="tool_use"){let w=p._inputJson;if(w){try{p.input=JSON.parse(w);}catch{}delete p._inputJson;}}u=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;f({provider:M,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=m({provider:M,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 w=Y(r.content);w.length>0&&g(w,p);}}}};return new Proxy(e,{get(l,p,w){return p===Symbol.asyncIterator?()=>d()[Symbol.asyncIterator]():Reflect.get(l,p,w)}})}async function*En(e,n,t){let o={content:[],usage:{input_tokens:0,output_tokens:0}},r=null,s,a=false,c=null,u=[];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&&(c=i.index??u.length,u[c]={...i.content_block},i.content_block.type==="text"&&(u[c].text=""),i.content_block.type==="thinking"&&(u[c].thinking="")),i.type==="content_block_delta"&&i.delta&&c!==null){let d=u[c];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"&&c!==null){let d=u[c];if(d&&d.type==="tool_use"){let l=d._inputJson;if(l){try{d.input=JSON.parse(l);}catch{}delete d._inputJson;}}c=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=u.filter(Boolean),r)f({provider:M,model:o.model||n.model||"unknown",input:{system:n.system,messages:n.messages},error:r,durationMs:i,streaming:true});else {let d=m({provider:M,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&&g(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 b="bedrock";function Te(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,o,r){let s=Reflect.get(t,o,r);return o==="send"&&typeof s=="function"?Pn(s.bind(t)):s}})}function Pn(e){return async function(t){switch(t.constructor?.name||""){case "ConverseCommand":return An(e,t);case "ConverseStreamCommand":return Dn(e,t);case "InvokeModelCommand":return Gn(e,t);case "InvokeModelWithResponseStreamCommand":return Nn(e,t);default:return e(t)}}}async function An(e,n){let t=Date.now(),o=n.input;try{let r=await e(n),s=Date.now()-t,a=m({provider:b,model:o.modelId||"unknown",input:{system:o.system,messages:o.messages},rawResponse:Me(r),durationMs:s,status:"success",streaming:!1});if(a){let c=Ee(r);c.length>0&&g(c,a);}return r}catch(r){throw f({provider:b,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 Dn(e,n){let t=Date.now(),o=n.input;try{let r=await e(n);return r.stream?{...r,stream:On(r.stream,o,t)}:r}catch(r){throw f({provider:b,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*On(e,n,t){let o={output:{message:{role:"assistant",content:[]}},usage:{inputTokens:0,outputTokens:0}},r=null,s,a=false,c=new Map,u=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;c.set(d,{toolUse:{toolUseId:l.toolUseId,name:l.name,input:{}}}),u.set(d,"");}else c.set(d,{text:""});}if(i.contentBlockDelta){let d=i.contentBlockDelta.contentBlockIndex,l=c.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=u.get(d)||"";u.set(d,p+i.contentBlockDelta.delta.toolUse.input);}}if(i.contentBlockStop){let d=i.contentBlockStop.contentBlockIndex,l=c.get(d),p=u.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(c.entries()).sort((l,p)=>l[0]-p[0]).map(([,l])=>l);if(o.output.message.content=d,r)f({provider:b,model:n.modelId||"unknown",input:{system:n.system,messages:n.messages},error:r,durationMs:i,streaming:true});else {let l=m({provider:b,model:n.modelId||"unknown",input:{system:n.system,messages:n.messages},rawResponse:Me(o),durationMs:i,status:"success",streaming:true,firstTokenMs:s});if(l){let p=Ee(o);p.length>0&&g(p,l);}}}}async function Gn(e,n){let t=Date.now(),o=n.input;try{let r=await e(n),s=Date.now()-t,a=Bn(r.body);return m({provider:b,model:o.modelId||"unknown",input:D(o.body),rawResponse:a,durationMs:s,status:"success",streaming:!1}),r}catch(r){throw f({provider:b,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 Nn(e,n){let t=Date.now(),o=n.input;try{let r=await e(n);return r.body?{...r,body:jn(r.body,o,t)}:r}catch(r){throw f({provider:b,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*jn(e,n,t){let o=[],r=null;try{for await(let s of e){if(s.chunk?.bytes){let a=Un(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?f({provider:b,model:n.modelId||"unknown",input:D(n.body),error:r,durationMs:s,streaming:true}):m({provider:b,model:n.modelId||"unknown",input:D(n.body),rawResponse:{streamEvents:o},durationMs:s,status:"success",streaming:true});}}function Me(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 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 Bn(e){try{let n=new TextDecoder().decode(e);return JSON.parse(n)}catch{return null}}function Un(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;if(e.constructor?.name==="GoogleGenAI")return true;let t=e;return !!(t.models&&typeof t.models=="object"&&typeof t.models.generateContent=="function"&&t.chats&&typeof t.chats=="object")}function Pe(e){let n=e;return new Proxy(n,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="models"&&s&&typeof s=="object"?$n(s):o==="chats"&&s&&typeof s=="object"?Jn(s):s}})}function $n(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="generateContent"&&typeof r=="function"?Ln(r.bind(n)):t==="generateContentStream"&&typeof r=="function"?Kn(r.bind(n)):r}})}function Ln(e){return async function(t){let o=Date.now(),r=t.model,s=De(t);try{let a=await e(t),c=Date.now()-o,u=Oe(a),i=m({provider:S,model:r,input:s,rawResponse:u,durationMs:c,status:"success",streaming:!1});if(i){let d=Ge(a);d.length>0&&g(d,i);}return a}catch(a){throw f({provider:S,model:r,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-o,streaming:false}),a}}}function Kn(e){return async function(t){let o=Date.now(),r=t.model,s=De(t);try{let a=await e(t);return Ae(a,r,s,o)}catch(a){throw f({provider:S,model:r,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-o,streaming:true}),a}}}async function*Ae(e,n,t,o){let r={candidates:[{content:{parts:[]}}]},s=null,a,c=false;try{for await(let u of e){let i=u.text;if(i){c||(c=!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});}if(u.candidates?.[0]?.content?.parts)for(let d of u.candidates[0].content.parts)d.functionCall&&r.candidates[0].content?.parts?.push(d);u.usageMetadata&&(r.usageMetadata=u.usageMetadata),u.candidates?.[0]?.finishReason&&(r.candidates[0].finishReason=u.candidates[0].finishReason),yield u;}}catch(u){throw s=u instanceof Error?u:new Error(String(u)),u}finally{let u=Date.now()-o;if(s)f({provider:S,model:n,input:t,error:s,durationMs:u,streaming:true});else {let i=m({provider:S,model:n,input:t,rawResponse:r,durationMs:u,status:"success",streaming:true,firstTokenMs:a});if(i){let d=Wn(r.candidates);d.length>0&&g(d,i);}}}}function Jn(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?Fn(r.bind(n)):r}})}function Fn(e){return function(t){let o=e(t);return zn(o,t.model)}}function zn(e,n){return new Proxy(e,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="sendMessage"&&typeof s=="function"?Vn(s.bind(t),n):o==="sendMessageStream"&&typeof s=="function"?Hn(s.bind(t),n):s}})}function Vn(e,n){return async function(o){let r=Date.now(),s=o.message;try{let a=await e(o),c=Date.now()-r,u=Oe(a),i=m({provider:S,model:n,input:s,rawResponse:u,durationMs:c,status:"success",streaming:!1});if(i){let d=Ge(a);d.length>0&&g(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()-r,streaming:false}),a}}}function Hn(e,n){return async function(o){let r=Date.now(),s=o.message;try{let a=await e(o);return Ae(a,n,s,r)}catch(a){throw f({provider:S,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-r,streaming:true}),a}}}function De(e){return e.contents}function Oe(e){return {candidates:e.candidates,usageMetadata:e.usageMetadata,modelVersion:e.modelVersion}}function Ge(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 Wn(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 I="gemini";function Ne(e){if(!e||typeof e!="object")return false;if(e.constructor?.name==="GenerativeModel")return true;let t=e;return typeof t.generateContent=="function"&&typeof t.generateContentStream=="function"&&typeof t.model=="string"}function je(e){return !e||typeof e!="object"?false:!!(e.constructor?.name==="GoogleGenerativeAI"||typeof e.getGenerativeModel=="function"||Ne(e))}function Be(e){if(Ne(e)){let t=e;return Ue(t,t.model)}let n=e;return new Proxy(n,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="getGenerativeModel"&&typeof s=="function"?Xn(s.bind(t)):s}})}function Xn(e){return function(t){let o=e(t);return Ue(o,t.model)}}function Ue(e,n){return new Proxy(e,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="generateContent"&&typeof s=="function"?Zn(s.bind(t),n):o==="generateContentStream"&&typeof s=="function"?Qn(s.bind(t),n):o==="startChat"&&typeof s=="function"?et(s.bind(t),n):s}})}function Zn(e,n){return async function(o){let r=Date.now(),s=$e(o);try{let a=await e(o),c=Date.now()-r,u=Le(a.response),i=m({provider:I,model:n,input:s,rawResponse:u,durationMs:c,status:"success",streaming:!1});if(i){let d=Ke(a.response);d.length>0&&g(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()-r,streaming:false}),a}}}function Qn(e,n){return async function(o){let r=Date.now(),s=$e(o);try{let a=await e(o),c=qe(a.stream,n,s,r);return {...a,stream:c}}catch(a){throw f({provider:I,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-r,streaming:true}),a}}}async function*qe(e,n,t,o){let r={candidates:[{content:{parts:[]}}]},s=null,a,c=false;try{for await(let u of e){try{let i=u.text();if(i){c||(c=!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(u.candidates?.[0]?.content?.parts)for(let i of u.candidates[0].content.parts)i.functionCall&&r.candidates[0].content?.parts?.push(i);u.usageMetadata&&(r.usageMetadata=u.usageMetadata),u.candidates?.[0]?.finishReason&&(r.candidates[0].finishReason=u.candidates[0].finishReason),yield u;}}catch(u){throw s=u instanceof Error?u:new Error(String(u)),u}finally{let u=Date.now()-o;if(s)f({provider:I,model:n,input:t,error:s,durationMs:u,streaming:true});else {let i=m({provider:I,model:n,input:t,rawResponse:r,durationMs:u,status:"success",streaming:true,firstTokenMs:a});if(i){let d=ot(r.candidates);d.length>0&&g(d,i);}}}}function et(e,n){return function(o){let r=e(o);return nt(r,n)}}function nt(e,n){return new Proxy(e,{get(t,o,r){let s=Reflect.get(t,o,r);return o==="sendMessage"&&typeof s=="function"?tt(s.bind(t),n):o==="sendMessageStream"&&typeof s=="function"?rt(s.bind(t),n):s}})}function tt(e,n){return async function(o){let r=Date.now(),s=o;try{let a=await e(o),c=Date.now()-r,u=Le(a.response),i=m({provider:I,model:n,input:s,rawResponse:u,durationMs:c,status:"success",streaming:!1});if(i){let d=Ke(a.response);d.length>0&&g(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()-r,streaming:false}),a}}}function rt(e,n){return async function(o){let r=Date.now(),s=o;try{let a=await e(o),c=qe(a.stream,n,s,r);return {...a,stream:c}}catch(a){throw f({provider:I,model:n,input:s,error:a instanceof Error?a:new Error(String(a)),durationMs:Date.now()-r,streaming:true}),a}}}function $e(e){return typeof e=="string"?e:e.contents?e.contents:e}function Le(e){return {candidates:e.candidates,usageMetadata:e.usageMetadata}}function Ke(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 ot(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 at="openrouter.ai",U="openrouter";function Je(e){if(!e||typeof e!="object")return false;let n=e;return n.chat?.completions?.create?(n.baseURL||"").includes(at):false}function Fe(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"?it(s):s}})}function it(e){return e&&new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="completions"&&r&&typeof r=="object"?ut(r):r}})}function ut(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?ct(r.bind(n)):r}})}function ct(e){return async function(...t){let o=Date.now(),r=t[0]||{},s=r.stream===true;try{let a=await e(...t);if(s&&dt(a))return lt(a,r,o);let c=Date.now()-o,u=a;return m({provider:U,model:r.model||u.model||"unknown",input:r.messages,rawResponse:a,durationMs:c,status:"success",streaming:!1}),a}catch(a){let c=Date.now()-o;throw f({provider:U,model:r.model||"unknown",input:r.messages,error:a instanceof Error?a:new Error(String(a)),durationMs:c,streaming:s}),a}}}function dt(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}async function*lt(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 c of e){let u=c;!o.id&&u.id&&(o.id=u.id);let i=u.choices?.[0]?.delta?.content;i&&(a||(a=!0,s=Date.now()-t),o.choices[0].message.content+=i);let d=u.choices?.[0]?.finish_reason;d&&(o.choices[0].finish_reason=d),u.usage&&(o.usage=u.usage),yield c;}}catch(c){throw r=c instanceof Error?c:new Error(String(c)),c}finally{let c=Date.now()-t;r?f({provider:U,model:n.model||"unknown",input:n.messages,error:r,durationMs:c,streaming:true}):m({provider:U,model:n.model||"unknown",input:n.messages,rawResponse:o,durationMs:c,status:"success",streaming:true,firstTokenMs:s});}}function ze(e,n){return n&&fe(n),j().disabled?(y("Tracing disabled, returning unwrapped client"),e):Je(e)?(R("openrouter"),Fe(e)):we(e)?(R("openai"),ft(e)):Se(e)?(R("anthropic"),ht(e)):Te(e)?(R("bedrock"),xe(e)):_e(e)?(R("gemini"),Pe(e)):je(e)?(R("gemini"),Be(e)):(O("Unknown client type. Tracing not enabled. Supported: OpenAI, OpenRouter, Anthropic, Bedrock, Gemini"),e)}function ft(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"?mt(s):o==="responses"&&s&&typeof s=="object"?wt(s):o==="completions"&&s&&typeof s=="object"?yt(s):o==="embeddings"&&s&&typeof s=="object"?kt(s):s}})}function mt(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="completions"&&r&&typeof r=="object"?gt(r):r}})}function gt(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 wt(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 yt(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?Ce(r.bind(n)):r}})}function kt(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 ht(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"?Ct(s):s}})}function Ct(e){return new Proxy(e,{get(n,t,o){let r=Reflect.get(n,t,o);return t==="create"&&typeof r=="function"?Ie(r.bind(n)):t==="stream"&&typeof r=="function"?Re(r.bind(n)):r}})}function bt(e){return function(t,o){return ze(t,{...e,...o})}}
|
|
3
|
+
export{V as captureSpan,bt as createObserve,un as flush,C as getTraceContext,sn as init,an as isEnabled,ze as observe,Sn as span,hn 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-DOj4Z9MB.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-DOj4Z9MB.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-DOj4Z9MB.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-DOj4Z9MB.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 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 Q=ye((dn,Ce)=>{Ce.exports={name:"@lelemondev/sdk",version:"0.10.0",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"},"./google-genai":{types:"./dist/google-genai.d.ts",import:"./dist/google-genai.mjs",require:"./dist/google-genai.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"],"google-genai":["./dist/google-genai.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/genai":"^1.0.0","@google/generative-ai":"^0.24.1","@anthropic-ai/sdk":"^0.82.0","@types/node":"^22.0.0","@vitest/coverage-v8":"^4.0.0",dotenv:"^17.2.3",openai:"^6.15.0",tsup:"^8.5.1",vite:"^6.0.0",typedoc:"^0.28.18",typescript:"^6.0.0",vitest:"^4.0.0"}};});var B=false;function V(e){B=e;}function w(){return B?true:be("LELEMON_DEBUG")==="true"}var f="[Lelemon]";function d(e,n){w()&&q("debug",e,n);}function D(e,n){w()&&q("info",e,n);}function E(e,n){q("warn",e,n);}function P(e,n,t,r){w()&&console.log(`${f} Captured trace: provider=${e} model=${n} duration=${t}ms status=${r}`);}function R(e,n){console.error(`${f} Failed to capture trace: provider=${e} error=${n.message}`);}function H(e){w()&&console.log(`${f} Wrapped client: provider=${e}`);}function W(e,n){w()&&console.log(`${f} Sending batch: count=${e} endpoint=${n}`);}function Y(e,n){w()&&console.log(`${f} Batch sent successfully: count=${e} duration=${n}ms`);}function X(e,n){let t=n instanceof Error?n.message:String(n);console.error(`${f} Batch send failed: count=${e} error=${t}`);}function Z(e,n,t){w()&&console.log(`${f} Request: ${e} ${n} (${t} bytes)`);}function J(e,n){w()&&console.log(`${f} 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(`${f} ${n}`,t):r(`${f} ${n}`);}function be(e){if(typeof process<"u"&&process.env)return process.env[e]}var he=10,ke=1e3,Te=1e4,_=class{config;queue=[];flushPromise=null;flushTimer=null;constructor(n){this.config={apiKey:n.apiKey,endpoint:n.endpoint,debug:n.debug,disabled:n.disabled,batchSize:n.batchSize??he,flushIntervalMs:n.flushIntervalMs??ke,requestTimeoutMs:n.requestTimeoutMs??Te};}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;Z(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),J(u.status,Date.now()-c),!u.ok){let x=await u.text().catch(()=>"Unknown error");throw new Error(`HTTP ${u.status}: ${x}`)}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 ve="@lelemondev/sdk",Ie="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 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 Ee(){try{if(typeof G<"u")return Q().version??"unknown"}catch{}return "unknown"}var C=null;function ne(e){if(!C){let t=Se(),r=xe();C={"telemetry.sdk.name":ve,"telemetry.sdk.version":Ee(),"telemetry.sdk.language":Ie},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 $={},b=null,j=null,te="https://api.lelemon.dev";function _e(e={}){$=e,e.debug&&V(true),j=ne(e.service),D("Initializing SDK",{endpoint:e.endpoint??te,debug:e.debug??false,disabled:e.disabled??false,telemetry:j}),b=re(e),b.isEnabled()?D("SDK initialized - tracing enabled"):d("SDK initialized - tracing disabled (no API key or explicitly disabled)");}function A(){return $}function O(){return j}function Ae(){return h().isEnabled()}function h(){return b||(b=re($)),b}async function Oe(){b&&await b.flush();}function re(e){let n=e.apiKey??Me("LELEMON_API_KEY");return !n&&!e.disabled&&E("No API key provided. Set apiKey in init() or LELEMON_API_KEY env var. Tracing disabled."),new _({apiKey:n??"",endpoint:e.endpoint??te,debug:e.debug??false,disabled:e.disabled??!n,batchSize:e.batchSize,flushIntervalMs:e.flushIntervalMs,requestTimeoutMs:e.requestTimeoutMs})}function Me(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=m(),o=v(),s=O(),i={provider:e.provider,model:e.model,input:L(e.input),rawResponse:e.rawResponse?I(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 P(e.provider,e.model,e.durationMs,e.status),n.enqueue(i),o}catch(n){R(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=m(),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: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};P(e.provider,e.model,e.durationMs,"error"),d("Error details",{message:e.error.message,stack:e.error.stack}),n.enqueue(s);}catch(n){R(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=m(),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:I(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){R("unknown",n instanceof Error?n:new Error(String(n)));}}var oe=1e5,De=["api_key","apikey","password","secret","authorization"],Pe=["access_token","auth_token","bearer_token","refresh_token","id_token","session_token"],qe=["inputtokens","outputtokens","totaltokens","prompttokens","completiontokens","cachereadtokens","cachewritetokens","cachereadinputtokens","cachewriteinputtokens","reasoningtokens"],se={emails:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,phones:/\b\d{9,}\b/g};function ue(){return A().redaction??{}}function je(e){let n=e.toLowerCase();return qe.includes(n)?false:!!(De.some(r=>n.includes(r))||Pe.some(r=>n.includes(r))||(ue().keys??[]).some(r=>n.includes(r.toLowerCase())))}function $e(e){let n=ue(),t=e;for(let r of n.patterns??[])r.lastIndex=0,t=t.replace(r,"[REDACTED]");return n.emails&&(t=t.replace(se.emails,"[EMAIL]")),n.phones&&(t=t.replace(se.phones,"[PHONE]")),t}function L(e){return I(e,0)}function I(e,n){if(n>10)return "[max depth exceeded]";if(e==null)return e;if(typeof e=="string"){let t=$e(e);return t.length>oe&&(t=t.slice(0,oe)+"...[truncated]"),t}if(typeof e=="number"||typeof e=="boolean")return e;if(Array.isArray(e))return e.map(t=>I(t,n+1));if(typeof e=="object"){let t={};for(let[r,o]of Object.entries(e))je(r)?t[r]="[REDACTED]":t[r]=I(o,n+1);return t}return String(e)}var z=Symbol.for("@lelemondev/sdk:traceStorage");function Ke(){let e=globalThis;return e[z]||(e[z]=new async_hooks.AsyncLocalStorage),e[z]}var ce=Ke();function v(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function m(){return ce.getStore()}function F(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 Le(e){let n=m();if(n)return e&&n.pendingToolCalls.has(e)?n.pendingToolCalls.get(e):n.currentSpanId}function ze(e){let n=m();n&&n.pendingToolCalls.delete(e);}async function Fe(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 ce.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{Be(i,c?void 0:a,c);}})}var Ue=["text","content","message","output","response","result","answer"];function Ge(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 Ue)if(o in r&&typeof r[o]=="string")return r[o];return e}function Be(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:Ge(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 Ve(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=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&&ze(e.toolCallId);}var p="openai";function de(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 le(e){return async function(...t){let r=Date.now(),o=t[0]||{},s=o.stream===true;try{let i=await e(...t);if(s&&pe(i))return He(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=we(c);l.length>0&&F(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 pe(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}async function*He(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 x=u?.choices?.[0]?.delta?.tool_calls;if(x)for(let g of x){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=we(r);l.length>0&&F(l,u);}}}}function fe(e){return async function(...t){let r=Date.now(),o=t[0]||{},s=o.stream===true;try{let i=await e(...t);if(s&&pe(i))return We(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*We(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 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.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 we(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 $n(e,n){return n&&ae(n),A().disabled?(d("Tracing disabled, returning unwrapped client"),e):de(e)?(H("openai"),Xe(e)):(E("Client is not an OpenAI client. Use @lelemondev/sdk/openai only with OpenAI SDK."),e)}function Xe(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"?Ze(s):r==="responses"&&s&&typeof s=="object"?Qe(s):r==="completions"&&s&&typeof s=="object"?en(s):r==="embeddings"&&s&&typeof s=="object"?nn(s):s}})}function Ze(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="completions"&&o&&typeof o=="object"?Je(o):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"?le(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"?fe(o.bind(n)):o}})}function en(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 nn(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}})}
|
|
2
|
+
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 Q=ye((dn,Ce)=>{Ce.exports={name:"@lelemondev/sdk",version:"0.10.1",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"},"./google-genai":{types:"./dist/google-genai.d.ts",import:"./dist/google-genai.mjs",require:"./dist/google-genai.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"],"google-genai":["./dist/google-genai.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/genai":"^1.0.0","@google/generative-ai":"^0.24.1","@anthropic-ai/sdk":"^0.82.0","@types/node":"^22.0.0","@vitest/coverage-v8":"^4.0.0",dotenv:"^17.2.3",openai:"^6.15.0",tsup:"^8.5.1",vite:"^6.0.0",typedoc:"^0.28.18",typescript:"^6.0.0",vitest:"^4.0.0"}};});var B=false;function V(e){B=e;}function w(){return B?true:be("LELEMON_DEBUG")==="true"}var f="[Lelemon]";function d(e,n){w()&&q("debug",e,n);}function D(e,n){w()&&q("info",e,n);}function E(e,n){q("warn",e,n);}function P(e,n,t,r){w()&&console.log(`${f} Captured trace: provider=${e} model=${n} duration=${t}ms status=${r}`);}function R(e,n){console.error(`${f} Failed to capture trace: provider=${e} error=${n.message}`);}function H(e){w()&&console.log(`${f} Wrapped client: provider=${e}`);}function W(e,n){w()&&console.log(`${f} Sending batch: count=${e} endpoint=${n}`);}function Y(e,n){w()&&console.log(`${f} Batch sent successfully: count=${e} duration=${n}ms`);}function X(e,n){let t=n instanceof Error?n.message:String(n);console.error(`${f} Batch send failed: count=${e} error=${t}`);}function Z(e,n,t){w()&&console.log(`${f} Request: ${e} ${n} (${t} bytes)`);}function J(e,n){w()&&console.log(`${f} 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(`${f} ${n}`,t):r(`${f} ${n}`);}function be(e){if(typeof process<"u"&&process.env)return process.env[e]}var he=10,ke=1e3,Te=1e4,_=class{config;queue=[];flushPromise=null;flushTimer=null;constructor(n){this.config={apiKey:n.apiKey,endpoint:n.endpoint,debug:n.debug,disabled:n.disabled,batchSize:n.batchSize??he,flushIntervalMs:n.flushIntervalMs??ke,requestTimeoutMs:n.requestTimeoutMs??Te};}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;Z(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),J(u.status,Date.now()-c),!u.ok){let x=await u.text().catch(()=>"Unknown error");throw new Error(`HTTP ${u.status}: ${x}`)}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 ve="@lelemondev/sdk",Ie="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 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 Ee(){try{if(typeof G<"u")return Q().version??"unknown"}catch{}return "unknown"}var C=null;function ne(e){if(!C){let t=Se(),r=xe();C={"telemetry.sdk.name":ve,"telemetry.sdk.version":Ee(),"telemetry.sdk.language":Ie},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 $={},b=null,j=null,te="https://api.lelemon.dev";function _e(e={}){$=e,e.debug&&V(true),j=ne(e.service),D("Initializing SDK",{endpoint:e.endpoint??te,debug:e.debug??false,disabled:e.disabled??false,telemetry:j}),b=re(e),b.isEnabled()?D("SDK initialized - tracing enabled"):d("SDK initialized - tracing disabled (no API key or explicitly disabled)");}function A(){return $}function O(){return j}function Ae(){return h().isEnabled()}function h(){return b||(b=re($)),b}async function Oe(){b&&await b.flush();}function re(e){let n=e.apiKey??Me("LELEMON_API_KEY");return !n&&!e.disabled&&E("No API key provided. Set apiKey in init() or LELEMON_API_KEY env var. Tracing disabled."),new _({apiKey:n??"",endpoint:e.endpoint??te,debug:e.debug??false,disabled:e.disabled??!n,batchSize:e.batchSize,flushIntervalMs:e.flushIntervalMs,requestTimeoutMs:e.requestTimeoutMs})}function Me(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=m(),o=v(),s=O(),i={provider:e.provider,model:e.model,input:L(e.input),rawResponse:e.rawResponse?I(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 P(e.provider,e.model,e.durationMs,e.status),n.enqueue(i),o}catch(n){R(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=m(),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: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};P(e.provider,e.model,e.durationMs,"error"),d("Error details",{message:e.error.message,stack:e.error.stack}),n.enqueue(s);}catch(n){R(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=m(),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:I(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){R("unknown",n instanceof Error?n:new Error(String(n)));}}var oe=1e5,De=["api_key","apikey","password","secret","authorization"],Pe=["access_token","auth_token","bearer_token","refresh_token","id_token","session_token"],qe=["inputtokens","outputtokens","totaltokens","prompttokens","completiontokens","cachereadtokens","cachewritetokens","cachereadinputtokens","cachewriteinputtokens","reasoningtokens"],se={emails:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,phones:/\b\d{9,}\b/g};function ue(){return A().redaction??{}}function je(e){let n=e.toLowerCase();return qe.includes(n)?false:!!(De.some(r=>n.includes(r))||Pe.some(r=>n.includes(r))||(ue().keys??[]).some(r=>n.includes(r.toLowerCase())))}function $e(e){let n=ue(),t=e;for(let r of n.patterns??[])r.lastIndex=0,t=t.replace(r,"[REDACTED]");return n.emails&&(t=t.replace(se.emails,"[EMAIL]")),n.phones&&(t=t.replace(se.phones,"[PHONE]")),t}function L(e){return I(e,0)}function I(e,n){if(n>10)return "[max depth exceeded]";if(e==null)return e;if(typeof e=="string"){let t=$e(e);return t.length>oe&&(t=t.slice(0,oe)+"...[truncated]"),t}if(typeof e=="number"||typeof e=="boolean")return e;if(Array.isArray(e))return e.map(t=>I(t,n+1));if(typeof e=="object"){let t={};for(let[r,o]of Object.entries(e))je(r)?t[r]="[REDACTED]":t[r]=I(o,n+1);return t}return String(e)}var z=Symbol.for("@lelemondev/sdk:traceStorage");function Ke(){let e=globalThis;return e[z]||(e[z]=new async_hooks.AsyncLocalStorage),e[z]}var ce=Ke();function v(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function m(){return ce.getStore()}function F(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 Le(e){let n=m();if(n)return e&&n.pendingToolCalls.has(e)?n.pendingToolCalls.get(e):n.currentSpanId}function ze(e){let n=m();n&&n.pendingToolCalls.delete(e);}async function Fe(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,style:t.style,pendingToolCalls:new Map};return ce.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{Be(i,c?void 0:a,c);}})}var Ue=["text","content","message","output","response","result","answer"];function Ge(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 Ue)if(o in r&&typeof r[o]=="string")return r[o];return e}function Be(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:Ge(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,...e.style?{_style:e.style}:{}},tags:e.tags??o.tags};d(`Sending root span: ${e.name}`,{durationMs:s,hasError:!!t}),r.enqueue(a);}function Ve(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=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.style?{_style:e.style}:{}}}),e.toolCallId&&ze(e.toolCallId);}var p="openai";function de(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 le(e){return async function(...t){let r=Date.now(),o=t[0]||{},s=o.stream===true;try{let i=await e(...t);if(s&&pe(i))return He(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=we(c);l.length>0&&F(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 pe(e){return e!=null&&typeof e[Symbol.asyncIterator]=="function"}async function*He(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 x=u?.choices?.[0]?.delta?.tool_calls;if(x)for(let g of x){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=we(r);l.length>0&&F(l,u);}}}}function fe(e){return async function(...t){let r=Date.now(),o=t[0]||{},s=o.stream===true;try{let i=await e(...t);if(s&&pe(i))return We(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*We(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 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.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 we(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 $n(e,n){return n&&ae(n),A().disabled?(d("Tracing disabled, returning unwrapped client"),e):de(e)?(H("openai"),Xe(e)):(E("Client is not an OpenAI client. Use @lelemondev/sdk/openai only with OpenAI SDK."),e)}function Xe(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"?Ze(s):r==="responses"&&s&&typeof s=="object"?Qe(s):r==="completions"&&s&&typeof s=="object"?en(s):r==="embeddings"&&s&&typeof s=="object"?nn(s):s}})}function Ze(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="completions"&&o&&typeof o=="object"?Je(o):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"?le(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"?fe(o.bind(n)):o}})}function en(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 nn(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}})}
|
|
3
3
|
exports.captureSpan=K;exports.flush=Oe;exports.getTraceContext=m;exports.init=_e;exports.isEnabled=Ae;exports.observe=$n;exports.span=Ve;exports.trace=Fe;//# sourceMappingURL=openai.js.map
|
|
4
4
|
//# sourceMappingURL=openai.js.map
|
package/dist/openai.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import {AsyncLocalStorage}from'async_hooks';/* @lelemondev/sdk - LLM Observability */
|
|
2
|
-
var U=(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 we=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var J=we((an,Te)=>{Te.exports={name:"@lelemondev/sdk",version:"0.10.0",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"},"./google-genai":{types:"./dist/google-genai.d.ts",import:"./dist/google-genai.mjs",require:"./dist/google-genai.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"],"google-genai":["./dist/google-genai.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/genai":"^1.0.0","@google/generative-ai":"^0.24.1","@anthropic-ai/sdk":"^0.82.0","@types/node":"^22.0.0","@vitest/coverage-v8":"^4.0.0",dotenv:"^17.2.3",openai:"^6.15.0",tsup:"^8.5.1",vite:"^6.0.0",typedoc:"^0.28.18",typescript:"^6.0.0",vitest:"^4.0.0"}};});var G=false;function B(e){G=e;}function w(){return G?true:ye("LELEMON_DEBUG")==="true"}var f="[Lelemon]";function d(e,n){w()&&P("debug",e,n);}function M(e,n){w()&&P("info",e,n);}function x(e,n){P("warn",e,n);}function D(e,n,t,r){w()&&console.log(`${f} Captured trace: provider=${e} model=${n} duration=${t}ms status=${r}`);}function E(e,n){console.error(`${f} Failed to capture trace: provider=${e} error=${n.message}`);}function V(e){w()&&console.log(`${f} Wrapped client: provider=${e}`);}function H(e,n){w()&&console.log(`${f} Sending batch: count=${e} endpoint=${n}`);}function W(e,n){w()&&console.log(`${f} Batch sent successfully: count=${e} duration=${n}ms`);}function Y(e,n){let t=n instanceof Error?n.message:String(n);console.error(`${f} Batch send failed: count=${e} error=${t}`);}function X(e,n,t){w()&&console.log(`${f} Request: ${e} ${n} (${t} bytes)`);}function Z(e,n){w()&&console.log(`${f} Response: status=${e} duration=${n}ms`);}function P(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 ye(e){if(typeof process<"u"&&process.env)return process.env[e]}var be=10,he=1e3,ke=1e4,R=class{config;queue=[];flushPromise=null;flushTimer=null;constructor(n){this.config={apiKey:n.apiKey,endpoint:n.endpoint,debug:n.debug,disabled:n.disabled,batchSize:n.batchSize??be,flushIntervalMs:n.flushIntervalMs??he,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();H(n.length,`${this.config.endpoint}/api/v1/ingest`);try{await this.request("POST","/api/v1/ingest",{events:n}),W(n.length,Date.now()-t);}catch(r){Y(n.length,r);}}async request(n,t,r){let o=`${this.config.endpoint}${t}`,s=new AbortController,i=r?JSON.stringify(r):void 0;X(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),Z(u.status,Date.now()-c),!u.ok){let S=await u.text().catch(()=>"Unknown error");throw new Error(`HTTP ${u.status}: ${S}`)}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 Ce="@lelemondev/sdk",ve="nodejs";function Ie(){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 Se(){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 U<"u")return J().version??"unknown"}catch{}return "unknown"}var T=null;function ee(e){if(!T){let t=Ie(),r=Se();T={"telemetry.sdk.name":Ce,"telemetry.sdk.version":xe(),"telemetry.sdk.language":ve},t&&(T["process.runtime.name"]=t.name,T["process.runtime.version"]=t.version),r&&(T["os.type"]=r);}let n={...T};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={},y=null,q=null,ne="https://api.lelemon.dev";function Re(e={}){j=e,e.debug&&B(true),q=ee(e.service),M("Initializing SDK",{endpoint:e.endpoint??ne,debug:e.debug??false,disabled:e.disabled??false,telemetry:q}),y=te(e),y.isEnabled()?M("SDK initialized - tracing enabled"):d("SDK initialized - tracing disabled (no API key or explicitly disabled)");}function _(){return j}function A(){return q}function _e(){return b().isEnabled()}function b(){return y||(y=te(j)),y}async function Ae(){y&&await y.flush();}function te(e){let n=e.apiKey??Oe("LELEMON_API_KEY");return !n&&!e.disabled&&x("No API key provided. Set apiKey in init() or LELEMON_API_KEY env var. Tracing disabled."),new R({apiKey:n??"",endpoint:e.endpoint??ne,debug:e.debug??false,disabled:e.disabled??!n,batchSize:e.batchSize,flushIntervalMs:e.flushIntervalMs,requestTimeoutMs:e.requestTimeoutMs})}function Oe(e){if(typeof process<"u"&&process.env)return process.env[e]}var $=Symbol.for("@lelemondev/sdk:globalContext");function se(){let e=globalThis;return e[$]||(e[$]={context:{}}),e[$]}function ie(e){se().context=e,d("Global context updated",e);}function I(){return se().context}function h(e){try{let n=b();if(!n.isEnabled()){d("Transport disabled, skipping trace capture");return}let t=I(),r=m(),o=C(),s=A(),i={provider:e.provider,model:e.model,input:K(e.input),rawResponse:e.rawResponse?v(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 D(e.provider,e.model,e.durationMs,e.status),n.enqueue(i),o}catch(n){E(e.provider,n instanceof Error?n:new Error(String(n)));return}}function k(e){try{let n=b();if(!n.isEnabled()){d("Transport disabled, skipping error capture");return}let t=I(),r=m(),o=A(),s={provider:e.provider,model:e.model,input:K(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:C(),parentSpanId:r?.currentSpanId,metadata:{...t.metadata,...e.metadata,...r?{_traceName:r.name}:{},...o?{_telemetry:o}:{}},tags:t.tags};D(e.provider,e.model,e.durationMs,"error"),d("Error details",{message:e.error.message,stack:e.error.stack}),n.enqueue(s);}catch(n){E(e.provider,n instanceof Error?n:new Error(String(n)));}}function N(e){try{let n=b();if(!n.isEnabled()){d("Transport disabled, skipping span capture");return}let t=I(),r=m(),o=e.metadata?._traceId,s=e.metadata?._parentSpanId,i=A(),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:K(e.input),output:v(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: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){E("unknown",n instanceof Error?n:new Error(String(n)));}}var re=1e5,Me=["api_key","apikey","password","secret","authorization"],De=["access_token","auth_token","bearer_token","refresh_token","id_token","session_token"],Pe=["inputtokens","outputtokens","totaltokens","prompttokens","completiontokens","cachereadtokens","cachewritetokens","cachereadinputtokens","cachewriteinputtokens","reasoningtokens"],oe={emails:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,phones:/\b\d{9,}\b/g};function ae(){return _().redaction??{}}function qe(e){let n=e.toLowerCase();return Pe.includes(n)?false:!!(Me.some(r=>n.includes(r))||De.some(r=>n.includes(r))||(ae().keys??[]).some(r=>n.includes(r.toLowerCase())))}function je(e){let n=ae(),t=e;for(let r of n.patterns??[])r.lastIndex=0,t=t.replace(r,"[REDACTED]");return n.emails&&(t=t.replace(oe.emails,"[EMAIL]")),n.phones&&(t=t.replace(oe.phones,"[PHONE]")),t}function K(e){return v(e,0)}function v(e,n){if(n>10)return "[max depth exceeded]";if(e==null)return e;if(typeof e=="string"){let t=je(e);return t.length>re&&(t=t.slice(0,re)+"...[truncated]"),t}if(typeof e=="number"||typeof e=="boolean")return e;if(Array.isArray(e))return e.map(t=>v(t,n+1));if(typeof e=="object"){let t={};for(let[r,o]of Object.entries(e))qe(r)?t[r]="[REDACTED]":t[r]=v(o,n+1);return t}return String(e)}var L=Symbol.for("@lelemondev/sdk:traceStorage");function Ne(){let e=globalThis;return e[L]||(e[L]=new AsyncLocalStorage),e[L]}var ue=Ne();function C(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function m(){return ue.getStore()}function z(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 Ke(e){let n=m();if(n)return e&&n.pendingToolCalls.has(e)?n.pendingToolCalls.get(e):n.currentSpanId}function Le(e){let n=m();n&&n.pendingToolCalls.delete(e);}async function ze(e,n){let t=typeof e=="string"?{name:e}:e,r=m(),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,outputKey:t.outputKey,outputTransform:t.outputTransform,sessionId:t.sessionId,userId:t.userId,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{Ge(i,c?void 0:a,c);}})}var Fe=["text","content","message","output","response","result","answer"];function Ue(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 Fe)if(o in r&&typeof r[o]=="string")return r[o];return e}function Ge(e,n,t){let r=b();if(!r.isEnabled()){d("Transport disabled, skipping root span");return}let o=I(),s=Date.now()-e.startTime,i=t?null:Ue(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 Be(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=Ke(e.toolCallId);N({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&&Le(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=h({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 k({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 S=u?.choices?.[0]?.delta?.tool_calls;if(S)for(let g of S){a.has(g.index)||a.set(g.index,{id:"",function:{name:"",arguments:""}});let O=a.get(g.index);g.id&&(O.id=g.id),g.function?.name&&(O.function.name=g.function.name),g.function?.arguments&&(O.function.arguments+=g.function.arguments);}let F=u?.choices?.[0]?.finish_reason;F&&(r.choices[0].finish_reason=F),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)k({provider:p,model:n.model||"unknown",input:n.messages,error:o,durationMs:c,streaming:true});else {let u=h({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 He(i,o,r);let a=Date.now()-r;return h({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 k({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*He(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?k({provider:p,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},error:s,durationMs:i,streaming:true}):h({provider:p,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},rawResponse:o||{streamEvents:r},durationMs:i,status:"success",streaming:true});}}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 h({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 k({provider:p,model:o.model||"unknown",input:o.prompt,error:s instanceof Error?s:new Error(String(s)),durationMs:i,streaming:false}),s}}}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 h({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 k({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 _n(e,n){return n&&ie(n),_().disabled?(d("Tracing disabled, returning unwrapped client"),e):ce(e)?(V("openai"),Ye(e)):(x("Client is not an OpenAI client. Use @lelemondev/sdk/openai only with OpenAI SDK."),e)}function Ye(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"?Xe(s):r==="responses"&&s&&typeof s=="object"?Je(s):r==="completions"&&s&&typeof s=="object"?Qe(s):r==="embeddings"&&s&&typeof s=="object"?en(s):s}})}function Xe(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="completions"&&o&&typeof o=="object"?Ze(o):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"?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"?fe(o.bind(n)):o}})}function en(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}})}
|
|
2
|
+
var U=(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 we=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports);var J=we((an,Te)=>{Te.exports={name:"@lelemondev/sdk",version:"0.10.1",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"},"./google-genai":{types:"./dist/google-genai.d.ts",import:"./dist/google-genai.mjs",require:"./dist/google-genai.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"],"google-genai":["./dist/google-genai.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/genai":"^1.0.0","@google/generative-ai":"^0.24.1","@anthropic-ai/sdk":"^0.82.0","@types/node":"^22.0.0","@vitest/coverage-v8":"^4.0.0",dotenv:"^17.2.3",openai:"^6.15.0",tsup:"^8.5.1",vite:"^6.0.0",typedoc:"^0.28.18",typescript:"^6.0.0",vitest:"^4.0.0"}};});var G=false;function B(e){G=e;}function w(){return G?true:ye("LELEMON_DEBUG")==="true"}var f="[Lelemon]";function d(e,n){w()&&P("debug",e,n);}function M(e,n){w()&&P("info",e,n);}function x(e,n){P("warn",e,n);}function D(e,n,t,r){w()&&console.log(`${f} Captured trace: provider=${e} model=${n} duration=${t}ms status=${r}`);}function E(e,n){console.error(`${f} Failed to capture trace: provider=${e} error=${n.message}`);}function V(e){w()&&console.log(`${f} Wrapped client: provider=${e}`);}function H(e,n){w()&&console.log(`${f} Sending batch: count=${e} endpoint=${n}`);}function W(e,n){w()&&console.log(`${f} Batch sent successfully: count=${e} duration=${n}ms`);}function Y(e,n){let t=n instanceof Error?n.message:String(n);console.error(`${f} Batch send failed: count=${e} error=${t}`);}function X(e,n,t){w()&&console.log(`${f} Request: ${e} ${n} (${t} bytes)`);}function Z(e,n){w()&&console.log(`${f} Response: status=${e} duration=${n}ms`);}function P(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 ye(e){if(typeof process<"u"&&process.env)return process.env[e]}var be=10,he=1e3,ke=1e4,R=class{config;queue=[];flushPromise=null;flushTimer=null;constructor(n){this.config={apiKey:n.apiKey,endpoint:n.endpoint,debug:n.debug,disabled:n.disabled,batchSize:n.batchSize??be,flushIntervalMs:n.flushIntervalMs??he,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();H(n.length,`${this.config.endpoint}/api/v1/ingest`);try{await this.request("POST","/api/v1/ingest",{events:n}),W(n.length,Date.now()-t);}catch(r){Y(n.length,r);}}async request(n,t,r){let o=`${this.config.endpoint}${t}`,s=new AbortController,i=r?JSON.stringify(r):void 0;X(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),Z(u.status,Date.now()-c),!u.ok){let S=await u.text().catch(()=>"Unknown error");throw new Error(`HTTP ${u.status}: ${S}`)}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 Ce="@lelemondev/sdk",ve="nodejs";function Ie(){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 Se(){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 U<"u")return J().version??"unknown"}catch{}return "unknown"}var T=null;function ee(e){if(!T){let t=Ie(),r=Se();T={"telemetry.sdk.name":Ce,"telemetry.sdk.version":xe(),"telemetry.sdk.language":ve},t&&(T["process.runtime.name"]=t.name,T["process.runtime.version"]=t.version),r&&(T["os.type"]=r);}let n={...T};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={},y=null,q=null,ne="https://api.lelemon.dev";function Re(e={}){j=e,e.debug&&B(true),q=ee(e.service),M("Initializing SDK",{endpoint:e.endpoint??ne,debug:e.debug??false,disabled:e.disabled??false,telemetry:q}),y=te(e),y.isEnabled()?M("SDK initialized - tracing enabled"):d("SDK initialized - tracing disabled (no API key or explicitly disabled)");}function _(){return j}function A(){return q}function _e(){return b().isEnabled()}function b(){return y||(y=te(j)),y}async function Ae(){y&&await y.flush();}function te(e){let n=e.apiKey??Oe("LELEMON_API_KEY");return !n&&!e.disabled&&x("No API key provided. Set apiKey in init() or LELEMON_API_KEY env var. Tracing disabled."),new R({apiKey:n??"",endpoint:e.endpoint??ne,debug:e.debug??false,disabled:e.disabled??!n,batchSize:e.batchSize,flushIntervalMs:e.flushIntervalMs,requestTimeoutMs:e.requestTimeoutMs})}function Oe(e){if(typeof process<"u"&&process.env)return process.env[e]}var $=Symbol.for("@lelemondev/sdk:globalContext");function se(){let e=globalThis;return e[$]||(e[$]={context:{}}),e[$]}function ie(e){se().context=e,d("Global context updated",e);}function I(){return se().context}function h(e){try{let n=b();if(!n.isEnabled()){d("Transport disabled, skipping trace capture");return}let t=I(),r=m(),o=C(),s=A(),i={provider:e.provider,model:e.model,input:K(e.input),rawResponse:e.rawResponse?v(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 D(e.provider,e.model,e.durationMs,e.status),n.enqueue(i),o}catch(n){E(e.provider,n instanceof Error?n:new Error(String(n)));return}}function k(e){try{let n=b();if(!n.isEnabled()){d("Transport disabled, skipping error capture");return}let t=I(),r=m(),o=A(),s={provider:e.provider,model:e.model,input:K(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:C(),parentSpanId:r?.currentSpanId,metadata:{...t.metadata,...e.metadata,...r?{_traceName:r.name}:{},...o?{_telemetry:o}:{}},tags:t.tags};D(e.provider,e.model,e.durationMs,"error"),d("Error details",{message:e.error.message,stack:e.error.stack}),n.enqueue(s);}catch(n){E(e.provider,n instanceof Error?n:new Error(String(n)));}}function N(e){try{let n=b();if(!n.isEnabled()){d("Transport disabled, skipping span capture");return}let t=I(),r=m(),o=e.metadata?._traceId,s=e.metadata?._parentSpanId,i=A(),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:K(e.input),output:v(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: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){E("unknown",n instanceof Error?n:new Error(String(n)));}}var re=1e5,Me=["api_key","apikey","password","secret","authorization"],De=["access_token","auth_token","bearer_token","refresh_token","id_token","session_token"],Pe=["inputtokens","outputtokens","totaltokens","prompttokens","completiontokens","cachereadtokens","cachewritetokens","cachereadinputtokens","cachewriteinputtokens","reasoningtokens"],oe={emails:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,phones:/\b\d{9,}\b/g};function ae(){return _().redaction??{}}function qe(e){let n=e.toLowerCase();return Pe.includes(n)?false:!!(Me.some(r=>n.includes(r))||De.some(r=>n.includes(r))||(ae().keys??[]).some(r=>n.includes(r.toLowerCase())))}function je(e){let n=ae(),t=e;for(let r of n.patterns??[])r.lastIndex=0,t=t.replace(r,"[REDACTED]");return n.emails&&(t=t.replace(oe.emails,"[EMAIL]")),n.phones&&(t=t.replace(oe.phones,"[PHONE]")),t}function K(e){return v(e,0)}function v(e,n){if(n>10)return "[max depth exceeded]";if(e==null)return e;if(typeof e=="string"){let t=je(e);return t.length>re&&(t=t.slice(0,re)+"...[truncated]"),t}if(typeof e=="number"||typeof e=="boolean")return e;if(Array.isArray(e))return e.map(t=>v(t,n+1));if(typeof e=="object"){let t={};for(let[r,o]of Object.entries(e))qe(r)?t[r]="[REDACTED]":t[r]=v(o,n+1);return t}return String(e)}var L=Symbol.for("@lelemondev/sdk:traceStorage");function Ne(){let e=globalThis;return e[L]||(e[L]=new AsyncLocalStorage),e[L]}var ue=Ne();function C(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,11)}`}function m(){return ue.getStore()}function z(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 Ke(e){let n=m();if(n)return e&&n.pendingToolCalls.has(e)?n.pendingToolCalls.get(e):n.currentSpanId}function Le(e){let n=m();n&&n.pendingToolCalls.delete(e);}async function ze(e,n){let t=typeof e=="string"?{name:e}:e,r=m(),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,outputKey:t.outputKey,outputTransform:t.outputTransform,sessionId:t.sessionId,userId:t.userId,style:t.style,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{Ge(i,c?void 0:a,c);}})}var Fe=["text","content","message","output","response","result","answer"];function Ue(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 Fe)if(o in r&&typeof r[o]=="string")return r[o];return e}function Ge(e,n,t){let r=b();if(!r.isEnabled()){d("Transport disabled, skipping root span");return}let o=I(),s=Date.now()-e.startTime,i=t?null:Ue(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,...e.style?{_style:e.style}:{}},tags:e.tags??o.tags};d(`Sending root span: ${e.name}`,{durationMs:s,hasError:!!t}),r.enqueue(a);}function Be(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=Ke(e.toolCallId);N({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.style?{_style:e.style}:{}}}),e.toolCallId&&Le(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=h({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 k({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 S=u?.choices?.[0]?.delta?.tool_calls;if(S)for(let g of S){a.has(g.index)||a.set(g.index,{id:"",function:{name:"",arguments:""}});let O=a.get(g.index);g.id&&(O.id=g.id),g.function?.name&&(O.function.name=g.function.name),g.function?.arguments&&(O.function.arguments+=g.function.arguments);}let F=u?.choices?.[0]?.finish_reason;F&&(r.choices[0].finish_reason=F),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)k({provider:p,model:n.model||"unknown",input:n.messages,error:o,durationMs:c,streaming:true});else {let u=h({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 He(i,o,r);let a=Date.now()-r;return h({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 k({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*He(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?k({provider:p,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},error:s,durationMs:i,streaming:true}):h({provider:p,model:n.model||"unknown",input:{instructions:n.instructions,input:n.input},rawResponse:o||{streamEvents:r},durationMs:i,status:"success",streaming:true});}}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 h({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 k({provider:p,model:o.model||"unknown",input:o.prompt,error:s instanceof Error?s:new Error(String(s)),durationMs:i,streaming:false}),s}}}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 h({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 k({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 _n(e,n){return n&&ie(n),_().disabled?(d("Tracing disabled, returning unwrapped client"),e):ce(e)?(V("openai"),Ye(e)):(x("Client is not an OpenAI client. Use @lelemondev/sdk/openai only with OpenAI SDK."),e)}function Ye(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"?Xe(s):r==="responses"&&s&&typeof s=="object"?Je(s):r==="completions"&&s&&typeof s=="object"?Qe(s):r==="embeddings"&&s&&typeof s=="object"?en(s):s}})}function Xe(e){return new Proxy(e,{get(n,t,r){let o=Reflect.get(n,t,r);return t==="completions"&&o&&typeof o=="object"?Ze(o):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"?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"?fe(o.bind(n)):o}})}function en(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}})}
|
|
3
3
|
export{N as captureSpan,Ae as flush,m as getTraceContext,Re as init,_e as isEnabled,_n as observe,Be as span,ze as trace};//# sourceMappingURL=openai.mjs.map
|
|
4
4
|
//# sourceMappingURL=openai.mjs.map
|
package/dist/openrouter.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-DOj4Z9MB.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-DOj4Z9MB.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* OpenRouter Provider Entry Point
|
package/dist/openrouter.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-DOj4Z9MB.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-DOj4Z9MB.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* OpenRouter Provider Entry Point
|