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